# Nettoyage rétroactif UI Devtools

> Archive historique conservée côté `TTM_API`.
>
> Source de vérité active : `C:\Users\VT\PhpstormProjects\ttm-dev-tools\docs\DEV_TOOLS_DEPLOYMENT_AUDIT.md` et `C:\Users\VT\PhpstormProjects\ttm-dev-tools\docs\README_DEV_TOOLS_UI.md`.
>
> Ce document reflète un nettoyage UI antérieur à l’extraction du `dev-tools` vers `ttm-dev-tools`. À utiliser seulement comme contexte d’archive.

_Date : 2026-04-06_

## 1. Fichiers relus

Liste exacte relue dans le cadre du contrôle rétroactif ciblé :

- `src/modules/devTools/dev-tools.page.parts.ts`
- `shared/dev-tools-ui/dev-tools-shared.js`
- `shared/dev-tools-ui/dev-tools-realtime.js`
- `shared/dev-tools-ui/dev-tools-view-model.js`
- `shared/dev-tools-ui/dev-tools-layout.js`
- `shared/dev-tools-ui/dev-tools-renderers.js`
- `shared/dev-tools-ui/dev-tools-overview-page.js`
- `shared/dev-tools-ui/dev-tools.css`

---

## 2. Éléments inutiles déjà présents

### `src/modules/devTools/dev-tools.page.parts.ts`

#### Devenu inutile

- `deployGuideRoot`

#### Pourquoi

- Le socle transverse affiche déjà un pipeline global dans `promotionPipelineRoot`.
- `showGuide` est à `false` dans toutes les `pageConfigs` actuelles.
- Le root existe encore dans le shell, mais il n’a plus de rôle produit réel.

#### Suppression

- **Sûr à supprimer maintenant**, mais **uniquement** en même temps que :
  - `app.renderDeployGuide()`
  - l’appel à `app.renderDeployGuide()` dans `dev-tools-renderers.js`
  - le toggle `deployGuideRoot` dans `configurePageChrome()`
  - le CSS `#deployGuideRoot` / `.guide-*`

---

### `shared/dev-tools-ui/dev-tools-shared.js`

#### Devenu inutile

1. `uiSync.initialOverviewLoaded`
2. `showGuide` dans les `pageConfigs`

#### Pourquoi

1. `uiSync.initialOverviewLoaded`
   - est bien initialisé et mis à jour,
   - mais aucune lecture réelle n’existe dans les fichiers relus.
   - La vraie source utilisée aujourd’hui pour l’état initial reste `app.state.initialSnapshotReceived`.

2. `showGuide`
   - reste présent dans toutes les configs,
   - mais il ne pilote plus une fonctionnalité utile si le guide local `Deploy` est supprimé.

#### Suppression

- `uiSync.initialOverviewLoaded` → **sûr à supprimer maintenant** avec son wiring dans `dev-tools-realtime.js`.
- `showGuide` → **sûr à supprimer maintenant**, mais seulement dans le même patch que la suppression complète du guide local `Deploy`.

#### À conserver

- `getCurrentDeployStepId()`
- `hasSuccessfulTask()`
- `canRunDeployStep()`

Ces helpers ne sont pas morts : ils servent encore au topbar et au gating du flux `Deploy`.

---

### `shared/dev-tools-ui/dev-tools-realtime.js`

#### Devenu inutile

- toutes les écritures de `initialOverviewLoaded: true` dans `updateOverviewSyncState(...)`

#### Pourquoi

- ce champ n’est jamais lu ensuite.
- `app.state.initialSnapshotReceived` reste la source réellement exploitée par le rendu.

#### Suppression

- **Sûr à supprimer maintenant** en même temps que `uiSync.initialOverviewLoaded` dans `dev-tools-shared.js`.

#### À conserver

- `lastOverviewAt`
- `lastOverviewSource`
- `fallbackActive`

Ces trois champs sont bien consommés par le view-model transverse.

