OpérationsReste à faire

Reste à faire


title: Reste à faire description: La seule liste de ce qu’il reste à faire pour Orbit : actions du propriétaire, travail de l’app, décisions ouvertes.

Page unique. C’est la seule liste de ce qui reste à faire, pour le propriétaire comme pour l’app. Aucune autre page de cette documentation, et aucun fichier du dépôt applicatif (AGENTS.md, README, skills, commentaires), ne tient de liste « à faire », de statut ou de backlog : ils décrivent le comment et renvoient ici pour le quoi. Une tâche finie se retire d’ici (et part dans « Fait récemment ») dans la même PR que le travail.

État actuel en une ligne

Le code du lancement est sur main (plan Orbit unique, crédits Studio en montant libre, attribution DataFast, Stripe durci, back-office séparé) ; la production n’est pas encore prête : base non migrée, Stripe, DataFast, e-mail et back-office attendent les actions du propriétaire ci-dessous, et le quota GitHub Actions est épuisé.

Côté propriétaire

Dans l’ordre. Chaque action se fait dans un tableau de bord ; aucune valeur secrète ne se colle dans un fichier, une PR ou une conversation. Le détail pas à pas est dans le runbook cité.

1. GitHub Actions : quota épuisé

Runbook : Mettre la CI en pause.

  • Dans les deux dépôts (orbit.easyconnector.app et docs.easyconnector.app) : GitHub → Settings → Secrets and variables → Actions → onglet Variables → New repository variable CI_PAUSED = true. Les jobs gardés passent en « skipped » au lieu d’échouer.
  • Pendant la pause, la preuve d’une PR de l’app est locale : pnpm premerge (porte rapide) ou pnpm premerge --full (+ E2E et Remotion), avec un Postgres jetable dans DATABASE_URL ; coller le tableau imprimé dans la PR. Pour la documentation : node scripts/audit-docs.mjs.
  • Quand le quota revient (ou la limite de dépense est relevée) : supprimer la variable CI_PAUSED dans les deux dépôts, puis relancer un passage complet sur main.

