@descix/frqtl-node 0.6.0-p1.1 → 0.6.0

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.
Files changed (80) hide show
  1. package/CLAUDE.md +2 -2
  2. package/README.md +6 -4
  3. package/dist/dist-manifest.json +71 -65
  4. package/dist/eyes/index.js +5 -2
  5. package/dist/fat/pkg-node/package.json +2 -10
  6. package/dist/frqtl/compat/providers/wasm-engine.js +3 -4
  7. package/dist/frqtl/compat/renderer/providers/p5-provider.js +1 -1
  8. package/dist/frqtl/objects/FrqtlApp.js +33 -6
  9. package/dist/frqtl/objects/RecipeContext.js +284 -13
  10. package/dist/frqtl/objects/constants/WallBehaviors.js +1 -1
  11. package/dist/frqtl/objects/instruments/capture.js +1 -24
  12. package/dist/frqtl/objects/instruments/hosted-eyes.js +216 -29
  13. package/dist/frqtl/objects/objects/makeControlsForObject.js +5 -5
  14. package/dist/frqtl/objects/record/Record.js +346 -0
  15. package/dist/frqtl/objects/record/open-record.js +22 -0
  16. package/dist/frqtl/objects/schema/engine-scopes.js +2 -2
  17. package/dist/frqtl/objects/schema/scopes.js +2 -2
  18. package/dist/frqtl/objects/setup/_worldInit.js +1 -2
  19. package/dist/frqtl/objects/setup/setupBlackbodySubstrate.js +1 -2
  20. package/dist/frqtl/parts/CameraControls.js +8 -0
  21. package/dist/frqtl/parts/DetectorWall.js +1 -1
  22. package/dist/frqtl/parts/FrqtlVision.js +21 -6
  23. package/dist/frqtl/parts/GraphingDetectorWall.js +7 -7
  24. package/dist/frqtl/parts/LargeObject.js +2 -2
  25. package/dist/frqtl/parts/LiveChart.js +2 -2
  26. package/dist/frqtl/parts/LogicGate.js +3 -3
  27. package/dist/frqtl/parts/OvenBox.js +1 -1
  28. package/dist/frqtl/parts/PointSource.js +1 -1
  29. package/dist/frqtl/parts/SlitLightSource.js +1 -1
  30. package/dist/frqtl/parts/SlitScreen.js +1 -1
  31. package/dist/frqtl/parts/SphereEmitter.js +12 -12
  32. package/dist/frqtl/parts/Trace.js +1 -1
  33. package/dist/frqtl/parts/Tunnel.js +11 -11
  34. package/dist/frqtl/parts/Wall.js +20 -10
  35. package/dist/frqtl/scenes/circuit-sat.js +1 -0
  36. package/dist/frqtl/scenes/dse-one-emitter.js +32 -34
  37. package/dist/frqtl/scenes/dse-two-emitters.js +33 -34
  38. package/dist/frqtl/scenes/mirror-route.js +96 -79
  39. package/dist/shim/bundle/index.js +118 -96
  40. package/dist/shim/bundle/indexHtml.js +66 -39
  41. package/dist/shim/controls/index.js +1 -1
  42. package/dist/shim/engine/artifact-shell.js +1 -1
  43. package/dist/shim/engine/router.js +3 -3
  44. package/dist/shim/host/host-view.js +228 -0
  45. package/dist/shim/host/index.js +18 -0
  46. package/dist/shim/index.js +3 -5
  47. package/dist/shim/notebook/format.js +1 -1
  48. package/dist/shim/notebook/kernel.js +1 -1
  49. package/dist/shim/notebook/setup-builder.js +2 -2
  50. package/dist/shim/notebook/store.js +2 -3
  51. package/dist/shim/package.json +1 -0
  52. package/dist/shim/page-params/index.js +2 -30
  53. package/dist/shim/project/fork.js +293 -0
  54. package/dist/shim/project/identity.js +3 -1
  55. package/dist/shim/project/index.js +16 -3
  56. package/dist/shim/project/link.js +224 -46
  57. package/dist/shim/project/manifest.js +151 -0
  58. package/dist/shim/project/parts-writer.js +68 -7
  59. package/dist/shim/project/read-text.js +43 -0
  60. package/dist/shim/project/record-format.js +345 -0
  61. package/dist/shim/project/specifiers.js +104 -15
  62. package/dist/shim/registry/exhibits.js +15 -34
  63. package/dist/shim/registry/index.js +3 -3
  64. package/dist/shim/registry/scene-roster.js +35 -0
  65. package/dist/shim/registry/scene-source.js +48 -64
  66. package/dist/shim/registry/walkthrough.js +6 -6
  67. package/dist/shim/render-state/apply.js +66 -31
  68. package/dist/shim/render-state/index.js +6 -2
  69. package/dist/shim/runtime/index.js +4 -4
  70. package/dist/shim/storage/codec-chains.js +88 -0
  71. package/dist/shim/storage/folders.js +205 -0
  72. package/dist/shim/storage/index.js +64 -8
  73. package/dist/shim/storage/make-namespace-store.js +5 -5
  74. package/llms.txt +4 -3
  75. package/package.json +19 -1
  76. package/dist/shim/bundle/frqnb.js +0 -112
  77. package/dist/shim/bundle/manifest.js +0 -95
  78. package/dist/shim/registry/experiments.js +0 -215
  79. package/dist/shim/storage/modules.js +0 -249
  80. package/dist/shim/storage/projects.js +0 -150
package/CLAUDE.md CHANGED
@@ -2,10 +2,10 @@
2
2
 
3
3
  A discrete cellular-automata physics engine (compiled Rust → WASM) for node: the same modules as
4
4
  `@descix/frqtl-web` (one source, built twice), plus the node engine door `bootNode` and the hosted eyes.
5
- Pre-release `0.6.0-p1.1` (npm dist-tag `next`). Node ≥ 22.12.
5
+ `0.6.0` (npm dist-tag `latest`). Node ≥ 22.12.
6
6
 
7
7
  ## Install
8
- npm install @descix/frqtl-node@next
8
+ npm install @descix/frqtl-node
9
9
 
10
10
  ## Rung 0 — the seven primitives
