Repository navigation
chore(tooling): retire the objectstack tooling port — PM scripts run from objectstack with PM_SWEEP_REPO; hooks become plain copies (objectui#10208) - #10458
Merged
Conversation
Retire the port pin and its parity gate, and the ported PM scripts, on the maintainer's ruling on objectui#10205. - Delete scripts/upstream-port-pin.json, scripts/check-upstream-port-parity.mjs (with its --self-test and --resync), its wiring test, its package.json entry and its lint.yml step. - Delete scripts/pm/check-half-states.mjs, scripts/pm/board-snapshot.mjs and scripts/__tests__/check-half-states.test.ts. half-state-patrol.yml and board-snapshot.yml now check out objectstack-ai/objectstack (sparse, scripts/pm) and run ITS scripts with PM_SWEEP_REPO set to this board; the patrol also names this checkout with PM_SWEEP_CHECKOUT. Neither objectstack script takes a --repo flag; both refuse one by name. - Keep scripts/invoked-as.mjs (imported across scripts/ and three package build-css scripts) and scripts/check-bash32-floor.mjs (13 tracked shell files under its roots) as plain copies, and the eight .claude/hooks guard files as plain copies, each with one "copied from objectstack@SHA" line at its last-sync commit. - check-governed-queue-guard: the self-test can no longer pin its contract-review label mirror against a local sweeper source; that pin is removed and the property the mirror rests on (no import out of scripts/pm) stays pinned. The docs, the doc test and the dependabot gate's reason strings are updated to match. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013RDBh5DqXd2xnLwvHLgLFr
…(objectui#10208) Re-wrap the Half-State Patrol paragraph to the page width, say the archiver refuses a --repo flag (measured: "unknown option --repo=…"), and replace a line-address citation into half-state-patrol.yml's header that this change had made stale with a description of what it points at. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013RDBh5DqXd2xnLwvHLgLFr
Contributor
✅ Console Performance Budget
The eager closure is every chunk the entry reaches through static imports — what the browser fetches and parses before the app renders. The entry chunk on its own is a small fraction of it. 📦 Bundle Size Report
Size Limits
|
os-zhuang
approved these changes
Sep 25, 2026
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.
Fixes #10208
Supersedes #9391 (closed): the H26 wording it corrected lives in objectstack's original, which this repo now runs.
Implemented by
session_013RDBh5DqXd2xnLwvHLgLFron claim5825488668. Baseca5d671e4, headed66f1055. Every list below was re-derived at that head. None was copied from the card.What changes
scripts/upstream-port-pin.json,scripts/check-upstream-port-parity.mjs(with its--self-testand--resync),scripts/__tests__/upstream-port-parity-wiring.test.ts, thecheck:upstream-port-parityscript and thelint.ymlstep are deleted. No replacement gate, ledger or re-sync command is added.scripts/pm/check-half-states.mjs,scripts/pm/board-snapshot.mjsandscripts/__tests__/check-half-states.test.tsare deleted.half-state-patrol.ymlandboard-snapshot.ymlnow check outobjectstack-ai/objectstack(sparse,scripts/pm) and run objectstack's scripts against this board..claude/hooks/guard-*files,scripts/invoked-as.mjsandscripts/check-bash32-floor.mjs. Each gets one line 2 header,copied from objectstack@SHA. The hooks get no other edit.Re-derived file table
scripts/upstream-port-pin.jsonnode scripts/check-upstream-port-parity.mjsat base:13 ported file(s) match … 6 distinct: bf10debd5, 70e77ec3b, 61362932b, c2520416c, 7c2c5aedd, eec56c37d, exit 0scripts/check-upstream-port-parity.mjs(+--self-test,--resync)package.jsoncheck:upstream-port-parityentry and thelint.ymlstep "Verify the ported objectstack tooling still matches its pin". Both are removed.scripts/__tests__/upstream-port-parity-wiring.test.tsscripts/pm/check-half-states.mjshalf-state-patrol.ymlruns objectstack's, treatment (a)scripts/pm/board-snapshot.mjsboard-snapshot.ymlruns objectstack's, treatment (a)origin/main(blobcb625f096511on both sides). It has no importer.scripts/__tests__/check-half-states.test.tsscripts/invoked-as.mjspackages/fields,plugin-gridandplugin-kanbanscripts/build-css.mjsscripts/check-bash32-floor.mjsnode scripts/check-bash32-floor.mjs:13 tracked shell file(s) under scripts/**, .claude/hooks/**, e2e/**.claude/hooks/guard-*.sh(4 hooks + 4.selftest.sh).github/workflows/board-snapshot.yml.github/workflows/half-state-patrol.ymlHeader shas: no copy matches a single objectstack commit exactly
For each kept copy I compared this repo's blob with objectstack's blob at every commit on objectstack
origin/mainthat touched the path. None matches exactly. Each copy is the upstream blob at its last sync, plus the divergences the retired pin declared. At base the parity gate verified that for all 13 entries.So the header names the last-sync sha: the retired pin's
reffor that file. I re-verified the pin'supstreamSha256against objectstack's blob at that ref, and 13 of 13 match.guard-main-checkout.shc2520416cff0guard-main-checkout.selftest.sh70e77ec3b566guard-main-checkout-bash.sh7c2c5aedd94dguard-main-checkout-bash.selftest.sh7c2c5aedd94dguard-shared-stash.sh7c2c5aedd94dguard-shared-stash.selftest.sh7c2c5aedd94dguard-tree-enum.sh7c2c5aedd94dguard-tree-enum.selftest.sh7c2c5aedd94dscripts/invoked-as.mjsbf10debd587fscripts/check-bash32-floor.mjs61362932b5adThe line carries the full 40-hex sha. It sits on line 2, directly under the shebang.
Workflow treatment: (a) for both, measured on objectstack
origin/main5b9402d89b--repo. Both refuse it by name.node check-half-states.mjs --repo=objectstack-ai/objectuiexits 2 withunknown option --repo.parseOptions(['--repo=…'])returnsunknown option --repo=….PM_SWEEP_REPO(resolveSweepRepo:PM_SWEEP_REPO, thenGITHUB_REPOSITORY, then the default).PM_SWEEP_REPO=objectstack-ai/objectui, not--repo. The card's board-snapshot row and this PR's title say--repo; the mechanism is the variable.--helplists exactly three knobs:PM_SWEEP_REPO,PM_SWEEP_CHECKOUTandPM_SWEEP_CLOSED_FLOOR. The patrol step setsPM_SWEEP_CHECKOUT: ${{ github.workspace }}. That way H17's and H57's local git reads use this checkout and not the objectstack one. I measured it with objectstack's owncheckoutPrerequisite:origin, it returnsnull(the checkout serves the board);origin, it returnscheckout-does-not-serve.refuseUnknownArgs(['--format=markdown','--provenance=…'])returnsnull.parseOptionsaccepts bothSNAPSHOT_ARGSspellings.sparse-checkout: scripts/pm(root files, the files directly underscripts/, andscripts/pm/**) from objectstackorigin/main:board-snapshot.mjs --self-testpasses 156 cases, also withGITHUB_REPOSITORY=objectstack-ai/objectuias on the runner.actions/checkout@v7withrepository: objectstack-ai/objectstack,path: objectstack-tooling,sparse-checkout: scripts/pmandpersist-credentials: false. objectstack is public, so the default token reads it.changeset-release.ymlalready usessparse-checkoutonactions/checkout@v7.main, the same sweeper a seat runs from its own checkout. The accepted cost is written into both workflow headers: no reviewed moment here. This is a choice, and it is offered as an open question below.pull_requestfilters now list only the workflow file. No script from this repo is loaded any more.pull_requestlegs run both on a real runner, because both path filters match this diff.Importer and invoker grep results (at base,
git grep -n -F NAME, whole tree)check-half-statesscripts/pm/board-snapshot.mjsandscripts/__tests__/check-half-states.test.ts. Both are deleted.check-governed-queue-guard.mjsself-test and byci-cd-pipeline-doc.test.ts. Both are re-pointed, as described below.half-state-patrol.yml, rewired under (a).paths:filters ofhalf-state-patrol.ymlandboard-snapshot.yml. Both entries are removed.governed-surface-guard.yml: scripts/pm/check-half-states.mjsin the doc test. Removed with its prose.dependabot-merge-gate.mjsreason strings,ci-cd-pipeline.md, and comments incheck-bash32-floor.mjs,check-comment-mask-corpus.mjsandcheck-governed-queue-guard.mjs.invoked-as.mjs(a historical comment);check-governed-queue-guard.mjs;cross-file-line-citation-census.test.ts, which uses the path as fixture input to a pure function and reads no file.board-snapshotboard-snapshot.yml, rewired under (a).paths:filter. Removed.dependabot-merge-gate.mjsreason string andci-cd-pipeline.md.invoked-as: 92 importing files, so it is kept. Workflowpaths:entries for it inci.yml,lockfile-dedupe.ymlandperformance-budget.ymlare untouched.check-bash32-floor: kept, together with its callers:lint.ymlstep;package.jsoncheck:bash32-floorentry;bash32-floor-wiring.test.ts;child-verdict.test.ts;ci-setup-pnpm.shandensure-chromium-ready.sh.check-upstream-port-paritypackage.jsonandlint.yml: removed. Theci-cd-pipeline.mdbullet: removed.child-verdict.test.tskeeps a sample output line that it feeds to a generic count parser. It runs nothing.ci-cd-pipeline-doc.test.tscomment records a measurement "on4b4d35a7d" and is history..changeset/*.mdentries are covered in the next section.What the deletion forced elsewhere
scripts/check-governed-queue-guard.mjs. Its self-test readscripts/pm/check-half-states.mjsto pin theCONTRACT_REVIEW_LABELmirror.FAIL check-governed-queue-guard self-test: 2 of 191 case(s) failed. The two wereH31s-file-is-readable…andthe-carrier-label-MIRRORS-H31s-OWNED-constant….scripts/pm/" pin is kept.scripts/__tests__/ci-cd-pipeline-doc.test.ts.CLOSED_ISSUE_WINDOW_PAGES. objectstack's sweeper exports no such name any more; its closed window isCLOSED_ISSUE_WINDOW_DAYSbehindCLOSED_ISSUE_WINDOW_PAGE_CEILING. The pin now requires the page to nameCLOSED_ISSUE_WINDOW_DAYS, with no numeral window in pages or days, and says in the test that it cannot re-read an out-of-tree export.content/docs/guide/ci-cd-pipeline.md. Changed parts:invoked-assentence;cd ../objectstack && PM_SWEEP_REPO=objectstack-ai/objectui PM_SWEEP_CHECKOUT=../objectui node scripts/pm/check-half-states.mjs. objectui'sAGENTS.mdnever described running the patrol and is not touched.Acceptance readings (head
ed66f1055), each with a controlgit grep -l upstream-port-pinoutside CHANGELOG, excluding.changeset/: 0.ca5d671e4: 9.copied from objectstack@: 11.**/CHANGELOG.md: 0..changeset/exclusion the reading is 3, and all three are pending.changeset/*.mdentries (8385, 8696, 9206). Each is an empty-frontmatter release declaration of a PR that already merged, and the nextchangeset versionconsumes it.check-changeset-overwriteexists to report exactly that edit, so I treat them as CHANGELOG-class and leave them untouched.package.jsonscripts matchingport-parity|upstream-port: 0. The key count goes from 122 to 121.upstream-port|port-parity: 0. Control,check-bash32-floor.mjsin workflows: 1.git grep -n 'copied from objectstack@'hits line 2 of all 10 kept copies. It also hits two prose lines that point at the header.--resyncreplacement. The diff adds no file and deletes 6.PM_SWEEP_CLOSED_WINDOW_PAGES|closedWindowDisabled|resolveClosedWindowPagesat head matches 4 lines, all prose: the history line in the patrol header, plus doc-test comments and one failure-message string about the objectui#8043 history.PM_SWEEP_CLOSED_FLOORis set inhalf-state-patrol.yml.origin/mainhas 0 hits for either switch. Control:PM_SWEEP_CLOSED_FLOOR, 17 hits in its sweeper.Checks run (all at head
ed66f1055)pnpm exec vitest run scripts/ --maxWorkers=4, run through the shared verify lock:Test Files 177 passed | 2 skipped (179),Tests 5263 passed | 2 skipped (5265),VERDICT command-exit 0. The two skipped files are the suite's own skip-marked network and timezone tests.pnpm type-check:scripts: exit 0.--no-inline-config --format json) on the 6 touched scripts and tests: 6 files, 0 errors, 0 warnings, 0 ignored..tstest resolves 118 rules and the five.mjsfiles resolve 0 rules.parserOptions.projectorprojectServiceis set, so linting is not type-aware and the diff cannot move an untouched file's verdict.pnpm lintis left to CI.guard-main-checkout-bash130,guard-main-checkout120,guard-shared-stash50 andguard-tree-enum38 passed, 0 failed. The base counts are identical.check-lint-coverage;check-entry-guard(--self-testpasses 63 cases; the scan covers 105 files);check-bash32-floor(--self-testpasses 160 cases; the scan covers 13 files);invoked-as --self-test(12 cases);check-governed-queue-guard --self-test(188 cases);check-pre-install-import-graph;check-new-cross-file-line-citations(0 new);check-control-bytes;check-action-ref-convention;check-changeset-presence,check-changeset-overwriteandcheck-changeset-no-major;check-test-path-roots;check-vi-mock-override-shape;check-cross-repo-closer-outcome, both legs;check-required-check-set --self-test;check-shell-escape-residue;check-doc-links;check-comment-mask-corpus(1 disagreeing file, within the residue objectui#7882 is holding open).actionlintis not installed here. Instead:yaml,uniqueKeys) ofhalf-state-patrol.yml,board-snapshot.ymlandlint.ymlsucceeds;scripts/…path they reference exists; theobjectstack-tooling/paths were checked against the emulated objectstack tree.check-changeset-presencereports:25 file(s) changed, 0 of them published source of a package the release covers, 0 of them a manifest whose published contract moved. Every touched path is root tooling, workflows, docs or.claude/, and none of it ships in a released package.Open question for the seat
Should the objectstack checkout be pinned?
main, as written. This follows the ruling's "no new ledger". The cost is no reviewed moment in this repo.ref:. Upstream's own composite-action header recommends that for siblings. The cost is a hand-bumped sha, which is a one-line ledger.My recommendation is A: the ruling retired exactly that bookkeeping, both workflows only report or back up, and a sweep that cannot run still goes red.
Acceptance notes (out of scope; reported, not filed)
check-half-states.mjs --self-testfails 3 of 4912 cases withPM_SWEEP_REPO=objectstack-ai/objectui: two H38 seat-foreignness rows and one seat-marker-window row. With the default repo, all 4912 pass. This is the class the retired port carried as three divergences ("upstream's to remove"). The patrol does not run the sweeper's self-test, so CI is unaffected.needs:contract-reviewlabel and its H31/H35 rows (objectstack628e55dfa6, #19737). objectui'scheck-governed-queue-guard.mjsstill has its contract-reviewmerge_groupleg keyed on that label (objectui#9018). Untouched here.performance-budget.yml(two identical comment blocks) andrender-budget-comment.test.tscite "half-state-patrol.ymllists its script ANDscripts/invoked-as.mjs" as the measured convention. After this PR the patrol lists only itself. These are unpublished comments and are left alone.check-comment-mask-corpus.mjs,check-entry-guard.mjsand thehook-selftests.ymlcollector.维护者速读(草稿)
改了什么 —— objectui 不再自己维护从 objectstack 移植来的工具副本:
upstream-port-pin.json和核对它的一致性门禁。copied from objectstack@SHA。为什么改 —— 维护者在 objectui#10205 上的裁决:「同意,10205 根治(一张 devx 卡,你一字)——退役端口本身」。给副本记账本身就是在浪费时间。
风险与代价(含回滚) ——
席位意见 ——
本席(
domain:spec#1,session_013RDBh5DqXd2xnLwvHLgLFr,按维护者直派「甲」认领本卡)已对照 GitHub 复核本轮(headed66f10557):PM_SWEEP_REPO指定本仓。10 份保留副本各加一行来源头。--repo已改为PM_SWEEP_REPO。两个原版脚本都按名字拒收--repo。.changeset记录保持原样。你要做的 ——
os-zhuang或hotlong在本 PR 留一条 APPROVED review,之后由认领席翻 ready 并入队。Generated by Claude Code