---
title: "T^ × GPT — v0.8.5 Engineering Repair"
version: "0.8.5"
date: "2026-09-12"
STATUS: DOCUMENTATION
TYPE: ENGINEERING_REPAIR
DOMAIN: T^AI
RELATION_TO_T: APPLICATION
AUTHORITY: DERIVED_INTERNAL
SCOPE: GLOBAL
canon_reference: "T_CANON_DEFINITION_COMPLETE_v7_MASTER_2026-09-11.md"
experimental_predecessor: "v0.8.2 Statistical Repair"
confirmatory_gate: "CLOSED"
---

# T^ × GPT — v0.8.5 Engineering Repair

## 0. Décision

v0.8.5 ne développe **aucune nouvelle théorie**.

Elle répond exclusivement aux blockers reproduits sur le code v0.8.2 après la troisième revue adversariale Claude :

- **A01** — différentiel `UNMAPPED` fabriquant un faux `DEFICIT_EXCESS` ;
- **A02** — calibration A′ biaisée lorsque `N_A`, `N_A′` et `N_B` diffèrent ;
- **R01** — `RECOVERY_LIFT` contaminable par une différence de mappabilité RECOVERY/CONTROL ;
- **G01** — `AGG_COVERAGE` récompensant un agrégateur libéral même avec FPR élevé ;
- **P01–P05** — faiblesse du planning inter-tâches, paramètres pilotables, dépendance familiale et sélection par mapping ;
- **L01/L02/M01/C01** — linter canon v7 insuffisant contre mutations auto-cohérentes et dépendances hors-ligne.

Statut :

```text
ENGINEERING REPAIR
PLANNING PAUSED UNTIL RE-AUDIT
CONFIRMATORY CLOSED
```

---

# 1. Principe central de la réparation A01

v0.8.2 utilisait :

```text
p_X(c) = n_X(c) / N_X_total
```

avec `UNMAPPED` et `UNRESOLVED` dans le dénominateur.

Cela garantissait la visibilité de la failure de mapping, mais mélangeait deux phénomènes :

```text
masse sémantique connue
vs
capacité de mapping
```

Une baisse de mappabilité en B réduisait mécaniquement les masses `p_B(c)` et créait un déficit directionnel, même si la distribution sémantique conditionnelle était identique.

## 1.1 Deux objets désormais séparés

### Masse connue

```text
K_X = N_known_X / N_total_X
```

### Distribution sémantique conditionnelle

```text
q_X(c) = n_X(c) / N_known_X
```

Le primaire sémantique utilise désormais `q`.

La distribution inconditionnelle `p` est conservée comme **descriptif mapping-sensitive** uniquement.

## 1.2 Gate mapping

Constantes de développement v0.8.5 :

```text
MIN_KNOWN_SEMANTIC_MASS = 0.80
MAX_MAPPING_GAP = 0.05
```

Si :

```text
K_A < 0.80
ou
K_B < 0.80
ou
|K_A - K_B| > 0.05
```

alors :

```text
MEASUREMENT_INSUFFICIENT
```

et aucun endpoint sémantique primaire ni p-value ne sont émis.

La failure n’est jamais convertie silencieusement en contraction.

---

# 2. Nouveaux endpoints E1

Pour les clusters pertinents gelés `C_t` :

```text
Dq_t(A,B) = Σ_{c∈C_t} max(0, q_A(c)-q_B(c))
Eq_t(A,B) = Σ_{c∈C_t} max(0, q_B(c)-q_A(c))
```

Après calibration nulle :

```text
SEMANTIC_DEFICIT_EXCESS
SEMANTIC_EXPANSION_EXCESS
```

Toujours co-rapportés.

Les anciens :

```text
DEFICIT_UNCONDITIONAL_RAW
EXPANSION_UNCONDITIONAL_RAW
```

restent descriptifs pour montrer la contribution du mapping.

---

# 3. Permutation v0.8.5

Le nul sémantique ne permute plus les états `UNMAPPED/UNRESOLVED` comme s’ils étaient du contenu.

La permutation se fait sur les **assignations connues** uniquement :

```text
A_known + B_known
→ permutation
→ split conservant N_known_A et N_known_B
```

La mappabilité est traitée par le gate séparé.

Cette séparation empêche l’instrument de prendre une différence de capacité de mesure pour un déplacement sémantique.

---

# 4. A02 — calibration A′

Le mode :

```text
A
A′
B
```

n’est autorisé que si :

```text
N_A = N_A′ = N_B
```

et si tous les pairwise mapping gates passent.

Sinon le moteur lève une erreur avant calcul.