---

### `shared/dev-tools-ui/dev-tools-view-model.js`

#### Devenu inutile

1. `active` dans les objets produits par `buildPipelineStep()`
2. `className` dans `buildStatusBadgeViewModel()`
3. `detail` dans `buildStatusBadgeViewModel()`
4. les champs `lastSyncAt` et `source` dans `buildFreshnessViewModel()`
5. le champ `note` dans `buildRealtimeViewModel()`
6. les propriétés top-level `freshness`, `realtime` et `blocking` dans `getTransverseViewModel()`

#### Pourquoi

1. `active`
   - n’est jamais lu dans `dev-tools-layout.js`
   - n’est pas utilisé ailleurs dans les fichiers relus.

2. `className`
   - n’est consommé par aucun renderer transverse.
   - il n’existe pas non plus de CSS `.devtools-status ...` correspondant dans `dev-tools.css`.

3. `detail`
   - n’est lu nulle part dans les fichiers relus.

4. `lastSyncAt` et `source`
   - sont calculés,
   - mais ne sont jamais affichés ni consommés ensuite.

5. `note` sur le realtime
   - est calculé,
   - mais le bandeau transverse ne consomme que `label` et `tone`.

6. `freshness`, `realtime`, `blocking` top-level
   - sont stockés dans le VM global,
   - mais `dev-tools-layout.js` ne lit aujourd’hui que :
     - `globalBanner`
     - `pipeline`
     - `nextStep`

#### Suppression

- `active` → **sûr à supprimer maintenant**
- `className` → **sûr à supprimer maintenant**
- `detail` → **sûr à supprimer maintenant**
- `lastSyncAt` / `source` → **sûr à supprimer maintenant**
- `realtime.note` → **sûr à supprimer maintenant**
- `freshness` / `realtime` / `blocking` au niveau racine du transverse VM → **sûr à supprimer maintenant**

#### À conserver

- les helpers de dérivation de pipeline
- `buildGlobalBannerViewModel()`
- `buildPromotionPipelineViewModel()`
- `buildNextStepViewModel()`

Ils sont tous réellement utilisés.

---

### `shared/dev-tools-ui/dev-tools-layout.js`

#### Devenu inutile

- rien de structurellement mort à ce stade

#### Pourquoi

- le fichier est petit,
- chaque helper local est utilisé,
- aucun doublon interne ancien/nouveau n’est visible.

#### Point à noter

- les microcopies :
  - `Lecture transverse minimale du lot 1.`
  - `Affichage transverse minimal.`

ne sont pas du code mort, mais sont **déjà datées**.

#### Suppression

- **rien à supprimer maintenant**
- microcopie à revoir plus tard, sans urgence de cleanup technique

---

### `shared/dev-tools-ui/dev-tools-renderers.js`

#### Devenu inutile

- l’appel à `app.renderDeployGuide()`

#### Pourquoi

- il continue à être exécuté à chaque `renderOverview()`,
- alors que `showGuide` est à `false` partout,
- et que le pipeline transverse a remplacé ce rôle.

#### Suppression

- **sûr à supprimer maintenant**, en même temps que la suppression complète du guide local `Deploy`.

---

### `shared/dev-tools-ui/dev-tools-overview-page.js`

#### Devenu inutile

1. `app.renderDeployGuide()`
2. le toggle `deployGuideRoot` dans `configurePageChrome()`
3. `currentDeployStepId` dans `renderDeploySummary()`
4. `currentDeployStep` dans `renderDeploySummary()`

#### Pourquoi

1. `app.renderDeployGuide()`
   - décrit encore un ancien pipeline local de la page `Deploy`,
   - fait doublon avec le pipeline transverse,
   - reste câblé alors que la zone est cachée par config.

2. le toggle `deployGuideRoot`
   - ne pilote plus un bloc utile si le guide local disparaît.