2. Ménage des branches

  • docs.easyconnector.app → Branches : supprimer docs/help-center-academy-final, docs/help-center-academy-hub (jamais fusionnées, remplacées) et claude/docs-absorb-orbit-docs (fusionnée).
  • orbit.easyconnector.app → Branches : supprimer les branches claude/* déjà fusionnées (toutes celles d’avant cette page le sont : blueprint-skills, ci-pause-switch, cleanup-agents-md, docs-live-in-docs-repo, launch-p0, premerge-gate, security-next-16-3-8, stripe-flexible-billing, studio-credits-free-amount, trusting-keller-f2poab).
  • Dans les deux dépôts : Settings → General → Pull Requests → cocher Automatically delete head branches.

3. Base de production : migrer, puis rendre sa capacité au fondateur

Runbook : Base de données, sections 2 et « Sans GitHub Actions ».

  • Snapshot d’abord : Neon → projet orbit-easyconnector-app → branche de production → Backup & restore → Create snapshot avant-migrations-lancement.
  • Appliquer toutes les migrations en attente. Vraisemblablement celles d’après 20261002120000_brain_source_api : 20261002130000_billing, 20261002140000_single_orbit_plan, 20261002150000_member_locale, 20261002160000_workspace_acquisition, 20261002170000_studio_credit_lots (l’état réel de la base n’est pas lisible depuis la documentation : le vérifier dans l’éditeur SQL de Neon avec SELECT migration_name FROM _prisma_migrations ORDER BY started_at;). Chemin normal : GitHub → Actions → Deploy production database → Run workflow sur main. Tant que le quota Actions est épuisé, ce workflow ne peut pas tourner : appliquer à la main pnpm db:deploy avec l’URL directe (non poolée, sans -pooler dans l’hôte) de Neon, puis pnpm db:drift.
  • Rendre sa capacité au workspace du fondateur : la migration single_orbit_plan remet à 0 CU tout workspace sans abonnement. Relancer pnpm db:seed avec FOUNDER_EMAIL et FOUNDER_BRAIN_CAPACITY_CU (et, si voulu, FOUNDER_STUDIO_CREDITS_USD), toujours sur l’URL directe ; ou passer ce workspace en mode custom depuis le back-office avec la note « compte interne ».
  • Le jour de la première inscription réelle : packages/db/PHASE passe de pre-users à production (runbook, section 1), et activer la sauvegarde externe (section 4).

4. Vercel : variables du projet orbit-easyconnector-app

Runbook : Checklist de lancement, section 6 (table complète). Vercel → projet → Settings → Environment Variables ; une variable ne vaut que pour les nouveaux déploiements : redéployer après.

  • CRON_SECRET (Production et Preview) : sans lui, les trois crons répondent 401.
  • DATAFAST_WEBSITE_ID et DATAFAST_API_TOKEN (Production seulement), après l’étape 6.
  • ORBIT_STRIPE_SECRET_KEY (sk_test_ en Preview ; sk_live_ ou rk_live_ en Production au passage en live) et ORBIT_STRIPE_WEBHOOK_SECRET (le whsec_ de l’endpoint de chaque environnement), après l’étape 5.
  • ORBIT_STRIPE_TAX=1 seulement après avoir activé Stripe Tax (sinon Checkout échoue) ; vide en attendant.
  • RESEND_API_KEY : la clé propre à Orbit (étape 7), jamais celle d’un autre produit.
  • Supprimer toute variable STUDIO_* qui traînerait encore (STUDIO_PUBLIC_URL, STUDIO_RENDER_DISPATCH_TOKEN, STUDIO_SPEND_ALERT_USD, STUDIO_PROVIDERS) : l’app ne relit plus ces anciens noms, seuls ORBIT_* comptent.

5. Stripe (mode test, puis live)

Runbook : Checklist de lancement, section 3 ; architecture : Facturation Stripe.

  • Vérifier en mode test le catalogue d’Orbit : produit orbit, prix par lookup_key orbit_base_monthly (49 $), orbit_capacity_step_monthly (25 $), orbit_base_annual (468 $), orbit_capacity_step_annual (240 $).
  • Lancer node apps/web/scripts/stripe-catalog.mjs --dry-run puis sans --dry-run avec la clé test : il pose tax_behavior: exclusive, crée le produit orbit_studio_credits (crédits en montant libre, sans prix) et archive les anciens produits de packs (orbit_studio_starter, orbit_studio_pro). Archiver à la main orbit_brain_pro et orbit_brain_max s’ils existent encore.
  • Settings → Tax : activer Stripe Tax, adresse d’origine, inscriptions fiscales, code de taxe SaaS (logiciel en service, usage professionnel) par défaut ; puis ORBIT_STRIPE_TAX=1.
  • Developers → Webhooks → endpoint https://orbit.easyconnector.app/api/webhooks/stripe, description orbit-easyconnector-app, les dix événements de HANDLED_EVENTS (liste exacte dans la checklist, section 3) ; copier le whsec_ dans Vercel.
  • Settings → Customer portal : activer ; moyen de paiement, factures, résiliation, et changement de plan et d’intervalle (mensuel ↔ annuel) du produit Orbit.
  • Essai de bout en bout en Preview (carte 4242 4242 4242 4242) : activation depuis /brain, un pas de +60 CU, achat de crédits Studio, /billing, un remboursement et un litige de test.
  • Passage en live : stripe-catalog.mjs --live avec la clé live, endpoint live, clés live en Production, redéployer.

6. DataFast

Runbook : Checklist de lancement, section 2.

  • Créer le site orbit.easyconnector.app : soit reconnecter le connecteur DataFast avec la permission websites:write, soit le créer à la main dans le tableau de bord DataFast.
  • Connecter Stripe dans DataFast avec une clé restreinte en lecture seule du compte Stripe d’Orbit.
  • Créer les objectifs signup, checkout_started, subscription_started, credits_purchased (ce sont les seuls que le serveur émet).
  • Poser DATAFAST_WEBSITE_ID et DATAFAST_API_TOKEN (étape 4).

7. Resend (e-mail)

Runbook : Checklist de lancement, section 4.

  • Vérifier que l’apex easyconnector.app est « Verified » dans Resend (DNS chez OVH : SPF, DKIM, MX de retour, DMARC). L’expéditeur d’Orbit est Orbit <orbit@easyconnector.app>.
  • Créer la clé API propre à Orbit dans Resend (droit « Sending access », domaine easyconnector.app) et la poser directement dans Vercel sous RESEND_API_KEY (Production et Preview), ou connecter l’intégration Resend du Marketplace au projet si elle injecte une clé propre à Orbit. Ne jamais la coller dans une conversation.
  • Facultatif : un sous-domaine d’envoi propre à Orbit (voir « Décisions ouvertes »).

8. Back-office apps/admin

Runbook : Back-office, « Mise en place ».

  • Vercel → Add New… → Project : importer le dépôt une seconde fois, nom orbit-admin-easyconnector-app, Root Directory apps/admin.
  • Variables : DATABASE_URL seulement.
  • Deployment Protection → Vercel Authentication sur « All Deployments ».
  • Ensuite seulement ORBIT_ADMIN_PROTECTED=true, puis redéployer.
  • Pour chaque workspace qui doit en avoir : poser l’enveloppe mensuelle studioMonthlyCreditsUsd depuis /workspaces/[id] (elle n’est plus dérivée d’aucun abonnement ; 0 par défaut).

9. Après la mise en production

  • Un vrai test d’attribution : lien avec UTM → inscription → activation → paiement de test → visible et attribué dans DataFast.
  • Activer Vercel Web Analytics et Speed Insights sur le projet (déjà montés dans le code).
  • Un moniteur externe sur https://orbit.easyconnector.app/api/health (skill platform-ops).
  • Studio : un dispatch GitHub réel (ORBIT_RENDER_DISPATCH_TOKEN), une course réelle par moteur, les traces dans l’Observability de Vercel, le premier fetch:music --pin du paquet Remotion, la lecture du cas réel veo-probe (débloque G2-10, ci-dessous).
  • Fournir la source et la licence de chaque effet sonore voulu dans les rendus.
  • Relire la copie française de la landing.
  • Faire valider juridiquement les Conditions d’utilisation et la Politique de confidentialité (mentions « À compléter »).

10. Facultatif

  • blueprint-watch (dépôt de l’app) : variable BLUEPRINT_WATCH_ENABLED=true et secret BLUEPRINT_READ_TOKEN (lecture seule sur les deux dépôts de référence).
  • orbit-claims (dépôt de la documentation) : variable ORBIT_CLAIMS_ENABLED=true et secret ORBIT_READ_TOKEN (lecture seule sur le dépôt de l’app).
  • BotID Deep Analysis (Vercel → Firewall → Rules, offre Pro) une fois BotID codé (P1 ci-dessous).

Côté app

Le travail de code qui reste, par priorité. P0 : avant la bascule de production ; P1 : dans le mois qui suit le lancement ; P2 : quand le besoin se confirme. Les lettres renvoient au tableau d’écarts du Blueprint.

P0

  1. Porte de bascule : pnpm premerge --full vert sur main (lint, typecheck, tests, build, E2E, migrations, drift, audit legacy, Remotion), puis vérification de landing, Brain, Studio, auth, API/MCP en Preview, avant de pointer le trafic de production (AGENTS.md, « Cutover »).

P1

  1. SEO / AEO / GEO (l) : llms.txt, robots avec robots d’IA nommés, JSON-LD, images OG ; la politique de crawl attend la décision du propriétaire.
  2. Webhook Resend (k) : suppression sur rebond et plainte (Svix, idempotent).
  3. Onglets de contenu du back-office (n) : KPIs, changelog, roadmap, FAQ, retours, coupons (skill admin-structure).
  4. Page d’état / moniteur externe sur /api/health (m), et la checklist du tableau de bord Vercel.
  5. Suppression de compte et export des données (o).
  6. Archiver et compresser comme vraies opérations de Memory (état « archivé » hors des CU actifs, fusion de Memories) : aujourd’hui seuls modifier et supprimer libèrent des CU.
  7. Facturation B2B Custom : facture et encaissement des conditions négociées (aujourd’hui le mode custom règle capacité, quota et majoration, mais rien n’est facturé hors Stripe).
  8. Table de jalons (h) : UserMilestone écrite dans la transaction du fait métier, source de l’entonnoir exact (DataFast ne voit pas qui refuse les cookies) ; objectifs workspace_created, first_brain_write, first_generation.
  9. BotID sur les POST exposés (envoi d’OTP, gestes de génération, création de workspace).

P2

  1. Parité de la vue d’ensemble : les Spaces sont posés sur un polygone régulier, le prototype les place à la main.
  2. Parité des icônes par Memory avec le prototype.
  3. Produit avant v1 : Context Pack par intention sur plusieurs Spaces, restriction d’un client MCP/API à certains Spaces, connecteurs de sources en libre-service (Notion, Drive, Shopify, Figma), Context Engine complet et Tool Context Binding, write-back Studio → Memory Proposal (remplace l’écriture héritée de recordLearning).
  4. Studio : surface Cinéma membre et Product Film sur le geste payant ; Studio agentique (capability headless, create/status/asset/revise via MCP et REST) ; G2-10 (Veo en 720p et son, après la course réelle).
  5. Flux E2E non couverts : E2E-19 à E2E-26 et E2E-28 à E2E-30 (définitions : Roadmap, « Phase 5 »).
  6. Connecteurs C3 à C8 (Blob, Gateway, ElevenLabs, GitHub sans jeton collé ; runner sans secret ; surface fondateur ; Postiz ; lectures DataFast et GitHub ; rendus et vidéo sur Workflow).
  7. Interface : un seul Dialog et un seul DropdownMenu ; découpage de components/studio/{data.tsx,types.ts} en features/studio/*.
  8. Remake (R1 à R4) ; citations IA (q), phases de lancement et coupons (r), détection de code mort (s).
  9. Réconciliation Stripe : mémoriser le curseur entre deux passages (au-delà de quelques centaines de workspaces).

Décisions ouvertes

  1. Enveloppe Studio par défaut : aucune enveloppe mensuelle n’est liée à l’abonnement Brain aujourd’hui (0 USD à l’activation, posée à la main dans le back-office). En donner une par défaut, et laquelle ?
  2. Seuil d’alerte de dépense : ORBIT_SPEND_ALERT_USD et /costs lisent désormais des crédits (coût fournisseur × majoration), plus le coût fournisseur : le seuil est à revoir.
  3. Marge des crédits : sa lecture exclut le breakage (crédits expirés non dépensés), elle est donc prudente. La garder ainsi ?
  4. Domaine : passage à orbit.ai plus tard ; tout est centralisé dans apps/web/src/config/domains.ts (Changer de domaine).
  5. Reçus : ceux de Stripe, ceux d’Orbit, ou les deux (le client recevrait deux reçus).
  6. Remboursement total de bonne volonté : il retire aujourd’hui la capacité (ou le reste d’un lot de crédits). Le garder ?
  7. Expéditeur : rester sur l’apex easyconnector.app ou passer à un sous-domaine d’envoi propre à Orbit (réputation séparée de l’autre produit) ; les envois marketing iront de toute façon sur un sous-domaine séparé.
  8. Politique de crawl des robots d’IA (skill seo-aeo-geo).
  9. Quota de lectures : 3 000 lectures par 120 CU est un réglage de départ, à ajuster sur l’usage mesuré.
  10. Remake : texte des CGU sur les droits de la vidéo de référence (R4).

Fait récemment

  • Surfaces machine en anglais : les derniers messages d’erreur REST et MCP en français sont traduits (codes inchangés), tenus par api-errors-english.test.ts ; la FAQ in-app ne dit plus « au coût réel du provider » ; pnpm premerge --full lance le vrai pnpm e2e ; les fichiers que next build écrit dans apps/web ne sont plus suivis.
  • Crédits Studio en montant libre (app #21) : 10 à 5 000 $, 1:1, valables 365 jours, cumulables, consommés après l’enveloppe mensuelle ; majoration à la consommation (1,3× standard, 1,15× custom) ; plus aucun pack ; lots, don et majoration dans le back-office ; anciens noms STUDIO_* retirés.
  • Porte de fusion locale pnpm premerge (app #19) et interrupteur CI_PAUSED (app #14).
  • AGENTS.md nettoyé et plafonné à 200 lignes (app #20).
  • Documentation unique : toute la prose vit ici (docs #9, app #18).
  • Plan Orbit unique et quota de lectures MCP/REST ; attribution et durcissement Stripe du lancement ; abonnements en mode de facturation flexible (app #17).