mirror of
https://github.com/Matysh/houseplan-card
synced 2026-09-29 03:09:36 +00:00
ci: рекалибровать бюджет initial view и предупреждать до стены, а не после
Запас ушёл с 26 КБ до 8.3 КБ за сутки. По документам код-ревью видно, что это не диффузное расползание, а один шаг плюс обычная работа: #317 256127 · #318 256091 · #341 256046 · #354 257212 · #159 256828 #357 271143 <- +14 КБ за один заход #20 271455 · #361 272848 · #359 272469 · #360 273697 <- текущий факт Шаг на #357 — plan-art мебели: 44 top-view символа в eager-графе, которые платит каждый план, включая планы без единого предмета мебели. Потолок 282000 -> 300000. Правило #352 сохранено: 273697 x 1.10 = 301067, то есть 300000 остаётся внутри надбавки ~10% над измеренным фактом. Запас возвращается к 26.3 КБ — примерно к тому, что было до #357. Запись честная и в комментарии сказана прямо: рекалибровка ничего не ускоряет и ничего не чинит. Она фиксирует новую норму и возвращает гейту способность красить того, кто вырастил бандл, а не того, кто пушнул последним. Настоящий рычаг — ленивый граф, варианты 1 и 2 из #367. Добавлено предупреждение: пока запас меньше 15000 Б, гейт печатает ::warning:: и строку в summary. Прежняя редакция полагалась на то, что человек заметит тренд в выводе; за сутки его не заметил никто, потому что каждая отдельная строка выглядела нормально. Текст предупреждения называет лечение — иначе следующий читатель поднимет потолок ещё раз и назовёт это решением. Тест закрепляет обе стороны: надбавка не больше 10% и не меньше 5% (меньше — возврат лотереи «красит последний коммит»), тревога срабатывает строго ниже порога, превышение описывается как превышение. Три мутанта проверены руками, один добавлен в реестр. Issue: #367 User-Visible: no
This commit is contained in:
@@ -7,7 +7,9 @@ import test from 'node:test';
|
||||
import {
|
||||
buildBundleManifest, buildFingerprintPlugin, editorRuntimeRetryUrlPlugin,
|
||||
} from '../scripts/bundle-manifest.mjs';
|
||||
import { assertBundleBudget } from '../scripts/bundle-budget.mjs';
|
||||
import {
|
||||
INITIAL_VIEW_GZIP_BUDGET, LOW_HEADROOM_WARNING_BYTES, assertBundleBudget, lowHeadroomWarning,
|
||||
} from '../scripts/bundle-budget.mjs';
|
||||
import { compareBundleTrees, sha256Bytes, verifyBundleTree } from '../scripts/bundle-tree.mjs';
|
||||
import {
|
||||
minifyCssText, minifyStaticCssTemplates,
|
||||
@@ -196,3 +198,41 @@ test('bundle tree verification rejects orphan chunks (#353 AC4)', async () => {
|
||||
/orphan bundle asset: houseplan-assets\/junk-old\.js/,
|
||||
);
|
||||
});
|
||||
|
||||
// #367. Рекалибровка после того, как запас ушёл с 26 КБ до 8.3 КБ за сутки.
|
||||
// Она ничего не ускоряет — она фиксирует новую норму и возвращает рабочий
|
||||
// запас, чтобы гейт красил того, кто вырастил бандл, а не того, кто пушнул
|
||||
// последним. Настоящий рычаг — ленивые графы, и о нём напоминает сам текст
|
||||
// предупреждения.
|
||||
|
||||
test('потолок держится внутри правила ~10% над измеренным фактом (#352, #367)', () => {
|
||||
// Факт на момент рекалибровки — 273 697 Б gzip (dev @ 360).
|
||||
const fact = 273_697;
|
||||
assert.ok(INITIAL_VIEW_GZIP_BUDGET > fact, 'потолок ниже факта сделал бы гейт вечно красным');
|
||||
const allowance = (INITIAL_VIEW_GZIP_BUDGET - fact) / fact;
|
||||
assert.ok(allowance <= 0.10 + 1e-9, `надбавка ${(allowance * 100).toFixed(1)}% больше правила 10%`);
|
||||
assert.ok(allowance > 0.05, 'надбавка меньше 5% возвращает лотерею «красит последний коммит»');
|
||||
});
|
||||
|
||||
test('тревога о запасе срабатывает до стены, а не после (#367)', () => {
|
||||
// Порог выбран так, чтобы предупреждение приходило примерно за две средние
|
||||
// фичи до потолка: обычный прирост — около килобайта за задачу.
|
||||
assert.equal(lowHeadroomWarning(LOW_HEADROOM_WARNING_BYTES), null);
|
||||
assert.equal(lowHeadroomWarning(LOW_HEADROOM_WARNING_BYTES + 1), null);
|
||||
const warning = lowHeadroomWarning(LOW_HEADROOM_WARNING_BYTES - 1);
|
||||
assert.match(warning, /меньше порога/);
|
||||
// Предупреждение обязано называть лечение: без этого следующий читатель
|
||||
// поднимет потолок ещё раз и назовёт это решением.
|
||||
assert.match(warning, /Рекалибровка это не лечит/);
|
||||
assert.match(warning, /#367/);
|
||||
});
|
||||
|
||||
test('превышенный бюджет описывается как превышение, а не как малый запас (#367)', () => {
|
||||
assert.match(lowHeadroomWarning(-42), /превышен на 42 Б/);
|
||||
assert.equal(lowHeadroomWarning(Number.NaN), null);
|
||||
});
|
||||
|
||||
test('запас на момент рекалибровки выше порога тревоги (#367)', () => {
|
||||
// Иначе рекалибровка была бы бессмысленной: гейт сразу же начал бы кричать.
|
||||
assert.ok(INITIAL_VIEW_GZIP_BUDGET - 273_697 > LOW_HEADROOM_WARNING_BYTES);
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user