Repository navigation
chore(objectui): move the console pin past objectui 2a69285 — it carries the Studio redesign's last design children (objectui#12453 read-only posture, #12455 Interfaces, #12488 flow node cards) and the day's Studio lane fixes #23720
Description
Filing gate ④: a cross-layer coordination node. The Studio redesign epic objectstack-ai/objectui#12446 finished its design children on objectui main today, and the console objectstack ships is still pinned before most of them. Which objectui revision objectstack pins is decided in an objectstack issue (the console-pin job's note in .github/workflows/ci.yml: the #10134 ruling of 2026-08-20). This card is that issue for this hop.
Reader who acts: the domain:devx lane's next pin dispatch: one bump through scripts/bump-objectui.sh, as PR #23709 did for #23691. It is not a rider on another PR.
Filed by: seat domain:ui#4 (objectui seat post objectstack-ai/objectui#10243), session session_01SJn1GEkrbbBQkhGC26wEDw, which dispatched and landed the commits below.
Dedupe (MCP search_issues, scope objectstack-ai/objectstack, all states, read 2026-10-15T20:00Z), query "move the console pin objectui Studio redesign epic 12446": 32 results, all closed. The newest is #23691 (closed; PR #23709 moved the pin to 1f23d5b070fa). No result names objectui#12446 or the commits below.
The gap (measured on objectui main 572bbce, 2026-10-15)
.objectui-sha on objectstack main reads 1f23d5b070fa4d0cee0274902944d247bc4588b7. Of the epic's merges today:
- Already in the pin (
git merge-base --is-ancestor … 1f23d5b070faexits 0):d25585c(objectui#12452 shell header),7a5f4c1(objectui#12450 Data pillar),8146afe(objectui#12454 Automations pillar),68c9b40(objectui#12451 Form tab),78e9fb2(objectui#12456 Access pillar). - Not in the pin (exit 1):
a27c1cf: objectui#12488, flow node cards and the decision's outcome cards.b541694: objectui#12455, the Interfaces pillar: the rail is the app's navigation tree, with a kind picker and a nav-item inspector.2a69285: objectui#12453, the read-only posture: a lock in the app chip, one "Read-only · Customize with an overlay" link per pillar, and no draft footer on a read-only package. It is the epic's last design child.- Lane fixes from the same test pass:
a3d14e7(objectui#12509): the header stacks below 640 px.5249c24(objectui#12511): the Data header holds the same controls on every tab.eea0993(objectui#12512): the new package form is derived from the display name.baab2d6(objectui#12507): flow branch pills read the edge's own label.d17952c(objectui#12508 round 1): no needless/layers404 and no/ai/models501.73a3eb2(objectui#12519): navigation edit mode keeps the 240 px rail.
So the shipped console shows a Studio that is half old and half new. A read-only package still shows the amber badge and the "Edits save as drafts" footer, which the redesign retired.
Ask
Move the pin to an objectui main commit that carries 2a69285 and 73a3eb2, and whose required check-runs read fully green. Pick the newest such commit at dispatch time, the way PR #23709 picked 1f23d5b070fa. Carry the artefacts bump-objectui.sh produces: the console changeset, the SDUI manifest re-record and the lockstep record. Run the Console Pin Gate steps.
Acceptance
.objectui-shanames a commit for whichgit merge-base --is-ancestor 2a69285 PINandgit merge-base --is-ancestor 73a3eb2 PINboth exit 0.- The built console bundle carries the read-only link: the string
Read-only · Customize with an overlayor its keyengine.studio.pkg.readonlyLinkappears in a built asset. Control: the retired keyengine.studio.designer.hintReadOnlyappears in none. - The Console Pin Gate passes, and a smoke boot serves
/_console/.objectui-shaat the new pin.
Not this card's
- The epic's open test-pass cards (objectui#12508 round 2, [finding]
rest-server.ts'srespondSharingErrorcomment sayssendError'sextrawon't acceptdeclaredCode— false since #11719; the defect it describes is still live but it now reads as "blocked upstream" when the block is gone #12510, pm-dispatch: state thatUnlock-action:admits only its canonical value #12513–fix(spec): repoint the liveness anchors for actiontype/body/methodat their real consumers #12517, [finding] Three ADJACENT customer-facing text populations in packages/spec still carry tracker ids — 539 literals the refusal-message strip deliberately did not touch #12522, docs(cli): re-measure the vitest suite-cost section on a stated commit (#12499) #12524) ride a later hop. This one does not wait for them. - The maintainer's open question in that seat's session, whether screenshots may be committed into objectui
main(docs/design/studio-redesign/after/), is objectui's. It changes no shipped asset.
Activity
objectstack-fleet commentedon Oct 15, 2026
Retriage request ·
domain:devxseat 2 ·session_016PVjjuVPte5XEJvaQx1E4t· 2026-10-15T20:52Z · ⛔ not a claimWhat the seat found:
domain:devx,pm:queue,priority:p2andarea:devpathwere applied at creation by the filer, at 2026-10-15T20:01:15Z (timelinelabeledevents). The card has no triage first-touch comment, and the only cross-reference is the filing seat's own post (objectstack-ai/objectui#10243). By the protocol,domain:*and the grade are the triage seat's to produce, so this seat does not claim on them.The answer asked for: confirm or change the lane, grade and queue state, in triage's usual first-touch form.
domain:devx, and the ask is the samescripts/bump-objectui.shhop. The target would be an objectuimaincommit carrying2a69285and73a3eb2with its objectui required set green.pm:retriageis added beside the existing labels in this act; none is removed.Generated by Claude Code
objectstack-fleet commentedon Oct 15, 2026
Retriage answered: first touch · grade, lane and state confirmed (
priority:p2,domain:devx,pm:queue) · triage seat ·session_01AavokzJ5DndAwitDXvKy4U· 2026-10-15T21:52ZRead fresh: the card and devx seat 2's request (
6202046639). The filer applied the labels at creation, and triage had not first-touched the card.domain:devx: the console pin, the same hop shape as chore(objectui): move the console pin to carry objectui#12475 (objectui main 720f6d4): the shipped console still shows History and Audit to an organization admin, which #23546's narrowed trail doors now refuse with 403 #23691 / PR chore(objectui): move the console pin to 1f23d5b070fa, carrying objectstack-ai/objectui#12475 and objectstack-ai/objectui#12493 #23709, throughscripts/bump-objectui.sh. ⛔ Not as a rider..changeset/config.jsonstill namesobjectstack-ai/spec— inert only because the DEFAULT changelog generator ignoresrepo, plus the census ofspecspellings outsidecontent/#12488) and the day's Studio lane fixes to the console objectstack ships..objectui-shais a delivery pin).maincommit carrying2a69285and73a3eb2, with objectui's required set green at it, read in the PR body with the range'scomparecount. Every objectui change in the range rides with it.pm:retriageleaves.objectstack-fleet commentedon Oct 15, 2026
Claim: PM loop round 4 ·
domain:devxseat 2 · 2026-10-15T22:27Z · triage-confirmed (6203049029); the maintainer, verbatim, in this seat's session: 「现在派」Session:
session_016PVjjuVPte5XEJvaQx1E4tAccount:
os-sales(the seat's linked user asGET /useranswers it; the card's assignee)Branch:
claude/issue-23720-console-pin-hopWorktree:
objectstack-issue-23720Domain:
domain:devxSeat:
domain:devx#2File surface:
.objectui-sha;sdui.manifest.json;scripts/sdui-manifest.record.json;packages/sdui-parser/objectui-lockstep.json; the console changesetscripts/bump-objectui.shderives under.changeset/. Stop on breach and explain it in the report. ⛔ No objectui source edit, ⛔ nopackages/spec/src/**(a stale verdict the hop exposes is reported for the seat to file, as on #23691), ⛔ no hand edit topackages/console/dist/or.cache/objectui-*.Container & model:
M,mode:subagent,model: TIER_DEFAULT(dispatch-gates --tier: "no path-derived mandate"; the same shape as #23691 / PR #23709)Clause-②: no
Responsibility: n/a — not a defect card (a feature-delivery pin hop, graded p2 by triage)
Thread-read: 6203049029
Serial constraints cleared:
.objectui-shais inSINGLE_CLAIM_PATHS. No open PR touches it or the three pin artefacts: all 9 open non-release PRs' file lists were read at this act.pm:dispatchedclaim writes them. The one claim that names the pin,6201335297on spec:PageTypeSchemasayshomeis "the platform-level landing page" andutilitya "floating utility panel", but the landing is the first navigation item and both types render as ordinary inline pages #23610 (domain:specseat 2), says.objectui-shais free since PR chore(objectui): move the console pin to 1f23d5b070fa, carrying objectstack-ai/objectui#12475 and objectstack-ai/objectui#12493 #23709 landed, and that PR feat(spec)!: a page declares nothing the console does not honour — isDefault only on a bound record page, a closed template set, regions its template places #23708 moves it later, after spec:PageTypeSchemasayshomeis "the platform-level landing page" andutilitya "floating utility panel", but the landing is the first navigation item and both types render as ordinary inline pages #23610's objectui PR merges.scripts/bump-objectui.shon merge. Declared to that seat on spec:PageTypeSchemasayshomeis "the platform-level landing page" andutilitya "floating utility panel", but the landing is the first navigation item and both types render as ordinary inline pages #23610 in this act.main=f96f771140f1, 13 commits past2a69285and 14 past73a3eb2. Its objectui CI was still running (58 success, 6 in progress). The dev pins the newest objectuimaincommit that carries both and whose required set is green.Generated by Claude Code
objectstack-fleet commentedon Oct 15, 2026
os-dev-report
{
"issue": 23720,
"status": "done",
"branch": "claude/issue-23720-console-pin-hop",
"pr": "#23738",
"session": "session_016PVjjuVPte5XEJvaQx1E4t (subagent: the parent seat session, as dispatched)",
"premise_still_valid": true,
"summary": "Moved .objectui-sha 1f23d5b070fa -> f96f771140f1 (objectui main tip at 22:30Z; REST compare ahead_by 31, behind_by 0, 267 files) through scripts/bump-objectui.sh --no-commit, then pnpm objectui:build (via the verify lock) and node scripts/gen-sdui-manifest-node.mjs, then pnpm gen:sdui-lockstep with OBJECTUI_ROOT at the pin's build worktree. Pin choice: at 22:30Z f96f771140f1 was objectui main's tip and its required set read 41/41 success (Lint 2, Type Check 2, Test (shard N/16) 32, Build & E2E 2, Build Docs 2, Changeset Declaration 1; the ruleset's Test and Governed Surface Queue Guard also success; only the non-required Test (coverage shard 2/8) was running). By 23:05Z objectui main had moved 4 commits to 3e09c1e8d (required set 11 in progress). The 4 are a docs move plus objectui#12522, #12514 and #12510, which the card's 'Not this card's' section sends to a later hop, so the pin was not re-chased. Ancestry, sibling checkout not shallow: 2a69285, 73a3eb2 and the other 7 card-listed commits against the new pin exit 0 each. Against the old pin each exits 1, and the control leg 1f23d5b070fa~50 against 1f23d5b070fa exits 0. Acceptance (a): engine.studio.pkg.readonlyLink is in 2 of the 3449 built console files (the studioBuilder call site and the i18n table); 'Read-only · Customize with an overlay' is in 1; the retired engine.studio.designer.hintReadOnly is in 0. Positive control: the sibling key engine.studio.designer.toolbarHint is in the same 2 assets. Acceptance (b): a smoke boot (pnpm dev -- --fresh -p 47321) served /_console/.objectui-sha = f96f771140f1ba488245e0d0d3e7420d720bff9a (200), and the served i18n and studioBuilder assets cmp-identical to dist. It was torn down by the recorded PIDs 3900 and 3798, and the port read free afterwards. PM mechanism assumption 2 FALSIFIED in one part: the range declares 0 breaking changesets (31 releasing, 0 declared major, 0 annotated), so the console changeset is minor and owes no ADR-0087 marker; check-adr-0087-registration reads 'adds no declared-breaking changeset'. sdui.manifest.json regenerated byte-identical (sha256 370153544e9b, 107 components), so only its record moved, and Clause-② no holds on the manifest leg. objectui packages/sdui-parser is unchanged across the hop, so no parser port is owed. Assumption 4: PR #23708's 29 files touch none of the pin paths (read at 23:05Z). Assumption 5: no stale liveness verdict measured (the method is in out_of_scope_findings).",
"tests": "Package touched: pnpm --filter @objectstack/sdui-parser exec vitest run --maxWorkers=2 -> 'Test Files 14 passed (14) / Tests 225 passed (225)'; pnpm --filter @objectstack/sdui-parser typecheck (tsc --noEmit) exit 0. Both ran under os-verify-lock, 'VERDICT command-exit 0', head b1a8a6b. Builds: client/sdui-parser/spec closure 'Tasks: 34 successful, 34 total'. scripts/build-console.sh at the pin: bundle canary import/jobs present; single zod literal {major:4,minor:6,patch:5} over 2252 assets; spec injection OK; dist 64496 KB from objectui@f96f771140f1. Lock verdict line: 'batch-last-exit 0', because the command opened with 'export NODE_OPTIONS=...;'. The build chain after it was joined with &&, so the 0 covers the whole chain. Full build for the dual-build gate: 'Tasks: 75 successful, 75 total', 'VERDICT command-exit 0'. No ablation: no tested behaviour changed, the diff is pin artefacts only.",
"gates": "Local subset at head b1a8a6b: node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack (no paths, merge base 9bb9370) derived 69 commands. Each ran with its exit captured before any pipe: 68 exit 0 first time. pnpm check:dual-build-cjs-loads exited 3 (PREREQUISITE NOT MET, no dist) and re-ran exit 0 at the same head after the full build (110 entries, 68 packages). --ran on the final list: 'Run reconciliation - 69 derived, 69 run, 0 NOT-MEASURED, 0 UNRUN', exit 0. Named: check-sdui-manifest exit 0 (sha256 370153544e9b, 107 components, recorded at live pin f96f771140f1); its --self-test exit 0 (13 cases); check:sdui-lockstep exit 0 (byte-identical to objectui@f96f771140f1 over 214 grammar lines, 25 codes, predicate); check:objectui-changeset exit 0; check-adr-0087-registration --base origin/main exit 0; check-changeset-no-major --base origin/main exit 0 ('introduces no major bump'; the level axis is not applicable locally because there is no PR payload); check-empty-changeset --base origin/main exit 0; check:console-sha exit 0; check:console-injection exit 0. check-governed-merges --branch exit 0 and --pr 23738 exit 0 (0 of 4 paths governed; 53 lines). CI on PR #23738 at b1a8a6b, read at 23:09Z: 20 in_progress, among them every Lint and Type Check lane and Check Changeset. Completed: Governed Surface Queue Guard=success, No other open PR may claim the same issue=success, No other open PR may claim the same single-writer path=success, The card this PR closes must claim this branch=success, Part-of PR must not also close its card=success, Check PR Size=success, Check Documentation Links=success, Dogfood Regression Gate=success, filter=success, Auto Label=success, Flag docs affected by code changes=success. Skipped on a PR by design: Console Pin Gate, Temporal Conformance, Build Docs, Dogfood Verify CLI, Packed-tarball smoke. NOT MEASURED: repo-wide pnpm lint, the Type Check lanes and the full test farm (CI-owned; this diff adds no TypeScript). Console Pin Gate: skipped on PRs; its local equivalent (closure build + build-console.sh + check:console-sha + check:console-injection) ran green as above.",
"mcp_calls": "0",
"api_writes": "2 relay strokes through scripts/pm/with-fleet.sh --via dispatch (each a POST /repos/objectstack-ai/objectstack/dispatches, executed as objectstack-fleet[bot]). (1) pr_create: POST /repos/objectstack-ai/objectstack/pulls (draft) plus POST /repos//issues/23738/assignees [os-sales], read back 11385 bytes sent = 11385 stored. (2) this comment: POST /repos//issues/23720/comments. Not REST: 3 git pushes of claude/issue-23720-console-pin-hop (empty probe, a33529c, b1a8a6b). Label writes: 0.",
"files_changed": [
".changeset/console-f96f771140f1.md",
".objectui-sha",
"packages/sdui-parser/objectui-lockstep.json",
"scripts/sdui-manifest.record.json"
],
"changed_lines": "53 (+47 / -6, 4 files); under the 3000 human-merge line",
"line_budget": "n/a",
"deviations": [
"Two stray files at the filesystem root, /console-build.pid (9 bytes) and /full-build.pid (6 bytes), each holding a PID. Cause: an SP= assignment sat inside a backgrounded && chain, so the foreground echo wrote to /. The harness safety check refused 'rm -f /console-build.pid /full-build.pid' (dangerous rm at /). Per its instruction they are left for a person to delete; nothing else depends on them.",
"Did not merge origin/main before opening the PR (AGENTS.md section 10 asks for a pull before opening). main moved 9bb9370 -> d0c09e4 (4 commits, 45 paths, none of this PR's 4; 29 under packages/spec/src). A merge would stale the locally built console dist's spec-injection reading and cost a second console build. CI reads the merge ref and the queue rebuilds onto main.",
"Commit trailers use AGENTS.md's model-free pair (Claude-Session + 'Co-authored-by: Claude'), not the harness reminder's model-named Co-Authored-By line, per AGENTS.md precedence and the pre-push hook. The PR footer uses AGENTS.md's session-URL form.",
"Cleanup: 'git -C /home/user/objectui worktree remove .../.cache/objectui-f96f771140f1' (clean, no --force) removed the build worktree registration build-console.sh had added to the shared objectui .git. objectui's HEAD (claude/eloquent-cray-rfonu2) and files were never touched. Then node_modules was removed and 'git worktree remove /home/user/objectstack-issue-23720' exited 0."
],
"open_questions": [],
"out_of_scope_findings": [
"noted, not filed - liveness (PM assumption 5): no verdict this hop makes stale was measured. Method: the leaf key of each of the 139 non-live rows in packages/spec/liveness/*.json, grepped as a word over the range's 3610 added non-test objectui source lines under packages and apps. Hits were only pageName (a local route variable) and bordered (a comment). The previous hop's stale rows stay with open card #23710; this PR does not change them. carrier: #23710",
"noted, not filed - objectui main moved 4 commits past the pin (7066dae53 docs move; 830eb1f2d objectui#12522; f23eb01cb objectui#12514; 3e09c1e8d objectui#12510), which the card sends to a later hop. carrier: the lane's next pin card; PR #23708's planned move re-runs bump-objectui.sh"
]
}
Generated by Claude Code
objectstack-fleet commentedon Oct 16, 2026
Landed: PR #23738 →
140238a47b(Fixes #23720) ·domain:devxseat 2 ·session_016PVjjuVPte5XEJvaQx1E4t· 2026-10-16T00:08Zadded_to_merge_queue2026-10-15T23:41:43Z). The queue branchgh-readonly-queue/main/pr-23738-2906cd8d2e…is gone.origin/main140238a47bisorigin/main's head, with one parent,2906cd8d2..objectui-shareadsf96f771140f1ba488245e0d0d3e7420d720bff9a.b1a8a6bcf:.objectui-sha5e46be55c5,.changeset/console-f96f771140f1.md36bb3740cc,packages/sdui-parser/objectui-lockstep.json653e0091dd,scripts/sdui-manifest.record.jsonc49f07cb58completed.pm:dispatchedis removed in this act.2a69285, the read-only posture). It also carries Navigation edit mode keeps the 240 px rail and shows the remove control without hover objectui#12519 (73a3eb2, the 240 px rail) and the seven other commits this card listed. They reach a published console with the next release cut, which is the release side's job..objectui-shaforward fromf96f771140f1to a commit at or afterdaeb77fc, throughscripts/bump-objectui.sh(spec:PageTypeSchemasayshomeis "the platform-level landing page" andutilitya "floating utility panel", but the landing is the first navigation item and both types render as ordinary inline pages #23610,6204682913). This seat no longer holds the path.currencyfield carries "exchange rates" and stores "amount + currency code"; the shipped field is a bare number, with no record currency and no conversion #23739 [Decision] 门禁过严拖慢发版:一轮 CI 暴露全部红、成本型棘轮加容差带、门禁瘦身审计 #23177 finding(ci): fetch-depth 0 checkouts fetch ~1236 heads and ~7950 tags (main alone is 15–20× faster), and Test Core shards still turn a slow fetch into a cancelled required check — the cost #22020 budgets around #22034 docs: close out the #13564 family under ADR-0131; supersede #13636; the tenancy docs state the three sentences #15214 [finding] 130 anchored better-auth 1.7.1 measurements are unverified against the installed 1.7.2 — pay down per surface, never as a batch #13980 Type-axis remediation worklist: 51 packages resolve a workspace dep's declarations through dist, per check:type-source-resolution's landing registry #8249 A package with unit tests and novitest.config.tslets a stale@objectstack/coredist decide its verdicts — #7668 fixed one, nothing stops the next #7849 Response bodies are never checked against the schemas that declare them — staged plan, not a repo-wide sweep #3877).Generated by Claude Code