From 9e7aeef269b43e305cd66cdbcc8140e475a984c9 Mon Sep 17 00:00:00 2001 From: Sylvain Duchesne Date: Sun, 16 Aug 2026 14:17:38 +0200 Subject: [PATCH] =?UTF-8?q?docs:=20deux=20ex=C3=A9cutions=20peuvent=20main?= =?UTF-8?q?tenant=20se=20chevaucher?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit La feuille disait le contraire, et c'est moi qui l'ai écrite hier : « deux exécutions ne doivent jamais se chevaucher », « c'est désormais tenu par un verrou », « une suite d'un dépôt consommateur entre en collision ». Les trois sont fausses depuis l'extraction. Chaque exécution a son propre répertoire de profil et tue le navigateur qui le détient en finissant. Les exécutions concurrentes — y compris celle d'une application consommatrice, depuis son propre dépôt — sont indépendantes par construction. Et la leçon de forme est consignée, parce qu'elle se généralise : le verrou ne traitait qu'un symptôme, supprimer le partage a supprimé le besoin. Quand deux exécutions se disputent une chose, la rendre propre à chacune plutôt que de sérialiser l'accès. --- .project/concepts/e2e-harness/_debt.md | 11 ----------- .../e2e-harness/knowledge_what-each-suite-judges.md | 12 +++++------- 2 files changed, 5 insertions(+), 18 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 8e2f699..0000000 --- a/.project/concepts/e2e-harness/_debt.md +++ /dev/null @@ -1,11 +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/harness-page.ts @2026-08-16 (session f93872b5-293a-4916-a353-181409a96d42) -- TOUCHED packages/polyfill/e2e/run.ts @2026-08-16 (session f93872b5-293a-4916-a353-181409a96d42) -- TOUCHED packages/polyfill/e2e/reactivity-doc-subscribe.ts @2026-08-16 (session f93872b5-293a-4916-a353-181409a96d42) -- TOUCHED packages/polyfill/e2e/repro-fresh-wallet.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 b014607..8129ec6 100644 --- a/.project/concepts/e2e-harness/knowledge_what-each-suite-judges.md +++ b/.project/concepts/e2e-harness/knowledge_what-each-suite-judges.md @@ -15,17 +15,15 @@ A unit suite cannot replace any of them, and none of them replaces the unit suit ## What a batch costs, and why -Every `batch` mints its own physical user by driving the wallet application's real interface, then discards the previous one. That is deliberate — identities must not leak between runs — and it puts a floor under every run that no test filter can remove. +Every run mints its own physical user by driving the wallet application's real interface, then discards the previous one. That is deliberate — identities must not leak between runs — and it puts a floor under every run that no test filter can remove. -Consequences worth knowing before optimizing anything: the setup runs before any `journey`, so a filter saves journey time only; and the wallet profile is a single directory shared by every suite. +Consequence worth knowing before optimizing anything: the setup runs before any `journey`, so filtering journeys saves journey time only — the floor stays. -## Two runs must never overlap +## Two runs may overlap — and that was not free -Because the profile is shared and each `batch` discards what it finds, a second run started while a first is alive destroys the first — which then fails in a way that reads as a product defect. Several measurements were lost to this before it was made structural. +They once could not: the profile was a single shared directory, and a run starting while another was alive destroyed it, which then failed in a way that read as a product defect. Several measurements were lost to it. -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. +Now each run gets its own profile directory and kills the browser holding it when it ends, so concurrent runs — including a consuming application's suite, from its own checkout — are independent by construction. A lock once guarded the shared directory; it treated the symptom, and removing the sharing removed the need. Prefer that shape whenever two runs contend: make the contended thing per-run rather than serialising access to it. ## A bound must be larger than the sum of what it encloses