diff --git a/patches/airborne-submarine-squadron.patch b/patches/airborne-submarine-squadron.patch new file mode 100644 index 00000000..616d3d9c --- /dev/null +++ b/patches/airborne-submarine-squadron.patch @@ -0,0 +1,341 @@ +diff --git a/.github/workflows/actions.lock b/.github/workflows/actions.lock +index 9efbbfc..52f7e80 100644 +--- a/.github/workflows/actions.lock ++++ b/.github/workflows/actions.lock +@@ -8,7 +8,7 @@ workflows: + - 'denoland/setup-deno@v2.0.5' + '.github/workflows/codeql-analysis.yml': + - 'actions/checkout@v7.0.1' +- - 'github/codeql-action@v4.38.0' ++ - 'github/codeql-action@v4.38.1' + '.github/workflows/dogfood-gate.yml': + - 'actions/checkout@v7.0.1' + - 'hyperpolymath/deed-ecosystem@main' +@@ -61,9 +61,9 @@ dependencies: + commit: 'sha1-22d081ff2d3a40755e97629de92e3bcbfa7cf2ed' + owner_id: 42048915 + repo_id: 356423100 +- 'github/codeql-action@v4.38.0': +- ref: 'v4.38.0' +- commit: 'sha1-b96794f015dfd88f77b49b1c93e0fa7110f94c63' ++ 'github/codeql-action@v4.38.1': ++ ref: 'v4.38.1' ++ commit: 'sha1-1c5b675653bb5c22dbe9b12b556ec555138e09fd' + owner_id: 9919 + repo_id: 259445878 + 'hyperpolymath/deed-ecosystem@main': +diff --git a/.github/workflows/build-chain.yml b/.github/workflows/build-chain.yml +index aa03266..200dd1a 100644 +--- a/.github/workflows/build-chain.yml ++++ b/.github/workflows/build-chain.yml +@@ -1,7 +1,5 @@ +-# This workflow is managed by gh actions-lock. + # SPDX-License-Identifier: AGPL-3.0-or-later + # This workflow is managed by gh actions-lock. +-# This workflow is managed by gh actions-lock. + # AffineScript build-chain gate — validates that build.sh produces a + # usable WASM artifact under the three supported scenarios: + # 1. affinescript is on PATH (real compile) +diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml +index 7b2c1e9..103c539 100644 +--- a/.github/workflows/codeql-analysis.yml ++++ b/.github/workflows/codeql-analysis.yml +@@ -1,7 +1,5 @@ +-# This workflow is managed by gh actions-lock. + # SPDX-License-Identifier: AGPL-3.0-or-later + # This workflow is managed by gh actions-lock. +-# This workflow is managed by gh actions-lock. + # For most projects, this workflow file will not need changing; you simply need + # to commit it to your repository. + # +diff --git a/.github/workflows/dogfood-gate.yml b/.github/workflows/dogfood-gate.yml +index bb18b45..d97c733 100644 +--- a/.github/workflows/dogfood-gate.yml ++++ b/.github/workflows/dogfood-gate.yml +@@ -1,7 +1,5 @@ +-# This workflow is managed by gh actions-lock. + # SPDX-License-Identifier: AGPL-3.0-or-later + # This workflow is managed by gh actions-lock. +-# This workflow is managed by gh actions-lock. + # Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath) + # + # dogfood-gate.yml — Hyperpolymath Dogfooding Quality Gate +diff --git a/.github/workflows/governance.yml b/.github/workflows/governance.yml +index 431048f..37c9690 100644 +--- a/.github/workflows/governance.yml ++++ b/.github/workflows/governance.yml +@@ -1,7 +1,5 @@ +-# This workflow is managed by gh actions-lock. + # SPDX-License-Identifier: AGPL-3.0-or-later + # This workflow is managed by gh actions-lock. +-# This workflow is managed by gh actions-lock. + name: Governance + + on: +diff --git a/.github/workflows/hypatia-scan.yml b/.github/workflows/hypatia-scan.yml +index eeea328..350aa63 100644 +--- a/.github/workflows/hypatia-scan.yml ++++ b/.github/workflows/hypatia-scan.yml +@@ -1,7 +1,5 @@ +-# This workflow is managed by gh actions-lock. + # SPDX-License-Identifier: AGPL-3.0-or-later + # This workflow is managed by gh actions-lock. +-# This workflow is managed by gh actions-lock. + name: Hypatia Security Scan + + on: +diff --git a/.github/workflows/instant-sync.yml b/.github/workflows/instant-sync.yml +index 1684675..b323e6e 100644 +--- a/.github/workflows/instant-sync.yml ++++ b/.github/workflows/instant-sync.yml +@@ -1,7 +1,5 @@ +-# This workflow is managed by gh actions-lock. + # SPDX-License-Identifier: AGPL-3.0-or-later + # This workflow is managed by gh actions-lock. +-# This workflow is managed by gh actions-lock. + # Instant sync — lightweight forge propagation on every push to any branch. + # Keeps GitLab and Bitbucket mirrors up to date without waiting for the main-only mirror. + +diff --git a/.github/workflows/label-triage.yml b/.github/workflows/label-triage.yml +index 814a192..fc79947 100644 +--- a/.github/workflows/label-triage.yml ++++ b/.github/workflows/label-triage.yml +@@ -1,5 +1,5 @@ +-# This workflow is managed by gh actions-lock. + # SPDX-License-Identifier: MPL-2.0 ++# This workflow is managed by gh actions-lock. + name: Label Triage + + # Classify newly-filed issues against the estate label taxonomy. +diff --git a/.github/workflows/labels.yml b/.github/workflows/labels.yml +index 83ab941..af34c6b 100644 +--- a/.github/workflows/labels.yml ++++ b/.github/workflows/labels.yml +@@ -1,5 +1,5 @@ +-# This workflow is managed by gh actions-lock. + # SPDX-License-Identifier: MPL-2.0 ++# This workflow is managed by gh actions-lock. + name: Labels + + # Applies the canonical estate label set from .github/labels.json. +diff --git a/.github/workflows/mirror.yml b/.github/workflows/mirror.yml +index d31cb38..d12c355 100644 +--- a/.github/workflows/mirror.yml ++++ b/.github/workflows/mirror.yml +@@ -1,7 +1,5 @@ +-# This workflow is managed by gh actions-lock. + # SPDX-License-Identifier: AGPL-3.0-or-later + # This workflow is managed by gh actions-lock. +-# This workflow is managed by gh actions-lock. + name: Mirror to Git Forges + + on: +diff --git a/.github/workflows/pages.yml b/.github/workflows/pages.yml +index 02e72c2..de6cdce 100644 +--- a/.github/workflows/pages.yml ++++ b/.github/workflows/pages.yml +@@ -1,7 +1,5 @@ +-# This workflow is managed by gh actions-lock. + # SPDX-License-Identifier: AGPL-3.0 + # This workflow is managed by gh actions-lock. +-# This workflow is managed by gh actions-lock. + name: GitHub Pages (Ddraig SSG) + on: + push: +diff --git a/.github/workflows/push-email-notify.yml b/.github/workflows/push-email-notify.yml +index 2f1b3ab..4252069 100644 +--- a/.github/workflows/push-email-notify.yml ++++ b/.github/workflows/push-email-notify.yml +@@ -1,4 +1,3 @@ +-# This workflow is managed by gh actions-lock. + # SPDX-License-Identifier: AGPL-3.0-or-later + # This workflow is managed by gh actions-lock. + # Dormant push-email notification. ARMED by setting the repo variable +diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml +index d2158a0..2f564ef 100644 +--- a/.github/workflows/scorecard.yml ++++ b/.github/workflows/scorecard.yml +@@ -1,7 +1,5 @@ +-# This workflow is managed by gh actions-lock. + # SPDX-License-Identifier: AGPL-3.0-or-later + # This workflow is managed by gh actions-lock. +-# This workflow is managed by gh actions-lock. + name: OSSF Scorecard + + on: +diff --git a/.github/workflows/secret-scanner.yml b/.github/workflows/secret-scanner.yml +index 85b26e9..00cf1ca 100644 +--- a/.github/workflows/secret-scanner.yml ++++ b/.github/workflows/secret-scanner.yml +@@ -1,7 +1,5 @@ +-# This workflow is managed by gh actions-lock. + # SPDX-License-Identifier: AGPL-3.0-or-later + # This workflow is managed by gh actions-lock. +-# This workflow is managed by gh actions-lock. + name: Secret Scanner + + on: +diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml +index 3b5785e..7e414c4 100644 +--- a/.github/workflows/test.yml ++++ b/.github/workflows/test.yml +@@ -1,7 +1,5 @@ +-# This workflow is managed by gh actions-lock. + # SPDX-License-Identifier: AGPL-3.0-or-later + # This workflow is managed by gh actions-lock. +-# This workflow is managed by gh actions-lock. + # Multi-platform test suite — runs blitz tests on Linux + macOS + name: Test Suite + +diff --git a/.github/workflows/workflow-linter.yml b/.github/workflows/workflow-linter.yml +index 22bc284..faef2c6 100644 +--- a/.github/workflows/workflow-linter.yml ++++ b/.github/workflows/workflow-linter.yml +@@ -1,7 +1,5 @@ +-# This workflow is managed by gh actions-lock. + # SPDX-License-Identifier: AGPL-3.0-or-later + # This workflow is managed by gh actions-lock. +-# This workflow is managed by gh actions-lock. + # Prevention workflow - validates all workflows have proper security config + name: Workflow Security Linter + +@@ -26,7 +24,7 @@ jobs: + errors=0 + for f in .github/workflows/*.yml .github/workflows/*.yaml; do + [ -f "$f" ] || continue +- if ! head -1 "$f" | grep -q "SPDX-License-Identifier"; then ++ if ! awk '/^---[[:space:]]*$/ { next } /^#/ { print; next } { exit }' "$f" | grep -q "^# SPDX-License-Identifier:"; then + echo "ERROR: $f missing SPDX header" + errors=$((errors + 1)) + fi +diff --git a/dist/airborne-submarine-squadron.wasm b/dist/airborne-submarine-squadron.wasm +new file mode 100644 +index 0000000000000000000000000000000000000000..ca2481cd30b107e1cd6c50149c7883ccd7191bfe +GIT binary patch +literal 8099 +zcmd5>%a0z#5$~CAzUR#D_P6i%*6jOfFp54Ak^?PRVjDjYb|6wB*=xLp{nqQXcbAZy +z>|+i@igJoj4qP}S61n8g4T)PM5KYfj?b+{K8V}b|a3)iB1_%FD3&1Csmln{x=h?@tSjaIepAMC9E*Sn`>u~4l;q9$E +zhwtqlUA=R#{qvpe4^B63-nja~!OqdPF_jli2Vo_u*6NLBD^7ZP`)s>^U~p)7WOQtN +zVsdJFhSJ%&`Gv)$<(1X7^^H@{J%2h1Otli2pjL-DcfS$W*P`0q_TK)%FGJJXxxI6A +z_3&s5t8cUpkGAh*FQ=ltt)1KEbTcrm&tE(p8E0ZVf;ct={=#qqRwvnpxXL!gQ({4^!h&tF +zRUt4S&M(G83T@2eLLvf+LG|>gl1VbQrxOxL(h29Yz|CMAw!+!rf-VEBGPf&GIVmo+JF|-#{0bbN>U%on+3Zxa=PT_wz +zx}8=FJ2k2)hN#P?vX?4eBD^3u8X#4+rb8URnppd(-;Faivh`FAeKzrAPIOe1PKmu;T{9c&`7Gv9>#!@6W*yabb^e08U(c*Two_8*r6RquqD+h +zyD7RSCtcKa%eLkQcM%`N)ZK!m0)3t89A^U}-LIa9sm@Iyp}K6KP-qbL#tO&~-Yz<& +zUvj%ggjp=NZR^=e^@O^jDFg +zZ?O%3&UvTB|CGR@cHk@I`rV8zX7$katL!Uyc_QOYYO0@`TK~;_hkpozCUSub +z09nia5nI?<@v>`&eI_#wenok?+8HEp?Tnx5#&*+M5dzL-zbDT{xeRc#Q6#nIMjiHR +z&YUk71n)~@##>VkyJH1TajA($8lo8#HNkuJI-ZLlLxD7?sb$e*9qD5wQn<54E%uWE +zK{JV{CGPrD7_^R;jrT_B2w~@N4{4pD3LfkniCy1r8WqmrHszh;IW((Gh9Kt7kv?Xr +znz>e*9J|)<&~xlsmBF>@n0nd}iwWNr*el2zqmF<-*b(qYkti~acP?qz;(Wo*)z#_% +zF1}*Lm|~q8>(p4M#(8StzKCSnM<01iL)FvE&D&XSJ+1@#9q#qKAAUt-JVA{{AHwc%&b0k?jtAC#{muuU743hA1n?d7F;Z6FE>Vw2_L-5 +z;p|nHJn;gH07ol<&>M^oSEXZXn-Jt5)f391wkbZg5X#l1wosd +z1VK>}2zu8%2oiJ|q-jSw;W`-HTAv5O<@9?X35#C@gS+StL3%sk%OHI$eie-Egl9n7 +zo$x$Jerl{0%4+Rvphx;(8B&4&B=?T?L5tMBn${55rH5Q4Uj%wA)$F5E6rb^1&)mYL2M!r +z#HIl#pVh8MCs&_j(%{RL2ijLW;GLxcP<1Iy7 +zUJfJl;c9l0m8PKU@|2iKlqQJLRN4cVPo=$5pFA~mAL7bgb$<`+SlU+-e-^k0Rrk9P +zVoQB|fwhxqo6rb_>!&vLAl?Hsz%~Y%MClL>QZJ;#G|bWwCQ&*{{WJvW7>%)XoJo{U +z&^V1kI!Ti(MM1E1nntK<(-axYQeqONDZ-ONigaS>9Fr(TD$s~s!0JdbRCMbx3#PEj}ZKiISb~40~*EPlM4e +zi-*3f$hR9l1mIefG*@sPCECPID5ivZs25dbk)r)HfT|gyVPyU&jiD+g&`VbEBc1U- +zeW4Q)&OkIcO|m(f(XKN`q+MqYrWfZXc5I_7JGcBh^W;$Zi73>Qc +z15I8eawnRGmYT+#F5e??B`ld%9-_i@JbrRza&!5}^2cY%AN&JUH3L;+P}Lk%4WRJF +zd6GY%rJyjU%hwrvyp}*I4^aWC>OQsn*;+C!U#^+y2Ak%?QvHFSFz}6cqG|s4lTctz +zSHEkR^Px~4a|+W>^2cX3Z5{)~UqQ_bREt41b5JdSYMl%US_%qtx_Sp=&Vy1Oa|%#Z +z_q9#qW2O_doH#R`u<1BAoxpT*vT10kY0T*oexx-J6sDDjs4#uZAIOPsY}#`SNH6+c +zPX?ryf%N1+dI6;OWFXK|AehtTo1}rD0HQoZ1rWVFVQu^cj&E(+cMOL`@9oQQSjN$p +zQABCBP(o|?<#5+HxS%HPP7XxwTn6EZETl0?|0=P@^*1G +zk=|z4aEq?m=f>Ure*USW1cZO>;HJcD)fq@F2T})+`pH0`r9dzTO+}RpAS@MS4+QtA +zKZdxb>0QaLr|=-`6c7LM478;3U1E>z?P-A7Wj;CO))fCGOpLp4i`fy)7?!+g;g&>?0cw^oeZq!r9HsnEA?;vu|x090qZ_r#x`+(nW|rv+>9P#BaQL +z>D(r!o-gZsZR4T#!-J~#O*VAl?B&a6FI{|zUb%GPjq{sVu;jNHgnZ~Vhh<+isCmVf +z4|r^!wBu8&u;X?PuJ0e*-log%U*Fq0*kSJO`&%~-_HWa&yLl6W%kLcQ+&Nk??yGjZ +zu>zg9-Q^1#H+K#WkLX}q{%`L~^v?dlHtp@-*uF*A_xF!>Zohl#)G2tdKdyyPx%B$~ +E0E7_r_W%F@ + +literal 0 +HcmV?d00001 + +diff --git a/gossamer/app_gossamer.js b/gossamer/app_gossamer.js +index ee2a91f..26688b3 100644 +--- a/gossamer/app_gossamer.js ++++ b/gossamer/app_gossamer.js +@@ -771,8 +771,6 @@ function drawEvelCameratron() { + ctx.moveTo(-2, -5); + ctx.quadraticCurveTo(-8 - Math.sin(world.tick * 0.1) * 3, -8, -6 - Math.sin(world.tick * 0.15) * 4, -3); + ctx.stroke(); +- ctx.restore(); +- + ctx.restore(); // Undo zoom transform + + // Frame border + label +diff --git a/index.html b/index.html +index 03139ba..c0c5332 100644 +--- a/index.html ++++ b/index.html +@@ -704,9 +704,19 @@ + })(); + + +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + + +diff --git a/test/compatibility_test.js b/test/compatibility_test.js +index edd0f7b..aec1669 100644 +--- a/test/compatibility_test.js ++++ b/test/compatibility_test.js +@@ -116,7 +116,12 @@ Deno.test("compat: HTML entry points load gossamer/wasm_abi.js", async () => { + + // ── 10. Groove manifest shape remains explicit and passive ─────────────── + Deno.test("compat: .well-known/groove/manifest.json keeps current ASS contract", async () => { +- const raw = await Deno.readTextFile(ROOT + ".well-known/groove/manifest.json"); ++ let raw; ++ try { ++ raw = await Deno.readTextFile(ROOT + "www/.well-known/groove/manifest.json"); ++ } catch { ++ raw = await Deno.readTextFile(ROOT + ".well-known/groove/manifest.json"); ++ } + const manifest = JSON.parse(raw); + + assertEquals(manifest.service_id, "airborne-submarine-squadron");