mirror of
https://github.com/Matysh/houseplan-card
synced 2026-10-01 12:18:51 +00:00
ci: include dynamic backend inputs in gates (#542)
Issue: #542 User-Visible: no
This commit is contained in:
committed by
claude[bot]
parent
9c08d583ab
commit
744f502ba3
@@ -182,6 +182,27 @@ test('§8.1 представители: каждая категория кажд
|
||||
}
|
||||
});
|
||||
|
||||
test('#542: каждый динамический cross-runtime input выбирает backend без глобального fallback', () => {
|
||||
const cases = [
|
||||
[p('src', 'plan-optimizer.ts'), p('tests_backend', 'test_validation.py')],
|
||||
[p('src', 'logic.ts'), p('tests_backend', 'test_support_package.py')],
|
||||
[p('demo', 'fixtures', 'large-house.mjs'), p('tests_backend', 'test_validation.py')],
|
||||
[p('demo', 'fixtures', 'visual-matrix.mjs'), p('tests_backend', 'test_validation.py')],
|
||||
];
|
||||
for (const [input, consumer] of cases) {
|
||||
assert.ok(MANIFEST.backend.has(consumer), `${consumer}: consumer не входит в backend`);
|
||||
assert.ok(MANIFEST.backend.has(input), `${consumer} читает ${input}, но manifest его потерял`);
|
||||
const { affected, unknown } = checksAffectedBy([input], ROOT, { manifest: MANIFEST });
|
||||
assert.ok(affected.has('backend'), `${input}: backend не выбран`);
|
||||
assert.ok(affected.size < CHECK_NAMES.length, `${input}: сработал глобальный fallback вместо точного owner`);
|
||||
assert.deepEqual(unknown, [], input);
|
||||
}
|
||||
|
||||
const unrelated = p('demo', 'fixtures', 'wall-draw-click.mjs');
|
||||
assert.ok(!MANIFEST.backend.has(unrelated), `${unrelated}: точные roots нельзя расширять до всего каталога`);
|
||||
assert.ok(!checksAffectedBy([unrelated], ROOT, { manifest: MANIFEST }).affected.has('backend'));
|
||||
});
|
||||
|
||||
test('§8.1 обратная проба (AC6): UI — не вход backend, backend — не вход браузерных job без причины', () => {
|
||||
for (const file of ['src/houseplan-card.ts', 'src/houseplan-editor-runtime.ts', 'src/iso-overlays.ts', 'package.json']) {
|
||||
assert.ok(!MANIFEST.backend.has(file), `backend зависит от ${file}`);
|
||||
|
||||
@@ -32,10 +32,14 @@ const makeTree = () => {
|
||||
put('scripts/gate-reuse.mjs', '// reuse protocol\n');
|
||||
put('scripts/check-inputs.mjs', '// manifest\n');
|
||||
put('src/card.ts', "export const CARD_VERSION = '1.0.0';\n");
|
||||
put('src/plan-optimizer.ts', 'export const PLAN_MODEL_VERSION = 1;\n');
|
||||
put('src/logic.ts', 'export const logic = 1;\n');
|
||||
put('demo/serve.mjs', "import './bundle-freshness.mjs';\n");
|
||||
put('demo/bundle-freshness.mjs', 'export const fresh = 1;\n');
|
||||
put('demo/srv/demo.html', '<div id="host"></div>\n');
|
||||
put('demo/fixtures/one.mjs', 'export const fixture = 1;\n');
|
||||
put('demo/fixtures/large-house.mjs', 'export const makeLargeHouseFixture = () => ({});\n');
|
||||
put('demo/fixtures/visual-matrix.mjs', 'export const makeVisualMatrixFixture = () => ({});\n');
|
||||
put('demo/smoke_alpha.mjs', "import { launch } from './serve.mjs';\nimport '../scripts/model-invariants.mjs';\nconsole.log(1);\n");
|
||||
put('demo/smoke_beta.mjs', "import { launch } from './serve.mjs';\nconsole.log(2);\n");
|
||||
put('scripts/model-invariants.mjs', 'export const invariants = 1;\n');
|
||||
@@ -176,6 +180,28 @@ test('#492 backend inputs the old HARNESS did not know: relay, schema, converter
|
||||
}
|
||||
});
|
||||
|
||||
test('#542 dynamic backend inputs invalidate its reuse key and unrelated fixtures do not', () => {
|
||||
const { dir, put } = makeTree();
|
||||
const bumpsBackend = (rel, text) => {
|
||||
const before = reuseKey(dir, 'backend');
|
||||
put(rel, text);
|
||||
assert.notEqual(reuseKey(dir, 'backend'), before, `${rel}: backend reuse key не изменился`);
|
||||
};
|
||||
try {
|
||||
bumpsBackend('src/plan-optimizer.ts', 'export const PLAN_MODEL_VERSION = 2;\n');
|
||||
bumpsBackend('src/logic.ts', 'export const logic = 2;\n');
|
||||
bumpsBackend('demo/fixtures/large-house.mjs', 'export const makeLargeHouseFixture = () => ({ changed: true });\n');
|
||||
bumpsBackend('demo/fixtures/visual-matrix.mjs', 'export const makeVisualMatrixFixture = () => ({ changed: true });\n');
|
||||
|
||||
const before = reuseKey(dir, 'backend');
|
||||
put('demo/fixtures/one.mjs', 'export const fixture = 2;\n');
|
||||
assert.equal(reuseKey(dir, 'backend'), before,
|
||||
'нерелевантная fixture не должна превращать backend в широкий UI-гейт');
|
||||
} finally {
|
||||
rmSync(dir, { recursive: true, force: true });
|
||||
}
|
||||
});
|
||||
|
||||
test('the built bundle is outside every key — each job builds it itself (#208)', () => {
|
||||
const { dir, put } = makeTree();
|
||||
try {
|
||||
|
||||
Reference in New Issue
Block a user