ADR-0015 — Les deux programmes qui paient sont deux audiences sur un seul jeu de conditions
Moitie PAYANTE de billing/0369. La moitie agence est tranchee separement par l'ADR 0014, 0014-le-programme-partenaire-echange-de-la-distribution-pas-une-commission.md, qui arrive avec la PR #1137 (pas encore sur main…
Statut
Remplacé par ADR-0041 · 2026-09-12
Piliers : billing, growth-web
Titre court d’origine : Deux audiences, un seul jeu de conditions
Moitie PAYANTE de
billing/0369. La moitie agence est tranchee separement par l'ADR 0014,0014-le-programme-partenaire-echange-de-la-distribution-pas-une-commission.md, qui arrive avec la PR #1137 (pas encore surmain, donc cite ici sans lien) : le programme partenaire ne verse aucune commission. Les deux ADR se repondent, ils ne se contredisent pas — c'est justement parce que le partenaire ne touche rien qu'il ne reste que deux portes a aligner ici.
Contexte
Trois pages publiques indexees vendaient trois jeux de conditions pour un
seul ledger. Ce que le code fait, et lui seul
(src/config/affiliate.ts,
affiliate-commission.ts) :
- 30 % du net de taxe, plafond dur (
Math.min(asked, 30)danscommissionForInvoice) ; - 12 factures payees, jamais des mois calendaires, et
accrueCommissionForInvoices'arrete la pour toute redemption : il n'existe aucun champ qui distinguerait un affilie d'un parrain ; - un code par affilie (
AffiliateCode.code @unique) ; AffiliateRedemptionenregistre une redemption, jamais un clic.
Ce que /network/affiliate vendait a cote de ça : 20 % a vie, des liens
par asset, un dashboard de clics et de conversions, une bibliotheque
d'assets, et une revue manuelle « en cinq jours ouvres ». Aucun de ces cinq
elements n'a de chemin de code, et la revue ne gardait rien :
ensureReferralCode mint un code au premier affichage de la page, pour tout
compte y compris Free.
/network/referral etait la plus juste des trois et publiait quand meme
trois affirmations fausses — « no clawback after month one » (une reprise
suit la facture sans mois butoir), « 38 pays », « formulaires 1099-NEC
emis automatiquement » (1099 n'apparait nulle part dans le depot) — tout
en taisant deux faits materiels : un versement exige un compte Stripe
Connect active, et chaque commission attend 30 jours.
src/test/affiliate-terms-match-the-ledger.test.ts tenait ces chaines en
quarantaine dans PENDING_OWNER_DECISION. La dette etait comptee ; elle ne
pouvait pas se solder sans une reponse commerciale, et aucun agent n'avait
le droit de la donner.
Décision
Deux audiences, un seul jeu de conditions. /network/referral et
/network/affiliate restent — ce sont deux funnels deja construits et
indexes — et publient les memes conditions, derivees de
config/affiliate.ts : 30 %, 12 factures payees, 60 jours d'attribution,
30 jours de retention.
Ce qui les differencie n'est plus l'argent mais le public et la porte
d'entree : l'affiliation est ecrite pour une audience existante et n'a
aucune candidature ; le parrainage pour l'intro en direct. L'outillage
qui compte a l'echelle d'un createur — le detail par filleul — reste gate
par le plan (admitsAffiliateDashboard, Max 5x), pas par le programme.
Tranche le 12 septembre 2026, et a confirme que
personne n'avait ete recrute sous les anciennes conditions : aucune
clause de reprise a ecrire. Aucun AffiliateCode n'existait a 20 %, et les
candidatures partent par e-mail (/api/network/applications) sans rien
stocker.
Alternatives écartées
| Option | Pourquoi non |
|---|---|
Un seul programme : /network/affiliate redirige en 308 vers /network/referral | Honnete en quelques heures, mais supprime un funnel d'acquisition indexe et le positionnement createur, qui ne se recree pas en une redirection |
| Deux programmes, deux ledgers : liens par asset, comptage de clics, taux propre | Ce n'est pas une correction de page, c'est une feature : une table de clics, une ingestion, une attribution par asset, des payouts distincts. Et « 20 % a vie » rouvre le calcul de liability que config/affiliate.ts documente — 30 % pour toujours sur un Max 20x, c'est 90 $/mois indefiniment pour une acquisition faite une fois, soit plus, sur trois ans, que la premiere annee de revenu du client |
| Garder « a vie » et l'implementer | Meme liability, sans meme le benefice d'un tracking. Le chiffre de 12 mois a ete tranche le 30 aout 2026 sur un modele financier ; le rouvrir demande un nouveau modele, pas une reecriture de page |
| Aligner aussi le programme agence sur ces conditions | C'etait la forme initiale de cette decision. L'ADR 0014 (PR #1137) la remplace pour cette page : payer 30 % a un partenaire qui facture deja le meme client le fait payer deux fois. Le partenaire echange de la distribution, pas une commission |
Conséquences
Ce que ça coute. /network/affiliate perd son argument de vente le plus
simple, un taux different. Sa proposition repose desormais sur ce qui existe
vraiment : le lien immediat sans candidature, le ledger de gains, et le
detail par filleul a partir de Max 5x.
La dette qu'on accepte. Les deux pages se ressemblent davantage sur l'argent. C'est le prix de l'honnetete : la seule facon de les differencier la-dessus serait de payer deux choses differentes, ce que l'alternative 2 chiffre.
Le signal qui indiquerait de revisiter. Un volume d'affilies createurs suffisant pour que le comptage de clics change une decision de contenu, ou une demande recurrente de liens par asset. A ce moment-la, la sortie « deux ledgers » devient une feature a instruire, pas une correction.
Comment c'est appliqué
- Les deux pages rendent leurs chiffres depuis un seul composant,
src/app/(marketing)/network/_components/program-terms.tsx, qui litconfig/affiliate.ts. Une page ne peut pas publier un chiffre qu'elle ne rend pas. - Le comparatif (
marketingPages.network.doors) ne compare que les deux portes qui paient. Le programme partenaire y est une phrase : une colonne dont chaque ligne d'argent serait vide n'est pas une comparaison. - Le catalogue ne porte plus que des formes (
"{pct}%","{days} days"), pas des nombres. C'est ce qui a fait disparaitre le60 jfrancais qui s'affichait sur la page anglaise. src/test/affiliate-terms-match-the-ledger.test.ts:PENDING_OWNER_DECISIONpasse de six a deux entrees, les deux restantes appartenant a l'ADR 0014, et la liste ne peut plus grandir. La garde refuse en plus les mecanismes fantomes (lien par asset, taux de clic) dans les six locales.src/test/network-pages-render-one-set-of-terms.test.ts: aucune des deux pages ne peut ecrire un chiffre dans son propre source. C'est le trou que la garde du catalogue ne voyait pas, et c'est exactement la que vivait le"20 %".