Files
OmniRoute/tests/unit/check-docs-counts-quality-neutral.test.ts
Dizzle 81bf3cc36e docs(checks): keep doc counts honest — headings, rankings, catalog, weights, quality gate and scoring diagram now covered (#12507)
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.
2026-09-10 10:54:38 -03:00

45 lines
1.6 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("quality neutral prose", () => {
it("AUTO-COMBO.md prose carries quality neutral 0.5", () => {
const doc = readFileSync("docs/routing/AUTO-COMBO.md", "utf8");
assert.match(doc, /quality.*neutral.*0\.5/i);
assert.match(doc, /quality.*0\.5/);
});
it("buildChecks exposes a soft entry for quality neutral prose", () => {
const checks = buildChecks() as Check[];
const entry = checks.find(
(c) =>
String(c.docKey ?? "").includes("quality neutral") ||
String(c.label ?? "")
.toLowerCase()
.includes("quality neutral")
);
assert.ok(entry, "quality neutral entry missing from buildChecks");
assert.equal(entry.strict, false, "quality neutral entry must be soft");
assert.ok(
(entry.files ?? []).includes("docs/routing/AUTO-COMBO.md"),
"must gate docs/routing/AUTO-COMBO.md"
);
const doc = readFileSync("docs/routing/AUTO-COMBO.md", "utf8");
const res = entry.validate!(doc);
assert.equal(res.ok, true, `expected soft gate to pass on current doc: ${res.detail}`);
const silent = "no mention of quality at all";
const r2 = entry.validate!(silent);
assert.equal(r2.ok, false, "reworded-away prose must fail");
});
});