3. `currentDeployStepId`
4. `currentDeployStep`
   - sont encore déclarés dans `renderDeploySummary()`,
   - mais ne sont plus lus après le refactor du primaire `Deploy`.

#### Suppression

- `renderDeployGuide()` → **sûr à supprimer maintenant**, avec tout le guide local
- toggle `deployGuideRoot` → **sûr à supprimer maintenant**, avec le root et le rendu associés
- `currentDeployStepId` / `currentDeployStep` → **sûr à supprimer maintenant**

#### À conserver

- `renderDeployTopbar()`
- `renderDeploySummary()`
- les blocs secondaires `Release ciblé`, `Profils`, `Runtime`

Ils sont encore utilisés et relèvent du patch métier page par page, pas d’un cleanup mort.

---

### `shared/dev-tools-ui/dev-tools.css`

#### Devenu inutile

#### Sûr à supprimer maintenant si le guide local `Deploy` est retiré

- `body[data-page="deploy"] #deployGuideRoot`
- `body[data-page="deploy"] #deployGuideRoot > .callout`
- `body[data-page="deploy"] .guide-grid`
- `body[data-page="deploy"] .guide-card`
- `body[data-page="deploy"] .guide-card .action-result`
- `body[data-page="deploy"] .guide-card .action-result-copy strong`
- `body[data-page="deploy"] .guide-card .action-result-copy span`
- `body[data-page="deploy"] .guide-card .action-result .status`
- `body[data-page="deploy"] .guide-card .task-output-box pre`

#### Pourquoi

- ce CSS ne sert plus qu’au guide local `Deploy`,
- guide qui est déjà remplacé fonctionnellement par `promotionPipelineRoot`.

#### Vérification sur le dernier patch `Deploy`

Les classes ajoutées récemment pour le refactor `Déploiement` restent **utilisées** :

- `.deploy-immediate-context`
- `.deploy-immediate-card`
- `.deploy-immediate-card-status`
- `.deploy-optional-card`
- `.deploy-result-block`
- `.deploy-cli-details`
- `.deploy-follow-up-panel`
- `.deploy-secondary-shell`

Conclusion locale : **pas de CSS mort introduit par le dernier patch `Deploy`**.

---

## 3. Doublons structurels éventuels

### 3.1 Doublon réel déjà présent

#### Ancien / nouveau coexistants

- **Ancien** : guide local `Deploy`
  - root `deployGuideRoot`
  - renderer `app.renderDeployGuide()`
  - CSS `.guide-*`
- **Nouveau** : pipeline transverse
  - root `promotionPipelineRoot`
  - view-model transverse
  - rendu via `dev-tools-layout.js`

#### Diagnostic

- c’est le **principal doublon structurel actuel**.
- il n’est plus vraiment visible parce que `showGuide` est déjà à `false`,
- mais il reste présent dans le code, le shell, le renderer et le CSS.

#### Décision

- **à supprimer maintenant**

---

### 3.2 Répétitions de contexte avec le socle transverse

#### Encore présentes

- `pageContextSummary` sur les pages métier continue à répéter une partie du contexte déjà visible dans `globalBannerRoot`.

#### Diagnostic

- oui, il y a répétition partielle de :
  - release
  - profil
  - cible
  - état
- mais ce n’est pas encore un doublon structurel mort partout.

#### Décision

- **ne pas supprimer maintenant en bloc**
- à traiter **page par page**, sinon risque de casser la lisibilité locale avant refactor complet

---

### 3.3 Doublon dans le VM transverse

#### Encore présent

- `getTransverseViewModel()` retourne à la fois :
  - `globalBanner`
  - `pipeline`
  - `nextStep`
  - **et aussi** `freshness`, `realtime`, `blocking`

#### Diagnostic

- ces trois derniers champs sont déjà ré-encapsulés dans `globalBanner` ou non consommés.
- c’est une duplication de surface du contrat UI.

#### Décision

- **sûr à simplifier maintenant**

