PRÉPARATION DES PREUVES
La bonne preuve,
pour le bon contrôle.
Le plan, la capture et la revue sont des pièces distinctes. Le moteur conserve leur origine et leur chronologie.
Avant de collecter
TS43 · 3 règles
L’accès des crawlers autorisés est testé avec leur chaîne complète et rapproché des journaux.
Tests de politique d’accès pour des agents déclarés.
À réunir
Plan préalable, chaîne User-Agent revue, HTTP brut, journal JSONL natif, revues liées, commande/reçu fourni et qualification d’identité.
Premier profil : client de test initié par l’évaluateur ; aucune visite, identité réelle, sécurité ou accessibilité de l’opérateur déduite. Sources, journaux, revues et reçu non authentifiés.
Méthode et critères du contrôle
Méthode
Déclarer séparément l’accès de l’opérateur et le traitement du client de test ; comparer sa chaîne complète, rapprocher les journaux et qualifier honnêtement son origine selon agent-access-v1.
Critères attendus
Les trois règles réussissent sur le périmètre de tests déclaré, avec réponse prévue, rapprochement qualifié et identité opérateur explicitement non vérifiée ; un refus prévu peut être conforme.
Non-applicabilité
Aucun agent à tester dans la politique déclarée.
Règles détaillées
TS43-A01 · Client complet et traitement attendu
Mode prévu par le protocole : assisté, avec preuves et déclarations fournies. La disponibilité dans l’app est indiquée sur la fiche du contrôle.
Périmètre
Chaque URL et client HTTP du périmètre de tests préalablement déclaré.
Preuves
Pièces, dates, liaisons et observations selon docs/agent-access-evidence.md.
Méthode
Relire les sources et leur revue liée ; vérifier la chaîne HTTP datée puis la réponse et le corps prévus pour le client de test.
Critères attendus
Documentation revue et réponse conformes au plan du test ; contradiction indépendante conservée même si une autre preuve manque.
Quand le résultat reste indéterminé
Client/source/revue absent, trace incomplète, traitement attendu ou référence de corps manquant.
Non-applicabilité
Aucune exemption atomique automatique.
Hypothèses
Sources, contexte, qualité du journal et revues fournis ; portée du test limitée à son client.
Limites
Premier profil : client de test initié par l’évaluateur ; aucune visite, identité réelle, sécurité ou accessibilité de l’opérateur déduite. Sources, journaux, revues et reçu non authentifiés.
TS43-A02 · Chaîne rapprochée des journaux
Mode prévu par le protocole : assisté, avec preuves et déclarations fournies. La disponibilité dans l’app est indiquée sur la fiche du contrôle.
Périmètre
Chaque URL et client HTTP du périmètre de tests préalablement déclaré.
Preuves
Pièces, dates, liaisons et observations selon docs/agent-access-evidence.md.
Méthode
Vérifier export, revue de couche/identifiant/cache/horloge, puis identifier chaque ligne unique dans sa fenêtre avant comparaison littérale.
Critères attendus
Chaque saut a une ligne attribuée dont méthode, URL, chaîne client et statut concordent ; tout écart qualifié échoue malgré un autre saut absent.
Quand le résultat reste indéterminé
Logs absents, ID client ou rejoué, doublon, mauvaise couche, format inconnu, fenêtre/revue insuffisante.
Non-applicabilité
Aucune exemption atomique automatique.
Hypothèses
Sources, contexte, qualité du journal et revues fournis ; portée du test limitée à son client.
Limites
Premier profil : client de test initié par l’évaluateur ; aucune visite, identité réelle, sécurité ou accessibilité de l’opérateur déduite. Sources, journaux, revues et reçu non authentifiés.
TS43-A03 · Origine du test et identité non inventée
Mode prévu par le protocole : assisté, avec preuves et déclarations fournies. La disponibilité dans l’app est indiquée sur la fiche du contrôle.
Périmètre
Chaque URL et client HTTP du périmètre de tests préalablement déclaré.
Preuves
Pièces, dates, liaisons et observations selon docs/agent-access-evidence.md.
Méthode
Vérifier reçu d’exécution et qualification fournie liés ; distinguer test initié par l’évaluateur et visite de l’opérateur.
Critères attendus
Origine assessor-test, identité opérateur not-verified et aucune revendication de visite réelle ; toute revendication liée contraire échoue.
Quand le résultat reste indéterminé
Reçu/commande/qualification manquant, dates incohérentes, liaison absente ou statut d’identité ambigu.
Non-applicabilité
Aucune exemption atomique automatique.
Hypothèses
Sources, contexte, qualité du journal et revues fournis ; portée du test limitée à son client.
Limites
Premier profil : client de test initié par l’évaluateur ; aucune visite, identité réelle, sécurité ou accessibilité de l’opérateur déduite. Sources, journaux, revues et reçu non authentifiés.
Format d’échange et adaptateurs
Les imports utilisent le format captures TSEP v1 ou v2 : input_version, rules, targets. Chaque contrôle demandé doit inclure toutes ses règles. Les corps sources, empreintes, contextes et revues restent liés selon le contrat de leur lecteur.
La bêta accepte 8 Mio et 10 cibles par évaluation. Les fichiers incomplets ou incohérents restent signalés ; l’application ne complète pas leurs preuves.
Format captures / Captures format
Adapter39: TS18 original graph/inventory intake, no repaired hashes or generated reviews. Nested and prior supplied originals coexist. [Contract](graph-reconciliation-evidence.md). Current / Actuel : draft.23, interpreter 23, adapter 24, HTML 7, replay 3. TS43: [test client and log evidence / client de test et journaux](agent-access-evidence.md), supplied reviews and unverified operator identity. Historical / Historique : draft.22, interpreter 22, adapter 23, HTML 6, replay 3. TS42: [usage policy / usages agents](agent-usage-policy.md), explicit synthetic provenance and retained source/decision evidence. Historical / Historique : draft.21, interpreter 21, adapter 22, replay 3. [Performance imports / Imports de performance](performance-evidence.md) add TS34/TS35. The versioned descriptions below are historical; see [current coverage](control-implementation-status.md). Les descriptions versionnées ci-dessous sont historiques ; voir la couverture actuelle. # Offline captures → evidence bundle / Captures locales → paquet de preuves ## Français Version courante : interpréteur 5 / adaptateur 6, [styles SVG bornés](source-text-v5.md) ; [collecteur 6](diagnostic-campaign.md), draft.7 inchangé. `adapters/captures.py` version 6 transforme un fichier de captures fourni en un rapport TSEP draft.7, ses preuves, sa décision et son export EARL. Il appelle l’interpréteur de référence existant et calcule les résultats depuis les entrées brutes. Il ne lit pas les verdicts attendus du corpus. Ce composant interne ne constitue pas une implémentation indépendante. Son format de paquet reste en version 1 ; l’évaluation suit la [migration normative draft.7](migration-draft.7.md). Depuis la version 3, l’interpréteur étend la [couverture binaire et gzip/deflate](guided-capture.md), sans changer le contrat. Les deux versions d’outil figurent dans `import.json`. La version 4 vérifie aussi l’origine des modules locaux chargés et leurs empreintes avant/après interprétation. Voir la [migration des outils](guided-capture.md) ; aucune authentification de l’exécution Python n’est revendiquée. Un [rapport HTML autonome](html-report.md) peut présenter le paquet et comparer deux évaluations conservées. La migration vers **interpréteur 4 / adaptateur 5 / collecteur 3** est décrite dans [Texte source v4](source-text-v4.md). Elle conserve draft.7, l’entrée binaire 2 et les captures originales ; réévaluer crée un nouveau paquet, pas un remplacement. Les empreintes des dépendances HTML de Python sont enregistrées. Un rejeu compare les résultats et signale séparément une différence d’environnement Python. ### Premier paquet Depuis la racine du dépôt, avec Python 3.9+ et un dossier de destination **nouveau** : ```sh python3 adapters/captures.py examples/captures/ts01-markers.json \ --output-dir /tmp/tsep-capture-ts01 --assessor 'Synthetic demo author' \ --label 'One synthetic URL' --selection-method 'Supplied synthetic fixture only' \ --access synthetic --mode automatic --lang fr python3 tsep.py validate /tmp/tsep-capture-ts01/report.json python3 tsep.py gate /tmp/tsep-capture-ts01/report.json --summary --lang fr ``` Résultat : TS01 C, `GO_WITH_RESERVATIONS`, **1 contrôle sur 44 et une cible synthétique**. L’intention et les marqueurs précèdent la capture fictive. Ce C est limité à cette cible et aux deux règles de TS01. Un second exemple démontre volontairement une couverture insuffisante : ```sh python3 adapters/captures.py examples/captures/ts07-source-only.json \ --output-dir /tmp/tsep-capture-ts07 --assessor 'Synthetic demo author' \ --label 'Source captures only' --selection-method 'Supplied synthetic fixture only' \ --access synthetic --mode semiAuto --lang fr python3 tsep.py gate /tmp/tsep-capture-ts07/report.json --summary --lang fr ``` TS07-A01/A02 passent, mais A03 est omise : **TS07 NT, NO_GO**, et `gate` retourne 1. L’adaptateur retourne 0 lorsque la conversion est valide, y compris pour NO_GO ; utiliser `tsep.py gate` pour le code de décision. Une conversion invalide retourne 64, une syntaxe CLI invalide 2. `--json` affiche le résumé structuré au lieu du résumé lisible ; `--lang en` sélectionne l’anglais. `examples/captures/ts10-family.json` couvre les quatre règles TS10 ; employer `--mode manual`. Sa revue humaine et ses captures sont **synthétiques**, déjà fournies. La sortie est C sur TS10 seulement. Les trois entrées sont des dérivés contrôlés du corpus, régénérés par `examples/replay.py` et vérifiés sans modifier les sources par `scripts/verify.py`. ### Entrée et périmètre L’objet JSON contient exactement `input_version: "1"` ou `"2"`, `rules` et `targets`, selon le [format d’entrée](conformance.md), le [plan source/DOM](rendered-states.md) et les [familles canoniques](canonical-families.md). Choisir explicitement les règles parmi TS01-A01/A02, TS07-A01/A02/A03 et TS10-A01 à A04. Fournir les échanges HTTP complets par saut, HTML et robots.txt bruts, intention préalable, contexte et les revues/captures supplémentaires requises. Les CRLF et champs répétés restent dans les chaînes d’origine. Un objet de cas avec `expected` est refusé. L’outil accepte un fichier UTF-8 d’au plus 8 Mio et 1 à 100 cibles HTTP(S) distinctes ; aucune lecture d’une URL ou d’un chemin contenu dans le JSON. Les clés dupliquées, valeurs JSON non finies, URLs invalides et règles inconnues sont refusées. Les entrées structurellement mal formées peuvent être refusées ; une preuve incomplète ou hors du sous-ensemble interprété reste inconclusive. Le rapport est `custom` et sélectionne par défaut les parents des règles demandées. `--controls TS01,TS07` peut ajouter des contrôles, qui restent NT et not-started si aucune règle n’est demandée. Aucun parent demandé ne peut être omis. `--exclude` est répétable. `--assessor`, `--label`, `--selection-method` et `--access public|restricted|synthetic` sont obligatoires ; l’outil ne devine ni l’échantillonnage ni la confidentialité et ne masque pas les données fournies. `--mode` vaut manual par défaut. Un C automatic exige toutes les règles du contrôle automatic, leur couverture complète et l’outil nommé/versionné. TS01 le permet ; TS07 exige au moins semiAuto et TS10 manual. Les revues fournies ne sont ni fabriquées ni authentifiées par l’adaptateur. Un mode incompatible avec un C calculé est refusé avant livraison, sans changement silencieux du verdict. ### Fichiers produits et dates | Fichier | Contenu | | --- | --- | | `input.json` | Octets d’origine exacts, conservés comme preuve | | `import.json` | Version de l’outil/protocole, empreintes du code et de l’entrée, date d’import, accès et règles demandées/omises par contrôle | | `assessment.json` | Résultats calculés par règle/cible, avant rattachement des preuves | | `evidence/target-N-KIND.json` | Champs fournis, séparés par cible et type, avec base de datation explicite | | `report.json` | Rapport format 2 validé, preuves relatives et SHA-256 | | `gate.json` | Décision, causes bloquantes NC/NT et couverture déclarée | | `earl.jsonld` | Assertions du contrôle et de chaque résultat atomique | | `SHA256SUMS` | Empreinte de chaque fichier livré, sauf le manifeste lui-même | Les types dérivés correspondent aux champs effectivement fournis : intention et revues, HTTP, source HTML, robots, rendu, sitemaps et crawl. Pour une ressource non HTML, la preuve `html` conserve les réponses et leur type média explicite, conformément au contrat ; elle n’invente pas de document HTML. Aucun DOM absent, aucune revue ou preuve d’absence n’est créé. Les preuves communes sont rattachées à toutes les cibles ; les extraits d’une cible ne servent pas de preuve à une autre. Chaque extrait conserve les dates originales. Sa date d’artefact est la plus récente des dates fournies, avec la date de cible pour les champs non datés ; `date_basis` précise cette convention d’agrégation. Si une date manque ou est invalide, l’artefact est daté **à l’import seulement**, explicitement, sans réparer la capture. Le calcul garde ses inconnues. Toute date fournie valide située dans le futur est refusée. La date d’import des fichiers d’origine et de calcul ne prouve pas une date de collecte ; aucune date déclarée n’est authentifiée. Le paquet est validé dans un dossier temporaire avant création de la destination. Un dossier, fichier ou lien existant n’est jamais remplacé. Le parent doit déjà exister. Une erreur de copie retire le nouveau dossier partiellement écrit. Déplacer le paquet complet conserve ses chemins de preuve relatifs. La date d’import fait varier les octets de deux imports ; seuls les résultats calculés sur une entrée et une version identiques sont reproductibles. ### Limites et validation Une règle en échec conserve NC même si d’autres manquent. C nécessite toutes les règles et toutes les cibles requises, au moins un pass, aucune inconnue ni aucun fail ; des exemptions seules ne justifient pas NA au niveau du contrôle. Les règles non demandées restent omises et visibles dans `import.json`, sans fausse assertion d’exécution. La politique de décision reste inchangée en draft.7. Les limites de l’interpréteur restent celles de la [conformance](conformance.md) : pas de collecte, exécution JavaScript, observation moteur ou conformité globale. Les attendus normatifs du corpus ne sont jamais substitués aux résultats calculés. La recette convertit toutes les entrées brutes du corpus et vérifie intégrité, portabilité, limites de modes, inconnues, échecs, non-écrasement et erreurs de copie. Ce contrôle du parcours ne constitue pas une seconde interprétation normative. ## English Historical: interpreter 5 / adapter 6, [bounded SVG styles](source-text-v5.md); [collector 6](diagnostic-campaign.md), draft.7 unchanged. Interpreter 4 / adapter 5 / collector 3 migration is documented in [Source text v4](source-text-v4.md). Draft.7, binary input 2 and original captures are preserved; re-evaluation creates a new bundle. Selected Python HTML dependency hashes are recorded. Replay compares results and separately discloses a Python runtime difference. `adapters/captures.py` version 6 converts supplied offline captures into a TSEP draft.7 report, evidence, decision and EARL export. It uses the existing bounded reference interpreter and computes outcomes from raw input, without reading conformance expectations. This internal component is neither an independent implementation. Its bundle format remains version 1; assessment follows the [draft.7 normative migration](migration-draft.7.md). Since version 3 the interpreter extends [binary and gzip/deflate coverage](guided-capture.md), without changing the contract. Both tool versions appear in `import.json`. Version 4 also checks loaded local module origins and fingerprints before/after interpretation. See the [tool migration](guided-capture.md); this does not authenticate Python execution. A [standalone HTML report](html-report.md) can present the bundle and compare two retained assessments. ### First bundle Run the commands above from the repository root with Python 3.9+, choosing a **new** output directory and `--lang en` for the English summary. The TS01 sample produces C and `GO_WITH_RESERVATIONS` on **1 control out of 44, one synthetic target**. Prior intent and markers are supplied. The TS07 source-only sample has passing A01/A02 but omits A03: **NT, NO_GO**. `tsep.py gate` deliberately exits 1. Successful conversion exits 0 even for NO_GO; run `tsep.py gate` for the decision exit code. Invalid conversion exits 64; malformed CLI syntax exits 2. `--json` selects the structured summary. `examples/captures/ts10-family.json` covers all four TS10 rules using `--mode manual`, with supplied **synthetic** human review and captures, yielding C for TS10 only. The three raw examples are controlled corpus derivatives, regenerated by `examples/replay.py` and checked without source changes by `scripts/verify.py`. ### Input and scope The JSON object contains exactly `input_version: "1"` or `"2"`, `rules` and `targets` in the [input format](conformance.md), [source/DOM plan](rendered-states.md) and [canonical family format](canonical-families.md). Explicitly select rules from TS01-A01/A02, TS07-A01/A02/A03 and TS10-A01 through A04. Supply complete HTTP exchanges per hop, raw HTML/robots.txt, prior intent, context and required additional captures/reviews. Original strings retain CRLF and repeated headers. Case wrappers with `expected` are rejected. The UTF-8 input file is limited to 8 MiB and 1–100 distinct HTTP(S) targets; no URL or file path inside the input is fetched. Duplicate JSON keys, nonfinite values, invalid URLs and unknown rules are rejected. Structurally malformed inputs may be rejected; incomplete or unsupported evidence remains inconclusive. The `custom` report selects requested rules' parents by default. Optional `--controls TS01,TS07` can add controls, left NT/not-started if no rule is requested, and cannot omit requested parents. Repeat `--exclude` as needed. `--assessor`, `--label`, `--selection-method` and `--access public|restricted|synthetic` are required: sampling and confidentiality are not inferred, and data is not redacted. `--mode` defaults to manual. Automatic C requires every control rule automatic, complete coverage and tool name/version. TS01 permits it; TS07 requires at least semiAuto and TS10 manual. Supplied reviews are not created or authenticated by the adapter. A mode incompatible with computed C is rejected before delivery, without silently changing the verdict. ### Output and dates `input.json` retains the exact original bytes. `import.json` records tool/protocol versions, code/input hashes, import time, access and requested/omitted rules per control. `assessment.json` contains computed rule/target results before evidence linking. `evidence/target-N-KIND.json` retains supplied fields per target/type with an explicit date basis. `report.json` is validated format 2 with relative paths and SHA-256; `gate.json` records decision, NC/NT blockers and coverage; `earl.jsonld` contains control and atomic assertions. `SHA256SUMS` covers every delivered file except itself. Derived types match supplied intent/reviews, HTTP, HTML source, robots, rendering, sitemaps and crawl fields. For non-HTML, the contract's `html` evidence retains responses with their explicit media types without inventing HTML. Missing DOM, reviews or absence evidence are never created. Shared evidence covers all targets; target extracts never become another target's evidence. Original dates remain in each extract. Its artifact date is the latest supplied date, using the target observation date for undated fields; `date_basis` states this aggregation convention. Missing/invalid dates give an explicitly **import-time-only** artifact date, without repairing capture data or changing unknown outcomes. Any valid supplied future date is rejected. Original-input and computed-result artifact dates indicate import, not collection. No declared date is authenticated. Validation runs in staging before creating the destination. Existing files, directories or links are never replaced; the parent must exist. A copy failure removes the newly created partial directory. Moving the entire bundle preserves relative evidence paths. Import time changes bytes across imports; computed outcomes are reproducible for identical input and code versions. ### Limits and verification A failure preserves NC despite missing rules. C requires every required rule and target, at least one pass, no fail or unknown. All-exempt atoms alone cannot establish whole-control NA. Omitted rules remain visible in `import.json` without invented execution assertions. Decision policy remains unchanged in draft.7. The [reference limits](conformance.md) still apply: no collection, JavaScript execution, engine observation or global conformity. Normative corpus expectations never replace computed outcomes. Tests convert every raw corpus input and verify integrity, portability, mode constraints, unknowns, failures, non-overwrite and copy failures. These workflow checks are not a second normative interpretation.
Dossiers de preuves / Evidence dossiers
# Supplied evidence dossier v1 / Dossier de preuves fourni v1
Normative for the new rules that explicitly select this profile, from
0.3.0-draft.2. Existing readers and rules are unchanged.
Normatif uniquement pour les nouvelles règles sélectionnant ce profil, dès
0.3.0-draft.2. Les lecteurs et règles existants restent inchangés.
## Français
Une cible porte `url`, `observed_at`, `context` (id, tool, tool_version, bounds),
`intent.declared_at`, le client HTTP exact `intent.crawler` et les plans sous
`intent.evidence_checks[TSxx]`. Un plan possède reader, scope_reason et 1–32 items
avec id unique (128 octets maximum). Les pièces se trouvent sous
`evidence_checks[TSxx]` : synthetic booléen explicite, records, documents et reviews
(trois listes requises, 128 éléments maximum chacune). La taille du dossier est
bornée à 8 Mio. Aucune découverte implicite, interprétation de verdict importé,
collecte ni exécution de commande présente dans une pièce.
Un record contient id, kind, observed_at, context_id, native. Ce dernier a exactement
raw_base64, sha256, encoding, complete : base64 canonique des octets originaux,
SHA-256 exact, encoding identity, complete true pour une interprétation positive.
Le lecteur d'intégrité historique des fichiers sitemap est réutilisé sans changer
son comportement. Un original présent corrompu est un refus technique, distinct
de NT. Un record absent, incomplet, compressé ou dépassant 1 Mio est indéterminé.
Le JSON est UTF-8, avec format explicite ; clés dupliquées et nombres non finis
sont refusés par la lecture, sans réparation ni conclusion d'absence.
Un document contient url, observed_at, context_id et http : 1–12 échanges natifs
au format historique. Le lecteur HTTP existant contrôle requête, client, réponse,
complétude, URL et redirections. Le corps utilisé est limité à 1 Mio. La lecture
HTML source réutilise le sous-ensemble strict historique `canonical.html` ; elle
n'émule pas un navigateur et ne récupère pas les contextes non pris en charge.
Les originaux restent conservés même lorsqu'ils ne sont pas interprétables.
Toutes les pièces portent le même context_id que la cible et sont datées entre
la déclaration du plan et l'évaluation. Les dates sont fournies, non authentifiées.
Une review identifie subject=`TSxx-Ayy:item_id`, reviewer, reason, judgment
(supported ou contradicted), reviewed_at, provenance et binding_sha256. Elle est
bornée à 32 Kio ; reviewer/reason sont non blancs et limités à 8 192 octets UTF-8.
Sa date suit **toutes** les pièces records/documents liées et précède l'évaluation.
Provenance vaut synthetic-exercise pour un dossier synthétique, sinon human ou
human-assisted. Aucune revue produite par le lecteur.
L'empreinte de revue est SHA-256 du JSON UTF-8 canonique (clés triées,
ensure_ascii=false, séparateurs virgule/deux-points sans espaces, nombres finis)
de `{target:url, observed_at, intent, context, control:TSxx, evidence:dossier_sans_reviews}`.
Les empreintes lient les pièces sans authentifier acquisition, dates, contenu ou
identité humaine. Une revue contradictoire ne produit fail que si ses préalables
natifs sont qualifiés ; elle ne résout pas une preuve manquante. Une contradiction
native indépendante survit aux autres inconnues.
Pour une règle : tout fail qualifié entraîne fail ; sinon toute inconnue ou
population vide entraîne inconclusive ; sinon pass. Aucune NA atomique. Le rapport
exige toutes les règles/cibles avant C, préserve NC malgré les lacunes et produit
NT pour les preuves insuffisantes. Il garde les types réellement fournis, sans
inventer une preuve absente. Les documents sources peuvent servir de contenu ou
de corpus de liens explicitement étiqueté ; cela ne prétend pas à un crawl réel.
Le transport refuse de réétiqueter un dossier ou une revue synthétique comme réel.
## English
A target supplies url, observed_at, context (id, tool, tool_version, bounds),
intent.declared_at, exact HTTP intent.crawler and plans under
intent.evidence_checks[TSxx]. Each plan has reader, scope_reason and1–32 items with
unique IDs of at most128 bytes. Evidence lives under evidence_checks[TSxx]: explicit
boolean synthetic plus required records, documents and reviews lists, each bounded
to128 entries. Dossiers are limited to8MiB. No implicit discovery, acceptance of
imported verdicts, collection or execution of commands found in evidence.
Records contain id, kind, observed_at, context_id and native. The latter has exactly
raw_base64, sha256, encoding, complete: canonical original-byte base64, exact SHA-256,
identity encoding and complete=true for positive interpretation. The unchanged
historical sitemap original-byte integrity reader is reused. A corrupt present
original is a technical refusal, distinct from NT. Missing, incomplete, compressed
or over1MiB evidence is inconclusive. JSON must be UTF-8 with an explicit format;
duplicate keys and nonfinite values cannot be repaired into an absence conclusion.
Documents contain url, observed_at, context_id and1–12 historical native HTTP
exchanges. The existing HTTP reader checks request/client/response/completeness/URL
and redirects. Used body is bounded to1MiB. Source HTML reuses strict historical
canonical.html; it does not emulate a browser or recover unsupported contexts.
Originals remain retained even when uninterpretable.
Every record/document shares the target context_id and is dated between prior
plan declaration and assessment. Supplied dates are not authenticated. Reviews
contain subject=TSxx-Ayy:item_id, reviewer, reason, judgment (supported/contradicted),
reviewed_at, provenance and binding_sha256. Reviews are bounded to32KiB, reviewer
and reason to8192 nonblank UTF-8 bytes each. Review date follows **all** bound
records/documents and precedes assessment. Provenance is synthetic-exercise for
synthetic dossiers, otherwise human/human-assisted. No reviewer judgment is generated.
The review fingerprint is SHA-256 of canonical UTF-8 JSON (sorted keys,
ensure_ascii=false, compact comma/colon separators, finite numbers) for
{target:url, observed_at, intent, context, control:TSxx, evidence:dossier_without_reviews}.
Hashes bind evidence without authenticating acquisition, dates, content or humans.
A contradictory review yields fail only with qualified native prerequisites;
it cannot resolve missing evidence. Independent native failures survive other gaps.
Any qualified fail dominates; otherwise any unknown or empty population is
inconclusive; otherwise pass. No atomic NA. Reports require all rule/target pairs
for C, retain NC despite gaps and use NT for insufficient evidence. Export keeps
actually supplied evidence kinds and never creates missing proof. Source documents
may form explicitly labeled content or internal-link corpora without claiming a
real crawl. Transport refuses relabeling synthetic dossiers/reviews as real.
Search Console
# TS08 intake 2 — integrity / intégrité ## Français L'importeur CLI `adapters/inspection_intake.py` passe à la version **2**. Le protocole draft.33, le lecteur TS08 et ses trois règles ne changent pas. Il s'agit d'une vérification du dossier d'import, pas d'une nouvelle définition de C/NC/NT. La version 1 vérifiait les entrées présentes dans `intake.files`, mais ne rendait pas obligatoire celle d'`input.json`. Elle comparait également la liaison de la revue à `intake.input_sha256` sans comparer séparément cette dernière aux octets réels de l'entrée. Deux contradictions synthétiques ont reproduit cette lacune : une entrée modifiée dont l'empreinte avait été retirée de l'inventaire, et une fausse empreinte globale identique dans le manifeste et la revue. Un rapport pouvait alors être produit malgré ces contradictions internes. Les empreintes auto-déclarées n'ont jamais authentifié l'auteur ou Google. La version 2 exige l'inventaire complet des fichiers produits par `prepare` : plan, entrée, demande de revue vide et originaux numérotés. Aucun fichier supplémentaire, lien symbolique, chemin non canonique ou empreinte autre qu'un SHA-256 hexadécimal minuscule de 64 caractères n'est admis. Les noms ont un vocabulaire ASCII exact ; alias de casse ou de normalisation Unicode refusés. Les bornes sont 16 inspections, 67 fichiers déclarés, 100 entrées parcourues, 8 Mio par fichier et 128 Mio au total. Les bornes normatives du lecteur TS08 restent applicables séparément. Chaque fichier est lu dans un tampon borné, contrôlé puis analysé depuis ce même tampon. `input_sha256` désigne les **octets bruts** d'`input.json`, pas une nouvelle sérialisation JSON. Inventaire, liaison globale, demande de revue vide et revue fournie doivent désigner ces mêmes octets. Le plan et les corps natifs doivent aussi correspondre à leurs projections dans l'entrée ; seule la date `observed_at` de préparation diffère normalement du plan. Une incohérence est un refus de construction avant toute sortie, avec code CLI 1 ; ce n'est ni NC ni NT. Une entrée cohérente avec preuves insuffisantes peut toujours produire NT. ### Migration explicite Conserver le dossier version 1 et son moteur exact. Ne pas réécrire sa version, son manifeste, ses originaux, ses revues ou son ancien rapport. `build` version 2 refuse un import version 1. Pour une nouvelle évaluation, appeler explicitement `prepare` version 2 avec le plan original et les observations conservées, vers un dossier neuf. Conserver la nouvelle demande de revue vide et fournir les revues réellement disponibles dans une copie séparée. Une revue antérieure ne peut être réutilisée que si sa portée et sa liaison aux pièces restent exactes ; ne pas inventer, antidater ou renouveler une décision pour obtenir un résultat. Une liaison différente demande une nouvelle revue effectivement fournie. La nouvelle date d'évaluation peut changer la qualification de fraîcheur ; elle ne rafraîchit ni une acquisition ni le crawl rapporté. Le rejeu d'un ancien rapport reste effectué avec son moteur exact et sa date d'observation conservée. Aucun réimport ou changement de dépendance n'est automatique. Les intégrations choisissent séparément leur archive ; ce correctif ne remplace pas leurs copies existantes. La vérification porte sur la cohérence des pièces fournies, pas leur authenticité. Un auteur capable de réécrire toutes les pièces et empreintes de façon cohérente n'est pas authentifié ou détecté par un manifeste auto-déclaré. Aucun accès réel Google, acquisition Edikka ou avis humain n'est établi par ces essais fictifs. Les résultats observés des tests sources/archive figurent dans le bilan de livraison, pas dans cette description des attentes. ## English CLI `adapters/inspection_intake.py` becomes **version 2**. Protocol draft.33, the TS08 reader and its three rules are unchanged. This verifies intake-package integrity; it does not redefine C/NC/NT. Version 1 checked entries that appeared in `intake.files` without requiring `input.json`. It compared the supplied review binding to `intake.input_sha256` without separately comparing that pointer with the actual input bytes. Two synthetic contradictions reproduced this gap: changed input omitted from the inventory, and an equally false global pointer in the manifest and review. A report could be produced despite these internal contradictions. Self-declared hashes have never authenticated the author or Google. Version 2 requires the exact generated inventory: plan, input, blank review request and numbered originals. Extra files, symlinks, noncanonical paths and digests other than 64 lowercase hexadecimal SHA-256 characters are refused. Paths use an exact ASCII vocabulary; case and Unicode-normalization aliases are unsupported. Bounds are 16 inspections, 67 listed files, 100 traversed entries, 8 MiB per file and 128 MiB total. The separate normative TS08 bounds still apply. Each payload is read once into a bounded buffer, hashed and parsed from that same buffer. `input_sha256` denotes the **raw bytes** of `input.json`, not a new JSON serialization. Inventory, global pointer, blank request and supplied review must bind those same bytes. Original plan/native bodies must match their input projections; only preparation `observed_at` normally differs from the plan. Inconsistency refuses construction before any output with CLI exit 1, not an NC or NT result. Consistent input with insufficient evidence can still produce NT. Preserve version-1 intakes, their exact tools, native files, reviews and reports. Version-2 build refuses version 1; never edit an old version marker to migrate it. Explicitly prepare a new intake from the retained original plan and observations, then supply genuinely available reviews in a separate copy of the new blank request. Reuse a prior review only when its scope and evidence binding still match; a different binding requires an actually supplied new review. Never invent, backdate or renew a decision to obtain a desired outcome. New assessment time may affect freshness qualification; it does not refresh the acquisition or crawl. Replay historical reports with their exact tools and retained observation time. No automatic reimport or dependency migration occurs; integrations select their archives separately. This fix does not replace existing copies. This checks consistency, not authenticity against an author coherently replacing every file and hash. Synthetic tests establish no actual Google/Edikka acquisition or human review. Observed source/archive verification belongs in the retained delivery evidence, not in these expected-behavior instructions.
Comparaison canonique / Canonical comparison
Version 2 — [integrity and explicit migration / intégrité et migration explicite](intake-integrity-v2.md). Preserve version-1 tools and dossiers; conserver les outils et dossiers version1.
# TS12 supplied intake / Import fourni
## Français
Le [contrat](canonical-comparison.md) définit le profil et ses limites. Ce parcours
hors ligne ne contacte ni Google ni le site, n’exécute aucun navigateur et ne
fabrique pas de revue. Node 24 explicite est nécessaire à la lecture HTML.
1. Avant acquisition, conserver un plan cible sans documents, inspection_records,
inspection_reviews ou comparison_reviews. Déclarer inspection + canonical_comparison,
contexte/client, préférences sourcées, scénarios et limites, puis fournir la
revue préalable liée à {url,intent}. Une connaissance antérieure reste déclarée.
2. Acquérir réellement les requêtes/réponses API selon [TS08](search-console-acquisition.md).
Chaque dossier contient request.json, response.json et manifest.json daté, avec
empreintes et provenance réelles. Aucun secret n’est requis dans le dossier.
Fournir séparément la liste documents en JSON : traces HTTP et états DOM structurés
de même navigation. Les outils n’inventent aucune pièce manquante.
3. Importer les fichiers exacts, puis lire input.json et review-request.json.
Ce dernier laisse auteur, dates, revendications, explication et décision vides.
Fournir une revue distincte, liée aux octets et au plan. Garder toute tentative.
4. Construire un nouveau paquet, lire synthèse/atomes/observations/preuves puis
exporter et rejouer avec les outils exacts. Une revue vide donne NT. Les erreurs
API, limites et différences restent consultables ; C qualifie le dossier.
```sh
TSEP_SOURCE_NODE=/path/to/node24 python3 adapters/comparison_intake.py prepare plan.json \
--inspection native-url-1 --documents supplied-documents.json --output prepared-new
TSEP_SOURCE_NODE=/path/to/node24 python3 adapters/comparison_intake.py build prepared-new \
--reviews supplied-reviews.json --output bundle-new --assessor 'Actual assessor'
TSEP_SOURCE_NODE=/path/to/node24 python3 tsep.py html bundle-new/report.json --lang fr --output report-fr.html
TSEP_SOURCE_NODE=/path/to/node24 python3 adapters/replay.py bundle-new --output replay-new
```
Les commandes HTML/rejeu exposent aussi --help. Le plan, les fichiers natifs et leur
empreinte sont conservés ; aucune destination existante n’est remplacée. L’import
est daté au moment réel du calcul, distinct des acquisitions. Changer les outils
exige une réévaluation distincte. Une ancienne preuve ne devient pas prospective.
Données de compte : restricted ; revues/exemples rédigés : synthetic.
Exemples livrés : examples/captures/ts12-agreement.json, ts12-divergence.json,
ts12-contradiction.json, ts12-source-only.json. Tous sont des exercices rédigés,
DOM compris ; aucune navigation navigateur ou approbation humaine réelle.
## English
The [contract](canonical-comparison.md) defines the bounded profile. This offline
workflow contacts neither Google nor the site, executes no browser and creates no
review. Explicit Node24 is needed for HTML reading. Before acquisition, retain a
target plan without documents/inspection_records/inspection_reviews/comparison_reviews,
with inspection and canonical_comparison intent, context/client, sourced preferences,
scenarios/thresholds and supplied prior review bound to {url,intent}. Disclose prior
knowledge. Acquire genuine native API request/response/manifests through the TS08
procedure and separately supply the exact JSON document list, with HTTP and structured
same-navigation DOM. No missing evidence is invented; no credentials belong in it.
Use the commands above to prepare a new intake, inspect input and blank review request,
then supply a separate genuine review and build a new bundle. Empty reviews remain NT.
Read summary/atoms/observations/evidence and replay with exact tools. Preserve attempts,
original files and hashes; existing destinations are never overwritten. Import time
is actual computation time, separate from acquisition. Changed tools require separate
reassessment; old evidence never becomes prospective. Real account data is restricted;
authored examples/reviews are synthetic. The four supplied examples include authored
DOM and establish no real browser navigation or human approval. C is documentation,
not canonical correctness, Google agreement, TS10 conformity or indexing.
Sitemaps
# TS15 — supplied sitemap files / fichiers sitemap fournis
Profile `native-sitemap-files-v1`, reader1, draft.35. Interpreter34 / adapter35 /
HTML19 / replay3. Three rules; execution and application delivery recorded separately.
44 native reader expectations,31 set expectations and4 review counterexamples were
frozen before their corresponding implementation/change. These are authored synthetic
cases, never independent validation or actual server observations.
## Français
Le résultat porte uniquement sur une **population déclarée de fichiers fournis**.
Une racine n’est pas découverte ni attribuée à robots.txt/Search Console/CMS par
le lecteur. Le nombre de fichiers, les racines et `root_discovery=not-established`
restent visibles, même pour C. Un index non fourni peut désigner d’autres fichiers ;
aucune exhaustivité des sitemaps du site n’est établie. Les URL, dates, provenance
et complétude sont déclarées, non authentifiées. Un NC désigne le fichier fourni
déclaré pour une URL, jamais une réponse du serveur observée.
L’entrée de l’adaptateur reste `input_version=2`, rules et targets. Chaque cible
contient url (première racine), observed_at, sitemap_synthetic booléen, context
(network,bounds,tool,tool_version) et intent.declared_at. intent.sitemap_files contient
reader, selection_reason non vide, window_start/end (<=24h), roots et documents.
Le plan précède la fenêtre ; celle-ci précède observed_at.1–16 URL de documents
distinctes, roots non vide/distinct/sous-ensemble ; URL absolues HTTP(S), sans
identifiants, fragment ni espaces. Comparaison exacte, sans normalisation ni requête.
`sitemap_files` contient au plus16 objets : url déclarée exacte, description,
observed_at dans la fenêtre, provenance=`synthetic-exercise` ou `supplied-native-file`,
et native={raw_base64,sha256,encoding,complete}. encoding vaut identity ou gzip,
complete est booléen, base64 est strict et canonique. SHA-256 lie l’original exact.
Le nom de fichier ne détermine pas l’encodage. Aucun original n’est recompressé.
La provenance synthétique doit correspondre à l’accès synthetic du dossier ; une
pièce fictive ne devient jamais publique par un changement d’étiquette.
L’import refuse techniquement tout original altéré, base64 invalide, encodage
inconnu ou fichier brut >5 242 880 octets. L’enveloppe JSON entière conserve sa borne
8 388 608 octets : plusieurs fichiers peuvent l’atteindre avant leur limite
individuelle. Un XML brut de50Mio est donc refusé ; un gzip fourni assez petit peut
être évalué à sa taille décompressée réelle. Refus de transport ≠ NC/NT du contrôle,
aucun rapport réussi n’est créé à la destination. Données absentes dans un dossier
intègre : inconclusive, jamais C/NA.
A01 lit UTF-8 strict sur les octets décompressés, BOM UTF-8 inclus dans la taille ;
un défaut d’encodage donne fail pour le fichier complet seulement si une lecture
secondaire bornée à65 536 octets attribue sa racine à Sitemaps0.9. Cette lecture
s’arrête au premier élément, refuse DTD/entités avant expansion et n’accepte ni
ne répare un sitemap UTF-16. RSS UTF-16, binaire ou texte sans racine attribuée :
inconclusive. Une racine urlset/sitemapindex lue normalement avec namespace erroné
reste une contradiction explicite. Une racine trop tardive reste inconnue.
Racines urlset/sitemapindex dans le namespace exact
`http://www.sitemaps.org/schemas/sitemap/0.9` ; préfixes libres. Namespace absent ou
erroné d’une de ces formes : fail. Autre format (RSS/Atom) : inconclusive.
Un élément url/sitemap direct exige un loc non vide unique, en tête, puis feuilles
ordinaires uniques et ordonnées : lastmod/changefreq/priority pour url, lastmod pour
sitemap. XML globalement mal formé complet, loc absent/doublé, texte mixte ou élément
de base inattendu : fail. DTD et déclarations d’entités sont arrêtés avant expansion,
sans chargement réseau ; extensions/attributs inconnus et xml:base : inconclusive.
La seule annotation de racine qualifiée est xsi:schemaLocation, conservée sans
charger ni appliquer le schéma. Commentaires et instructions sont inertes.
A02 compte les octets bruts réellement décompressés (BOM, caractères multioctets,
échappements et fins de ligne inclus), et tous les éléments url/sitemap directement
sous leur racine qualifiée. Les doublons et entrées sans loc comptent ; les extensions
ne sont pas des entrées. Maximum inclusif52 428 800 octets et50 000 éléments par
fichier ou index.52 428 801 octets ou50 001 éléments effectivement lus donnent fail,
si le préfixe attribue une racine Sitemaps0.9, même si la lecture s’arrête là.
Sans cette attribution, la mesure arrêtée reste descriptive et A02 inconclusive ;
RSS, DTD et racine au-delà du préfixe ne deviennent pas NC par cette mesure.
Le diagnostic dit exact ou borne inférieure ; le
champ ISIZE, un compteur fourni ou le nom .gz ne suffisent jamais. Une lecture
arrêtée ne qualifie pas A01. Un comptage complet peut passer malgré une feuille
malformée ; A01 reste alors fail. Les trois axes ne doivent pas être confondus.
Un seul membre gzip complet est qualifié. Flux tronqué, CRC erroné, membres concaténés
ou données finales : inconclusive, sauf dépassement déjà établi indépendamment.
CRC/fin de flux n’authentifient pas la source. Capture déclarée incomplète : inconclusive.
Bornes internes : profondeur16,300 000 éléments,4096 caractères par feuille ; dépasser
une borne interne donne inconclusive, jamais une violation de sitemap inventée.
A03 requiert exactement les documents déclarés, un original non ambigu par URL et
une couverture par les racines. Chaque enfant loc d’index doit correspondre à une
URL déclarée et à un fichier feuille complet qualifié. Pas de parcours réseau,
normalisation, suivi de redirection ou attribution depuis le nom. Enfant absent,
orphelin, format illisible, cycle ou index imbriqué : inconclusive. L’absence de
preuve de couverture n’est pas une contradiction démontrée : cette règle ne produit
pas fail. Une contradiction A01/A02 indépendante reste fail malgré cette lacune.
C exige les trois pass pour toute la population déclarée ; NC exige une contradiction,
sinon NT. Aucun NA automatique. Ce profil ne valide pas tout XML Schema, les valeurs
des feuilles facultatives, le sens/la fraîcheur de lastmod, l’hôte/le chemin/la longueur
des URL, leur canonical, leur indexation, les soumissions ni le périmètre éditorial.
Il ne faut pas présenter C comme « sitemap valide pour Google » ou conformité globale.
Les originaux restent dans input.json et les pièces dérivées ; le rejeu exige le même
moteur exact, sans réseau. Les autres règles qui emploient Node gardent leur exigence
propre ; TS15 utilise uniquement Python standard.
## English
The outcome covers only a **declared population of supplied files**. Roots are not
discovered or attributed to robots.txt/Search Console/CMS. Declared document count,
roots and root_discovery=not-established remain visible even for C. An omitted index
may reference other files; no site-wide sitemap completeness is established. URLs,
dates, provenance and completeness are supplied and unauthenticated. NC concerns a
supplied file declared for a URL, never an observed server response.
The exact input fields, bounds and constants are specified above. A target is anchored
to its first root and has an explicit synthetic boolean, dated prior plan, <=24h window,
context,1–16 distinct document URLs and nonempty distinct roots within that list.
There are at most16 supplied records with declared URL, description, provenance,
windowed timestamp and native raw_base64/SHA-256/identity-or-gzip/boolean completeness.
URLs are literal absolute HTTP(S), without credentials, fragment or whitespace.
No network request, URL normalization or implicit file recompression takes place.
Synthetic provenance must match dossier access.
Technical intake rejects changed bytes, invalid/noncanonical base64, unknown encoding,
or original files larger than5,242,880 bytes. The entire JSON retains its8,388,608-byte
bound, which multiple files may reach first. A50MiB plain XML file is refused; a small
enough supplied gzip can exercise the true decompressed threshold. Transport refusal
is not a C/NC/NT control outcome and creates no successful report. Missing evidence
in an intact dossier stays inconclusive, never C/NA.
A01 checks strict UTF-8 bytes, optional UTF-8 BOM, compatible encoding declaration,
exact Sitemaps0.9 namespace and minimal base structure. Prefixes are arbitrary.
A complete known root with wrong/missing namespace fails; RSS/Atom/other roots are
outside the profile. Each direct url/sitemap requires one nonempty loc first, then
unique ordered optional leaves: lastmod/changefreq/priority for url, lastmod for
sitemap. Attributed malformed XML, missing/duplicate loc, mixed base text or unexpected
base elements fail. DTD/entities stop before expansion without network loading.
Unqualified extensions/attributes/xml:base stay inconclusive. Root xsi:schemaLocation
is retained, never fetched or applied. Comments and processing instructions are inert.
Encoding failures establish fail only when a separate bounded first-root reader
attributes Sitemaps0.9 within65,536 bytes. It stops at the first element, rejects
DTD/entities before expansion and never accepts or repairs UTF-16. UTF-16 RSS,
binary or unassigned text remains inconclusive; a late root remains unknown.
A02 measures actual decompressed bytes, including BOM, multibyte characters, escapes
and line endings, and counts all direct url/sitemap elements under their qualified
root, including duplicates and entries missing loc. Foreign extensions do not count.
Inclusive bounds are52,428,800 bytes and50,000 direct entries per file/index. Actually
reading the first excess byte/entry establishes fail only with an attributed
Sitemaps0.9 root. Without that attribution, the stopped byte measurement remains
descriptive and A02 inconclusive, including RSS, DTD and a root beyond the prefix.
Diagnostics distinguish an exact
measure from a lower bound. No decision from ISIZE, filename or supplied counters.
A stopped prefix cannot qualify A01. Complete counts may pass despite a malformed leaf,
whose A01 remains fail. A complete single gzip member is qualified; truncation, bad CRC,
multiple members or trailing data stay unknown except an independently established
excess. Stream integrity never authenticates origin. Declared incomplete files stay
unknown. Internal limits16depth/300,000elements/4,096characters per leaf cause unknown,
never a fabricated sitemap violation.
A03 binds exactly one unambiguous supplied record to every declared URL and traverses
only root index→leaf relationships among that declared set. Every index loc must bind
to a complete qualified supplied leaf. No fetch, redirect following, filename attribution
or normalization. Missing/orphan/unreadable children, cycles or nested indexes stay
inconclusive. Missing coverage is not a proven contradiction, so A03 has no fail
outcome. Independent A01/A02 failures survive missing branches.
C needs all three passes across the declared population; evidenced contradiction gives
NC, otherwise NT. No automatic NA. No complete XSD validation, optional leaf value
semantics, lastmod truth/freshness, URL host/path/length, canonical, indexing, submission
or editorial-scope conclusion. Never describe C as Google eligibility or whole-site
conformity. Original bytes remain in the native input and derived evidence. Standalone
replay requires the exact engine and no network. TS15 uses Python standard library;
other controls keep their own explicit Node runtime requirements.
## Sources / Sources
[Official captured sources and fingerprints](../research/sitemap-files-2026-10-14/provenance.json):
Sitemaps.org protocol and0.9 schemas, Google's large sitemap documentation. Their
syntax/size requirements inform this bounded editorial profile; they do not endorse
TSEP or establish independent validation. No Google account collection was performed.
### Closed outcome domain / Issues fermées — TS15-A03
FR : la règle TS15-A03 déclare dans spec/protocol.json
`allowed_outcomes: ["pass", "inconclusive"]`. Aucun fail ni not-applicable n'est
admis pour cette règle, y compris dans un rapport fourni. Le banc exige au moins
un cas pour chacune de ces deux issues. Toutes les autres règles gardent leurs
issues historiques et l'exigence pass/fail/inconclusive du banc. Supprimer une
classe du corpus ne réduit jamais cette exigence. Le profil ne contient aucune
affirmation déclarative de lien parent/enfant : un fichier déclaré orphelin donne
inconclusive. Une future assertion de parent contradictoire exigerait une autre
version ; elle ne doit pas être déduite de la déclaration de population.
EN: TS15-A03 declares `allowed_outcomes: ["pass", "inconclusive"]` in the canonical
protocol. Neither fail nor not-applicable is accepted for that rule, including
in supplied reports. The corpus must contain each of its two declared outcomes.
Every other rule retains its historical domain and required pass/fail/inconclusive
coverage. Removing a class from the corpus never weakens this requirement.
The profile has no declared parent/child assertion: an orphan declared file stays
inconclusive. A future contradicted parent assertion would require another version;
it must not be inferred from the population declaration.
Liens essentiels / Essential links
# TS17 — DOM self-integrity at intake / intégrité propre du DOM à l’import Capture adapter37; protocol draft.36 / interpreter35 / HTML20 / replay3 unchanged. This is a distinct transport correction, not a new normative control or rule. Twenty-two contradictory inputs were authored before the change. Observed test results and the exact candidate/archive are recorded separately. ## Français L’adaptateur36 pouvait produire un rapport NT pour un snapshot ou un contenu de support dont l’auto-empreinte fournie était fausse. Ce comportement ne satisfaisait pas l’engagement de refus des originaux corrompus. Les dossiers déjà créés et la livraison36 restent conservés avec cette limite et avec leurs outils exacts. L’adaptateur37 vérifie chaque état DOM fourni aux demandes TS17 avant l’interprétation : s’il existe à la fois un snapshot non nul et son empreinte non nulle, celle-ci doit égaler le SHA-256 de la sérialisation de liaison existante (JSON trié, séparateurs compacts, UTF-8, ensure_ascii=false). Si un contenu de support textuel et son empreinte non nulle existent, le SHA-256 porte sur les octets UTF-8 exacts du contenu. Aucune empreinte n’est corrigée ou inventée. Une valeur fournie incohérente, vide ou d’un mauvais type est refusée avec le motif `TS17 DOM integrity`, sans rapport ni répertoire de livraison réussi. La garde examine aussi les états non prévus et les demandes sans plan ou limitées à une seule règle TS17. Une association HTTP/DOM inconnue ne masque pas une corruption. L’intégrité des captures HTTP reste contrôlée avant leur évaluation. Un plan, snapshot, contenu ou hash absent/nul reste une preuve insuffisante pour le lecteur ; il n’est pas transformé en C/NA. Une association `acquisition.http_sha256` différente ou manquante, ou un script de capture d’une autre version, reste une qualification indéterminée. Une auto-empreinte cohérente n’authentifie ni le fournisseur ni l’acquisition. Les règles natives et les autres contrôles conservent leurs comportements historiques. Migration : garder les dossiers/exports36 avec leur moteur36 exact. Pour37, préparer un nouveau dossier depuis les originaux réellement disponibles ; ne pas recalculer un hash pour dissimuler une incohérence et ne pas remplacer une archive livrée. Une association sémantique différente reste visible. L’application reçoit un nouvel import explicite de l’archive qualifiée ; aucun correctif vendor. ## English Adapter36 could produce an NT report for a supplied snapshot or supporting text whose self-digest was false. That did not meet the promised refusal of corrupted originals. Existing36 dossiers and delivery remain retained with this limitation and their exact historical tools. Adapter37 checks every supplied DOM state for a TS17 request before interpretation. When both a non-null snapshot and non-null declared digest exist, the digest must equal SHA-256 of the existing binding serialization (sorted compact JSON, UTF-8, ensure_ascii=false). A supplied text support content and non-null declared digest must match its exact UTF-8 bytes. Never repair or invent a digest. Inconsistent, empty or wrong-type supplied digests refuse with `TS17 DOM integrity`, without a successful report or delivery directory. The guard also checks unplanned states, missing plans and partial TS17 rule requests. Unknown HTTP/DOM association cannot mask self-corruption; HTTP capture integrity is also checked before interpretation. Missing/null plan, snapshot, content or digest remains insufficient evidence for the reader, never C/NA. Different/missing acquisition.http_sha256 or another capture-script version remains an inconclusive qualification. Internally consistent hashes authenticate neither provider nor acquisition. Native rules and other controls retain their old behavior. Migration: preserve36 dossiers/exports and exact engines. For37 prepare a new dossier from actually available originals; do not recompute hashes to hide an inconsistency or replace delivered archives. Semantic association differences remain visible. The app needs an explicitly received newly qualified source archive, not a vendor patch. Test results are separate from this contract description.
Liens entrants / Incoming links
# TS16 — supplied incoming links / liens entrants fournis
Profile `incoming-document-links-v1`, proposed draft.37 / interpreter36 /
adapter38 / HTML21 / replay3. One atomic rule, TS16-A01. Source is prepared
separately; observed qualification and application delivery require separate receipts.
## Français
Population préalable de pages importantes et de sources internes fournie, datée et bornée. Le caractère important et la complétude du choix sont déclarés, non authentifiés.
Pour chaque destination importante, au moins un témoin a/href résoluble provenant d’un autre document interne qualifié, dans la source HTML ou un DOM déclaré sans interaction. Les originaux de la source et de la destination sont conservés.
Un témoin indépendant qualifié suffit pour cette destination ; une autre source inconnue ne l’annule pas. Chaque destination doit néanmoins disposer de son original HTTP qualifié.
Fail seulement si toutes les surfaces éligibles de toutes les sources de l’inventaire préalable sont qualifiées et ne fournissent aucun témoin pour une destination. Le résultat nomme cette population, sans qualifier la page d’orpheline du site. Une absence ainsi établie reste fail si l’original de destination manque : afficher conjointement cette absence, l’original/statut non archivés et l’identité de la destination non vérifiée. Cela peut révéler une erreur de plan, sans prouver un défaut du site.
Sans plan/inventaire qualifié, original de destination, témoin ou preuve bornée d’absence, résultat indéterminé. Aucune NA automatique. Un fail indépendant déjà établi survit aux autres destinations inconnues.
Sans interaction est une déclaration du fournisseur, pas une navigation observée. Un état après interaction ou non classé reste diagnostic ; il ne crée pas de témoin dans ce profil. Le profil ne décrit pas le comportement universel des robots.
Aucune exhaustivité du site, authenticité, interaction observée, visibilité, importance éditoriale, qualité d’ancre, suivi effectif de lien, visite Google, indexation ou classement. Un statut404 conservé ne devient pas à lui seul un défaut TS16.
Une destination demandée distincte dont la chaîne archivée retourne au document source ne fournit pas de témoin qualifié pour cette paire. Cette paire reste indéterminée ; une autre source indépendante peut suffire. Dates, URL demandées/finales et chaîne sont conservées.
## English
Prior supplied, dated and bounded important-page and internal-source populations. Importance and selection completeness are declared, not authenticated.
Each important destination has at least one resolvable a/href witness from a distinct qualified internal document, in source HTML or provider-declared no-interaction DOM. Original source and destination evidence is retained.
One independently qualified witness suffices for that destination; another unknown source does not negate it. Every destination still requires its qualified original HTTP evidence.
Fail only when all eligible surfaces of every prior inventory source are qualified and none provides a witness for a destination. Name that bounded population, without declaring a site-wide orphan. Such established absence remains fail if the destination original is missing: display bounded absence together with unarchived destination/status and unverified destination identity. This may reveal a plan error without proving a site defect.
Without a qualified plan/inventory, destination original, witness or bounded absence proof, remain inconclusive. No automatic NA. An independently established failure survives other unknown destinations.
No-interaction is a provider declaration, not observed navigation. After-interaction or unclassified states remain diagnostic and cannot provide a witness in this profile. This profile does not describe universal crawler behavior.
No site completeness, authenticity, observed interaction, visibility, editorial importance, anchor quality, actual link following, Google visit, indexing or ranking. Retained404 status is not by itself a TS16 defect.
A distinct requested destination whose archived chain returns to this source document supplies no qualified witness for that pair. The pair remains inconclusive; another independent source may suffice. Dates, requested/final URLs and chains are retained.
## Input contract / Contrat d’entrée
**envelope** — Existing input_version2, explicit rules and targets; target.url identifies the scope entry document, not necessarily every destination.
**provenance** — Boolean incoming_links_synthetic plus existing named context; retain this flag even if the plan is absent. App synthetic evidence is explicit; human reviews are never generated.
**prior_plan** — intent.crawler, declared_at and intent.incoming_links {reader, origin, selection_reason, inventory_sha256, window_start, window_end, max_duration_ms, sources, destinations}.
**inventory** — Original UTF-8 line-delimited source URL inventory; bytes/base64/hash and supplied observed_at retained. Exact one URL per line; optional final newline only, no comments, blank rows or silent normalization. Its ordered URLs must match prior sources. Missing/ambiguous evidence remains unknown; corrupt transport bytes are refused.
**sources** — 1–16 distinct {url,final_url,states} entries. states declares1–16 {id,browser,browser_version,scenario,interaction} per source; at least one no-interaction state per source; at most64 declared states over all sources. after-interaction states remain diagnostic.
**destinations** — 1–32 distinct {url,reason} important destinations; reasons supplied before capture. Source and destination populations may intersect; self-document links never witness an incoming link.
**documents** — incoming_links.documents contains at most48 unique {url,http,render} records for the union of source and destination URLs. Records shared by both roles keep one original. Missing records are not synthesized. Extra/duplicate records remain explicit and cannot supply an unplanned witness.
**http** — Existing native original request/response transport2,1–16 complete trace exchanges per document, named client, exact URLs and chronology. Source final200 required for HTML/DOM reading. Destination complete terminal HTTP result is retained as evidence;404 may coexist with a qualifying witness. Unfinished redirect/304/partial evidence cannot substitute an original representation.
**dom** — Existing structured_dom2 with exact HTTP/client association and acquisition provenance; no serialized HTML replacement. Actual state id/browser/version/interaction declarations must match prior state. No-interaction qualification remains documentary.
**bounds** — Entire input<=8MiB; inventory<=131072bytes; source/DOM existing bounded readers apply. Inventory observed_at<=plan declared_at<=window_start<=window_end<=observed_at; each qualified capture inside window, window<=24h. Per-exchange duration0..max_duration_ms with integer bound1..30000.
**url** — Exact WHATWG pre-serialized credential/fragment-free HTTP(S). Same serialized origin only; no registrable-domain inference. Source requested/final and destination requested/final remain within origin. Resolve a/href and remove fragment only; query/canonical/redirect alternatives are not equivalent. A destination capture that ends at this source final URL makes the literal non-self URL pair inconclusive, not a witness; another independent source may satisfy the destination. Keep requested/final URLs, chain and dates, without global equivalence.
## Français — structure, transport et limites précises
Entrée2 : rules et targets ; chaque cible contient url, observed_at,
incoming_links_synthetic booléen, context(network,bounds,tool,tool_version),
intent.crawler et intent.declared_at. intent.incoming_links contient reader,
origin, selection_reason, inventory_sha256, window_start, window_end,
max_duration_ms, sources et destinations. L’inventaire original UTF-8 contient une
URL de source par ligne dans l’ordre du plan ; seul un LF final est facultatif.
Aucun commentaire, BOM, doublon, ligne vide ou normalisation silencieuse.
Conserver label, base64 canonique, sha256 et observed_at. L’inventaire précède ou
égale le plan ; le plan précède ou égale la fenêtre des captures, au plus24h,
terminée avant observed_at de la cible. Durée d’échange bornée0..max_duration_ms,
entier1..30000.
Sources :1–16 objets {url,final_url,states}, avec1–16 états par source et64 au total.
Chaque état préalable est {id,browser,browser_version,scenario,interaction},
interaction valant none ou after-interaction ; au moins un none par source.
Destinations :1–32 objets {url,reason} distincts. Les deux populations peuvent
partager un document ; le conserver une fois. incoming_links.documents contient
au plus48 objets {url,http,render}. Un document dupliqué ne devient pas un témoin ;
une source supplémentaire non prévue ne modifie pas le plan. Les états après
interaction restent diagnostiques. Aucune interaction réelle n’est authentifiée.
Les URL demandées et finales doivent déjà égaler leur sérialisation WHATWG,
HTTP(S), sans identifiants ni fragments, avec la même origine exacte que le plan.
La source finale doit être le200 complet attendu. Conserver1–16 échanges natifs,
leurs octets, dates et agent. Une redirection inachevée, une304 ou une206 ne
constitue pas l’original terminal exigé. Le statut terminal d’une destination
peut être404 sans créer, à lui seul, un défaut TS16. Aucun diagnostic de soft404
n’est déduit d’un200 ni de son contenu.
Un a/href HTML du document principal doit résoudre exactement la destination
après retrait du fragment seulement. Aucune équivalence canonical, redirection,
barre finale, casse ou requête n’est ajoutée. Source : les deux hypothèses statiques
doivent être qualifiées et s’accorder pour cette destination ; leur désaccord sur
une autre destination n’efface pas ce témoin. DOM : snapshot original v2,
auto-empreinte, support, identité d’état et association HTTP/client qualifiés.
Une base active, un contexte étranger/shadow non qualifié, une récupération de
parsing ou une preuve incomplète reste inconclusive pour la surface. Une autre
surface indépendante qualifiée peut néanmoins fournir le témoin.
L’import vérifie les auto-empreintes fournies de l’inventaire, de chaque snapshot
et de ses supports textuels, y compris documents/états non prévus ou plan absent.
Un conteneur HTTP non nul est une liste d’objets ; conteneur invalide, base64
invalide/excessif/non canonique ou auto-empreinte incohérente est refusé
techniquement avant tout rapport réussi. Aucune empreinte n’est réparée. Champ
absent/nul et association sémantique différente restent des preuves insuffisantes
pour le lecteur, jamais une preuve de conformité. Les octets d’entrée et pièces
imbriquées sont conservés sans inventer une capture HTTP de la cible de périmètre.
Entrée JSON<=8Mio, inventaire<=131072octets, lecteurs source/DOM bornés existants,
Node24 explicitement sélectionné. Aucune collecte réseau. Un diagnostic calculé
au-delà de4Mio rend le profil inconclusive plutôt que de tronquer une conclusion.
Les limites du site, l’authenticité, l’importance et la qualité éditoriale, la
visibilité, le suivi effectif des liens et l’indexation restent hors preuve.
## English — additional intake and reading boundaries
Two qualified static scripting hypotheses must agree for the particular destination;
unrelated destination disagreement does not erase its independent witness.
Qualified v2 DOM states retain their original snapshot, self-digest, support,
state identity and HTTP/client association. Active base, unsupported foreign/shadow
context, parse recovery and incomplete evidence leave that surface inconclusive.
Another independent qualified surface may still witness presence. HTTP200 never
establishes semantic page validity or excludes a soft404.
Check supplied inventory, every snapshot and textual support self-digests before
interpretation, including unplanned documents/states and missing plans. Non-null
HTTP is a list of objects. Malformed/excessive/noncanonical byte containers or
inconsistent self-digests refuse transport, with no successful report. Never repair
a hash. Missing/null fields or different semantic associations remain evidence
qualification concerns, not conformity. Preserve original input/nested pieces;
never invent top-level HTTP for the scope target. Explicit Node24, existing bounded
source/DOM readers and8MiB input apply. Diagnostics above4MiB make the profile
inconclusive instead of truncating a conclusion. No external acquisition occurs.
## Review and migration / Revue et migration
Existing dated public references are retained in
`research/essential-links-2026-10-14/provenance.json`. They explain technical HTML
links/URLs, not approval of this profile. Claude’s method comments were proposals,
not human approvals or executed tests. Synthetic cases stay marked. TS01–TS44,
upstream provenance and previously delivered tools remain preserved.
See migration-draft.37.md for explicit new-dossier migration. This candidate is
not a certification, recognized standard, whole-site or global conformity claim.
FR : références publiques datées déjà conservées pour TS17 ; aucune nouvelle
observation d’un tiers ou approbation ne découle de ce profil. Commentaires de
Claude = propositions, pas tests exécutés ni approbation humaine. Cas synthétiques
marqués ; TS01–TS44, provenance et livraisons antérieures conservés. Migration
explicite dans un nouveau dossier ; aucune certification ou conformité globale.
## Source identity boundary / Limite d’identité de la source
FR : l’identité du contenu attendu de la source n’est pas évaluée par TS16. Une
page d’erreur répondant HTTP200 peut fournir un témoin de navigation qualifié ;
le lecteur ne détecte pas les soft404. Le rapport conserve explicitement cette
limite. Une éventuelle vérification d’identité appartient à un autre contrôle et
ne doit pas être inventée à partir du seul statut HTTP ou du texte de la page.
EN: TS16 does not assess expected source-content identity. An HTTP200 error
template can supply a qualified navigation witness; the reader does not detect
soft404s. The report explicitly retains this limitation. Any source identity
assessment belongs to another control and is not inferred from HTTP status or
page text alone.
## Conditional DOM evidence / Preuve DOM conditionnelle
FR : les entrées communes obligatoires sont HTTP, HTML source, inventaire et
intention. Le plan nomme les états requis ; le DOM original reste conditionnel
à la surface utilisée. Un témoin HTML source indépendant peut établir pass sans
DOM fourni. Son absence reste conservée, aucun artefact render n’est inventé.
En revanche, conclure à une absence bornée exige toutes les surfaces éligibles
prévues ; un DOM manquant sans témoin indépendant laisse inconclusive.
EN: Common required inputs are HTTP, source HTML, inventory and intent. The plan
names required states; original DOM evidence is conditional on the surface used.
An independent source HTML witness can establish pass without supplied DOM. Its
absence is retained; no render artifact is invented. Bounded absence still
requires every planned eligible surface; missing DOM without an independent
witness remains inconclusive.
Graphe / Graph
# TS18 — supplied graph reconciliation / rapprochement de graphe fourni
Candidate profile `supplied-graph-reconciliation-v1`; native document plan
`supplied-graph-documents-v1`. Draft.38, interpreter37, adapter39, HTML22, replay3.
The three atomic rules are separate from individual URL/pair observations.
Qualification results are recorded separately from this contract.
## Français
Le plan antérieur `intent.graph` fixe une origine HTTP(S) exacte,1–16 documents,
1–4 racines choisies dans ces documents,1–8 familles couvrant chaque document une
seule fois, une justification de sélection et une fenêtre de24h au maximum.
Chaque document indique une URL demandée égale à son URL finale et1–16 états
nommés, dont au moins un déclaré sans interaction ;64 états au total. Aucune
équivalence de redirection, canonical, barre finale, casse ou paramètres n’est
inférée. Le JSON est limité à8MiB, les diagnostics à4MiB ; aucun verdict tronqué.
`graph_inventories` conserve les originaux `reference`, `crawl`, `cms`, `sitemap` :
base64 canonique, SHA256, complétude et date fournies. Chaque original est borné à
1MiB. La référence contient exactement les URL ordonnées du plan en UTF-8,
une par ligne, avec LF final facultatif ; sa date précède le plan liant son hash.
Les trois autres dates restent dans la fenêtre préalable et sont visibles auprès
du rapprochement. Jusqu’à128 URL distinctes par inventaire. Les URL hors population
restent des diagnostics non évalués ; elles ne deviennent pas des orphelins.
Crawl et CMS utilisent CSV avec dialecte déclaré : encodage `utf-8` ou
`utf-8-sig`, séparateur virgule ou point-virgule, guillemet double,
`doublequote:true`, en-tête ligne1 et nom exact de colonne URL. Pas de détection
heuristique ;32 colonnes,65536 caractères par champ, URL4096 caractères au plus.
Le sitemap réutilise le lecteur TS15 sur un URLset fourni, décodage déclaré,
structure et bornes qualifiées ; aucun index récursif ni collecte.
Chaque production fournit `mode`, `tool`, `tool_version`, `derived_from`.
Le crawl fermé ajoute seulement `seed_roots` et `frontier_sha256` (SHA256 JSON
canonique `{nodes,roots}`), mode `follow-links`, dépendances vides, racines exactes.
Il déclare un départ depuis ces seules racines ; mode liste, amorçage mixte ou
champ d’amorçage supplémentaire sont hors profil et restent NT. Le CMS déclare
`native-export` sans dépendance ; le sitemap déclare `native-export` ou
`cms-generated` dépendant de `cms`. Ces déclarations ne sont pas authentifiées.
L’appartenance à un crawl ne crée jamais une arête ni une profondeur.
`graph_documents` conserve jusqu’à32 dossiers HTTP/DOM originaux. Les lecteurs
TS16/TS17 qualifient les témoins source et DOM : source sous deux hypothèses
statiques concordantes, DOM lié au HTTP et déclaré sans interaction. Un témoin
positif indépendant établit une paire présente ; l’absence exige toutes les
surfaces éligibles qualifiées ; sinon la paire reste inconnue. Les états après
interaction sont diagnostiques. HTTP200 ne prouve ni contenu attendu ni absence
de soft404 ; cette limite reste visible.
Le calcul utilise uniquement les documents déclarés et des sources distinctes,
sans auto-liens. Distance basse : arêtes connues et possibles ; distance haute :
chemin connu. États : `exact`, `interval`, `no_proven_route`, `unreachable` dans
ce seul graphe borné. Les degrés entrants sont aussi des intervalles. Un candidat
sans entrant exige degré maximal0 et n’est jamais une racine ni un orphelin global.
Les cycles déconnectés restent distincts des pages sans aucun lien entrant.
A01 qualifie le rapprochement documentaire, A02 les mesures natives. Leurs domaines fermés sont pass/inconclusive : aucune valeur fail fabriquée pour ces mesures. A03 vérifie
les revues fournies `graph_reviews`, sans produire de jugement : chaque famille,
différence connue d’inventaires, candidat sans entrant et document inaccessible
reçoit un sujet calculé. Les revues lient le plan, les dossiers d’inventaire entiers
(dates comprises), les originaux du graphe et les mesures par SHA256 canonique.
Elles indiquent sujet, hash, auteur fourni, date, motif, provenance synthétique et
`explained`, `defect` ou `unresolved`. La date suit la fin de fenêtre et précède
l’observation. Une revue manquante, ambiguë, mal liée ou supportée par une mesure
inconnue reste indéterminée. Une différence connue et revue comme défaut peut
rester NC malgré un graphe incomplet ailleurs. Le sens du motif et l’identité du
relecteur ne sont pas authentifiés. Les revues de test sont explicitement rédigées
pour les scénarios synthétiques ; aucune revue Edikka ou personnelle n’est créée.
## English
The prior `intent.graph` fixes an exact HTTP(S) origin,1–16 documents,1–4 roots,
1–8 families covering each document exactly once, selection rationale and a
capture window of at most24hours. Requested and final document URLs must match
exactly. Each source declares1–16 named states including a no-interaction state;
64 states total. No redirect/canonical/query/case/slash equivalence. Input JSON is
bounded to8MiB and diagnostics to4MiB, with no truncated conclusion.
Retain canonical base64, SHA256, completeness and supplied dates for original
reference/crawl/CMS/sitemap inventories, each at most1MiB and128 distinct URLs.
The UTF-8 ordered reference lines (optional final LF) predate the plan binding
its hash. Other dates must lie within the window and remain visible alongside
reconciliation. Outside URLs are unevaluated diagnostics, never orphan claims.
CSV encoding/delimiter/quoting/header/URL column are explicit, without guessing:
UTF-8 or UTF-8-BOM, comma/semicolon, double quotes, doublequote enabled, header1;
32 columns,65536 characters per field,4096 per URL. Sitemap uses the exact TS15
URLset reader with declared encoding, no recursive index or acquisition.
Production is supplied and unauthenticated. Crawl declares closed `follow-links`
production from the exact roots only, no dependencies, with bound nodes/roots
frontier. Additional seeding fields, mixed or list seeding are inconclusive.
CMS is a native export; a CMS-generated sitemap explicitly retains its dependency.
Crawl membership never creates native graph edges or establishes reachability.
Up to32 original document records feed the existing TS16/TS17 source/DOM readers.
An independent qualified witness establishes an edge; absence needs every eligible
qualified surface; otherwise unknown. After-interaction states are diagnostic.
HTTP200 does not establish expected source content or exclude soft404s.
Distances use known edges for the upper bound and possible edges for the lower
bound. Exact/interval/no-proven-route/bounded-unreachable states remain distinct.
Incoming degrees count distinct non-self sources as intervals. A no-incoming
candidate needs upper degree0 and is neither a root nor a site-wide orphan.
Disconnected cycles are separate. There is no universal SEO depth threshold.
A01 qualifies original reconciliation; A02 qualifies native measurements; their closed outcome domains are pass/inconclusive, with no fabricated fail for these measurements; A03
checks supplied documentary reviews, never inventing them. Native subjects cover
each family, known inventory difference, bounded no-incoming candidate and
unreachable document. Reviews bind the prior plan, entire inventory records
including dates, graph originals and measurements with canonical SHA256. Supplied
reviewer/date/rationale/synthetic flag/disposition must match. Review time follows
window end and precedes observation. Missing/ambiguous/misbound/unresolved reviews
or unqualified supporting measurements remain inconclusive. An independently
evidenced supplied defect survives unrelated unknowns. Reviewer authenticity and
rationale semantics are not assessed. Synthetic authored test reviews are never
real personal/Edikka approval.
## Integrity, outcomes and delivery / intégrité, résultats et livraison
Provided inconsistent self-hashes are technical intake refusals, including
unplanned evidence or missing plans. Missing evidence remains native inconclusive.
No digest repair, C/NA from absence, global conformity, certification, indexing or
ranking inference. Originals remain intact in exports and exact offline replay.
No network acquisition. Consumers require explicit qualified import and separate
app acceptance; this contract itself proves neither. Historical failures remain.
Hreflang
# TS23 — hreflang réciproque fourni / supplied reciprocal hreflang Candidate `hreflang-reciprocity-v1`, draft.39, interpreter38, adapter40, HTML23, replay3. This contract is separate from observed qualification results. ## Français Le plan `intent.hreflang` précède les captures, donne une justification, 1–16 URL de pages distinctes et1–32 associations code–URL attendues, ainsi que le canal principal `html` ou `http-link` pour chaque page. Toutes les URL de pages sont présentes dans les associations ; plusieurs codes peuvent désigner la même URL. La casse des codes est comparée en ASCII. Les codes sont des jetons bornés, pas une validation du registre linguistique. `x-default` ne reçoit aucun jugement de rôle. Les groupes entre domaines sont admis. Les URL sont des HTTP(S) absolues, sans identifiant ni fragment, admises par le runtime WHATWG explicite sans changement de sérialisation. Aucune équivalence canonical, redirection, paramètres, casse du chemin ou barre finale n’est créée. Une cible relative reste indéterminée dans ce profil fermé ; aucune résolution implicite ne l’ajoute au groupe. Jusqu’à32 associations extérieures explicitement exclues restent visibles hors évaluation ; un extra non prévu est indéterminé. Chaque canal principal doit fournir le jeu attendu complet, auto-référence comprise. Le canal secondaire ne le remplace ni ne le complète ; aucun assemblage de listes partielles. Un conflit qualifié reste NC. Si seul le canal secondaire contient le jeu complet, le diagnostic l’indique : l’écart concerne le mode principal prévu, pas une absence universelle de hreflang. Une contradiction indépendante reste NC malgré des inconnues ailleurs. Les documents `hreflang_documents` gardent les requêtes/réponses HTTP originales v2 en base64 canonique avec SHA256, leur complétude et dates. Un échange GET200 sans redirection par page, demandé=final, client égal au plan, au plus30000ms, dans une fenêtre préalable de24h au maximum, close avant `observed_at`. Un Content-Type unique est requis. Framing/gzip natifs sont décodés sans perte. Les en-têtes Link peuvent qualifier un document non HTML, y compris PDF binaire ; son corps n’est pas prétendu HTML. Les originaux et contextes ne sont pas authentifiés. HTML exige UTF-8 explicitement déclaré. Les lecteurs inchangés d’éléments et du préfixe head lisent les mêmes octets sous deux hypothèses statiques. Les link admis sont directement dans le head avant sa fermeture explicite, en espace de noms HTML, `rel` contenant seulement alternate (doublons identiques admis), avec href/hreflang uniques. `alternate stylesheet` est une feuille de style, pas une annotation linguistique. Commentaires, textes script et templates ordinaires ne deviennent pas des annotations actives. Aucune exécution JavaScript. La fermeture implicite directe du head par div, img, iframe ou texte non blanc peut établir un placement dans body si les deux hypothèses concordent sans erreur de parseur ; le token et sa position originale sont conservés. Une divergence noscript reste inconnue. Réinsertion après fermeture explicite, ambiguïté attributaire, contexte étranger et autres récupérations restent hors profil. Le placement dans body est NC seulement pour un primaire HTML ; les liens non admis du canal secondaire restent diagnostiques. Modificateurs media/type/as et paramètres HTTP hors rel/hreflang (anchor compris) restent indéterminés. Les canaux pertinents sitemap/DOM fournis dans `hreflang_unsupported_channels` restent hors profil et empêchent C, sans effacer une contradiction indépendante. Pas de collecte réseau. TS22 (codes/indexabilité/canonical) et TS24 (rôle x-default) restent distincts. Aucun choix de variante Google, indexation, traduction ou conformité globale n’est déduit. ## English The earlier `intent.hreflang` plan supplies rationale,1–16 distinct page URLs, 1–32 expected code-to-URL mappings and a primary `html` or `http-link` channel for each page. Every page appears in the mapping; several codes may share one URL. Use ASCII code case folding, without language registry validation or x-default role judgment. Cross-domain groups are allowed. Exact absolute credential-free, fragment-free HTTP(S) WHATWG URLs only, without rewriting or inferred canonical, redirect, path-case, slash or query equivalence. Relative targets are inconclusive, never silently resolved. Up to32 explicit excluded outside mappings remain visible; unplanned outside annotations are inconclusive. Every primary channel supplies the complete expected set, including self references. Secondary channels never replace or complete it. Qualified conflicts are failures; a complete secondary set is explicitly shown when the primary is incomplete. This is a prior-mode mismatch, not a claim of universal hreflang absence. Independent qualified contradictions survive unrelated unknowns. Original v2 HTTP request/response byte containers, SHA256, completeness and dates are retained. One unconditional GET200 exchange per page, requested=final, no redirect, exact prior client, at most30000ms within an earlier at-most24-hour window ending before `observed_at`. One Content-Type is required. Native framing/gzip is losslessly decoded. HTTP Link can qualify non-HTML documents including binary PDF without treating their body as HTML. Acquisition/context authenticity is not proved. HTML requires declared UTF-8; unchanged element and source-head observers bind the same bytes under two static hypotheses. Admitted links are direct HTML head children before explicit closure, with an alternate-only ASCII relation set and unambiguous href/hreflang. Identical relation tokens are idempotent; alternate stylesheet is not a language annotation. Comments, script text and ordinary templates are not active annotations. No JavaScript execution is inferred. Direct implicit head closure by div/img/iframe or non-whitespace text can establish body placement when both hypotheses agree without parser errors; retain native closure token and byte position. Noscript divergence remains unknown. Reinsertion after explicit closure, ambiguous attributes, foreign context and other recovery are outside admission. Body placement fails only an HTML primary; non-admitted secondary body links are diagnostic. HTML media/type/as and HTTP parameters beyond rel/hreflang, including anchor, remain inconclusive. Relevant supplied sitemap/DOM channels are unsupported and prevent pass unless an independent failure is established. ## Bounds and integrity / bornes et intégrité Up to48 retained document records,128 annotations per channel/page,8MiB input JSON, 4MiB diagnostics; no truncated conclusion. Every present original self-digest is checked before the plan, including unplanned/unsupported supplied pieces. Broken integrity is a technical refusal. Missing originals/digests remain inconclusive; there is no automatic NA or fabricated review. Exact input originals remain in export and offline replay. Explicit qualified consumer import and separate app acceptance are required. Synthetic fixtures are never real-site evidence. ## Typed boundaries / frontières typées FR : la position du champ détermine sa garde. Un enregistrement de document non objet donne NT avec « structure documentaire non interprétable ». Un champ `http` absent ou nul, une requête/réponse absente ou nulle, ou une auto-empreinte absente restent NT. Une liste HTTP contenant un échange non objet, un conteneur requête/réponse présent non objet, un base64 présent malformé ou une auto-empreinte fausse sont des refus techniques sans rapport. Aucun verdict n’est fabriqué après un refus. Les contrôles historiques conservent leurs contrats propres ; cette version ne leur applique pas rétroactivement cette nouvelle garde. EN: field position determines the guard. A non-object document record is NT with “uninterpretable documentary record structure”. Missing/null HTTP, request or response and missing self-digests remain NT. A non-object exchange within the HTTP list, a present non-object request/response payload, malformed present base64 or contradicted self-digest is a technical refusal without a report. Historical controls retain their own contracts; this version does not silently migrate them. FR/EN : un Link qualifié est comparé à la table du plan préalable, indépendamment d’une lecture HTML inconnue / a qualified Link is compared with the prior mapping table independently of an unknown HTML reading. Le rapport dit « contradiction avec le plan », non un conflit entre lectures / the report describes a contradiction with the plan, not an inferred conflict between readings. URL relative : non évaluée, hors profil / relative URL: not evaluated, outside profile. Un secondaire complet reste visible avec le motif d’écart au canal prévu / a complete secondary is explicitly shown alongside the prior-channel mismatch.
Contenu essentiel / Essential content
# TS25 — critical stage presence / présence critique par stade
Draft.44 defines TS25-A01/A02, reader `critical-stage-presence-v1`, interpreter43,
adapter43, HTML25, replay3. This document specifies a candidate; it does not
establish observed qualification, browser execution, actual client application
or certification. Sources and application receipts are separate.
## Français
Draft.44 / reader3 : les champs reviewer, assistance et reason des revues TS25 fournies sont limités à8192octets UTF8 bruts chacun, avant strip ou normalisation ; chaque objet revue, champs supplémentaires inclus, à32768octets de JSON compact UTF8. Toute revue fournie est vérifiée à l’admission, même inutilisée. Un dépassement donne un refus technique avant publication, jamais C ou NT public ; les originaux sont conservés sans réécriture. Le diagnostic natif de chaque règle est borné à4MiB de JSON compact UTF8 trié, y compris A01 et les sorties d’erreur. Au dépassement, un diagnostic compact explicitement incomplet conserve un fail indépendant établi, sinon inconclusive ; aucun pass. Le transport refuse ce marqueur et borne aussi à4MiB par cible la somme des artefacts TS25 réellement sérialisés (JSON UTF8 indent2, saut de ligne final), pour les règles demandées. Les maxima individuels ne garantissent pas que toutes leurs combinaisons respectent les bornes cumulées. Aucun changement des autres contrôles ni du validateur partagé.
Draft.43 / reader2 : le champ render est un objet documentaire contenant states. render:[] n’est pas équivalent à render:{states:[]}. Un conteneur non objet ou une population mal formée donne une couverture inconnue, sans coercition ni arrêt des lectures source indépendantes. Une absence source requise et qualifiée reste fail ; une source présente ne transforme pas cette couverture inconnue en pass. Une liste states vide est valide quand aucun état n’est requis. Les revues restent liées aux ID d’états, jamais à leurs indices. Cette frontière propre à TS25 ne migre pas celle de TS23. Les self-digests contradictoires conservent leur refus technique.
TS25 compare des **éléments critiques préalablement déclarés** aux originaux
HTTP et aux états DOM fournis. Un résultat C porte seulement sur cette population,
ces éléments, leurs politiques et conditions. Il ne prouve ni l’exhaustivité du
site ni ce que Google a rendu ou indexé. La revue de pertinence du périmètre et
la revue de visibilité/contexte sont réellement fournies par leur responsable ;
le lecteur vérifie leurs liens et leurs dates, sans authentifier leur auteur.
Les exercices rédigés restent marqués synthétiques.
### Entrées et décisions préalables
L’entrée captures de version2 conserve `url`, `observed_at`, `context`, `intent`,
`http`, `render`, `presence_synthetic`, `presence_plan_review` et
`presence_context_reviews`. Le plan `intent.critical_presence` contient :
- `reader`, `window_start`, `window_end`, `max_duration_ms`, `origins`, `final_url` ;
- `population`, `scope_reason`, `items`, `roles`, `states`.
`intent.declared_at` précède la fenêtre ; `intent.crawler` est le User-Agent
HTTP exact, sans usurpation d’une visite Google. La fenêtre couvre au plus24h,
chaque échange au plus30000ms. Contexte réseau, bornes, outil et version sont
explicites. Les URL initiale/finale et chaque saut appartiennent à 1–16 origines
HTTP(S) déclarées. L’interprétation exige une trace complète donnant la réponse
finale200 attendue. Les statuts autres que200 et les réponses non attribuables
restent inconnus pour la présence ; cela ne remplace pas TS01/TS02.
1–32 éléments portent chacun `id`, `role`, `reason`, `selector_id`, `expected`,
`policy`, `states`. Le rôle JSON-LD ajoute `json_pointer`. Les identifiants sont
uniques, les sélecteurs sont des ID HTML littéraux ; aucune sélection CSS libre.
Chaque état préalable porte exactement `id`, `reason`, `browser`,
`browser_version`, `conditions`. Les trois derniers doivent correspondre aux
champs fournis de l’état. Au plus16 états, liste vide permise pour source seule.
Un élément source-only sélectionne zéro état ; les autres politiques en
sélectionnent1–16. Des états prévus pour diagnostic peuvent être fournis sans
être requis par un élément source-only.
A01 exige exactement une décision pour chacun des cinq rôles ci-dessous :
`included` avec les `item_ids` exacts, ou `outside-declared-scope` avec une liste
vide et un motif. Une déclaration générique « complet » ne les remplace pas.
Une exclusion n’est pas une NA. La revue préalable lie le digest canonique de
`{url,intent}`, porte `complete:true`, et un jugement `supported` ou
`contradiction`. Elle est datée entre la déclaration et le début de fenêtre.
`reviewer`, `assistance`, `reason`, `provenance` sont conservés. `supported`
donne pass ; `contradiction` donne fail ; absence, invalidité ou unknown donne
inconclusive. Cette règle ne transforme pas le jugement en fait authentifié.
### Lecture des cinq rôles
| Rôle | Critère borné |
| --- | --- |
| `body-text` | Texte de l’élément HTML dans le body ordinaire, comparé exactement après réduction des seuls espaces ASCII ; NBSP conservé. |
| `document-title` | Élément title enfant direct du head, même comparaison textuelle. Un titre SVG ne compte pas. |
| `link` | Élément HTML a dans le body, href non vide résolu par le lecteur WHATWG Node24 épinglé, égal à l’URL HTTP(S) absolue attendue. Area hors profil. |
| `canonical` | Link enfant direct du head portant le jeton rel canonical et la référence attendue. Ne prouve pas la préférence de Google ni l’unicité globale des canonicals. |
| `jsonld` | Script du head/body de type ASCII insensible à la casse application/ld+json sans paramètre ; chaîne brute au pointeur JSON préalable, comparée sans normalisation ni expansion. |
L’ID absent prouve uniquement l’absence **à cet ID**, pas celle du contenu dans
toute la page. Un ID dupliqué, namespace étranger, contexte inerte/masqué non
qualifié, shadow ou base explicite actif est inconclusive. Les hypothèses source
statiques avec/sans scripting doivent concorder : présent/absent contradictoires
restent inconnus. Aucune exécution JavaScript n’a lieu.
Le JSON est le texte brut du script : pas de décodage d’entités HTML. Bloc vide,
syntaxe JSON mal formée ou identité attendue absente/contraire : absence qualifiée
sur ce bloc complet. Clés dupliquées, non-fini, structure scalaire non prise en
charge, MIME avec paramètres, script externe, dépassement64KiB : inconclusive.
Objet/tableau, profondeur<=64 et<=50000 nœuds ; pointeur RFC6901 sans forme fragment,
index de tableau canonique, feuille chaîne. Aucune validation Schema.org/Google,
concordance sémantique ou identité JSON-LD développée n’est déduite ; TS31–33
restent distincts. Un @id relatif ne devient pas absolu implicitement.
Les DOM fournis utilisent structured-inventory-v2, même navigation déclarée,
empreintes, HTTP et User-Agent associés, document complet, scripts activés,
sans erreurs, date après réception HTTP et avant la fin de fenêtre. Les limites
du collecteur, frames non collectés et shadow fermé inconnu restent explicites.
Une empreinte égale entre plusieurs états est un diagnostic, pas une preuve
qu’ils sont indépendants ni une erreur automatique.
Un texte/lien rendu structurellement présent nécessite aussi une revue de
contexte/visibilité liée à `{url,intent,http,state,item_id}`. Elle est postérieure
à l’état et antérieure à l’évaluation, complète, avec les champs de provenance
ci-dessus. `supported` confirme le jugement fourni ; `contradiction` fournit un
défaut. Plusieurs revues du même couple élément/état, même identiques, restent
inconclusives ; aucune préférence pour la dernière. Une absence native déjà
qualifiée reste un défaut sans cette revue. Title/canonical/JSON-LD reposent sur
leurs critères structurels explicites, sans jugement de visibilité CSS.
### Composition et inconnues
A02 applique la politique de chaque élément : source-only utilise la source ;
render-only exige tous ses états ; source-or-render passe si une branche est
présente, échoue seulement si les deux sont absentes ; source-and-render exige
les deux branches et échoue si l’une est absente. Dans la branche rendue requise,
une absence qualifiée domine une autre inconnue ; sinon tout doit être présent.
L’état requis manquant rend sa lecture inconnue, pas absente. Une branche source
positive peut donc satisfaire OR même si un état rendu manque.
Les états fournis non prévus ou dupliqués rendent la couverture inconnue. Ils
ne suppriment jamais un défaut indépendant qualifié. Cette limite conservatrice
peut faire passer une couverture de C à NT lorsqu’on ajoute des pièces hors plan ;
elle n’invente pas NC. Un élément inconnu n’efface pas un autre élément absent.
A01/A02 restent séparés : C exige les deux pass, NC conserve tout fail qualifié,
NT exprime les preuves restantes insuffisantes. Aucune NA native.
### Transport, original, migration et limites
L’adaptateur conserve l’entrée exacte et les revues originales. Chaque
self-digest DOM/support fourni est contrôlé, y compris hors plan. Une corruption
ou provenance explicitement incompatible provoque un refus technique sans
publication de rapport ; cela n’est pas un NT. L’entrée totale est bornée8MiB,
les diagnostics4MiB, les valeurs attendues1024 caractères. Aucun dépassement ne
permet une conclusion d’absence tronquée. Export et rejeu conservent les versions
exactes sans accès à l’application ou au réseau.
Voir [migration](migration-draft.44.md). Aucun verdict TS44/TS31/TS32/TS33 n’est
emprunté. Les autres rôles, interactions et conditions ne sont pas implicitement
couverts. Le profil ne prouve ni vérité, autorité thématique, absence de
cannibalisation, indexation, classement ou conformité globale.
## English
Draft.44 / reader3: supplied TS25 review fields reviewer, assistance and reason are each limited to8192 raw UTF8 bytes before strip or normalization; each entire review object, including additional fields, to32768 compact UTF8 JSON bytes. Admission checks every supplied review, including unused ones. An overrun is technical refusal before publication, never public C or NT; exact originals are not rewritten. Each native rule diagnostic is bounded to4MiB of sorted compact UTF8 JSON, including A01 and error returns. Overflow produces an explicitly incomplete compact diagnostic retaining an independently established fail, otherwise inconclusive; never pass. Transport refuses that marker and also caps the sum of actual serialized TS25 observation artifacts per target at4MiB (UTF8 JSON indent2, trailing newline), for requested rules. Individual maxima do not guarantee that every combination satisfies aggregate bounds. Other controls and the shared validator are unchanged.
Draft.43 / reader2: render is a documentary object containing states. render:[] is not render:{states:[]}. A non-object container or malformed population makes coverage unknown, without coercion or stopping independent source readings. An independently required qualified source absence remains fail; positive source cannot turn unknown coverage into pass. An empty states list is valid when no state is required. Reviews remain bound to state IDs, never indexes. This TS25-specific boundary does not migrate TS23. Contradicted self-digests remain technical refusal.
TS25 compares **prior declared critical items** with supplied original HTTP and
DOM states. C applies only to that population, inventory, policies and conditions.
It proves neither site completeness nor what Google rendered/indexed. Scope and
visibility/context judgments must actually be supplied by their responsible
reviewer; bindings and chronology are checked, authors are not authenticated.
Authored exercises remain synthetic.
Capture input2 retains url, observed_at, context, intent, http, render,
presence_synthetic, presence_plan_review and presence_context_reviews. The prior
intent.critical_presence contains reader, window_start/end, max_duration_ms,
origins, final_url, population, scope_reason, items, roles and states. Intent must
precede a <=24h window; each HTTP exchange<=30000ms; exact client and network/tool
context supplied. Initial/final/hop URLs must belong to1–16 declared exact origins.
A complete expected final200 is required; other status/unknown attribution is
inconclusive for presence, without replacing TS01/02.
1–32 unique items contain id, role, reason, selector_id, expected, policy, states;
JSON-LD adds json_pointer. Selectors are literal IDs, not arbitrary CSS. At most16
prior states each contain exactly id, reason, browser, browser_version, conditions;
last three match the supplied state. Source-only items select no states; other
policies select1–16. Optional planned diagnostic states may accompany source-only.
A01 requires exactly five explicit role dispositions: included with exact item_ids,
or outside-declared-scope with zero items and a reason. A generic completeness
assertion is insufficient. An exclusion is not NA. The complete prior supplied
review binds canonical digest of {url,intent}, dated between declaration and window
start, with reviewer, assistance, reason, provenance, judgment. Supported passes;
contradiction fails; missing, invalid or unknown review is inconclusive. A passing
check does not authenticate that judgment.
The five roles are: ordinary-body HTML text with ASCII whitespace collapse only
(NBSP retained); direct-head document title; ordinary-body native a/href equal to
the declared absolute HTTP URL through pinned Node24 WHATWG resolution (area
unsupported); direct-head link rel canonical with expected target; and inline
head/body JSON-LD script with exact case-insensitive MIME application/ld+json and
no parameters, compared as a raw string at a prior JSON pointer. Canonical here
does not establish global uniqueness or Google preference. Missing ID proves
absence at that ID only. Duplicate ID, foreign/inert/unqualified hidden context,
shadow or active explicit base is unknown. Two alternative static source hypotheses
must agree; disagreement is unknown, not a rendered-state conjunction. No JS runs.
JSON is raw script text without HTML entity decoding or JSON-LD expansion.
Empty/malformed syntax or missing/conflicting expected identity in a complete
selected block fails that item. Duplicate keys, nonfinite values, unsupported
scalars, parameterized MIME, external script or >64KiB block are unknown.
Object/array required, depth<=64 and<=50000 nodes; RFC6901 pointer, no fragment
syntax, canonical array indexes and string leaves. Relative @id stays relative.
No Schema.org/Google eligibility or semantic validity, no borrowed TS31–33 verdict.
Supplied structured-inventory-v2 DOM must be complete, script-enabled, without
errors, after HTTP and within the window, bound to supplied same-navigation HTTP
and User-Agent. Collector bounds, uncollected frames and unknown closed shadow
remain explicit. Equal snapshot hashes across states are diagnostic, neither proof
of independent observations nor automatic failure.
Structurally present rendered body-text/link requires a complete supplied context/
visibility judgment bound to {url,intent,http,state,item_id}, after snapshot and
before assessment. Supported confirms the supplied judgment; contradiction fails.
Missing, unbound or multiple reviews for one item/state (even identical) are
unknown; no latest-wins rule. Qualified native absence remains failure without a
review. Title/canonical/JSON-LD use the stated structural criteria, without CSS
visibility claims.
A02: source-only uses source; render-only requires all selected states; OR passes
if either branch is present and fails only if both are absent; AND needs both
present and fails if either is absent. In required rendered states, qualified
absence dominates unknown; otherwise all must be present. Missing state means
unknown, not absent. Positive source can satisfy OR despite missing render.
Unplanned or duplicate supplied states make coverage unknown without erasing an
independent failure. Adding out-of-plan evidence may reduce coverage C to NT,
never fabricate NC. One unknown item never erases another qualified absence.
Whole-control C requires A01/A02 pass; any fail yields NC, otherwise NT. No native NA.
Adapter checks every supplied DOM/support self-digest, including out-of-plan
states. Corruption or explicit provenance mismatch is technical refusal with no
report, distinct from NT. Exact originals/reviews retained. Input<=8MiB, combined
diagnostics<=4MiB, expected string<=1024 characters; exceeded bounds cannot justify
truncated absence. Export/replay binds exact versions without application/network.
[Migration](migration-draft.44.md) is explicit, no historical artifact rewritten.
No actual execution, authenticated review, semantic truth, topical authority,
cannibalization, indexing, ranking or global conformity inferred.
## Public reference / Référence publique
[Google JavaScript SEO basics](https://developers.google.com/search/docs/crawling-indexing/javascript/javascript-seo-basics)
distinguishes crawling/rendering concerns. It is contextual documentation, not a
validation of this profile. Public dated capture2026-10-15T01:35:11Z,
SHA-256 `3bf8735af5e3ea4a0b99c06eeb2373afa5b65cac0bc8c77c1ff9626074937970`,
221711 bytes; acquisition receipt retained in the local qualification dossier.
Rendu et transport / Rendering and transport
# Rendu, HTML et transport / Render, HTML and transport — v1
0.3.0-draft.4. Treize nouvelles règles / Thirteen new rules. All fixtures and capture examples are SYNTHETIC / SYNTHÉTIQUES. No actual site audit.
## TS26-A01 — Accès des ressources et politiques natives / Resource access and native policies
Entrées / Inputs: `http, robots, html, intent`.
**Périmètre / Scope**
FR : Population finie préalable de TS26, profil render-transport-v1 ; voir docs/render-transport-evidence.md.
EN: Prior finite TS26 population under render-transport-v1; see docs/render-transport-evidence.md.
**Procédure / Procedure**
FR : Sur chaque ressource critique sélectionnée, comparer HTTP direct200, robots du même origin et intersection des CSP HTTP du document HTTPS. Relever la source complète pour exclure une CSP meta non qualifiée.
EN: For each selected critical resource compare direct HTTP200, same-origin robots and intersection of HTTP CSP policies from the HTTPS document. Retain complete source to exclude unqualified meta CSP.
**Attendus / Expectations**
FR : Une erreur HTTP, un refus robots ou un refus CSP qualifié échoue indépendamment des autres lacunes.
EN: A qualified HTTP error, robots denial or CSP denial fails independently of other gaps.
**Preuves / Evidence**
FR : Originaux exacts, plan et dates/contexte, empreintes, diagnostics et revue motivée liée au dossier entier. Types : http, robots, html, intent.
EN: Exact originals, plan and dates/context, fingerprints, diagnostics and reasoned review bound to the entire dossier. Kinds: http, robots, html, intent.
**Hypothèses / Assumptions**
FR : Provenance, inventaire, état navigateur, conditions et jugement fournis, non authentifiés ; deux lectures HTML statiques ne sont pas deux navigations. La confiance TLS dépend des racines fournies.
EN: Supplied unauthenticated provenance, inventory, browser state, conditions and judgment; two static HTML readings are not two navigations. TLS trust depends on supplied roots.
**Indéterminés / Inconclusive**
FR : Inventaire absent, robots non fourni, directive CSP non prise en charge, nonce, meta CSP, source ambiguë ou revue absente : NT.
EN: Absent inventory, missing robots, unsupported CSP directive, nonce, meta CSP, ambiguous source or absent review: NT.
**Non-applicabilité / Non-applicability**
FR : Pas de NA atomique. Population vide ou domaine prétendu absent sans preuve reste NT dans ce profil.
EN: No atomic NA. Empty population or claimed absent domain without evidence remains NT in this profile.
**Limites / Limitations**
FR : Aucun audit réel déduit des cas synthétiques. Ni indexation, classement, conformité globale, certification d’accessibilité, sécurité exhaustive ou confiance universelle des navigateurs. La revue peut être erronée ; les captures peuvent omettre des états.
EN: No real audit inferred from synthetic cases. No indexing, ranking, global conformity, accessibility certification, exhaustive security or universal browser trust. Reviews may be wrong and captures may omit states.
## TS26-A02 — Trafic et console attribués au rendu / Traffic and console attributed to rendering
Entrées / Inputs: `render, http, intent`.
**Périmètre / Scope**
FR : Population finie préalable de TS26, profil render-transport-v1 ; voir docs/render-transport-evidence.md.
EN: Prior finite TS26 population under render-transport-v1; see docs/render-transport-evidence.md.
**Procédure / Procedure**
FR : Lire un export HAR borné fourni, relier la réponse du document aux octets HTTP, puis vérifier chaque ressource critique. Conserver la console datée liée au HAR et la revue de criticité.
EN: Read a supplied bounded HAR export, bind its document response to native HTTP bytes, then check every critical resource. Retain dated HAR-bound console and criticality review.
**Attendus / Expectations**
FR : Les ressources sélectionnées ont une réponse2xx sans erreur réseau fournie. Une erreur console sans classification qualifiée reste NT ; un échec réseau natif reste NC.
EN: Selected resources have2xx responses without supplied network error. Unclassified console errors remain NT; native network failure remains NC.
**Preuves / Evidence**
FR : Originaux exacts, plan et dates/contexte, empreintes, diagnostics et revue motivée liée au dossier entier. Types : render, http, intent.
EN: Exact originals, plan and dates/context, fingerprints, diagnostics and reasoned review bound to the entire dossier. Kinds: render, http, intent.
**Hypothèses / Assumptions**
FR : Provenance, inventaire, état navigateur, conditions et jugement fournis, non authentifiés ; deux lectures HTML statiques ne sont pas deux navigations. La confiance TLS dépend des racines fournies.
EN: Supplied unauthenticated provenance, inventory, browser state, conditions and judgment; two static HTML readings are not two navigations. TLS trust depends on supplied roots.
**Indéterminés / Inconclusive**
FR : HAR incomplet, corps absent, contexte/session non attribué, console absente ou erreur non qualifiée : NT.
EN: Incomplete HAR, omitted body, unattributed context/session, missing console or unqualified error: NT.
**Non-applicabilité / Non-applicability**
FR : Pas de NA atomique. Population vide ou domaine prétendu absent sans preuve reste NT dans ce profil.
EN: No atomic NA. Empty population or claimed absent domain without evidence remains NT in this profile.
**Limites / Limitations**
FR : Aucun audit réel déduit des cas synthétiques. Ni indexation, classement, conformité globale, certification d’accessibilité, sécurité exhaustive ou confiance universelle des navigateurs. La revue peut être erronée ; les captures peuvent omettre des états.
EN: No real audit inferred from synthetic cases. No indexing, ranking, global conformity, accessibility certification, exhaustive security or universal browser trust. Reviews may be wrong and captures may omit states.
## TS27-A01 — Routes et historique attribués / Attributed routes and history
Entrées / Inputs: `http, render, intent`.
**Périmètre / Scope**
FR : Population finie préalable de TS27, profil render-transport-v1 ; voir docs/render-transport-evidence.md.
EN: Prior finite TS27 population under render-transport-v1; see docs/render-transport-evidence.md.
**Procédure / Procedure**
FR : Vérifier quatre états fournis dans l’ordre direct, actualisation, retour, avance : session, séquence, date, URL, liaison à la réponse serveur et statut.
EN: Check four supplied states in direct, refresh, back, forward order: session, sequence, time, URL, server-response binding and status.
**Attendus / Expectations**
FR : Chaque état conserve l’URL de route et sa source200 prévue. Une URL ou un statut contraire qualifié échoue.
EN: Every state retains its route URL and intended200 source. A qualified conflicting URL or status fails.
**Preuves / Evidence**
FR : Originaux exacts, plan et dates/contexte, empreintes, diagnostics et revue motivée liée au dossier entier. Types : http, render, intent.
EN: Exact originals, plan and dates/context, fingerprints, diagnostics and reasoned review bound to the entire dossier. Kinds: http, render, intent.
**Hypothèses / Assumptions**
FR : Provenance, inventaire, état navigateur, conditions et jugement fournis, non authentifiés ; deux lectures HTML statiques ne sont pas deux navigations. La confiance TLS dépend des racines fournies.
EN: Supplied unauthenticated provenance, inventory, browser state, conditions and judgment; two static HTML readings are not two navigations. TLS trust depends on supplied roots.
**Indéterminés / Inconclusive**
FR : État, action, liaison, session ou ordre absent/ambigu ; surface frame/shadow non collectée : NT.
EN: Missing/ambiguous state, action, binding, session or order; uncollected frame/shadow surface: NT.
**Non-applicabilité / Non-applicability**
FR : Pas de NA atomique. Population vide ou domaine prétendu absent sans preuve reste NT dans ce profil.
EN: No atomic NA. Empty population or claimed absent domain without evidence remains NT in this profile.
**Limites / Limitations**
FR : Aucun audit réel déduit des cas synthétiques. Ni indexation, classement, conformité globale, certification d’accessibilité, sécurité exhaustive ou confiance universelle des navigateurs. La revue peut être erronée ; les captures peuvent omettre des états.
EN: No real audit inferred from synthetic cases. No indexing, ranking, global conformity, accessibility certification, exhaustive security or universal browser trust. Reviews may be wrong and captures may omit states.
## TS27-A02 — Contenu et canonical par état SPA / Content and canonical in each SPA state
Entrées / Inputs: `http, render, intent`.
**Périmètre / Scope**
FR : Population finie préalable de TS27, profil render-transport-v1 ; voir docs/render-transport-evidence.md.
EN: Prior finite TS27 population under render-transport-v1; see docs/render-transport-evidence.md.
**Procédure / Procedure**
FR : Dans les mêmes états qualifiés, comparer les identifiants littéraux, textes essentiels et destinations de liens au plan, puis une canonical explicite dans head. Exiger la revue de fonctionnement.
EN: Within the same qualified states compare literal IDs, essential text and link destinations with the plan, then one explicit head canonical. Require operation review.
**Attendus / Expectations**
FR : Les états conservent contenus et signaux propres. Absence sur surface complète, contenu divergent ou canonical contraire échoue.
EN: States retain their intended content and signals. Absence on a complete surface, differing content or conflicting canonical fails.
**Preuves / Evidence**
FR : Originaux exacts, plan et dates/contexte, empreintes, diagnostics et revue motivée liée au dossier entier. Types : http, render, intent.
EN: Exact originals, plan and dates/context, fingerprints, diagnostics and reasoned review bound to the entire dossier. Kinds: http, render, intent.
**Hypothèses / Assumptions**
FR : Provenance, inventaire, état navigateur, conditions et jugement fournis, non authentifiés ; deux lectures HTML statiques ne sont pas deux navigations. La confiance TLS dépend des racines fournies.
EN: Supplied unauthenticated provenance, inventory, browser state, conditions and judgment; two static HTML readings are not two navigations. TLS trust depends on supplied roots.
**Indéterminés / Inconclusive**
FR : État partiel, contexte masqué, ID ambigu, hypothèses HTML divergentes ou revue absente : NT.
EN: Partial state, hidden context, ambiguous ID, differing HTML hypotheses or absent review: NT.
**Non-applicabilité / Non-applicability**
FR : Pas de NA atomique. Population vide ou domaine prétendu absent sans preuve reste NT dans ce profil.
EN: No atomic NA. Empty population or claimed absent domain without evidence remains NT in this profile.
**Limites / Limitations**
FR : Aucun audit réel déduit des cas synthétiques. Ni indexation, classement, conformité globale, certification d’accessibilité, sécurité exhaustive ou confiance universelle des navigateurs. La revue peut être erronée ; les captures peuvent omettre des états.
EN: No real audit inferred from synthetic cases. No indexing, ranking, global conformity, accessibility certification, exhaustive security or universal browser trust. Reviews may be wrong and captures may omit states.
## TS28-A01 — Structure native et structure DOM fournie / Native source and supplied DOM structure
Entrées / Inputs: `html, render, intent`.
**Périmètre / Scope**
FR : Population finie préalable de TS28, profil render-transport-v1 ; voir docs/render-transport-evidence.md.
EN: Prior finite TS28 population under render-transport-v1; see docs/render-transport-evidence.md.
**Procédure / Procedure**
FR : Comparer dans la source et la sérialisation fournie : titre, langue, main déclaré, liste ordonnée des titres, liens et libellés. Le nombre de H1 est celui du plan.
EN: Compare source and supplied serialization: title, language, declared main landmark, ordered headings, links and labels. H1 count follows the plan.
**Attendus / Expectations**
FR : Les structures correspondent au plan préalable ; divergences structurelles qualifiées échouent.
EN: Structures agree with the prior plan; qualified structural conflicts fail.
**Preuves / Evidence**
FR : Originaux exacts, plan et dates/contexte, empreintes, diagnostics et revue motivée liée au dossier entier. Types : html, render, intent.
EN: Exact originals, plan and dates/context, fingerprints, diagnostics and reasoned review bound to the entire dossier. Kinds: html, render, intent.
**Hypothèses / Assumptions**
FR : Provenance, inventaire, état navigateur, conditions et jugement fournis, non authentifiés ; deux lectures HTML statiques ne sont pas deux navigations. La confiance TLS dépend des racines fournies.
EN: Supplied unauthenticated provenance, inventory, browser state, conditions and judgment; two static HTML readings are not two navigations. TLS trust depends on supplied roots.
**Indéterminés / Inconclusive**
FR : Source/DOM absent, langue non déclarée, arbre ambigu ou contexte visuel non qualifié : NT.
EN: Absent source/DOM, undeclared language, ambiguous tree or unqualified visual context: NT.
**Non-applicabilité / Non-applicability**
FR : Pas de NA atomique. Population vide ou domaine prétendu absent sans preuve reste NT dans ce profil.
EN: No atomic NA. Empty population or claimed absent domain without evidence remains NT in this profile.
**Limites / Limitations**
FR : Aucun audit réel déduit des cas synthétiques. Ni indexation, classement, conformité globale, certification d’accessibilité, sécurité exhaustive ou confiance universelle des navigateurs. La revue peut être erronée ; les captures peuvent omettre des états.
EN: No real audit inferred from synthetic cases. No indexing, ranking, global conformity, accessibility certification, exhaustive security or universal browser trust. Reviews may be wrong and captures may omit states.
## TS28-A02 — Revue du sens et de la navigation / Meaning and navigation review
Entrées / Inputs: `html, render, intent`.
**Périmètre / Scope**
FR : Population finie préalable de TS28, profil render-transport-v1 ; voir docs/render-transport-evidence.md.
EN: Prior finite TS28 population under render-transport-v1; see docs/render-transport-evidence.md.
**Procédure / Procedure**
FR : Reprendre les faits structurels attribués et exiger une revue distincte liée : adéquation du titre et de la langue, hiérarchie, sujet principal, navigation et libellés dans l’usage déclaré.
EN: Reuse attributed structural facts and require a distinct bound review of title/language adequacy, hierarchy, main subject, navigation and labels in declared use.
**Attendus / Expectations**
FR : Les faits sont qualifiés et le jugement motivé soutient le sens et l’usage ; contradiction étayée échoue.
EN: Facts are qualified and a reasoned judgment supports meaning and use; evidenced contradiction fails.
**Preuves / Evidence**
FR : Originaux exacts, plan et dates/contexte, empreintes, diagnostics et revue motivée liée au dossier entier. Types : html, render, intent.
EN: Exact originals, plan and dates/context, fingerprints, diagnostics and reasoned review bound to the entire dossier. Kinds: html, render, intent.
**Hypothèses / Assumptions**
FR : Provenance, inventaire, état navigateur, conditions et jugement fournis, non authentifiés ; deux lectures HTML statiques ne sont pas deux navigations. La confiance TLS dépend des racines fournies.
EN: Supplied unauthenticated provenance, inventory, browser state, conditions and judgment; two static HTML readings are not two navigations. TLS trust depends on supplied roots.
**Indéterminés / Inconclusive**
FR : Le parseur seul, une revue sans liaison ou des originaux insuffisants ne suffisent pas : NT.
EN: Parser output alone, an unbound review or insufficient originals are not enough: NT.
**Non-applicabilité / Non-applicability**
FR : Pas de NA atomique. Population vide ou domaine prétendu absent sans preuve reste NT dans ce profil.
EN: No atomic NA. Empty population or claimed absent domain without evidence remains NT in this profile.
**Limites / Limitations**
FR : Aucun audit réel déduit des cas synthétiques. Ni indexation, classement, conformité globale, certification d’accessibilité, sécurité exhaustive ou confiance universelle des navigateurs. La revue peut être erronée ; les captures peuvent omettre des états.
EN: No real audit inferred from synthetic cases. No indexing, ranking, global conformity, accessibility certification, exhaustive security or universal browser trust. Reviews may be wrong and captures may omit states.
## TS29-A01 — Scénario scripts bloqués et repli testé / Blocked-script scenario and tested fallback
Entrées / Inputs: `html, render, intent`.
**Périmètre / Scope**
FR : Population finie préalable de TS29, profil render-transport-v1 ; voir docs/render-transport-evidence.md.
EN: Prior finite TS29 population under render-transport-v1; see docs/render-transport-evidence.md.
**Procédure / Procedure**
FR : Lire la source et un état fourni explicitement scripts-blocked ; comparer chaque contenu/lien essentiel, ou le repli prédéclaré dans ce même état. Exiger la revue des actions et du fonctionnement.
EN: Read source and a supplied state explicitly marked scripts-blocked; compare every essential content/link or the prior fallback within that same state. Require action and operation review.
**Attendus / Expectations**
FR : Tous les attendus principaux ou tous ceux du repli testé sont étayés. Un échec principal et du repli qualifiés échoue ; aucune fonction n’est déduite du texte seul.
EN: All main expectations or all tested fallback expectations are supported. Qualified failures of both main and fallback fail; text alone does not establish function.
**Preuves / Evidence**
FR : Originaux exacts, plan et dates/contexte, empreintes, diagnostics et revue motivée liée au dossier entier. Types : html, render, intent.
EN: Exact originals, plan and dates/context, fingerprints, diagnostics and reasoned review bound to the entire dossier. Kinds: html, render, intent.
**Hypothèses / Assumptions**
FR : Provenance, inventaire, état navigateur, conditions et jugement fournis, non authentifiés ; deux lectures HTML statiques ne sont pas deux navigations. La confiance TLS dépend des racines fournies.
EN: Supplied unauthenticated provenance, inventory, browser state, conditions and judgment; two static HTML readings are not two navigations. TLS trust depends on supplied roots.
**Indéterminés / Inconclusive**
FR : Condition normale, capture partielle, repli seulement décrit, contexte masqué ou revue manquante : NT.
EN: Normal condition, partial capture, merely described fallback, hidden context or missing review: NT.
**Non-applicabilité / Non-applicability**
FR : Pas de NA atomique. Population vide ou domaine prétendu absent sans preuve reste NT dans ce profil.
EN: No atomic NA. Empty population or claimed absent domain without evidence remains NT in this profile.
**Limites / Limitations**
FR : Aucun audit réel déduit des cas synthétiques. Ni indexation, classement, conformité globale, certification d’accessibilité, sécurité exhaustive ou confiance universelle des navigateurs. La revue peut être erronée ; les captures peuvent omettre des états.
EN: No real audit inferred from synthetic cases. No indexing, ranking, global conformity, accessibility certification, exhaustive security or universal browser trust. Reviews may be wrong and captures may omit states.
## TS29-A02 — Scénario styles dégradés et repli testé / Degraded-style scenario and tested fallback
Entrées / Inputs: `html, render, intent`.
**Périmètre / Scope**
FR : Population finie préalable de TS29, profil render-transport-v1 ; voir docs/render-transport-evidence.md.
EN: Prior finite TS29 population under render-transport-v1; see docs/render-transport-evidence.md.
**Procédure / Procedure**
FR : Appliquer le même examen dans un état explicitement styles-degraded, avec observations d’actions et revue liée. Ne pas assimiler la désactivation des scripts à ce scénario.
EN: Apply the same examination in an explicitly styles-degraded state with action observations and a bound review. Script disabling does not qualify this scenario.
**Attendus / Expectations**
FR : Les fonctions essentielles ou le repli testé restent étayés dans ce scénario distinct.
EN: Essential functions or tested fallback remain supported in this distinct scenario.
**Preuves / Evidence**
FR : Originaux exacts, plan et dates/contexte, empreintes, diagnostics et revue motivée liée au dossier entier. Types : html, render, intent.
EN: Exact originals, plan and dates/context, fingerprints, diagnostics and reasoned review bound to the entire dossier. Kinds: html, render, intent.
**Hypothèses / Assumptions**
FR : Provenance, inventaire, état navigateur, conditions et jugement fournis, non authentifiés ; deux lectures HTML statiques ne sont pas deux navigations. La confiance TLS dépend des racines fournies.
EN: Supplied unauthenticated provenance, inventory, browser state, conditions and judgment; two static HTML readings are not two navigations. TLS trust depends on supplied roots.
**Indéterminés / Inconclusive**
FR : Absence de scénario styles dégradés, preuve de repli ou jugement attribué : NT.
EN: Missing degraded-style scenario, fallback evidence or attributed judgment: NT.
**Non-applicabilité / Non-applicability**
FR : Pas de NA atomique. Population vide ou domaine prétendu absent sans preuve reste NT dans ce profil.
EN: No atomic NA. Empty population or claimed absent domain without evidence remains NT in this profile.
**Limites / Limitations**
FR : Aucun audit réel déduit des cas synthétiques. Ni indexation, classement, conformité globale, certification d’accessibilité, sécurité exhaustive ou confiance universelle des navigateurs. La revue peut être erronée ; les captures peuvent omettre des états.
EN: No real audit inferred from synthetic cases. No indexing, ranking, global conformity, accessibility certification, exhaustive security or universal browser trust. Reviews may be wrong and captures may omit states.
## TS30-A01 — Métadonnées et doublons du corpus déclaré / Metadata and duplicates in the declared corpus
Entrées / Inputs: `html, content, intent`.
**Périmètre / Scope**
FR : Population finie préalable de TS30, profil render-transport-v1 ; voir docs/render-transport-evidence.md.
EN: Prior finite TS30 population under render-transport-v1; see docs/render-transport-evidence.md.
**Procédure / Procedure**
FR : Lire title, description, H1, og:title, og:description natifs par page. Comparer aux valeurs prévues puis les doublons entre pages sélectionnées ; exiger une décision préalable pour chaque doublon intentionnel.
EN: Read native title, description, H1, og:title, og:description for each page. Compare prior values and duplicates among selected pages; require a prior decision for each intentional duplicate.
**Attendus / Expectations**
FR : Valeurs et multiplicité concordent ; chaque doublon observé possède une décision motivée unique. Le corpus ne dépasse pas les pages fournies.
EN: Values and multiplicity agree; each observed duplicate has one reasoned decision. The corpus is limited to supplied pages.
**Preuves / Evidence**
FR : Originaux exacts, plan et dates/contexte, empreintes, diagnostics et revue motivée liée au dossier entier. Types : html, content, intent.
EN: Exact originals, plan and dates/context, fingerprints, diagnostics and reasoned review bound to the entire dossier. Kinds: html, content, intent.
**Hypothèses / Assumptions**
FR : Provenance, inventaire, état navigateur, conditions et jugement fournis, non authentifiés ; deux lectures HTML statiques ne sont pas deux navigations. La confiance TLS dépend des racines fournies.
EN: Supplied unauthenticated provenance, inventory, browser state, conditions and judgment; two static HTML readings are not two navigations. TLS trust depends on supplied roots.
**Indéterminés / Inconclusive**
FR : Source absente, politique de champ omise, parse ambigu ou revue manquante : NT. null autorise seulement un champ facultatif explicitement absent.
EN: Missing source, omitted field policy, ambiguous parse or missing review: NT. null permits only an explicitly absent optional field.
**Non-applicabilité / Non-applicability**
FR : Pas de NA atomique. Population vide ou domaine prétendu absent sans preuve reste NT dans ce profil.
EN: No atomic NA. Empty population or claimed absent domain without evidence remains NT in this profile.
**Limites / Limitations**
FR : Aucun audit réel déduit des cas synthétiques. Ni indexation, classement, conformité globale, certification d’accessibilité, sécurité exhaustive ou confiance universelle des navigateurs. La revue peut être erronée ; les captures peuvent omettre des états.
EN: No real audit inferred from synthetic cases. No indexing, ranking, global conformity, accessibility certification, exhaustive security or universal browser trust. Reviews may be wrong and captures may omit states.
## TS30-A02 — Cohérence éditoriale et contenu principal / Editorial coherence and main content
Entrées / Inputs: `html, content, intent`.
**Périmètre / Scope**
FR : Population finie préalable de TS30, profil render-transport-v1 ; voir docs/render-transport-evidence.md.
EN: Prior finite TS30 population under render-transport-v1; see docs/render-transport-evidence.md.
**Procédure / Procedure**
FR : Rapprocher les métadonnées natives et le contenu principal identifié ; exiger une revue distincte de la promesse, du sens et de la visibilité pertinente.
EN: Reconcile native metadata and identified main content; require a distinct review of promise, meaning and relevant visibility.
**Attendus / Expectations**
FR : Les faits concordent avec le plan et la revue éditoriale liée les soutient ; une contradiction native ou humaine qualifiée échoue.
EN: Facts agree with the plan and the bound editorial review supports them; qualified native or human contradiction fails.
**Preuves / Evidence**
FR : Originaux exacts, plan et dates/contexte, empreintes, diagnostics et revue motivée liée au dossier entier. Types : html, content, intent.
EN: Exact originals, plan and dates/context, fingerprints, diagnostics and reasoned review bound to the entire dossier. Kinds: html, content, intent.
**Hypothèses / Assumptions**
FR : Provenance, inventaire, état navigateur, conditions et jugement fournis, non authentifiés ; deux lectures HTML statiques ne sont pas deux navigations. La confiance TLS dépend des racines fournies.
EN: Supplied unauthenticated provenance, inventory, browser state, conditions and judgment; two static HTML readings are not two navigations. TLS trust depends on supplied roots.
**Indéterminés / Inconclusive**
FR : Source/rendu nécessaire non qualifié, contenu masqué, sens sans revue ou jugement non lié : NT.
EN: Unqualified required source/rendering, hidden content, meaning without review or unbound judgment: NT.
**Non-applicabilité / Non-applicability**
FR : Pas de NA atomique. Population vide ou domaine prétendu absent sans preuve reste NT dans ce profil.
EN: No atomic NA. Empty population or claimed absent domain without evidence remains NT in this profile.
**Limites / Limitations**
FR : Aucun audit réel déduit des cas synthétiques. Ni indexation, classement, conformité globale, certification d’accessibilité, sécurité exhaustive ou confiance universelle des navigateurs. La revue peut être erronée ; les captures peuvent omettre des états.
EN: No real audit inferred from synthetic cases. No indexing, ranking, global conformity, accessibility certification, exhaustive security or universal browser trust. Reviews may be wrong and captures may omit states.
## TS37-A01 — Certificats, hôte, date et confiance fournie / Certificates, host, time and supplied trust
Entrées / Inputs: `tls, intent`.
**Périmètre / Scope**
FR : Population finie préalable de TS37, profil render-transport-v1 ; voir docs/render-transport-evidence.md.
EN: Prior finite TS37 population under render-transport-v1; see docs/render-transport-evidence.md.
**Procédure / Procedure**
FR : Relire les PEM publics fournis avec OpenSSL3 hors réseau : chaîne, usage serveur, hôte DNS, heure fournie et racines explicitement fournies. Désactiver magasins implicites ; conserver version et diagnostic.
EN: Recheck supplied public PEMs with offline OpenSSL3: chain, server purpose, DNS host, supplied time and explicit supplied roots. Disable implicit stores; retain version and diagnostic.
**Attendus / Expectations**
FR : La vérification du profil réussit sous les racines fournies. Une erreur X509 prise en charge, dont expiration ou mauvais hôte, échoue.
EN: Profile verification succeeds under supplied roots. A supported X509 error, including expiry or wrong host, fails.
**Preuves / Evidence**
FR : Originaux exacts, plan et dates/contexte, empreintes, diagnostics et revue motivée liée au dossier entier. Types : tls, intent.
EN: Exact originals, plan and dates/context, fingerprints, diagnostics and reasoned review bound to the entire dossier. Kinds: tls, intent.
**Hypothèses / Assumptions**
FR : Provenance, inventaire, état navigateur, conditions et jugement fournis, non authentifiés ; deux lectures HTML statiques ne sont pas deux navigations. La confiance TLS dépend des racines fournies.
EN: Supplied unauthenticated provenance, inventory, browser state, conditions and judgment; two static HTML readings are not two navigations. TLS trust depends on supplied roots.
**Indéterminés / Inconclusive**
FR : OpenSSL3 absent, PEM inutilisable, capture mal attribuée, racines absentes ou code d’erreur non qualifié : NT.
EN: Missing OpenSSL3, unusable PEM, misattributed capture, absent roots or unqualified error code: NT.
**Non-applicabilité / Non-applicability**
FR : Pas de NA atomique. Population vide ou domaine prétendu absent sans preuve reste NT dans ce profil.
EN: No atomic NA. Empty population or claimed absent domain without evidence remains NT in this profile.
**Limites / Limitations**
FR : Aucun audit réel déduit des cas synthétiques. Ni indexation, classement, conformité globale, certification d’accessibilité, sécurité exhaustive ou confiance universelle des navigateurs. La revue peut être erronée ; les captures peuvent omettre des états.
EN: No real audit inferred from synthetic cases. No indexing, ranking, global conformity, accessibility certification, exhaustive security or universal browser trust. Reviews may be wrong and captures may omit states.
## TS37-A02 — Redirections HTTPS et décision HSTS / HTTPS redirects and HSTS decision
Entrées / Inputs: `http, configuration, intent`.
**Périmètre / Scope**
FR : Population finie préalable de TS37, profil render-transport-v1 ; voir docs/render-transport-evidence.md.
EN: Prior finite TS37 population under render-transport-v1; see docs/render-transport-evidence.md.
**Procédure / Procedure**
FR : Suivre la chaîne HTTP fournie vers HTTPS sans rétrogradation, vérifier la réponse directe200, comparer configuration HSTS et en-tête au plan : activation, max-age, sous-domaines, portée, propriétaire, motif.
EN: Follow the supplied HTTP chain to HTTPS without downgrade, check direct200 response, compare HSTS configuration and header with planned enablement, max-age, subdomains, scope, owner and rationale.
**Attendus / Expectations**
FR : Chaînes et décision HSTS concordent ; HSTS peut être désactivé explicitement. Aucun preload imposé.
EN: Chains and HSTS decision agree; HSTS may be explicitly disabled. No preload requirement.
**Preuves / Evidence**
FR : Originaux exacts, plan et dates/contexte, empreintes, diagnostics et revue motivée liée au dossier entier. Types : http, configuration, intent.
EN: Exact originals, plan and dates/context, fingerprints, diagnostics and reasoned review bound to the entire dossier. Kinds: http, configuration, intent.
**Hypothèses / Assumptions**
FR : Provenance, inventaire, état navigateur, conditions et jugement fournis, non authentifiés ; deux lectures HTML statiques ne sont pas deux navigations. La confiance TLS dépend des racines fournies.
EN: Supplied unauthenticated provenance, inventory, browser state, conditions and judgment; two static HTML readings are not two navigations. TLS trust depends on supplied roots.
**Indéterminés / Inconclusive**
FR : Chaîne/configuration manquante, en-tête ambigu, portée ou décision absente : NT.
EN: Missing chain/configuration, ambiguous header, absent scope or decision: NT.
**Non-applicabilité / Non-applicability**
FR : Pas de NA atomique. Population vide ou domaine prétendu absent sans preuve reste NT dans ce profil.
EN: No atomic NA. Empty population or claimed absent domain without evidence remains NT in this profile.
**Limites / Limitations**
FR : Aucun audit réel déduit des cas synthétiques. Ni indexation, classement, conformité globale, certification d’accessibilité, sécurité exhaustive ou confiance universelle des navigateurs. La revue peut être erronée ; les captures peuvent omettre des états.
EN: No real audit inferred from synthetic cases. No indexing, ranking, global conformity, accessibility certification, exhaustive security or universal browser trust. Reviews may be wrong and captures may omit states.
## TS37-A03 — Sous-ressources et trafic mixte du périmètre / Embedded resources and mixed traffic in scope
Entrées / Inputs: `http, render, intent`.
**Périmètre / Scope**
FR : Population finie préalable de TS37, profil render-transport-v1 ; voir docs/render-transport-evidence.md.
EN: Prior finite TS37 population under render-transport-v1; see docs/render-transport-evidence.md.
**Procédure / Procedure**
FR : Relier HAR et console au document HTTPS ; examiner les requêtes observées et les URL intégrées de la source. Le profil strict exige HTTPS pour ces ressources, même si un navigateur peut les mettre à niveau.
EN: Bind HAR and console to the HTTPS document; inspect observed requests and source embedded URLs. The strict profile requires HTTPS for these resources even when a browser might upgrade them.
**Attendus / Expectations**
FR : Aucune URL HTTP observée sur ces surfaces ; revue de la couverture dynamique consignée. Un HTTP natif observé échoue malgré une autre lacune.
EN: No HTTP URL observed on these surfaces; dynamic-coverage review retained. An observed native HTTP URL fails despite another gap.
**Preuves / Evidence**
FR : Originaux exacts, plan et dates/contexte, empreintes, diagnostics et revue motivée liée au dossier entier. Types : http, render, intent.
EN: Exact originals, plan and dates/context, fingerprints, diagnostics and reasoned review bound to the entire dossier. Kinds: http, render, intent.
**Hypothèses / Assumptions**
FR : Provenance, inventaire, état navigateur, conditions et jugement fournis, non authentifiés ; deux lectures HTML statiques ne sont pas deux navigations. La confiance TLS dépend des racines fournies.
EN: Supplied unauthenticated provenance, inventory, browser state, conditions and judgment; two static HTML readings are not two navigations. TLS trust depends on supplied roots.
**Indéterminés / Inconclusive**
FR : HAR tronqué, corps absent, CSS/srcset non qualifiés, contexte incomplet ou revue absente : NT.
EN: Truncated HAR, missing body, unqualified CSS/srcset, incomplete context or absent review: NT.
**Non-applicabilité / Non-applicability**
FR : Pas de NA atomique. Population vide ou domaine prétendu absent sans preuve reste NT dans ce profil.
EN: No atomic NA. Empty population or claimed absent domain without evidence remains NT in this profile.
**Limites / Limitations**
FR : Aucun audit réel déduit des cas synthétiques. Ni indexation, classement, conformité globale, certification d’accessibilité, sécurité exhaustive ou confiance universelle des navigateurs. La revue peut être erronée ; les captures peuvent omettre des états.
EN: No real audit inferred from synthetic cases. No indexing, ranking, global conformity, accessibility certification, exhaustive security or universal browser trust. Reviews may be wrong and captures may omit states.
## Contrat des entrées / Input contract
FR : reprendre le [dossier v1](evidence-dossier-v1.md), avec `reader=render-transport-v1`,1–32 items préalables identifiés, originaux natifs datés et revues liées au dossier entier. Aucun champ `status=C` ou verdict externe n'est lu. Le dossier reste limité à8MiB, chaque original et HTML à1MiB ; listes usuelles1–32, HAR128 requêtes, console128 événements. Les arbres parse5/Node24 conservent les deux hypothèses statiques,20 000 nœuds/profondeur128 et au plus2MiB de texte projeté cumulé. Une ambiguïté ou un dépassement donne NT, sans tronquer.
EN: reuse the [v1 dossier](evidence-dossier-v1.md), with `reader=render-transport-v1`,1–32 identified prior items, dated native originals and whole-dossier-bound reviews. No `status=C` or external verdict field is read. Dossiers remain bounded at8MiB, each original and HTML at1MiB; ordinary lists1–32, HAR128 requests, console128 events. parse5/Node24 trees retain both static hypotheses,20,000 nodes/depth128 and at most2MiB aggregate projected text. Ambiguity or overflow yields NT without truncation.
| Contrôle / Control | Champs du plan / Plan fields | Originaux / Originals |
|---|---|---|
| TS26 | `id,page,resources[{url,type,robots_url,robots_profile}],har,console,page_ref,complete_capture,capture_reason` | HTTP page/resources/robots ; HAR et console / HAR and console. `type` script/style/img/font/connect/media. |
| TS27 | `id,page,states[4],content[{id,text,href}],canonical` | Quatre états browser-state-v1 liés à leurs documents HTTP / Four browser-state-v1 records bound to HTTP documents. |
| TS28 | `id,page,state,structure{title,lang,main_id,headings[{id,tag,text}],links[{id,text,href}]}` | Source HTTP et état DOM fourni / HTTP source and supplied DOM state. |
| TS29 | `id,page,script_state,style_state,essential[{id,text,href}],fallback` | Source et deux états distincts ; fallback=null ou `{reason,content:[...]}` dans le même état testé / Source and two distinct states; fallback=null or `{reason,content:[...]}` within the same tested state. |
| TS30 | `id,pages[{url,metadata,content}],duplicate_decisions` | Sources HTTP sélectionnées / Selected HTTP sources. Five metadata keys: title,description,h1,og:title,og:description. Decisions: `{field,urls,value,reason,decision:'intentional'}`. |
| TS37 | `id,host,page,http_variant,certificates,configuration,hsts,har,console,page_ref,complete_capture,capture_reason` | HTTP, certificats/racines publics, configuration, HAR, console / HTTP, public certificates/roots, configuration, HAR, console. |
FR : `browser-state-v1` est un original JSON fourni sous kind `render`, avec `page_url,source_document,source_http_sha256,html,browser{name,version},session,sequence,action,condition,captured_at,complete,shadow_roots,frames,steps,failures`. `source_document` désigne l'ID unique d'un document natif ; son tableau `http` est lié par le SHA256 JSON canonique du dossier. `steps` décrit les actions effectivement observées et leurs résultats, pas seulement un plan de test ; le réviseur doit juger leur suffisance pour le fonctionnement. `complete=true`, frames=shadow_roots=0 et failures=[] sont requis dans ce profil. Ils restent des déclarations fournies, jamais authentifiées. Les actions de route sont direct/refresh/history-back/history-forward avec séquences0–3 et même session ; conditions normal/scripts-blocked/styles-degraded. Une sérialisation documentaire ne prouve pas une exécution navigateur ni la visibilité CSS. Les contextes hidden/inert/aria-hidden/style/details/dialog/noscript et les ID dupliqués restent indéterminés pour le contenu sélectionné.
EN: `browser-state-v1` is supplied original JSON under kind `render`, with `page_url,source_document,source_http_sha256,html,browser{name,version},session,sequence,action,condition,captured_at,complete,shadow_roots,frames,steps,failures`. `source_document` identifies a unique native document; its `http` array is bound by the dossier's canonical JSON SHA256. `steps` describes actually observed actions and their results, not merely a test plan; the reviewer must judge their adequacy for operation. This profile requires `complete=true`, frames=shadow_roots=0 and failures=[]. These remain supplied unauthenticated declarations. Route actions are direct/refresh/history-back/history-forward with sequence0–3 in one session; conditions are normal/scripts-blocked/styles-degraded. Documentary serialization does not prove browser execution or computed CSS visibility. hidden/inert/aria-hidden/style/details/dialog/noscript contexts and duplicate IDs remain inconclusive for selected content.
FR : le HAR est conservé dans ses octets originaux, sans enveloppe de verdict, sous kind `render`. Sous-ensemble lu : `log.version=1.2`, creator/browser{name,version}, une page avec id/startedDateTime et1–128 entries avec pageref/startedDateTime/request{method,url}/response{status,content{text,encoding}}. GET seulement ; corps principal littéral UTF8 ou base64, identique à la réponse HTTP native et même statut. Les entrées absentes ou répétées pour une ressource critique sont NT. Les champs supplémentaires restent archivés sans devenir des preuves interprétées. `browser-console-v1` contient page_url, har_sha256 (octets originaux), complete et events[{level,text,url,timestamp}]. Une console sans erreur ne prouve ni absence d'autres erreurs hors fenêtre ni rendu réussi ; la revue qualifie la couverture. Une erreur non classifiée donne NT ; ce lecteur ne fabrique aucune classification humaine.
EN: HAR original bytes are retained without a verdict wrapper under kind `render`. Read subset: `log.version=1.2`, creator/browser{name,version}, one page with id/startedDateTime and1–128 entries with pageref/startedDateTime/request{method,url}/response{status,content{text,encoding}}. GET only; literal UTF8 or base64 main body must equal native HTTP body with the same status. Missing/repeated critical-resource entries are NT. Additional fields remain archived without becoming interpreted evidence. `browser-console-v1` contains page_url, har_sha256 (original bytes), complete and events[{level,text,url,timestamp}]. An error-free console proves neither absence of other errors outside its window nor successful rendering; review qualifies coverage. Unclassified errors yield NT; this reader never manufactures a human classification.
FR : CSP est limité aux ressources de documents HTTPS : expressions none/self/*, schémas http:/https: (http: autorise aussi l'évolution vers https:) et origins HTTPS explicites sans chemin. Les directives de récupération sélectionnées suivent script-src-elem/style-src-elem, puis script-src/style-src, puis default-src ; plusieurs politiques s'intersectent. Une extension, un nonce/hash, strict-dynamic, une expression de chemin ou CSP meta nécessite une autre méthode et reste NT. Ce profil n'évalue pas l'exécution inline, l'injection ou la sûreté générale de CSP.
EN: CSP is limited to resources of HTTPS documents: none/self/* expressions, http:/https: schemes (http: also allows upgrading to https:) and explicit HTTPS origins without paths. Selected fetch directives follow script-src-elem/style-src-elem, then script-src/style-src, then default-src; multiple policies intersect. Extensions, nonce/hash, strict-dynamic, path expressions or meta CSP require another method and remain NT. This profile does not assess inline execution, injection or overall CSP security.
FR : `tls-certificates-v1` contient host,captured_at,leaf_pem,intermediates_pem (0–8),trust_store (ID original kind tls),trust_scope. Clés privées interdites. OpenSSL3 est lancé sans shell, sans option de récupération, avec magasin fourni seul, profondeur8, niveau d'authentification2, usage sslserver, hôte DNS et heure fournie. Les codes X509 explicitement reconnus sont2,7,9,10,18,19,20,21,23,24,25,26,27,28,30,32,34,62,66,67,68 ; autre sortie/erreur technique : NT. Ni révocation OCSP/CRL, politique d'entreprise, confiance publique, Certificate Transparency, configuration du serveur ou négociation TLS réelle ne sont établies. TSEP_OPENSSL peut désigner un exécutable local OpenSSL3.
EN: `tls-certificates-v1` contains host,captured_at,leaf_pem,intermediates_pem (0–8),trust_store (original kind tls ID),trust_scope. Private keys are forbidden. OpenSSL3 runs without a shell or fetching option, with supplied trust alone, depth8, authentication level2, sslserver purpose, DNS host and supplied time. Explicitly recognized X509 codes are2,7,9,10,18,19,20,21,23,24,25,26,27,28,30,32,34,62,66,67,68; other output/technical error: NT. OCSP/CRL revocation, enterprise policy, public trust, Certificate Transparency, server configuration and actual TLS negotiation are not established. TSEP_OPENSSL may select a local OpenSSL3 executable.
FR : `transport-policy-v1` contient host et hsts{enabled,max_age,include_subdomains,scope,reason,owner}, identique au plan. max_age est entier0–2³¹−1 ; un seul en-tête, directives max-age/includeSubDomains/preload reconnues, pas de preload requis ni inféré. Le profil contenu mixte strict examine URL observées HAR et src, poster, data, liens stylesheet/preload/modulepreload/icon de la source. CSS, srcset, frames/shadow, schémas spéciaux et surfaces dynamiques absentes sont NT. Les ressources HTTP sont NC pour ce profil explicite même si un navigateur les bloque ou les met à niveau : ce n'est pas une simulation universelle du navigateur.
EN: `transport-policy-v1` contains host and hsts{enabled,max_age,include_subdomains,scope,reason,owner}, identical to the plan. max_age is integer0–2³¹−1; one header, recognized max-age/includeSubDomains/preload directives, no required or inferred preload. The strict mixed-content profile examines observed HAR URLs and source src, poster, data, stylesheet/preload/modulepreload/icon links. CSS, srcset, frames/shadow, special schemes and absent dynamic surfaces are NT. HTTP resources are NC under this explicit profile even if a browser blocks or upgrades them: this is not universal browser simulation.
FR : une contradiction native indépendante demeure NC malgré une revue absente. Une contradiction humaine sur originaux insuffisants demeure NT. C exige tous les items et toutes les règles du contrôle, preuves et revue incluses ; un seul sondage ne qualifie jamais le site entier. Les fixtures, certificats et revues synthétiques ne peuvent être requalifiés en preuves publiques réelles. Voir [migration](migration-0.3.0-draft.4.md) et [références datées](source-captures/render-transport-2026-10-18.md).
EN: an independent native contradiction remains NC despite an absent review. Human contradiction with insufficient originals remains NT. C requires every item and every control rule, including evidence and review; one probe never qualifies an entire site. Synthetic fixtures, certificates and reviews cannot be relabelled as real public evidence. See [migration](migration-0.3.0-draft.4.md) and [dated references](source-captures/render-transport-2026-10-18.md).