Complete training workflow and acceptance hardening
This commit is contained in:
parent
4c4b91064f
commit
7237265833
243 changed files with 17014 additions and 1500 deletions
|
|
@ -8,6 +8,7 @@ import { readFileSync } from "node:fs";
|
|||
|
||||
const types = readFileSync(new URL("../src/shared/types/generated.ts", import.meta.url), "utf8");
|
||||
const spec = readFileSync(new URL("../src/features/kio-card/fields.ts", import.meta.url), "utf8");
|
||||
const backendKio = readFileSync(new URL("../../backend/app/domain/kio.py", import.meta.url), "utf8");
|
||||
|
||||
// Поля, которых на форме нет намеренно.
|
||||
const SKIP = new Map([
|
||||
|
|
@ -42,4 +43,19 @@ if (missing.length || extra.length) {
|
|||
if (extra.length) console.error("на форме есть, а в контракте нет:", extra.join(", "));
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
const editableBlock = backendKio.match(/EDITABLE_KIO_FIELDS:[\s\S]*?=\s*frozenset\(\{([\s\S]*?)\}\)/)?.[1];
|
||||
if (!editableBlock) throw new Error("в backend/app/domain/kio.py нет EDITABLE_KIO_FIELDS");
|
||||
const backendEditable = new Set([...editableBlock.matchAll(/"([^"]+)"/g)].map((match) => match[1]));
|
||||
const formEditable = new Set([...spec.matchAll(/\{\s*path:\s*"([^"]+)"([^}]*)\}/gs)]
|
||||
.filter((match) => !/readOnly:\s*true/.test(match[2]))
|
||||
.map((match) => match[1]));
|
||||
const unavailableInForm = [...backendEditable].filter((path) => !formEditable.has(path));
|
||||
const notScorable = [...formEditable].filter((path) => !backendEditable.has(path));
|
||||
if (unavailableInForm.length || notScorable.length) {
|
||||
if (unavailableInForm.length) console.error("required_fields, отсутствующие/только для чтения в форме:", unavailableInForm.join(", "));
|
||||
if (notScorable.length) console.error("редактируемые поля формы без backend scoring allowlist:", notScorable.join(", "));
|
||||
process.exit(1);
|
||||
}
|
||||
console.log(`карточка КИО: все ${expected.length} полей контракта на форме`);
|
||||
console.log(`required_fields: backend allowlist совпадает с ${formEditable.size} редактируемыми путями формы`);
|
||||
|
|
|
|||
Loading…
Reference in a new issue