fix: une mutation ne rend ni n-atteint ce que la vue cache

`Set.prototype.add` rend THIS pour permettre le chainage - EXECUTE, pas deduit,
sur le `Set` nu et sur le vrai `DeepSignalSet`, qui rendent tous deux la
collection. Les trois mutations etaient transmises liees a la cible sur le motif
ecrit juste au-dessus : "elles prennent un objet et rendent void ou un booleen,
donc elles ne laissent rien fuir". Faux pour `add`, et `add` est le PREMIER
membre que l-exemple de documentation du SDK emploie. Toutes les entrees etaient
filtrees et la sortie rendait la collection entiere.

Les deux autres rendaient bien ce que le motif disait, et AGISSAIENT au-dela de
la vue : `delete` retirait un objet dont `has` refuse meme de confirmer
l-existence - les deux se contredisaient - et `clear` vidait la collection que
toutes les identites partagent.

Une seule regle : une mutation atteint la collection dessous, mais ne rend ni
n-atteint ce que la vue cache. `add` rend la VUE, `delete` n-agit que sur ce que
la vue montre, `clear` vide la vue. L-ecriture atteint toujours le document.

Le motif commun aux cinq fuites de cette famille est une JUSTIFICATION ECRITE
SUR UNE VALEUR DE RETOUR JAMAIS EXECUTEE. Chacune etait raisonnable, aucune
n-avait ete jouee.

Aussi : la forme ordonnee rend des index la ou un Set rend des objets
(`keys`/`entries`/`forEach`), et le faux partage reproduit desormais le
`isLoading` LIVRE - inverse de sa propre declaration. L-inversion est amont ;
un faux plus correct que la cible recree l-aveuglement que cette tache enleve.
This commit is contained in:
Sylvain Duchesne
2026-09-24 19:00:19 +02:00
parent 0e2b8ba394
commit c5de1cea35
6 changed files with 221 additions and 24 deletions
+6 -1
View File
@@ -109,7 +109,12 @@ export interface ShapeResult {
* `emulated-verifier/read-filter.ts` - and declares it here because refusing a member
* requires knowing it is there. */
readonly subscription: unknown;
/** Whether the initial payload is still outstanding. */
/**
* What the SDK's declaration calls "`true` when no data is available yet" - and what the
* SHIPPED hook computes as `ormSubscription.isReady`, which is the inverse. Both were
* read; they disagree, the disagreement is upstream's, and nothing here corrects it:
* this package forwards the value it is handed. Read `data === undefined` instead.
*/
readonly isLoading: boolean;
/** Load the next page. Present only under a paginated config. */
readonly nextPage?: (() => void) | undefined;