Repository navigation
tooling(ui-wiring): four objectstack gates read the merged tree right once ui/ exists, inert today (#25697 PR A2) - #25738
Merged
Conversation
…/ is imported With objectui's tree under ui/, four objectstack-side tools stay red for reasons of their own, measured on the verification branch. Each change gives byte-identical results on a tree with no ui/ directory. - partition-test-shards: members whose path is ui or under it are dropped from the Test Core document (Test UI runs them), by path rather than by scope so the ui root package is caught too. - root build: excludes the docs site under ui/apps/site with a path glob turbo accepts while ui/ does not exist. - check-type-check-coverage: tsconfig files are read with TypeScript's own JSONC parser (block comments, trailing commas), refusals kept. - check-published-readme-exports: the ui/ tree's members and documents are out of this gate's population, by path. Claude-Session: https://claude.ai/code/session_01Y9KdeUcccMQ3ReF85Xyf5o Co-authored-by: Claude <noreply@anthropic.com>
This was referenced Oct 25, 2026
Contributor
Author
|
Dispatch seat record. ACCEPTed as PR A2 on card #25697 (card stays open for PR B in the cutover window). Generated by Claude Code |
This was referenced Oct 25, 2026
os-tesla
pushed a commit
that referenced
this pull request
Oct 25, 2026
…1, WIP) main moved .objectui-sha (#25735) and the root build script (#25738); the pin stays deleted and the build keeps main's site exclusion. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0149BHSXfCdQywGaLdpRAtWe
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Requested by Tesla · project thread
Part of #25697 (PR A2; the card stays open for PR B, the pin-gate retirement in the cutover window).
Part of objectstack#25677.
Clause-②: no
Metadata-protocol: none
What this is
The second inert objectstack-side patch of the
ui/CI wiring (PR A was #25710). On today's tree, with noui/directory, every changed script and the rootbuildgive byte-identical results (measured below). The change only matters once objectui's tree sits underui/. On the verification PR #25718 (runs 1–5) four gates stayed red in the merged layout because of objectstack's own tooling. This PR repairs those four. Every exclusion is by path (a workspace member whose directory isuior under it), never by the@object-ui/scope. The ui root package is namedobject-ui-monorepo, so a scope filter would have missed it.scripts/partition-test-shards.mjsturbo lslists 47ui/members (46@object-ui/*plus the ui root at pathui), and every shard received some. Shard 1 got the ui root alone (18783 s estimated, max/mean 2.17x). UnderOS_SKIP_DTSthat means TS7016, and run 4 spent 38 min running the ui root's whole-suitetest.planRun()drops items whose path is underui/before weighing. This is the one pathmain()runs. The drop happens only when such items exist, and only then does it print one stderr line (ui/ tree: N member(s) not partitioned here -- Test UI runs them). Test UI keeps its own matrix.build(package.json)turbo run build --filter=!@objectstack/docsincludes@object-ui/site#build(next build), which objectui's own root build excluded.--filter=!./ui*/apps/site. Turbo's path form, with a glob. Why it is spelled this way is under Acceptance notes.scripts/check-type-check-coverage.mjs(Type Check · source gates, and the debt ledger lane through--re-measure)JSON.parsethrows onui/tsconfig.json, which is JSONC with block comments. tsc accepts it. Three more ui configs (ui/apps/console/tsconfig.json,ui/apps/console/tsconfig.node.json,ui/packages/runner/tsconfig.json) have the same shape.parseTsconfigText()uses TypeScript's ownparseConfigFileTextToJsonand replaces all three tsconfig reads in the file (readTsconfig,tsconfigChainFacts,measureTestDebt). The reason is that what tsc compiles is what this gate claims to describe, and the fix also protects objectstack's own future tsconfigs. The refusals are kept. A syntax error, a merge-conflict marker, a non-object root and an empty or comment-only document are still refused (readTsconfigstill throws, so the exit-code pin still sees it).scripts/check-published-readme-exports.mjs(Type Check · consumer gates)@object-ui/*built type entries are not in the closure this lane builds, so no objectstack README was judged.run()drops members underui/, and the documents they publish, from the population (outsideUiTree()). The scan now covers the members outsideui/. Objectui judges its own README claims withui/scripts/check-readme-exports.mjs(see Acceptance notes for where that runs today).Rulings followed: path, not scope. Nothing under
.github/workflows/**. The dispatch-gatesmaxBufferitem is not redone (#25732).Verification record
Measured on base
origin/mainf3fea0a with the fix commit 0263a19. The head 898990e then mergesorigin/main4cc17db. Those 4 commits touch none of the four files, and the derived command list is identical after the merge. The scoped re-check on the head was the three touched self-tests pluspnpm check:type-check-coverage,check-ci-filter-parityandcheck:turbo-task-graph, all exit 0. Verification tree: #25718 headcfa1676afcwith this diff applied (git diff f3fea0a..HEAD | git apply), afterpnpm install --frozen-lockfile. Exit codes were captured before any pipe.Inert on
main(noui/):turbo ls --output=jsonon the full list, then--shard N/6 --exclude @objectstack/dogfoodfor N = 1..6, base script against new script. stdout and stderr are byte-identical on all six shards (exit 0/0; 12/13/14/14/21/11 items).turbo run build --filter=!@objectstack/docs --dry=jsonbefore, andpnpm build --dry=jsonafter. Both give the same 83 task ids, and the task hashes are the same too, compared with the filter passed by hand. With!./ui/apps/siteor!@object-ui/siteinstead, turbo exits 1 on this tree (see notes).node scripts/check-type-check-coverage.mjs, base against new: exit 0/0, byte-identical output.node scripts/check-published-readme-exports.mjson a built closure, base against new: exit 0/0, byte-identical output. Both report 105 documents, 84 members and 225/225 own-scope specifiers.Effect on the verification tree (
cfa1676afc+ this diff):ui/items placed (shard 1 =object-ui-monorepo)ui/items. All 83 non-ui members placed exactly once. Max/mean 1.00x, and the CLI is sliced x3 as onmain.node scripts/check-type-check-coverage.mjsError: ui/tsconfig.json is not parseableui/tsconfig.json. Exit 1 with 489 findings, all of them onui/members (see notes).node scripts/check-published-readme-exports.mjs(objectstack closure built:turbo run build --filter='./packages/*' --filter='./packages/*/*', the lane's step)@object-ui/*entries unbuiltturbo run builddry-run of the root filter@object-ui/site#build@object-ui/site#build.Self-tests with the
ui/case (each one green onmainand on the verification tree):node scripts/partition-test-shards.mjs --self-test, exit 0. New battery "theui/tree is Test UI's, not Test Core's" (6 cases). It runsplanRun()on a merged document with the ui root at pathui, an@object-uimember, and a member given an absolute path. None reaches a bin. The bins equal the split of the same document without them. A package atpackages/uiis kept, and an entry with no path is kept so thatweighItems()refuses it. The roster floor goes from 14 to 15.node scripts/check-type-check-coverage.mjs --self-test, exit 0. New battery "JSONC tsconfig reader" (8 cases). Four shapes tsc accepts are read: a block comment between keys (objectui's root config), trailing commas, a whole-line comment, and a//inside a string. Four shapes stay refused: a truncated file, a merge-conflict marker, a non-object root, and a comment-only file. The roster floor goes from 65 to 66.node scripts/check-published-readme-exports.mjs --self-test, exit 0. New battery "THEui/TREE IS OUT OF THIS POPULATION, BY PATH" (5 cases). It runs the productionrun()on a scratch workspace. An unbuilt member underui/gives exit 0 and is not named in the output. The control puts the same unbuilt member outsideui/, which still gives exit 3 and names it. The roster floor goes from 26 to 27.Derived gates.
node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstackderives 46 commands. All 46 exit 0 on the head, includingcheck:type-check-coverage,check:type-check-debt,check:published-readme-exports,check:pm-dispatch-gates(fast tier),check:parse-guard,check:entry-guard,check:ci-filter-parityandcheck:turbo-task-graph. Reconciled with--ran(each linecommand :: exit N):46 derived, 46 run, 0 NOT-MEASURED (a DERIVED zero).pnpm exec eslint --no-inline-configon the three scripts: exit 0.node scripts/pm/check-governed-merges.mjs --branch HEAD: NOT governed, 344 changed lines.No changeset: the root package is private and
scripts/**ships in no package'sfiles[]. The PR carriesskip-changeset.Acceptance notes (for the cutover card)
ui/. They break down as 47 "notypecheckscript and no ledger entry" (objectui spells the scripttype-check), 392@ts-expect-errorpins in files notypecheckprogram compiles (a consequence of the first class), 40 hidden test layers and 10 unread source directories. So Type Check · source gates and Type Check · debt ledger go from exit 1 by an uncaught throw to exit 1 with a verdict. Turning them green is a coverage-semantics decision for the cutover. One option is to give ui packages thetypecheckspelling or ledger rows. The other is the path exclusion this PR did not take. Either is a follow-up for the cutover card, not part of this patch.pnpm check:readme-exportsis in objectui'srepo-gates.yml(README Export Check), which the roster routes to sub-issue 4. In the merged tree,ui/README export claims are checked by neither gate until that workflow is ported, or until Type Check UI gains the step.ui/, turbo 2.11.5 exits 1 on--filter=!./ui/apps/site("Directory … specified in filter does not exist"), on!./ui/apps/[s]ite, and on!@object-ui/site("No package found with name").!./ui*/apps/siteis accepted because turbo walks the glob from the repo root. Measured: it removes exactly@object-ui/site#buildon the verification tree and nothing onmain. Onceui/exists the spelling can be tightened to!./ui/apps/site. That is optional.testscript (objectui's whole-suitevitest run) is untouched here. Its drop stays on the cutover adaptation bill. After this PR, Test Core never schedules it.object-ui-monorepo#buildwith command NONEXISTENT, because the adaptation commit already dropped the script. Turbo skips it. Nothing to do.@object-uientries locally against 19 in run 4's lane. The lane builds part of the ui closure through its dependency edges. Both refuse without this diff. With it, the local run exits 0. The lane's own reading comes from this PR's CI and from the next verification run.Generated by Claude Code