chore(objectui): bump the console pin past objectui c096f03 — it carries objectui#11611, #11614 and #11619, which unlock #21714, #21765 and #21768 #21772
Description
Activity
- addedpriority:p2Medium: important, M3Medium: important, M3area:devpathThe road — create, dev, verify, publish/install, connect an agent, iterateThe road — create, dev, verify, publish/install, connect an agent, iterateand removed
on Oct 4, 2026 objectstack-fleet commented
on Oct 5, 2026 ContributorAuthorMore actionsClaim: 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 asGET /useranswers it; the card's assignee)
Branch:claude/issue-21772-objectui-pin-bump, cut frommain
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. - Lane: the card is idle since filing (17:54Z) and unclaimed in its lane, so the standing takeover order applies.
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.- Whatever the bump's own tooling regenerates.
- Test or fixture edits that a carried objectui change makes necessary.
- The PR lists every objectui change in the range, with its declared disposition, as chore(objectui): bump the console pin to 2e818d0b51ec (carries objectui#11466, #11574, #11578, #11581 and #11583) #21710 did, measured and not copied.
- Each declared-breaking change is named, with how this repo answers it. That includes feat(types,fields)!: camelCase the grid widget's eight field-level keys; the snake_case spellings are refused by name (objectui#11610) objectui#11614: the grid's eight snake_case field keys are renamed to camelCase and refused by name.
- Acceptance:
- CI and
Console Pin Gateare green; - a browser smoke of the record page feat(components): the record chrome draws the record's picture from the object's
imageField(objectui#11383) objectui#11619 changes; - the three cards it unlocks (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) named in the PR body.
Container & model:M,mode:subagent,model: opus
Clause-②: no
Why no: a pin bump publishes nopackages/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.
- CI and
objectstack-fleet commented
on Oct 5, 2026 ContributorAuthorMore actionsos-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 commented
on Oct 5, 2026 ContributorAuthorMore actionsContract review
Served-tier:
CONTRACT_REVIEW_TIER
Head-sha:4b9519ea23d31a3b7eb688f32bb52a895f8f7533
Local-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.- 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.tsdiffers in exactly one AST node: theFormField.span.describe()string, where2e818d0b51ecbecomes9dfaca654311.- 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.
- The enum,
- In the six step-18 entries only the
reasonstring changes.id,surface,replacementandacceptanceCriteriaare untouched, and the AST differences are string-literal lines only.
The
.describe()change andview.mdx.- The span sha is the only describe change.
view.mdxmakes the same one-token edit in bothspanrows (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.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.- The three in the
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:- lines 752, 614-615, 1310, 1318-1319, 1568, 1584, 1669 and 1693 moved with their text unchanged;
: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.- 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,onQuickAddandonCardClick: 2, 2 and 11.
- At the head, every asserting-form
.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.count at 2e818d0b5at 9dfaca654tracked 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.configRequiredstrings did not change.
The manifest, its record and the lockstep file.
sdui.manifest.jsondrops exactly 11required: true:- nine
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.
- nine
- It also rewrites the master-detail
fieldsdescription for feat(cli): i18n coverage + extract gain the flow/screen bucket #11615. - Each change matches the registration source at
9dfaca654. - No
required: trueis 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():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. - 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,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.
- The range
2e818d0b51ec..9dfaca654311is right:- 17 commits and 0 merges;
- 24 added changesets, with 21 minor and 8 patch package lines and no major;
- every commit carries a changeset.
- Four changesets are marked BREAKING (fix(console,cli): stop printing install instructions for packages nobody can install #11266, lint:
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. - The three unlock commits are ancestors of
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). - The answer to objectui#11614 is honest:
- The spec's runtime form field is a
strictObject. It refuses the eight snake_case keys by name (OBJECT_FORM_GRID_WIDGET_SNAKE_KEYS). - It does not declare
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. - No snake_case grid key is authored anywhere in
examples/,packages/orapps/. - No code imports
@object-ui/types, andPartialSchemaappears only in the changeset.
- The spec's runtime form field is a
- 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
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.
- The PR body and the console changeset say the refusal's guidance "names objectui#11610". Only the source comment does (
Check-runs. At 2026-10-05T02:03Z, 22 of the 33 check-runs are
success,Console Pin Gateamong them. These are not yetsuccess:- 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.
② Semver level
console-9dfaca654311.md:@objectstack/consoleminor.- This matches the highest level objectui declared (minor; no major) and chore(objectui): bump the console pin to 2e818d0b51ec (carries objectui#11466, #11574, #11578, #11581 and #11583) #21710's
console-2e818d0b51ec.md. - Its ADR-0087 marker,
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. - The manifest widening, 11 inputs that are no longer required, ships in the console dist, and a minor covers it.
- This matches the highest level objectui declared (minor; no major) and chore(objectui): bump the console pin to 2e818d0b51ec (carries objectui#11466, #11574, #11578, #11581 and #11583) #21710's
objectui-pin-citations-9dfaca654311.md:@objectstack/specpatch.- The spec publishes one re-pointed describe string and six re-pointed migration
reasonstrings, plus comments. - That is the same shape and level as chore(objectui): bump the console pin to 2e818d0b51ec (carries objectui#11466, #11574, #11578, #11581 and #11583) #21710's
objectui-pin-citations-2e818d0b51ec.md. - Its line "No key, default, enum member or export moves" holds.
- The spec publishes one re-pointed describe string and six re-pointed migration
Clause-②: nois correct.- No
packages/specaccept 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.
- No
③ Boundary flags
- Retargeting the snake_case prescription belongs to spec(ui): the
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.- At this pin, the shipped refusal text "come in once the widget reads a camelCase spelling" describes a condition that now holds.
- Changing that text is a spec change, so it belongs with the declaration. spec(ui): the
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. - If 17.7.0 is cut with this pin and without spec(ui): the
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.
- No
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. - Anchors outside the citation gate's population: escalated, non-blocking, no carrier.
- Several records are dated reads at
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.- Recommend a follow-up card to re-point these anchors or bring them into
check:objectui-pin-citations.
- Several records are dated reads at
- 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.
Implemented-by:
claude/issue-21772-objectui-pin-bump
Reviewed-by:session_016tKoy8NJa35Yih1FdzrVmnVERDICT: PASS
Generated by Claude Code
objectstack-fleet commented
on Oct 5, 2026 ContributorAuthorMore actionsACCEPT — 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):
- Form: draft, base
main, first lineFixes #21772,Clause-②: no. - Scope: 22 files, +567 / −193, all on the claimed surface:
.objectui-sha;- two changesets:
@objectstack/consoleminor with the ADR-0087not-requireddisposition, and@objectstack/specpatch; - the regenerated SDUI manifest, its record and the lockstep file;
- pin-citation re-points and re-measured counts in
packages/spec, withview.mdxregenerated. - Not governed. ⛔ No version, CHANGELOG or release-workflow file, and nothing of PR chore: version packages #21352.
- Contract review: PASS
5986881331,Served-tier: CONTRACT_REVIEW_TIER,Local-runs: none.
What lands, as the record judged it:
- The range
2e818d0b51ec..9dfaca654311: 17 commits, 24 changesets, no major.- It carries the three unlock commits: feat(app-shell): register the ref:dataset spec-form widget, fed by the report inspector's dataset catalog (objectui#11601) objectui#11611
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. - Five declared-breaking changes are each named with this repo's answer.
- It carries the three unlock commits: feat(app-shell): register the ref:dataset spec-form widget, fed by the report inspector's dataset catalog (objectui#11601) objectui#11611
- The spec surface is citation-only.
- With comments stripped, the ASTs are unchanged, apart from one
.describe()sha (FormField.span) and six migrationreasonstrings. - No accept set, key, default, optionality, refinement or export moves.
Clause-②: nois correct.
- With comments stripped, the ASTs are unchanged, apart from one
- The manifest drops exactly 11
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. - The objectui#11614 interim is disclosed honestly. The spec refuses the snake_case grid keys by name, and the camelCase keys stay undeclared until spec(ui): the
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. - 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.
Follow-ups:
- spec(ui): the
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. - spec(liveness):
object.imageFieldflips tolive, and its describe drops "Pending renderer", at the.objectui-shabump that carries objectui#11383 #21765 owns a showcase example that declaresimageField. - devx(pin-citations): objectui line anchors in
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:
- "names objectui#11610" is in the source comment only.
- The PR body's list of showcase form types is incomplete.
- The dated note
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
- Form: draft, base
objectstack-fleet commented
on Oct 5, 2026 ContributorAuthorMore actionsLanded: PR #21800 →
1354e7bccaonmain(2026-10-05T03:06Z)Director seat, summon #32 · session
session_016tKoy8NJa35Yih1FdzrVmn· holder of claim5986229732.- Merged through the merge queue at 2026-10-05T03:05Z.
Fixes #21772closed this cardcompleted.pm:dispatchedis removed in the same step. - Read back on
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. - Unblocked in the same act (
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. - Follow-up: devx(pin-citations): objectui line anchors in
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. - 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.
Generated by Claude Code
- Merged through the merge queue at 2026-10-05T03:05Z.
- added 3 commits that reference this issue
on Oct 7, 2026
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):mainreportFormjoined-blockdatasetrow)ref:datasetwidgetb508ac50d92abec3a9object.imageField→live)c096f03.objectui-shais2e818d0b51ec(read in this round). objectuimainisc096f032793d, 14 commits ahead, and carries all three.Change
.objectui-shato objectuimainat or afterc096f03, through the repo's pin tooling.organizationsPkg字面量尚未消费 PLATFORM_PLUGIN_WIRED_RUNTIMES 的 key — roster 落地后的一行闭环 #11614's snake_case → camelCase rename of the grid keys is one: objectui refuses the old spellings by name.Console Pin Gateare green, with a browser smoke of the record page that fix(plugin-auth): declare the settings ordering edge so saved auth settings apply at boot #11619 changes.Order against the release
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.Generated by Claude Code