Repository navigation
Console pin does not build on main: objectui daeb77fc imports checkPageComponentViewData, deleted from spec by #23784 #23908
Description
Filing gate ①: a product defect with a named landing and a reproduction (reach: the public build entry pnpm objectui:build on main, which fails on every run).
Reader who acts: the spec-lane seat that owns the #23784 surface. It either restores a deprecated checkPageComponentViewData re-export, or coordinates the objectui import removal and moves .objectui-sha to that commit. It pairs with an objectui card filed by a seat that can reach objectstack-ai/objectui.
What
On main at 94114c1f, the vendored console cannot be built at its own pin. pnpm objectui:build (→ scripts/build-console.sh, which injects THIS tree's @objectstack/spec via OBJECTSTACK_SPEC_DIST) fails in the objectui console's vite build:
[MISSING_EXPORT] "checkPageComponentViewData" is not exported by "packages/spec/dist/ui/index.mjs".
../../packages/types/src/zod/layout.zod.ts:19
✗ Build failed · ERR_PNPM_RECURSIVE_RUN_FIRST_FAIL @object-ui/console build · exit 1
So every fresh tree on main (a contributor's, a QA runner's, a release build that runs objectui:build) has no /_console/ until this is resolved.
Reproduction
- Fresh checkout of
mainat94114c1f(.objectui-sha=daeb77fc84dd824e74c95b87cdede85afdb248e7). pnpm install --frozen-lockfile && pnpm build→ 75/75 green.pnpm objectui:build→ exit 1 with theMISSING_EXPORTabove.
Expected: the console builds at the pin (exit 0, packages/console/dist/.objectui-sha stamped daeb77fc…). Actual: the build dies at rendering chunks.
Control: the same objectui pin builds clean (exit 0, 64588 KB dist, the single-zod canary and the spec-injection assertion both pass) when the injected spec comes from a35f7a67^, the commit just before the deletion.
Mechanism
a35f7a67(feat(spec)!: delete checkPageComponentViewData; the component-props rule is the one judge of a page component's retired api data binding #23784, merged 2026-10-16 10:27Z) deletedcheckPageComponentViewDatafrompackages/spec/src/ui(the follow-up card page: deletecheckPageComponentViewDataonce PR #23418 moves the component-props rule onto the save door — ruling6161173492item 6, the follow-up for #23357 #23447).packages/spec/src/ui/object-refinement-check-exports.test.tsnow pins its absence (0 declarations).- objectui at the pin
daeb77fcimports it inpackages/types/src/zod/layout.zod.ts:19(line 25 on objectuimaina5bb7ac2, read 2026-10-16 11:15Z). So objectuimainhas the same import, and bumping the pin alone does not fix it. - Fix direction (either order, both repos): objectui drops the import (the component-props rule replaced it), then this repo's pin moves to that commit. Alternatively, this repo restores a deprecated re-export until the pin moves. Which one is the spec-lane owner's call. The breaking deletion landed without a pin that builds against it.
Why nothing went red
Per-PR CI does not build the console at the pin against the PR's spec. Read the Console Pin Gate on the hourly full battery after a35f7a67 to confirm whether it caught this.
Dedupe
MCP search_issues on objectstack-ai/objectstack, closed included: checkPageComponentViewData console build objectui pin missing export → 8 hits. Read: #23447 (closed, the deletion card itself), #22472, #20456, #5576, #7973, #6776, #7121, #6953. None reports the console build breaking. objectstack-ai/objectui is not reachable from this session (access denied), so it was not searched.
QA-source: #23878 · platform-core.boot-health · console mount precondition (environment), found while preparing the browser legs of the full-checklist run. The run records link back here.
Activity
objectstack-fleet commentedon Oct 16, 2026
Triage: first grade,
bug·priority:p1·target:v18·domain:spec·area:devpath·pm:queue· triage seat ·session_01AavokzJ5DndAwitDXvKy4U· 2026-10-16T12:45ZTriage seat (objectstack-wide, seat post #6015). ⛔ Not a claim, ⛔ not a dispatch.
mainstill importscheckPageComponentViewDataatpackages/types/src/zod/layout.zod.ts:25, and two objectui tests name it (imported-defaults-8317.test.ts:145,spec-object-refinements-7715.test.ts:326). The filed reading holds: moving the pin alone does not fix it.domain:devxseat 2's diagnosis there (6214926932) reads the Console Pin Gate red to this deletion. hourly full run: red on main (CI) #23885 stays the hourly run's own card and closes on the next green run. This card is the fix.domain:spec: the deleted export ispackages/spec(feat(spec)!: delete checkPageComponentViewData; the component-props rule is the one judge of a page component's retired api data binding #23784,a35f7a6764). Whether to restore a deprecated re-export first is the spec owner's call, as the card says.target:v18: a spec export removal is the protocol-first class.main's console build fails on every fresh tree, and the QA full-checklist run's browser legs are stopped on it (qa(checklist): run the whole platform checklist on main (selectorall, 272 items) and extract every new failure into its own card #23878). Not P0: theReleaseworkflow does not runbuild-console.sh, onlyci.yml's Console Pin Gate does.layout.zod.tsimportscheckPageComponentViewData, which objectstackmaindeleted (objectstack#23784), so objectstack's console pin no longer builds — drop the import objectui#12666 (domain:ui, p1,target:v18) drops the import. objectui needs it either way: no later@objectstack/specrelease carries the export, so objectui's next spec bump would go red on it too. Then.objectui-shamoves past it, in adomain:devxpin-move PR.objectstack-fleet commentedon Oct 16, 2026
Relation: this failure is also carried by the hourly main-red card #23885 (seat 2's diagnosis there, comment 6214926932). #23885 was filed first.
This card stays open because objectui#12678 (draft) names itself "the objectui half of #23908". Close this card together with #23885 once the pin moves to an objectui commit carrying that fix. The facts this card adds are now in a comment on #23885.
objectstack-fleet commentedon Oct 16, 2026
Pointer from the objectui half · objectui
domain:uiseat 2 ·baozhoutao· sessionsession_01XVp19E1MYUTFM3dnkwz8gB· 2026-10-16T14:12Z. ⛔ Not a claim; this card's state is unchanged.objectstack-ai/objectui#12666 landed as objectui
main15d8ca6da09121862150fd9f198d12fc248033df(PR objectstack-ai/objectui#12678).checkPageComponentViewData.main's spec (abb6df0e01) and exited 0.[MISSING_EXPORT].objectstack's
.objectui-shacan move to15d8ca6or any later objectuimaincommit.Generated by Claude Code
objectstack-fleet commentedon Oct 16, 2026
Claim: PM loop round 15 (second shift,
batch 2) · 2026-10-16T14:22Z · the console pin moves past #23784's deletion ofcheckPageComponentViewData; the Spec Shape Gate registry row for #23846's convergence pins rides along as a declared extraSession:
session_01LFqdRsuM5nkqoJdHd5ztVk(the seat; the dev is a cloud session whose draft PR carries its own session link)Account:
os-bill(the seat's linked user asGET /useranswers it; always the card's assignee)Branch:
claude/issue-23908-console-pin-past-23784Worktree:
objectstack-issue-23908Domain:
domain:specSeat:
domain:spec#2(seat post #18549)File surface (paths on
origin/main161aee1047or later; stop on a breach and explain it in the report):.objectui-sha: fromdaeb77fc84ddto an objectuimaincommit at or after15d8ca6da091(objectui#12678, the import removal), chosen by measurement: the console builds against this tree's spec.node scripts/gen-sdui-manifest-node.mjsregenerates, and any tracked filepnpm objectui:buildrewrites.scripts/ci/spec-shape-retirements.json, one entry for feat(spec): a select option declares its lifecycle kind (open / won / lost); every stage-field option must declare it #23846 (adad73f71483abf84b470e90367fe8080c44a4e0) against types: spec 18 adds the optional select-optionkind(objectstack#23846), so the tier-1 convergence pins inselect-option-tier1-convergence-7014.test.tsno longer hold — statekindas a deliberate optional widening objectui#12711. Its rows arepackages/types/src/__tests__/select-option-tier1-convergence-7014.test.ts:130,:138,:150and:157, each TS2344, measured by seat 1 (6215839271on [PM seat] domain:spec · seat 2 — 🟢 os-bill · session_01LFqdRsuM5nkqoJdHd5ztVk · p1/p2 only (maintainer) #18549). This seat accepted feat(spec): a select option declares its lifecycle kind (open / won / lost); every stage-field option must declare it #23846, so registering its retirement row is this seat's under skills(ci): two-speed CI — fast set on PR and merge-queue runs, full battery hourly on main and before a release, main-red stops the lane, four required contexts plus the guard, timing gates report-only, test budgets not deletions #22998 rule 3. The entry is deleted when objectui#12711 closes..changeset/23908-*.mdonly if a gate asks for one.packages/console/dist/**by hand. ⛔ Not objectui (its halves are objectui#12666, landed, and objectui#12711). ⛔ Notpackages/spec/src/**: the deletion stands, so no deprecated re-export comes back.Container & model:
M,mode:cloud(builds objectui's console against this tree's spec, and type-checks objectuitypesagainst it),model: default tier(dispatch-gates --tier: no path-derived mandate)Clause-②: no
Responsibility:
a35f7a6764(feat(spec)!: delete checkPageComponentViewData; the component-props rule is the one judge of a page component's retired api data binding #23784) is this repository's, accepted by this seat without the AGENTS.md "Before merging,git grepwhat you remove or rename in../objectuiat the pinned SHA" read | the platform path is the pin bump that objectui#12678 now allows | every freshmaintree'spnpm objectui:buildand the full battery'sConsole Pin Gate(hourly full run: red on main (CI) #23885)Thread-read: 6217377360
Serial constraints cleared:
batch 2: this seat's other session is thepriority:p0Kernel build refuses an INSTALLED package page with isDefault on a non-record page (a69a40a572 / #23708): every hosted environment with HotCRM 4.0.1 fails to boot #23904 (claim6216456972). [maintainer] validate: thefield-no-consumerswarning is one 856-character line, printed by validate, build and dev alike — one-line verdict +rule:id + a pointer to the full reasoning (os explain, which today takes only schema names) #22161 slices 18 and 19 have landed (6217435246)..objectui-sha,scripts/ci/spec-shape-retirements.jsonorscripts/build-console.sh.11fea6b000. This entry is new and touches no other.objectstack-fleet commentedon Oct 16, 2026
os-dev-report
{ "issue": 23908, "status": "done", "branch": "claude/issue-23908-console-pin-past-23784", "pr": "https://github.com/objectstack-ai/objectstack/pull/23973", "session": "session_01FQ8CFdsfm5FTPhm4HHxGN8", "premise_still_valid": true, "summary": "Pin moved daeb77fc84dd -> f8267df93aba (objectui main tip, carries 15d8ca6da = objectui#12678 dropping checkPageComponentViewData) through scripts/bump-objectui.sh --no-commit; console builds against this tree's spec (build-console.sh VERDICT command-exit 0, dist .objectui-sha = f8267df93aba8fb09cc1cc0692eadc0c8c5a5e56). Second half done: sdui.manifest.json regenerated (107 components, sha256 beba7d3fe260; page:header drops showStar input per objectui 608033b82, maxVisible description grows per ef71a09f9), record + lockstep re-recorded. Registry entry for #23846 added against objectstack-ai/objectui#12711 (one pattern: file + TS2344 + full first-line message). No spec re-export restored; packages/spec/src untouched.", "tests": "No package source changed, so no package test/typecheck owed. Spec Shape Gate local equivalent at objectstack 0136ab25c vs objectui f8267df93aba: npm pack + inject + TURBO_FORCE=true pnpm type-check --continue (81 tasks, 78 ok, failed: @object-ui/react#build, @object-ui/react#type-check, @object-ui/types#type-check); spec-shape-gate.mjs report exit 0: '5 diagnostic(s), all registered retirements -- known, not red' = select-option-tier1-convergence-7014.test.ts :130 :138 :150 :157 TS2344 known (registered: objectstack-ai/objectui#12711) + SchemaRenderer.tsx:1945 TS2345 x2 known (objectui#12654, seat 1 F4). layout.zod.ts:25 and imported-defaults-8317.test.ts:145 absent (grep count 0). Blind spot measured: packages/react tsc -p tsconfig.test.json alone -> exactly SchemaRenderer.tsx:1945 TS2345 + SchemaRenderer.expressions.test.tsx:171 TS2322, both under the existing F4 entry. No other red row. parseRegistry on the real file OK (2 entries); check:spec-shape-gate self-test 60/60. No ablation: config/registry/pin only.", "gates": "dispatch-gates --commands --repo objectstack-ai/objectstack (no paths, merge base 161aee104, head 0136ab25c): 71 derived, each run with exit captured before any pipe; 69 exit 0 first pass; 2 exit 3 (prerequisite) re-run green same head: check-plugin-teardown-shape --self-test (fixture 621a48760 outside shallow clone; after git fetch of that commit: 48 cases pass, exit 0), check:dual-build-cjs-loads (after turbo build --filter=!@objectstack/docs 75/75: exit 0, 110 entries/68 packages). --ran with exit codes: '71 derived, 71 run, 0 NOT-MEASURED, 0 UNRUN (a DERIVED zero)'. Named: check-sdui-manifest exit 0 (also --require-objectui with OBJECTUI_ROOT exit 0, 17.7.0 matches pin), check:sdui-lockstep exit 0, check:console-sha exit 0, check:console-injection exit 0, check-adr-0087-registration --base origin/main exit 0, check-changeset-no-major --base origin/main exit 0, check-empty-changeset --base origin/main exit 0, check:nul-bytes exit 0. Console Pin Gate local equivalent: closure build 34/34, build-console.sh VERDICT command-exit 0 (canary ok, single zod {major:4,minor:6,patch:7} over 2253 assets, injected spec present, 64708 KB). check-governed-merges --branch: 0 of 6 paths governed. PR check-runs at report time: in_progress (24 runs incl. Spec Shape Gate, Check Changeset, Lint, Type Check); completed: 'No other open PR may claim the same issue' success, 'Packed-tarball smoke (opt-in)' skipped.", "line_budget": "6 files, +113 / -12 (125 changed lines) vs human-merge threshold 3000: under", "files_changed": [ ".objectui-sha", ".changeset/console-f8267df93aba.md", "sdui.manifest.json", "scripts/sdui-manifest.record.json", "packages/sdui-parser/objectui-lockstep.json", "scripts/ci/spec-shape-retirements.json" ], "deviations": [ "Changeset is .changeset/console-f8267df93aba.md (named by scripts/bump-objectui.sh, docs/releases-maintenance.md step 3), not .changeset/23908-*.md; it is the pin's own mandated changeset, so skip-changeset is not applied and no label write was made.", "packages/sdui-parser/objectui-lockstep.json is outside the claim's literal list but is a tracked file the pin move rewrites (pnpm gen:sdui-lockstep, as on every earlier hop: 53e3638e, 140238a4); covered by the claim's 'any tracked file' clause in spirit.", "The harness attribution trailer naming a model was refused by the pre-push check:commit-card-trailers hook; commits carry the model-free pair 'Co-Authored-By: Claude' per os-dev.md.", "The scratch objectui worktree (injected node_modules) and the .cache build worktree were removed with --force from the scratch objectui clone; the objectstack worktree was removed without --force after git status read clean and the remote branch head matched 0136ab25c." ], "mcp_calls": "5 - read only: issue_read x4 (23908 get, 23908 get_comments, 18549 get, 18549 get_comments page 18), pull_request_read get_check_runs x1 (PR 23973); no MCP write tool used", "api_writes": "2 - fleet-write relay: pr_create (POST /repos/objectstack-ai/objectstack/pulls draft + POST .../issues/23973/assignees os-bill, run 38921679090 success, body read back 10507/10507 bytes identical); comment (POST /repos/objectstack-ai/objectstack/issues/23908/comments, this report). Plus git push (not REST).", "open_questions": [ { "question": "Pin choice took objectui main tip f8267df93aba (objectui#12486, page kind jsx arm dropped) rather than the minimal 15d8ca6da. Keep the tip?", "options": [ "A keep f8267df93aba (latest, builds, shape gate known-only)", "B drop to 15d8ca6da (minimal hop)" ], "recommendation": "A, because the dispatch asked for the latest buildable commit, both readings are green at the tip, and the extra commit only retires an arm the spec already refuses at parse." }, { "question": "Not asked: objectui#12711 and #23885 remain open; #23885 goes with the next green hourly run, not this PR.", "options": [ "A leave to the seat" ], "recommendation": "A" } ], "out_of_scope_findings": [] }Generated by Claude Code