discovery-media-player 0.1.91 → 0.1.92

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/package.json +1 -1
  2. package/server/schema.js +29 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "discovery-media-player",
3
- "version": "0.1.91",
3
+ "version": "0.1.92",
4
4
  "description": "Self-hosted document viewer: per-recipient tracked links, reading analytics, live presentation. The core knows nothing about the application hosting it — everything it borrows arrives through an injected context.",
5
5
  "keywords": [
6
6
  "pdf-viewer",
package/server/schema.js CHANGED
@@ -303,7 +303,35 @@ async function vraimentSonderTout() {
303
303
  for (const [cle] of quandNegatif) { connues.delete(cle); reponses.delete(cle); }
304
304
  quandNegatif.clear();
305
305
  for (const nom of Object.keys(ATTENDUES)) await attendue(nom);
306
- return etatDuSchema();
306
+ const etat = etatDuSchema();
307
+ await ajouterSansRang(etat);
308
+ return etat;
309
+ }
310
+
311
+ /**
312
+ * ⚠️ `mod_seq` NUL EST AMBIGU, ET UN NOMBRE AMBIGU NE MESURE RIEN. Le rattrapage de 0016 laisse
313
+ * DÉLIBÉRÉMENT sans rang les messages des présentations scellées (le scellé refuse de les écrire). Mais
314
+ * rien ne distingue « nul par décision » de « nul parce que le rattrapage n'a jamais tourné » : les
315
+ * deux se lisent « ligne sans rang ». On rend donc les DEUX nombres — total, et la part qui est
316
+ * légitimement scellée. Égaux ⇒ tout nul est un scellé attendu ; divergents ⇒ le rattrapage a laissé
317
+ * des lignes NON scellées derrière lui, anomalie à corriger. C'est la classe « une garde qu'on n'a pas
318
+ * vue refuser ne garde rien » appliquée à un compteur : le compteur devient un verdict. (relevé 2e hôte)
319
+ *
320
+ * Seulement si la colonne est là (sinon la question n'a pas de sens), et JAMAIS bloquant : un
321
+ * diagnostic ne doit pas casser la carte qu'il enrichit — mieux vaut pas de compteur qu'une carte muette.
322
+ */
323
+ async function ajouterSansRang(etat) {
324
+ const r = reponses.get("doc_presentation_messages.mod_seq");
325
+ if (!r || !r.present) return;
326
+ try {
327
+ const scellees = await PLAYER.db.request("doc_presentations?active=eq.false&control_hash=is.null&select=slug");
328
+ const setScellees = new Set((Array.isArray(scellees) ? scellees : []).map((p) => p.slug));
329
+ // `limit` borne un diagnostic sur une base gravement cassée : au-delà, la divergence suffit déjà à
330
+ // alerter, le compte exact n'ajoute rien. `is.null` et `eq` restent de la syntaxe portable.
331
+ const nuls = await PLAYER.db.request("doc_presentation_messages?mod_seq=is.null&select=slug&limit=1000");
332
+ const liste = Array.isArray(nuls) ? nuls : [];
333
+ etat.sansRang = { total: liste.length, dontScellees: liste.filter((m) => setScellees.has(m.slug)).length };
334
+ } catch { /* best-effort : un compteur absent vaut mieux qu'une carte en échec */ }
307
335
  }
308
336
 
309
337
  /** La réponse, retenue pour qui la demandera — sans repasser par la base. */