1/* ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ 2 * CREA FRONT â combien de choses à la fois, MAINTENANT 3 * REND : juger 4 * 5 * ââ CE QUI ÃTAIT FAUX ââââââââââââââââââââââââââââââââââââââââââââââââââââ 6 * 7 * « Trois de front ici. » CRÃA le dit à chaque équipe lancée, et ce nombre ne 8 * venait que d'un réglage â celui que la personne a posé une fois, dans les 9 * préférences. Il ne regardait NI le budget qu'elle a posé, NI ce que le 10 * fournisseur laisse encore passer. 11 * 12 * Le dépôt a déjà corrigé ce défaut UNE FOIS, et la correction est écrite dans 13 * src/crea-equipe.js : « ce nombre était écrit en dur, et il est devenu faux ». 14 * On avait remplacé un littéral par un réglage. C'est le même défaut d'un cran 15 * plus haut : un réglage est une INTENTION, pas une capacité. La personne peut 16 * régler douze de front avec un budget qui en paye deux et un quota qui en 17 * laisse passer un. 18 * 19 * Un nombre annoncé qu'aucune borne ne soutient est cru â surtout par un 20 * modèle, qui l'emploiera ensuite pour estimer une durée. 21 * 22 * ââ CE QUE CE POSTE FAIT âââââââââââââââââââââââââââââââââââââââââââââââââ 23 * 24 * Il répond à UNE question : combien de front, maintenant ? Il prend les 25 * bornes qu'on lui donne, garde la plus petite, et DIT LAQUELLE MORD. C'est la 26 * moitié utile : « 2 de front » n'apprend rien, « 2 de front â le budget posé 27 * n'en paye pas plus » se corrige. 28 * 29 * ââ CE QU'IL NE FAIT PAS, ET C'EST DÃLIBÃRà ââââââââââââââââââââââââââââââ 30 * 31 * ⢠IL NE VA RIEN CHERCHER. Aucune lecture de `STATE`, aucun appel à un autre 32 * organe : on lui passe les bornes. Un poste qui tend la main partout devient 33 * impossible à éprouver, et c'est ce qui a rendu la largeur d'avant si dure 34 * à corriger. 35 * ⢠IL N'INVENTE AUCUNE BORNE INCONNUE. Une borne qu'on ne lui passe pas 36 * n'existe pas pour lui â elle ne compte NI pour zéro NI pour l'infini. Sans 37 * ça, un quota qu'on n'a pas encore lu (le premier appel de la session) 38 * ferait tomber la largeur à zéro, et l'équipe ne partirait jamais. 39 * ⢠IL NE DÃCIDE PAS QU'ON LANCE. Il dit combien tiennent de front, pas s'il 40 * faut lancer : l'arrêt franc est au devis (`CREA_DEVIS.tientDansLeBudget`), 41 * et le refus au gardien. Trois postes, trois métiers. 42 * ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ */ 43;(function () { 44 'use strict' 45 if (window.CREA_FRONT) return 46 47 /* CE QUE CHAQUE BORNE VEUT DIRE, EN UNE PHRASE. Le tableau est ici et pas 48 chez l'appelant : c'est ce poste qui répond, donc c'est lui qui explique. 49 L'ORDRE COMPTE â à égalité, c'est la PREMIÃRE qui est nommée, et on cite 50 de préférence celle sur laquelle quelqu'un peut agir. Le mur du dépôt vient 51 donc en dernier : dire « c'est le plafond du code » quand le budget dit le 52 même chiffre n'apprend rien à personne. */ 53 var BORNES = [ 54 ['quota', 'ce que le fournisseur laisse encore passer avant de recharger'], 55 ['reglage', 'ce que la personne a réglé'], 56 ['mur', 'le plafond dur du dépôt'], 57 ] 58 59 /* ET LE BUDGET N'EN EST PAS, ALORS QU'IL BORNE VRAIMENT LA DÃPENSE. 60 Il a été écrit ici, puis retiré : au SEUL endroit où la largeur s'annonce, 61 l'équipe vient de partir â donc `CREA_DEVIS.tientDansLeBudget` vient de 62 dire oui, donc le budget couvre TOUS les membres, donc il ne peut pas 63 mordre. Une borne qui ne peut jamais mordre est une borne déclarée qui ne 64 parle jamais : le dépôt a déjà payé ce défaut ailleurs (`voixFormulaire`, 65 déclarée depuis le début et muette). Le budget arrête AVANT, franchement,
66 et c'est son métier. Le jour où une largeur se demande avant le devis, 67 cette ligne-là est le mode d'emploi. */ 68 69 /** 70 * COMBIEN DE FRONT, MAINTENANT ? 71 * 72 * `o` porte les bornes CONNUES, chacune facultative : `mur`, `reglage`, 73 * `budget`, `quota`. Rend `null` quand aucune n'est connue â on ne décrète 74 * pas un nombre quand on n'en sait rien, et l'appelant garde alors ce qu'il 75 * faisait avant. 76 */ 77 function combienDeFront(o) { 78 try { 79 var opt = o || {} 80 var connues = [] 81 for (var i = 0; i < BORNES.length; i++) { 82 var nom = BORNES[i][0] 83 var brut = Number(opt[nom]) 84 /* UNE BORNE ILLISIBLE N'EST PAS UNE BORNE à ZÃRO. Un réglage abîmé, un 85 quota pas encore lu : dans les deux cas on ne sait pas, et prétendre 86 savoir ferait dire « zéro de front » à une machine qui va très bien. */ 87 if (!isFinite(brut)) continue 88 connues.push({ nom: nom, dire: BORNES[i][1], valeur: Math.max(0, Math.trunc(brut)) }) 89 } 90 if (!connues.length) return null 91 92 var mord = connues[0] 93 for (var j = 1; j < connues.length; j++) { 94 if (connues[j].valeur < mord.valeur) mord = connues[j] 95 } 96 97 /* LE PLANCHER EST à UN, ET IL SE DIT. Une borne à zéro est un 98 renseignement vrai â « le budget ne paye plus rien » â mais annoncer 99 « zéro de front » dans une phrase qui accompagne un travail qui PART 100 serait faux d'un autre côté : ce qui part, part une part à la fois. 101 On rend donc un, et `borneVaut` garde le chiffre réel. */ 102 var largeur = Math.max(1, mord.valeur) 103 /* CE QU'ON REND EST CE QU'ON LIT. `borneVaut` et la carte des bornes 104 étaient là « pour être lisibles », et seule une garde les ouvrait : le 105 cliquet des champs morts les a comptées, à raison. Ce que la borne à 106 zéro apprend est DANS la phrase â c'est là que quelqu'un le lira. */ 107 return { 108 largeur: largeur, 109 borne: mord.nom, 110 pourquoi: mord.dire, 111 /* LA PHRASE TOUTE FAITE, ÃCRITE ICI ET PAS CHEZ L'APPELANT : deux 112 appelants qui la composent chacun de leur côté la font diverger, et 113 c'est celle qu'on ne relit plus qui ment la première. */ 114 dire: largeur + ' de front â ' + mord.dire 115 + (mord.valeur < 1 ? ' (elle est à zéro : ce qui part, part une part à la fois)' : ''), 116 } 117 } catch (e) { return null } 118 } 119 120 /** 121 * COMBIEN DE REQUÃTES RESTE-T-IL, RAPPORTÃES à DES MEMBRES ? 122 * 123 * Le quota du fournisseur compte des REQUÃTES, pas des agents. Un membre qui 124 * a droit à douze tours peut en consommer douze. Traduire ici â et une seule 125 * fois â évite que chaque appelant refasse la division de son côté. 126 * Rend `undefined` quand le quota n'a pas encore été lu : c'est le cas au 127 * premier appel de chaque session, et il ne doit pas valoir zéro. 128 */ 129 function membresQueLeQuotaLaisse(quota, toursParMembre) { 130 try { 131 var restant = quota && quota.requetes ? quota.requetes.restant : undefined 132 /* `Number(null)` VAUT ZÃRO, ET ZÃRO EST FINI. Ãcrit `!isFinite(Number(x))`, 133 ce test laissait passer un quota PAS ENCORE LU â `STATE.backendUsageQuota` 134 vaut null tant qu'aucune réponse n'est revenue â et rendait « zéro 135 membre », donc une largeur de 1 à chaque session neuve. Le défaut que 136 l'en-tête de ce poste interdit, dans le poste lui-même. On teste donc 137 le TYPE avant la valeur. */ 138 if (typeof restant !== 'number' || !isFinite(restant)) return undefined 139 var tours = Math.max(1, Math.trunc(Number(toursParMembre) || 1)) 140 return Math.max(0, Math.floor(Number(restant) / tours)) 141 } catch (e) { return undefined } 142 } 143 144 /* ON N'EXPOSE QUE CE QU'ON APPELLE. `BORNES` était sur l'API « pour être 145 lisible » â et seule une garde la lisait. Une porte ouverte sur rien est 146 une porte qu'on croit un jour utile, et le cliquet des portes mortes l'a 147 comptée. La garde lit la table à la SOURCE (tests/tables-du-tronc.mjs), 148 comme le dépôt le fait partout ailleurs. */ 149 window.CREA_FRONT = { 150 combienDeFront: combienDeFront, 151 membresQueLeQuotaLaisse: membresQueLeQuotaLaisse, 152 } 153})()
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.