11
11
  ```js
package/README.md CHANGED
@@ -4,11 +4,11 @@ FRQTL for node: a discrete cellular-automata physics engine (compiled Rust → W
4
4
  local per-pixel rules — a frame moves one pixel per tick, single occupancy, momentum — rather than force
5
5
  equations. Interference, blackbody spectra and atom-like binding emerge from the automaton.
6
6
 
7
- Pre-release `0.6.0-p1.1` (npm dist-tag `next`). Node ≥ 22.12.
7
+ `0.6.0` (npm dist-tag `latest`). Node ≥ 22.12.
8
8
 
9
9
  ## Install
10
10
 
11
- npm install @descix/frqtl-node@next
11
+ npm install @descix/frqtl-node
12
12
 
13
13
  ## Rung 0 — the seven primitives
14
14
 
@@ -31,11 +31,13 @@ const tick = u.doTick(); // TickData: fr
31
31
  | `.` | the parts (`Wall`, `SphereEmitter`, `Tunnel`, `FrqtlVision`, …), `bootNode`, the engine accessors (`engine`, `engineState`), the capture contracts (`FrqtlCapture`, `RenderStages`, `FieldBuilder`, `CaptureEnvelope`) and `validateRendererProvider` |
32
32
  | `./eyes` | `openHostedEyes` — a `composite` still through the REAL renderer, in a managed headless browser (pulls the pinned `playwright`) |
33
33
  | `./parts`, `./parts/*` | the parts barrel; one part = one file |
34
- | `./project` | `FRQTL_WEB_SPECIFIERS`, `libPathOf`, `importMapFor`, `pageImportMapFor`, `linkProject`, `sketchProject`, `SKETCH_ENTRY`, `projectIdentity` |
35
- | `./registry` | the walk-through rungs, the showcase roster, the experiment registry, `loadSceneSource` |
34
+ | `./project` | `FRQTL_WEB_SPECIFIERS`, `libPathOf`, `importMapFor`, `pageImportMapFor`, `FRQTL_WEB_HOST_SPECIFIERS`, `linkProject`, `sketchProject`, `SKETCH_ENTRY`, `projectIdentity`, `MANIFEST_FILE`, `MANIFEST_KEYS`, `normalizeManifest`, `parseManifest`, `serializeManifest`, `manifestFor`, `RECORD_FILES`, `RECORD_KEYS`, `CHANGE_KEYS`, `OPS`, `BY`, `CLIP_SECONDS`, `CLIP_NAME`, `clipName`, `jsonText`, `recordFolderFaults` |
35
+ | `./registry` | the walk-through rungs, the showcase roster, the scene list (`sceneGroups`), `projectOf` |
36
36
  | `./kinds` | `registerKind`, `kindNamed`, `kindOf`, `registeredKinds` |
37
+ | `./host-view` | `declareHostView`, `HOST_VIEW_OUTCOMES`, `CONTRACT_VIOLATIONS`, `HOST_SDK_SCRIPT` — the DeSciX host-view declarer (pure: a node test can drive a call site with a stub SDK) |
37
38
  | `./register` | installs the resolve hook for a sketch's `@descix/frqtl-web/...` imports (`node --import @descix/frqtl-node/register`) |
38
39
  | `./shim/controls/registry.js`, `./shim/render/sun-look.js`, `./compat/renderer/display-slot.js`, `./compat/renderer/orbit-bag.js`, `./objects/setup/_collisionMatrixLanes.js`, `./compat/engine.js` | the six non-part modules a scene may import (the rows of `FRQTL_WEB_SPECIFIERS`) |
40
+ | `./objects/objects/tagger.js`, `./objects/schema/index.js`, `./shim/render/heat-colormap.js`, `./objects/schema/valueNormalizer.js`, `./objects/objects/Box.js`, `./objects/objects/QuantumEmitter.js`, `./shim/expr/ast-schema.js`, `./objects/objects/actionCompiler.js`, `./objects/v1-replacements.js`, `./objects/objects/slitLinerScatter.js`, `./objects/setup/setupSphereEmitter3D.js`, `./objects/objects/directedRedirectProgram.js`, `./compat/renderer/lo-drawn-center.js`, `./objects/setup/setupTunnelPointExit.js`, `./objects/constants/WallBehaviors.js`, `./objects/objects/absorbRadiation.js`, `./objects/geometry/SlabFace.js` | the 17 part-internal modules a forked part file imports (the `tier: 'part-internal'` rows of `FRQTL_WEB_SPECIFIERS`): not a scene API — the linker admits them only from a `parts/*.js` file — and they move with the parts |
39
41
  | `./dist-manifest.json` | sha256 of every dist file |
40
42
 
41
43
  These modules are the same files `@descix/frqtl-web` ships (one source, built twice).
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "name": "@descix/frqtl-node",
3
- "version": "0.6.0-p1.1",
3
+ "version": "0.6.0",
4
4
  "files": {
5
- "eyes/index.js": "c74d5595ea2f778f2f63ef3ce2b6568433cef80ec21b6d66901c1d1a942dbe9a",
5
+ "eyes/index.js": "b3563421030bb7fdd277eb697959fbe9107463cbb5478160edc7d887daa67be3",
6
6
  "fat/pkg-node/egpt_wasm.js": "5e6af1f6725c93c0e9ad7386f1785cbe639ce596a4caa19ca85729c1f2bea04d",
7
7
  "fat/pkg-node/egpt_wasm_bg.wasm": "e204498ac7439c294653476c0d214345713e6170819281b27bbbcba217a5a5e9",
8
- "fat/pkg-node/package.json": "a0c04cd40b60be10e9ddd6e1d4763fd578808321d663c6d4201530e2a4ebdba4",
8
+ "fat/pkg-node/package.json": "82d346be94b2d9f7e30b1b679c8a5e795cec838764d28727919f85a982d9911f",
9
9
  "frqtl/assets/vendor/acorn.LICENSE": "76a876cf886ff9be2a8b5e2e86514fed06223c8c9f0c1e9ee9606e93841e00b7",
10
10
  "frqtl/assets/vendor/acorn.PINNED.json": "52d5c4cf628a586aec54f780ab6b8d22ae7c22cfb290d0d86c2f589f3106b101",
11
11
  "frqtl/assets/vendor/acorn.mjs": "efb0124a960b34d53f9928c4926bfcfd300bb6a3d7ab64ee949b3a8bed1c7e5f",
@@ -13,7 +13,7 @@
13
13
  "frqtl/compat/boot-node.js": "7cfd4645f965fa3e3d3072688b268a8aa5b8b4d727c7d842d3bad841dacd1194",
14
14
  "frqtl/compat/engine.js": "a849144e80f93694290f4567fa78d09c88b277162be9f1c15ab820328690c3a4",
15
15
  "frqtl/compat/package-root.js": "9ff4b6bc958c524b5084f849c811f1491a788afc99cab81cd281add02316ff83",
16
- "frqtl/compat/providers/wasm-engine.js": "020b36623a66a6298fd1b7b7a3db549f6ab957c91526dbe99f4069e4583dd757",
16
+ "frqtl/compat/providers/wasm-engine.js": "37c91b5a42c14ad82c0cf10d46e4a10bb8d1e2e553aee59052b6267d1b03fe79",
17
17
  "frqtl/compat/providers/wasm-load-browser.js": "990a8e22f365f3d32ee8d448965a23cc85ebf62b321ee55417e500bfd5ad7f2d",
18
18
  "frqtl/compat/providers/wasm-load-node.js": "0ec1d50e204bf073caac5218b3007eff65c480a94c8d87ad567a6d80b6b6c435",
19
19
  "frqtl/compat/renderer/FieldBuilder.js": "af30df8b04ee05a006882eb8cb56ff84e76142348339d039296304877770c519",
@@ -28,7 +28,7 @@
28
28
  "frqtl/compat/renderer/orbit-bag.js": "b6671d3b35fcf5f79e228934a8032e729309e62b66920602f34c834f3f911681",
29
29
  "frqtl/compat/renderer/providers/godrays-layer.js": "be76fb8e69c74dd9bd0fb9aa6189a816d0ed29b9f4e04b60277be375b93d606c",
30
30
  "frqtl/compat/renderer/providers/index.js": "fa669158a082a0081125c81694ca79962639caf86a575ee198a815f3e13a19e7",
31
- "frqtl/compat/renderer/providers/p5-provider.js": "16d93e087643547f778b5455c2be71f48324d9d281a2a162a201a1a71d2bb703",
31
+ "frqtl/compat/renderer/providers/p5-provider.js": "39aa68c2232b123ed52ca235f264cfb57993f46a41d4b0ed8139bffbac2f64ac",
32
32
  "frqtl/compat/renderer/providers/three-camera-contract.js": "644c1cc5e381cd2af897e69762216f84716808eeb5948efb989f48c47696bc60",
33
33
  "frqtl/compat/renderer/providers/three-camera-geometry.js": "a741f72c34005fc47fb4d53cc7ef2d2df4bfa7e8eecc9a0252b1083b3d5e301a",
34
34
  "frqtl/compat/renderer/providers/three-provider.js": "08410c488dcf3290d0a950331f33d8ba6882a391308d4d4598d9cb9aa96a4c9a",
@@ -38,15 +38,15 @@
38
38
  "frqtl/compat/vendor.js": "2393ada71cdbe750d409174e1ba9b098148796efdff746b315d706a0b32e58e8",
39
39
  "frqtl/experiments/_shared/boot-failure.js": "1a92e85b06acdefede5613f2fac7cd4e61d2aba590820f1bfa92f6829fcbbdd4",
40
40
  "frqtl/node-entry.js": "a401039b4fcf53ac620edbd80985aa4448122f2e3caaeaf4d5595f5e9d512b60",
41
- "frqtl/objects/FrqtlApp.js": "d279fa343782acda0547922ac485f623669c193148c3fb2c31df0b96570f3cfd",
41
+ "frqtl/objects/FrqtlApp.js": "e3232b09eb576427df2a52393a5603b4c084d6edba5667b03afb161fd6d76b9b",
42
42
  "frqtl/objects/ObjectFactory.js": "a8f050ce61b7ab9c9b4f81e9eeaebf05c3cc0b532c741ce93d6e952489772b11",
43
- "frqtl/objects/RecipeContext.js": "ca21e08180570b587a4675bbeee1cf626f7b6cf71ba4d4d1225a805d6856865e",
43
+ "frqtl/objects/RecipeContext.js": "c8614d30b785b333c44a59f0a6bdd15a595dd0023f85ef9385f40eda5802eba8",
44
44
  "frqtl/objects/collectors/DataCollector.js": "8736d6cb77eec36ce2adcf2bc3b0d2436eeb70a73b77182ff053efdc6ca071df",
45
- "frqtl/objects/constants/WallBehaviors.js": "8a9cbdb96eadf84f1d61d215f6921124ec5dbf9e2938c09894a0aa083ddcaea0",
45
+ "frqtl/objects/constants/WallBehaviors.js": "a05c6e06923962e2cc2cf7204131e5d20bf83c5c8e85fbb13867872040345e40",
46
46
  "frqtl/objects/geometry/SlabFace.js": "847921b124d3bc1692e88c363c087d392a1baa7c652a3a61e381d0f8a8342e57",
47
47
  "frqtl/objects/instruments/capture-host.js": "ba5001afa2d8f4e438c5eacb2a5456d903401de8584d170c0b02ff3014794edd",
48
- "frqtl/objects/instruments/capture.js": "53a746cb51e1c83326eebaa98083861c7ee593f2bcb2317473446a1a02b59b5c",
49
- "frqtl/objects/instruments/hosted-eyes.js": "b6de888ea2752045feacd08333074dc01870fa20cba04ef48ae721215d9880db",
48
+ "frqtl/objects/instruments/capture.js": "6bee2bc3928f0c12d1c87b30ce461ca5ba74cbedb4c36d43f0a3061021753f83",
49
+ "frqtl/objects/instruments/hosted-eyes.js": "fc99fa3f5f1780b7f2fe66a2a3f1f6db35d5d60f1c0a5a8b36a56e49c2b4efac",
50
50
  "frqtl/objects/kinds-entry.js": "a7818357864dc900bd93350635016f938c3dca8dcb665a62df802ba5cd0b3c93",
51
51
  "frqtl/objects/kinds.js": "107b166c96c93fd517f173fdbe7006d6f0b2694d5f799f7ec9d4f695313f1832",
52
52
  "frqtl/objects/objects/Box.js": "0c08fa4753b78ef56d07aae3393a6268647b550ead58e409cff13eabc8b34b5d",
@@ -68,20 +68,22 @@
68
68
  "frqtl/objects/objects/frqtl-control-sync.js": "88de12d2ec1643b4afc2ef56ea8cc44e1213e4a73a0ad6876d59e988125c3789",
69
69
  "frqtl/objects/objects/frqtl-control-widgets.js": "73dd1e4481af66430601a105d375749c6db0bc9d736e47bd0edea9a4f9e6871c",
70
70
  "frqtl/objects/objects/frqtl-control-write-queue.js": "994d0e736f240c453fd8ab52ea6d1eed05ac27a160806037d751f4a6a6ce6295",
71
- "frqtl/objects/objects/makeControlsForObject.js": "f565f16e6c29b931e2a4625a68fec3f49bbceee73ea0d76573dd3e33fdffe066",
71
+ "frqtl/objects/objects/makeControlsForObject.js": "a3e51c526228f99ddfd10f7902fbb4dc67979726257bff131bb1d061425dbf51",
72
72
  "frqtl/objects/objects/makeControlsForRenderSurface.js": "0ba99a4106ad92c0fe9366d6610c31d60ebfa232b3552c05f68f9c5aa56c03a0",
73
73
  "frqtl/objects/objects/slitLinerScatter.js": "9413cc7efa2132c68d7b4d5030af28d92e8d085e127d5c8e1568d0028da2fc13",
74
74
  "frqtl/objects/objects/sustainedSource.js": "0c324cef1583226d090b4d1014c2576ef8237f1bad47c1511bed3c3f81e04206",
75
75
  "frqtl/objects/objects/tagger.js": "e2a5ef9ae68466afb6b157ca6d7ce03a6f126d8c91c9f9d4be6dba8e928535eb",
76
- "frqtl/objects/schema/engine-scopes.js": "1777dd3d2443df7c7d7fbcd25974bcb758606bdf3efa5c21408009167d00e3e6",
76
+ "frqtl/objects/record/Record.js": "5555c62e278654d1d54e2e3d89da4100de2d0ccae9563e62dfe4082ec7b543ba",
77
+ "frqtl/objects/record/open-record.js": "2da2abcccd3ad5bc39eb7fcfb764601cd031dd0afa9b3c9cb96b0669621827df",
78
+ "frqtl/objects/schema/engine-scopes.js": "d9d07914f748f9e7f86cc68e4d49da3b07d2bce37fea5280a88e6862ef3bb619",
77
79
  "frqtl/objects/schema/index.js": "74ba0b6a6e057cfd40edf2ce41fcce7206c0204e90eeee4a8db3b711f10ffd33",
78
- "frqtl/objects/schema/scopes.js": "3b9c2d4f20604d6384ec625ab5e4a38085fa9696c5e443ff66b45a8f2330c5f6",
80
+ "frqtl/objects/schema/scopes.js": "11c17ea958fd1cc1107d83284148fa45faa803af4b239440b56c0705f700569e",
79
81
  "frqtl/objects/schema/validate-descriptor.js": "32572a7c7f5262a46d13bcd05424555151287c4438e3e081ab2f3884fd5a2f10",
80
82
  "frqtl/objects/schema/valueNormalizer.js": "00dc4eb188f23964336d45de021846b63a3603c423b5444f132bf470c73c4354",
81
83
  "frqtl/objects/setup/_collisionMatrixLanes.js": "e5184a9e690e677bc941cce113f2d3d5c51de41d8322515fc707f5414c7b81be",
82
84
  "frqtl/objects/setup/_setupOptions.js": "bc9bff3c647418db452976b54e9f91474c59abf5acbde1d62747a11a9501cca0",
83
- "frqtl/objects/setup/_worldInit.js": "fb9b3716f93415100581e1bd12c8170d28c1d1cbda2e5236530598b197d7fdb3",
84
- "frqtl/objects/setup/setupBlackbodySubstrate.js": "eb69b5bd1e19a970b433beed3e68ce47fffe63c17bf6045b49ce776045e20fe3",
85
+ "frqtl/objects/setup/_worldInit.js": "636eb9610f0d446d7c8d660c322d31cdaaae2a35546549f92572751414ad604b",
86
+ "frqtl/objects/setup/setupBlackbodySubstrate.js": "c23b397dca46e0c30dfb50148f545a3d634e43452e3aa4d29188327d3d730705",
85
87
  "frqtl/objects/setup/setupCircuitBasic.js": "8204f7d42f8dd888e6a4e1175b16a6e67b69fb2d943af6c2b40c900b905dd453",
86
88
  "frqtl/objects/setup/setupCollisionMatrix.js": "5df3b6c93a5b1fc5f8c0a443c1d3e0003ef170bb39b6101e60b4f3017ec26f60",
87
89
  "frqtl/objects/setup/setupConeEmitter3D.js": "284d5353857817e5821d6c3897ba15b22f32388971ae149094e1353f15f0a4d6",
@@ -103,49 +105,49 @@
103
105
  "frqtl/objects/setup/setupWaveInterference.js": "b74e1406580a0bd2749686f87f9eec929e3e33c2fe6a7648cdaa2a26449e4fc1",
104
106
  "frqtl/objects/v1-replacements.js": "7be6910430fcfbbe39db2a60b991b9c0b3ded9a8c05295060107042cee6bc201",
105
107
  "frqtl/package-core.js": "4e645a91edf27f9631dd97aeafc72b11c06a7fbfc0f435d194f4635da872f6d7",
106
- "frqtl/parts/CameraControls.js": "22438f83b02004772586dc99009fb025cdf2680b7c23e9023207f58e4fafca13",
108
+ "frqtl/parts/CameraControls.js": "c31a42296256703c5d06098b1dfb548d2ad5b39de0485fb9cff71ea777a5cc7f",
107
109
  "frqtl/parts/CameraPath.js": "bf5d620b2789c76b5a79c092ae0a3dc802fa6ef28a05df2ed1935481d4bba636",
108
110
  "frqtl/parts/CollisionActions.js": "c14c7257fa8bf2add3784dfff0e78a4098640a5a8cec4b40c7cb60ba3197f3a2",
109
111
  "frqtl/parts/CollisionTypes.js": "3290b8caf557c2801d3e0a8400d7cfd0cc9cbd14ae4247707747dc109a658789",
110
- "frqtl/parts/DetectorWall.js": "49d9d9526b5e36180122617dd84b16e44624eee76fb2d547868e8cd41eeacbe0",
112
+ "frqtl/parts/DetectorWall.js": "d39ab88056fa28c322863430f8bad9704879e5d8149f1ac65adf1add057996f5",
111
113
  "frqtl/parts/FrqtlControlOverlay.js": "f862b1529265224aa96878b56b0c1c6e65683ba3fd6b517df86e17e92147f9c4",
112
114
  "frqtl/parts/FrqtlControlsPanel.js": "792d03dea218bdc335ba7e04362be620edbfa331bed9de087d61942299728cc1",
113
- "frqtl/parts/FrqtlVision.js": "d4f913f92810bf33a989858616b7dee776e01edd48fbaf4b31f0606fb85ec0fd",
114
- "frqtl/parts/GraphingDetectorWall.js": "6bff06f951459a3cd327c2eb235d159520933762be0343e1925d153fc2fe6423",
115
- "frqtl/parts/LargeObject.js": "637ea4c4b5052b916dace520cbb6772f1f8f2e367764ea399dab2a74fff4ed65",
115
+ "frqtl/parts/FrqtlVision.js": "118d0874249fa55783b196fd01297b3347951267a4add93381433a72c46e8622",
116
+ "frqtl/parts/GraphingDetectorWall.js": "83aba36a6a6c15f92c99bbe5d7e63b12b38e07be65e02e89020c065514ef5b3d",
117
+ "frqtl/parts/LargeObject.js": "d6cae738b30965f3eba4be4399fb4410f17afc3267b51e3ad9e1ba7423e17922",
116
118
  "frqtl/parts/LightColor.js": "8637e5a09bbad3a4fdd2034ccb44dfc1fda743e29b12b4c685a64b9e1df28daa",
117
- "frqtl/parts/LiveChart.js": "16fc591c02064dc2a9ea99737acbacac1e3b6c8d90079bf260d58af3016ded02",
118
- "frqtl/parts/LogicGate.js": "e21a6f030908bbcfacc9bb27e4d20cdbbb54c712034121981bdc97c6266c1d0e",
119
- "frqtl/parts/OvenBox.js": "c72f4dad019e60a300c9c96f64caf88b89a0f6dda07b06ad4189edfd3779ca54",
120
- "frqtl/parts/PointSource.js": "a43a6c13ea8ecadc09410ca19067a41de7164aa8a2f58547dc227a1efd4bf0b5",
119
+ "frqtl/parts/LiveChart.js": "8bd0b862d2f7a4e818ae9cfc47e5e0f56eb97ea0a00fb836bba3f2374c12a1ce",
120
+ "frqtl/parts/LogicGate.js": "05716711db1794ce9e29027ea16af083e5a1cc8b0657dce853cb6d2f6ee1fc02",
121
+ "frqtl/parts/OvenBox.js": "7e393dd736c6ae410d85e5fe3edbea8677e5834bd1fe7b19d4e8f46af13764ac",
122
+ "frqtl/parts/PointSource.js": "57b3b8353cba8c5ebfff6653e39948c9f0ee240449b4af08247687d3d9d9f092",
121
123
  "frqtl/parts/Rectangle.js": "8be4cae13135c3cb185d025dfd10d3a03b21d5627bfa92363c2faa021f751571",
122
- "frqtl/parts/SlitLightSource.js": "86472f096a1f1aa19c6e5d39657eed0f99df117f86152c51cdf84a56342903f7",
123
- "frqtl/parts/SlitScreen.js": "147b86b39128b245c51649f3ac66f31afae128a01e1ac30083ef252b569db75d",
124
- "frqtl/parts/SphereEmitter.js": "4163751c331aca9b45643ce67eb7e8912ffdbdb3cbd6944e9ae38f707eb0b5ca",
125
- "frqtl/parts/Trace.js": "63944f420b6538a88609a1f251b5f5d909ac9835f556d82f73525077ba6a6df6",
126
- "frqtl/parts/Tunnel.js": "4f44e901bc1171bf7c2933c794a8be63702594d7a2babc05382e91c22315b363",
127
- "frqtl/parts/Wall.js": "37ab904fdd8fa4d786c27af17d4563f0ccd0eee037d6f7c8b24fd8333058286e",
124
+ "frqtl/parts/SlitLightSource.js": "89a17aaade03e2e961af4181e6c3fd479d31c2c3298c46abc477a13f26d7a07a",
125
+ "frqtl/parts/SlitScreen.js": "bdcaa761d0aa68c415a06ab2c523a8d4553a4c48cee00fe33d5df994adcf599a",
126
+ "frqtl/parts/SphereEmitter.js": "645664f5a20924b777d9b4ad6fef6338e7de251d62c7f8a4c93e6b0f97b47d4a",
127
+ "frqtl/parts/Trace.js": "f9d91bb9435bc5fabfd7bfdbfbf3f3ae34e2338090251d9e9d6c11abc2ed25fb",
128
+ "frqtl/parts/Tunnel.js": "66bfca3d3d88ebf9a8cb7aa248b92cfc7d78a278449830b03e6b2700a21df891",
129
+ "frqtl/parts/Wall.js": "7dcb520daee3facad8698b363bb49557003439dc5841706b105bd1acabc2e0bf",
128
130
  "frqtl/parts/index.js": "70b8e227e09663889f4c7942d385f843d977579765723f829880fd6e9868ac53",
129
131
  "frqtl/scenes/absorbing-wall-3d.js": "722bb433142833f03150052b95039686aba0d9db510a5ff13fad95b5f17e0cf8",
130
132
  "frqtl/scenes/absorbing-wall.js": "0a47ca64e56481841339cd5882cf0e54ec7c14d87a4306d016ead1ff26591197",
131
133
  "frqtl/scenes/atomic-model.js": "1b484ba37d90af9c06d9bf6a114b8867c914d12cc0a0dbeec27dd96230829fac",
132
134
  "frqtl/scenes/big-bang.js": "e0807d81f4bcc6626080f81d472c6ead9c8d8f7d97bd67c6da76a476868b25f4",
133
135
  "frqtl/scenes/blackbody.js": "bdd6ee3c628f0cf1161eeb855a4a582902ab56174da937bf0d5180d930ef8278",
134
- "frqtl/scenes/circuit-sat.js": "953b19d0e5fbda0b36b7e42bda1538930578220c610a5591e0dc1b5e8f2bb06b",
136
+ "frqtl/scenes/circuit-sat.js": "db69468352e955b4ff9c36e8d3cf03cc3e88d368b6d3cc485d664bb5cb085d57",
135
137
  "frqtl/scenes/collision-matrix-3d.js": "8a0c1189d5e2f23092b216515608319643bc010ff837aadffdf84b2078c96793",
136
138
  "frqtl/scenes/counting-wall-3d.js": "1d08e60d58faeed4315400a2d0fbc10460d7869babc72a8dd7f906b5dff6ba54",
137
139
  "frqtl/scenes/counting-wall.js": "35b617a20c154f89c63d4a60a205f5d67ba8bb3342730e269528f884a522f131",
138
140
  "frqtl/scenes/double-slit.js": "d37aff36667783fe5991b8219439803facb730bd0abe9219483f2ef42056e988",
139
- "frqtl/scenes/dse-one-emitter.js": "58cfb0e55fd54d86e1896088d36c65748499c0b94826a1c6b1b6d81b7fa41437",
141
+ "frqtl/scenes/dse-one-emitter.js": "619892663838e0f018b9ade83c9994fb0709b9ed9904c92e41470a7b7fdd396f",
140
142
  "frqtl/scenes/dse-one-slit.js": "7bf299e3cc64dd3d1f8df805eec63d98d36b8592d55e3ef478d46c38bf674812",
141
143
  "frqtl/scenes/dse-photoelectric.js": "e0402c4508a4d97d3d9461f889b10a49da82ef5f232d81455c5e482db8b0bda6",
142
144
  "frqtl/scenes/dse-tunnel-rebuild.js": "c662bff31fb66c1f136b6f35d18943c58e97456b61fbab9f4cdb812e3acb2630",
143
- "frqtl/scenes/dse-two-emitters.js": "193575e850bc49d0db2e01974584b8100020ba466d39f1a9b0f121812f245f08",
145
+ "frqtl/scenes/dse-two-emitters.js": "74cf1d4b226b0ce4e337697a0327de9b95190159b2554f53e629d89525321877",
144
146
  "frqtl/scenes/dse-two-slits.js": "f303a848d9c463a5a9443c380b257795b19127b122bdd2fcb28855841b219939",
145
147
  "frqtl/scenes/empty.js": "f3c2161f7bbc1be2d7fba0f117ac16b9e60966d9448877ead4037e3cb4fee678",
146
148
  "frqtl/scenes/laser-buildup.js": "f4b29b2eeeca730642f5adf2f499f6594b73f6e51ba6aa9a237f4ee643c5cf23",
147
149
  "frqtl/scenes/mirror-3d.js": "79ac794dfbc608037936908a9fe58ca34be93be6263d5940bb38129d55bb7943",
148
- "frqtl/scenes/mirror-route.js": "1206b981a8d4eb3ab75985a4ae119adab5eed66026eebf2ad6036905bedbd746",
150
+ "frqtl/scenes/mirror-route.js": "007af9eb382a1392eb22b6d81f7c3e40bffe7ba6ac53363ce7726ccb62b838c4",
149
151
  "frqtl/scenes/mirror.js": "c7bcd440e9a78e333fd81d906b3788a62342910f46cf98de860098fcc1e0ba91",
150
152
  "frqtl/scenes/omni-3d.js": "d420a7aae9fdfd394b9288ce1f0256416e1b07f70bc570a928a4592c32a47c27",
151
153
  "frqtl/scenes/omni-source.js": "4f9aaa0e0ccbf4d18908d1628688dbeae376b535318f0cf969d61d8ea8f90b83",
@@ -155,70 +157,74 @@
155
157
  "frqtl/scenes/sun.js": "fa06cac429af5a2ad4fe846969a7bf763f2a76d9d9b169328cd1f45bad6bda8f",
156
158
  "frqtl/scenes/two-source.js": "1444a0e503f4a5e349d4364e31e698bc67d723a4b2864f262603e75ba5f9f088",
157
159
  "frqtl/scenes/wave.js": "cabbece84daceca9199bbea22be610281bdf3137c8c5724bc601758e711f111f",
158
- "shim/bundle/frqnb.js": "a237a81eb6074412d9a21f9dd7db96c80e1a4bc4c5f2a4b22f5ae556a37f6d5e",
159
- "shim/bundle/index.js": "6f82d9636233a6008e6d72d75df83aaef881ea711625eb24bc8841c6a2597376",
160
- "shim/bundle/indexHtml.js": "6d3ce242c4f139b542981164fe2b1d8b1c37d9423904bc1299531f594ce4ccc6",
161
- "shim/bundle/manifest.js": "796e25411d4f1d335277e954cf245352f95f324a1403062caa430142b9e8748c",
160
+ "shim/bundle/index.js": "edc501a039ce47102657604df71fbc17ba3e4760ca087055351231c7469f5c50",
161
+ "shim/bundle/indexHtml.js": "2c4fbc502bb33fce93596cee19e143a58bb63c18d0b18ea597f81610e3a9a027",
162
162
  "shim/bundle/zip.js": "00f7b5fb5f36ff40a59d86758c503d9d7fb43949c1b5a4f2e7367c43d92786f9",
163
163
  "shim/bus.js": "dac2eeccd8774268c51014be4c46c00b9985fdf49ebb44355aa370e949c8c5bc",
164
- "shim/controls/index.js": "2aaf1f14b104bba8b912d68fe99068a8c544770b9eac43cdf6d992c311ec8f69",
164
+ "shim/controls/index.js": "206f2f9cdb19e122e650517e09ef1e858f962b4ebe555174aee3bea4ae938dff",
165
165
  "shim/controls/registry.js": "3df843d774968d18e012624f2aba2fb09b08ede9e21b6c1f6687d4f3e9b46d3e",
166
- "shim/engine/artifact-shell.js": "b4c1d8bf65403caea9357fecd91172a1689baed8aad89433160d595881f16010",
166
+ "shim/engine/artifact-shell.js": "f23c327500f8174b12d464868f6ec9c1701e7a9a5faa1c43a2ddafc3191dc38c",
167
167
  "shim/engine/boot-phases.js": "c6e12e12824bcf6f1a289f46e41c898a5416c80c131594525145aae9a3eefbfa",
168
168
  "shim/engine/engine-stack-boot.js": "0abf57dcff2ca2bb025c787a17875d49d54d9218ac08c78cb9c678dbb6118d08",
169
- "shim/engine/router.js": "32e2c1906459018f331b089253b6f280512da965fcf93753796fd9763ea9c13c",
169
+ "shim/engine/router.js": "bd6a6e7b8b670ea146e8789f333c88c8eb62cf40aeab1eec21706d76fbb3e02a",
170
170
  "shim/experiment-frame/index.js": "5a0219aaa225d8f808c405b08623ce85ada37d83fb4f55f983db3303e431e47f",
171
171
  "shim/expr/ast-schema.js": "4f1133b887639bbd86fab976292323bf4a955cdc873ff7ca8e8a8eb3b416923f",
172
172
  "shim/field-descriptor/index.js": "6647d57d1523519114adc0a5cb66335ec5121c39ab294b9c97bdfb9e5d7f61e0",
173
173
  "shim/frame-data/index.js": "df6957b0b4a8e0ee0035bc970647b90089b421ae7f05911cc047d48457164be6",
174
- "shim/index.js": "d1f7d9a0a1fea320f641e2f9ec36174f243f03aca1a84804d74b33363703c8dc",
174
+ "shim/host/host-view.js": "e13619d3340118f81cde6d035dcb689fd72d9341c98c3e95afba911e978dda63",
175
+ "shim/host/index.js": "67691951a7ff35b4baf7332987d0128d1eefd0ad185d2989674bea90b17c02f3",
176
+ "shim/index.js": "96165c6161ffddbace0be0cde0b3a83943298531537dd2cc9c6e281b8274ff19",
175
177
  "shim/notebook/canvas-guard.js": "b19d3a86df3835bd617c7130cde997b6f8a8a0c140f95338b733115d5947ed7b",
176
178
  "shim/notebook/catalog.js": "68243a154e12bf36a76598aa554119f6e3b8b5363c8452d157c8a562b9c38dc1",
177
- "shim/notebook/format.js": "a552b161792873252a2163cd382bec2eb86651bcbdf96bd449d1b0007a0f2560",
179
+ "shim/notebook/format.js": "f8b1da9eb37da3a9609f7721426e2242f1279780ea212ea08d9f3c50bb18b578",
178
180
  "shim/notebook/frqtl-setups-importmap.js": "df86defa90cb85675564e7bb269451684b5cc7679f2c6b1884c07c8272e8ff1c",
179
- "shim/notebook/kernel.js": "65cf7e4ba12b24521143997a38cb0e7d0a8aa63f9f46868494eff7a41a887c7b",
181
+ "shim/notebook/kernel.js": "95b8efe960927d8cda0896eea8995f5df5972a471e0217916c32881913bddfcd",
180
182
  "shim/notebook/knob.js": "f07e9ac9697c7178aa68e4b2f4300145f8e2d2dc41b64aa0afede7e2d68705b1",
181
183
  "shim/notebook/module-resolver.js": "0bcf6ca4954e198dd77ce61b502cebed6d2c118926fd0d2dd0816991b8334b7a",
182
184
  "shim/notebook/notebook-knobs.js": "891cd6a24ed70256ed723844918866ba162dd71f839cd06ff4d8fc92a0a17452",
183
185
  "shim/notebook/produced-bindings.js": "3d46038ec541a9ff896abae4f62d25780633cdc952e4c9d0d90d917298471090",
184
186
  "shim/notebook/realm-registry.js": "ffee52e7c93447c8b82bfc0784b51346686b4373766da298f50a759d3443ab6a",
185
187
  "shim/notebook/realm-transport.js": "5173676a94211f85122e0581a16abba925e9c4b5900b5891911bfaec5ea02daf",
186
- "shim/notebook/setup-builder.js": "abf8a7fed017776634d5ae3b595de7f00b32779590319cd48d95a6d9d0523a96",
187
- "shim/notebook/store.js": "ff73cd6f2d9ffa4dc434f15edbf69c5c62360b0ced6a023fd6279f6d95ae895e",
188
+ "shim/notebook/setup-builder.js": "60fac546fe7895e68d1b982c377d9ced2558ba0769c4a5560ed92a239a7bce2a",
189
+ "shim/notebook/store.js": "fe34d31907e7a8f303dfcc35b9c0439faf2c32fbc5c0bb4f899692c25bef9a4d",
188
190
  "shim/notebook/vendor-importmap.js": "0c6578567980225593690e06fb4d32f0b50c47fe87a7467741a03846f6da68ed",
189
191
  "shim/notebook/view-builder.js": "1961962be16ef526934c43193828473447f2ec9ac0144f39bc5108c327d9069a",
190
192
  "shim/notebook/view-ctx.js": "6287aee366104bece827eecccf675540571d6db2b6833bff837be49eb60ce111",
191
193
  "shim/notebook/view-handle.js": "fe0d1530e3311cb96bb22f5cded35b9f25a0a4ef002588f3e47d9eef8089664d",
192
194
  "shim/notebook/warmup.js": "453b9e8b4969bcc704e1fbc636c3ada869ebf692651cfbf950107fd1cb662e25",
193
- "shim/package.json": "609158e6c5fbc237939fa3ddf7faab80ab690bdc0c8d584414a885130103c4e8",
194
- "shim/page-params/index.js": "f372a85af163a492425cee2584513fa631a642cb805fa283ad122d445ebec4b3",
195
- "shim/project/identity.js": "5a0dbd07bfad5c5aa6a529994a604546dbf3e6978b9529ca97ce2c57aa8e563f",
196
- "shim/project/index.js": "11500ad4cc28e25b3d5ec500e3629dae3f794b640121164d15040d3d9b439244",
197
- "shim/project/link.js": "171d6c3522f7af821a1bd373a6ad9afc47402bd21cd1121625b00a2cabb86324",
195
+ "shim/package.json": "5937639b55f56f715ea32a010ddd17e631c548c16b8fcba65adbc6d9c802116b",
196
+ "shim/page-params/index.js": "c58732b8127da8c2b4ecfd922bf46a6c9a5e9ab7017f41c095a6ec937011f0fa",
197
+ "shim/project/fork.js": "07555f24c7e6d1bbe723853bc09ad570b9cd36cef248a07e98e7398d41ac70da",
198
+ "shim/project/identity.js": "8d3e0bb9df75eecf7d11a1ea7948ff66c559973a891574d0b208c9e8f8faf504",
199
+ "shim/project/index.js": "81d1a5d84c8bd5f31de8d9849d385509a73582e2ec6db4f779b018fe1b25404f",
200
+ "shim/project/link.js": "0e3fc878bc45d9916baacd7cf129687ec6e82efd4f6f5036e4697180b3d0f87a",
201
+ "shim/project/manifest.js": "442267af07ae1b977ff6aeaca49d98ce82b77f548cfdd1ed0f258b3429d75f31",
198
202
  "shim/project/node-specifier-hook.mjs": "8601edf762bd9cd011632bc681d0589dfc77368cda0e994125d0eb123fea89d0",
199
203
  "shim/project/parts-module.js": "b08e0149f086640692e1b2ff8e0d7ae0379c2bc934a0891418de5c2b8c0e8e60",
200
- "shim/project/parts-writer.js": "a0db8296f19560808aa71ea74c9d3db5cee48df82a962b102288c69690f1d4c8",
204
+ "shim/project/parts-writer.js": "121fa67261d6f366190c9ac4961fceed2f26ca7f35cf3fbffc767829afc69978",
205
+ "shim/project/read-text.js": "b89bd70e3a271e1f42c8ce9427a20cdd9a4c4c9c31b64c49ff1f56b095620136",
206
+ "shim/project/record-format.js": "b680c3752f20535c08be832c6808fae000c2d2325f8caee57f98351043d091be",
201
207
  "shim/project/register-node.mjs": "9b408da7dc1b11d16237cd62caca281c823ea80173d386ad35e41ea17c34857f",
202
- "shim/project/specifiers.js": "af8a6b3d0c6c18c3050630d843b2d394870efcc6ac03f4f01bc612d48ae2c63d",
208
+ "shim/project/specifiers.js": "6a5ba9f91f97902d7b7911ecf9933dab743a99271b30ec4fb50a5d439d344add",
203
209
  "shim/registry/copy-gate.js": "cfbf52669c849b8837b326f2743458f1ead0720cad51a6c6d409c9bd6c7f9495",
204
- "shim/registry/exhibits.js": "98736b6b0dd82b5c1436da28fe3bf8d2d3ee840af8f5256d00c23e296c3bca9a",
205
- "shim/registry/experiments.js": "1d1484f144ade35ddcb94b23712df539b3b432a45130e159a6f47146de188165",
206
- "shim/registry/index.js": "2a8e27dc83b5f7eb74b747b511ebc413a0de0dd43e27535296f504535353e2cd",
207
- "shim/registry/scene-source.js": "1e02af7af7ee0d879554f9dc12b9aba446d7966a3ea6aa6b4b2e8b460041ab01",
208
- "shim/registry/walkthrough.js": "08726aec2a68d45c36f8919f43c8e3fa255c325b0d63c9001b54d8ba07c04521",
209
- "shim/render-state/apply.js": "fd0830ee4bb2668ac5b3254c29180bce9524d2ffb11bf6124e834ab8674a757a",
210
- "shim/render-state/index.js": "9015405ef2ea3d88bf004a0aa3bea04eb6bdb86270d68ef5622538a9bae5fa6d",
210
+ "shim/registry/exhibits.js": "7ee132589bb4c003a06815f78d9e917ba81fd806111d1cee538345b7e5cc6345",
211
+ "shim/registry/index.js": "f59357c81c4045c41bfd266a74931e5c21b2c6650ad60b80e8e21bc23699ca34",
212
+ "shim/registry/scene-roster.js": "318fe373f71b1c58d05425693f2fad4bd5368f6095b65817c6d637430a0bfb73",
213
+ "shim/registry/scene-source.js": "c9c4b48c24d4b1ebee1549a7891a1ba708909b94b9403ce28eefbd902cacf49f",
214
+ "shim/registry/walkthrough.js": "8f8b6f59e9e81c67c9c62f8fb271eee2e4d6e1fba6e116b227a2f1e3f9930230",
215
+ "shim/render-state/apply.js": "94a9e60cb1722c9a82aa00f2f161fd65e6f438147333856a786e42a4ad5b7064",
216
+ "shim/render-state/index.js": "72a6a3dcd8037893cb8fbd7ef32b126770e7efaec70847f8e4f2915ddb690b43",
211
217
  "shim/render/capture-envelope.js": "2667a355169bb124fd8117e9cbf1d630085257b9f6fa537362f12d0aa649da2d",
212
218
  "shim/render/heat-colormap.js": "0eadc758179024734c45eaeffd8f5b44e7c4102b7042767a4a5b66541b3bbd7c",
213
219
  "shim/render/render-stages.js": "baf674c205df7638af53e51ac77152a448fe6bf6d4ea51d58ac565556cd38da7",
214
220
  "shim/render/sun-look.js": "f8f23f0853a9c22459fff866ccf59ab00332697d48fd529fca5c2e8554a2d83d",
215
221
  "shim/rpc/index.js": "56af3afeed22e8d718cd2f7a8ad70db8745f54dbc139af9d71f1d73e2ca37698",
216
- "shim/runtime/index.js": "cd728294c4693de3059f30f272f267b88b39c19a451edd30c75012e1bab755f5",
222
+ "shim/runtime/index.js": "92bb4d8b5f203f949e441781b864efe5c6748df14a3a8f306e4c0bc11c7f6d35",
217
223
  "shim/storage/boot.js": "689504e15dc075e32d08abf61c75a45b1d565c09f086b42400dae40d8186c411",
218
- "shim/storage/index.js": "9f10a2ac220e7066493c3da0cea125ab5afb1e3d27d71fbef349f99caaeaa8b9",
224
+ "shim/storage/codec-chains.js": "6eab30c3ab7d8bd26059f386f91f9e43a87a6a20980d36bf7271eb72b6d109c0",
225
+ "shim/storage/folders.js": "9d69b6fcbdc8ae6da561acd42946933ac2d453d5d0659fcaf1cfba410a47a45a",
226
+ "shim/storage/index.js": "0939d88bcdb0cde5b564e1fc1b03144363c9747e917e706c4cc1f55fe4ee1ace",
219
227
  "shim/storage/local-storage-provider.js": "e14894e5d33bce961e66a2816e4b5c23b8e00534398ca9635d19de117f0f150e",
220
- "shim/storage/make-namespace-store.js": "da15fe99b19e25bd6e7f1c9e8a8852b15c43627fc0f9e2eb909503736f850a4a",
221
- "shim/storage/modules.js": "ceee32e0ea101ae49e5b0ab63007972a3f4127e9d81bbd2cf24cdb47d491623b",
222
- "shim/storage/projects.js": "1c7398dedbb7a67c80acbfe0dfb08ba4f069db9a7d946266c4636212834bd671"
228
+ "shim/storage/make-namespace-store.js": "f88cfc65244cd7a3c3a43c173001855bb95571916a117b22f38d051823f2856f"
223
229
  }
224
230
  }
@@ -46,12 +46,15 @@
46
46
  * eyes.saveStill(still, 'out.png'); // …and the picture, in one line
47
47
  * } finally { await eyes.dispose(); }
48
48
  *
49
+ * The Record door rides the handle (`eyes.record.*`, `eyes.act.*`); `writeRecordFolder(folder, dir)` is the ONE node
50
+ * writer of the folder `eyes.record.stop()` returns (hosted-eyes.js).
51
+ *
49
52
  * `FrqtlVision` is re-exported for the encoder itself (`FrqtlVision.toPNG(still)` → PNG bytes) — the
50
53
  * node half of the one-encoder-per-host pair; it is the parts barrel's own instance.
51
54
  */
