commit 4a5f37a8d56f569536861d30a74d9f45467495d6 parent d8c961a7b87f68bb5097e799d6b37a49688573ec Author: James Eversole <james@eversole.co> Date: Sun, 18 Oct 2026 05:38:53 -0500 Refresh site for structural ASCII classifiers Pin the authenticated d8c961a compiler publication; refresh independent captures, environments, inspector packages and showcases. Preserve all 89 historical release records and exact bundles; add 18 releases at 0.1.4. Synchronize browser navigation with document replacement/readiness (including same-document fragment navigation), fixing an exposed reload race without relaxing assertions or budgets. JS parity, 89 Node tests, independent compiler/contracts checks, full Chromium, site/dependency builds and flake checks passed. No public deployment; rolling retention follows. Diffstat:
20 files changed, 174 insertions(+), 31 deletions(-)
diff --git a/ext/demo-site/bundles/123d0e0545da5796a30c4943bd9c4c61b8e5743e09d4e1e28de7e064744dc1a4.arboricx b/ext/demo-site/bundles/123d0e0545da5796a30c4943bd9c4c61b8e5743e09d4e1e28de7e064744dc1a4.arboricx Binary files differ. diff --git a/ext/demo-site/bundles/18e03a8ae0730fff1041ebb64076fb0815907642365110b5d33cc2aa030b315c.arboricx b/ext/demo-site/bundles/18e03a8ae0730fff1041ebb64076fb0815907642365110b5d33cc2aa030b315c.arboricx Binary files differ. diff --git a/ext/demo-site/bundles/2afb5aa9b578f9d95365c5f4ab8d93f366bbf37425c2b438459d549961f4964e.arboricx b/ext/demo-site/bundles/2afb5aa9b578f9d95365c5f4ab8d93f366bbf37425c2b438459d549961f4964e.arboricx Binary files differ. diff --git a/ext/demo-site/bundles/3887958c22983170103b70586b1109e012289cd5cb6494203f83657c39cf673c.arboricx b/ext/demo-site/bundles/3887958c22983170103b70586b1109e012289cd5cb6494203f83657c39cf673c.arboricx Binary files differ. diff --git a/ext/demo-site/bundles/3bd4df273ab4e4599417a18210ec3ad39e2ace2f7df6c0b7cad62999c4cb52a2.arboricx b/ext/demo-site/bundles/3bd4df273ab4e4599417a18210ec3ad39e2ace2f7df6c0b7cad62999c4cb52a2.arboricx Binary files differ. diff --git a/ext/demo-site/bundles/75ff201e0a0192236661f1fce192ff0cce490914cd90ee4a3c4b369e0046024a.arboricx b/ext/demo-site/bundles/75ff201e0a0192236661f1fce192ff0cce490914cd90ee4a3c4b369e0046024a.arboricx Binary files differ. diff --git a/ext/demo-site/bundles/7f7b4191c8780da6a4bf20084835e67007e9e5a7b9af43476b97faf502338545.arboricx b/ext/demo-site/bundles/7f7b4191c8780da6a4bf20084835e67007e9e5a7b9af43476b97faf502338545.arboricx Binary files differ. diff --git a/ext/demo-site/bundles/c8bc5c1ebeff9189d64ffd23554026d6f39aed92e2b25a4fa0935a0d25b99608.arboricx b/ext/demo-site/bundles/c8bc5c1ebeff9189d64ffd23554026d6f39aed92e2b25a4fa0935a0d25b99608.arboricx Binary files differ. diff --git a/ext/demo-site/bundles/cfb11a6ad90810350bd2042d81ec63404c5d6bb418512ffc5218c100431dd8ae.arboricx b/ext/demo-site/bundles/cfb11a6ad90810350bd2042d81ec63404c5d6bb418512ffc5218c100431dd8ae.arboricx Binary files differ. diff --git a/ext/demo-site/compiler-reference.v1 b/ext/demo-site/compiler-reference.v1 @@ -25,5 +25,5 @@ module lexer lexer lib/lexer.tri 946bbf9797a5cf722c6e85f36ac36b1ec2dd3d1f3b26501 module source.pattern source_pattern lib/source/pattern.tri b27f1eac18cbe8ad80cdd91f9f546b2d2a782b6cc5c5676232491b95751abe5a module source.equations source_equations lib/source/equations.tri 825f175f5c6dd56e103b94e924283acf5913cbc4554fb42fc07a034f460d2076 module source.stable source_stable lib/source/stable.tri ca105b189c1e70919efe86232915ba0c3bc43a385efa48a3c3269c5a17309e48 -module math.native native_math lib/math/native.tri 3ee81d8c129a511ddb26b34d22ebc4fe257fb124a99e2b2f1afce8a1b3087009 -bundle fba1d2b239b7d696b3d9418635f9c46894eabdb83ddce0a30b94310635dcd123 +module math.native native_math lib/math/native.tri e9d0b87564d13695bef695c552e9707710d9147877f9d9dc5282c7335664cc57 +bundle 5a856a7f88bdb6988da45636b047204bdfc0b04f9e484d56a5b9fa2fad6cd280 diff --git a/ext/demo-site/compiler.json b/ext/demo-site/compiler.json @@ -1,8 +1,8 @@ { "schema": 1, - "hash": "9debb54a2eeba75b0554403eae4f34a9ea033698f7323dcec70905864cb2508b", + "hash": "cfb11a6ad90810350bd2042d81ec63404c5d6bb418512ffc5218c100431dd8ae", "export": "source_unit.compileStableModuleDefinitions", "backend": "stable", "reference": "test/fixtures/compiler-library.arboricx", - "referenceCommit": "1a3085b60167a9e5095a3087f95b54d249eeb076" + "referenceCommit": "d8c961a7b87f68bb5097e799d6b37a49688573ec" } diff --git a/ext/demo-site/demos.json b/ext/demo-site/demos.json @@ -2,9 +2,9 @@ "schema": 1, "backend": "stable", "compilerExport": "source_unit.compileStableModuleDefinitions", - "compilerBundleSha256": "9debb54a2eeba75b0554403eae4f34a9ea033698f7323dcec70905864cb2508b", - "compilerManifest": "d9403160a778fdfda21980071d7cccbb5f68800ba6cab80c39bf72fa20d0084f", - "hostSha256": "3523842302c1d7340556616e8efe91ea57a4daf108baaeea5d382a7a7237aa45", + "compilerBundleSha256": "cfb11a6ad90810350bd2042d81ec63404c5d6bb418512ffc5218c100431dd8ae", + "compilerManifest": "e3ddc42beff8a5e766608635b281e69ce6fed96eafccbe599bc28e1e8ee095cd", + "hostSha256": "3a8fdccc62ac1611b7dfe99d311356661e5e890cc1dff083c6a03939cdf0be6f", "demos": { "intro": { "demandCases": [], diff --git a/ext/demo-site/environments.json b/ext/demo-site/environments.json @@ -1,6 +1,6 @@ { "schema": 1, - "compiler": "9debb54a2eeba75b0554403eae4f34a9ea033698f7323dcec70905864cb2508b", + "compiler": "cfb11a6ad90810350bd2042d81ec63404c5d6bb418512ffc5218c100431dd8ae", "profiles": { "empty": null, "practical": { diff --git a/ext/demo-site/lexer-demo.json b/ext/demo-site/lexer-demo.json @@ -2,7 +2,7 @@ "id": "lexer", "hash": "e756a481b3056a2e76f50316ccf77bfab8b15727b7bec899580c2eb919e668b2", "mode": "pure", - "compilerSha256": "08a1cefc326889f8a47090aa749844a81635d4e7d08c9b1654d97c6e1e7c55ae", + "compilerSha256": "18e03a8ae0730fff1041ebb64076fb0815907642365110b5d33cc2aa030b315c", "sourceSha256": "5478169b100e087b8f8862418a2cd5d0e593edcc299a122b762842483f4525e0", "haskellCases": [ { diff --git a/ext/demo-site/packages.json b/ext/demo-site/packages.json @@ -651,6 +651,134 @@ "manifest": "ed99e054e9c862668e165f458d3afcdc56279f766eea7a3886d440aea7252b63", "title": "Located scans: matched prefix, remainder and character positions", "demo": "lexer" + }, + { + "name": "tricu-base", + "version": "0.1.4", + "hash": "f9f0ab0e44f6ae39479d74c6c66a2bdaba3f40bd26781c3ec95300c2ee3c07f3", + "manifest": "fa9d4df0f82cac2754fdd3e92009cb48064856ff4cc5b18f092309aef7ff5ed4", + "title": "Foundation: lists, Results and decimal formatting" + }, + { + "name": "tricu-file-io", + "version": "0.1.4", + "hash": "401961d889131c735bf48b415f53d3b85dfab0136496299f60cf1dcb0b264f14", + "manifest": "6a22866c2cff143599cb854b2cd3bb3c8948e40835425ed62d942d88bed5c5aa", + "title": "File IO and hashing actions" + }, + { + "name": "arboricx-inspection", + "version": "0.1.4", + "hash": "f571888c5aa3f7a91e9d5d6c45c674851ea8e3598514ad8d535fd3e9056d0314", + "manifest": "fe9b420e1e776fa1dda7b77857e322c0509ed308bb18441b76a3b03023f93468", + "title": "Arboricx inspection: validate without execution" + }, + { + "name": "tricu-compiler", + "version": "0.1.4", + "hash": "cfb11a6ad90810350bd2042d81ec63404c5d6bb418512ffc5218c100431dd8ae", + "manifest": "e3ddc42beff8a5e766608635b281e69ce6fed96eafccbe599bc28e1e8ee095cd", + "title": "Compiler library (stable browser source-unit API; native helpers)" + }, + { + "name": "tricu-source-builder", + "version": "0.1.4", + "hash": "18e03a8ae0730fff1041ebb64076fb0815907642365110b5d33cc2aa030b315c", + "manifest": "c99df779634e0c6d66485959cac77435ceb344f5defa30bdfdec43f3471a88da", + "title": "Stable native application compiler (modules, imports and publication)" + }, + { + "name": "arboricx-server", + "version": "0.1.4", + "hash": "c8bc5c1ebeff9189d64ffd23554026d6f39aed92e2b25a4fa0935a0d25b99608", + "manifest": "451e24aeec39ff1295c0c735897dcefd34b9219ef72a8b0c619b678373afcfa1", + "title": "Arboricx registry server (native sockets and filesystem)" + }, + { + "name": "tricu-http", + "version": "0.1.4", + "hash": "7f7b4191c8780da6a4bf20084835e67007e9e5a7b9af43476b97faf502338545", + "manifest": "e6195e968697ca5799891bcd9096b568dceb717ea6e2b14adbdb8ca041a01691", + "title": "HTTP parsing, responses and native socket handlers" + }, + { + "name": "tricu-intensional-contracts", + "version": "0.1.4", + "hash": "dd39639f1d0a1a14f7856b8d0db682adf36d1e7501ea1889bd185ea500989380", + "manifest": "7467e74f0c5b7dfad8d6a14d34171b2b0bcd7750423894e2ca920e0535fde7d1", + "title": "Intensional contracts: tree shapes and numeric structure" + }, + { + "name": "tricu-graphs", + "version": "0.1.4", + "hash": "2afb5aa9b578f9d95365c5f4ab8d93f366bbf37425c2b438459d549961f4964e", + "manifest": "7b798a3afae6dce07b718bed855c7209ec3b898bb70b379dece935c4033cf9b6", + "title": "Dependency ordering and cycle witnesses (validated small graphs)" + }, + { + "name": "tricu-parser", + "version": "0.1.4", + "hash": "3887958c22983170103b70586b1109e012289cd5cb6494203f83657c39cf673c", + "manifest": "14282088469cc420dd014700da06998f6bb8dcf990fc885a464c0a1e1858e20d", + "title": "Parser combinators: diagnostics, consumption and commitment" + }, + { + "name": "tricu-math", + "version": "0.1.4", + "hash": "75ff201e0a0192236661f1fce192ff0cce490914cd90ee4a3c4b369e0046024a", + "manifest": "7f87549d587fa8c3be88af0ea988db3adcc3b35f1ffb48973553491b075614db", + "title": "Binary arithmetic and ASCII classifiers (canonical naturals only)" + }, + { + "name": "tricu-lexer", + "version": "0.1.4", + "hash": "123d0e0545da5796a30c4943bd9c4c61b8e5743e09d4e1e28de7e064744dc1a4", + "manifest": "816df1a32853750a1254112aff8ae8c55ca86bf70e809d226969ab1d43a6688b", + "title": "Located character scans and token positions" + }, + { + "name": "tricu-binary", + "version": "0.1.4", + "hash": "fe3b02f68025b90d0ce782885c8f72582642a985694eb4bcd702c2e006846a86", + "manifest": "7a24af56a9ce9b947cadcafd3a9da127b1507275bfac62b9fa55e27490b176dc", + "title": "Checked byte readers, prefix parsing and UTF-8 validation" + }, + { + "name": "tricu-patterns", + "version": "0.1.4", + "hash": "fb81fe47421564ac80fedc90be6003906e017978385f749d2da95297e58587c2", + "manifest": "703db8cd6c5679861257d1cc38c17be200241ade8db3812e8c387e9274aaa56e", + "title": "Ordered predicate/action dispatch and thunked conditionals" + }, + { + "name": "tricu-list-traversal", + "version": "0.1.4", + "hash": "60afc41f04fa65130326eeed4ca9e128bee5e90c7041f9641bbf9cfe87c142cd", + "manifest": "4c79b7ad124027147b8fddd98c2b66cfd776c36d915c95dfb1fbf9b31a51fb88", + "title": "Early-stopping list folds with retained input suffixes" + }, + { + "name": "tricu-formatter", + "version": "0.1.4", + "hash": "3bd4df273ab4e4599417a18210ec3ad39e2ace2f7df6c0b7cad62999c4cb52a2", + "manifest": "e8bad7dcea5944336083f5bfa3ada63d7542286fbdec0f34dfeb65e9879ba2fc", + "title": "Conservative tricu equation alignment (not an AST printer)" + }, + { + "name": "parser-demo", + "version": "0.1.4", + "hash": "355e41506f39e05da8c8a72a68aa810a486e062480322bac11af67e86980520e", + "manifest": "0c34bfdf800f8bd1b742e375a8f7c555c88d0c827268f684259433e834d94fed", + "title": "Parser combinators: complete input, prefixes and committed errors", + "demo": "parser" + }, + { + "name": "lexer-demo", + "version": "0.1.4", + "hash": "e756a481b3056a2e76f50316ccf77bfab8b15727b7bec899580c2eb919e668b2", + "manifest": "ed99e054e9c862668e165f458d3afcdc56279f766eea7a3886d440aea7252b63", + "title": "Located scans: matched prefix, remainder and character positions", + "demo": "lexer" } ] } diff --git a/ext/demo-site/parser-demo.json b/ext/demo-site/parser-demo.json @@ -2,7 +2,7 @@ "id": "parser", "hash": "355e41506f39e05da8c8a72a68aa810a486e062480322bac11af67e86980520e", "mode": "pure", - "compilerSha256": "08a1cefc326889f8a47090aa749844a81635d4e7d08c9b1654d97c6e1e7c55ae", + "compilerSha256": "18e03a8ae0730fff1041ebb64076fb0815907642365110b5d33cc2aa030b315c", "sourceSha256": "3405e18774db8de759b7793880e1568c156d68e5fe4a388e09b95ff301d896f5", "haskellCases": [ { diff --git a/ext/demo-site/test/browser.mjs b/ext/demo-site/test/browser.mjs @@ -125,7 +125,6 @@ try { socket.send(JSON.stringify({ id, method, params })); }); await send('Runtime.enable'); await send('Page.enable'); - await send('Page.navigate', { url }); const evaluate = async expression => { const result = await send('Runtime.evaluate', { expression, awaitPromise: true, returnByValue: true }); if (result.exceptionDetails) throw new Error(JSON.stringify(result.exceptionDetails)); @@ -139,16 +138,32 @@ try { } throw new Error('Timed out: ' + condition + '\n' + await evaluate('document.body.innerText')); }; + let navigation = 0; + const navigate = async (method, params = {}) => { + // A CDP navigation response is not a document-readiness barrier. Mark the + // old global so a still-live old handler cannot satisfy our next wait. + const marker = `browser-navigation-${++navigation}`; + await evaluate(`globalThis.__tricuBrowserNavigation = ${JSON.stringify(marker)}`); + const reply = await send(method, params); + // Fragment-only Page.navigate keeps the document (CDP omits loaderId). + if (method === 'Page.navigate' && !reply.loaderId) { + assert.equal(reply.errorText, undefined); + await wait(`document.readyState === 'complete' && location.href === ${JSON.stringify(params.url)}`); + return; + } + await wait(`document.readyState === 'complete' && globalThis.__tricuBrowserNavigation !== ${JSON.stringify(marker)}`); + }; const status = text => `document.getElementById('status')?.textContent === ${JSON.stringify(text)}`; const click = async id => { if (!id.startsWith('tab-')) await evaluate(`(()=>{const panel=document.getElementById(${JSON.stringify(id)}).closest('[role="tabpanel"]');if(panel)document.getElementById(panel.getAttribute('aria-labelledby')).click();})()`); await evaluate(`document.getElementById(${JSON.stringify(id)}).click()`); }; const openPlayground = async () => { - await wait("document.getElementById('tab-playground')?.onclick !== null"); + await wait("typeof document.getElementById('tab-playground')?.onclick === 'function'"); await click('tab-playground'); await wait(status('Ready')); }; - await wait("document.getElementById('tab-playground')?.onclick !== null"); + await navigate('Page.navigate', { url }); + await wait("typeof document.getElementById('tab-playground')?.onclick === 'function'"); assert.equal(await evaluate("document.getElementById('tab-how').getAttribute('aria-selected')"),'true'); assert.equal(await evaluate("document.getElementById('playground').inert"),true); assert.equal(requests.some(path=>path.endsWith('/catalogue.json')||path.endsWith('/compiler.json')||path.startsWith('/_arboricx/bundle/hash/')),false); @@ -202,7 +217,7 @@ try { await evaluate("document.getElementById('program-picker').value='package:tricu-base';document.getElementById('program-picker').dispatchEvent(new Event('change'))"); assert.equal(await evaluate("document.getElementById('program-release').hidden"),false); assert.equal(await evaluate("document.getElementById('program-hash').hidden"),true); - assert.equal(await evaluate("document.getElementById('package-version').value"),'0.1.2','published packages default to newest release'); + assert.equal(await evaluate("document.getElementById('package-version').value"),'0.1.4','published packages default to newest release'); assert.equal(await evaluate("document.getElementById('run').disabled"),true); assert.match(await evaluate("document.getElementById('package-info').textContent"),/No bundle loaded/); for(const name of [...new Set(packageIndex.releases.filter(r=>!r.demo).map(r=>r.name))]) { @@ -368,7 +383,7 @@ try { await evaluate("document.getElementById('export').value='add';document.getElementById('export').dispatchEvent(new Event('change'));document.getElementById('arguments').value=JSON.stringify([{type:'number',value:'123456789'},{type:'number',value:'11'}]);document.getElementById('output-type').value='number'"); await click('run');await wait(status('Finished')); assert.equal(await evaluate("document.getElementById('result').textContent"),'Returned number: "123456800"'); - await evaluate("document.getElementById('program-picker').value='package:tricu-compiler';document.getElementById('program-picker').dispatchEvent(new Event('change'));document.getElementById('package-version').value='0.1.3';document.getElementById('package-version').dispatchEvent(new Event('change'))"); + await evaluate("document.getElementById('program-picker').value='package:tricu-compiler';document.getElementById('program-picker').dispatchEvent(new Event('change'));document.getElementById('package-version').value='0.1.4';document.getElementById('package-version').dispatchEvent(new Event('change'))"); await click('load-release');await wait(status('Ready')); assert.equal(await evaluate("document.getElementById('source-summary').textContent"),'Package details'); assert.equal(await evaluate("document.getElementById('edit-source').hidden"),true); @@ -615,7 +630,7 @@ try { assert.equal(await evaluate("document.getElementById('run').disabled"),true); } console.log('PASS corrupt hash / oversized download / malformed bundle fail closed'); - await send('Page.navigate',{url:url+'#bundle='+published.id+'&export=id'});await openPlayground(); + await navigate('Page.navigate',{url:url+'#bundle='+published.id+'&export=id'});await openPlayground(); assert.equal(await evaluate("document.getElementById('export').value"),'id'); assert.equal(await evaluate("document.getElementById('terminal').textContent"),''); console.log('PASS share selection loads metadata without executing'); @@ -917,7 +932,7 @@ try { postMessage(message){if(message.type===globalThis.timeoutOperation){this.stalled=true;return;}super.postMessage(message);} terminate(){if(this.stalled)globalThis.stalledWorkerTerminated=true;super.terminate();} };`}); - await send('Page.reload');await openPlayground(); + await navigate('Page.reload');await openPlayground(); for(const pane of ['tab-playground','tab-export-definition']){ await click(pane); await evaluate("globalThis.timeoutOperation='load';globalThis.stalledWorkerTerminated=false;document.getElementById('program-picker').value='demo:greet';document.getElementById('program-picker').dispatchEvent(new Event('change'))"); @@ -947,7 +962,7 @@ try { } terminate() { this.spin?.terminate(); super.terminate(); globalThis.testWorkerTerminated = true; } };` }); - await send('Page.reload'); await openPlayground(); + await navigate('Page.reload'); await openPlayground(); await evaluate("document.getElementById('uncapped').checked=false;document.getElementById('uncapped').dispatchEvent(new Event('change'))");await wait(status('Ready')); await click('run'); await wait(status('Stopped'), 13); assert.match(await evaluate("document.getElementById('result').textContent"), /Program execution stopped: active time limit exceeded/); @@ -990,7 +1005,7 @@ try { postMessage(message){if(message.type==='compile')this.spin=new BaseWorker(URL.createObjectURL(new Blob(['while(true){}'],{type:'text/javascript'})));else super.postMessage(message);} terminate(){this.spin?.terminate();super.terminate();globalThis.compilerWorkerTerminated=true;} };`}); - await send('Page.reload');await openPlayground(); + await navigate('Page.reload');await openPlayground(); await evaluate("document.querySelector('[data-compiler-example=identity]').click()"); await evaluate("document.getElementById('compiler-uncapped').checked=true;document.getElementById('compiler-uncapped').dispatchEvent(new Event('change'))"); await click('compile'); @@ -1017,8 +1032,8 @@ try { // Reload a real Worker page, check narrow layout and optionally save a screenshot. await send('Page.removeScriptToEvaluateOnNewDocument', { identifier: watchdogScript.identifier }); - await send('Page.navigate', { url }); - await wait("document.getElementById('tab-playground')?.onclick !== null"); + await navigate('Page.navigate', { url }); + await wait("typeof document.getElementById('tab-playground')?.onclick === 'function'"); await send('Emulation.setDeviceMetricsOverride', { width: 390, height: 844, deviceScaleFactor: 1, mobile: true }); assert.equal(await evaluate('document.documentElement.scrollWidth <= window.innerWidth'), true); for(const id of ['tab-playground','tab-export-definition','tab-how']) { @@ -1113,7 +1128,7 @@ try { const future={...packageIndex.releases.find(r=>r.demo==='intro'),version:'0.10.0',hash:published.id}; indexOverride={...packageIndex,releases:[future,...packageIndex.releases]}; await evaluate("history.replaceState(null,'',location.pathname)"); - await send('Page.reload');await openPlayground(); + await navigate('Page.reload');await openPlayground(); assert.equal(await evaluate("document.getElementById('program-picker').value"),'demo:intro'); assert.equal(await evaluate("document.getElementById('package-version').value"),'0.10.0'); assert.match(await evaluate("document.getElementById('package-info').textContent"),new RegExp(published.id)); @@ -1123,7 +1138,7 @@ try { await evaluate("document.getElementById('program-picker').value='demo:intro';document.getElementById('program-picker').dispatchEvent(new Event('change'))");await wait(status('Ready')); assert.equal(await evaluate("document.getElementById('package-version').value"),'0.10.0','reselecting example also defaults to latest'); await evaluate(`history.replaceState(null,'',location.pathname+'#bundle=${intro.hash}&demo=intro')`); - await send('Page.reload');await openPlayground(); + await navigate('Page.reload');await openPlayground(); assert.equal(await evaluate("document.getElementById('package-version').value"),'0.1.0','shared hash does not upgrade to latest'); assert.equal(await evaluate("document.getElementById('source-editor').value"),intro.source); indexOverride=undefined; @@ -1153,7 +1168,7 @@ try { for(const key of ['localStorage','sessionStorage'])Object.defineProperty(globalThis,key,{configurable:true,get(){globalThis.storageTouches.push(key);throw new DOMException('blocked','SecurityError');}}); globalThis.confirm=()=>{throw Error('Unexpected confirmation');};`}); await evaluate("history.replaceState(null,'',location.pathname)"); - await send('Page.reload');await openPlayground(); + await navigate('Page.reload');await openPlayground(); const original=await evaluate("document.getElementById('source-editor').value"); assert.doesNotMatch(original,/oldDraft/); assert.equal(await evaluate("document.getElementById('program-picker').value"),'demo:intro'); @@ -1171,14 +1186,14 @@ try { assert.equal(await evaluate("document.getElementById('source-editor').value"),'id = ('); assert.deepEqual(await evaluate('globalThis.storageTouches'),[]); const beforeReload=requests.filter(path=>path.endsWith('/compiler.json')).length; - await send('Page.reload');await openPlayground(); + await navigate('Page.reload');await openPlayground(); assert.equal(await evaluate("document.getElementById('source-editor').value"),original,'reload starts with published source, not the failed or saved draft'); assert.equal(requests.filter(path=>path.endsWith('/compiler.json')).length,beforeReload,'reload does not compile'); assert.equal(await evaluate("document.getElementById('run').textContent"),'Run published'); assert.equal(await evaluate("document.getElementById('result').textContent"),''); assert.deepEqual(await evaluate('globalThis.storageTouches'),[]); await evaluate(`history.replaceState(null,'',location.pathname+'#bundle=${published.greet}&demo=greet&export=main')`); - await send('Page.reload');await openPlayground(); + await navigate('Page.reload');await openPlayground(); assert.equal(await evaluate("document.getElementById('program-picker').value"),'demo:greet','a shared published selection wins over obsolete stored drafts'); assert.equal(await evaluate("document.getElementById('source-editor').value"),greeting.source); assert.equal(await evaluate("document.getElementById('terminal').textContent"),''); diff --git a/ext/demo-site/test/compiler-conformance.json b/ext/demo-site/test/compiler-conformance.json @@ -1,6 +1,6 @@ { - "compilerBundleSha256": "9debb54a2eeba75b0554403eae4f34a9ea033698f7323dcec70905864cb2508b", - "hostSha256": "3523842302c1d7340556616e8efe91ea57a4daf108baaeea5d382a7a7237aa45", + "compilerBundleSha256": "cfb11a6ad90810350bd2042d81ec63404c5d6bb418512ffc5218c100431dd8ae", + "hostSha256": "3a8fdccc62ac1611b7dfe99d311356661e5e890cc1dff083c6a03939cdf0be6f", "backend": "stable", "export": "source_unit.compileStableModuleDefinitions", "cases": [ diff --git a/ext/demo-site/test/conformance.json b/ext/demo-site/test/conformance.json @@ -1,5 +1,5 @@ { - "hostSha256": "3523842302c1d7340556616e8efe91ea57a4daf108baaeea5d382a7a7237aa45", + "hostSha256": "3a8fdccc62ac1611b7dfe99d311356661e5e890cc1dff083c6a03939cdf0be6f", "description": "All normal trees <=5 nodes, every ordered application pair; lazy regression and partial/multiple applications.", "cases": [ { diff --git a/ext/demo-site/test/contracts-conformance.json b/ext/demo-site/test/contracts-conformance.json @@ -1,6 +1,6 @@ { - "compilerBundleSha256": "9debb54a2eeba75b0554403eae4f34a9ea033698f7323dcec70905864cb2508b", - "hostSha256": "3523842302c1d7340556616e8efe91ea57a4daf108baaeea5d382a7a7237aa45", + "compilerBundleSha256": "cfb11a6ad90810350bd2042d81ec63404c5d6bb418512ffc5218c100431dd8ae", + "hostSha256": "3a8fdccc62ac1611b7dfe99d311356661e5e890cc1dff083c6a03939cdf0be6f", "contractsSourceSha256": "8f69b32c50461edd5db536becb6faedd5ba33945bf774534592034350702600a", "bindings": { "matchResult": "base.matchResult",