From cf3c7c7d8badf136f72eb384c27f43eb5c16f21b Mon Sep 17 00:00:00 2001 From: Sylvain Duchesne Date: Sun, 16 Aug 2026 12:38:29 +0200 Subject: [PATCH] =?UTF-8?q?docs:=20une=20borne=20englobante=20plus=20court?= =?UTF-8?q?e=20que=20ses=20=C3=A9tapes=20rend=20tout=20=C3=A9chec=20muet?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit La leçon du tour, et elle valait des jours : SIGN_IN_MS valait 180 s sur des étapes totalisant 270 s. La borne du dessus se déclenchait donc toujours la première, et chaque échec rapportait son nom à elle — jamais celui de l'étape en cause. On a cherché une cause que le harnais était structurellement incapable de nommer. D'où les deux règles consignées : calculer une borne englobante à partir de ses parties au lieu de choisir un nombre, et dimensionner chaque borne terminale sur une durée MESURÉE inscrite à côté d'elle. Un chiffre nu ne dit pas s'il est généreux ou serré, et pourrit sans que personne le voie. Plus une troisième : déclarer les parcours et leurs vérifications avant que quoi que ce soit puisse échouer, pour qu'une exécution rende toujours le même nombre de lignes. Quand le total bouge avec la panne, deux exécutions ne sont plus comparables — et un total qui rétrécit se lit comme un problème plus petit alors qu'il est plus gros. Enfin, un fait observé : notre verrou ne garde que ce dépôt. Une suite appartenant à une application consommatrice, lancée depuis son propre checkout contre le même broker, entre en collision exactement comme deux des nôtres — et c'est invisible des deux côtés. --- .project/concepts/e2e-harness/_debt.md | 8 -------- .../e2e-harness/knowledge_what-each-suite-judges.md | 12 ++++++++++++ 2 files changed, 12 insertions(+), 8 deletions(-) delete mode 100644 .project/concepts/e2e-harness/_debt.md diff --git a/.project/concepts/e2e-harness/_debt.md b/.project/concepts/e2e-harness/_debt.md deleted file mode 100644 index 167d248..0000000 --- a/.project/concepts/e2e-harness/_debt.md +++ /dev/null @@ -1,8 +0,0 @@ -# Doc-debt — e2e-harness - -> Presence of a block = doc to update. Processed → delete the block; no blocks left → delete this file. -> One block = one "big change": `why` + `files` + `verify` (leaves to review). - -## Raw markers (consolidate into blocks, then delete) -- TOUCHED packages/polyfill/e2e/measure.ts @2026-08-16 (session f93872b5-293a-4916-a353-181409a96d42) -- TOUCHED packages/polyfill/e2e/notebook.ts @2026-08-16 (session f93872b5-293a-4916-a353-181409a96d42) diff --git a/.project/concepts/e2e-harness/knowledge_what-each-suite-judges.md b/.project/concepts/e2e-harness/knowledge_what-each-suite-judges.md index 3beca83..b014607 100644 --- a/.project/concepts/e2e-harness/knowledge_what-each-suite-judges.md +++ b/.project/concepts/e2e-harness/knowledge_what-each-suite-judges.md @@ -25,4 +25,16 @@ Because the profile is shared and each `batch` discards what it finds, a second It is now enforced by a lock rather than by discipline, and a browser left behind by a killed run is reclaimed. If you ever find yourself reasoning about "was another run going?", check the lock rather than your memory. +That lock guards **this repository only**. A suite belonging to a consuming application, run from its own checkout against the same broker and the same wallet, collides exactly as two of ours would — observed. Until the shared machinery lives in a package both sides use, that collision is invisible to both. + +## A bound must be larger than the sum of what it encloses + +An enclosing deadline shorter than its own steps can only ever fire first, so every failure underneath it reports the *enclosing* name and none of them can name a cause. The sign-in bound sat at 180 s over steps totalling 270 s, and for days every failure said the same four words while the real step stayed anonymous. Days went into looking for a cause the harness was structurally incapable of reporting. + +So: compute an enclosing bound from its parts rather than picking a number, and size every leaf bound from a **measured** healthy duration recorded beside it. A bare figure teaches nothing and rots without anyone noticing; a figure with its measurement lets the next reader tell a generous bound from a tight one. + +## What a run must report whatever happens + +Declare the journeys and their checks before anything can fail, so a run reports the same number of rows every time. When the count itself moves with the failure — journeys dying and taking their unreported checks with them — two runs are no longer comparable, and a shrinking total reads like a smaller problem instead of a bigger one. + The related trap that made it self-perpetuating: discarding the profile was once conditioned on a marker written at the *end* of a batch, so a run killed before writing it left a profile the next run happily reused — and inherited its breakage. Discarding now keys on the profile itself.