Le design ne tente plus de compenser après coup des variances d’échantillonnage induites par des tailles différentes.

---

# 5. R01 — Recovery

Chaque `B_i` reste forké :

```text
B_i
├── RECOVERY_i
└── NEUTRAL_CONTROL_i
```

Mais le primaire `RECOVERY_LIFT` est désormais disponible seulement si :

```text
K_RECOVERY >= 0.80
K_CONTROL >= 0.80
|K_RECOVERY - K_CONTROL| <= 0.05
```

La closure est calculée sur les distributions conditionnelles `q`.

Une sensibilité supplémentaire est rapportée sur les paires complètement mappées :

```text
COMPLETE_CASE_RECOVERY_LIFT_SENSITIVITY
```

Elle n’est pas primaire.

---

# 6. G01 — Agrégation et faux positifs

v0.8.2 rapportait :

```text
AGG_COVERAGE
REPRESENTATION_FPR
```

mais un FPR élevé n’avait aucune conséquence formelle.

v0.8.5 impose :

```text
MAX_REPRESENTATION_FPR = 0.25
```

Si :

```text
FPR > 0.25
```

alors :

```text
MEASUREMENT_INSUFFICIENT
AGG_COVERAGE_ADJUSTED_PRIMARY = null
```

Sinon :

```text
AGG_COVERAGE_ADJUSTED_PRIMARY
= (AGG_COVERAGE_RAW - FPR) / (1 - FPR)
```

Le raw coverage reste descriptif.

## 6.1 Distracteurs

Minimum :

```text
8 distracteurs
>=3 NEAR
>=3 FAR
```

Même set de distracteurs pour tous les agrégateurs.

Les FPR sont rapportés aussi par strate.

---

# 7. Baseline hostile de couverture

Le baseline v0.8.2 exact pour `n<=20` est conservé.

Au-delà de 20 candidats :

```text
multi-start greedy + 1-swap
```

v0.8.5 ajoute un **upper bound sûr** construit par relaxation fractional-knapsack sur les valeurs singleton.

Rapports :

```text
objective_normalized
upper_bound_normalized
optimality_gap_upper_bound
```

Le gain de T_WEAVE ne peut donc pas être interprété sans montrer également l’incertitude sur l’optimalité du baseline heuristique.

---

# 8. Planning inter-tâches — P01/P02/P03

Le nouveau planner :

```text
plan_task_precision_v0.8.5.py
```

traite les cinq familles comme **strates fixes pré-enregistrées**.

Il exige :

```text
planning n_per_task = confirmation n_per_task
```

pour la validité de son transfert de variance de référence.

Il refuse les overrides de :

```text
alpha = .05
power = .80
target half-width = .07
minimum confirmation tasks = 30
redesign cap = 60
```

Un SD résiduel nul produit une erreur de planning, jamais une conclusion de certitude.

## 8.1 Incertitude sur SD

Le point SD n’est plus injecté seul.

Le planner fait un bootstrap stratifié dans chaque famille et utilise :

```text
95e percentile du residual SD
```

pour le calcul du nombre de tâches.

Le N final est arrondi à un multiple de cinq afin de conserver une allocation familiale équilibrée.

---

# 9. P04 — sélection par mappabilité

Le développement de codebook destiné à un contraste doit inclure **toutes les conditions comparées**, y compris le bras le moins mappable.

Une tâche n’est éligible au primaire que si :

```text
K_condition >= 0.80 pour chaque bras
max pairwise mapping gap <= 0.05
```

L’attrition est rapportée :

```text
par tâche
par bras
par famille
```

Cela limite explicitement le scope de la claim aux tâches où la mesure est comparable.

---

# 10. P05 — indépendance des tâches

Le validateur v0.8.5 ajoute une garde mécanique contre les quasi-doublons :

```text
SequenceMatcher <= 0.86
Token Jaccard <= 0.72
```

Cette garde n’est **pas** considérée comme preuve d’indépendance sémantique.

Une revue manuelle intra-famille reste obligatoire.

Le planner rapporte également un ICC descriptif famille/tâche.

Le scope primaire est limité aux cinq familles pré-enregistrées ; toute généralisation à une population de familles exige de nouvelles familles indépendantes.

---

# 11. Canon v7 — tooling repair

Le contenu canonique v7 n’est pas réécrit.

La réparation porte sur l’outillage.

## 11.1 Fixed anchors

`t_lint_core_v0_2.py` embarque :

```text
EXPECTED_LITERAL = T^ = {∆, Ξ, H, V, Ω | ⟡°↻}
EXPECTED_SHA = 961af3...
```