---

## 4. CSS mort ou fragile

### CSS mort ou quasi mort

#### Mort dès que le guide local `Deploy` est supprimé

- tout le bloc CSS `#deployGuideRoot` / `.guide-*`

### CSS fragile

#### À surveiller mais pas à supprimer maintenant

- styles `Deploy` très spécifiques ajoutés récemment :
  - `.deploy-immediate-*`
  - `.deploy-cli-details`
  - `.deploy-secondary-shell`

Diagnostic :

- ils ne sont pas morts,
- mais ils augmentent la granularité CSS de la page `Deploy`.
- à ce stade, ils restent justifiés par le nouveau markup réellement rendu.

### CSS transverse

- les classes `.pipeline-step*` sont bien utilisées par `dev-tools-layout.js`
- aucun CSS mort manifeste détecté côté pipeline transverse

---

## 5. Nettoyage recommandé maintenant

Liste courte et tranchée des suppressions sûres à faire **tout de suite** avant d’attaquer la page DB :

1. **Supprimer entièrement l’ancien guide local `Deploy`**
   - `deployGuideRoot` dans `dev-tools.page.parts.ts`
   - toggle `deployGuideRoot` dans `configurePageChrome()`
   - `app.renderDeployGuide()` dans `dev-tools-overview-page.js`
   - appel `app.renderDeployGuide()` dans `dev-tools-renderers.js`
   - CSS `#deployGuideRoot` et `.guide-*`

2. **Supprimer `uiSync.initialOverviewLoaded`**
   - état dans `dev-tools-shared.js`
   - mises à jour associées dans `dev-tools-realtime.js`

3. **Nettoyer le VM transverse des champs non consommés**
   - `active` sur les steps pipeline
   - `className` sur les badges
   - `detail` sur les badges
   - `lastSyncAt` / `source` sur la fraîcheur
   - `note` sur le realtime
   - `freshness` / `realtime` / `blocking` au niveau racine de `getTransverseViewModel()`

4. **Supprimer les variables mortes dans `renderDeploySummary()`**
   - `currentDeployStepId`
   - `currentDeployStep`

---

## 6. Nettoyage à différer

### À ne pas supprimer tout de suite

#### `getCurrentDeployStepId()` / `hasSuccessfulTask()` / `canRunDeployStep()`

- encore utilisés pour :
  - le topbar `Deploy`
  - les permissions du flux principal `Deploy`

#### Les 4 pills des topbars métier

- oui, elles répètent partiellement le bandeau global,
- mais leur suppression doit se faire **page par page**, pas maintenant en masse.

#### Les classes CSS récentes du patch `Deploy`

- elles sont encore toutes utilisées par le markup actuel,
- donc **pas de suppression maintenant**.

#### Les microcopies “lot 1 / minimal” dans `dev-tools-layout.js`

- wording daté,
- mais pas un problème de cleanup structurel.
- à corriger plus tard, pas dans un patch de purge.

---

## 7. Conclusion exploitable

### État de la base actuelle

La base actuelle **ne dérive pas fortement**, mais elle a déjà un vrai reliquat de transition :

- l’ancien guide local `Deploy` existe encore dans le code,
- alors que le pipeline transverse l’a déjà remplacé dans l’architecture réelle.

Autour de ça, il y a aussi un petit stock de champs/variables non consommés dans le view-model transverse et le wiring temps réel.

### Décision recommandée

**Oui : il faut faire un patch de cleanup immédiat avant d’attaquer la page DB.**

### Ordre recommandé

1. supprimer complètement le guide local `Deploy`
2. supprimer les champs d’état transverse jamais lus
3. supprimer les champs VM jamais consommés
4. supprimer les variables mortes de `renderDeploySummary()`

### Verdict court

- **Base encore propre : oui, globalement**
- **Dérive commencée : oui, mais limitée et réversible maintenant**
- **Patch de cleanup immédiat recommandé : oui**
