Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion docs/atlas/catalog.json
Original file line number Diff line number Diff line change
@@ -1 +1 @@
{"records":["049f1d0d8155f65b6f7675ebdb200d4595570cc7d585dd74876e0285eceffed6","0863093e69a16355fa9b90f8e7e29156ea4ad88c4523bc4883568bde831bdf35","2056fa8b653c2240afdad2a16f572a07019109254847829610a9468bb2f95248","231df3792931ad2333d00970a5993b3e13fa9dc38f687899f9fa2c966ed9fbfa","24fdc3980640ba58bedcae6f16d5b467eb7383c31161fb9b6ff10fd2e667b0e5","264a2f7887a9b6473cbc24102e1bf9be70e57f6d7ba224138140efa094d541f4","2b7dfb3a2f76368cb603161cdb6f8fa8c2b8afc3e96659dd37c975921ba5ba66","33df463263533529cca24a0b09937573f836d197cc1a739e9960b1cdd4deb1fd","343077d02ddd266b21d8677f7c256854134f7e3e2d18137b55ebe3f32564c5c0","34391bda3fb56135a2bddf74ab790958c175bc6a69c38175e6f8db792cfd50a0","36a19fefd7024f54f3391ffed19019c10222a514719edd7a44f0cde2a1c48258","3d3a0a302c02cd0bfee86715d09b0211baa8dad3e47402c638fc95c7cfa02e87","3de8718fb3ca9b15212e8bd84fba205995d24636087090a61c63c28a96a745b1","3df4f31fda99ad137c651322ad29809e36380400516399274870b4a4332b4a92","3f09ee199e3c2e808e0f6e74f197f2fdd8158ae099a7195c498ce9466bb78b03","44bda82d6f9a9625a83283bf56a15a1831f287037214dc134eeeae87f1faa869","6c5b38ee260d1f15f8029d699ec1cebceafb5e1407a6341dc7a4b96f4d9d3521","71bc29a175940d22dd1d85148ee49f47aed714395fbd51d07b8751147815a55f","72742cbaa561237f10251e94aa5c61153ab5c7f14fc5771b7a5ebdece1e1cb11","85f06991da74fa4e59ba73c7034dc53a35a4e90c5b64d83cc8956d3afd61d376","87d6de6f3730cecd75d9a4411bf4dbac4e058127a3ce9f46b07f6de110bc26de","8b1cf51c5f03c0ae19c46ca3ea4a1158acbb6e47bf109ca8c506c5417b51cf9f","95115e1052b5ea4fcd393f5c9b9c6f0298657f0028eee84e16215ede97576cfa","a38737476856236f33e0aef1b97e2b900677cf99f1dbcfd381c708ceeca8b7f3","ab4502eff76606ac8e58b623878f3d76e1e0b18f30796aec7c446e2aab8b57c8","ab69ebe00eac40c68aec6131ef0559967b399266aae89f9673d3c30ce12f36b0","c01c2c98f13a65b49113916a2f295e46a03fc4c185ece880267dd86c3f3dee8b","d557525e3ebfad227c8d6db9bb6350d42506fb02b1de8058cb443f4f008c0f67","d9718eb12e9ae9ea3a29a9904f131f53e99c584ef1b297aa05f1f8f6cdc6ab2a","fa8cd29fe962d7e853457e829c2d5927685f0ff374e6450fff5529f785db442d"],"schema":"fsgg.atlas/1"}
{"records":["049f1d0d8155f65b6f7675ebdb200d4595570cc7d585dd74876e0285eceffed6","0863093e69a16355fa9b90f8e7e29156ea4ad88c4523bc4883568bde831bdf35","2056fa8b653c2240afdad2a16f572a07019109254847829610a9468bb2f95248","231df3792931ad2333d00970a5993b3e13fa9dc38f687899f9fa2c966ed9fbfa","24fdc3980640ba58bedcae6f16d5b467eb7383c31161fb9b6ff10fd2e667b0e5","264a2f7887a9b6473cbc24102e1bf9be70e57f6d7ba224138140efa094d541f4","2b7dfb3a2f76368cb603161cdb6f8fa8c2b8afc3e96659dd37c975921ba5ba66","33df463263533529cca24a0b09937573f836d197cc1a739e9960b1cdd4deb1fd","343077d02ddd266b21d8677f7c256854134f7e3e2d18137b55ebe3f32564c5c0","34391bda3fb56135a2bddf74ab790958c175bc6a69c38175e6f8db792cfd50a0","36a19fefd7024f54f3391ffed19019c10222a514719edd7a44f0cde2a1c48258","3d3a0a302c02cd0bfee86715d09b0211baa8dad3e47402c638fc95c7cfa02e87","3de8718fb3ca9b15212e8bd84fba205995d24636087090a61c63c28a96a745b1","3df4f31fda99ad137c651322ad29809e36380400516399274870b4a4332b4a92","3f09ee199e3c2e808e0f6e74f197f2fdd8158ae099a7195c498ce9466bb78b03","44bda82d6f9a9625a83283bf56a15a1831f287037214dc134eeeae87f1faa869","6c5b38ee260d1f15f8029d699ec1cebceafb5e1407a6341dc7a4b96f4d9d3521","71bc29a175940d22dd1d85148ee49f47aed714395fbd51d07b8751147815a55f","72742cbaa561237f10251e94aa5c61153ab5c7f14fc5771b7a5ebdece1e1cb11","85f06991da74fa4e59ba73c7034dc53a35a4e90c5b64d83cc8956d3afd61d376","87d6de6f3730cecd75d9a4411bf4dbac4e058127a3ce9f46b07f6de110bc26de","8b1cf51c5f03c0ae19c46ca3ea4a1158acbb6e47bf109ca8c506c5417b51cf9f","8c514796f190fe6d4307be57983c84f92208f5d2f00fcbe3093b72618f2d7bc1","95115e1052b5ea4fcd393f5c9b9c6f0298657f0028eee84e16215ede97576cfa","9b6c05923a43ea37b10504396105d97ba51c0430e82fb3bb4953ee4256cdc1aa","a38737476856236f33e0aef1b97e2b900677cf99f1dbcfd381c708ceeca8b7f3","ab4502eff76606ac8e58b623878f3d76e1e0b18f30796aec7c446e2aab8b57c8","ab69ebe00eac40c68aec6131ef0559967b399266aae89f9673d3c30ce12f36b0","c01c2c98f13a65b49113916a2f295e46a03fc4c185ece880267dd86c3f3dee8b","d557525e3ebfad227c8d6db9bb6350d42506fb02b1de8058cb443f4f008c0f67","d9718eb12e9ae9ea3a29a9904f131f53e99c584ef1b297aa05f1f8f6cdc6ab2a","fa8cd29fe962d7e853457e829c2d5927685f0ff374e6450fff5529f785db442d"],"schema":"fsgg.atlas/1"}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"citations":[{"path":"src/Wasm.Browser/Admission.fs","repository":"FS-GG/FS.GG.Game","revision":"576898054e91c5231c0c78cee656cbc9eb40e5af","sha256":"0bb3799d2ee00ddbbbfa413db6b616a692e3228943d1fb43cf3c370f1e0475dc"},{"path":"tests/Wasm.Invocation.Tests/Program.fs","repository":"FS-GG/FS.GG.Game","revision":"576898054e91c5231c0c78cee656cbc9eb40e5af","sha256":"a355d817198bdd1cc00a80b0f616773c7567638b841d71e359dd9d4c16b0c6b3"},{"path":"tests/Wasm.PackageConsumer/browser/package-consumer.mjs","repository":"FS-GG/FS.GG.Game","revision":"576898054e91c5231c0c78cee656cbc9eb40e5af","sha256":"656dab9d7ad8bd551761db05f4d43a5810abc13d466b3bd046992fa7af783559"},{"path":"tests/Wasm.PackageConsumer/browser/package-consumer.spec.mjs","repository":"FS-GG/FS.GG.Game","revision":"576898054e91c5231c0c78cee656cbc9eb40e5af","sha256":"54dee8bb9c32ab0fc009b930f465371ee3d6b3819ae3e62fb00d6950828a4db3"},{"path":"docs/roadmaps/wasm-shared-01.md","repository":"FS-GG/FS.GG.Game","revision":"576898054e91c5231c0c78cee656cbc9eb40e5af","sha256":"76c4cb3f5ce448b83099dc8de209a31273d5f2cb60f26e06b0dc1800ebed3fd5"},{"path":"eng/wasm-shared/version.props","repository":"FS-GG/FS.GG.Game","revision":"576898054e91c5231c0c78cee656cbc9eb40e5af","sha256":"6b50423f8f30da7d52305ee527baaddd91f77cc422f7585cf61c063bcad209e1"},{"path":"scripts/wasm-release/promotion.py","repository":"FS-GG/FS.GG.Game","revision":"576898054e91c5231c0c78cee656cbc9eb40e5af","sha256":"d2ea88920b22e30df973765085c92116685dda689616045bb3b01080bd5d848d"},{"path":"tests/release/wasm/test-release-promotion.py","repository":"FS-GG/FS.GG.Game","revision":"576898054e91c5231c0c78cee656cbc9eb40e5af","sha256":"3b66a4dbf32d2334237c7301582fb4e1f2b96dd26ed188d39e4fe2d94e3795b9"}],"conflictsWith":[],"id":"game/closed-worker-build-boundary","kind":"architecture","recordedAt":"2026-10-17T23:27:47Z","repository":"FS-GG/FS.GG.Game","schema":"fsgg.atlas/1","status":"recorded","summary":"Selected current-only source successor0.6.0 prepares one semantic change in the bounded instruction walker: exact matching of the same eight one-u32 opcodes replaces a literal eight-element F# list and List.contains inside every instruction iteration. Published0.5 generated JavaScript materializes the array/list and comparer on each iteration; this is an avoidable O(8N) allocation/traversal path, not an established quadratic scan or proof of any prior timeout's CPU cause. The surrounding byte/u32 Result representation and export/type checks outside the instruction loop remain unchanged. Unsupported opcode refusal, u32 consumption and first-error offsets retain their current semantics.\nPublic test preparation uses the existing owned module for all eight opcode syntax controls: one/two/five-byte operands and exact truncated, overflow and unterminated errors. Syntax admission is not native WebAssembly validity. A separate owned control module receives65536 genuine nop instructions in its first function while preserving other bytes. Actual installed fresh initial/candidate-abort/new-candidate Workers must admit and execute with unchanged pre-create250ms budgets, complete bounded stage observations and final retirement. No private consumer module or result is copied. Existing cold-expiry and late-message controls remain distinct; absent diagnostic packets establish last observed boundaries, not CPU attribution or guaranteed delivery.\nThe pair/SDK, current producer guards and Project dependency lock advance coherently to0.6.0 without changing unrelated lock hashes, runtime ABI, validator set, clocks, capacity, build tools or workflows. Existing pure/static production-caller preflight passed on clean committed source; an earlier invocation correctly refused dirty executor source. F#/Fable/compiler/bundle/native syntax/browser/cleanup and actual35-minute profile fit remain unrun for this candidate. One added three-Worker browser history stays under its existing15-second per-case cap; predecessor duration is only headroom evidence.\nPublished0.5 producer805400, original publisher39073209865/release416092764/transactionc567d141277004186ec6f4b24df63defb103c2fc1b811d1f4c3bcd83588cacb7 and accepted finite Qc938 served-feed39076218708 remain immutable. The installed binder still names that exact0.5 subject and explicitly refuses unpublished0.6; no compatibility route or arbitrary overlay is introduced. A future genuine publication-specific Q and separately selected publication/installed operations are required. Source qualification does not grant consumer, product, image/native or future timing acceptance.","supersedes":["71bc29a175940d22dd1d85148ee49f47aed714395fbd51d07b8751147815a55f"],"tags":["wasm","admission","parser","allocation","worker","current-only","qualification"],"title":"Prepare allocation-free opcode dispatch without changing admission or deadline authority"}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"citations":[{"path":"src/Wasm.Browser/Admission.fs","repository":"FS-GG/FS.GG.Game","revision":"25e32ae2a118bcb30c74b13fe056ccd6063c10c6","sha256":"0bb3799d2ee00ddbbbfa413db6b616a692e3228943d1fb43cf3c370f1e0475dc"},{"path":"tests/Wasm.Invocation.Tests/Program.fs","repository":"FS-GG/FS.GG.Game","revision":"25e32ae2a118bcb30c74b13fe056ccd6063c10c6","sha256":"a355d817198bdd1cc00a80b0f616773c7567638b841d71e359dd9d4c16b0c6b3"},{"path":"tests/Wasm.PackageConsumer/browser/package-consumer.mjs","repository":"FS-GG/FS.GG.Game","revision":"25e32ae2a118bcb30c74b13fe056ccd6063c10c6","sha256":"656dab9d7ad8bd551761db05f4d43a5810abc13d466b3bd046992fa7af783559"},{"path":"tests/Wasm.PackageConsumer/browser/package-consumer.spec.mjs","repository":"FS-GG/FS.GG.Game","revision":"25e32ae2a118bcb30c74b13fe056ccd6063c10c6","sha256":"54dee8bb9c32ab0fc009b930f465371ee3d6b3819ae3e62fb00d6950828a4db3"},{"path":"docs/roadmaps/wasm-shared-01.md","repository":"FS-GG/FS.GG.Game","revision":"25e32ae2a118bcb30c74b13fe056ccd6063c10c6","sha256":"128a8386d5fd92e3587d169be34703384b5d1a16d05993be7274dae7f87cd6fb"},{"path":"eng/wasm-shared/version.props","repository":"FS-GG/FS.GG.Game","revision":"25e32ae2a118bcb30c74b13fe056ccd6063c10c6","sha256":"6b50423f8f30da7d52305ee527baaddd91f77cc422f7585cf61c063bcad209e1"},{"path":"scripts/wasm-release/promotion.py","repository":"FS-GG/FS.GG.Game","revision":"25e32ae2a118bcb30c74b13fe056ccd6063c10c6","sha256":"d2ea88920b22e30df973765085c92116685dda689616045bb3b01080bd5d848d"},{"path":"tests/release/wasm/test-release-promotion.py","repository":"FS-GG/FS.GG.Game","revision":"25e32ae2a118bcb30c74b13fe056ccd6063c10c6","sha256":"3b66a4dbf32d2334237c7301582fb4e1f2b96dd26ed188d39e4fe2d94e3795b9"},{"path":"scripts/wasm-release/api-baseline-policy.json","repository":"FS-GG/FS.GG.Game","revision":"25e32ae2a118bcb30c74b13fe056ccd6063c10c6","sha256":"d8c13049d0c042d88b6c0038bb51ef89350d54184136065e46cbd1b744db21b3"},{"path":"scripts/wasm-release/api-baseline-policy-0.5.0.json","repository":"FS-GG/FS.GG.Game","revision":"25e32ae2a118bcb30c74b13fe056ccd6063c10c6","sha256":"aa8c1d997d58bf4203dc4584ffcc5f2201cab76f87aa29cf406d1f1aeda408d4"},{"path":"scripts/wasm-release/release_manifest.py","repository":"FS-GG/FS.GG.Game","revision":"25e32ae2a118bcb30c74b13fe056ccd6063c10c6","sha256":"0a75aab0213be7bdaa4521a9a75a8228d0d3860b8e83ab51c2446c36c88891cd"},{"path":"tests/release/wasm/test-api-baseline-policy.py","repository":"FS-GG/FS.GG.Game","revision":"25e32ae2a118bcb30c74b13fe056ccd6063c10c6","sha256":"bfe0b46bd85d4be2ea0fb8dee6a6454e3c33c5f21c03feb21f2de9657febf9f1"}],"conflictsWith":[],"id":"game/closed-worker-build-boundary","kind":"architecture","recordedAt":"2026-10-17T23:28:41Z","repository":"FS-GG/FS.GG.Game","schema":"fsgg.atlas/1","status":"recorded","summary":"Selected current-only source successor0.6.0 prepares one semantic change in the bounded instruction walker: exact matching of the same eight one-u32 opcodes replaces a literal eight-element F# list and List.contains inside every instruction iteration. Published0.5 generated JavaScript materializes the array/list and comparer on each iteration; this is an avoidable O(8N) allocation/traversal path, not an established quadratic scan or proof of any prior timeout's CPU cause. The surrounding byte/u32 Result representation and export/type checks outside the instruction loop remain unchanged. Unsupported opcode refusal, u32 consumption and first-error offsets retain their current semantics.\nPublic test preparation uses the existing owned module for all eight opcode syntax controls: one/two/five-byte operands and exact truncated, overflow and unterminated errors. Syntax admission is not native WebAssembly validity. A separate owned control module receives65536 genuine nop instructions in its first function while preserving other bytes. Actual installed fresh initial/candidate-abort/new-candidate Workers must admit and execute with unchanged pre-create250ms budgets, complete bounded stage observations and final retirement. No private consumer module or result is copied. Existing cold-expiry and late-message controls remain distinct; absent diagnostic packets establish last observed boundaries, not CPU attribution or guaranteed delivery.\nThe pair/SDK, current producer guards and Project dependency lock advance coherently to0.6.0 without changing unrelated lock hashes, runtime ABI, validator set, clocks, capacity, build tools or workflows. Existing pure/static production-caller preflight passed on clean committed source; an earlier invocation correctly refused dirty executor source. F#/Fable/compiler/bundle/native syntax/browser/cleanup and actual35-minute profile fit remain unrun for this candidate. One added three-Worker browser history stays under its existing15-second per-case cap; predecessor duration is only headroom evidence.\nPublished0.5 producer805400, original publisher39073209865/release416092764/transactionc567d141277004186ec6f4b24df63defb103c2fc1b811d1f4c3bcd83588cacb7 and accepted finite Qc938 served-feed39076218708 remain immutable. The installed binder still names that exact0.5 subject and explicitly refuses unpublished0.6; no compatibility route or arbitrary overlay is introduced. A future genuine publication-specific Q and separately selected publication/installed operations are required. Source qualification does not grant consumer, product, image/native or future timing acceptance.\nIndependent source review caught a stale0.4 published ApiCompat baseline and missing immutable0.5 candidate policy reader during the version transition. The corrected mandatory current0.6 comparison binds actual published0.5 P805400/treefa2/manifest4874c07d6c6b4f1cd920e2a1379de2e5778529f94d211b2c8d138ed8d719483c and its authentic signed served archive hashes. The archived0.5 policy is byte-identical to P and only validates immutable evidence; it is not a consumer compatibility wrapper. Actual receipt-validator controls exercise both versioned policies and refuse changed valid-looking source/tree/manifest/served bytes. The required ApiCompat rail, native comparison and unavailability refusal remain intact.","supersedes":["8c514796f190fe6d4307be57983c84f92208f5d2f00fcbe3093b72618f2d7bc1"],"tags":["wasm","admission","parser","allocation","worker","current-only","qualification"],"title":"Prepare allocation-free opcode dispatch without changing admission or deadline authority"}
44 changes: 41 additions & 3 deletions docs/roadmaps/wasm-shared-01.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,46 @@
# WASM-SHARED-01 — producer qualification successor

