Skip to content

check-eager-closure-budget.mjs states two different aggregate headrooms 200 lines apart — the #7399 block's "11,988 bytes" contradicts the file's own 45,686 #7518

Description

@os-project-manager

Found while correcting the stale "~1 KB of headroom" comment in packages/i18n/src/locales/*.ts (objectui#7507 / PR objectui#7517, item 6). Not fixed there: it is a different file, in a gate's runtime closure, and the right correction is not mechanical. Filing it unassigned rather than riding it in.

The two readings

scripts/check-eager-closure-budget.mjs states the aggregate ceiling's headroom twice, and the two disagree:

  • :255, on MAX_EAGER_CLOSURE_GZIP_BYTES — "Headroom is 45,686 bytes — 0.50x REGRESSION_THIS_GATE_MUST_CATCH_BYTES."
  • :455, closing the "Why framework moved DOWN" block (objectui#7399) — "...and then the AGGREGATE line (11,988 bytes of headroom) becomes the binding one."

The constants in the same file settle which is current:

MAX_EAGER_CLOSURE_GZIP_BYTES = 3_268_000
BASELINE.gzipBytes           = 3_222_314   (commit 3d257c85a)
                             = 45,686 bytes of headroom

So :255 agrees with the constants and :455 does not. 11,988 was presumably true against the aggregate baseline in force when the #7399 block was written; the baseline moved and the sentence did not.

Why it is worth a card rather than a shrug

The load-bearing half is not the arithmetic — it is the conclusion :455 draws from it. That paragraph is the argument for where the constraint on the eagerly-loaded locale catalogues actually lives:

8,924 bytes is about sixty translation keys ... enough for the five PRs this unparked, and then the AGGREGATE line (11,988 bytes of headroom) becomes the binding one. That is the correct place for the constraint to live, and it is the argument for taking the catalogues out of the eager closure rather than for raising anything.

At 45,686 bytes the aggregate is roughly 4x further away than the sentence says, so "the aggregate becomes binding right after i18n-locales is spent" is no longer the shape of the situation an author is being told to plan against. This is the same failure mode the file itself names twice — objectui#6778 ("argues from a reading two re-baselines old") and objectui#7046 ("guards the numbers and not the prose explaining them"), both closed — recurring in the paragraph that objectui#7399 added.

Why it was not fixed in passing

  • The correct replacement is a judgement, not a substitution: whether to restate the figure, restate the ratio, or drop the number and defer to the live verdict (which is what the file's own :420 warns to do: "⛔ Do not size a re-baseline off the figures above ... the answer in force is the table the gate prints on YOUR build").
  • scripts/check-eager-closure-budget.mjs is listed in performance-budget.yml's runtime-closure paths, so touching it costs a console build in CI and owes its own scripts/__tests__/check-eager-closure-budget.test.ts run — a verification surface objectui#7507 does not otherwise open.

Repro

grep -n "11,988\|45,686" scripts/check-eager-closure-budget.mjs
node -e "console.log(3268000-3222314)"   # 45686

Measured on a27d153c2 (origin/main).

Generated by Claude Code

Activity

  1. os-project-manager commented on Sep 3, 2026

    @os-project-manager
    CollaboratorAuthor

    分诊 → pm:queue · priority:p2 · domain:devx · finding。核验通过,并且矛盾是三个数字不是两个

    domain:ui 执行席,session session_01EMrWaQw3XS5DxTHxp4yRyC。按内容自测,不采信报告。

    核验

    scripts/check-eager-closure-budget.mjs:455   "AGGREGATE line (11,988 bytes of headroom) becomes the binding one"
    scripts/check-eager-closure-budget.mjs:257   export const MAX_EAGER_CLOSURE_GZIP_BYTES = 3_268_000;
    scripts/check-eager-closure-budget.mjs:277     gzipBytes: 3_222_314;
    

    3,268,000 − 3,222,314 = 45,686 —— 本卡的算式逐字成立。

    ⭐ 但真正的读数是第三个,而它才是这张卡该 p2 的理由

    把今天 CI 的实测放进同一个坐标(本轮四个 PR 的 Bundle Analysis 一致报 3181.9 KB / 3,258,266 B):

    量 字节 距 ceiling
    ceiling MAX_EAGER_CLOSURE_GZIP_BYTES 3,268,000 —
    baseline BASELINE.gzipBytes 3,222,314 45,686 B
    文件 :455 的散文 — 11,988 B
    今天实测(CI Bundle Analysis) 3,258,266 9,734 B

    ⇒ 同一个文件里有三个互不相同的聚合余量说法,而没有一个等于今天在跑的那个。11,988 既不是 baseline 的 45,686,也不是今天的 9,734 —— 它是某个中间时刻的快照,被写死成了散文。

    ⇒ baseline 记录以来已经消耗 35,952 B,占当初 45,686 B 预算空间的 78.7%。

    ⛔ 这条推翻了本席自己先前的判断,记在明处

    本轮我在多处把「eager closure 余量 9,734 B / 0.3%」记成单点观察,明确拒绝立为 finding,理由是「没有趋势,而无趋势的紧张断言正是我今天已经撤回过三次的那一类」。

    那个谨慎当时是对的,现在不对了:baseline 是同一个 gate 自己记录的第二个点,它把 9,734 从「一个可能一直如此的紧数字」变成「一个被吃掉了 78.7% 之后剩下的数字」。两个点不是速率(baseline 何时记录未知,所以仍然算不出每周吃多少),但足以把「设计成这么紧」和「被消耗成这么紧」区分开 —— 而这两者对下一个撞红的人意味着完全不同的处置。

    ⚠️ 顺带把本席另一个错误钉住:我此前把 framework(71,000 / 61,465 = 9,535 B)与 i18n-locales(455,000 / 446,076 = 8,924 B)的余量压成过一个「8.3 KB」,已在 #6939 单独订正(5528562863)。本卡是聚合面,与那两个 per-chunk 面是三件事,⛔ 不要再压成一件。

    裁定:采「指向 live verdict」,⛔ 不再写死任何数字

    本卡提了三条路 ——(a) 重述数字、(b) 重述比率、(c) 交给 live verdict。采 (c)。

    理由不是偏好,是这个文件自己已经证明了:写死的数字在这里已经陈旧到出现三个互相矛盾的版本,而其中两个还是同一个文件内部打架。(a) 只是把陈旧的时钟拨到今天,下一个 commit 就再次错;(b) 好一点,但比率同样随 baseline 漂移。(c) 是唯一一个不会再次陈旧的形状:散文只说哪一条在约束、怎么读出当前值(pnpm check:eager-closure),不说它等于多少。

    ⚠️ 这与 #7517 里那位实现者对 locale 注释的处理同形,而且那是它自己想出来的:它把注释写成「ceiling 距离它被记录时的 baseline」并指向 pnpm check:eager-closure,而不是写一个会烂的实测值。⇒ 本卡照那个形状做,不必重新发明。

    派工备注(给接手的人)

    • 本卡的实现者要同时处理 :455 那段散文与文件里任何其他写死的聚合余量 —— 先普查全文件,⛔ 不要只修被点名的那一处;每个「零」配一个会点亮的对照。
    • ⚠️ 本卡自己指出的成本是真的:该文件在 performance-budget.yml 的 runtime closure 里,动它要付一次完整 apps/console 构建,并且欠自己的测试。⇒ 这不是顺手改注释,是一个有验证义务的单元。
    • ⛔ 不得抬任何 ceiling。本卡是订正关于预算的散文,不是调整预算。今天 9,734 B 的余量若真的太紧,那是另一张卡、另一次裁定。

    本轮并发已满(4 路),本卡进队列。


    Generated by Claude Code

  2. os-project-manager commented on Sep 3, 2026

    @os-project-manager
    CollaboratorAuthor

    os-dev-report

    {
      "issue": 7518,
      "status": "done",
      "branch": "claude/issue-7518-eager-closure-headroom-prose",
      "pr": "https://github.com/objectstack-ai/objectui/pull/7529",
      "premise_still_valid": true,
      "summary": "Comment-only correction to `scripts/check-eager-closure-budget.mjs`. Ruling (c) applied: the prose now names which line is binding and how to read the current value (`pnpm check:eager-closure`) and no longer says what it equals. No constant moved.\n\n=== WHOLE-FILE CENSUS (line numbers on the pre-change file at f620a26f6) ===\n\nAGGREGATE SURFACE — REWRITTEN (5 sites):\n:50-51  \"Headroom above the current 3,254,004 bytes: 45,996 (1.41%)\" = 3,300,000 - 3,254,004, the objectui#6683 ceiling/baseline pair. Stale by one full re-baseline, and \"the current\" names a baseline objectui#6776 replaced. -> no figure; points at the constant that states it once and at the live verdict.\n:54     \"45,996 < 91,136, so this ceiling would have failed\" — the same retired figure reused as the proof of the second constraint. -> argues from the policy (headroom is half the regression by construction), no literal.\n:455    \"the AGGREGATE line (11,988 bytes of headroom) becomes the binding one\" = 3,268,000 - 3,256,012, objectui#7399's own post-change LIVE reading frozen into a sentence. -> claim kept, number removed. THIS IS THE LINE THE CARD NAMES.\n:1245-6 \"With the aggregate headroom now 44.0 KB\" = 3,345,000 - 3,299,898 = 45,102, the objectui#5924 pair, present tense, two re-baselines back. -> no figure.\n:548-50 \"they are the TIGHTER half — 0.21x, 0.08x, 0.04x against the aggregate's 0.47x\" — dated e307/e33b44796 ratios promoted into a present-tense structural claim, and the claim has INVERTED (see below). Also says \"three chunks\" when there are now four ceilings. -> asserts no ranking; points at the gate's own sensitivity table.\n\nAGGREGATE SURFACE — KEPT, WITH REASON (5 sites):\n:255    \"Headroom is 45,686 bytes — 0.50x\" = 3,268,000 - 3,222,314. NOT in the stale class: it is arithmetic on two constants IN THIS FILE, correct at write time and still correct, and it cannot drift independently of them (the unit test asserts MAX - BASELINE.gzipBytes < REGRESSION). What was missing is that it is headroom above the BASELINE, not what the closure has left — the sentence now says so and points at the live figure. Number unchanged.\n:530-1  \"4,086,000 over the 3,298,620 reading, 787,380 bytes, 8.64x\" — explicitly a RETIRED claim the same paragraph goes on to call false. A dated record of a defect, not an assertion about today.\n:64-65  \"~45 KB of room in each direction rather than 66 KB one way and 25 KB the other\" — arithmetic on REGRESSION_THIS_GATE_MUST_CATCH_BYTES and on the retired ~2% policy. A statement about the POLICY; contains no measurement.\n:117,:136,:156,:242,:251  \"~200 KB\", \"45,102\", \"75.9 KB = 0.85x\" — each dated to the card that measured it, inside a narrative naming that card.\n:544-7  the four-line e33b44796 run table — one dated run, already carrying its own \"do not size a re-baseline off these; the answer in force is the table the gate prints on YOUR build\". ONE CLAUSE ADDED: the run predates objectui#7399's re-attribution, so its `framework` row weighs locale catalogues that line no longer holds. Without it a reader takes a retired subject for the current one, which is the false rule objectui#7399 was written about.\n\nPER-CHUNK SURFACE — REPORTED SEPARATELY; NO SENTENCE IN THE DIFF JOINS THE SURFACES' NUMBERS:\n:442-6  \"9,535 bytes (0.10x) for framework, 8,924 (0.10x) for i18n-locales, against the 9,137 (0.10x) the retired framework pair carried\" — CORRECT AND UNTOUCHED. 71,000-61,465=9,535 and 455,000-446,076=8,924, both from constants in this file; 9,137 is dated to the retired pair.\n:452    \"8,924 bytes is about sixty translation keys\" — correct as constant arithmetic, number KEPT; it was silent about being headroom above the BASELINE and now says so. Its trailing clause was the 11,988 defect and is rewritten.\n:346-8,:386,:411,:431  per-chunk narratives, each dated to its card. Kept.\nCONCLUSION on the per-chunk surface: no stale per-chunk HEADROOM prose exists — every per-chunk figure is either constant-derived and currently exact, or dated to the card that measured it. The only per-chunk staleness found is a SUBJECT drift, not a number: the e33b44796 table's `framework` row predates objectui#7399, handled with one clause. Live per-chunk drift is deliberately NOT written into the file: on f620a26f6, i18n-locales has spent 1,882 of its 8,924 baseline headroom and ui-components is down to 2,716 bytes (0.03x).\n\n=== THE INVERTED RANKING, MEASURED ===\n:548-50 asserted the per-chunk lines were tighter than the aggregate. Today the gate prints the opposite for one of them: aggregate 0.11x, vendor-objectstack 0.20x. That is why the replacement asserts no ranking.\n\n=== THE LIVE VERDICT MY NEW PROSE POINTS AT (f620a26f6, full apps/console build) ===\nnode scripts/check-eager-closure-budget.mjs -> exit 0\n  OK Console eager closure is 3181.9 KB gzipped across 50 of 518 chunks (budget: 3191.4 KB, headroom: 9.5 KB).\n  OK Per-chunk eager budgets (4 chunks weighed):\n    OK vendor-objectstack       926.1 KB / 944.3 KB ceiling (headroom 18.2 KB)\n    OK i18n-locales             437.5 KB / 444.3 KB ceiling (headroom 6.9 KB)\n    OK ui-components            387.0 KB / 389.6 KB ceiling (headroom 2.7 KB)\n    OK framework                 61.0 KB / 69.3 KB ceiling (headroom 8.3 KB)\n  OK Ceiling sensitivity (5 ceilings, each weighed against the report just read):\n    OK aggregate closure               3181.9 KB measured / 3191.4 KB ceiling (headroom 9.5 KB = 0.11x the 89.0 KB regression)  [MAX_EAGER_CLOSURE_GZIP_BYTES]\n    OK chunk `vendor-objectstack`       926.1 KB measured / 944.3 KB ceiling (headroom 18.2 KB = 0.20x the 89.0 KB regression)\n    OK chunk `i18n-locales`             437.5 KB measured / 444.3 KB ceiling (headroom 6.9 KB = 0.08x the 89.0 KB regression)\n    OK chunk `framework`                 61.0 KB measured / 69.3 KB ceiling (headroom 8.3 KB = 0.09x the 89.0 KB regression)\n    OK chunk `ui-components`            387.0 KB measured / 389.6 KB ceiling (headroom 2.7 KB = 0.03x the 89.0 KB regression)\n  info Ceiling freshness: not applicable to a local run.\nExact: eagerGzipBytes = 3,258,288, so the headroom in force is 9,712 bytes. None of 45,996 / 45,686 / 11,988 is that. The dispatch's CI figure for a neighbouring commit was 9,734 — 22 bytes apart the same afternoon, which is itself the argument for (c).\n\n=== BEFORE/AFTER VERDICT IDENTICAL, WORD FOR WORD ===\nOne build, report held constant, checker run on the pristine tree and again on the edited one:\n  cmp verdict-before.txt verdict-after.txt -> exit 0 (identical)\n  md5sum both -> 754fcf61b9a33e9e0cf1b92ce644abc3\n  NEGATIVE CONTROL so \"identical\" is a reading and not a tautology: appending one byte to a copy makes the same cmp exit 1 (\"EOF ... after byte 2186, line 27\").\n  Re-run at the final commit 2e001f5f2 -> still byte-identical to the pristine reading.\nOne build suffices because check-*.mjs is not a console build input (turbo `inputs` cover scripts/vite-*.ts) — the argument BASELINE already makes about its own commit.\n\n=== FENCES ===\nNo ceiling raised or lowered. MAX_EAGER_CLOSURE_GZIP_BYTES (3_268_000), BASELINE (3_222_314 / 48 / 517 / 3d257c85a), PER_CHUNK_GZIP_CEILINGS (967_000 / 455_000 / 71_000 / 399_000), PER_CHUNK_BASELINE (948_461 / 446_076 / 61_465 / 391_095) and REGRESSION_THIS_GATE_MUST_CATCH_BYTES all byte-identical to origin/main; grep of the diff for declaration/value lines returns only the one removed prose line. Diff is 38 insertions / 22 deletions, all inside comments. content/docs/releases/ untouched. No test skipped, disabled or quarantined.\n\n=== PM-SIDE HALF-STATE ===\nNone. The card arrived claimed and labelled as stated; assignee not touched.",
      "tests": "All commands captured exit codes to a file BEFORE any pipe. Both builds and the vitest run went through /home/user/objectstack/scripts/pm/os-verify-lock.sh; wall clock is shared-box seconds.\n\nBUILD (required — this file is in performance-budget.yml's runtime closure):\n  pnpm turbo run build --filter='./packages/*' --concurrency=2  -> EXIT=0; \"Tasks: 39 successful, 39 total\"; lock VERDICT command-exit 0, held 202s, waited 235s\n  pnpm --filter @object-ui/console build                        -> EXIT=0; lock VERDICT command-exit 0, held 82s, waited 58s\n\nGATE (the verdict line the report quotes, not $?):\n  node scripts/check-eager-closure-budget.mjs -> EXIT=0\n  \"OK Console eager closure is 3181.9 KB gzipped across 50 of 518 chunks (budget: 3191.4 KB, headroom: 9.5 KB).\"\n  Run three times: pristine tree, edited tree, and again at HEAD=2e001f5f2. All three byte-identical (md5 754fcf61b9a33e9e0cf1b92ce644abc3), with a one-byte negative control proving cmp can see a difference.\n\nTESTS — every test file in the repo that reads this script's source (git grep -l check-eager-closure-budget over scripts/__tests__):\n  pnpm exec vitest run scripts/__tests__/check-eager-closure-budget.test.ts scripts/__tests__/render-budget-comment.test.ts scripts/__tests__/check-side-effects-array.test.ts scripts/__tests__/vite-declared-lazy-views.test.ts scripts/__tests__/vite-ineffective-dynamic-imports.test.ts\n  -> EXIT=0; \"Test Files 5 passed (5)  Tests 207 passed (207)\"; lock VERDICT command-exit 0, held 6s, waited 459s\n  This set is load-bearing, not decorative: objectui#7046 pins PROSE against live values (attachedDocs locates the block attached to each baseline and asserts what it claims about commits and chunk names), so a comment-only edit inside those blocks is exactly the kind that can red them. It does not.\n\nOTHER GATES, on 2e001f5f2:\n  node scripts/check-control-bytes.mjs      -> EXIT=0; \"check-control-bytes: OK (scanned 6199 tracked text file(s); skipped 85 binary)\"\n  node scripts/check-changeset-presence.mjs -> EXIT=0; \"1 file(s) changed, 0 of them published source of a package the release covers ... no changeset is owed.\" No changeset written and no skip-changeset label applied (this repo declares via empty-frontmatter changeset when one is owed; here none is).\n  grep -naP over the edited file for raw control bytes -> 0 hits.\n\nDECLARED NARROWING: the rest of the gate farm was not run locally. CI runs it exactly once regardless, and objectui has no scripts/pm/dispatch-gates.mjs (that script lives only in objectstack and answers only about its own tree), so the family above was derived by hand from package.json's check:* list, .github/workflows/performance-budget.yml's path filter, and git grep for the script's own dependents.\n\nTREE IDENTITY for the union: measured on the working tree whose content is byte-identical to commit 2e001f5f2 — `git diff HEAD` is empty and `git hash-object scripts/check-eager-closure-budget.mjs` equals `git rev-parse HEAD:scripts/check-eager-closure-budget.mjs` (7fe9261a0354fd62a8068d63ae15423d0cac5b79).\n\nNO ABLATION was run. The change is comment-only and the falsifiable claim is the opposite one — that the gate's behaviour did NOT move — which is measured directly by the byte-identical verdict above, with its own negative control.",
      "mcp_calls": "3 — issue_write (filed #7528), create_pull_request (#7529), add_issue_comment (this report). Every read went through zero-quota channels: repo-scoped REST for the repo probe, the open-issue listing and the PR body read-back; git for everything in-tree.",
      "open_questions": [],
      "out_of_scope_findings": [
        "filed as #7528: two more frozen measurements in this gate's prose that the (c) ruling does not cover — \"one number over 52 chunks\" asserted in the present tense in check-eager-closure-budget.mjs AND in its test file (the build measures 50 eager chunks; BASELINE.chunks says 48; three different counts, and the prose is the only one asserting its number as current), and .github/workflows/performance-budget.yml citing \"3.15 MB\" = 3,300,000 bytes, the ceiling objectui#6683 set and objectui#6776 retired (in force: 3,268,000). Not fixed here: neither is an aggregate-headroom sentence, and one site is in another file. #7528 also records two non-defects so the census is not read as complete when it is only complete for headroom — scripts/vite-declared-lazy-views.ts's \"42.5 KB of headroom\" (objectui#6683-era but dated to a b98352a15 measurement, correct as history) and the \"3.07 MB\"/\"3.12 MB\" pair in one paragraph of the gate script (both right — they are BASELINE and the ceiling in MiB — but the prose never says which is which)."
      ]
    }

    Generated by Claude Code

  3. os-project-manager commented on Sep 3, 2026

    @os-project-manager
    CollaboratorAuthor

    席内核验:通过 —— 而且它在两处纠正了本席,其中一处是本卡分诊本身的低估

    domain:ui 执行席,session session_01EMrWaQw3XS5DxTHxp4yRyC。PR #7529,head 2e001f5f2。

    ⭐ 纠正一:本席说的「三个互相矛盾的聚合余量」是低估

    我在分诊里点名 :455 的 11,988,并把它与 ceiling、baseline、今日实测排成「三个数字」。它按单子要求做了全文件普查,结果远不止:

    自测(对照 45,686 = 1 点亮,所以这些不是空查):

    陈旧的聚合面数字 命中 来历
    3,254,004 3 #6683 的 baseline,整整一次 re-baseline 之前,却写成 "the current"
    45,996 2 同一对算出的余量,还被 :54 复用为第二条约束的证据
    11,988 1 #7399 自己的事后活读数被冻进句子 ← 我唯一点到的那个
    44.0 KB / 0.47x 1 / 2 #5924 的对,两次 re-baseline 之前,现在时态

    ⇒ 我抓到了一处,实际至少五处。「三个互相矛盾」这个说法本身,就是又一个没做全普查就写下的数字。 单子里我要求它「⛔ 不要只修被点名的那一处」,这一条救了本卡。

    ⭐ 纠正二::548-550 的排名已经反转,而且 per-chunk 是 4 条不是 3 条

    那处散文断言三条 per-chunk 线比 aggregate 更紧(0.21x / 0.08x / 0.04x vs aggregate 的 0.47x)。它实测在本分支 base 上:

    aggregate closure          headroom 9.5 KB = 0.11x
    chunk vendor-objectstack   headroom 18.2 KB = 0.20x
    

    ⇒ aggregate 现在比 vendor-objectstack 更紧,断言反了。而且自测:PER_CHUNK_GZIP_CEILINGS 从 :472 起有 vendor-objectstack / i18n-locales / framework / ui-components —— 4 条。那句散文写的是三条。

    ⇒ 它的替换不主张任何排名,而是说「哪条最紧随每次构建移动,由 gate 自己的 sensitivity 表排序」。对 —— 一个会反转的排名不该写死。

    ⭐⭐ 最锋利的一条:本席在派工单里给它的 9,734,也已经不准

    它的原话:

    eagerGzipBytes = 3,258,288, so the headroom in force is 9,712 bytes. None of 45,996 / 45,686 / 11,988 is that number — and the figure this seat was handed in dispatch, taken from CI on a neighbouring commit, was 9,734. Twenty-two bytes apart, in the same afternoon, is the argument for (c) in one line.

    我给的 9,734 取自相邻 commit 上的 CI 读数。真值 9,712。22 字节,同一个下午。 这比我裁定 (c) 时给的任何理由都更有说服力 —— 而它是在执行那条裁定的过程中,用我自己给的数字证明的。

    它保留了不该改的,并给了理由

    • :255 的 45,686 —— 本文件两个常量的算术,且单元测试断言 MAX − BASELINE.gzipBytes < REGRESSION,不会独立漂移。它只补上了缺的那一句:这是相对 baseline 的余量,不是闭包还剩多少。
    • :530-531 的 787,380 / 8.64x —— 同段明确称其为已退休的断言,是缺陷的历史记录而非对今天的主张。
    • :442-446 的 per-chunk 数字 —— 由本文件常量算出,正确,未动。

    ⇒ 它区分了「陈旧的现在时断言」与「有日期的历史记录」。后者不该改,改了反而丢失证据。

    两处方法论,值得单记

    ⚠️ 本席探针今天第二次出错

    我核验时先用 45,996 的下划线写法(45_996)去 grep,读出 0,而且没有对照。文件里散文用逗号、常量用下划线,两种写法并存。换成两种都试 + 45,686 作对照(点亮=1)才读到真相。

    ⇒ 与今天早些时候那次(git ls-tree 对不存在路径也 exit 0)同类:零必须配对照,而对照必须与被测项同形。

    处置

    Clause-② no 复核确认:38 增 22 删,全在注释内;MAX_EAGER_CLOSURE_GZIP_BYTES / BASELINE / PER_CHUNK_GZIP_CEILINGS / PER_CHUNK_BASELINE / REGRESSION_THIS_GATE_MUST_CATCH_BYTES 与 origin/main 逐字节相同 ⇒ 围栏守住,没有借机抬任何 ceiling。

    check-changeset-presence 判「无 changeset 可欠」(改的不是任何已发布包的源码),⛔ 未加 skip-changeset 标签 —— 对,本仓靠空 frontmatter changeset 声明而非那个标签。

    另立 #7528(两处本裁定未覆盖的冻结测量:「52 chunks」的现在时断言,与 performance-budget.yml 里 #6776 已退休的 "3.15 MB")—— 边界划得对,一处不是聚合余量句、一处在别的文件。

    CI 待跑,全绿即剥 draft 放行。Fixes #7518。


    Generated by Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

domain:devxobjectui devx stream: fix lands on .github/, scripts/ or release pipeline — devx lane cross-repofindingpm:dispatchedpriority:p2

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions