Commit Graph

206 Commits

Author SHA1 Message Date
Sylvain Duchesne 75313f75a2 fix!: une lecture qui n'atteint pas son document echoue, elle ne repond plus vide
`fetchReadCap` rendait `false` pour trois situations sans rapport : l'emulation
inerte, le document qui n'expose aucune capacite, et le reseau qu'on n'a pas pu
interroger. Les trois appelants vivants lisaient ce `false` comme « pas de
capacite » et transformaient une panne en affirmation sur le document :
`ensureRepoOpen` renoncait en silence et laissait la lecture suivante accuser le
lecteur de ne rien detenir, et `documentInboxAddress` repondait « ce document n'a
pas d'inbox », ce qu'une application lit comme zero depot.

Le telechargement rejette desormais jusqu'a l'appelant, avec le document nomme et
la cause d'origine conservee. `false` ne veut plus dire qu'une chose : le document
n'expose rien, et c'est une reponse. Le memo garde la meme asymetrie qu'avant.

`documentInboxAddress` propage aussi l'echec de sa propre lecture d'adresse : le
`catch` qui rendait `undefined` se justifiait par un refus que `mustNotAttempt` a
deja ecarte une ligne plus haut, donc il n'avalait que des pannes.

`useShapeQuery` franchit la barriere sur chaque document NOMME par `scope.graphs`
avant d'ouvrir la requete : capacite demandee au store public, refus a voix haute
si elle n'est pas detenue, ouverture et synchronisation. Un document nomme
qu'on ne peut pas lire donnait `isSuccess` avec `data: []` apres que le filtre de
capacites l'eut vide - la seule reponse que cette surface existe pour reserver a
« ce scope ne contient rien ». Restent intacts et succes : `did:ng:i`, `graphs:
[]`, un document joignable et vide, et tout le cas inerte.

`fetchReadCaps` supprime : aucun appelant, et une politique de tolerance par lot
sans proprietaire au-dessus d'un appel qui rejette desormais.
2026-09-21 15:00:01 +02:00
Sylvain Duchesne 6cd96b0182 feat: pnpm partout et les deux plages trop larges deviennent une tache 2026-09-21 14:58:28 +02:00
Sylvain Duchesne 5cbcabecf2 chore: T01.i est close, et la doc perimee d-open-repo passe a T01.j 2026-09-21 14:45:14 +02:00
Sylvain Duchesne 6c1d281755 T01.i is close: ensureReposOpen dead, example typechecks, bun store gone
The example's real bug was a missing satisfies clause widening
NoteShape's valType, not the pnpm-workspace.yaml gap the lead pointed
at - that gap was real too and got fixed, but for a different reason
(examples/notebook shared node_modules/.bun with the store this task
also deletes).
2026-09-21 14:44:09 +02:00
Sylvain Duchesne ee82a4a5e4 T01.i: delete the dead bun store, stop it from coming back
node_modules/.bun held stale @ng-org/web, @ng-org/shex-orm and
@ng-org/alien-deepsignals copies beside the pnpm-managed current ones
(T01.h left it in place, latent). Deleted the directory; every symlink
in the tree already resolved through node_modules/.pnpm, so nothing
pointed at it.

