VERIFIER CORE · VÉRIFICATION AFFIRMATION-CONTRE-SOURCE
Il compare ce qu'un texte affirme à ce que dit sa source, et renvoie l'un de six états, preuves à l'appui.
Verifier Core est un kernel, pas un chatbot. Vous lui donnez une affirmation, un résolveur qui sait comment votre domaine nomme ses sources, et le texte canonique de référence — il vous dit si l'affirmation se vérifie, et montre les preuves dans les deux cas.
Déterministe : aucun modèle de langage n'intervient dans le verdict. Même texte, même source, même verdict, reproductible dans un an — ce qui le rend utilisable comme preuve, et non comme opinion.
CE QUE CE N'EST PAS
Le marché regorge de choses qui sonnent pareil et n'en sont pas.
Ce n'est pas un détecteur d'hallucinations
Aucun modèle ne juge la plausibilité. Il vérifie une affirmation précise face à une source précise, rien en amont de cela.
Ce n'est pas un score de confiance
Il renvoie un état et les preuves qui le soutiennent, pas un nombre entre 0 et 1. Un score déplace simplement la décision difficile — où placer le seuil — sur celui qui doit le lire.
Ce n'est pas un moteur de recherche
Il ne va pas chercher de documents pour vous. Vous fournissez le corpus ; il compare l'affirmation à ce que vous lui avez donné.
Il ne vérifie pas le raisonnement
Il vérifie des affirmations individuelles face à leur source, pas ce qu'on en déduit. Deux prémisses correctement citées menant à une conclusion fausse passent quand même — l'étape inférentielle n'est pas ce que cela vérifie, et cette page le dit plutôt que de laisser le nom le sous-entendre.
CONÇU POUR ÊTRE CONSTRUIT DESSUS
Un kernel, pas une application. Vous apportez trois ou quatre petites pièces et il fait le reste du parcours.
Chaque secteur diffère sur un seul point : comment une source est nommée dans ce domaine. Récupérer le texte canonique, vérifier qu'il était toujours en vigueur à la date pertinente, comparer le sens et composer le résultat — c'est commun à un cabinet d'avocats, une pharmacie et un atelier de maintenance, donc cela vit une seule fois dans le kernel plutôt qu'une fois par intégration.
ReferenceResolver
12 lignes
Comment une source est nommée dans votre domaine.
CorpusPort
~20 lignes
D'où vient le texte canonique.
DomainPack (optionnel)
~40 lignes
Le vocabulaire de grandeurs de votre secteur.
LanguagePack (optionnel)
les quatre, ou aucune
Les couches de votre langue : négation, omission, dates et repliement orthographique.
SemanticAdvisor (optionnel)
—
Un second avis qui peut nuancer un verdict — il ne promeut jamais un verdict à verified.
Le résolveur de douze lignes constitue l'essentiel de l'argument. C'est du code réel, pas une promesse — copié de la suite de tests exécutée en CI, pour un domaine fictif inventé pour ce test (références à des sections de notice technique) :
const fichaTecnica = {
id: "demo:ficha-tecnica@1",
resolve(text) {
const out = [];
const re = /secci[oó]n\s+(\d+\.\d+)/gi;
let m;
while ((m = re.exec(text)) !== null) {
out.push({
id: `smpc:${m[1]}`,
raw: m[0],
span: [m.index, m.index + m[0].length],
});
}
return out;
},
};La seule chose qui change entre un cabinet d'avocats, un laboratoire et un atelier de maintenance, c'est cette première étape : reconnaître à quoi ressemble une référence à une source dans leurs documents. Le reste — récupérer le texte canonique, vérifier qu'il était en vigueur, comparer le sens, composer le verdict — est le travail du kernel, fait une seule fois.
TROIS CAS QUE LE CALCUL SEUL NE RÉSOUT PAS
Des cas mesurés, pas des illustrations construites pour simplifier la démonstration.
Si une page présente des démos, voici celles qui méritent d'être montrées : aucune des trois n'est détectée par un simple contrôle numérique ou de similarité textuelle.
Le chiffre qui ne change pas — vol 143 d'Air Canada
Source : « Uplift 22300 kg of fuel before departure today. »
Texte : « Uplift 22300 lb of fuel before departure today. »En 1983, un Boeing 767 a été ravitaillé en livres alors que le calcul au sol supposait des kilos, et l'appareil est tombé en panne de carburant à 41 000 pieds au-dessus du Manitoba. Les chiffres sont identiques dans les deux textes, donc aucun contrôle numérique qui ne compare que les grandeurs ne peut le détecter — il faut savoir que les unités diffèrent. C'est une illustration historique du mode de défaillance, utilisée ici pour cette seule raison : ni client, ni incident que ce moteur aurait évité.
Le mot qui veut dire deux choses — le gallon
Un gallon fait 4,546 L au Royaume-Uni et 3,785 L aux États-Unis, un écart de 20 %, et les deux documents peuvent être en anglais. Sans région déclarée, le moteur s'abstient et le dit plutôt que de deviner. En déclarant GB, la paire se résout d'une façon ; en déclarant US, la même paire devient un vrai écart. Même texte, deux réponses différentes — ce n'est pas une incohérence, c'est une question incomplète qu'une région déclarée complète. Langue et convention de mesure sont ici des axes séparés, tout comme la région d'un téléphone est indépendante de sa langue.
La demi-vérité — ce qui est omis
Source : « contre-indiqué en cas d'insuffisance hépatique, d'insuffisance rénale sévère et pendant la grossesse »
Texte : « contre-indiqué en cas d'insuffisance hépatique, d'insuffisance rénale sévère »La grossesse est omise. Similarité textuelle entre les deux : 1,000 — pas un mot n'est modifié, une clause manque simplement. Un score de similarité seul aurait déclaré cela verified.
SIX ÉTATS, PAS UN BOOLÉEN
La majeure partie du marché renvoie vrai ou faux. La distinction, c'est le produit.
Un moteur binaire qui ignore quelque chose doit arrondir d'un côté ou de l'autre, et les deux directions sont dangereuses. Six états séparent « cette source n'existe pas » — un constat réel contre le texte — de « nous n'avons pas pu regarder » — une lacune de notre côté — et à nouveau de « hors de ce que nous couvrons » — une décision de périmètre, pas un échec.
verified
l'affirmation se vérifie face à la source
mismatch
la source dit autre chose
not_found
le corpus fonctionne et cette source n'existe pas — un constat contre le texte
derogated
elle a existé, mais n'était pas en vigueur à la date des faits
pending
nous n'avons pas pu regarder — une lacune qui nous appartient, pas au texte
not_verifiable
hors de ce que couvre ce déploiement
Ne pas savoir n'est pas la même chose qu'accuser. Renvoyer not_found quand la réponse honnête est pending produit une fausse accusation déguisée en constat — l'erreur la plus coûteuse qu'un vérificateur puisse commettre, car pour celui qui la lit, elle ressemble exactement à un vrai constat. C'est pourquoi le corpus déclare lequel des deux c'est, plutôt que de laisser le moteur le déduire de la forme d'un échec.
AGNOSTIQUE PAR CONSTRUCTION, PAS PAR SLOGAN
Domaine, langue, corpus et modèle sont tous des ports, aucun n'est câblé en dur.
La connaissance sectorielle entre par un résolveur et un pack de domaine optionnel, jamais câblée en dur dans le kernel, si bien que le même moteur qui vérifie une notice pharmaceutique vérifie un rapport de maintenance ou un contrat de crédit sans toucher à son cœur. Six langues bénéficient aujourd'hui d'un support complet et certifié — anglais, espagnol, français, allemand, italien et portugais — chacune avec ses propres couches complètes de négation, d'omission, de dates et de repliement orthographique. Une langue s'enregistre avec les quatre couches à la fois ou avec aucune : une politique commune avec des exceptions par langue est exactement la façon dont la contamination croisée entre langues s'installe, donc il n'y en a pas.
Langue et convention de mesure sont déclarées séparément, tout comme la région d'un téléphone est indépendante de sa langue : un document britannique et un document américain peuvent être tous deux en anglais et ne pas s'accorder sur ce que signifie un nombre. Laisser le système de mesure non déclaré n'équivaut pas à supposer le métrique — c'est une véritable troisième réponse, que le moteur donne plutôt que de deviner.
CE QUE NOUS MONTRONS QUAND MÊME
Le corpus publie ses propres lacunes connues.
Un classement de résistance oppose le moteur de référence à des solutions de base et publie les échecs à côté des réussites — y compris des solutions de base qui dépassent la référence sur une seule colonne, parce qu'un vérificateur qui rejette tout affiche zéro fuite sur le papier, et ce n'est pas une vertu derrière laquelle se cacher. Par ailleurs : zéro dépendance d'exécution, et un contrôle d'installation-vérification air-gapped qui fonctionne sans aucun accès réseau, pour que l'affirmation de déterminisme ci-dessus puisse être testée plutôt que crue sur parole.
Un certificat sans lacune déclarée est soit parfait, soit mensonger, et ni l'un ni l'autre n'est crédible.
VERIFIER CORE ET GRUNDNORM
Complémentaires, pas concurrents — deux extrémités opposées du même problème.
Grundnorm scelle qui a vérifié un enregistrement et quand : une provenance cryptographique qui survit au fait que l'enregistrement soit touché après coup. Verifier Core vérifie si une affirmation précise se vérifie face à sa source : la comparaison elle-même. L'un prouve qu'un enregistrement n'a pas été altéré après son scellement ; l'autre prouve que ce que l'enregistrement affirmait était vrai au moment de son scellement.
Voir comment fonctionne GrundnormVous construisez un secteur qui a besoin de cette couche ?
@veredicto/core n'est pas distribué comme un paquet installable — il est intégré dans des applications, pas téléchargé dedans. Dites-nous contre quoi vous devez vérifier vos affirmations, et nous passerons les ports en revue avec vous.