import { describe, it, expect } from "vitest";
import { seedOnderdelen } from "./onderdelen";

// ── Ratchet: agentwenken-dekking van meervoudige-hypothese-onderdelen ────────
// AGENTS.md ("Integratie van brondocumenten") vraagt bij elk onderdeel met
// meerdere varianten een `agentwenken`-handleiding: op basis van welk
// feit/kenmerk de juiste hypothese gekozen wordt, welk brondocument daarvoor
// nodig is en wat de gekende valkuilen zijn. Deze test maakt van die
// heropnametaak een bewaakt, meetbaar doel (zelfde ratchet-principe als
// noordster-metriek.test.ts):
//
// - PLAFOND mag ENKEL DALEN. Vul je agentwenken aan (vanuit de back-up in
//   integratie/drive-backup/ of de brontekst), verlaag het plafond dan mee in
//   dezelfde commit.
// - Stijgt de teller boven het plafond, dan is er een nieuw onderdeel met > 2
//   varianten toegevoegd ZONDER agentwenken — vul ze in (verplicht bij elk
//   nieuw onderdeel, zie AGENTS.md), in plaats van het plafond te verhogen.
//
// N.B. de zustertaak "toelichting uit de bron bewaren" is niet machinaal
// meetbaar (of de bron een toelichting had, weet alleen de bron) en heeft dus
// bewust geen ratchet; de heropname-instructie ervoor staat in AGENTS.md.

/** Stand 2026-07-04 (na backfill-batch 1): 116 onderdelen met > 2 varianten missen agentwenken. */
const PLAFOND_ZONDER_AGENTWENKEN = 110;

describe("agentwenken-ratchet", () => {
  const kandidaten = seedOnderdelen.filter((o) => o.varianten.length > 2);
  const zonder = kandidaten.filter((o) => !o.agentwenken?.trim()).map((o) => o.id).sort();

  it("onderdelen met > 2 varianten zonder agentwenken: plafond enkel verlagen", () => {
    expect(
      zonder.length,
      zonder.length > PLAFOND_ZONDER_AGENTWENKEN
        ? `Regressie: ${zonder.length} onderdelen met > 2 varianten missen agentwenken ` +
            `(plafond ${PLAFOND_ZONDER_AGENTWENKEN}). Vul agentwenken in bij de nieuwe/gewijzigde ` +
            `onderdelen (AGENTS.md verplicht dit bij elk nieuw onderdeel) — verhoog nooit het plafond.\n` +
            `Zonder agentwenken: ${zonder.join(", ")}`
        : `De dekking is verbeterd (${zonder.length} < plafond ${PLAFOND_ZONDER_AGENTWENKEN}): ` +
            `verlaag PLAFOND_ZONDER_AGENTWENKEN naar ${zonder.length} in dezelfde commit (ratchet).`
    ).toBe(PLAFOND_ZONDER_AGENTWENKEN);
  });
});