52
55
 
53
56
  import { createRequire } from 'node:module';
54
- import { FrqtlHostedEyes as HostedEyes } from '../frqtl/objects/instruments/hosted-eyes.js';
57
+ import { FrqtlHostedEyes as HostedEyes, writeRecordFolder } from '../frqtl/objects/instruments/hosted-eyes.js';
55
58
  import { FrqtlVision } from '../frqtl/parts/index.js';
56
59
 
57
60
  // The WRONG-HOST DOOR: `./eyes` DRIVES a browser from node; loaded IN a page it can only fail, so the
@@ -106,4 +109,4 @@ export function openHostedEyes(opts) {
106
109
  return HostedEyes.open(bag);
107
110
  }
108
111
 
109
- export { FrqtlVision };
112
+ export { FrqtlVision, writeRecordFolder };
@@ -1,12 +1,4 @@
1
1
  {
2
- "name": "egpt_wasm",
3
- "description": "EGPT FRQTL VM WASM bindings",
4
- "version": "0.1.0",
5
- "files": [
6
- "egpt_wasm_bg.wasm",
7
- "egpt_wasm.js",
8
- "egpt_wasm.d.ts"
9
- ],
10
- "main": "egpt_wasm.js",
11
- "types": "egpt_wasm.d.ts"
2
+ "private": true,
3
+ "license": "SEE LICENSE IN LICENSE.md"
12
4
  }
