{
  "version": 1,
  "tool": "Passage",
  "checkedDate": "2026-10-05",
  "scope": "Test evidence for the supplied rigid-box geometric model. No claim of successful physical moves or adoption.",
  "engine": {
    "assertions": 84,
    "allSixExamplesSolvedWithoutStoredPaths": true,
    "narrowSofaVariants": [
      "original",
      "mirrored",
      "scaled",
      "wider"
    ],
    "source": "/checks/research/passage/engine-tests.mjs",
    "portableCommand": "node engine-tests.mjs --engine=./engine.mjs --checker=./checker.mjs"
  },
  "independentChecker": {
    "checker": "passage-checker-1.0.0",
    "namedCases": 16,
    "seededCases": 50,
    "rejectedMalformedModels": 18,
    "assertions": 242,
    "plantedFaultsExposed": [
      "omit translation displacement",
      "omit rotational displacement",
      "certify sampled midpoints only",
      "ignore floor and ceiling",
      "ignore all obstacles",
      "ignore later furniture components",
      "overstate certified clearance"
    ],
    "portableCLI": true
  },
  "independentLPOracle": {
    "method": "Convex-combination feasibility using SciPy HiGHS, sequential vertex rotations",
    "acceptedCasesWithoutSampledIntersection": 56,
    "rejectedCasesWithSampledIntersection": 7,
    "sampledPoses": 6666,
    "counterexamplesToAcceptedCertificates": 0,
    "scope": "Independent sampled intersection check; continuous proof remains the displacement enclosure"
  },
  "browser": {
    "chromium": {
      "scope": "local public/ reader",
      "assertions": 623,
      "cases": [
        {
          "name": "connected example tight-turn: solve, scrub, play, export, independent check",
          "passed": true
        },
        {
          "name": "connected example open-plan: solve, scrub, play, export, independent check",
          "passed": true
        },
        {
          "name": "connected example tip-through-door: solve, scrub, play, export, independent check",
          "passed": true
        },
        {
          "name": "connected example sofa-corner: solve, scrub, play, export, independent check",
          "passed": true
        },
        {
          "name": "connected example stand-at-corner: solve, scrub, play, export, independent check",
          "passed": true
        },
        {
          "name": "connected example over-steps: solve, scrub, play, export, independent check",
          "passed": true
        },
        {
          "name": "full project save, units, edit, undo, reload and reimport",
          "passed": true
        },
        {
          "name": "portable checker from reader bytes, including a forged scene",
          "passed": true
        },
        {
          "name": "fresh user geometry, keyboard tabs, manual route and invalid imports",
          "passed": true
        },
        {
          "name": "cancel and edit while real worker results are pending",
          "passed": true
        },
        {
          "name": "sofa parameters reject invalid dimensions without silent adjustment",
          "passed": true
        },
        {
          "name": "build a measured doorway and handle an inconclusive search",
          "passed": true
        },
        {
          "name": "390px touch editing, plan drag, undo and scrub",
          "passed": true
        },
        {
          "name": "moving plan is readable offline and reproduces the full project",
          "passed": true
        },
        {
          "name": "reduced motion, storage failure and no-WebGL capability recovery",
          "passed": true
        },
        {
          "name": "layout and names at 390px",
          "passed": true
        },
        {
          "name": "layout and names at 768px",
          "passed": true
        },
        {
          "name": "layout and names at 1440px",
          "passed": true
        },
        {
          "name": "no third-party request or private input leak",
          "passed": true
        },
        {
          "name": "no uncaught page errors or broken app assets",
          "passed": true
        }
      ],
      "uncaughtErrors": 0,
      "failedRequests": 0,
      "viewports": [
        390,
        768,
        1440
      ],
      "note": "Complete actual rendered UI, fresh route searches, interaction, downloads, offline report and independent CLI checks. Includes conservative clearance labels in centimetres, inches and the offline plan. Local public assets, before the final deployment."
    },
    "webkit": {
      "scope": "local public/ reader",
      "assertions": 185,
      "cases": [
        {
          "name": "connected example tight-turn: solve, scrub, play, export, independent check",
          "passed": true
        },
        {
          "name": "connected example open-plan: solve, scrub, play, export, independent check",
          "passed": true
        },
        {
          "name": "connected example tip-through-door: solve, scrub, play, export, independent check",
          "passed": true
        },
        {
          "name": "connected example sofa-corner: solve, scrub, play, export, independent check",
          "passed": true
        },
        {
          "name": "connected example stand-at-corner: solve, scrub, play, export, independent check",
          "passed": true
        },
        {
          "name": "connected example over-steps: solve, scrub, play, export, independent check",
          "passed": true
        }
      ],
      "uncaughtErrors": 0,
      "failedRequests": 0,
      "viewports": [
        1440
      ],
      "note": "Actual rendered UI, complete route searches, interaction, downloads and independent CLI checks. Local public assets, before deployment."
    },
    "sofaParameterValidation": {
      "scope": "local public/ reader",
      "assertions": 58,
      "cases": [
        {
          "name": "sofa parameters reject invalid dimensions without silent adjustment",
          "passed": true
        }
      ],
      "uncaughtErrors": 0,
      "failedRequests": 0,
      "note": "Exact parameter fidelity and rejection/recovery after the final input validation change."
    },
    "firefox": {
      "scope": "local public/ reader",
      "assertions": 72,
      "cases": [
        {
          "name": "fresh user geometry, keyboard tabs, manual route and invalid imports",
          "passed": true
        }
      ],
      "reportedErrors": [
        {
          "label": "user-route",
          "message": "THREE.WebGLRenderer: A WebGL context could not be created. Reason:  WebGL creation failed: \n* AllowWebgl2:false restricts context creation on this system. ()",
          "expectedFallback": false
        },
        {
          "label": "user-route",
          "message": "THREE.WebGLRenderer: A WebGL context could not be created. Reason:  WebGL creation failed: \n* AllowWebgl2:false restricts context creation on this system. ()",
          "expectedFallback": false
        },
        {
          "label": "user-route",
          "message": "THREE.WebGLRenderer: Error creating WebGL context.",
          "expectedFallback": false
        }
      ],
      "failedRequests": 0,
      "note": "Firefox keyboard, manual-route and import recovery follow-up uses the SVG fallback because this host disallows WebGL2. Context creation diagnostics are expected; no claim of Firefox 3D rendering."
    },
    "privacyFollowup": {
      "scope": "local public/ reader",
      "assertions": 13,
      "cases": [
        {
          "name": "no third-party request or private input leak",
          "passed": true
        }
      ],
      "note": "Private-input canary checked across all request URLs and bodies. The public runner records ordinary site analytics separately and permits only their exact known endpoints on HTTPS."
    },
    "liveChromium": {
      "checkedAt": "2026-10-04T22:52:17.029507+00:00",
      "releaseCommit": "3178c28c95cb192197b3ef9ded2ccdc24283bc92",
      "url": "https://artwaste.land/tools/passage/",
      "scope": "Complete public HTTPS browser run using a freshly downloaded published runner.",
      "browser": "chromium",
      "assertions": 623,
      "cases": [
        {
          "name": "connected example tight-turn: solve, scrub, play, export, independent check",
          "passed": true
        },
        {
          "name": "connected example open-plan: solve, scrub, play, export, independent check",
          "passed": true
        },
        {
          "name": "connected example tip-through-door: solve, scrub, play, export, independent check",
          "passed": true
        },
        {
          "name": "connected example sofa-corner: solve, scrub, play, export, independent check",
          "passed": true
        },
        {
          "name": "connected example stand-at-corner: solve, scrub, play, export, independent check",
          "passed": true
        },
        {
          "name": "connected example over-steps: solve, scrub, play, export, independent check",
          "passed": true
        },
        {
          "name": "full project save, units, edit, undo, reload and reimport",
          "passed": true
        },
        {
          "name": "portable checker from reader bytes, including a forged scene",
          "passed": true
        },
        {
          "name": "fresh user geometry, keyboard tabs, manual route and invalid imports",
          "passed": true
        },
        {
          "name": "cancel and edit while real worker results are pending",
          "passed": true
        },
        {
          "name": "sofa parameters reject invalid dimensions without silent adjustment",
          "passed": true
        },
        {
          "name": "build a measured doorway and handle an inconclusive search",
          "passed": true
        },
        {
          "name": "390px touch editing, plan drag, undo and scrub",
          "passed": true
        },
        {
          "name": "moving plan is readable offline and reproduces the full project",
          "passed": true
        },
        {
          "name": "reduced motion, storage failure and no-WebGL capability recovery",
          "passed": true
        },
        {
          "name": "layout and names at 390px",
          "passed": true
        },
        {
          "name": "layout and names at 768px",
          "passed": true
        },
        {
          "name": "layout and names at 1440px",
          "passed": true
        },
        {
          "name": "no third-party request or private input leak",
          "passed": true
        },
        {
          "name": "no uncaught page errors or broken app assets",
          "passed": true
        }
      ],
      "runner": {
        "url": "https://artwaste.land/checks/research/passage/browser-check.mjs",
        "sha256": "f5971d3ee8c99818cf2468671a77eaa0a4b79d91206ca4dda0a3061eb3ff0c3a",
        "bytes": 50814
      },
      "uncaughtErrors": 0,
      "appAssetFailures": 0,
      "viewports": [
        390,
        768,
        1440
      ],
      "sharedSiteAnalytics": {
        "requests": 43,
        "failedRequests": 1
      },
      "sharedSitePulse": {
        "requests": 21,
        "responses": 21,
        "http204AbortDiagnostics": 21,
        "scope": "Only exact HTTPS same-origin POST/fetch requests with body /tools/passage/, observed response 204 and net::ERR_ABORTED are separate telemetry diagnostics. Underlying transport cause is unknown. All requests remain in the private-input canary check."
      },
      "note": "All six examples searched afresh and were independently checked from downloaded projects. Full editing, cancellation, invalid-input recovery, keyboard, touch, save/reopen, offline HTML/PDF and checker, fallback and privacy journeys passed. This is browser and model evidence, not successful physical moves or adoption."
    }
  },
  "limits": [
    "JavaScript floating point with an explicit numerical allowance, not a formal interval-arithmetic proof.",
    "The continuous bound is a lower bound on modeled clearance, not the exact minimum distance.",
    "No route found does not prove that no route exists.",
    "Rigid boxes, fixed axis-aligned obstacles, rectangular room bounds.",
    "No model of carrying bodies, balance, strength, flex, friction or forces."
  ],
  "publicReaderReproduction": {
    "checkedAt": "2026-10-04T22:45:04.028Z",
    "releaseCommit": "3178c28c95cb192197b3ef9ded2ccdc24283bc92",
    "deployedBuild": {
      "commit": "3178c28c95cb192197b3ef9ded2ccdc24283bc92",
      "committedAt": "2026-10-05T09:29:13+11:00",
      "subject": "Passage: round clearance bounds down and publish reader reproduction",
      "builtAt": "2026-10-04T22:39:11.209Z",
      "shallow": true,
      "note": "The commit whose build produced the bytes you are reading. Written at prebuild by scripts/build-id.mjs. If this sha is behind main, the newer pushes have not deployed."
    },
    "scope": "Actual public HTTPS bytes, fetched to an initially empty folder and run with Node; no repository layout, package manifest or installed package in the reader folder.",
    "inputFiles": {
      "engine.mjs": {
        "url": "https://artwaste.land/tools/passage/engine.mjs",
        "bytes": 37521,
        "sha256": "4e71a4727f6f00cf83c62427412c251a51e58e3167e950fd613689dc25616760"
      },
      "checker.mjs": {
        "url": "https://artwaste.land/tools/passage/checker.mjs",
        "bytes": 13217,
        "sha256": "94ab555cea1837c9808056379efcd8d22879750746236a3dfde09a1be3cf6137"
      },
      "engine-tests.mjs": {
        "url": "https://artwaste.land/checks/research/passage/engine-tests.mjs",
        "bytes": 14434,
        "sha256": "57cb02f78ae74d0a95435b56eea7dc44f572eec3c97f1c5a8db097e3dacd7a27"
      },
      "verify-checker.mjs": {
        "url": "https://artwaste.land/checks/research/passage/verify-checker.mjs",
        "bytes": 13118,
        "sha256": "a26cd9758930766c40ec2621e171b93b1f30259e393ebc82b5626f08e5a8df73"
      }
    },
    "applicationFiles": {
      "app.mjs": {
        "bytes": 48595,
        "sha256": "4105e7996f15504fc9d6d7a42618dfce70c233609840aa31e72b9c9a10337d7c"
      },
      "style.css": {
        "bytes": 24531,
        "sha256": "0768fee8442e1f7d7778eb49addfac5fdc5601eb45db35adfccf50970dda1cd2"
      },
      "worker.mjs": {
        "bytes": 952,
        "sha256": "232e57e7148e8b2954776fcff9e89862dd12972639893cf75cc0ac67873708c5"
      },
      "check-worker.mjs": {
        "bytes": 272,
        "sha256": "7ac673e42c355030eb54f28516792aaa3fe9fb4f9c858993ce89f2c218342188"
      },
      "vendor/scene.mjs": {
        "bytes": 719549,
        "sha256": "489c0902e3060f743a804d6b2f0c6f64d8ef84c10e88ec5aa779847401ef2629"
      }
    },
    "independentChecker": {
      "checker": "passage-checker-1.0.0",
      "namedCases": 16,
      "seededCases": 50,
      "rejectedMalformedModels": 18,
      "assertions": 242,
      "plantedFaultsExposed": [
        "omit translation displacement",
        "omit rotational displacement",
        "certify sampled midpoints only",
        "ignore floor and ceiling",
        "ignore all obstacles",
        "ignore later furniture components",
        "overstate certified clearance"
      ],
      "portableCLI": true
    },
    "engineOutput": "Passage engine: 84 substantive checks passed, including continuous tunneling, rotation, floor/ceiling, half-turn convention, RRT, narrow sofa turns, edits, and cancellation.\n{\"hintFreeNarrowSofaTurns\":[{\"variant\":\"original\",\"elapsedMs\":816,\"source\":\"local-turn\",\"checkedIntervals\":1190},{\"variant\":\"mirrored\",\"elapsedMs\":815,\"source\":\"local-turn\",\"checkedIntervals\":1190},{\"variant\":\"scaled\",\"elapsedMs\":839,\"source\":\"local-turn\",\"checkedIntervals\":1412},{\"variant\":\"wider\",\"elapsedMs\":722,\"source\":\"local-turn\",\"checkedIntervals\":475}]}\n",
    "integration": {
      "toolPage": true,
      "methodPage": true,
      "catalogue": true,
      "toolsRoom": true,
      "image": true,
      "sitemap": true
    }
  },
  "suiteReconstruction": {
    "verdict": "runs",
    "entry": "research/passage/verify-checker.mjs",
    "method": "Existing publication-screen reconstruction reproduced the reference deterministically in an empty directory, discovering the separately served checker through an actual missing-file run.",
    "manifest": "/checks/manifest.json"
  }
}