The likely trigger for a future accidental bun install was a bun.lock
committed at the repo root (the gitignore only listed the older
bun.lockb, so this text-format lockfile slipped through). Removed the
tracked bun.lock and added both bun.lock and bun.lockb to .gitignore,
and declared packageManager: pnpm@10.26.0 in package.json so tooling
(and anyone reading it) has one unambiguous answer for which installer
this tree uses. No new tooling built, per the task's instruction.
2026-09-21 14:43:04 +02:00
Sylvain Duchesne 2dc28966c7 T01.i: bring examples/notebook into the pnpm workspace, fix its type error
pnpm-workspace.yaml listed only packages/*, so pnpm never installed
examples/notebook's dependencies even though root package.json's
workspaces field named examples/* too; the example ran on a stray
node_modules a manual bun install had left behind (symlinks into
node_modules/.bun, including a dangling @ng-eventually/sdk link to a
package that no longer exists). Added examples/* to pnpm-workspace.yaml
and reinstalled; examples/notebook now resolves @ng-org/orm and
@ng-org/web to the exact same pnpm store instances packages/polyfill
uses (verified via the symlinks and node_modules/.pnpm listing) - no
package ended up duplicated.

That alone did not fix the example's TS2345: NoteShape's object
literal had its dataTypes[].valType widened from the "iri"/"string"
literals to plain string (no satisfies clause), which the existing
test suite already guards against elsewhere (satisfies
ShapeType<BaseType>). Applied the same pattern here, importing the
already re-exported ShapeType/BaseType from @ng-eventually/polyfill -
no new dependency needed, no compiler option touched.
2026-09-21 14:40:47 +02:00
Sylvain Duchesne 51b6278bf6 T01.i: remove dead ensureReposOpen (batch open-repo helper)
Its only callers were its own definition and its dedicated test block;
no production code used it since the read-union removal (T01.f). The
one test that exercised readDocumentSubjects' real integration path
(not ensureReposOpen itself) is kept, moved under the ensureRepoOpen
describe block it actually belongs to.
2026-09-21 14:35:32 +02:00
Sylvain Duchesne d62d23c686 chore: T01.k passe apres T01.j, elles touchent les memes annotations 2026-09-21 14:34:40 +02:00
Sylvain Duchesne 55c918dd4b feat: l-ecart entre l-arbre cite et la version compilee devient une tache 2026-09-21 14:34:29 +02:00
Sylvain Duchesne 5d2899157f chore: T01.h est close, et sa trouvaille sur pnpm alimente T01.i 2026-09-21 14:31:56 +02:00
Sylvain Duchesne 6b278b404e chore: T01.h est close - les paquets etaient deja a jour, la doctrine non
Les quatre paquets @ng-org sont a leur derniere version publiee : le
refresh ne deplace rien (verifie par dist-tag, liste complete des
versions et pnpm outdated). Le travail reel etait la reconciliation
laissee par le refresh precedent.

Deux constats consignes dans le Result :

- l'arbre etait installe par bun, pas par pnpm, avec un store .bun
  portant encore web alpha.13, shex-orm alpha.8 et alien-deepsignals
  alpha.11 a cote des courants ; danger d'instance unique latent,
  reconcilie par une reinstallation pnpm
- le checkout epingle de nextgraph-rs (213338f6) declare orm alpha.18,
  soit trois versions derriere les paquets compiles : toute citation de
  source decrit une version que ce depot n'utilise plus

Piege a retenir : web, shex-orm et alien-deepsignals publient aussi un
0.1.2 nu, que semver classe AU-DESSUS des alpha alors qu'il date de
2025. Ce sont les pins exacts qui l'ecartent.

Quatre portes vertes, plus les mesures live : orm-live-read 5 passed /
0 failed (pret en 13ms), suite e2e polyfill 43 passed / 0 failed.
2026-09-21 14:30:11 +02:00
Sylvain Duchesne 83575349d7 docs: aligner la doctrine ORM sur les paquets reellement installes
Les quatre paquets @ng-org sont deja a leur derniere version publiee
(web alpha.14, orm alpha.21, shex-orm alpha.9, alien-deepsignals
alpha.13) : le refresh ne deplace rien. Ce qui restait faux, c'est la
doctrine, laissee en arriere par le refresh precedent.

Le point de fond : le checkout epingle de nextgraph-rs (213338f6)
declare orm alpha.18, donc la source citee est TROIS versions derriere
les paquets contre lesquels ce depot compile. La ou les deux divergent,
les leaves nomment desormais les deux.

Faits corriges, tous verifies dans node_modules :

- les versions installees annoncees en tete de leaf (alpha.19/13/11)
- OrmSubscription est renomme RdfOrmSubscription dans alpha.21, fichier
  compris (connector/RdfOrmSubscription.ts)
- alpha.21 exporte removeObject(graphNuri, subjectIri), absent de la
  source ; sa propre documentation se contredit sur sa portee
- getOrCreate prend un RdfOrmConfig, plus un Scope nu, et l'instance
  gagne mode/isReady/addChangeListener/nextPage/previousPage
- Scope.graphs est REQUIS dans alpha.21, et les deux axes lisent [] en
  sens INVERSE : graphs [] = ensemble vide, subjects [] = aucun filtre.
  La table le dit explicitement, c'est le piege deja paye une fois
- la lecture ORM live DEMARRE contre le deploiement (5 passed, 0 failed,
  pret en 13ms) ; le lien mort vers bug_useshape-live-read-needs-a-newer
  -broker disparait, ainsi que le "exit non-zero attendu" de la suite

Ce qui n'est PAS affirme : que le where/orderBy/pageSize d'alpha.21
atteigne le moteur. A 213338f6 start_orm construit encore son config a
partir de json!({}) derriere un TODO, donc la richesse est exprimable au
niveau 3 et jetee au niveau 1. Non mesure, donc non ecrit.
2026-09-21 14:29:05 +02:00
Sylvain Duchesne ddb3d0552d feat: la chaine de l-echec lu comme une absence devient une tache a part entiere 2026-09-21 14:27:10 +02:00
Sylvain Duchesne 7599004fc3 chore: les trois suites de T01.f deviennent une tache 2026-09-21 14:17:42 +02:00
Sylvain Duchesne 2588dae24e chore: T01.f est close, le digest porte le fait RepoNotFound 2026-09-21 14:16:25 +02:00
Sylvain Duchesne 53673a9893 chore: T01.f est close - readUnion retire et la lecture par document documentee 2026-09-21 14:12:30 +02:00
Sylvain Duchesne 0a2b8b1fbf docs: dire partout que la lecture par lot n'existe plus
Le contrat publie et l'api-contract etaient traites avec le retrait lui-meme ;
restaient les documents qui decrivaient readUnion comme la primitive de
lecture du paquet, ou qui nommaient le module disparu.

Ce que les lecteurs apprennent maintenant : lire un document, c'est
docs.sparqlQuery ancre dessus, et lire plusieurs documents, c'est cet appel
une fois par document -- avec la decision sur une lecture qui echoue ecrite
au point d'appel. Deux consequences sont dites plutot que decouvertes : une
lecture refusee leve au lieu de rendre une liste vide, et les sujets sous le
prefixe reserve urn:ng-eventually: reviennent dans le resultat, a l'appelant
de les ignorer -- sans aucun gain de droits, les deux registres qu'un
document ordinaire porte etant l'adresse de sa boite et, pour un document
public, la cle que son magasin sert deja a qui la demande.

Les briefs dates ne sont pas touches : ils decrivent un etat de juillet, et
le reecrire falsifierait ce qui avait ete decide alors.
2026-09-21 14:11:35 +02:00
Sylvain Duchesne 0c21adebf2 feat!: retirer readUnion de la surface publiee, et lire un document par requete ancree
readUnion etait N requetes ancrees plus une politique de lot : une lecture
qui echoue avalee en reponse vide, un document dont on ne detient pas la cle
ecarte au lieu d'etre refuse, un regroupement en sacs de proprietes, et le
filtrage du prefixe reserve. Rien en amont ne repond a cette composition, et
son annotation citait sparql_query -- une citation exacte attachee a une
affirmation fausse. Une composition ne s'aligne pas sur une fonction.

Ce qui reste est ce qu'il y avait dessous : docs.sparqlQuery ancre sur un
document, qui va deja chercher la cle servie par le magasin public -- donc
une reference nue suffit toujours pour lire un document public, sans rien
changer a useShapeQuery. Lire plusieurs documents, c'est cet appel une fois
par document, et la tolerance a une lecture qui echoue revient a l'appelant,
la ou l'amont la laisse : une requete ancree sur un depot que le verifier ne
detient pas rejette.

Cote src, l'unique lecture interne restante devient read-document.ts : un
document, une requete ancree, precedee de l'ouverture du depot -- barriere
que index-deposit consulte pour distinguer une absence d'un depot non
synchronise. Le harnais e2e et l'exemple composent la leur, avec leur catch
visible au point d'appel.

Version majeure : 1.0.0-dev.8.
2026-09-21 14:08:05 +02:00
Sylvain Duchesne 05a0f7b148 docs: nommer les deux lectures, et dire laquelle est une primitive 2026-09-21 13:40:35 +02:00
Sylvain Duchesne d0ea043a5b feat!: la famille ORM est publiee enveloppee, et le ng publie cesse de rendre des promesses 2026-09-21 12:38:17 +02:00
Sylvain Duchesne 2aac703784 chore: la suppression de readUnion est bloquee par un manque de notre cote 2026-09-21 12:17:15 +02:00
Sylvain Duchesne 77e78ec81d feat!: useShapeQuery lit par la requete de forme du SDK 2026-09-21 11:41:31 +02:00
Sylvain Duchesne a5e553e65b chore: readUnion a un consommateur declare, et son fake masque la rupture 2026-09-21 11:34:20 +02:00
Sylvain Duchesne d440639616 chore: aucun element du SDK n'est republie tel quel 2026-09-21 11:07:23 +02:00
Sylvain Duchesne 82769c4939 chore: les paquets ng-org rattrapent le deploiement, et la lecture vive demarre 2026-09-21 11:02:08 +02:00
Sylvain Duchesne 4a4e6af337 chore: ng-e2e-helpers suit alpha.14, et la mise a jour des paquets devient une tache 2026-09-21 10:52:07 +02:00
Sylvain Duchesne d0ca5c5d41 feat!: useShapeQuery prend le Scope du SDK, et un store se nomme par sa reference 2026-09-16 16:47:09 +02:00
Sylvain Duchesne ee9319f89b docs: ce que l'ORM offre pour ecrire et supprimer, et la vraie cause du useShape mort 2026-09-16 16:04:22 +02:00
Sylvain Duchesne dd874bb9c4 feat: une cible annoncee mais pas encore ecrite a desormais sa categorie 2026-09-16 15:33:14 +02:00
Sylvain Duchesne 1a4857cb75 chore: les arbitrages de la session entrent dans les taches 2026-09-16 15:22:05 +02:00
Sylvain Duchesne eb8a7163a2 chore: l'arbre de travail pour l'alignement de la surface 2026-09-16 12:20:57 +02:00
Sylvain Duchesne 820552d263 docs: la surface publiée reprend les noms, paramètres et retours du SDK 2026-09-16 12:12:01 +02:00
Sylvain Duchesne 88ce8d17c5 docs: readUnion énumère par contrainte d'émulation, pas par manque de la cible 2026-09-15 15:31:07 +02:00
Sylvain Duchesne e5d73a670b fix: une panne n'est plus mise en cache comme une absence de capacité 2026-09-15 12:12:47 +02:00
Sylvain Duchesne 817f9074c4 chore: la règle fondamentale devient toujours chargée, et la chaîne cesse d'être morte au sommet 2026-08-27 14:29:42 +02:00
Sylvain Duchesne f6a48a4507 fix: un dépôt est délivré une fois et retiré, comme en amont 2026-08-26 14:11:56 +02:00
Sylvain Duchesne abfb619c76 docs: ce qu'un IRI dit en amont, et pourquoi l'échafaudage ne partage pas le namespace de la donnée polyfill/v1.0.0-dev.3 2026-08-21 22:28:09 +02:00
Sylvain Duchesne 3dfc231005 feat: un dépôt est aiguillé sur son type, comme en amont, et l'index a son bras 2026-08-21 19:28:48 +02:00
Sylvain Duchesne 1b4fcb567e docs: qui traite une inbox, acteur par acteur — et watch absorbe sans classer 2026-08-20 14:31:24 +02:00
Sylvain Duchesne 0e57f20ca4 docs: consigner deux défauts vivants, dont une absence qui masque un échec polyfill/v1.0.0-dev.2 2026-08-20 11:05:34 +02:00
Sylvain Duchesne c61b181ed8 chore: le manifeste rattrape la version que le contrat annonce 2026-08-20 11:04:49 +02:00
Sylvain Duchesne 6a99585efc fix: dire le pari comme un pari, et distinguer deux manques d'inbox que rien ne distinguait 2026-08-20 10:47:39 +02:00
Sylvain Duchesne c507e79f8a docs: ce que NextGraph offre vraiment autour des inbox, et ce qui n'est qu'un nom réservé 2026-08-20 10:30:31 +02:00
Sylvain Duchesne fafac38907 docs: dire l'observation continue, sa limite, et ce qu'ensureIdentity ne promet pas 2026-08-17 14:47:40 +02:00
Sylvain Duchesne c7c6cb96ea fix: une tentative dépassée n'ouvre plus rien, et libère ce qu'elle avait ouvert 2026-08-17 14:01:07 +02:00
Sylvain Duchesne 7b35300723 fix: un rejet tardif ne ferme plus un canal vivant, un registre illisible ne perd plus toutes les inbox 2026-08-17 12:17:59 +02:00
Sylvain Duchesne 6eaff0b985 docs: une seule copie du polyfill par application, sinon deux identités courantes 2026-08-17 11:48:25 +02:00
Sylvain Duchesne 33212a8b00 fix: un abonnement en échec n'empoisonne plus le document, et un dépôt ne change plus de destinataire 2026-08-17 11:47:21 +02:00
Sylvain Duchesne 520c8c59a8 refactor(e2e): prendre les types navigateur chez les helpers plutôt que chez playwright 2026-08-17 11:12:26 +02:00
Sylvain Duchesne 935cce4d7b fix: un second doc_subscribe tuait le premier, et les inbox n'étaient lues qu'à la connexion 2026-08-17 11:11:04 +02:00