mirror of
https://github.com/diegosouzapw/OmniRoute.git
synced 2026-09-17 20:32:25 +03:00
Estender o gate de contagens para headings, rankings, catálogo, pesos, quality gate e o diagrama de scoring é exatamente o tipo de trabalho que evita a classe inteira em vez de um caso. Falo por experiência desta campanha: o `check:docs-counts` caiu **duas vezes** hoje pela mesma causa — contagem de migration escrita à mão em três arquivos mais 41 mirrors, desatualizando a cada migration nova (#12970 e #13209). Cada superfície que este PR passa a cobrir é uma que deixa de virar base-red na mão de quem vier depois. Revalidei sobre o tip: **19/19**, `check:docs-counts-sync` com 0 drifts, `check:docs-all` PASS, `check:doc-links` PASS. **Integração:** dois conflitos. 1. `scripts/check/check-docs-counts-sync.mjs` — o bloco de leitura de fatos conflitou com os imports de free-tier que entraram pelo #12786/#12744 nesta campanha. Aditivo, os dois conjuntos ficaram. 2. `docs/diagrams/auto-combo-scoring.mmd` — o seu rótulo dizia `reliability (0.0000)`, mas o #12731 mergeou horas antes e passou a dar peso de reliability a todo mode pack. Ficou o rótulo do tip, `reliability (0.0000 DEFAULT, 0.03 packs, 0.04 reliable)`, que é o número real agora.
47 lines
1.8 KiB
TypeScript
47 lines
1.8 KiB
TypeScript
import { describe, it } from "node:test";
|
|
import assert from "node:assert/strict";
|
|
import { readFileSync } from "node:fs";
|
|
import { buildChecks } from "../../scripts/check/check-docs-counts-sync.mjs";
|
|
|
|
type Check = {
|
|
label?: string;
|
|
docKey?: string;
|
|
actual?: unknown;
|
|
strict?: boolean;
|
|
files?: string[];
|
|
validate?: (content: string, claim?: string) => { ok: boolean; detail: string };
|
|
};
|
|
|
|
describe("routing weights cross-check (soft)", () => {
|
|
it("scoring.ts DEFAULT_WEIGHTS and intelligentRouting.ts DEFAULT_INTELLIGENT_WEIGHTS exist", () => {
|
|
assert.match(readFileSync("open-sse/services/autoCombo/scoring.ts", "utf8"), /DEFAULT_WEIGHTS/);
|
|
assert.match(
|
|
readFileSync("src/lib/combos/intelligentRouting.ts", "utf8"),
|
|
/DEFAULT_INTELLIGENT_WEIGHTS/
|
|
);
|
|
});
|
|
it("buildChecks exposes a soft INTELLIGENT keys vs DEFAULT entry", () => {
|
|
const checks = buildChecks() as Check[];
|
|
const w = checks.find(
|
|
(c) =>
|
|
String(c.docKey ?? "").includes("INTELLIGENT vs DEFAULT") ||
|
|
String(c.label ?? "").includes("INTELLIGENT vs DEFAULT")
|
|
);
|
|
assert.ok(w, "INTELLIGENT vs DEFAULT entry missing");
|
|
assert.equal(w.strict, false);
|
|
assert.ok(Array.isArray(w.files) && w.files.length > 0);
|
|
});
|
|
it("combo-scoring-weights-schema-coverage still references DEFAULT_INTELLIGENT_WEIGHTS", () => {
|
|
const txt = readFileSync("tests/unit/combo-scoring-weights-schema-coverage.test.ts", "utf8");
|
|
assert.match(txt, /DEFAULT_INTELLIGENT_WEIGHTS/);
|
|
});
|
|
it("no MIN_USAGE gate exists (documented as not gated separately)", () => {
|
|
const checks = buildChecks() as Check[];
|
|
const m = checks.find(
|
|
(c) =>
|
|
String(c.docKey ?? "").includes("MIN_USAGE") || String(c.label ?? "").includes("MIN_USAGE")
|
|
);
|
|
assert.equal(m, undefined);
|
|
});
|
|
});
|