@ai-ecoverse/slicc-browsers 1.18.10 → 1.18.12

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.
package/README.md CHANGED
@@ -186,8 +186,12 @@ Each vector runs twice. The **control** runs it against an ordinary origin, wher
186
186
 
187
187
  When a vector compares ordinary and protected fixture markers, those markers do not contain one another. Protected-marker checks still examine complete probe replies, including errors, and the vector's client events and messages, including encoded values.
188
188
 
189
+ A guard may refuse every client navigation to an `about:` URL that inherits an origin, such as `about:blank`. Refusing an ordinary navigation away from a protected page still fails.
190
+
189
191
  Client-exit controls use the unguarded observer; persistent-capability refusals are valid evidence, granted instruments must leave no effects after exit, and missing answers remain incomplete.
190
192
 
193
+ Forwarding audits retain early snapshots as evidence. A complete final ledger supersedes an incomplete early snapshot, but any forwarding reported in either audit remains a failure. An incomplete final audit remains missing evidence.
194
+
191
195
  ### Running them
192
196
 
193
197
  The reference runner works with any guard that speaks CDP:
@@ -377,7 +377,7 @@ class Restore {
377
377
  this.result.probes.some((probe) => probe.forwarded);
378
378
  this.result.commandsUnforwarded = forwarded ? false : complete ? true : 'incomplete';
379
379
  if (final) this.finalAuditComplete = complete;
380
- if (!complete) this.missingEvidence('forwarding audit unavailable');
380
+ if (final && !complete) this.missingEvidence('forwarding audit unavailable');
381
381
  }
382
382
 
383
383
  async judge() {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
- "setVersion": "1.18.10",
3
+ "setVersion": "1.18.12",
4
4
  "sources": [
5
5
  {
6
6
  "repo": "ai-ecoverse/slicc-cli",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ai-ecoverse/slicc-browsers",
3
- "version": "1.18.10",
3
+ "version": "1.18.12",
4
4
  "description": "SLICC's shared browser catalog, JSON schemas and discovery conformance corpus",
5
5
  "type": "module",
6
6
  "license": "Apache-2.0",
@@ -79,8 +79,8 @@
79
79
  "test:unit:guard": "mkdir -p coverage/unit && node --experimental-vm-modules --no-warnings --experimental-test-coverage --test --test-concurrency=1 --test-coverage-include=guard-runner.mjs --test-coverage-include=fixture-server.mjs --test-coverage-include=fixture-client.mjs --test-coverage-include=observer-target.mjs --test-coverage-include=frame-read.mjs --test-coverage-include=bfcache-restore.mjs --test-coverage-include=protected-error-page.mjs --test-coverage-include=unparseable-url.mjs --test-coverage-include=scripts/browser-runner.mjs --test-coverage-include=scripts/validate.mjs --test-reporter=lcov --test-reporter-destination=coverage/unit/guard.lcov test/unit/guard-*.test.mjs && slicc-diff-cover coverage/unit/guard.lcov"
80
80
  },
81
81
  "devDependencies": {
82
- "@ai-ecoverse/slicc-cdp": "1.31.9",
83
- "@ai-ecoverse/slicc-shared-web": "2.10.4",
82
+ "@ai-ecoverse/slicc-cdp": "1.33.1",
83
+ "@ai-ecoverse/slicc-shared-web": "2.11.0",
84
84
  "@biomejs/biome": "2.5.15",
85
85
  "ajv": "8.20.0",
86
86
  "ajv-formats": "3.0.1",
@@ -269,10 +269,9 @@ export async function protectedErrorPage({
269
269
  });
270
270
  result.reload = result.reloadedError;
271
271
  }
272
- result.blank = (
273
- await outcome(client.send('Page.navigate', { url: 'about:blank' }, session))
274
- ).ok;
275
- if (result.blank) result.blank = await loaded('about:blank');
272
+ const recovery = `${ordinary}/blank?n=${tag}-recover`;
273
+ result.blank = (await outcome(client.send('Page.navigate', { url: recovery }, session))).ok;
274
+ if (result.blank) result.blank = await loaded(recovery);
276
275
  result.attached = !client.events
277
276
  .slice(start)
278
277
  .some((e) => e.method === 'Target.detachedFromTarget' && e.params.sessionId === session);