EDIKKA LABORATOIRE OUVERTV1.0

MÉTHODE / V1.0

La décision a besoin
d’un contexte.

Ce que l’instrument calcule, ce qu’il constate et ce qu’il laisse indéterminé.

Quatre couches, quatre responsabilités

  1. Préparer l’URL. Origine, chemin et query explicités ; aucune URL du manifeste n’est visitée.
  2. Résoudre le profil. Un catalogue daté choisit le jeton et ses replis documentés. Le matcher brut ne connaît ni Googlebot-Image ni les usages de Gemini.
  3. Calculer les règles. Sélection des groupes, motifs correspondants et ensemble décisif. Allow prévaut à priorité égale ; un groupe spécifique n’hérite pas du général.
  4. Vérifier l’intention et la réception. L’attente décide si allow ou disallow constitue un écart. La capture indique si la livraison permet une conclusion.

Référence et portée du moteur

Moteur edikka-rep/1.0.0. Le code TypeScript est distinct du moteur C++ Google utilisé comme oracle. Référence immuable : 22b355ff855419e6a3ff8ff09c0ad7fdb17116f9. Le protocole RFC 9309 et l’interprétation Google situent ce modèle.

Le corpus déterministe et son rapport daté sont dans proofs/ du dépôt. Ils confrontent parsing et matching uniquement. Ils ne valident ni les usages opérateurs, ni les replis, ni HTTP. Aucun accord fini ne démontre une équivalence universelle.

La V1 reproduit aussi les tolérances observées dans ce commit : clés avec certains préfixes/typos, séparation sans deux-points à deux mots, suffixe du jeton ignoré, et Allow /index.htm équivalent à la racine du répertoire lorsqu’il ne correspond pas directement. Ces anomalies sont diagnostiquées ; le modèle n’est pas présenté comme une application strictement littérale de la RFC.

URL : contrat explicite

Les entrées sont des chemins commençant par / ou des URL absolues HTTP(S). Une autre origine est hors périmètre. Les identifiants, les formes relatives, //, les espaces, contrôles, antislashs et pourcentages mal formés sont refusés.

L’API WHATWG URL normalise l’hôte/IDN, les ports par défaut et les segments point. Le fragment est retiré. Les hexadécimaux %HH sont mis en majuscules sans décoder %2F, %23 ni les autres octets. La casse du chemin, les doubles slashs et l’ordre de la query sont conservés. RFC 3986 décrit les distinctions entre octets réservés et non réservés ; nous n’affirmons pas implémenter toutes ses normalisations possibles.

Limites et états

2 Mio par fichier, 16 663 octets par ligne, 10 000 règles, 8 192 octets par URL, 5 000 attentes. Un budget de 20 millions d’opérations par fichier borne les motifs complexes ; son dépassement rend les cas non concluants. Le worker est interruptible. NUL, Unicode invalide et lignes trop longues sont refusés, sans analyse silencieuse d’un préfixe.

La limite Google de 500 Kio n’est pas la limite universelle des robots. La V1 ne simule pas cette troncature ; les profils Google deviennent indéterminés au-delà. Les autres profils emploient un modèle déclaré, avec leur niveau de couverture et leurs réserves.

allow / disallow
Décision du modèle dans la dimension du profil, sans garantie d’application réelle.
indeterminate / out_of_scope
Décision non attribuable ou autre origine ; jamais un succès implicite.
pass / fail
Décision comparée à l’intention déclarée.
inconclusive / invalid
Applicabilité, données ou saisie ne permettent pas la réception.

CLI et livraison

npm ci
npm run build
npm run review -- check --robots examples/corrected.txt --expectations examples/expectations.json --out reports/local
npm run review -- compare --before examples/before.txt --after examples/proposed.txt --expectations examples/expectations.json --out reports/comparison
npm run review -- check-served --origin https://example.com --planned examples/corrected.txt --expectations examples/expectations.json --out reports/served
npm run review -- replay --capture reports/served/capture.json --planned examples/corrected.txt --expectations examples/expectations.json --out reports/replay

Node 22.12 minimum. check, compare et replay fonctionnent hors ligne. check-served fait un GET avec un User-Agent propre, sans cookies ni authentification, sans retry. 15 secondes au total, 5 redirections, 2 Mio décodés maximum. Les adresses résolues sont vérifiées et fixées pour chaque requête ; --allow-local autorise explicitement un serveur local contrôlé. Aucun proxy public.

Le rapport garde l’origine initiale, la destination finale, les statuts, une liste limitée d’en-têtes, les octets conservés et leur SHA-256. L’empreinte d’un corps tronqué est celle des octets conservés uniquement. Une réponse 404, 429, 503, un timeout ou du HTML en 200 ne prouve aucun comportement futur du crawler ni l’état de son cache.

Contenus identiques, décisions identiques sur les cas et conformité aux attentes sont trois résultats séparés. Une différence ne désigne pas un CDN comme cause. La capture synthétique des exemples n’est pas une observation distante.

Données et exports

Analyse dans votre navigateur. Vos fichiers ne sont pas envoyés à un serveur. Après chargement des ressources, import, analyse, filtrage et export sont locaux. Aucune persistance automatique. Remettre à zéro efface l’état utilisateur en mémoire.

Le CSV conserve les colonnes importées et ajoute des colonnes edikka_. Les cellules susceptibles d’être interprétées comme formules reçoivent une apostrophe ; le JSON conserve les valeurs brutes. Les rapports peuvent contenir des chemins sensibles et sont exclus du versionnement.

Schéma des attentes · Schéma du rapport · Schéma de capture

Ce que les tests ne prouvent pas

Les tests de clavier, sans JavaScript, de responsive et l’analyse automatique d’accessibilité détectent des défauts ciblés ; ils ne constituent pas une conformité RGAA. Le test de 5 000 cas mesure une machine et un fichier synthétique, sans généralisation statistique.