PageSourceSearch

https://creaconnect.world/src/crea-front.js

js creaconnect.world collected 2026-09-24 10:09:21 UTC 8,581 bytes, 153 lines download raw bytes

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.