{
  "schema": "two-futures-source-manifest-v1",
  "sourceProject": "repository:storm-table",
  "sourceInstructions": "repository:storm-table/AGENTS.md",
  "sourceReadme": "repository:storm-table/README.md",
  "threeVersion": "0.180.0",
  "threeLicense": "assets/licenses/three-MIT.txt",
  "sourceWorldBaseline": "assets/provenance/original-world.ts",
  "modelBoundary": "Actual Storm Table exhibit solver; time-compressed and uncalibrated, not a site forecast. Display particles and glints are illustrative samples of actual model fields.",
  "files": [
    {
      "kind": "source",
      "name": "water.ts",
      "sourcePath": "repository:storm-table/src/water.ts",
      "sourceSha256": "51673281ebd0883e5d63375eeb5c85125ccf8ca580fc833768b4aee2439149c4",
      "url": "src/source/water.ts",
      "copiedSha256": "51673281ebd0883e5d63375eeb5c85125ccf8ca580fc833768b4aee2439149c4",
      "adapted": false,
      "sha256": "51673281ebd0883e5d63375eeb5c85125ccf8ca580fc833768b4aee2439149c4"
    },
    {
      "kind": "source",
      "name": "world.ts",
      "sourcePath": "repository:storm-table/src/world.ts",
      "sourceSha256": "5c1f2659ab005fc955ba6fb0b0ebfeeb4c5744028ac836c01032aa50c82444d4",
      "url": "src/source/world.ts",
      "copiedSha256": "5c1f2659ab005fc955ba6fb0b0ebfeeb4c5744028ac836c01032aa50c82444d4",
      "adapted": true,
      "sha256": "8906351cd644b9487cd0edba6c531e1f8caadaaaad53c5c44e183f42ef94df0c"
    },
    {
      "kind": "source",
      "name": "rocks.ts",
      "sourcePath": "repository:storm-table/src/rocks.ts",
      "sourceSha256": "8d03c08cc50b858b81626b87d6899edaf543573ac66deaa21001311046692c8f",
      "url": "src/source/rocks.ts",
      "copiedSha256": "8d03c08cc50b858b81626b87d6899edaf543573ac66deaa21001311046692c8f",
      "adapted": false,
      "sha256": "8d03c08cc50b858b81626b87d6899edaf543573ac66deaa21001311046692c8f"
    },
    {
      "kind": "source",
      "name": "vegetation.ts",
      "sourcePath": "repository:storm-table/src/vegetation.ts",
      "sourceSha256": "07d98ac96d01b5f788633f06b938bbfad3d1f95a7673d69a2b870b89e835d554",
      "url": "src/source/vegetation.ts",
      "copiedSha256": "07d98ac96d01b5f788633f06b938bbfad3d1f95a7673d69a2b870b89e835d554",
      "adapted": false,
      "sha256": "07d98ac96d01b5f788633f06b938bbfad3d1f95a7673d69a2b870b89e835d554"
    },
    {
      "kind": "source",
      "name": "structures.ts",
      "sourcePath": "repository:storm-table/src/structures.ts",
      "sourceSha256": "d7a01b4c3739c8604006b03e949bf1eaeef9475a8902648788a065740e88c052",
      "url": "src/source/structures.ts",
      "copiedSha256": "d7a01b4c3739c8604006b03e949bf1eaeef9475a8902648788a065740e88c052",
      "adapted": false,
      "sha256": "d7a01b4c3739c8604006b03e949bf1eaeef9475a8902648788a065740e88c052"
    },
    {
      "kind": "source",
      "name": "structure-visual.ts",
      "sourcePath": "repository:storm-table/src/structure-visual.ts",
      "sourceSha256": "ea170c79036f5b5a5d492eefdf08d1067ba98770f94d38c7135677c70ed7bb56",
      "url": "src/source/structure-visual.ts",
      "copiedSha256": "ea170c79036f5b5a5d492eefdf08d1067ba98770f94d38c7135677c70ed7bb56",
      "adapted": false,
      "sha256": "ea170c79036f5b5a5d492eefdf08d1067ba98770f94d38c7135677c70ed7bb56"
    },
    {
      "kind": "asset",
      "name": "gravelly-sand-color.webp",
      "sourcePath": "repository:storm-table/public/assets/gravelly-sand-color.webp",
      "sourceSha256": "1f4541862a8a6204f59e9f84a1c0cfca8378fecb6a73451f0a35a0630cfbcda7",
      "url": "assets/gravelly-sand-color.webp",
      "sha256": "1f4541862a8a6204f59e9f84a1c0cfca8378fecb6a73451f0a35a0630cfbcda7",
      "bytes": 395136,
      "rights": "CC0 \u2014 Poly Haven Gravelly Sand; project-resized WebP"
    },
    {
      "kind": "asset",
      "name": "gravelly-sand-normal.webp",
      "sourcePath": "repository:storm-table/public/assets/gravelly-sand-normal.webp",
      "sourceSha256": "adce7831c30a425da302b9b06c998d2352c077ae80fc786625ea57fcb49cff5a",
      "url": "assets/gravelly-sand-normal.webp",
      "sha256": "adce7831c30a425da302b9b06c998d2352c077ae80fc786625ea57fcb49cff5a",
      "bytes": 537416,
      "rights": "CC0 \u2014 Poly Haven Gravelly Sand; project-resized WebP"
    },
    {
      "kind": "asset",
      "name": "gravelly-sand-rough.webp",
      "sourcePath": "repository:storm-table/public/assets/gravelly-sand-rough.webp",
      "sourceSha256": "d363a8ec4fe286681910d83f0d761e991331094cccff6674489190539abf42f6",
      "url": "assets/gravelly-sand-rough.webp",
      "sha256": "d363a8ec4fe286681910d83f0d761e991331094cccff6674489190539abf42f6",
      "bytes": 100728,
      "rights": "CC0 \u2014 Poly Haven Gravelly Sand; project-resized WebP"
    },
    {
      "kind": "asset",
      "name": "saguaro.glb",
      "sourcePath": "repository:storm-table/public/assets/saguaro.glb",
      "sourceSha256": "5f604761bfb12ccc84c00ad343800cc61ec5c723093d13cb49819054601b4908",
      "url": "assets/saguaro.glb",
      "sha256": "5f604761bfb12ccc84c00ad343800cc61ec5c723093d13cb49819054601b4908",
      "bytes": 364484,
      "rights": "Desert Data Labs source-owned model; no inferred third-party licensing grant"
    },
    {
      "kind": "asset",
      "name": "sonoran-storm-light.webp",
      "sourcePath": "repository:storm-table/public/assets/sonoran-storm-light.webp",
      "sourceSha256": "216290b5edea9828d5bb1820321cee05a6a015eb03d5f67e561374613575398b",
      "url": "assets/sonoran-storm-light.webp",
      "sha256": "216290b5edea9828d5bb1820321cee05a6a015eb03d5f67e561374613575398b",
      "bytes": 563720,
      "rights": "Timothy Gilbert original photograph; source project-authorized use"
    }
  ],
  "adaptations": [
    "Only world.ts is adapted; water.ts, structures.ts, rocks.ts, vegetation.ts and structure-visual.ts remain byte-identical to source.",
    "Optional draw flag separates source visual update from rendering. Absolute model-time presentation drives identical seeded rain positions, water/grass shader clocks and direct source lighting formulas.",
    "Native background grass and pebbles are re-evaluated from current model exposure on each comparison frame. Their unrecorded historical transport/loss caches do not survive scrubbing; explicit planted objects remain solver state.",
    "Cosmetic rock rotation derives from saved model travel and current velocity (seeded fallback axis when at rest), rather than visitation order. It does not change the solver.",
    "Asset readiness reports successful paths and source procedural fallbacks. Atmosphere CSS is scoped to the canvas parent.",
    "Resource disposal covers terrain/water/rocks/template materials, geometries, textures, shadows and observers. DPR capped at 1.5 desktop, 1.35 phone or 1 safe mode.",
    "Adapter initial camera fits the real 18 m table at its current aspect; camera choreography remains host-owned. No new water shader colors, depth thresholds, physics coefficients or calibrated claims.",
    "On phone, both renderer buffers use the visible panel dimensions and capped DPR, including the hidden branch, preserving portrait projection in direct paired PNG captures. No solver or camera pose changes."
  ],
  "adapter": {
    "url": "src/world-adapter.ts",
    "sha256": "76355872cb649b4d6bf765670c823f73c1bfa9d5123ef621252c852efb751d7e"
  },
  "assetNotices": "assets/licenses/ASSET-NOTICES.md",
  "verification": {
    "strictTypeScriptNoEmit": "pass",
    "sourceWaterShadersByteIdentical": true,
    "sourcePhysicsModulesByteIdentical": [
      "water.ts",
      "structures.ts"
    ],
    "integratedVisualReview": "Arrival, native wet/turbid flow at 20 model seconds, and first-consequence focus inspected in live Chrome. Phone hidden-buffer mismatch reproduced and fixed in adapter. Rebuilt r2 at 390 px verified both branch drawing buffers at 375 x 447; actual downloaded paired PNG inspected, with aligned portrait projection and no stretching. Analytic lens and terrain-following event ring inspected on phone. Temporary viewport override reset.",
    "portraitComparisonPlate": "assets/qa/r2-phone-comparison.png"
  },
  "threeLicenseSha256": "bfe119ea4fd413f5f7ca3fcd63adb0c4a073ed39daa2fe7d3e6b769e21272601",
  "publicDelivery": {
    "adaptedWorldSHA256": "8906351cd644b9487cd0edba6c531e1f8caadaaaad53c5c44e183f42ef94df0c",
    "change": "Six loader/report URL strings changed from /assets/ to ./assets/ for the nested canonical route; render logic and shader unchanged."
  }
}
