@vantageos/backend-doctor 0.1.8 → 0.1.9

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.
@@ -410,11 +410,15 @@ export function scanR50(files) {
410
410
  // so the verdict is CNJ-with-sites, not a misleading empty abstain. Gated on "scan
411
411
  // otherwise empty" so a tree that already produced subjects (VP: 20 conform) is
412
412
  // byte-for-byte unchanged.
413
- if (scan.conform.length + scan.violate.length + scan.cnj.length === 0 &&
414
- ungated.length > 0) {
415
- for (const u of ungated)
416
- scan.cnj.push(u);
417
- }
413
+ // A bare ungated public read (no throw / resolver / marker) is NEVER a silent
414
+ // clean bill — whether the scan is otherwise empty (a fully-ungated backend) OR
415
+ // mixed (bare reads alongside gated subjects). Surface EVERY such read as
416
+ // could-not-judge naming its site: never conformed, never dropped. (Eta mixed-tree
417
+ // follow-up: the prior "scan otherwise empty" guard silently dropped bare ungated
418
+ // reads whenever any gated subject also existed — a bare read hidden behind a
419
+ // conforming sibling. Removed: the disposition is per-def, not per-tree.)
420
+ for (const u of ungated)
421
+ scan.cnj.push(u);
418
422
  return scan;
419
423
  }
420
424
  export const R50 = srcDetector("R-50", "R-50 org isolation on a reactively-subscribed read returns a typed empty/unauthorized result, never an uncaught throw", "a public query that resolves org via a fail-closed non-throwing path or documents its client contract — it never throws on the missing-org path a subscribing client cannot catch", scanR50, "R-50: no public query matched in the scanned tree — no reactive read to certify. NOT a clean bill.");
@@ -321,11 +321,16 @@ export function scanR51(files) {
321
321
  // abstain. Gated on "scan otherwise empty" so a tree that already produced
322
322
  // subjects (VP: 7 marker CNJ) is byte-for-byte unchanged — the bare-write
323
323
  // disposition in a mixed tree is out of this fix's scope.
324
- if (scan.conform.length + scan.violate.length + scan.cnj.length === 0 &&
325
- ungated.length > 0) {
326
- for (const u of ungated)
327
- scan.cnj.push(u);
328
- }
324
+ // A bare ungated public write (no throw / typed-unauth / marker) is NEVER a silent
325
+ // clean bill — whether the scan is otherwise empty (a fully-ungated public-write
326
+ // surface) OR mixed (bare writes alongside gated/marker subjects). Surface EVERY
327
+ // such write as could-not-judge naming its site: never conformed, never dropped.
328
+ // (Eta mixed-tree follow-up: the prior "scan otherwise empty" guard silently
329
+ // dropped bare ungated writes whenever any gated/marker subject also existed — a
330
+ // bare write hidden behind a sibling that happened to produce a verdict. Removed:
331
+ // the disposition is per-def, not per-tree.)
332
+ for (const u of ungated)
333
+ scan.cnj.push(u);
329
334
  return scan;
330
335
  }
331
336
  export const R51 = srcDetector("R-51", "R-51 a public mutation returns a typed unauthorized result on the no-org path, never an uncaught throw a pre-org client shell cannot render", "a public write either returns a typed unauthorized result / documents its client contract, or a human confirms a pre-org client cannot reach it — it never throws NO_ORG on a path an ordinary render can hit", scanR51, "R-51: no public mutation matched in the scanned tree — no write to certify. NOT a clean bill.");
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vantageos/backend-doctor",
3
- "version": "0.1.8",
3
+ "version": "0.1.9",
4
4
  "description": "A conformance instrument that measures the VantagePeers backend against the pinned backend standard. The THIRD doctor built ON the @vantageos/mcp-doctor engine — never a third engine. It consumes runDoctor/renderTable and adds only detectors.",
5
5
  "type": "module",
6
6
  "main": "./dist/cli.js",