@@ -743,8 +743,7 @@ import { Rectangle } from '../../parts/Rectangle.js';
743
743
  // can parent — density clustering). ENGINE TRUTH, ASKED ON EVERY READ: init() ferries the
744
744
  // mode in the CONFIG BAG (`frame_gen_mode`), the ENGINE holds it, and this getter asks the
745
745
  // running universe what it actually HOLDS. A JS copy would go stale the moment a re-init
746
- // changed the mode — which is exactly how STUDIO's codegen came to print a mode the run
747
- // was not using.
746
+ // changed the mode — and a writer that read it would write a mode the run was not using.
748
747
  //
749
748
  // `_frameGenMode` survives for exactly ONE read: the window between create() and init(),
750
749
  // when there is no engine to ask. It is NOT an input to init() — init() takes its own
@@ -1007,8 +1006,8 @@ import { Rectangle } from '../../parts/Rectangle.js';
1007
1006
  }
1008
1007
  // READ-BACK of the RESOLVED axes (what this run actually uses, including the
1009
1008
  // engine's serde default when the sketch omitted them). Truth-in-labeling: any
1010
- // consumer that must re-declare this world (STUDIO codegen re-emitting the
1011
- // sketch's world step) DERIVES it from here rather than guessing.
1009
+ // consumer that must re-declare this world (a host re-stating the sketch's world step)
1010
+ // DERIVES it from here rather than guessing.
1012
1011
  this.activeAxes = config.active_axes