## Current 0.5 closed Worker and installed qualifier

The current source successor selects coherent `0.5.0` for the pair and SDK.
## Current 0.6 admission dispatch preparation

The selected current-only successor is coherent `0.6.0` for the pair and SDK.
The instruction walker previously constructed an eight-element F# list and
performed `List.contains` for every instruction; the generated JavaScript also
constructed the array/list and equality comparer inside that loop. The selected
change uses an exact opcode pattern for the same eight one-u32 instructions.
The byte reader, u32 LEB parsing, first-error offsets, refusal set, memory bounds
and native compiler's independent syntax check remain unchanged. The scan is a
bounded linear walk; this avoids repeated allocation and traversal, without
claiming a quadratic algorithm or proving the cause of any earlier timeout.
Export/type checks outside the instruction loop retain their existing bounded
list operations. The byte/LEB Result representation is outside this correction.

Public regression preparation checks all eight opcodes with one-, two- and
five-byte u32 operands and exact truncated/overflow/unterminated first errors.
A public owned module gains 65,536 genuine nop instructions without changing its
other function bytes. Genuine fresh installed Workers must admit, initialize,
prepare/abort and prepare again with the existing 250 ms request budgets and
stage observations. These controls do not copy private consumer modules, prime
Workers, reset phase budgets or infer time spent from absent observations.
The existing linear static preflight precedes the unchanged 35-minute hosted
qualification; one additional public browser history has three fresh Workers,
with the existing 15-second per-case cap. Actual compilation, generated-code
correspondence, admission results, cleanup and whole-job fit remain unqualified
until the exact candidate runs. Original failures and future scheduling remain
separate from the source optimization.

