Recette
Sur de vrais téléphones

Vos parcours joués sur de vrais téléphones, vos bugs triés

Vous décrivez les parcours en langage libre et déposez l'APK. Recette les traduit en flows Maestro, les joue sur de vrais appareils, écarte les doublons et vous rend un rapport de bugs : chaque bug avec ses étapes de reproduction, la vidéo coupée autour de l'erreur et l'extrait de logcat qui va avec.

Sans carte bancaire pour commencer. Paiement sécurisé par Stripe quand vous changez d'offre.

Le triage 12 échecs → 4 bugs Redmi 12 · MIUI 14 NullPointerException@CartAct… Galaxy A14 · One UI 6 NullPointerException@CartAct… Pixel 6a · Android 15 NullPointerException@CartAct… BUG-04 · Bloquant crash · écran panier 3 appareils · 3 preuves

Même crash sur trois appareils : un bug, trois preuves. La gravité est proposée avec sa raison.
Exemple de rapport : aucune campagne complète n'a encore tourné sur du matériel réel.

Le rapport

Un document, pas une pile de captures

Sections par gravité, étapes de reproduction, extrait de logcat coupé autour de la première erreur, vidéo découpée au même instant. Un résultat qu'on peut lire, imprimer et transmettre.

1Bloquants 2Majeurs 1Mineurs Verdict : bloquant — un crash empêche la livraison
BUG-04 NullPointerException à l'ouverture du panier
crash | [email protected]:87 | écran panier | com.example.shop
  1. Ouvrir l'application avec le compte de test
  2. Rechercher « chaise » puis ajouter le premier article au panier
  3. Ouvrir le panier : l'application se ferme
09:41:07.318  E AndroidRuntime: FATAL EXCEPTION: main
09:41:07.318  E AndroidRuntime: Process: com.example.shop, PID: 8123
09:41:07.319  E AndroidRuntime: java.lang.NullPointerException: Attempt to
09:41:07.319  E AndroidRuntime:   invoke virtual method on a null object reference
09:41:07.319  E AndroidRuntime:   at com.example.app.CartActivity.onCreate(CartActivity.java:87)
09:41:07.320  E AndroidRuntime:   at android.app.Activity.performCreate(Activity.java:8051)
40 lignes avant, 120 après la première erreur — la vidéo est découpée au même instant.
capture.pngvideo-bug04.mp4 · 4 slogcat.txt · 160 l.
En toute franchise

Ce que nous ne faisons pas

Un produit qui cache ses limites fait perdre du temps à tout le monde. Voici les nôtres, aujourd'hui.

  • Aucune campagne n'a tourné de bout en bout sur de vrais appareils : l'essai dépend d'une station et d'un pool libre, réservé aux autres produits pendant la construction.
  • Le dépôt d'APK depuis une machine distante est impossible en phase 1 : l'URL de dépôt Hangar est interne, le dépôt se fait depuis le serveur.
  • Stripe n'est pas branché : pas de paiement réel, aucune somme n'est débitée.
  • Aucun export PDF n'est produit : le HTML du kit est autonome et s'imprime — l'absence de PDF est écrite dans le rapport.
  • La génération de flows n'utilise aucun LLM : elle est déterministe et un opérateur relit avant le premier passage.
  • iOS et les apps web mobiles sont hors périmètre ; les tests de performance fine (CPU, mémoire) aussi.
  • Une graine de monkey unique pour toute la campagne : l'état de départ dépend de l'installation, et c'est documenté comme limite.
Ce que ça fait

Concrètement

Un résultat, pas des minutes d'appareil

Recette ne vend pas de l'accès à un téléphone : elle vend « voici ce qui casse ». Vous recevez des bugs triés, pas une pile de captures à dépouiller vous-même.

Le triage des doublons est le cœur

Chaque échec est regroupé par la clé kind | signature | étape | cible : le même crash sur trois appareils donne un bug avec trois preuves, pas trois tickets. La gravité est proposée avec sa raison, et le logcat est coupé autour de la première erreur (40 lignes avant, 120 après).

Un rapport avec ses preuves

Vidéos réellement découpées autour de l'erreur avec ffmpeg — sinon la vidéo complète est livrée avec son offset et une note. Export CSV conforme RFC 4180, page publique par lien secret, sections par gravité et verdict.

Le retest des correctifs

Vous déposez une nouvelle build, Recette rejoue uniquement les bugs ouverts : chaque bug passe en corrigé ou reste ouvert, sans rejouer toute la campagne.

Une traduction des parcours déterministe

La description libre devient un flow Maestro (tap, input, assert, wait) sans aucun appel LLM : un brouillon qui ne comprend pas une ligne échoue en entier plutôt que de deviner, et un opérateur le relit avant le premier passage.

Le triage

Douze échecs bruts, quatre bugs

Chaque échec est regroupé par kind | signature | étape | cible : le même crash sur trois appareils donne un bug avec trois preuves, pas trois tickets.

  • Un incident d'environnement (thème MIUI, launcher, systemui) est écarté : il n'accuse pas votre application.
  • Sans nom de paquet connu, aucun crash n'est conclu — mieux vaut un bug manqué qu'un faux positif.
  • La gravité est proposée avec sa raison : bloquant pour un crash ou un ANR, majeur pour une étape de parcours qui échoue.

Échecs bruts12

crash · Redmi 12crash · Galaxy A14crash · Pixel 6aANR · Redmi 12étape · Pixel 6aétape · Galaxy A14+ 6 autres

Bugs regroupés4

BUG-04 · bloquantcrash — 3 preuves
BUG-05 · bloquantANR — 1 preuve
BUG-06 · majeurétape — 2 preuves
BUG-07 · mineuravertissement du socle
Questions

Questions fréquentes

Comment mes parcours deviennent-ils des tests ?

Un générateur déterministe traduit votre description en flow Maestro, relu par un opérateur avant le premier passage. Aucun modèle de langage n'intervient en phase 1 : si une ligne n'est pas reconnue, la génération échoue en entier au lieu d'inventer un geste.

Avez-vous déjà testé sur de vrais appareils ?

Non. L'essai de bout en bout dépend d'une station et d'un pool libre, et l'appareil partagé est réservé aux autres produits pendant la construction. Les tests du dépôt sont verts, mais aucune campagne complète n'a tourné sur du matériel réel.

Puis-je déposer mon APK depuis ma machine ?

Pas encore : l'URL de dépôt de Hangar est interne (elle écoute sur 127.0.0.1), donc le dépôt se fait aujourd'hui depuis le serveur. L'exposition publique passera par un tunnel, et c'est une tâche d'exploitation, pas de code.

Le paiement est-il ouvert ?

Non : Stripe n'est pas branché en phase 1, et la page de facturation le dit au lieu d'afficher un bouton inerte. Rien n'est débité, votre offre actuelle reste active.

La vidéo d'un bug est-elle vraiment découpée ?

Oui, autour de l'erreur, avec ffmpeg appelé par tableau d'arguments — jamais par un shell. Si la découpe échoue, la vidéo complète est livrée avec l'offset et une note qui l'explique : rien n'est caché.

Essayez sur un vrai téléphone

Créez un compte, prenez une clé, lancez votre premier test. C'est gratuit pour commencer.