1013
1012
  ? { x: config.active_axes.x, y: config.active_axes.y, z: config.active_axes.z }
1014
1013
  : { x: true, y: true, z: false };
@@ -803,7 +803,7 @@ import * as RendererProviderContract from '../renderer-provider-contract.js';
803
803
  setPreset: function (name) {
804
804
  // A preset is a FULL framing reset — the reliable way back. A name this
805
805
  // camera does not offer THROWS (a silent no-op would leave a saved or
806
- // codegen'd preset doing nothing with no signal).
806
+ // written preset doing nothing with no signal).
807
807
  var all = _presets(), p = all[name];
808
808
  if (!p) {
809
809
  throw new Error('[p5-provider camera] setPreset("' + name + '"): this camera offers ' +
@@ -248,7 +248,7 @@ import { paintBootFailure } from '../experiments/_shared/boot-failure.js';
248
248
  // experiment pages). When true (STUDIO authoring), the renderer DRAWS the
249
249
  // Design-only markers (a manipulable emitter's visual circle, `lo._designMarker`).
250
250
  // A render toggle at the output boundary (zero physics): it filters ONLY the
251
- // renderTick view; the pick, the aim, Layers and codegen read the census and the
251
+ // renderTick view; the pick, the aim, Layers and the parts writer read the census and the
252
252
  // declared registry directly, so an emitter stays selectable even when its marker
253
253
  // circle is suppressed.
254
254
  this._designMode = false;
@@ -814,7 +814,7 @@ import { paintBootFailure } from '../experiments/_shared/boot-failure.js';
814
814
  // is manipulable, so only what the user proactively declares is registered.
815
815
  //
816
816
  // `declared` is the ordered list of the handles the user's DECLARING calls produced
817
- // (`exp.addObject`, a palette drop, a codegen replay — all three funnel through
817
+ // (`exp.addObject`, a palette drop, a parts entry replayed — all three funnel through
818
818
  // `ObjectFactory.create`, the registry's ONE writer). It is a different fact from the world
819
819
  // census (`largeObjects` — everything the world draws and collides): a part's composition is
820
820
  // in the census but never declared. "Which declared object does this drawn thing belong to"
@@ -954,6 +954,11 @@ import { paintBootFailure } from '../experiments/_shared/boot-failure.js';
954
954
  x.inParts = true;
955
955
  };
956
956
 
957
+ /** beginWorld() — a (re-)inited world has not stepped: its last TickData is gone (worldTick reads 0, repaint draws nothing). */
958
+ FrqtlApp.prototype.beginWorld = function () {
959
+ this._lastTickData = null;
960
+ };
961
+
957
962
  /** clearDeclared() — empty the registry. Called where the world re-inits (FrqtlApp.setup, and the
958
963
  * RecipeContext co-init exp.createCanvas / exp.createScene): a fresh world has no declared objects. */
959
964
  FrqtlApp.prototype.clearDeclared = function () {
@@ -985,7 +990,7 @@ import { paintBootFailure } from '../experiments/_shared/boot-failure.js';
985
990
  * undeclaredTickFunctions() → the host tick-functions running in the world that NO declared
986
991
  * object owns: a setup factory's emitter, a page's own regulation fn, a sketch's
987
992
  * exp.addTickFunction. They are behaviour the registry cannot write down, so whatever writes the
988
- * world as declarations (codegen) refuses while any exists.
993
+ * world as declarations refuses while any exists.
989
994
  * @returns {Function[]}
990
995
  */
991
996
  FrqtlApp.prototype.undeclaredTickFunctions = function () {
@@ -1051,7 +1056,7 @@ import { paintBootFailure } from '../experiments/_shared/boot-failure.js';
1051
1056
  * getObjectByName(name, predicate?) → the DECLARED object of that name (passing `predicate` when
1052
1057
  * given), else null — the lazy by-name reference every cross-object link that must survive a
1053
1058
  * Restart uses (an emitter's gateCounter, a LiveChart source). Handles are fresh at registration
1054
- * and never survive codegen, so the reference is a NAME resolved against the registry at use
1059
+ * and never survive a re-link, so the reference is a NAME resolved against the registry at use
1055
1060
  * time. The CALLER decides whether null is FAIL-LOUD (the emission gate throws; a LiveChart
1056
1061
  * retries next scan).
1057
1062
  * @param {string} name @param {Function} [predicate] @returns {Object|null}
@@ -2296,7 +2301,7 @@ import { paintBootFailure } from '../experiments/_shared/boot-failure.js';
2296
2301
  this.stop();
2297
2302
  var self = this;
2298
2303
  function resume(result) {
2299
- self._lastTickData = null;
2304
+ self.beginWorld();
2300
2305
  // Always resume: "restart" means run the scene again from tick 0 — a restart
2301
2306
  // that left the loop paused would read as a dead button.
2302
2307
  self.start();
@@ -2388,7 +2393,7 @@ import { paintBootFailure } from '../experiments/_shared/boot-failure.js';
2388
2393
  var msg = 'FrqtlApp: the DISPLAY SLOT is empty (FrqtlDisplay.get() === null).\n\n' +
2389
2394
  'The boot module (lib/frqtl/experiments/_shared/boot.js) must select a renderer\n' +
2390
2395
  'BEFORE the draw loop fires. This is a page configuration error.\n\n' +
2391
- 'P5Renderer has been removed (WS-RENDERER Phase 1). All experiment pages\n' +
2396
+ 'P5Renderer has been removed. All experiment pages\n' +
2392
2397
  'boot the canonical RendererProvider stack through bootPage().';
2393
2398
  if (typeof document === 'undefined') {
2394
2399
  // No DOM to paint the overlay into — the message is still LOUD, on the console
@@ -2572,6 +2577,28 @@ import { paintBootFailure } from '../experiments/_shared/boot-failure.js';
2572
2577
  return this._tickSuspend;
2573
2578
  };
2574
2579
 
2580
+ /**
2581
+ * runner.worldTick — READ-ONLY: the tick of THIS world: 0 before its first step, else the last delivered tick.
2582
+ * The 0 is a stated fact, not a default: `_lastTickData` is null until the world's first step, and beginWorld()
2583
+ * (the co-init and restart()) is the one writer of that null. It does NOT read `universe.tick`: the compat wrapper
2584
+ * keeps that field across a re-init until the next doTick, so after a restart it still answers the previous
2585
+ * world's tick. Every runner holds a world (its universe is built at construction), whether a sketch built it
2586
+ * through the replay door or a page built it by hand, so this always answers. THROWS when a delivered tick is not
2587
+ * a whole number ≥ 0.
2588
+ */
2589
+ Object.defineProperty(FrqtlApp.prototype, 'worldTick', {
2590
+ configurable: true,
2591
+ get: function () {
2592
+ if (this._lastTickData === null) { return 0; }
2593
+ var t = this._lastTickData && this._lastTickData.universeData && this._lastTickData.universeData.tick;
2594
+ if (!(typeof t === 'number' && t >= 0 && t % 1 === 0)) {
2595
+ throw new Error('[FrqtlApp.worldTick] the last delivered TickData carries tick ' + String(t) +
2596
+ ', not a whole number ≥ 0. (FAIL-LOUD.)');
2597
+ }
2598
+ return t;
2599
+ }
2600
+ });
2601
+
2575
2602
  /** @returns {boolean} whether the tick clock is currently held. */
2576
2603
  Object.defineProperty(FrqtlApp.prototype, 'ticksSuspended', {
2577
2604
  configurable: true,