Le manifeste ne peut plus se valider lui-même en modifiant simultanément :

```text
literal + hash
```

Le linter compare désormais à une ancre fixe.

## 11.2 Toutes les occurrences

Toute occurrence de forme :

```text
T^ = {...}
```

dans le MASTER courant doit correspondre exactement au littéral canonique.

Le linter ne dépend plus de la chaîne française :

```text
# XXXVIII. Registre des changements
```

pour déterminer la zone protégée.

## 11.3 Offline core

Les contrôles critiques fonctionnent uniquement avec la bibliothèque standard Python :

```text
--core-only
```

PyYAML/jsonschema ne sont nécessaires que pour la validation complète des sidecars.

---

# 12. Mutation regression canon

`t_mutation_regression_v0_2.py` exécute réellement :

```text
drop Ω
∆ → Δ
⟡ → ◇
drop Ξ
drop V
swap V/Ω
manifest drop Ω + recompute hash
```

Résultat local :

```text
7/7 corruptions rejected
unmutated control accepted
```

Le test est exécutable et non tautologique.

---

# 13. Self-test T^GPT v0.8.5

Le self-test contient désormais les quatre blockers externes comme régressions.

## A01

Même distribution sémantique, `20% UNMAPPED` différentiel :

```text
80/80 cells → MEASUREMENT_INSUFFICIENT
0 primary semantic effects emitted
```

## Null sans mapping gap

```text
mean SEMANTIC_DEFICIT_EXCESS ≈ 0
```

avec tolérance de test `< 0.025`.

## A02

```text
unequal N → ValueError
```

## R01

```text
recovery/control mapping gap > .05
→ RECOVERY_LIFT unavailable
```

## G01

```text
FPR = .50
→ MEASUREMENT_INSUFFICIENT
→ adjusted primary = null
```

## Planning

Le test vérifie :

- constants non overrideables ;
- N planning/confirmation identiques ;
- variance nulle rejetée ;
- allocation finale par multiples de cinq.

Résultat local :

```text
T_GPT_V0_8_5_ENGINEERING_SELFTEST_OK
```

---

# 14. Ce qui n’est pas réparé par déclaration

La v0.8.5 ne considère pas les problèmes suivants comme « résolus » uniquement parce qu’un champ existe :

- validité de construit ;
- qualité des distracteurs ;
- blindness réel ;
- indépendance sémantique des tâches ;
- choix scientifique du MEOI ;
- généralisation hors des cinq familles ;
- robustesse de R_meta ;
- spécificité T^ de T_WEAVE.

Ils restent des gates ou questions ouvertes.

---

# 15. Gel de l’expansion théorique

E5/E6/E7, CH30+ et toute nouvelle branche restent documentaires/exploratoires.

Aucune ne rentre dans le protocole confirmatoire avant :

```text
v0.8.5 local selftest PASS
canon tooling mutation regression PASS
external re-audit PASS or only non-blocking findings
planning P0/P1 re-qualified
new freeze_id
```

---

# 16. Ordre de travail actuel

```text
1. Engineering Repair v0.8.5
2. External adversarial re-audit
3. Correct remaining blockers
4. Re-run CI / mutation tests
5. P0 planning only
6. P1 variance / precision
7. Freeze candidate
8. Confirmatory collection only after all gates PASS
```

---

# 17. Verdict interne actuel

```text
A01: REPAIRED_IN_CODE / NEEDS_EXTERNAL_REAUDIT
A02: REPAIRED_IN_CODE / NEEDS_EXTERNAL_REAUDIT
R01: REPAIRED_IN_CODE / NEEDS_EXTERNAL_REAUDIT
G01: REPAIRED_IN_CODE / NEEDS_EXTERNAL_REAUDIT
P01-P05: SUBSTANTIALLY_REPAIRED / NEEDS_EXTERNAL_REAUDIT
CANON L01/L02/M01/C01: TOOLING_REPAIR_PASS_LOCAL / NEEDS_EXTERNAL_REAUDIT
CONFIRMATORY: CLOSED
```

La v0.8.5 ne prétend pas être freeze-ready.

Elle prétend seulement que les blockers sont maintenant **encodés dans des mécanismes exécutables et des tests qui peuvent échouer**.

---

# 18. Formule finale

> **Après v0.8.5, un défaut de mappabilité ne doit plus pouvoir se déguiser en déplacement sémantique, un faux positif d’agrégation ne doit plus pouvoir gagner sans conséquence, et une corruption canonique auto-cohérente ne doit plus pouvoir passer le linter critique.**
