Relevé dans le code le 2026-09-16. Même cause pour les quatre : XR-2 a réutilisé AppConfigurationLinkScreen tel quel, et cet écran sert quatre canaux qui n'ont pas les mêmes réglages. Le sélecteur bento ne pilote rien en VR (les spans sont portés par le lien de configuration, pas par les sections), la notification annonce « application mobile », la popup d'édition d'un casque est celle du kiosk avec la moitié des champs morte, et un bento VR suppose des spans par section jusque dans Unity. Plan dans v2/vr-menu-bento-plan.md, carte kanban 340. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
3.6 KiB
title, area, horizon, tags, flag, src
| title | area | horizon | tags | flag | src |
|---|---|---|---|---|---|
| Le menu VR n'est pas ce que le manager laisse configurer | doc | v2 | XR, manager-app, manager-service | warn | V2 · 4 écarts entre l'onglet VR et le casque | v2/vr-menu-bento-plan.md · relevé dans le code le 2026-09-16 |
L'onglet Main / VR réutilise AppConfigurationLinkScreen, l'écran de configuration partagé avec le mobile, le web et le kiosk (choix assumé de XR-2 : « zéro code neuf »). Il en hérite quatre comportements qui ne correspondent à rien en VR, relevés dans le code le 2026-09-16.
🔴 Le sélecteur de forme bento ne pilote rien dans le casque. Les spans sont portés par le lien de configuration (AppConfigurationLink.cs:35, commentaire d'origine : « Specific Mobile & Web ») et ne servent qu'à l'écran « choisis ta configuration » du mobile et du web. Or un casque est appairé à une seule configuration : cet écran n'existe pas en VR. Le menu affiche les sections racines, toutes à la même taille — grep -r "Span" Assets/Scripts ne rend rien, ConfigurationExport n'a aucun champ span.
➡️ Décision : le bento VR doit porter sur les sections, pas sur les configurations. Sans ça les boutons resteront décoratifs quoi qu'on fasse. Ça demande GridColSpan/GridRowSpan sur Section (entité, DTO, migration, client API édité à la main) — l'export les transporte ensuite gratuitement — puis un placement dense par spans côté Unity. L'arc est conservé : ce n'est pas un défaut de rendu, un mur plat se regarde de biais sur ses bords. La grille est calculée en cellules, puis chaque cellule est mappée sur un angle et une hauteur. Cible 6 colonnes × 2 rangées — le confort visuel en VR c'est ±60°, ce qui donne naturellement le format paysage proche du rendu web.
🟠 La notification annonce la mauvaise app. Modifier un contenu VR affiche « application mobile mise à jour ». Le paramètre existe déjà (appUpdatedLabel, app_configuration_link_screen.dart:144) et n'est simplement pas passé par vr_screen.dart. Une clé i18n et quatre lignes — ~15 minutes.
🟠 La popup d'édition d'un casque est celle du kiosk. Largeur figée à 580, une colonne scrollée, et deux boutons dont les libellés « Annuler »/« Changer » sont en dur. Mais le vrai problème n'est pas la mise en page : la moitié des champs est morte en VR — couleur principale, couleur de fond, loader, pourcentage d'arrondis, place des sections, fond d'image, heure, date. grep -r sur Assets/Scripts : zéro occurrence de chacun. Un casque n'a ni écran de chargement 2D ni horloge d'accueil. À remplacer par une popup VR dédiée, paysage deux colonnes.
⚠️ Ce que ce chantier dit du reste : les quatre écarts ont la même cause — un écran partagé par quatre canaux qui n'ont pas les mêmes réglages. Le plan recommande d'en sortir pour la VR plutôt que d'y ajouter un quatrième cas particulier.
Ordre : la notification (indépendante, 15 min) → la popup (indépendante) → les spans backend + manager → le rendu Unity (rien de visible avant). Quatre mini-prompts de lancement sont en fin de plan.