The geometry extraction (its model provides meshes).
The wasm tile pool surface to commit through.
The assets (meshes) a product references, extracting it on first ask.
Attribution walks the product's representation-item closure (recursing through mapped items into their shared source representations) and claims every item that has an extracted mesh — NOT a before/after diff of the mesh set. The distinction is the mapped-item case: a shared source's meshes already exist when the second product asks, so a diff would omit them and its tile would not hold references to geometry it renders. Closure attribution is extraction-order independent.
The product's local ID.
One asset per referenced mesh, keyed by the mesh's representation-item localID (shared across products for mapped sources), sized at exact reified cost.
The production TileAssetExtractor (Phase B3): drives the per-product demand extraction seam (Phase B2) and commits the resulting meshes into the wasm tile pool.
Asset identity: one asset per produced mesh, keyed by the mesh's localID (the representation item). Mapped items reuse representation geometry across products, so shared representations become shared assets — the sharing the pools refcount.
Contract notes:
assetsOfruns the (expensive) per-product extraction on first call and caches the asset list; sizes are exact reified byte costs, so the TS accounting layer admits with real numbers. This front-loads cost intoassetsOfby design — seeGeometryTilePool.extract's pricing pass.materializecommits an already-extracted mesh into the pool;discardreleases the wasm tile. The CPU-side canonical mesh is left in place in this phase (serving uploads from tiles — and dropping the fat working geometry — is the Phase C flip).