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","0b92e4db5e34990113bb43cb8cd58cf251d06083cf812398d6da9fdebb98e0f5","2056fa8b653c2240afdad2a16f572a07019109254847829610a9468bb2f95248","231df3792931ad2333d00970a5993b3e13fa9dc38f687899f9fa2c966ed9fbfa","24fdc3980640ba58bedcae6f16d5b467eb7383c31161fb9b6ff10fd2e667b0e5","264a2f7887a9b6473cbc24102e1bf9be70e57f6d7ba224138140efa094d541f4","2b7dfb3a2f76368cb603161cdb6f8fa8c2b8afc3e96659dd37c975921ba5ba66","33df463263533529cca24a0b09937573f836d197cc1a739e9960b1cdd4deb1fd","343077d02ddd266b21d8677f7c256854134f7e3e2d18137b55ebe3f32564c5c0","34391bda3fb56135a2bddf74ab790958c175bc6a69c38175e6f8db792cfd50a0","36a19fefd7024f54f3391ffed19019c10222a514719edd7a44f0cde2a1c48258","3d3a0a302c02cd0bfee86715d09b0211baa8dad3e47402c638fc95c7cfa02e87","3de8718fb3ca9b15212e8bd84fba205995d24636087090a61c63c28a96a745b1","3df4f31fda99ad137c651322ad29809e36380400516399274870b4a4332b4a92","3f09ee199e3c2e808e0f6e74f197f2fdd8158ae099a7195c498ce9466bb78b03","44bda82d6f9a9625a83283bf56a15a1831f287037214dc134eeeae87f1faa869","6c5b38ee260d1f15f8029d699ec1cebceafb5e1407a6341dc7a4b96f4d9d3521","71bc29a175940d22dd1d85148ee49f47aed714395fbd51d07b8751147815a55f","72742cbaa561237f10251e94aa5c61153ab5c7f14fc5771b7a5ebdece1e1cb11","7eba935f363db90d4b6d3fea2d226a7a58b08b88cf748e619ddb407ea83911e9","7f62ef13b4b46b4f23cae9536c977c15c85320a253ed2bc609eb7a1f0afdcf56","85f06991da74fa4e59ba73c7034dc53a35a4e90c5b64d83cc8956d3afd61d376","87d6de6f3730cecd75d9a4411bf4dbac4e058127a3ce9f46b07f6de110bc26de","8b1cf51c5f03c0ae19c46ca3ea4a1158acbb6e47bf109ca8c506c5417b51cf9f","8c514796f190fe6d4307be57983c84f92208f5d2f00fcbe3093b72618f2d7bc1","95115e1052b5ea4fcd393f5c9b9c6f0298657f0028eee84e16215ede97576cfa","9b6c05923a43ea37b10504396105d97ba51c0430e82fb3bb4953ee4256cdc1aa","a38737476856236f33e0aef1b97e2b900677cf99f1dbcfd381c708ceeca8b7f3","ab4502eff76606ac8e58b623878f3d76e1e0b18f30796aec7c446e2aab8b57c8","ab69ebe00eac40c68aec6131ef0559967b399266aae89f9673d3c30ce12f36b0","be492023350541da5256d6f653711b5f736d5216cf121a7e02ca43e1887215e4","c01c2c98f13a65b49113916a2f295e46a03fc4c185ece880267dd86c3f3dee8b","d557525e3ebfad227c8d6db9bb6350d42506fb02b1de8058cb443f4f008c0f67","d9718eb12e9ae9ea3a29a9904f131f53e99c584ef1b297aa05f1f8f6cdc6ab2a","fa8cd29fe962d7e853457e829c2d5927685f0ff374e6450fff5529f785db442d"],"schema":"fsgg.atlas/1"}
{"records":["049f1d0d8155f65b6f7675ebdb200d4595570cc7d585dd74876e0285eceffed6","0863093e69a16355fa9b90f8e7e29156ea4ad88c4523bc4883568bde831bdf35","0b92e4db5e34990113bb43cb8cd58cf251d06083cf812398d6da9fdebb98e0f5","2056fa8b653c2240afdad2a16f572a07019109254847829610a9468bb2f95248","231df3792931ad2333d00970a5993b3e13fa9dc38f687899f9fa2c966ed9fbfa","24fdc3980640ba58bedcae6f16d5b467eb7383c31161fb9b6ff10fd2e667b0e5","264a2f7887a9b6473cbc24102e1bf9be70e57f6d7ba224138140efa094d541f4","2b7dfb3a2f76368cb603161cdb6f8fa8c2b8afc3e96659dd37c975921ba5ba66","33df463263533529cca24a0b09937573f836d197cc1a739e9960b1cdd4deb1fd","343077d02ddd266b21d8677f7c256854134f7e3e2d18137b55ebe3f32564c5c0","34391bda3fb56135a2bddf74ab790958c175bc6a69c38175e6f8db792cfd50a0","36a19fefd7024f54f3391ffed19019c10222a514719edd7a44f0cde2a1c48258","3d3a0a302c02cd0bfee86715d09b0211baa8dad3e47402c638fc95c7cfa02e87","3de8718fb3ca9b15212e8bd84fba205995d24636087090a61c63c28a96a745b1","3df4f31fda99ad137c651322ad29809e36380400516399274870b4a4332b4a92","3f09ee199e3c2e808e0f6e74f197f2fdd8158ae099a7195c498ce9466bb78b03","44bda82d6f9a9625a83283bf56a15a1831f287037214dc134eeeae87f1faa869","5466c617291eff27f59b569a2d42a18dc0c134d4935d52d802c5a71b8a594281","6c5b38ee260d1f15f8029d699ec1cebceafb5e1407a6341dc7a4b96f4d9d3521","71bc29a175940d22dd1d85148ee49f47aed714395fbd51d07b8751147815a55f","72742cbaa561237f10251e94aa5c61153ab5c7f14fc5771b7a5ebdece1e1cb11","7eba935f363db90d4b6d3fea2d226a7a58b08b88cf748e619ddb407ea83911e9","7f62ef13b4b46b4f23cae9536c977c15c85320a253ed2bc609eb7a1f0afdcf56","85f06991da74fa4e59ba73c7034dc53a35a4e90c5b64d83cc8956d3afd61d376","87d6de6f3730cecd75d9a4411bf4dbac4e058127a3ce9f46b07f6de110bc26de","8b1cf51c5f03c0ae19c46ca3ea4a1158acbb6e47bf109ca8c506c5417b51cf9f","8c514796f190fe6d4307be57983c84f92208f5d2f00fcbe3093b72618f2d7bc1","95115e1052b5ea4fcd393f5c9b9c6f0298657f0028eee84e16215ede97576cfa","9b6c05923a43ea37b10504396105d97ba51c0430e82fb3bb4953ee4256cdc1aa","a38737476856236f33e0aef1b97e2b900677cf99f1dbcfd381c708ceeca8b7f3","ab4502eff76606ac8e58b623878f3d76e1e0b18f30796aec7c446e2aab8b57c8","ab69ebe00eac40c68aec6131ef0559967b399266aae89f9673d3c30ce12f36b0","be492023350541da5256d6f653711b5f736d5216cf121a7e02ca43e1887215e4","c01c2c98f13a65b49113916a2f295e46a03fc4c185ece880267dd86c3f3dee8b","d557525e3ebfad227c8d6db9bb6350d42506fb02b1de8058cb443f4f008c0f67","d9718eb12e9ae9ea3a29a9904f131f53e99c584ef1b297aa05f1f8f6cdc6ab2a","fa8cd29fe962d7e853457e829c2d5927685f0ff374e6450fff5529f785db442d"],"schema":"fsgg.atlas/1"}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"citations":[{"path":"docs/roadmaps/wasm-shared-01.md","repository":"FS-GG/FS.GG.Game","revision":"d492d37b711d0767db8179d84a062d6a6107c990","sha256":"dd2504b52a261ceba43671ad411323417b4063d3405a9e810badcbdacfb9e636"},{"path":"scripts/wasm-release/bind-installed-release.py","repository":"FS-GG/FS.GG.Game","revision":"d492d37b711d0767db8179d84a062d6a6107c990","sha256":"902739145ec2a456c08420edff822a4dcafb7a375931a19e104d584a97a5dbf8"},{"path":"scripts/wasm-release/installed-evidence.py","repository":"FS-GG/FS.GG.Game","revision":"d492d37b711d0767db8179d84a062d6a6107c990","sha256":"b7b71f15d8a2ea33934d9165b74d40e892e73b55d1f371656b234f61a4e9b53d"},{"path":"tests/release/wasm/test-installed-evidence.py","repository":"FS-GG/FS.GG.Game","revision":"d492d37b711d0767db8179d84a062d6a6107c990","sha256":"fc4e97a0be7da935df29a11e256d2e51358e5b447a0c82d8b5e1c18218fce988"},{"path":"tests/release/wasm/test-installed-org-workflow.py","repository":"FS-GG/FS.GG.Game","revision":"d492d37b711d0767db8179d84a062d6a6107c990","sha256":"c57fd29abcbe9e87e6848c3835751bf35333bae61a2df01c2db027dba7df8ff3"},{"path":"tests/release/wasm/test-release-promotion.py","repository":"FS-GG/FS.GG.Game","revision":"d492d37b711d0767db8179d84a062d6a6107c990","sha256":"e0655c8274b4d9eba1ae53709324e037fa6e2d0985b0039f4692add6cd7cf3a3"},{"path":"scripts/verify-wasm-package-consumer.sh","repository":"FS-GG/FS.GG.Game","revision":"8a5e63ba50d4b3cb7b5a66bb4136990d5589ee9e","sha256":"31d98f934faee58ade6b84ed776bfd344435601b3a5f6741877e45781ce953ac"},{"path":"scripts/wasm-release/qualify-supervisor-installed.sh","repository":"FS-GG/FS.GG.Game","revision":"8a5e63ba50d4b3cb7b5a66bb4136990d5589ee9e","sha256":"a45fb4432a367edf631d8a013ff85022d57a46c84d2fec848fd37053023b8893"},{"path":".github/workflows/wasm-installed-org.yml","repository":"FS-GG/FS.GG.Game","revision":"8a5e63ba50d4b3cb7b5a66bb4136990d5589ee9e","sha256":"5d9a89a860e6af539ce4c5e99add2a2d5cc50e217ae36b720a2b8f90a9434221"},{"path":"sdk/wasm/build-source-archive.sh","repository":"FS-GG/FS.GG.Game","revision":"8a5e63ba50d4b3cb7b5a66bb4136990d5589ee9e","sha256":"24dfc2ef6f8ed0a0c029980e25c2ee578beb0cca7abe22964a2fe2bc3cc9ce09"},{"path":"scripts/wasm-release/promotion.py","repository":"FS-GG/FS.GG.Game","revision":"8a5e63ba50d4b3cb7b5a66bb4136990d5589ee9e","sha256":"d2ea88920b22e30df973765085c92116685dda689616045bb3b01080bd5d848d"},{"path":".github/workflows/release-wasm.yml","repository":"FS-GG/FS.GG.Game","revision":"8a5e63ba50d4b3cb7b5a66bb4136990d5589ee9e","sha256":"8a914479ddb212047706e6ec51440a7425c68df53a8cb5a25c8f4d14cc8fdf17"}],"conflictsWith":[],"id":"game/current-wasm-custody-source-boundary","kind":"boundary","recordedAt":"2026-10-18T02:17:20Z","repository":"FS-GG/FS.GG.Game","schema":"fsgg.atlas/1","status":"recorded","summary":"Immutable published0.6 remains P8a5e63ba50d4b3cb7b5a66bb4136990d5589ee9e/tree090906c22f0ef0cd3ca453a28ca20ce8686e0753, protected39084881928/artifact12120591664 and accepted publisher39085989107/a1/release416167085/transactionfa7a48d1b389116b18f00b5ec94dd83e82bfd3fd9e4032fe052eb13eab019119. Manifest e40258fe5cf6471c868afe0f6405d482a5a60ccfdb192f8cdb36b36adf08b8ff and SDK b06bdd4a75e9f9727f58cdbeb272e42f1c88607f2326152c67feb5dc5aeccd6f remain exact P originals. The served SDK contains SDK/examples, not installed collector/binder/qualification helpers; changed Q collection code must never be compared to, inserted into or repacked as P SDK payload.\n\nPR724 delivered Q025cbfd4b3efed0a3baf87c52ebae404124cd814/tree4fc6eb4b9d745d1f0869fa32a411ea00a7f09448 after accepted source original39086999965/a1. First selected served-feed installed39088631914/a1 then failed both feeds. Each actual consumer compiled and passed36 browser cases; authoritative consumer status is runtime0/collection1/directcleanup0/descendantsunproved. Selected-supervisor qualification was unreached. The first recorded evidence refusal is actual Fable library Array.js trying to join nonexistent fs.gg.wasm.browser.0.5.0.nupkg. Fixed5 names also affected package cache, Fable package modules, SDK, merge/assembly and authenticated receipt equality. Existing trap correctly preserved collection failure after runtime success. Native artifacts org12122285091/SHAf79eefd4ec6cdb91f4e14fa641ec29e0777c68f859019dd5d72aa00993feb792 and public12121452710/SHAa5541e625500eba0112c7edeff5db6e6c3462bcc1b20b9762df637f1409a7f1d retain204members each and are ineligible. Independent failed-original review corroborates exact native identities, statuses and representative published Worker bytes; no installed acceptance or first-cause substitution follows. Original failure is consumed, not retried; its temporary source hold ended only after actual terminal/readback disposition.\n\nThe selected finite qualifier correction derives one unambiguous stable VERSION from audited tracked version.props, without environment/CLI selectors, stale-cache inference or old5 fallback. One SDK_ARCHIVE and exact current package/module/cache names are used throughout consumer, selected original-member joins, Fable roles, merge and assembled receipt equality. Fable5.18, Core official TFM roles, exact module stems/contexts, mandatory originals, byte equality, regular/single-link files and512MiB total/256MiB file/32MiB logs/1MiB metadata/1024member bounds remain unchanged. All producer/runtime/version.props/SDK/workflow/promotion/pin inputs remain P-identical; collector/binder qualification inputs belong to selected Q, not P.\n\nAuthority is the existing immutable P/tree, ancestry, complete raw no-rename path/mode/blob/hash audit and actual clean current Q=GITHUB_SHA=GITHUB_WORKFLOW_SHA=ACCEPTED_EXECUTOR/QUALIFIER_SOURCE on genuine main/manual-event/attempt1/installed job/feed. The finite P-to-successor-Q closure retains the prior seven exact leaves, adds only installed-evidence.py/test-installed-evidence.py and this exact new capture leaf. No prefix/glob, arbitrary descendant, historical executor overlay, publisher/repack or runtime permission is admitted. Source audit establishes correspondence; independent exact-source/root review and actual native admission still establish the selected invocation.\n\nActual current CLI consumer→sidecar/tar→merge→selected→assemble controls use unchanged maintained script bytes and declared synthetic archives/runtime-shaped files, never executed fixtures. They exercise original Array.js/current archive provenance, hostile5 environment, old-only cache/Fable/SDK refusals and unequal authenticated SDK bytes. The actual EXIT trap invokes the real collector, deletes only private fixture work and preserves runtime/collection/cleanup/merged eligibility; independent controlled failure ports retain runtime-first, then collection, then cleanup and command/log priorities. Real source_audit controls cover exact collector/test positive, missing allowlist entry, excluded version/runtime/SDK/workflow/promotion/arbitrary leaves, mode/delete/rename/link and wrong P/tree. Affected source-mapping/workflow and18inert collector tests pass. Early broad local preflight on a dirty tree and extra256MiB address-space ceiling refused; clean unchanged37promotion controls subsequently passed in1.58s/~42MiB peak RSS with a compatible local data-read ceiling. No native collector/payload cap was raised.\n\nWhole connected source review passes for this prepared correction; exact final capture/leaf audit and root authority review precede ordinary source admission. Fresh current source compilation/coherentCI, qualified source delivery and separately selected both-feed installed operation remain required; no unchanged rerun is selected. Automatic protectedQ39088390588 remains independent evidence. Last accepted served installed producer remains0.5 Qc938/original39076218708; current0.6 publication/source/consumer runtime passes do not establish installed0.6, product/native/image/wholeS1, descendant settlement, old timeout cause or future timing fit. Original logs/archives stay in restricted custody rather than Atlas.","supersedes":["be492023350541da5256d6f653711b5f736d5216cf121a7e02ca43e1887215e4"],"tags":["wasm","qualification","current-only","custody","collector","publication","first-cause"],"title":"Keep published 0.6 originals immutable while repairing finite current qualifier evidence"}
50 changes: 41 additions & 9 deletions docs/roadmaps/wasm-shared-01.md
Original file line number Diff line number Diff line change
Expand Up @@ -57,15 +57,47 @@ and original promotion-binding SHA-256 is
`fa7a48d1b389116b18f00b5ec94dd83e82bfd3fd9e4032fe052eb13eab019119`.
The source hold ended after accepted original terminal/readback evidence.