The mandatory ApiCompat rail compares against actual published 0.5 P805400, its
manifest and signed served archive hashes. The exact original 0.5 candidate policy
remains a versioned historical evidence reader, not an execution fallback.

Accepted 0.5 publication/installed identities below remain immutable. The finite
installed binder still selects that exact publication and refuses the unpublished
0.6 successor; a later publication-specific qualifier requires genuine receipts.
This source assignment selects no publication, installed operation, consumer
activation, image/native workload or product outcome.

## Accepted 0.5 closed Worker and installed qualifier

The accepted source successor selected coherent `0.5.0` for the pair and SDK.
Published `0.4.0` and its historical P/Q installed qualification below remain unchanged.
The previous generated Worker policy formed an ESM import graph that had to evaluate
before the native entry installed its command handler. Request admission still
Expand Down
2 changes: 1 addition & 1 deletion eng/wasm-shared/version.props
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<Project>
<PropertyGroup>
<WasmSharedVersion>0.5.0</WasmSharedVersion>
<WasmSharedVersion>0.6.0</WasmSharedVersion>
<WasmSharedTag>wasm/v$(WasmSharedVersion)</WasmSharedTag>
</PropertyGroup>
</Project>
4 changes: 2 additions & 2 deletions examples/wasm/rust/bar-guest/Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion examples/wasm/rust/bar-guest/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "fsgg-wasm-bar-example"
version = "0.5.0"
version = "0.6.0"
edition = "2021"
license = "MIT"
publish = false
Expand Down
4 changes: 2 additions & 2 deletions examples/wasm/rust/sc2-guest/Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion examples/wasm/rust/sc2-guest/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "fsgg-wasm-sc2-example"
version = "0.5.0"
version = "0.6.0"
edition = "2021"
license = "MIT"
publish = false
Expand Down
Loading
Loading