{"_id":"@ecoma-io/archkeep-rule-sdk","_rev":"27-e2bed8cdd9a7eda93075c85d7bdbe572","name":"@ecoma-io/archkeep-rule-sdk","dist-tags":{"rc":"1.0.1-rc.1","latest":"0.30.0"},"versions":{"0.13.0":{"name":"@ecoma-io/archkeep-rule-sdk","version":"0.13.0","keywords":["architecture","webassembly","assemblyscript","monorepo","module-boundaries","archkeep"],"license":"Apache-2.0","_id":"@ecoma-io/archkeep-rule-sdk@0.13.0","maintainers":[{"name":"johnmvn","email":"john.itvn@gmail.com"}],"homepage":"https://github.com/ecoma-io/archkeep/tree/main/packages/archkeep-rule-sdk-ts#readme","bugs":{"url":"https://github.com/ecoma-io/archkeep/issues"},"dist":{"shasum":"04ff5c942c2e525bf87eb2d2f39544e29abcabb6","tarball":"https://registry.npmjs.org/@ecoma-io/archkeep-rule-sdk/-/archkeep-rule-sdk-0.13.0.tgz","fileCount":18,"integrity":"sha512-GBG2NvDmlZz2nzglVmTkwrqBfxUdtX9VhlVBAMdMYqrpYYncYBGwBl6AKRUUgP5f6Z6AF8lRtkdC6zL6GF0xuQ==","signatures":[{"sig":"MEQCIHbmDolUmH81DeIut91IavIgwfocKaEtG6nhje2P72+zAiAum850zAvfR76yJQO70BtN6sjarkMnP6IBp9FVwVl0BQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ecoma-io%2farchkeep-rule-sdk@0.13.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":140980},"type":"module","engines":{"node":">=22"},"gitHead":"ae3e39b77aaf974bc0094bb54dc5feb567a88ac2","private":false,"_npmUser":{"name":"johnmvn","email":"john.itvn@gmail.com"},"repository":{"url":"git+https://github.com/ecoma-io/archkeep.git","type":"git","directory":"packages/archkeep-rule-sdk-ts"},"_npmVersion":"11.17.0","description":"Author Archkeep custom architecture rules in AssemblyScript (TypeScript syntax) and compile them to core WebAssembly.","directories":{},"_nodeVersion":"24.19.0","_hasShrinkwrap":false,"devDependencies":{"assemblyscript":"0.28.20"},"_npmOperationalInternal":{"tmp":"tmp/archkeep-rule-sdk_0.13.0_1787547329930_0.5272377590032169","host":"s3://npm-registry-packages-npm-production"}},"0.14.0":{"name":"@ecoma-io/archkeep-rule-sdk","version":"0.14.0","keywords":["architecture","webassembly","assemblyscript","monorepo","module-boundaries","archkeep"],"license":"Apache-2.0","_id":"@ecoma-io/archkeep-rule-sdk@0.14.0","maintainers":[{"name":"johnmvn","email":"john.itvn@gmail.com"}],"homepage":"https://github.com/ecoma-io/archkeep/tree/main/packages/archkeep-rule-sdk-ts#readme","bugs":{"url":"https://github.com/ecoma-io/archkeep/issues"},"dist":{"shasum":"eae01df8fed08cf4ef06b2a282d16b9d59704b0e","tarball":"https://registry.npmjs.org/@ecoma-io/archkeep-rule-sdk/-/archkeep-rule-sdk-0.14.0.tgz","fileCount":18,"integrity":"sha512-rysaOjRndFbB1IKZ1stXr9VgAjU8KSweL3GJDEEBXBOXmGdcXXw5FL2Xgh9O/Ux9P7SrVFRkL5uMakoZGSZk3A==","signatures":[{"sig":"MEUCIDuR52DInq5SE1H5VbRolaBLX2ZylrBrM1W76y/kk9uDAiEA1fAwnVPIbvVbZ3w04L4/sI3ie0cHZ+I8Vx5F7McuUQI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ecoma-io%2farchkeep-rule-sdk@0.14.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":140980},"type":"module","engines":{"node":">=22"},"gitHead":"f997d6055e56d32c68c54cd4e5aacbb052198ea2","private":false,"_npmUser":{"name":"johnmvn","email":"john.itvn@gmail.com"},"repository":{"url":"git+https://github.com/ecoma-io/archkeep.git","type":"git","directory":"packages/archkeep-rule-sdk-ts"},"_npmVersion":"11.17.0","description":"Author Archkeep custom architecture rules in AssemblyScript (TypeScript syntax) and compile them to core WebAssembly.","directories":{},"_nodeVersion":"24.19.0","_hasShrinkwrap":false,"devDependencies":{"assemblyscript":"0.28.20"},"_npmOperationalInternal":{"tmp":"tmp/archkeep-rule-sdk_0.14.0_1787591162963_0.46960128359423314","host":"s3://npm-registry-packages-npm-production"}},"0.15.0":{"name":"@ecoma-io/archkeep-rule-sdk","version":"0.15.0","keywords":["architecture","webassembly","assemblyscript","monorepo","module-boundaries","archkeep"],"license":"Apache-2.0","_id":"@ecoma-io/archkeep-rule-sdk@0.15.0","maintainers":[{"name":"johnmvn","email":"john.itvn@gmail.com"}],"homepage":"https://github.com/ecoma-io/archkeep/tree/main/packages/archkeep-rule-sdk-ts#readme","bugs":{"url":"https://github.com/ecoma-io/archkeep/issues"},"dist":{"shasum":"c8796765197b5b3c2b34f2d69732fe5a1cdcae07","tarball":"https://registry.npmjs.org/@ecoma-io/archkeep-rule-sdk/-/archkeep-rule-sdk-0.15.0.tgz","fileCount":18,"integrity":"sha512-sfbcRVHKowV3g6MAmVyppS4+CDXyinCBJIc3LpsSBFT/mUkFuGPTyEtfjmWLfvYXxDqqPRaSlZCEGHV3ww3WkQ==","signatures":[{"sig":"MEQCIHRLK6yk7Ynxda9ig+wDSFYjR5+IyMAfxv5ke9Si7kaKAiBuT95tzJF8oA0x75Shllv4adoOexjZWBcMbsmPkkX6uA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ecoma-io%2farchkeep-rule-sdk@0.15.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":140980},"type":"module","engines":{"node":">=22"},"gitHead":"1842af2c2d971d8087b91c8d71be7c1ace2008cc","private":false,"_npmUser":{"name":"johnmvn","email":"john.itvn@gmail.com"},"repository":{"url":"git+https://github.com/ecoma-io/archkeep.git","type":"git","directory":"packages/archkeep-rule-sdk-ts"},"_npmVersion":"11.17.0","description":"Author Archkeep custom architecture rules in AssemblyScript (TypeScript syntax) and compile them to core WebAssembly.","directories":{},"_nodeVersion":"24.19.0","_hasShrinkwrap":false,"devDependencies":{"assemblyscript":"0.28.20"},"_npmOperationalInternal":{"tmp":"tmp/archkeep-rule-sdk_0.15.0_1787745468979_0.2908425318329291","host":"s3://npm-registry-packages-npm-production"}},"1.0.1-rc.1":{"name":"@ecoma-io/archkeep-rule-sdk","version":"1.0.1-rc.1","keywords":["architecture","webassembly","assemblyscript","monorepo","module-boundaries","archkeep"],"license":"Apache-2.0","_id":"@ecoma-io/archkeep-rule-sdk@1.0.1-rc.1","maintainers":[{"name":"johnmvn","email":"john.itvn@gmail.com"}],"homepage":"https://github.com/ecoma-io/archkeep/tree/main/packages/archkeep-rule-sdk-ts#readme","bugs":{"url":"https://github.com/ecoma-io/archkeep/issues"},"dist":{"shasum":"52682e325c4b4069615a3c1225c1219ac283c20b","tarball":"https://registry.npmjs.org/@ecoma-io/archkeep-rule-sdk/-/archkeep-rule-sdk-1.0.1-rc.1.tgz","fileCount":18,"integrity":"sha512-Jp7fNvvtv15qaGMu768q1qaVZztoI2eBBELVjzJn+YF3fEI5Mkde2+5BfT3R2HRomFh8M9O8sivQ+Vks3YzC6Q==","signatures":[{"sig":"MEUCIQDv4557e1Df/6Xs6zgh4IMuli6ZlXxx5xnAm4C9Ru96GwIgWypv6F8RKENAc6+CsChyhUV9IdqXwz0f4niDL3xJIVk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ecoma-io%2farchkeep-rule-sdk@1.0.1-rc.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":140984},"type":"module","engines":{"node":">=22"},"gitHead":"ffcc86e5a275d67ad93dd65e0bc43025b48f627e","private":false,"_npmUser":{"name":"johnmvn","email":"john.itvn@gmail.com"},"repository":{"url":"git+https://github.com/ecoma-io/archkeep.git","type":"git","directory":"packages/archkeep-rule-sdk-ts"},"_npmVersion":"11.17.0","description":"Author Archkeep custom architecture rules in AssemblyScript (TypeScript syntax) and compile them to core WebAssembly.","directories":{},"_nodeVersion":"24.19.0","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"assemblyscript":"0.28.20"},"_npmOperationalInternal":{"tmp":"tmp/archkeep-rule-sdk_1.0.1-rc.1_1787946911149_0.068054692733166","host":"s3://npm-registry-packages-npm-production"}},"0.16.0":{"name":"@ecoma-io/archkeep-rule-sdk","version":"0.16.0","keywords":["architecture","webassembly","assemblyscript","monorepo","module-boundaries","archkeep"],"license":"Apache-2.0","_id":"@ecoma-io/archkeep-rule-sdk@0.16.0","maintainers":[{"name":"johnmvn","email":"john.itvn@gmail.com"}],"homepage":"https://github.com/ecoma-io/archkeep/tree/main/packages/archkeep-rule-sdk-ts#readme","bugs":{"url":"https://github.com/ecoma-io/archkeep/issues"},"dist":{"shasum":"0f76f38c64dd63a7477bc16c6eba0ab8e8a3aefd","tarball":"https://registry.npmjs.org/@ecoma-io/archkeep-rule-sdk/-/archkeep-rule-sdk-0.16.0.tgz","fileCount":18,"integrity":"sha512-em5C6bRluT0IhhjQSKqqlvIwir1kz6+KraFjCQGQi43hmG3QlimX0XbgeMwXL9xtOY81StNH3ZWwJSje67vjcA==","signatures":[{"sig":"MEUCIDUky6BS7CHJS6L3JuP/fbKvrvr4W6q57jKLj+SYiVMMAiEA4YXGXN+SrLQMwy3IK+UZhumW7G7ir8qbKh+tdPFpEwU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ecoma-io%2farchkeep-rule-sdk@0.16.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":140980},"type":"module","engines":{"node":">=22"},"gitHead":"60d4e929570842093da92665bdd370e9b452de1a","private":false,"_npmUser":{"name":"johnmvn","email":"john.itvn@gmail.com"},"repository":{"url":"git+https://github.com/ecoma-io/archkeep.git","type":"git","directory":"packages/archkeep-rule-sdk-ts"},"_npmVersion":"11.17.0","description":"Author Archkeep custom architecture rules in AssemblyScript (TypeScript syntax) and compile them to core WebAssembly.","directories":{},"_nodeVersion":"24.19.0","_hasShrinkwrap":false,"devDependencies":{"assemblyscript":"0.28.20"},"_npmOperationalInternal":{"tmp":"tmp/archkeep-rule-sdk_0.16.0_1788003805783_0.8575143022783553","host":"s3://npm-registry-packages-npm-production"}},"0.16.1":{"name":"@ecoma-io/archkeep-rule-sdk","version":"0.16.1","keywords":["architecture","webassembly","assemblyscript","monorepo","module-boundaries","archkeep"],"license":"Apache-2.0","_id":"@ecoma-io/archkeep-rule-sdk@0.16.1","maintainers":[{"name":"johnmvn","email":"john.itvn@gmail.com"}],"homepage":"https://github.com/ecoma-io/archkeep/tree/main/packages/archkeep-rule-sdk-ts#readme","bugs":{"url":"https://github.com/ecoma-io/archkeep/issues"},"dist":{"shasum":"9f3b9cd17446ed06ab499b59c45d743d43ca6430","tarball":"https://registry.npmjs.org/@ecoma-io/archkeep-rule-sdk/-/archkeep-rule-sdk-0.16.1.tgz","fileCount":18,"integrity":"sha512-tbbRrmffZu/0bE98XqTXRhYeCTAzzhySo/Jiii6C8gufF+f9oQXsW5rjdaKhcZL41ncwNI77QcApO5FiWEQf1A==","signatures":[{"sig":"MEQCIEDbkMz1gqZNpJWllShApZVcAe1iwc3937c3ySBnblc4AiAhnUh0sVvFhgO9fq6UwZ8fWQe0Fd+fMi7+9+Fmy5/XzQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ecoma-io%2farchkeep-rule-sdk@0.16.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":140980},"type":"module","engines":{"node":">=22"},"gitHead":"422365a5e4e981043652a3d84e94867cb0472f7c","private":false,"_npmUser":{"name":"johnmvn","email":"john.itvn@gmail.com"},"repository":{"url":"git+https://github.com/ecoma-io/archkeep.git","type":"git","directory":"packages/archkeep-rule-sdk-ts"},"_npmVersion":"11.17.0","description":"Author Archkeep custom architecture rules in AssemblyScript (TypeScript syntax) and compile them to core WebAssembly.","directories":{},"_nodeVersion":"24.19.0","_hasShrinkwrap":false,"devDependencies":{"assemblyscript":"0.28.20"},"_npmOperationalInternal":{"tmp":"tmp/archkeep-rule-sdk_0.16.1_1788016684694_0.7014890692765323","host":"s3://npm-registry-packages-npm-production"}},"0.17.0":{"name":"@ecoma-io/archkeep-rule-sdk","version":"0.17.0","keywords":["architecture","webassembly","assemblyscript","monorepo","module-boundaries","archkeep"],"license":"Apache-2.0","_id":"@ecoma-io/archkeep-rule-sdk@0.17.0","maintainers":[{"name":"johnmvn","email":"john.itvn@gmail.com"}],"homepage":"https://github.com/ecoma-io/archkeep/tree/main/packages/archkeep-rule-sdk-ts#readme","bugs":{"url":"https://github.com/ecoma-io/archkeep/issues"},"dist":{"shasum":"c9a63bd9a9581a10974e4d12893ff2b2cf020e38","tarball":"https://registry.npmjs.org/@ecoma-io/archkeep-rule-sdk/-/archkeep-rule-sdk-0.17.0.tgz","fileCount":18,"integrity":"sha512-fp9xJYEDhZB0aBidRkrVdYFN9gO9Cv4Ngg2GHcl3J3zgmGGscJ062uIHEaUTmYZxbbpIpme4scosdgj1mOr22Q==","signatures":[{"sig":"MEQCIHOZRlWNnDlBvtMNEazc3K+Jws6c/Iwbp3bjmDJKfOuiAiBVU0zEdMAYa7j4WollvkXdVRh9KiHqPaMaAg7cMrw/Fg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ecoma-io%2farchkeep-rule-sdk@0.17.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":140980},"type":"module","engines":{"node":">=22"},"gitHead":"747dd422274833d81547d8bf44725dee2e549f87","private":false,"_npmUser":{"name":"johnmvn","email":"john.itvn@gmail.com"},"repository":{"url":"git+https://github.com/ecoma-io/archkeep.git","type":"git","directory":"packages/archkeep-rule-sdk-ts"},"_npmVersion":"11.17.0","description":"Author Archkeep custom architecture rules in AssemblyScript (TypeScript syntax) and compile them to core WebAssembly.","directories":{},"_nodeVersion":"24.19.0","_hasShrinkwrap":false,"devDependencies":{"assemblyscript":"0.28.20"},"_npmOperationalInternal":{"tmp":"tmp/archkeep-rule-sdk_0.17.0_1788049584804_0.13804509633423478","host":"s3://npm-registry-packages-npm-production"}},"0.18.0":{"name":"@ecoma-io/archkeep-rule-sdk","version":"0.18.0","keywords":["architecture","webassembly","assemblyscript","monorepo","module-boundaries","archkeep"],"license":"Apache-2.0","_id":"@ecoma-io/archkeep-rule-sdk@0.18.0","maintainers":[{"name":"johnmvn","email":"john.itvn@gmail.com"}],"homepage":"https://github.com/ecoma-io/archkeep/tree/main/packages/archkeep-rule-sdk-ts#readme","bugs":{"url":"https://github.com/ecoma-io/archkeep/issues"},"dist":{"shasum":"ba17c08803fb82c5fe00a34e3fb3d2f6ae14a064","tarball":"https://registry.npmjs.org/@ecoma-io/archkeep-rule-sdk/-/archkeep-rule-sdk-0.18.0.tgz","fileCount":18,"integrity":"sha512-FiAqgjUpiv3mzJitcSign8M+YnMgyw+cAmZBBG2xikjQleKgEBszAXdjfuu9S7pRcuAZey2C92zD5pWv9D0EFA==","signatures":[{"sig":"MEUCIQDcH5KKcbiirITOugEsjsezGxb2zl+JYz/g5OI1jwvcQQIgXkFu6QqKB5OWU16b1p48o1IBSdhDIHARylLrbS3q7S8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ecoma-io%2farchkeep-rule-sdk@0.18.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":140980},"type":"module","engines":{"node":">=22"},"gitHead":"a1003754d12ce33b7422fd69781018307cac5971","private":false,"_npmUser":{"name":"johnmvn","email":"john.itvn@gmail.com"},"repository":{"url":"git+https://github.com/ecoma-io/archkeep.git","type":"git","directory":"packages/archkeep-rule-sdk-ts"},"_npmVersion":"11.17.0","description":"Author Archkeep custom architecture rules in AssemblyScript (TypeScript syntax) and compile them to core WebAssembly.","directories":{},"_nodeVersion":"24.19.0","_hasShrinkwrap":false,"devDependencies":{"assemblyscript":"0.28.20"},"_npmOperationalInternal":{"tmp":"tmp/archkeep-rule-sdk_0.18.0_1788171221884_0.8395863888167736","host":"s3://npm-registry-packages-npm-production"}},"0.18.1":{"name":"@ecoma-io/archkeep-rule-sdk","version":"0.18.1","keywords":["architecture","webassembly","assemblyscript","monorepo","module-boundaries","archkeep"],"license":"Apache-2.0","_id":"@ecoma-io/archkeep-rule-sdk@0.18.1","maintainers":[{"name":"johnmvn","email":"john.itvn@gmail.com"}],"homepage":"https://github.com/ecoma-io/archkeep/tree/main/packages/archkeep-rule-sdk-ts#readme","bugs":{"url":"https://github.com/ecoma-io/archkeep/issues"},"dist":{"shasum":"69c53a2047ac9587180cf5ada5fb748035b8c8ed","tarball":"https://registry.npmjs.org/@ecoma-io/archkeep-rule-sdk/-/archkeep-rule-sdk-0.18.1.tgz","fileCount":18,"integrity":"sha512-fsyA1iwlnxoch2fHtOP+fnjS9VEgzo3pDus7Dob2fd954/hyOheI2zMeJcpdF0EJryvDRD4fGTRFsZae2bcSBg==","signatures":[{"sig":"MEUCIDXe0jn+TDDCo3eQrFt2Kiov6IGnvnNxrmYRrI346cUPAiEAhdYGE11ZHHpseinCstZFvLBIY1BDY3Lais54NLSxUUg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ecoma-io%2farchkeep-rule-sdk@0.18.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":140980},"type":"module","engines":{"node":">=22"},"gitHead":"dbec42b3189bf7c29ffac61a70d8bbe86602ecba","private":false,"_npmUser":{"name":"johnmvn","email":"john.itvn@gmail.com"},"repository":{"url":"git+https://github.com/ecoma-io/archkeep.git","type":"git","directory":"packages/archkeep-rule-sdk-ts"},"_npmVersion":"11.17.0","description":"Author Archkeep custom architecture rules in AssemblyScript (TypeScript syntax) and compile them to core WebAssembly.","directories":{},"_nodeVersion":"24.19.0","_hasShrinkwrap":false,"devDependencies":{"assemblyscript":"0.28.20"},"_npmOperationalInternal":{"tmp":"tmp/archkeep-rule-sdk_0.18.1_1788216038499_0.43593748561848855","host":"s3://npm-registry-packages-npm-production"}},"0.19.0":{"name":"@ecoma-io/archkeep-rule-sdk","version":"0.19.0","keywords":["architecture","webassembly","assemblyscript","monorepo","module-boundaries","archkeep"],"license":"Apache-2.0","_id":"@ecoma-io/archkeep-rule-sdk@0.19.0","maintainers":[{"name":"johnmvn","email":"john.itvn@gmail.com"}],"homepage":"https://github.com/ecoma-io/archkeep/tree/main/packages/archkeep-rule-sdk-ts#readme","bugs":{"url":"https://github.com/ecoma-io/archkeep/issues"},"dist":{"shasum":"064ae38e64fb19cbef63288275da6fa7e86d68fa","tarball":"https://registry.npmjs.org/@ecoma-io/archkeep-rule-sdk/-/archkeep-rule-sdk-0.19.0.tgz","fileCount":18,"integrity":"sha512-Y+fkAkIdlevCqqGpPnTuIaRzMOfpj9c9d5gyGXzfTF7DBRdxaiaOjA074TCYOI4iuESc+nFBgRqzO34+9MAwlw==","signatures":[{"sig":"MEUCIQCruUtgpOLjly6YmWsi+p/AvdGKM52wbBY73smJig3BzwIgZ2ltiEVPlVrImYT9qjgksS4+cQpuwtfW37kMvW6I4rY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ecoma-io%2farchkeep-rule-sdk@0.19.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":140980},"type":"module","engines":{"node":">=22"},"gitHead":"3eb103ab60754c8f95d75051d18b60bd07104a8c","private":false,"_npmUser":{"name":"johnmvn","email":"john.itvn@gmail.com"},"repository":{"url":"git+https://github.com/ecoma-io/archkeep.git","type":"git","directory":"packages/archkeep-rule-sdk-ts"},"_npmVersion":"11.17.0","description":"Author Archkeep custom architecture rules in AssemblyScript (TypeScript syntax) and compile them to core WebAssembly.","directories":{},"_nodeVersion":"24.19.0","_hasShrinkwrap":false,"devDependencies":{"assemblyscript":"0.28.20"},"_npmOperationalInternal":{"tmp":"tmp/archkeep-rule-sdk_0.19.0_1788314708683_0.4881933400969094","host":"s3://npm-registry-packages-npm-production"}},"0.20.0":{"name":"@ecoma-io/archkeep-rule-sdk","version":"0.20.0","keywords":["architecture","webassembly","assemblyscript","monorepo","module-boundaries","archkeep"],"license":"Apache-2.0","_id":"@ecoma-io/archkeep-rule-sdk@0.20.0","maintainers":[{"name":"johnmvn","email":"john.itvn@gmail.com"}],"homepage":"https://github.com/ecoma-io/archkeep/tree/main/packages/archkeep-rule-sdk-ts#readme","bugs":{"url":"https://github.com/ecoma-io/archkeep/issues"},"dist":{"shasum":"8354c100e031ac33e3d81a81669ee81d6fc27b57","tarball":"https://registry.npmjs.org/@ecoma-io/archkeep-rule-sdk/-/archkeep-rule-sdk-0.20.0.tgz","fileCount":18,"integrity":"sha512-qaOnPMXK+eQOyoqUhj79pzrGFHGzX84jIERYFXA2CO7CqWN+L+dsMn8/1yw04MrrOe65qhbKuAI1GGowVKGIBQ==","signatures":[{"sig":"MEUCIFJsQ7x73/B4PfixsQMtTbLHuZcRALWgoz5UkGH98eO7AiEA9j0MEcXyLzLISVMBh0ZlC/kw6aNd9vOPbJdx6g+yRLU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ecoma-io%2farchkeep-rule-sdk@0.20.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":140980},"type":"module","engines":{"node":">=22"},"gitHead":"41ed685f7efcca4f3ab965b91afacefef3931d31","private":false,"_npmUser":{"name":"johnmvn","email":"john.itvn@gmail.com"},"repository":{"url":"git+https://github.com/ecoma-io/archkeep.git","type":"git","directory":"packages/archkeep-rule-sdk-ts"},"_npmVersion":"11.17.0","description":"Author Archkeep custom architecture rules in AssemblyScript (TypeScript syntax) and compile them to core WebAssembly.","directories":{},"_nodeVersion":"24.19.0","_hasShrinkwrap":false,"devDependencies":{"assemblyscript":"0.28.20"},"_npmOperationalInternal":{"tmp":"tmp/archkeep-rule-sdk_0.20.0_1788348767881_0.6875877529770666","host":"s3://npm-registry-packages-npm-production"}},"0.20.1":{"name":"@ecoma-io/archkeep-rule-sdk","version":"0.20.1","keywords":["architecture","webassembly","assemblyscript","monorepo","module-boundaries","archkeep"],"license":"Apache-2.0","_id":"@ecoma-io/archkeep-rule-sdk@0.20.1","maintainers":[{"name":"johnmvn","email":"john.itvn@gmail.com"}],"homepage":"https://github.com/ecoma-io/archkeep/tree/main/packages/archkeep-rule-sdk-ts#readme","bugs":{"url":"https://github.com/ecoma-io/archkeep/issues"},"dist":{"shasum":"35ea56e5a45c9d20193108fea2751729ff5aca9d","tarball":"https://registry.npmjs.org/@ecoma-io/archkeep-rule-sdk/-/archkeep-rule-sdk-0.20.1.tgz","fileCount":18,"integrity":"sha512-okyeGLxFT8vQoc0UGeJObN+4mKNk1WMFRXyh3zUJemCT7cAur5wqp91h3C23A/P/vlwxrJSbqvG2U4ch5dhwPQ==","signatures":[{"sig":"MEYCIQCKMQxWaz+NGzdvGrwlhGd3D1iAZ6Tg7PaxHW9DSlTlhwIhAKii/UBulnDhnu/rGcU4B7a/Ns19ShBuS0jnGbPiMIaG","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ecoma-io%2farchkeep-rule-sdk@0.20.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":140980},"type":"module","engines":{"node":">=22"},"gitHead":"245364bd914c5ba62be2fe7d26418c58745aa7d7","private":false,"_npmUser":{"name":"johnmvn","email":"john.itvn@gmail.com"},"repository":{"url":"git+https://github.com/ecoma-io/archkeep.git","type":"git","directory":"packages/archkeep-rule-sdk-ts"},"_npmVersion":"11.17.0","description":"Author Archkeep custom architecture rules in AssemblyScript (TypeScript syntax) and compile them to core WebAssembly.","directories":{},"_nodeVersion":"24.19.0","_hasShrinkwrap":false,"devDependencies":{"assemblyscript":"0.28.20"},"_npmOperationalInternal":{"tmp":"tmp/archkeep-rule-sdk_0.20.1_1788361308758_0.8843221016758118","host":"s3://npm-registry-packages-npm-production"}},"0.21.0":{"name":"@ecoma-io/archkeep-rule-sdk","version":"0.21.0","keywords":["architecture","webassembly","assemblyscript","monorepo","module-boundaries","archkeep"],"license":"Apache-2.0","_id":"@ecoma-io/archkeep-rule-sdk@0.21.0","maintainers":[{"name":"johnmvn","email":"john.itvn@gmail.com"}],"homepage":"https://github.com/ecoma-io/archkeep/tree/main/packages/archkeep-rule-sdk-ts#readme","bugs":{"url":"https://github.com/ecoma-io/archkeep/issues"},"dist":{"shasum":"b69e77b1e3c125da942935bf6a6e17a314af869d","tarball":"https://registry.npmjs.org/@ecoma-io/archkeep-rule-sdk/-/archkeep-rule-sdk-0.21.0.tgz","fileCount":18,"integrity":"sha512-wWEAdV1TOzVqc/AOPm25TprVo5a6x5bKmtAh59Vd9nkXlWH86NZWeTEjsdAFOtCmxK8mDyrxu8KyswbSxVnuEQ==","signatures":[{"sig":"MEUCIGYYkNmkvyxsoxozEpWR8KS/OQK7aPIoXt6W/9MaZTm4AiEAtYx1LiZFcQqjsX3N1Jzsulwg9laU4jlD8MdUC6nwg+Q=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ecoma-io%2farchkeep-rule-sdk@0.21.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":140980},"type":"module","engines":{"node":">=22"},"gitHead":"5fa97350d1086e730078f3e1857b93abc5031e09","private":false,"_npmUser":{"name":"johnmvn","email":"john.itvn@gmail.com"},"repository":{"url":"git+https://github.com/ecoma-io/archkeep.git","type":"git","directory":"packages/archkeep-rule-sdk-ts"},"_npmVersion":"11.17.0","description":"Author Archkeep custom architecture rules in AssemblyScript (TypeScript syntax) and compile them to core WebAssembly.","directories":{},"_nodeVersion":"24.19.0","_hasShrinkwrap":false,"devDependencies":{"assemblyscript":"0.28.20"},"_npmOperationalInternal":{"tmp":"tmp/archkeep-rule-sdk_0.21.0_1788411425368_0.9658087937787228","host":"s3://npm-registry-packages-npm-production"}},"0.22.0":{"name":"@ecoma-io/archkeep-rule-sdk","version":"0.22.0","keywords":["architecture","webassembly","assemblyscript","monorepo","module-boundaries","archkeep"],"license":"Apache-2.0","_id":"@ecoma-io/archkeep-rule-sdk@0.22.0","maintainers":[{"name":"johnmvn","email":"john.itvn@gmail.com"}],"homepage":"https://github.com/ecoma-io/archkeep/tree/main/packages/archkeep-rule-sdk-ts#readme","bugs":{"url":"https://github.com/ecoma-io/archkeep/issues"},"dist":{"shasum":"586088dc193bdcc13e866d9c4a5c328c0b9b6eeb","tarball":"https://registry.npmjs.org/@ecoma-io/archkeep-rule-sdk/-/archkeep-rule-sdk-0.22.0.tgz","fileCount":18,"integrity":"sha512-oGwDJr4ae9VY4ufpPbwpKA+Bl4qITeawiuo3AT6opthR/96TmRIDmqC1yPBBeRx1GpzTXYriJEc9BeR4gjMG6w==","signatures":[{"sig":"MEQCIHz2KvZm2s7/UKWpGfmIXOFyHKRq+Qg2wDlcMUXDUOmMAiB1z8lKL7APJqtuHo+IAs8Sk3Kq9ZjZhuZuYpvd3Y2x4g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ecoma-io%2farchkeep-rule-sdk@0.22.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":140980},"type":"module","engines":{"node":">=22"},"gitHead":"824a6d9191c6d179de95e107c2df45ae2a512696","private":false,"_npmUser":{"name":"johnmvn","email":"john.itvn@gmail.com"},"repository":{"url":"git+https://github.com/ecoma-io/archkeep.git","type":"git","directory":"packages/archkeep-rule-sdk-ts"},"_npmVersion":"11.17.0","description":"Author Archkeep custom architecture rules in AssemblyScript (TypeScript syntax) and compile them to core WebAssembly.","directories":{},"_nodeVersion":"24.19.0","_hasShrinkwrap":false,"devDependencies":{"assemblyscript":"0.28.20"},"_npmOperationalInternal":{"tmp":"tmp/archkeep-rule-sdk_0.22.0_1788490361991_0.2339859173816874","host":"s3://npm-registry-packages-npm-production"}},"0.22.1":{"name":"@ecoma-io/archkeep-rule-sdk","version":"0.22.1","keywords":["architecture","webassembly","assemblyscript","monorepo","module-boundaries","archkeep"],"license":"Apache-2.0","_id":"@ecoma-io/archkeep-rule-sdk@0.22.1","maintainers":[{"name":"johnmvn","email":"john.itvn@gmail.com"}],"homepage":"https://github.com/ecoma-io/archkeep/tree/main/packages/archkeep-rule-sdk-ts#readme","bugs":{"url":"https://github.com/ecoma-io/archkeep/issues"},"dist":{"shasum":"130d911aadc17d37a0aea71ac690bc70f48668d5","tarball":"https://registry.npmjs.org/@ecoma-io/archkeep-rule-sdk/-/archkeep-rule-sdk-0.22.1.tgz","fileCount":18,"integrity":"sha512-55JL86Hnrno883hMZBwsYkQPWeQQVPkHS0TKfJP3mAkVvyDlg+JedYysAE4M+zumyCcXwDUA8Fpe7Z1xx3Acjw==","signatures":[{"sig":"MEUCIGPfOiaYgit7nmNeoY/3KhoQ//ajLTTWEhA8z3meANc3AiEApJM4PrUW9Pq1nDoTeICaM0nHEeDhzRgL6E/1HVkK0a0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ecoma-io%2farchkeep-rule-sdk@0.22.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":140980},"type":"module","engines":{"node":">=22"},"gitHead":"aa68bf742ff3d1ed30a5e491dc23aa16a0a62955","private":false,"_npmUser":{"name":"johnmvn","email":"john.itvn@gmail.com"},"repository":{"url":"git+https://github.com/ecoma-io/archkeep.git","type":"git","directory":"packages/archkeep-rule-sdk-ts"},"_npmVersion":"11.17.0","description":"Author Archkeep custom architecture rules in AssemblyScript (TypeScript syntax) and compile them to core WebAssembly.","directories":{},"_nodeVersion":"24.19.0","_hasShrinkwrap":false,"devDependencies":{"assemblyscript":"0.28.20"},"_npmOperationalInternal":{"tmp":"tmp/archkeep-rule-sdk_0.22.1_1788506494003_0.9760376243422468","host":"s3://npm-registry-packages-npm-production"}},"0.22.2":{"name":"@ecoma-io/archkeep-rule-sdk","version":"0.22.2","keywords":["architecture","webassembly","assemblyscript","monorepo","module-boundaries","archkeep"],"license":"Apache-2.0","_id":"@ecoma-io/archkeep-rule-sdk@0.22.2","maintainers":[{"name":"johnmvn","email":"john.itvn@gmail.com"}],"homepage":"https://github.com/ecoma-io/archkeep/tree/main/packages/archkeep-rule-sdk-ts#readme","bugs":{"url":"https://github.com/ecoma-io/archkeep/issues"},"dist":{"shasum":"dcdd45150dc4dd31d7d06b93b8f3366f7b2a18cd","tarball":"https://registry.npmjs.org/@ecoma-io/archkeep-rule-sdk/-/archkeep-rule-sdk-0.22.2.tgz","fileCount":18,"integrity":"sha512-73jKtUlkbgaZH/OVnG+f2SJ4JCTiRcJ27bdT+2OMPqCoSE3oXEaNucJfQWPmADUPZ++gaEuidG4EAHOrELNW3g==","signatures":[{"sig":"MEQCICXV2XeNmhoRY2rFSTy9N2Z9mw0ABrRgS9xfs1PkG0J/AiAcRPPvj9s068UAGSGxtlVvRomPEM2eELO4PhS37fRzOA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ecoma-io%2farchkeep-rule-sdk@0.22.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":140980},"type":"module","engines":{"node":">=22"},"gitHead":"7a4fe4bf08adbcc8214744a445331e21e17182ed","private":false,"_npmUser":{"name":"johnmvn","email":"john.itvn@gmail.com"},"repository":{"url":"git+https://github.com/ecoma-io/archkeep.git","type":"git","directory":"packages/archkeep-rule-sdk-ts"},"_npmVersion":"11.17.0","description":"Author Archkeep custom architecture rules in AssemblyScript (TypeScript syntax) and compile them to core WebAssembly.","directories":{},"_nodeVersion":"24.19.0","_hasShrinkwrap":false,"devDependencies":{"assemblyscript":"0.28.20"},"_npmOperationalInternal":{"tmp":"tmp/archkeep-rule-sdk_0.22.2_1788509477266_0.4156456177660799","host":"s3://npm-registry-packages-npm-production"}},"0.23.0":{"name":"@ecoma-io/archkeep-rule-sdk","version":"0.23.0","keywords":["architecture","webassembly","assemblyscript","monorepo","module-boundaries","archkeep"],"license":"Apache-2.0","_id":"@ecoma-io/archkeep-rule-sdk@0.23.0","maintainers":[{"name":"johnmvn","email":"john.itvn@gmail.com"}],"homepage":"https://github.com/ecoma-io/archkeep/tree/main/packages/archkeep-rule-sdk-ts#readme","bugs":{"url":"https://github.com/ecoma-io/archkeep/issues"},"dist":{"shasum":"ab101f91c4542449a01217393887a1eb9e21a1cb","tarball":"https://registry.npmjs.org/@ecoma-io/archkeep-rule-sdk/-/archkeep-rule-sdk-0.23.0.tgz","fileCount":18,"integrity":"sha512-iqaoWmKLZ1MtaMYt37bq+7mZoVR1Uso48RGNh3h+AwqGTUCdfxF456MovqAvuRf8slLz6t5rMpU8Y7VrxbbZQA==","signatures":[{"sig":"MEYCIQCFjps81Y3hKSXym6yesI5nCiFQsqKopijBsyz6K6AXJgIhAJpYHm3GM3Alajnzh1mmJtNMpEFTO7KrgC5naQhVwRDV","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ecoma-io%2farchkeep-rule-sdk@0.23.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":140980},"type":"module","engines":{"node":">=22"},"gitHead":"7847098ef1ef494113ac6c44a6c70d66a6a0616e","private":false,"_npmUser":{"name":"johnmvn","email":"john.itvn@gmail.com"},"repository":{"url":"git+https://github.com/ecoma-io/archkeep.git","type":"git","directory":"packages/archkeep-rule-sdk-ts"},"_npmVersion":"11.19.0","description":"Author Archkeep custom architecture rules in AssemblyScript (TypeScript syntax) and compile them to core WebAssembly.","directories":{},"_nodeVersion":"24.20.0","_hasShrinkwrap":false,"devDependencies":{"assemblyscript":"0.28.20"},"_npmOperationalInternal":{"tmp":"tmp/archkeep-rule-sdk_0.23.0_1788527706844_0.1879726173104097","host":"s3://npm-registry-packages-npm-production"}},"0.24.0":{"name":"@ecoma-io/archkeep-rule-sdk","version":"0.24.0","keywords":["architecture","webassembly","assemblyscript","monorepo","module-boundaries","archkeep"],"license":"Apache-2.0","_id":"@ecoma-io/archkeep-rule-sdk@0.24.0","maintainers":[{"name":"johnmvn","email":"john.itvn@gmail.com"}],"homepage":"https://github.com/ecoma-io/archkeep/tree/main/packages/archkeep-rule-sdk-ts#readme","bugs":{"url":"https://github.com/ecoma-io/archkeep/issues"},"dist":{"shasum":"2286e1be3610f2673cf5611cf9a4e9d4eda0ed5a","tarball":"https://registry.npmjs.org/@ecoma-io/archkeep-rule-sdk/-/archkeep-rule-sdk-0.24.0.tgz","fileCount":18,"integrity":"sha512-gYbD5BhEvj4dMiMbWELffrD8bgfHRzmveJwiWwd8HEL61hwaa0d3XnaRD1Jf4S3mQ+pF0v7Q6m/Pw4F0qd66aA==","signatures":[{"sig":"MEUCIQCkzXaj6hh/Ilsi+LNjWCfAD8/ztBpGyjbNm5UvZyK8TQIgQS2pZfk/jioTeyyoHFFpsi6LZ2vcg6B8v1gavWuztRE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ecoma-io%2farchkeep-rule-sdk@0.24.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":140980},"type":"module","engines":{"node":">=22"},"gitHead":"3443f5afb0aca898b79c0287d3b6f537c89dcb05","private":false,"_npmUser":{"name":"johnmvn","email":"john.itvn@gmail.com"},"repository":{"url":"git+https://github.com/ecoma-io/archkeep.git","type":"git","directory":"packages/archkeep-rule-sdk-ts"},"_npmVersion":"11.19.0","description":"Author Archkeep custom architecture rules in AssemblyScript (TypeScript syntax) and compile them to core WebAssembly.","directories":{},"_nodeVersion":"24.20.0","_hasShrinkwrap":false,"devDependencies":{"assemblyscript":"0.28.20"},"_npmOperationalInternal":{"tmp":"tmp/archkeep-rule-sdk_0.24.0_1788540416834_0.9717932749802671","host":"s3://npm-registry-packages-npm-production"}},"0.24.1":{"name":"@ecoma-io/archkeep-rule-sdk","version":"0.24.1","keywords":["architecture","webassembly","assemblyscript","monorepo","module-boundaries","archkeep"],"license":"Apache-2.0","_id":"@ecoma-io/archkeep-rule-sdk@0.24.1","maintainers":[{"name":"johnmvn","email":"john.itvn@gmail.com"}],"homepage":"https://github.com/ecoma-io/archkeep/tree/main/packages/archkeep-rule-sdk-ts#readme","bugs":{"url":"https://github.com/ecoma-io/archkeep/issues"},"dist":{"shasum":"e6bea4e9597a8e6dfe5ea3c05721fc45a68152e6","tarball":"https://registry.npmjs.org/@ecoma-io/archkeep-rule-sdk/-/archkeep-rule-sdk-0.24.1.tgz","fileCount":18,"integrity":"sha512-K7k1tXoUtxNhsbExa3FHvJ6SaBQ7VMOJwYvXKYIqA9/UyaYpvR+LLWGVt0yR4uV+R9wt2NX0vEFESB92KISaAg==","signatures":[{"sig":"MEYCIQC7GrwbsfR16wwHAK3zg4i0c0ZFBymnZBw6pOzOFT/X/wIhAK/XauGJNFOpVAKOwWNoEMRxSJuW0dcDhjNtPfhhdk6W","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ecoma-io%2farchkeep-rule-sdk@0.24.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":140980},"type":"module","engines":{"node":">=22"},"gitHead":"390475c89edaf6d01834151bc8b70d9445a3b795","private":false,"_npmUser":{"name":"johnmvn","email":"john.itvn@gmail.com"},"repository":{"url":"git+https://github.com/ecoma-io/archkeep.git","type":"git","directory":"packages/archkeep-rule-sdk-ts"},"_npmVersion":"11.19.0","description":"Author Archkeep custom architecture rules in AssemblyScript (TypeScript syntax) and compile them to core WebAssembly.","directories":{},"_nodeVersion":"24.20.0","_hasShrinkwrap":false,"devDependencies":{"assemblyscript":"0.28.20"},"_npmOperationalInternal":{"tmp":"tmp/archkeep-rule-sdk_0.24.1_1788551334954_0.7642439177627336","host":"s3://npm-registry-packages-npm-production"}},"0.25.0":{"name":"@ecoma-io/archkeep-rule-sdk","version":"0.25.0","keywords":["architecture","webassembly","assemblyscript","monorepo","module-boundaries","archkeep"],"license":"Apache-2.0","_id":"@ecoma-io/archkeep-rule-sdk@0.25.0","maintainers":[{"name":"johnmvn","email":"john.itvn@gmail.com"}],"homepage":"https://github.com/ecoma-io/archkeep/tree/main/packages/archkeep-rule-sdk-ts#readme","bugs":{"url":"https://github.com/ecoma-io/archkeep/issues"},"dist":{"shasum":"04e6275f8323ab65493720526bbe7432cc4dcf2b","tarball":"https://registry.npmjs.org/@ecoma-io/archkeep-rule-sdk/-/archkeep-rule-sdk-0.25.0.tgz","fileCount":18,"integrity":"sha512-13THE/CQ+AzrPmxquzVI767Hv5J4WihQ5y8h7w1UQoUXwYPra1nuZ68fCBcefpHiQvuaQxTIGNc+kRgAzvl2zg==","signatures":[{"sig":"MEQCIAx3fPTYDZ5N4D5hVu7C/v8pZzvm1YjS4JQO2KC1hMkZAiAeclyCvjlHEqqBt9VpMsPDklQHmDEeP48bAapk/okA6Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ecoma-io%2farchkeep-rule-sdk@0.25.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":140980},"type":"module","engines":{"node":">=22"},"gitHead":"2d0334944c5f27f27a7bf72efcb083fc97769e1e","private":false,"_npmUser":{"name":"johnmvn","email":"john.itvn@gmail.com"},"repository":{"url":"git+https://github.com/ecoma-io/archkeep.git","type":"git","directory":"packages/archkeep-rule-sdk-ts"},"_npmVersion":"11.19.0","description":"Author Archkeep custom architecture rules in AssemblyScript (TypeScript syntax) and compile them to core WebAssembly.","directories":{},"_nodeVersion":"24.20.0","_hasShrinkwrap":false,"devDependencies":{"assemblyscript":"0.28.20"},"_npmOperationalInternal":{"tmp":"tmp/archkeep-rule-sdk_0.25.0_1788597135136_0.5133243607202755","host":"s3://npm-registry-packages-npm-production"}},"0.26.0":{"name":"@ecoma-io/archkeep-rule-sdk","version":"0.26.0","keywords":["architecture","webassembly","assemblyscript","monorepo","module-boundaries","archkeep"],"license":"Apache-2.0","_id":"@ecoma-io/archkeep-rule-sdk@0.26.0","maintainers":[{"name":"johnmvn","email":"john.itvn@gmail.com"}],"homepage":"https://github.com/ecoma-io/archkeep/tree/main/packages/archkeep-rule-sdk-ts#readme","bugs":{"url":"https://github.com/ecoma-io/archkeep/issues"},"dist":{"shasum":"8c0691094c2f7243f4fd8cd3d6b62d37cd06385d","tarball":"https://registry.npmjs.org/@ecoma-io/archkeep-rule-sdk/-/archkeep-rule-sdk-0.26.0.tgz","fileCount":18,"integrity":"sha512-UJQoQkMQAM5adU7jvKlbuEEDHtyGZ2vh/x8+vW1NSVZsQFRNqATmBFrspckvWUgobuS7W3zJvYum0svXT3FsHw==","signatures":[{"sig":"MEUCIA7ym7yV1mGljyLU+pkFwJxmLopyGIMthj79J4lYdffmAiEAlGFhSLlQ3VFxaU8jRhEghUwcru1kXyNCri/0wvba2Iw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ecoma-io%2farchkeep-rule-sdk@0.26.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":140980},"type":"module","engines":{"node":">=22"},"gitHead":"07b48f53834ea4de5418bfd8423d5cb7effb0f7e","private":false,"_npmUser":{"name":"johnmvn","email":"john.itvn@gmail.com"},"repository":{"url":"git+https://github.com/ecoma-io/archkeep.git","type":"git","directory":"packages/archkeep-rule-sdk-ts"},"_npmVersion":"11.19.0","description":"Author Archkeep custom architecture rules in AssemblyScript (TypeScript syntax) and compile them to core WebAssembly.","directories":{},"_nodeVersion":"24.20.0","_hasShrinkwrap":false,"devDependencies":{"assemblyscript":"0.28.20"},"_npmOperationalInternal":{"tmp":"tmp/archkeep-rule-sdk_0.26.0_1788841336633_0.35956894996580857","host":"s3://npm-registry-packages-npm-production"}},"0.27.0":{"name":"@ecoma-io/archkeep-rule-sdk","version":"0.27.0","keywords":["architecture","webassembly","assemblyscript","monorepo","module-boundaries","archkeep"],"license":"Apache-2.0","_id":"@ecoma-io/archkeep-rule-sdk@0.27.0","maintainers":[{"name":"johnmvn","email":"john.itvn@gmail.com"}],"homepage":"https://github.com/ecoma-io/archkeep/tree/main/packages/archkeep-rule-sdk-ts#readme","bugs":{"url":"https://github.com/ecoma-io/archkeep/issues"},"dist":{"shasum":"464a1f9ff076863c6fd6f70fe8222bb3eb5b0203","tarball":"https://registry.npmjs.org/@ecoma-io/archkeep-rule-sdk/-/archkeep-rule-sdk-0.27.0.tgz","fileCount":18,"integrity":"sha512-eGP0WmKxjlAn/nWzTIlNHfsQFkMdy9HrHDGl38P9N7mxoCWYojXVbt24q5OMnoWt6Qo7zwnMmGLBJurxyADuZw==","signatures":[{"sig":"MEYCIQDdEXF0c5caatc/1/jz9WUxl1ZSM87ilzH4m8oqvMsuWQIhAO7B+OMQ4L4qhT7UOl5dT/7GLqIRozF+TfxyqwICvXfn","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ecoma-io%2farchkeep-rule-sdk@0.27.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":140980},"type":"module","engines":{"node":">=22"},"gitHead":"900263bb5c6b56bf2eac95799fcb39d79ecf105f","private":false,"_npmUser":{"name":"johnmvn","email":"john.itvn@gmail.com"},"repository":{"url":"git+https://github.com/ecoma-io/archkeep.git","type":"git","directory":"packages/archkeep-rule-sdk-ts"},"_npmVersion":"11.19.0","description":"Author Archkeep custom architecture rules in AssemblyScript (TypeScript syntax) and compile them to core WebAssembly.","directories":{},"_nodeVersion":"24.20.0","_hasShrinkwrap":false,"devDependencies":{"assemblyscript":"0.28.20"},"_npmOperationalInternal":{"tmp":"tmp/archkeep-rule-sdk_0.27.0_1788867647226_0.414237205622894","host":"s3://npm-registry-packages-npm-production"}},"0.27.1":{"name":"@ecoma-io/archkeep-rule-sdk","version":"0.27.1","keywords":["architecture","webassembly","assemblyscript","monorepo","module-boundaries","archkeep"],"license":"Apache-2.0","_id":"@ecoma-io/archkeep-rule-sdk@0.27.1","maintainers":[{"name":"johnmvn","email":"john.itvn@gmail.com"}],"homepage":"https://github.com/ecoma-io/archkeep/tree/main/packages/archkeep-rule-sdk-ts#readme","bugs":{"url":"https://github.com/ecoma-io/archkeep/issues"},"dist":{"shasum":"5c6a66eb17db12d6d780758a8c82de0128c25c57","tarball":"https://registry.npmjs.org/@ecoma-io/archkeep-rule-sdk/-/archkeep-rule-sdk-0.27.1.tgz","fileCount":18,"integrity":"sha512-IfOfIvb7Iujl2pRg7p1j4dQmMMl4+3IZ3Un8y/4kha9Eld+IND8tx8/qa1/TePOeRaWQviIjfSTMhJKLfaI5Mg==","signatures":[{"sig":"MEYCIQDdvJ6ZPFaNuoK8TY/+6QYBaL/7N1ET2gMLuCggNC2HyQIhAL2PgT+NYjn8K1Xq84qwOiM8hBoAEPaE1NLYkm/715bc","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ecoma-io%2farchkeep-rule-sdk@0.27.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":140980},"type":"module","engines":{"node":">=22"},"gitHead":"073250d4aaf1e567fa83755d94cd5d7d0685dc96","private":false,"_npmUser":{"name":"johnmvn","email":"john.itvn@gmail.com"},"repository":{"url":"git+https://github.com/ecoma-io/archkeep.git","type":"git","directory":"packages/archkeep-rule-sdk-ts"},"_npmVersion":"11.19.0","description":"Author Archkeep custom architecture rules in AssemblyScript (TypeScript syntax) and compile them to core WebAssembly.","directories":{},"_nodeVersion":"24.20.0","_hasShrinkwrap":false,"devDependencies":{"assemblyscript":"0.28.20"},"_npmOperationalInternal":{"tmp":"tmp/archkeep-rule-sdk_0.27.1_1788961605147_0.56121379325593","host":"s3://npm-registry-packages-npm-production"}},"0.28.0":{"name":"@ecoma-io/archkeep-rule-sdk","version":"0.28.0","keywords":["architecture","webassembly","assemblyscript","monorepo","module-boundaries","archkeep"],"license":"Apache-2.0","_id":"@ecoma-io/archkeep-rule-sdk@0.28.0","maintainers":[{"name":"johnmvn","email":"john.itvn@gmail.com"}],"homepage":"https://github.com/ecoma-io/archkeep/tree/main/packages/archkeep-rule-sdk-ts#readme","bugs":{"url":"https://github.com/ecoma-io/archkeep/issues"},"dist":{"shasum":"e38f0f3b5d47deba703bc82725141cbcdcfff1dc","tarball":"https://registry.npmjs.org/@ecoma-io/archkeep-rule-sdk/-/archkeep-rule-sdk-0.28.0.tgz","fileCount":18,"integrity":"sha512-V7EsAeBNYQ+RP+lj96Y6qwtu88YnV0zbsYWBVNAoRin2n5UnsDKyQb7PTiUpb/qhoEZqUwEW22tZWzk+zEes7A==","signatures":[{"sig":"MEUCIH3gVXnluZk4SzAMpcpLtj52PIjclOjOU8mRzF+23RZeAiEA6psdgjW9zqdbrmGzKAz7GezdFZLPPUN1Vzv5muZ7iaU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ecoma-io%2farchkeep-rule-sdk@0.28.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":140980},"type":"module","engines":{"node":">=22"},"gitHead":"02556b2da8e0121717e07c54cf004d3f7ba45301","private":false,"_npmUser":{"name":"johnmvn","email":"john.itvn@gmail.com"},"repository":{"url":"git+https://github.com/ecoma-io/archkeep.git","type":"git","directory":"packages/archkeep-rule-sdk-ts"},"_npmVersion":"11.19.0","description":"Author Archkeep custom architecture rules in AssemblyScript (TypeScript syntax) and compile them to core WebAssembly.","directories":{},"_nodeVersion":"24.20.0","_hasShrinkwrap":false,"devDependencies":{"assemblyscript":"0.28.20"},"_npmOperationalInternal":{"tmp":"tmp/archkeep-rule-sdk_0.28.0_1789057422154_0.39539398285152383","host":"s3://npm-registry-packages-npm-production"}},"0.28.1":{"name":"@ecoma-io/archkeep-rule-sdk","version":"0.28.1","keywords":["architecture","webassembly","assemblyscript","monorepo","module-boundaries","archkeep"],"license":"Apache-2.0","_id":"@ecoma-io/archkeep-rule-sdk@0.28.1","maintainers":[{"name":"johnmvn","email":"john.itvn@gmail.com"}],"homepage":"https://github.com/ecoma-io/archkeep/tree/main/packages/archkeep-rule-sdk-ts#readme","bugs":{"url":"https://github.com/ecoma-io/archkeep/issues"},"dist":{"shasum":"b701f9bba0b5ef9ba0b8ec2b5fa982a4cefdf40f","tarball":"https://registry.npmjs.org/@ecoma-io/archkeep-rule-sdk/-/archkeep-rule-sdk-0.28.1.tgz","fileCount":18,"integrity":"sha512-+vH5K1O4jy+6YVJNYOXl9MFfX7Pkh7he8PU9M1jkH/L+7ArDkWPqzDaQV9JLBXUslpF4hjCptji+JPblQ9S00Q==","signatures":[{"sig":"MEQCIEHhBkUwZXZ756QS+kMPdXFQDKYBuWVUS2dZ4X5+3Ve4AiA7aiJUL9AEOXRItH1mNqP2YOdM0+NPVaoNwFL8+ScX6A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ecoma-io%2farchkeep-rule-sdk@0.28.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":140980},"type":"module","engines":{"node":">=22"},"gitHead":"84ed533c82e1a51445a7300dbf4a993b2dd48d97","private":false,"_npmUser":{"name":"johnmvn","email":"john.itvn@gmail.com"},"repository":{"url":"git+https://github.com/ecoma-io/archkeep.git","type":"git","directory":"packages/archkeep-rule-sdk-ts"},"_npmVersion":"11.19.0","description":"Author Archkeep custom architecture rules in AssemblyScript (TypeScript syntax) and compile them to core WebAssembly.","directories":{},"_nodeVersion":"24.20.0","_hasShrinkwrap":false,"devDependencies":{"assemblyscript":"0.28.20"},"_npmOperationalInternal":{"tmp":"tmp/archkeep-rule-sdk_0.28.1_1789114732436_0.7047519377332789","host":"s3://npm-registry-packages-npm-production"}},"0.29.0":{"name":"@ecoma-io/archkeep-rule-sdk","version":"0.29.0","keywords":["architecture","webassembly","assemblyscript","monorepo","module-boundaries","archkeep"],"license":"Apache-2.0","_id":"@ecoma-io/archkeep-rule-sdk@0.29.0","maintainers":[{"name":"johnmvn","email":"john.itvn@gmail.com"}],"homepage":"https://github.com/ecoma-io/archkeep/tree/main/packages/archkeep-rule-sdk-ts#readme","bugs":{"url":"https://github.com/ecoma-io/archkeep/issues"},"dist":{"shasum":"248851947b0d8a651a6c9c692356bcac0e6a6df5","tarball":"https://registry.npmjs.org/@ecoma-io/archkeep-rule-sdk/-/archkeep-rule-sdk-0.29.0.tgz","fileCount":18,"integrity":"sha512-WZ4XivwmvjcnDvABrfHjfsqjmNhjBS66oMJQEhGmvyJIctmFcy6/GiWytBFiqMKCJwrqyltACt09bhjXhdoafg==","signatures":[{"sig":"MEUCIAFW799bKFJ0RkAxHgW/CyNvZRO8OIV+etJsrmStCHZHAiEAnPS+6S2CNf+7JBRVZ/t3eW4F62oLuqcTwnRfmKQtxVk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ecoma-io%2farchkeep-rule-sdk@0.29.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":140980},"type":"module","engines":{"node":">=22"},"gitHead":"c9c154bd7f82bdadfd9309323248380ef4be4a67","private":false,"_npmUser":{"name":"johnmvn","email":"john.itvn@gmail.com"},"repository":{"url":"git+https://github.com/ecoma-io/archkeep.git","type":"git","directory":"packages/archkeep-rule-sdk-ts"},"_npmVersion":"11.19.0","description":"Author Archkeep custom architecture rules in AssemblyScript (TypeScript syntax) and compile them to core WebAssembly.","directories":{},"_nodeVersion":"24.20.0","_hasShrinkwrap":false,"devDependencies":{"assemblyscript":"0.28.20"},"_npmOperationalInternal":{"tmp":"tmp/archkeep-rule-sdk_0.29.0_1789157330853_0.015030097761195238","host":"s3://npm-registry-packages-npm-production"}},"0.30.0":{"name":"@ecoma-io/archkeep-rule-sdk","version":"0.30.0","private":false,"description":"Author Archkeep custom architecture rules in AssemblyScript (TypeScript syntax) and compile them to core WebAssembly.","keywords":["architecture","webassembly","assemblyscript","monorepo","module-boundaries","archkeep"],"homepage":"https://github.com/ecoma-io/archkeep/tree/main/packages/archkeep-rule-sdk-ts#readme","repository":{"type":"git","url":"git+https://github.com/ecoma-io/archkeep.git","directory":"packages/archkeep-rule-sdk-ts"},"bugs":{"url":"https://github.com/ecoma-io/archkeep/issues"},"license":"Apache-2.0","type":"module","devDependencies":{"assemblyscript":"0.28.20"},"engines":{"node":">=22"},"gitHead":"4dbed0e4f908717d8b79995313120596c026104e","_id":"@ecoma-io/archkeep-rule-sdk@0.30.0","_nodeVersion":"24.20.0","_npmVersion":"11.19.0","dist":{"integrity":"sha512-rsMj3lDZfZ04BKFKy/6RQS3am3vHQPac8zEhJFcOH25KbcxZoW3+LncvGwjblh7YtCs7U0m0rsIkWR1lBjaRfA==","shasum":"7eee58c78bcf61710ffa757305f85c0accab936f","tarball":"https://registry.npmjs.org/@ecoma-io/archkeep-rule-sdk/-/archkeep-rule-sdk-0.30.0.tgz","fileCount":18,"unpackedSize":140980,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ecoma-io%2farchkeep-rule-sdk@0.30.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIAT5WwmR3/HO+30pf+l23aIRoVLS2cpwXAMqq5Kfx8EpAiEAmjprO24jXiZbQhMXeDc8LSMBwQMoIxmKRW1J9r3vfRw="}]},"_npmUser":{"name":"johnmvn","email":"john.itvn@gmail.com"},"directories":{},"maintainers":[{"name":"johnmvn","email":"john.itvn@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/archkeep-rule-sdk_0.30.0_1789273473126_0.9117911398746903"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-24T04:55:29.785Z","modified":"2026-09-13T04:24:33.557Z","0.13.0":"2026-08-24T04:55:30.071Z","0.14.0":"2026-08-24T17:06:03.084Z","0.15.0":"2026-08-26T11:57:49.130Z","1.0.1-rc.1":"2026-08-28T19:55:11.302Z","0.16.0":"2026-08-29T11:43:25.915Z","0.16.1":"2026-08-29T15:18:04.819Z","0.17.0":"2026-08-30T00:26:24.954Z","0.18.0":"2026-08-31T10:13:42.016Z","0.18.1":"2026-08-31T22:40:38.656Z","0.19.0":"2026-09-02T02:05:08.840Z","0.20.0":"2026-09-02T11:32:48.023Z","0.20.1":"2026-09-02T15:01:48.911Z","0.21.0":"2026-09-03T04:57:05.516Z","0.22.0":"2026-09-04T02:52:42.124Z","0.22.1":"2026-09-04T07:21:34.149Z","0.22.2":"2026-09-04T08:11:17.410Z","0.23.0":"2026-09-04T13:15:06.988Z","0.24.0":"2026-09-04T16:46:56.967Z","0.24.1":"2026-09-04T19:48:55.098Z","0.25.0":"2026-09-05T08:32:15.304Z","0.26.0":"2026-09-08T04:22:16.765Z","0.27.0":"2026-09-08T11:40:47.380Z","0.27.1":"2026-09-09T13:46:45.278Z","0.28.0":"2026-09-10T16:23:42.306Z","0.28.1":"2026-09-11T08:18:52.576Z","0.29.0":"2026-09-11T20:08:50.988Z","0.30.0":"2026-09-13T04:24:33.263Z"},"bugs":{"url":"https://github.com/ecoma-io/archkeep/issues"},"license":"Apache-2.0","homepage":"https://github.com/ecoma-io/archkeep/tree/main/packages/archkeep-rule-sdk-ts#readme","keywords":["architecture","webassembly","assemblyscript","monorepo","module-boundaries","archkeep"],"repository":{"type":"git","url":"git+https://github.com/ecoma-io/archkeep.git","directory":"packages/archkeep-rule-sdk-ts"},"description":"Author Archkeep custom architecture rules in AssemblyScript (TypeScript syntax) and compile them to core WebAssembly.","maintainers":[{"name":"johnmvn","email":"john.itvn@gmail.com"}],"readme":"# archkeep-rule-sdk (AssemblyScript)\n\nWrite a Archkeep custom architecture rule in AssemblyScript, compile it to core\nWebAssembly, and declare it in your workspace's policy. The engine loads the\nartifact, hands it the facts it already observed, and folds the verdict into\n`check` beside the built-in boundary rules.\n\nThe npm package is `@ecoma-io/archkeep-rule-sdk`; the directory carries the `-ts`\nsuffix because this tree holds four of these and a registry that already\nnames the language does not repeat it — the reasoning is in\n[ADR 0002](../../docs/adr/0002-custom-rules-one-contract.md).\n\n## Read this first: it is AssemblyScript, not TypeScript\n\nThe syntax is TypeScript's. The language is not, and no amount of familiar\npunctuation changes that. [AssemblyScript](https://www.assemblyscript.org)\ncompiles a TypeScript-shaped source to WebAssembly ahead of time, with its own\ntype system, its own standard library and its own garbage collector — there is\nno JavaScript engine underneath it at any point.\n\n**What you get.** TypeScript syntax and editor tooling; real static types over\nthe evidence bundle and the verdict; classes, generics, interfaces, `Map`/`Set`,\nstring methods, default parameters — all measured against `asc` 0.28.20, all\nworking. A `.wasm` file at the end — 21 KB for the reference rule.\n\n**What you must not expect.** Each of these was compiled, and the compiler's own\nwords are quoted:\n\n| you might write             | what `asc` says                                      |\n| --------------------------- | ---------------------------------------------------- |\n| `x: string \\| number`       | `AS100: Not implemented: union types`                |\n| `x: any`                    | `TS2304: Cannot find name 'any'`                     |\n| `try { … } catch (e) { … }` | `AS100: Not implemented: Exceptions`                 |\n| `JSON.parse(text)`          | `TS2304: Cannot find name 'JSON'`                    |\n| `const o: { a: i32 } = …`   | `TS1110: Type expected` — no structural object types |\n| a closure over a local      | `TS2454: Variable 'n' is used before being assigned` |\n\nThere is no Node API, no `fetch`, no `require`, no `Promise`, and no\n`node_modules` of JavaScript to reach for — an AssemblyScript library is\nAssemblyScript source, compiled into your module. `Math.random()`, `trace()` and\n`Date.now()` are refused at compile time by this package's build configuration,\nand the section below says why. Numbers are `i32`/`i64`/`f64` rather than one\n`number`, and `null` is a real part of a type (`string | null`) whose narrowing\nis weaker than TypeScript's: a `const` local narrows after an `== null` check, a\nfield read does not.\n\n**Why the constraint exists, and why it is not this package's choice.** A custom\nrule is one core WebAssembly module that declares **no imports at all** —\n`WebAssembly.Module.imports(module).length > 0` is a load refusal, which is the\nmechanism behind \"a rule holds no ambient capability\" rather than a promise\nabout the host ([the contract](../../docs/reference/custom-rules.md)). A module\nwith no imports has no clock, no filesystem, no network and no randomness to\nreach for, because there is nothing to reach through. TypeScript itself does not\ncompile to core WebAssembly; AssemblyScript is what gets TypeScript syntax to a\nmodule that meets that bar, and its limits are the price of the guarantee.\n\nIf a rule of yours needs something on the \"must not expect\" list, the answer is\nnot a bigger SDK: a rule that wants a fact no evidence kind carries is asking for\na new extractor in the engine, which\n[the concept page](../../docs/concepts/custom-rules.md) owns as a refusal.\n\n## What a rule is\n\nA pure function from evidence to verdict, and nothing else in either direction.\nHere is a complete rule — every line an author writes, nothing elided. It\ncompiles as it stands, from a directory that has this package installed:\n\n```ts\nimport {\n  CatalogueEntry,\n  Evidence,\n  EvidenceKind,\n  Finding,\n  RuleDeclaration,\n  Verdict,\n  describePacked,\n  evaluatePacked,\n} from \"@ecoma-io/archkeep-rule-sdk/assembly\";\n\n// The ABI's one export a rule never writes itself: a wasm module exports what\n// its entry file exports, and an import cannot put a symbol here.\nexport { archkeep_alloc } from \"@ecoma-io/archkeep-rule-sdk/assembly\";\n\nconst RULE = new RuleDeclaration(\n  \"no-dependency-on-tag\",\n  [EvidenceKind.Model, EvidenceKind.Graph],\n  [new CatalogueEntry(\"forbidden-edge\", \"a dependency lands on a forbidden tag\")],\n);\n\nfunction evaluate(evidence: Evidence): Verdict {\n  const tag = evidence.rule.params.getString(\"forbiddenTag\");\n  if (tag == null) {\n    // Not `pass`. A rule that could not read its own parameters has not judged\n    // anything, and saying so is the whole discipline.\n    return Verdict.unknown(\"params.forbiddenTag is not a string, so nothing was judged\");\n  }\n\n  const findings: Finding[] = [];\n  for (let index = 0; index < evidence.graph.edges.length; index++) {\n    const edge = evidence.graph.edges[index];\n    const target = evidence.project(edge.target);\n    if (target == null) {\n      return Verdict.unknown(\n        'the graph carries an edge into \"' + edge.target + '\", which the model does not declare',\n      );\n    }\n    if (!target.hasTag(tag)) continue;\n    findings.push(\n      new Finding(\"forbidden-edge\", edge.source + \" depends on \" + edge.target).inProject(\n        edge.source,\n      ),\n    );\n  }\n  return Verdict.fromFindings(findings);\n}\n\nexport function archkeep_describe(): i64 {\n  return describePacked(RULE);\n}\n\nexport function archkeep_evaluate(ptr: i32, len: i32): i64 {\n  return evaluatePacked(ptr, len, evaluate);\n}\n```\n\nThe import specifier carries the `/assembly` subpath, and that is measured\nrather than stylistic: `asc` 0.28.20 maps a bare package name onto\n`~lib/@ecoma-io/archkeep-rule-sdk.ts` and fails to find it, with or without\n`--path node_modules`.\n\nThe last three lines are the ABI, and they are three lines rather than none\nbecause AssemblyScript has no macro system — the Rust SDK generates the same\nthree exports from `archkeep_rule! { … }`, and nothing this package can write\nwill put a symbol in your module. Forgetting one is not silent: the host refuses\na module missing an ABI export, by name, at load.\n\n[`examples/forbidden-tag-dependency.ts`](examples/forbidden-tag-dependency.ts)\nis the same shape, complete, and it is the artifact this package ships and tests.\n\n## The four verdicts, and why `pass` is the narrow one\n\n`pass` is a claim: the rule read the evidence it declared it needs and there was\nnothing to report. Everything that is not that claim has its own answer — `fail`\nwith findings, `not_applicable` with a reason, `unknown` with a reason — because\nan empty finding list from a rule that could not look is byte-for-byte identical\nto a clean workspace, and nobody files a bug about it.\n\nThe API is built so the hollow shapes cannot be written: `Verdict.fail` takes a\n`Findings`, whose constructor requires the finding that makes it non-empty;\n`Verdict.pass` takes nothing; the two reason-carrying verdicts take their reason\nas an argument; and `Finding.at` takes a file and both coordinates together.\n\nThree obligations this type system cannot hold, each refused by the host\ninstead — named here because a reader has to know where the line is:\n\n- **An empty string.** AssemblyScript has no non-empty-string type, so\n  `Verdict.unknown(\"\")` compiles. The host refuses it.\n- **A zeroth line.** Rust's `NonZeroU32` has no equivalent here, so\n  `Finding.at(file, 0, 0)` compiles. The host refuses it, and\n  `ImportRecord.place` is the path that cannot produce one.\n- **A finding id your catalogue does not declare.** The host refuses it, because\n  SARIF would drop the finding.\n\nThe Rust SDK decides its declaration's name grammar, duplicate ids and empty\ncatalogue at compile time; this one cannot, and does not pretend to. What stands\nin its place is [`test/golden.test.mjs`](test/golden.test.mjs), which drives the\ncommitted artifact through the real host — so a declaration this package ships\nthat the host would refuse is a red test here rather than a load error in your\ntree.\n\n## Building the artifact\n\n```bash\n./rebuild-example.sh\n```\n\nThe flags live in [`asconfig.json`](asconfig.json), in one place, because the\n`typecheck` target must fail on exactly what the build would fail on. asc parses\nthat file as strict JSON — a `//` comment fails the run with \"Asconfig is not\nvalid json\" — so the argument for each flag is here:\n\n- **`use: [\"abort=\"]`** is THE zero-import flag. AssemblyScript's `abort` —\n  reached by `throw`, by a failed `assert`, and by every bounds check — is an\n  `env.abort` import by default, and the host refuses a module that declares any\n  import at all. With the flag, `abort` compiles to `unreachable`, so the same\n  failures become a wasm trap the host names. Measured both ways: without it the\n  module declares `env.abort`; with it,\n  `WebAssembly.Module.imports(module).length === 0`.\n- **`use: [\"trace=\", \"seed=\", \"Date=\"]`** are not import removers — they are\n  compile-time refusals. `trace()`, `Math.random()` and `Date.now()` each pull an\n  `env` import, and these three turn every CALL SITE into `Cannot find name`\n  instead. A rule reaching for a debug channel, randomness or the clock fails to\n  build, which is earlier than the load refusal it would otherwise get.\n- **`runtime: \"stub\"`** is a bump allocator that never frees, which is exactly\n  the lifetime the contract describes: the host builds a fresh instance for every\n  call and discards it, so a rule has nothing to free into. Measured on the\n  reference rule: stub 21,330 bytes, minimal 22,997, incremental 36,422 — all\n  three with zero imports, so the smallest is free.\n- **`optimizeLevel: 0, shrinkLevel: 2, converge: true`** is what `-Osize`\n  expands to (`asc --showConfig` prints it). 21,330 bytes against 25,486 for\n  plain `--optimize`. Size matters here for a reason it usually does not: the\n  artifact is committed to the workspace that declares the rule, reviewed as\n  bytes, and pinned by a sha256 in the policy row.\n- **`noAssert: false`** is stated rather than left implicit. `--noAssert`\n  replaces every bounds check with its value, so an out-of-range read would\n  return whatever is at that address instead of trapping — a verdict computed\n  from memory the rule never wrote, which is the silent direction.\n\nTwo flags deliberately absent: `--noUnsafe`, which rejects the `changetype` and\n`String.UTF8.decodeUnsafe` the ABI shell is built from (measured: two AS101\nerrors) even though that code is this package's rather than a rule's; and\n`--exportRuntime`, which would export allocator helpers the ABI does not name.\n\nThe result declares **no imports at all** and exports exactly the four symbols\nthe ABI names, `memory` among them — `asc` exports linear memory under that name\nunless `--noExportMemory` is passed. Check both before shipping a rule of your\nown, because the three `use` flags above cover the three ambient channels\nAssemblyScript's own standard library reaches for and nothing stops an\n`@external` declaration from adding a fourth:\n\n```bash\nnode -e 'const m=new WebAssembly.Module(require(\"fs\").readFileSync(process.argv[1]));\nconsole.log(WebAssembly.Module.imports(m), WebAssembly.Module.exports(m).map(e=>e.name))' \\\n  my-rule.wasm\n```\n\n## Declaring it\n\n```js\nexport const customRules = [\n  {\n    name: \"forbidden-tag-dependency\",\n    artifact: \"tools/rules/forbidden-tag-dependency.wasm\",\n    sha256: \"<the contents of examples/forbidden-tag-dependency.wasm.sha256>\",\n    params: { forbiddenTag: \"layer-infrastructure\", exemptTags: [\"layer-adapter\"] },\n    reason: \"infrastructure is reached through the domain's ports, never directly\",\n  },\n];\n```\n\nThe `name` here and the `name` in the `RuleDeclaration` must be the same string:\nthe host refuses the pair when they differ, because the declared name is what\nevery finding is namespaced under.\n\n## The committed artifact, and why a binary is in this tree\n\n`examples/forbidden-tag-dependency.wasm` is committed, and\n`examples/forbidden-tag-dependency.wasm.sha256` beside it holds its digest —\nthe same string a policy row pins. `test/artifact.test.mjs` recomputes the digest\nover the committed bytes and fails when the two have drifted, so a rebuilt\nartifact cannot land beside the digest of the one before it. Rebuild both\ntogether with `./rebuild-example.sh`, which writes both files or neither.\n\nThe digest pairs the two committed files; what pairs them with the SOURCE is\n[`test/provenance.test.mjs`](test/provenance.test.mjs), which compiles the\nexample with the pinned `asc` — the devDependency the `typecheck` target\nalready installs, so no new toolchain anywhere — into a temp directory and\nrequires the result to be the committed artifact byte for byte. An edit to the\nrule without a rebuild goes red there instead of passing every gate, and so\ndoes an `asc` version bump that changes what the same source compiles to.\nNothing it produces is ever written over the committed file: the rebuild is\nstill made by hand, by the script, digest and all.\n\nCI does not run that script. The tests check the bytes in the tree, which is the\npoint — a green run proves the artifact a reviewer can hash, not one the runner\njust produced. The digest pins those bytes; it does not claim a reproducible\nbuild. Two runs of the same compiler on the same source do produce the same\ndigest (measured), and a different `asc` version will not — which is exactly\nthe drift the provenance test turns red.\n\n## The fixtures\n\n`fixtures/` holds evidence bundles produced by the engine's own bundle assembly\nand canonical serializer — not hand-written JSON that looks like one — and they\nare committed as data rather than regenerated by a script kept here: a generator\nin this package would have to import the engine's modules, which is the\ndependency direction the scope axis in\n[the workspace's boundary law](../../module-boundaries.config.mjs) exists to\nrefuse. They are byte-identical to\n[the Rust SDK's copies](../archkeep-rule-sdk-rust/fixtures), and what holds them\nthat way is no longer a promise:\n[`rule-sdks.integration.test.mjs`](../archkeep/src/conformance/rule-sdks.integration.test.mjs)\nreads every SDK's copy of every fixture and requires them byte-identical, then\ndrives all four committed artifacts through the engine's real host and requires\none verdict document from each. The copy is still made in the change that lands\neach SDK; the gate is what makes an edit to one copy alone go red. When the\nevidence contract grows, the fixtures are regenerated from the engine side and\nland in the same change.\n\n[`test/golden.test.mjs`](test/golden.test.mjs) pins the verdict each must\nproduce, and it is the strongest of the three SDK harnesses for one structural\nreason: the host is JavaScript, this harness is JavaScript, and the engine sits\nin the same tree — so the fixtures are replayed through `loadCustomRule` and\n`evaluateCustomRule` themselves rather than through a local stand-in. Every\nrefusal a consumer's `check` would make is made here first: the digest, the\nimport section, the missing export, the name that disagrees with the policy row,\nthe hollow verdict. Three of the cases are there for the silent direction — a\nrule that cannot read its parameters, a graph naming a project the model does\nnot declare, and evidence bytes that are not a bundle at all. All three must\nanswer `unknown`; a suite where they answered `pass` would be green over a rule\nthat had stopped running.\n\n## What this package will not do\n\nIt binds the contract and never interprets it. There is no second verdict\nvocabulary, no SDK-specific field, and no re-modelling of the policy — a\nconstraint row arrives as a raw `JsonValue` because\n[the engine](../archkeep/README.md) owns that schema and a copy here would drift\nfrom it. Whether a finding resolves to a catalogue entry, whether a verdict is\nhollow, whether a `needs` entry names a kind the engine can supply: all of that\nis the host's refusal to make, and duplicating it here would put this package's\nopinion in front of the real one.\n\nIt also ships no runtime JavaScript. There is no `main`, no `exports` map and\nnothing to `import` from Node — what this package publishes is AssemblyScript\nsource that `asc` compiles into your rule, plus the fixtures and the reference\nartifact. The one JavaScript here is the harness under `test/`, which is this\nrepository's, not yours.\n","readmeFilename":"README.md"}