The finite read-only installed binder now selects only this published 0.6 P/tree.
The selected qualifier Q must be the actual clean current main/dispatch executor,
with the complete closed P-to-Q path audit and genuine original publication
receipts. Runtime, build, workflow and profile bytes remain unchanged. Historical
0.5/0.4 installed successes stay immutable evidence, not alternative current
execution routes. Qualifier source CI/delivery and a separately selected fresh
org/public installed operation remain required. Last accepted installed remains
0.5 at Q `c938e9158542e3a0572b62dd09c01ad01cbb344f`; publication alone accepts
no installed 0.6, SC2 adoption, image/native workload or product outcome.
The finite read-only installed binder selects only this published 0.6 P/tree.
[PR724](https://github.com/FS-GG/FS.GG.Game/pull/724) delivered qualifier
`025cbfd4b3efed0a3baf87c52ebae404124cd814`, with exact tested/delivered tree
`4fc6eb4b9d745d1f0869fa32a411ea00a7f09448`. Its original source qualification
39086999965/attempt1 passed50 Lifecycle controls,36 browser cases and the final
default53/selected16 compiled cohorts. That source result did not exercise the
feed-only evidence projection.

The first selected served-feed operation,
[39088631914/attempt1](https://github.com/FS-GG/FS.GG.Game/actions/runs/39088631914),
failed on both feeds. Each actual consumer compiled and passed36 browser cases;
the consumer's recorded runtime was0, collection1 and direct cleanup0, with
descendant settlement unproved. The first recorded projection refusal concerns
the actual Fable library `Array.js`: the collector requested an obsolete
`fs.gg.wasm.browser.0.5.0.nupkg` original. The same duplicated version assumption
also affected package-cache, Fable package-module, SDK and assembled receipt
paths. The existing shell trap preserved the runtime/collection distinction and
exited1 on collection failure; the selected-supervisor stage was not reached.
Both ineligible original artifacts and native failures remain retained. Neither
the successful consumer runtime nor the later failed collector is installed
acceptance, and no unchanged retry or package replacement is selected.

The prepared collector correction derives one current namespace from the audited
tracked `version.props`, with stable-version validation and no environment/CLI
version override or historical fallback. Consumer, selected dependency originals,
Fable roles, SDK, merge and authenticated receipt joins use that same input.
Existing mandatory roles, byte joins, link/census/size refusals and first-cause
ordering remain. Inert controls run the maintained consumer and assemble CLI
actions against a declared synthetic file topology, including current dependency
bytes, stale-cache refusal and a mismatched authenticated SDK receipt. These are
projection controls; they execute no fixture runtime or installed consumer.

Any successor qualifier must be the actual clean current main/dispatch executor,
with a reviewed finite P-to-Q file/blob audit and genuine original publication
receipts. Collector/test changes require an explicit bounded qualifier closure;
the earlier seven-file binder does not authorize them. Runtime, workflow, package
pins and profile remain unchanged. Historical0.5/0.4 successes remain immutable
evidence, not execution alternatives. Fresh source qualification and a separately
selected installed operation remain required. Last accepted installed remains0.5
at Q `c938e9158542e3a0572b62dd09c01ad01cbb344f`; installed0.6, image/native and
whole-product acceptance remain open.

### First 0.6 source qualification and exact follower-expiry proof

Expand Down
5 changes: 4 additions & 1 deletion scripts/wasm-release/bind-installed-release.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,12 +19,15 @@
# for arbitrary descendants or semantic changes inside a broad scripts prefix.
INSTALLED_PATHS = frozenset({
'scripts/wasm-release/bind-installed-release.py',
'scripts/wasm-release/installed-evidence.py',
'tests/release/wasm/test-installed-evidence.py',
'tests/release/wasm/test-installed-org-workflow.py',
'tests/release/wasm/test-release-promotion.py',
'docs/roadmaps/wasm-shared-01.md',
'docs/atlas/catalog.json',
'docs/atlas/records/7f62ef13b4b46b4f23cae9536c977c15c85320a253ed2bc609eb7a1f0afdcf56.json',
'docs/atlas/records/be492023350541da5256d6f653711b5f736d5216cf121a7e02ca43e1887215e4.json',
'docs/atlas/records/5466c617291eff27f59b569a2d42a18dc0c134d4935d52d802c5a71b8a594281.json',
})


Expand Down Expand Up @@ -90,7 +93,7 @@ def fingerprint(revision, blob):
assert rows, 'installed correction must be an explicit reviewed source change'
return {'schema':'fsgg.wasm.installed-inputs/v1','publishedSource':source,'publishedTree':PUBLISHED_TREE,
'qualifierSource':qualifier,'qualifierTree':git('rev-parse',qualifier+'^{tree}'),'changes':rows,
'consumerInputs':'all paths outside exact reviewed repair closure byte-identical'}
'consumerInputs':'all paths outside exact reviewed qualifier correction byte-identical to P; published packages/SDK remain P inputs, evidence collector/binder are selected Q inputs'}


def bind_executor(source, executor, version):
Expand Down
Loading
Loading