fix!: le registre d-ouverture n-a plus qu-un seul sens, et il cesse de mentir
Trois constats, un seul defaut sous trois visages : un etat enregistre comme vrai qui ne l'est pas, sans moyen de se corriger. Deux des trois vivaient dans `open-repo.ts`. Cinq tours sont alles dans l'appelant ; c'est le teneur de registre qui mentait. CE QUE LE REGISTRE VEUT DIRE, ecrit dans l'en-tete. `held` est le SEUL registre d'ouverture : cette session detient un abonnement vivant a ce document. Il y avait a cote un `opened` voulant dire « on a appele `doc_subscribe` une fois et on a cesse d'attendre », et ce sens plus lache mentait de trois facons : il survivait a un abonnement REFUSE par le courtier (donc la reprise que `subscribe.ts` offre etait bloquee a jamais), il survivait a une reinitialisation (donc une nouvelle session court-circuitait sur l'enregistrement de la precedente), et il laissait un document annoncer une barriere jamais franchie. `opened` est supprime. Les trois consequences, desormais vraies par construction : - un abonnement qui a ECHOUE n'enregistre rien - `onSetupFailed`, le canal que `subscribe.ts` offre exactement pour cela, est enfin branche - donc l'appelant suivant s'abonne a nouveau ; - une reinitialisation efface l'enregistrement ET DECLASSE l'etat de synchro : une barriere franchie dans la session qui vient de disparaitre n'en est pas une que celle-ci a franchie ; - `"unknown"` ne veut plus dire qu'une chose : aucune barriere n'etait attendue ici (jamais demande, ou un `ng` sans `doc_subscribe`). Jamais « on a oublie ». Cote appelant, un seul changement, et c'est le troisieme constat : quand un document nomme n'a pas repondu, `publish` PUBLIE « la question reste ouverte » au lieu de sortir en laissant en place l'instantane precedent. Sortir laissait un refus DEJA LEVE a l'affichage : l'application lisait « vous ne detenez pas la capacite de ce document » a propos d'un document qu'elle detient desormais. Deux tests portaient l'ancien sens et sont corriges avec leur raison : celui du `ng` sans `doc_subscribe` (le compteur d'ids du faux courtier redemarrait a chaque test, donc deux tests aliasaient leurs depots - la lecon de `wallet-fake` a l'echelle du fichier), et celui de la lecture froide, ou « timed-out » est desormais ce que dit « cette page ne l'a pas confirme ».
This commit is contained in:
@@ -113,8 +113,18 @@ describe("reading the messages left on my note, on a page that has just loaded",
|
||||
// Not a failure anyone can see: the message is on the broker, Alice owns the inbox,
|
||||
// and the call returns a perfectly ordinary empty list.
|
||||
expect(await inboxSurface.readForDocument(note)).toEqual([]);
|
||||
// …because nothing ever brought the NOTE into view. The address lives on it.
|
||||
expect(getSyncState(note)).toBe("unknown");
|
||||
// ...because nothing on THIS page ever brought the NOTE into view. The address lives
|
||||
// on it.
|
||||
//
|
||||
// `"timed-out"`, not `"unknown"`, since 2026-09-24: a registry reset now DOWNGRADES the
|
||||
// documents it takes subscriptions away from instead of forgetting their state, so
|
||||
// `"unknown"` means only "no barrier was ever expected here" and can be read as
|
||||
// authoritative. Note this particular value is a harness artefact and not what a real
|
||||
// reload produces: `reloadPage` resets the registry inside one process, so the note is
|
||||
// still in it from the first page, where a browser reload would start with an empty
|
||||
// module and answer `"unknown"`. Either way it is the safe reading - neither value lets
|
||||
// a zero-row read be called a definitive absence here.
|
||||
expect(getSyncState(note)).toBe("timed-out");
|
||||
});
|
||||
|
||||
test("the synced document-addressed read answers the message, over that same state", async () => {
|
||||
|
||||
Reference in New Issue
Block a user