La limite demandée existe déjà deux fois — le solde prépayé est le plafond, et
StudioPerUserDailyCap borne la journée d'un utilisateur. Ce qui manque est
l'alerte : aujourd'hui le premier signal reçu est une génération qui échoue en
InsufficientCredits, et l'expiration à 12 mois fait s'évaporer un solde sans
prévenir. Seuil configurable par instance, mail au franchissement et rappel
d'expiration à J-30.
Carte kanban 282.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Deux recadrages par rapport à la demande initiale : le déclencheur n'est pas un
POI (qui est un point sur un GLB) mais une Section, au même endroit que le
beacon ; et l'indirection code → section n'a aucun équivalent existant à
réutiliser — en v1 le tag porte la même URL que le QR, donc zéro entité, zéro
endpoint.
Le vrai coût est ailleurs : ni Universal Links ni App Links n'existent sur nos
domaines, et ce lot-là profite autant au QR, qu'un appareil photo natif n'ouvre
pas dans l'app aujourd'hui. Dépend du déploiement de visitapp-web pour le
fallback sans app installée.
Carte kanban 265.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
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>
Le plan de test gagne un § 0bis : le lot 0 a réécrit tout le chemin d'upload
(URL V4 signée puis POST /ingest) et rien n'a jamais été déposé depuis un
navigateur, alors que les § 1 à 5 en dépendent tous. Ajout aussi de l'ordre de
passage en quatre séances, de la façon de reporter un échec, et des résultats
déjà obtenus sur le § 0.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Carte 315 : mention IA du lot 6 absente en VR, audio narré et casting à porter, couture ScenePersona vers Persona, Parcours probablement vide sur le casque (à vérifier). Plan et STATUS à jour.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011VxSQeGQYUvPmSEoGdnidA
Résultats du calibrage (61 générations, coûts recoupés sur l'export fal),
trois corrections de prompt, unité 1 crédit = 0,015 $ vendue avec marge,
échantillons et figures d'archétypes embarqués ; planches contact dans
outputs/studio-calibrage-2026-09-15. STATUS, roadmap, cartes 280 et 310 à jour.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011VxSQeGQYUvPmSEoGdnidA
Plafond dur organisation retire : avec des credits prepayes, le solde est deja
le plafond. SubscriptionPlan.HasStudio / StudioCreditsGranted et
Instance.StudioProviderRegion ne sont pas crees tant que rien ne les lit. API
credits, schema et etapes du lot 1 alignes sur le code.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
studio-plan.md : section 8 executable pour les lots 0 a 4 (prerequis, etapes,
verifications, gate) et section 9 catalogue v0 (styles, preambule, gabarits,
calibrage). Decisions 14 a 21 : upload par URL signee et ingestion serveur,
MVP texte + image source sur objets et lieux, prix differes et Grant manuel,
une recharge prolonge tout le solde, plafonds d'upload par type, catalogue
calibre fin de lot 3, lignage en colonnes, contrat fournisseur multi-fichier.
Corrige les contradictions laissees par les revisions : Kind retire de
Persona, talking head, API credits, webhook fal.ai signe en ED25519 et non en
HMAC, enum ResourceType deja etendu. Les noms suivent le code du lot 0
(ResourceIngestionService, GetInfoAsync, ReadAllAsync).
immersif-frontiere-plan.md : decisions 1, 4 et 6 marquees reportees.
Kanban : cartes 280 et 300 a jour, carte 305 sur le watermark inactif depuis
l'upload direct.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Les deux plans se renvoyaient la balle exactement sur la zone a
construire : studio-plan mettait la 3D en lot 11 en disant "depend du
chantier VR", et vr-quest-unity-plan decrivait les POI sur GLB en
supposant un GLB qui arrive de quelque part. Nouveau document de
frontiere, plus les corrections qu'il impose au plan Studio.
v2/immersif-frontiere-plan.md (neuf)
- Trois couches separees : ressources immersives (360/GLB, se vendent
sans casque), consommation (SectionModel3D, ImmersiveBackground, app
Quest), et le Studio comme *source d'approvisionnement* de la couche 1
et non module parallele.
- Pas d'add-on casque : un seul add-on "Contenu immersif" a 70 EUR, plus
le hardware et l'onboarding one-shot. Reconfirme l'arbitrage du 31/08.
- Generation de scene : position revisee. Marble (World Labs) a une API
depuis janvier 2026, ~0,12 $ le monde draft, export GLB. Cadre retenu
= roomscale stationnaire ~3 m, pas d'environnement navigable : ~500k
splats de plafond sur Quest 3 standalone, et un cas mesure a 12 fps
sous Unity la ou une borne doit tenir 72.
- 11 decisions de retro-compat ordonnees par cout de retrofit. Les cinq
premieres touchent des lots ANTERIEURS a la 3D : pipeline d'ingestion
unique (l'upload est fait par le navigateur, donc un GLB uploade ne
traverse aucun traitement alors qu'un GLB genere si), normalisation
canonique des GLB, invalidation des POI, lignage en colonnes typees,
renommage des credits.
- Mecaniques de jeu immersives notees, rien de planifie : repondre
(SectionQuiz existe deja), trouver (marche aussi en web sur pano
pivotant, donc se vend sans casque), ordonner
(OrderedTranslationAndResource existe deja), avant/apres.
v2/studio-plan.md
- ImageCredits* -> StudioCredits* : une 3D coute 10 a 50 fois une image,
le nom aurait menti des le lot 11.
- Credits rechargeables a expiration 12 mois au lieu d'un quota mensuel.
Un musee genere 200 images en trois semaines pour une expo puis rien
pendant cinq mois ; un forfait mensuel se gaspille dix mois sur douze.
Le CreditLedger encaisse sans changement de structure.
- Le critere qui separe les deux monnaies, verifie dans le code :
consomme en temps reel par le visiteur (chat, vocal) contre produit
une fois par le client (images, 3D, video, TTS pre-genere). Le TTS
passe donc cote Studio. Au passage : reindex et insights ne debitent
rien alors qu'ils coutent.
- Lot 11 ne renvoie plus en boucle au plan VR.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Le pré-vol de quota et la suppression du blob sont livrés. Le contrôle
autoritaire à Create ne peut pas exister tel qu'il était écrit :
manager-app crée la ligne en annonçant sizeBytes puis téléverse, donc
il n'y a aucun blob à interroger à cet instant.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Ni Google ni Mapbox ne donnent un fond hors ligne gratuit, et Mapbox
se facture au nombre de tuiles, pas à la surface. Pour un musée de
plein air comme le Fourneau Saint-Michel, la réponse est son propre
plan dessiné : les repères se posent sur l'image, le plan est une
Resource, donc embarqué par le pipeline hors ligne existant.
Conception seule, rien n'est implémenté. Mapbox est passé fournisseur
par défaut le 04/09.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Décidé et inscrit : thèmes du lot J complets (job + table d'agrégats, donc le
§8.4 des CGU n'est pas à amender), meterZoneGPS sur mymuseum et visitapp-web,
D3/D4 sans attendre D0, rate limiting et Customer Portal confirmés V1, lunettes
Ray-Ban ramenées en V1, K9 (repasse visuelle de la borne, bento compris),
déclenchement proactif ouvert à tous, miroir de la conversation vocale.
Trois lignes du plan étaient périmées : le nettoyage de manager_api_new et la
sécurité du lot A sont faits depuis un moment, et un PUT ApplicationInstance
existe déjà.
Deux documents affirmaient un fallback Voice vers Mobile qui n'existe pas —
guide-ia-screen-plan.md et le commentaire d'AiController se confirmaient
mutuellement. Le code fait un FirstOrDefault sur le canal exact puis Forbid() :
envoyer AppType.Voice au chat sans ApplicationInstance de ce type rendrait 403
à chaque question. Corrigé côté doc ; le commentaire reste à corriger.
Le vocal n'est donc pas un canal mais un attribut : marqué dans
VisitEvent.Metadata, colonne JSON déjà existante, aucune migration.
AppTypeDistribution compte une entrée par session et tranche sur l'événement le
plus ancien — avec le miroir, une session est mixte, et un canal Voice aurait
mesuré « sessions démarrées en vocal », pas la part du vocal.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Import initial de la documentation : statut, roadmap, plans V1/V2,
specs verticales (creche, sport), audits securite, plan de test,
analyse concurrentielle et maquettes de design.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>