{"_id":"@agentplat/collective-quorum","_rev":"10-1a3c290645595ac642f6ab9b40f64e0c","name":"@agentplat/collective-quorum","dist-tags":{"agentplat-stage-dbd047c3c9a9":"0.3.0-beta.4","agentplat-stage-ffca668731c9":"0.3.0-beta.4","agentplat-stage-dc16b2267584":"0.3.0-beta.5","next":"0.3.0-beta.8","latest":"1.2.0"},"versions":{"0.3.0-beta.4":{"name":"@agentplat/collective-quorum","version":"0.3.0-beta.4","license":"Apache-2.0","_id":"@agentplat/collective-quorum@0.3.0-beta.4","maintainers":[{"name":"douglas-grishen","email":"douglas@grishen.com"}],"homepage":"https://github.com/Agentplat/agentplat#readme","bugs":{"url":"https://github.com/Agentplat/agentplat/issues"},"dist":{"shasum":"557eb7026b455e87f7bde03d45b0107807fd531e","tarball":"https://registry.npmjs.org/@agentplat/collective-quorum/-/collective-quorum-0.3.0-beta.4.tgz","fileCount":171,"integrity":"sha512-XtbX680eWYFpRZvjr+p9U20X2o2TMUam5VvgHT67rPqPglEHxeu36e0STp5n3/+djAkb2MSWeosNd5YZLM+Fdg==","signatures":[{"sig":"MEUCIGZzeLC6Aj2CaPhGYSNsPw939IL/VBHtTNw3VCxy8g4sAiEA5ugtj6VzyBl8Pw00U5HRHppFVOsvoE4rczReB7GFNMY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":968685},"main":"./dist/index.js","type":"module","_from":"file:/tmp/agentplat-publish-jABHQZ/tarballs/agentplat-collective-quorum-0.3.0-beta.4.tgz","types":"./dist/index.d.ts","engines":{"node":">=20.19.3"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./crypto":{"types":"./dist/crypto.d.ts","import":"./dist/crypto.js"},"./agreement":{"types":"./dist/agreement.d.ts","import":"./dist/agreement.js"},"./trust-consensus":{"types":"./dist/trust-consensus.d.ts","import":"./dist/trust-consensus.js"},"./webcrypto-ports":{"types":"./dist/webcrypto-ports.d.ts","import":"./dist/webcrypto-ports.js"},"./role-realignment":{"types":"./dist/role-realignment.d.ts","import":"./dist/role-realignment.js"},"./sparse-agreement":{"types":"./dist/sparse-agreement.d.ts","import":"./dist/sparse-agreement.js"},"./collective-decision":{"types":"./dist/collective-decision.d.ts","import":"./dist/collective-decision.js"},"./equivocation-response":{"types":"./dist/equivocation-response.d.ts","import":"./dist/equivocation-response.js"},"./mission-context-fusion":{"types":"./dist/mission-context-fusion.d.ts","import":"./dist/mission-context-fusion.js"},"./partial-view-agreement":{"types":"./dist/partial-view-agreement.d.ts","import":"./dist/partial-view-agreement.js"},"./collusion-aware-context":{"types":"./dist/collusion-aware-context.d.ts","import":"./dist/collusion-aware-context.js"},"./sparse-agreement-runtime":{"types":"./dist/sparse-agreement-runtime.d.ts","import":"./dist/sparse-agreement-runtime.js"}},"scripts":{"test":"pnpm run build && node --test tests/*.test.mjs","build":"tsc -p tsconfig.json","clean":"node -e \"require('node:fs').rmSync('dist',{recursive:true,force:true})\"","type-check":"tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"douglas-grishen","email":"douglas@grishen.com"},"_resolved":"/tmp/agentplat-publish-jABHQZ/tarballs/agentplat-collective-quorum-0.3.0-beta.4.tgz","_integrity":"sha512-XtbX680eWYFpRZvjr+p9U20X2o2TMUam5VvgHT67rPqPglEHxeu36e0STp5n3/+djAkb2MSWeosNd5YZLM+Fdg==","repository":{"url":"git+https://github.com/Agentplat/agentplat.git","type":"git","directory":"packages/collective-quorum"},"_npmVersion":"10.8.2","description":"Signed peer quorum protocols and Agentplat collective runtime adapters.","directories":{},"sideEffects":false,"_nodeVersion":"20.20.2","dependencies":{"@agentplat/mesh":"^0.3.0-beta.4","@agentplat/trust":"^0.3.0-beta.4","@agentplat/mesh-crypto":"^0.3.0-beta.4","@agentplat/mesh-protocol":"^0.3.0-beta.4","@agentplat/inference-control":"^0.3.0-beta.4","@agentplat/collective-control":"^0.3.0-beta.4","@agentplat/collective-runtime":"^0.3.0-beta.4","@agentplat/collective-planning":"^0.3.0-beta.4"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/collective-quorum_0.3.0-beta.4_1786996617337_0.9639463446128862","host":"s3://npm-registry-packages-npm-production"}},"0.3.0-beta.5":{"name":"@agentplat/collective-quorum","version":"0.3.0-beta.5","license":"Apache-2.0","_id":"@agentplat/collective-quorum@0.3.0-beta.5","maintainers":[{"name":"douglas-grishen","email":"douglas@grishen.com"}],"homepage":"https://github.com/Agentplat/agentplat#readme","bugs":{"url":"https://github.com/Agentplat/agentplat/issues"},"dist":{"shasum":"d46f6d121a3bcb28e9a76d578ec5fa54453f0d56","tarball":"https://registry.npmjs.org/@agentplat/collective-quorum/-/collective-quorum-0.3.0-beta.5.tgz","fileCount":171,"integrity":"sha512-KHMywZz04UYo895J6lQ8zFe7zStXlPT4tE5gVZUWGQYenA+Pl/TZ/ExR/jfPQ9PxzuEdTkc2oqP0YQ9OKApNsg==","signatures":[{"sig":"MEQCIBYTge7flGR4E2injmF8YqbmgcY800dMxfn+XMh2RC9OAiBxA+LEG843vUpKi9vGfVH6dWiD5bwCCXcDmAbbW263/Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@agentplat%2fcollective-quorum@0.3.0-beta.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":968685},"main":"./dist/index.js","type":"module","_from":"file:/tmp/agentplat-publish-QbF2qw/tarballs/agentplat-collective-quorum-0.3.0-beta.5.tgz","types":"./dist/index.d.ts","engines":{"node":">=20.19.3"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./crypto":{"types":"./dist/crypto.d.ts","import":"./dist/crypto.js"},"./agreement":{"types":"./dist/agreement.d.ts","import":"./dist/agreement.js"},"./trust-consensus":{"types":"./dist/trust-consensus.d.ts","import":"./dist/trust-consensus.js"},"./webcrypto-ports":{"types":"./dist/webcrypto-ports.d.ts","import":"./dist/webcrypto-ports.js"},"./role-realignment":{"types":"./dist/role-realignment.d.ts","import":"./dist/role-realignment.js"},"./sparse-agreement":{"types":"./dist/sparse-agreement.d.ts","import":"./dist/sparse-agreement.js"},"./collective-decision":{"types":"./dist/collective-decision.d.ts","import":"./dist/collective-decision.js"},"./equivocation-response":{"types":"./dist/equivocation-response.d.ts","import":"./dist/equivocation-response.js"},"./mission-context-fusion":{"types":"./dist/mission-context-fusion.d.ts","import":"./dist/mission-context-fusion.js"},"./partial-view-agreement":{"types":"./dist/partial-view-agreement.d.ts","import":"./dist/partial-view-agreement.js"},"./collusion-aware-context":{"types":"./dist/collusion-aware-context.d.ts","import":"./dist/collusion-aware-context.js"},"./sparse-agreement-runtime":{"types":"./dist/sparse-agreement-runtime.d.ts","import":"./dist/sparse-agreement-runtime.js"}},"scripts":{"test":"pnpm run build && node --test tests/*.test.mjs","build":"tsc -p tsconfig.json","clean":"node -e \"require('node:fs').rmSync('dist',{recursive:true,force:true})\"","type-check":"tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:a033618a-84e3-4986-908f-263289b2b6f3"}},"_resolved":"/tmp/agentplat-publish-QbF2qw/tarballs/agentplat-collective-quorum-0.3.0-beta.5.tgz","_integrity":"sha512-KHMywZz04UYo895J6lQ8zFe7zStXlPT4tE5gVZUWGQYenA+Pl/TZ/ExR/jfPQ9PxzuEdTkc2oqP0YQ9OKApNsg==","repository":{"url":"git+https://github.com/Agentplat/agentplat.git","type":"git","directory":"packages/collective-quorum"},"_npmVersion":"11.17.0","description":"Signed peer quorum protocols and Agentplat collective runtime adapters.","directories":{},"sideEffects":false,"_nodeVersion":"24.19.0","dependencies":{"@agentplat/mesh":"^0.3.0-beta.5","@agentplat/trust":"^0.3.0-beta.5","@agentplat/mesh-crypto":"^0.3.0-beta.5","@agentplat/mesh-protocol":"^0.3.0-beta.5","@agentplat/inference-control":"^0.3.0-beta.5","@agentplat/collective-control":"^0.3.0-beta.5","@agentplat/collective-runtime":"^0.3.0-beta.5","@agentplat/collective-planning":"^0.3.0-beta.5"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","_npmOperationalInternal":{"tmp":"tmp/collective-quorum_0.3.0-beta.5_1787371858184_0.046625532393541835","host":"s3://npm-registry-packages-npm-production"}},"0.3.0-beta.7":{"name":"@agentplat/collective-quorum","version":"0.3.0-beta.7","license":"Apache-2.0","_id":"@agentplat/collective-quorum@0.3.0-beta.7","maintainers":[{"name":"douglas-grishen","email":"douglas@grishen.com"}],"homepage":"https://github.com/Agentplat/agentplat#readme","bugs":{"url":"https://github.com/Agentplat/agentplat/issues"},"dist":{"shasum":"d4340bcdcb3e80fc69e364bb8e6cdb4f3fa8165b","tarball":"https://registry.npmjs.org/@agentplat/collective-quorum/-/collective-quorum-0.3.0-beta.7.tgz","fileCount":175,"integrity":"sha512-RK8zy+aC5GJmLNB0ncuxI7xs8i6iaxpVPBu+Ui3Eew8JRrbwHOtBc8uD3BqM6qAho/K7qCP+4oLkd699zL/mtA==","signatures":[{"sig":"MEQCIDg5ui/UKv+o9q9kczk4YK9PK4hDtaHLi0ucVVGz3RdIAiBpkoMyXOOuo5XFJElamgKEjj5sbsfSfHZPg4k1tGrMvg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@agentplat%2fcollective-quorum@0.3.0-beta.7","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":986749},"main":"./dist/index.js","type":"module","_from":"file:/home/runner/work/agentplat/agentplat/release-artifacts/agentplat-collective-quorum-0.3.0-beta.7.tgz","types":"./dist/index.d.ts","engines":{"node":">=20.19.3"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./crypto":{"types":"./dist/crypto.d.ts","import":"./dist/crypto.js"},"./agreement":{"types":"./dist/agreement.d.ts","import":"./dist/agreement.js"},"./morphogenesis":{"types":"./dist/morphogenesis.d.ts","import":"./dist/morphogenesis.js"},"./trust-consensus":{"types":"./dist/trust-consensus.d.ts","import":"./dist/trust-consensus.js"},"./webcrypto-ports":{"types":"./dist/webcrypto-ports.d.ts","import":"./dist/webcrypto-ports.js"},"./role-realignment":{"types":"./dist/role-realignment.d.ts","import":"./dist/role-realignment.js"},"./sparse-agreement":{"types":"./dist/sparse-agreement.d.ts","import":"./dist/sparse-agreement.js"},"./collective-decision":{"types":"./dist/collective-decision.d.ts","import":"./dist/collective-decision.js"},"./equivocation-response":{"types":"./dist/equivocation-response.d.ts","import":"./dist/equivocation-response.js"},"./mission-context-fusion":{"types":"./dist/mission-context-fusion.d.ts","import":"./dist/mission-context-fusion.js"},"./partial-view-agreement":{"types":"./dist/partial-view-agreement.d.ts","import":"./dist/partial-view-agreement.js"},"./collusion-aware-context":{"types":"./dist/collusion-aware-context.d.ts","import":"./dist/collusion-aware-context.js"},"./sparse-agreement-runtime":{"types":"./dist/sparse-agreement-runtime.d.ts","import":"./dist/sparse-agreement-runtime.js"}},"scripts":{"test":"pnpm run build && node --test tests/*.test.mjs","build":"tsc -p tsconfig.json","clean":"node -e \"require('node:fs').rmSync('dist',{recursive:true,force:true})\"","type-check":"tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","approver":{"name":"douglas-grishen","email":"douglas@grishen.com"},"trustedPublisher":{"id":"github","oidcConfigId":"oidc:6457dd54-7181-43a9-9b86-0404594edd6c"}},"_resolved":"/home/runner/work/agentplat/agentplat/release-artifacts/agentplat-collective-quorum-0.3.0-beta.7.tgz","_integrity":"sha512-RK8zy+aC5GJmLNB0ncuxI7xs8i6iaxpVPBu+Ui3Eew8JRrbwHOtBc8uD3BqM6qAho/K7qCP+4oLkd699zL/mtA==","repository":{"url":"git+https://github.com/Agentplat/agentplat.git","type":"git","directory":"packages/collective-quorum"},"_npmVersion":"11.19.0","description":"Signed peer quorum protocols and Agentplat collective runtime adapters.","directories":{},"sideEffects":false,"_nodeVersion":"24.20.0","dependencies":{"@agentplat/mesh":"^0.3.0-beta.7","@agentplat/trust":"^0.3.0-beta.7","@agentplat/mesh-crypto":"^0.3.0-beta.7","@agentplat/mesh-protocol":"^0.3.0-beta.7","@agentplat/inference-control":"^0.3.0-beta.7","@agentplat/collective-control":"^0.3.0-beta.7","@agentplat/collective-runtime":"^0.3.0-beta.7","@agentplat/collective-planning":"^0.3.0-beta.7"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","_npmOperationalInternal":{"tmp":"tmp/collective-quorum_0.3.0-beta.7_1788979625418_0.7147271222491418","host":"s3://npm-registry-packages-npm-production"}},"0.3.0-beta.8":{"name":"@agentplat/collective-quorum","version":"0.3.0-beta.8","license":"Apache-2.0","_id":"@agentplat/collective-quorum@0.3.0-beta.8","maintainers":[{"name":"douglas-grishen","email":"douglas@grishen.com"}],"homepage":"https://github.com/Agentplat/agentplat#readme","bugs":{"url":"https://github.com/Agentplat/agentplat/issues"},"dist":{"shasum":"0b509d61ebc4b040ffa894f52f3a60bd42e0edeb","tarball":"https://registry.npmjs.org/@agentplat/collective-quorum/-/collective-quorum-0.3.0-beta.8.tgz","fileCount":175,"integrity":"sha512-sI8gucGfQnbyQ0MgWfcc5ftHPAAJGtgcWOq0E8Kt1caLUvyUo4uv/LzhQDYdis2T3O34qhYN04+k7hc5TFi9OA==","signatures":[{"sig":"MEQCIEe7NY1e9QwhAIizZi7tXWm3YxsQA/qfo0R7ok+vy1ozAiA/FBtkQ/cwgOjpyDqz2DQdwisMo4O0PxRovthwbwtcOA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@agentplat%2fcollective-quorum@0.3.0-beta.8","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":987036},"main":"./dist/index.js","type":"module","_from":"file:/home/runner/work/agentplat/agentplat/release-artifacts/agentplat-collective-quorum-0.3.0-beta.8.tgz","types":"./dist/index.d.ts","engines":{"node":">=20.19.3"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./crypto":{"types":"./dist/crypto.d.ts","import":"./dist/crypto.js"},"./agreement":{"types":"./dist/agreement.d.ts","import":"./dist/agreement.js"},"./morphogenesis":{"types":"./dist/morphogenesis.d.ts","import":"./dist/morphogenesis.js"},"./trust-consensus":{"types":"./dist/trust-consensus.d.ts","import":"./dist/trust-consensus.js"},"./webcrypto-ports":{"types":"./dist/webcrypto-ports.d.ts","import":"./dist/webcrypto-ports.js"},"./role-realignment":{"types":"./dist/role-realignment.d.ts","import":"./dist/role-realignment.js"},"./sparse-agreement":{"types":"./dist/sparse-agreement.d.ts","import":"./dist/sparse-agreement.js"},"./collective-decision":{"types":"./dist/collective-decision.d.ts","import":"./dist/collective-decision.js"},"./equivocation-response":{"types":"./dist/equivocation-response.d.ts","import":"./dist/equivocation-response.js"},"./mission-context-fusion":{"types":"./dist/mission-context-fusion.d.ts","import":"./dist/mission-context-fusion.js"},"./partial-view-agreement":{"types":"./dist/partial-view-agreement.d.ts","import":"./dist/partial-view-agreement.js"},"./collusion-aware-context":{"types":"./dist/collusion-aware-context.d.ts","import":"./dist/collusion-aware-context.js"},"./sparse-agreement-runtime":{"types":"./dist/sparse-agreement-runtime.d.ts","import":"./dist/sparse-agreement-runtime.js"}},"scripts":{"test":"pnpm run build && node --test tests/*.test.mjs","build":"tsc -p tsconfig.json","clean":"node -e \"require('node:fs').rmSync('dist',{recursive:true,force:true})\"","type-check":"tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","approver":{"name":"douglas-grishen","email":"douglas@grishen.com"},"trustedPublisher":{"id":"github","oidcConfigId":"oidc:6457dd54-7181-43a9-9b86-0404594edd6c"}},"_resolved":"/home/runner/work/agentplat/agentplat/release-artifacts/agentplat-collective-quorum-0.3.0-beta.8.tgz","_integrity":"sha512-sI8gucGfQnbyQ0MgWfcc5ftHPAAJGtgcWOq0E8Kt1caLUvyUo4uv/LzhQDYdis2T3O34qhYN04+k7hc5TFi9OA==","repository":{"url":"git+https://github.com/Agentplat/agentplat.git","type":"git","directory":"packages/collective-quorum"},"_npmVersion":"11.19.0","description":"Signed peer quorum protocols and Agentplat collective runtime adapters.","directories":{},"sideEffects":false,"_nodeVersion":"24.20.0","dependencies":{"@agentplat/mesh":"^0.3.0-beta.8","@agentplat/trust":"^0.3.0-beta.8","@agentplat/mesh-crypto":"^0.3.0-beta.8","@agentplat/mesh-protocol":"^0.3.0-beta.8","@agentplat/inference-control":"^0.3.0-beta.8","@agentplat/collective-control":"^0.3.0-beta.8","@agentplat/collective-runtime":"^0.3.0-beta.8","@agentplat/collective-planning":"^0.3.0-beta.8"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","_npmOperationalInternal":{"tmp":"tmp/collective-quorum_0.3.0-beta.8_1789349135309_0.2282702539392616","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"@agentplat/collective-quorum","version":"1.0.0","license":"Apache-2.0","_id":"@agentplat/collective-quorum@1.0.0","maintainers":[{"name":"douglas-grishen","email":"douglas@grishen.com"}],"homepage":"https://github.com/Agentplat/agentplat#readme","bugs":{"url":"https://github.com/Agentplat/agentplat/issues"},"dist":{"shasum":"c98b5b73c662c85c8ff35cd84239a1f7711a77f4","tarball":"https://registry.npmjs.org/@agentplat/collective-quorum/-/collective-quorum-1.0.0.tgz","fileCount":175,"integrity":"sha512-BdZEsMXC/OWH6ll2XjGd65dNwoHLbNPBruwRtm87+XQSrzwUS/xS6hio4nhlpiNAY+3zhV1CgPoicgL/5CgabA==","signatures":[{"sig":"MEYCIQCAFp2bAhviMskA4EAMYI89qBgif2QcTW+3m2dxrMXBuAIhAJwnNNir2XckKkBNj/SZMiSPXRURQW9GxbrO86YRpIfc","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCICKcW11+JCZXY2McWUmW6svoph/J3A74ysi1n38HaQFxAiBMOCI14CpVl3ZMArIQZSyWS2QXC4X85hxw2p/8VunNdw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@agentplat%2fcollective-quorum@1.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":986973},"main":"./dist/index.js","type":"module","_from":"file:/home/runner/work/agentplat/agentplat/release-artifacts/agentplat-collective-quorum-1.0.0.tgz","types":"./dist/index.d.ts","engines":{"node":">=20.19.3"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./crypto":{"types":"./dist/crypto.d.ts","import":"./dist/crypto.js"},"./agreement":{"types":"./dist/agreement.d.ts","import":"./dist/agreement.js"},"./morphogenesis":{"types":"./dist/morphogenesis.d.ts","import":"./dist/morphogenesis.js"},"./trust-consensus":{"types":"./dist/trust-consensus.d.ts","import":"./dist/trust-consensus.js"},"./webcrypto-ports":{"types":"./dist/webcrypto-ports.d.ts","import":"./dist/webcrypto-ports.js"},"./role-realignment":{"types":"./dist/role-realignment.d.ts","import":"./dist/role-realignment.js"},"./sparse-agreement":{"types":"./dist/sparse-agreement.d.ts","import":"./dist/sparse-agreement.js"},"./collective-decision":{"types":"./dist/collective-decision.d.ts","import":"./dist/collective-decision.js"},"./equivocation-response":{"types":"./dist/equivocation-response.d.ts","import":"./dist/equivocation-response.js"},"./mission-context-fusion":{"types":"./dist/mission-context-fusion.d.ts","import":"./dist/mission-context-fusion.js"},"./partial-view-agreement":{"types":"./dist/partial-view-agreement.d.ts","import":"./dist/partial-view-agreement.js"},"./collusion-aware-context":{"types":"./dist/collusion-aware-context.d.ts","import":"./dist/collusion-aware-context.js"},"./sparse-agreement-runtime":{"types":"./dist/sparse-agreement-runtime.d.ts","import":"./dist/sparse-agreement-runtime.js"}},"scripts":{"test":"pnpm run build && node --test tests/*.test.mjs","build":"tsc -p tsconfig.json","clean":"node -e \"require('node:fs').rmSync('dist',{recursive:true,force:true})\"","type-check":"tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:2eabee75-3813-4510-9c61-12daf61f53f5"}},"_resolved":"/home/runner/work/agentplat/agentplat/release-artifacts/agentplat-collective-quorum-1.0.0.tgz","_integrity":"sha512-BdZEsMXC/OWH6ll2XjGd65dNwoHLbNPBruwRtm87+XQSrzwUS/xS6hio4nhlpiNAY+3zhV1CgPoicgL/5CgabA==","repository":{"url":"git+https://github.com/Agentplat/agentplat.git","type":"git","directory":"packages/collective-quorum"},"_npmVersion":"11.19.0","description":"Signed peer quorum protocols and Agentplat collective runtime adapters.","directories":{},"sideEffects":false,"_nodeVersion":"24.20.0","dependencies":{"@agentplat/mesh":"^1.0.0","@agentplat/trust":"^1.0.0","@agentplat/mesh-crypto":"^1.0.0","@agentplat/mesh-protocol":"^1.0.0","@agentplat/inference-control":"^1.0.0","@agentplat/collective-control":"^1.0.0","@agentplat/collective-runtime":"^1.0.0","@agentplat/collective-planning":"^1.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/collective-quorum_1.0.0_1790116408973_0.3074026634381082","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@agentplat/collective-quorum","version":"1.1.0","license":"Apache-2.0","_id":"@agentplat/collective-quorum@1.1.0","maintainers":[{"name":"douglas-grishen","email":"douglas@grishen.com"}],"homepage":"https://github.com/Agentplat/agentplat#readme","bugs":{"url":"https://github.com/Agentplat/agentplat/issues"},"dist":{"shasum":"8459a8b18f4ce1e2e8ed234610e17e97886077d7","tarball":"https://registry.npmjs.org/@agentplat/collective-quorum/-/collective-quorum-1.1.0.tgz","fileCount":175,"integrity":"sha512-VXpAGeKDgcm3ZjrOhJFwFO66JkYsKBDL5xwanS1eqgdHl3BZA3IT1m6g1XjoustlV+inXuBRIIsgJPVDQ0T3Jw==","signatures":[{"sig":"MEUCIBjmWCO7co2P/XdfyNPFmASugWHyWvbKfbRHMY2eI0dCAiEAiJdJrRQoA8RWrqVmLiqlZivMEdbNl41zbdQJ1TNJDns=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCYXPZ1v6w5gN0BN+oJmSAzmfjwkn1WiCi9KWltIJZv1AIgMbXMhhQOizQfiXennlYcRjV1cFYTN0EdEZH8bggsYsY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@agentplat%2fcollective-quorum@1.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":986973},"main":"./dist/index.js","type":"module","_from":"file:/home/runner/work/agentplat/agentplat/release-artifacts/agentplat-collective-quorum-1.1.0.tgz","types":"./dist/index.d.ts","engines":{"node":">=20.19.3"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./crypto":{"types":"./dist/crypto.d.ts","import":"./dist/crypto.js"},"./agreement":{"types":"./dist/agreement.d.ts","import":"./dist/agreement.js"},"./morphogenesis":{"types":"./dist/morphogenesis.d.ts","import":"./dist/morphogenesis.js"},"./trust-consensus":{"types":"./dist/trust-consensus.d.ts","import":"./dist/trust-consensus.js"},"./webcrypto-ports":{"types":"./dist/webcrypto-ports.d.ts","import":"./dist/webcrypto-ports.js"},"./role-realignment":{"types":"./dist/role-realignment.d.ts","import":"./dist/role-realignment.js"},"./sparse-agreement":{"types":"./dist/sparse-agreement.d.ts","import":"./dist/sparse-agreement.js"},"./collective-decision":{"types":"./dist/collective-decision.d.ts","import":"./dist/collective-decision.js"},"./equivocation-response":{"types":"./dist/equivocation-response.d.ts","import":"./dist/equivocation-response.js"},"./mission-context-fusion":{"types":"./dist/mission-context-fusion.d.ts","import":"./dist/mission-context-fusion.js"},"./partial-view-agreement":{"types":"./dist/partial-view-agreement.d.ts","import":"./dist/partial-view-agreement.js"},"./collusion-aware-context":{"types":"./dist/collusion-aware-context.d.ts","import":"./dist/collusion-aware-context.js"},"./sparse-agreement-runtime":{"types":"./dist/sparse-agreement-runtime.d.ts","import":"./dist/sparse-agreement-runtime.js"}},"scripts":{"test":"pnpm run build && node --test tests/*.test.mjs","build":"tsc -p tsconfig.json","clean":"node -e \"require('node:fs').rmSync('dist',{recursive:true,force:true})\"","type-check":"tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"2eabee75-3813-4510-9c61-12daf61f53f5"}},"_resolved":"/home/runner/work/agentplat/agentplat/release-artifacts/agentplat-collective-quorum-1.1.0.tgz","_integrity":"sha512-VXpAGeKDgcm3ZjrOhJFwFO66JkYsKBDL5xwanS1eqgdHl3BZA3IT1m6g1XjoustlV+inXuBRIIsgJPVDQ0T3Jw==","repository":{"url":"git+https://github.com/Agentplat/agentplat.git","type":"git","directory":"packages/collective-quorum"},"_npmVersion":"11.19.0","description":"Signed peer quorum protocols and Agentplat collective runtime adapters.","directories":{},"sideEffects":false,"_nodeVersion":"24.20.0","dependencies":{"@agentplat/mesh":"^1.1.0","@agentplat/trust":"^1.1.0","@agentplat/mesh-crypto":"^1.1.0","@agentplat/mesh-protocol":"^1.1.0","@agentplat/inference-control":"^1.1.0","@agentplat/collective-control":"^1.1.0","@agentplat/collective-runtime":"^1.1.0","@agentplat/collective-planning":"^1.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/collective-quorum_1.1.0_1790699579230_0.8258088049009247","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"_id":"@agentplat/collective-quorum@1.2.0","bugs":{"url":"https://github.com/Agentplat/agentplat/issues"},"dist":{"shasum":"b183c9905c3361c94e2973e88b266a4c6bfdf329","tarball":"https://registry.npmjs.org/@agentplat/collective-quorum/-/collective-quorum-1.2.0.tgz","fileCount":175,"integrity":"sha512-NaFOWtjzRf065tPQa8Ubk0sYPK81iwEEt4Rrefk+nyvSAByPItJsbWr88LM5p+onVnIUnW8fewgR9Bov/WTDMw==","signatures":[{"sig":"MEYCIQCo+IQHfnECd/3XAtD17vIk+dZRsmiB1HIJzgDpm6juOgIhAK96IRCBfwzuUSEsg8/iqkrT+ZWLAL1N0jxNpOmtIc15","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCID3nfCOP9UZvuIzVEDH5DIS0nCCTRup/Eu/C0Tnt5IhrAiEA6UTBxuVnVgfStqgH/MqmKtUiLRevLOKhheH21XO87CI="}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@agentplat%2fcollective-quorum@1.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":986973},"main":"./dist/index.js","name":"@agentplat/collective-quorum","type":"module","_from":"file:/home/runner/work/agentplat/agentplat/release-artifacts/agentplat-collective-quorum-1.2.0.tgz","types":"./dist/index.d.ts","engines":{"node":">=20.19.3"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./crypto":{"types":"./dist/crypto.d.ts","import":"./dist/crypto.js"},"./agreement":{"types":"./dist/agreement.d.ts","import":"./dist/agreement.js"},"./morphogenesis":{"types":"./dist/morphogenesis.d.ts","import":"./dist/morphogenesis.js"},"./trust-consensus":{"types":"./dist/trust-consensus.d.ts","import":"./dist/trust-consensus.js"},"./webcrypto-ports":{"types":"./dist/webcrypto-ports.d.ts","import":"./dist/webcrypto-ports.js"},"./role-realignment":{"types":"./dist/role-realignment.d.ts","import":"./dist/role-realignment.js"},"./sparse-agreement":{"types":"./dist/sparse-agreement.d.ts","import":"./dist/sparse-agreement.js"},"./collective-decision":{"types":"./dist/collective-decision.d.ts","import":"./dist/collective-decision.js"},"./equivocation-response":{"types":"./dist/equivocation-response.d.ts","import":"./dist/equivocation-response.js"},"./mission-context-fusion":{"types":"./dist/mission-context-fusion.d.ts","import":"./dist/mission-context-fusion.js"},"./partial-view-agreement":{"types":"./dist/partial-view-agreement.d.ts","import":"./dist/partial-view-agreement.js"},"./collusion-aware-context":{"types":"./dist/collusion-aware-context.d.ts","import":"./dist/collusion-aware-context.js"},"./sparse-agreement-runtime":{"types":"./dist/sparse-agreement-runtime.d.ts","import":"./dist/sparse-agreement-runtime.js"}},"license":"Apache-2.0","scripts":{"test":"pnpm run build && node --test tests/*.test.mjs","build":"tsc -p tsconfig.json","clean":"node -e \"require('node:fs').rmSync('dist',{recursive:true,force:true})\"","type-check":"tsc -p tsconfig.json --noEmit"},"version":"1.2.0","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"2eabee75-3813-4510-9c61-12daf61f53f5"}},"homepage":"https://github.com/Agentplat/agentplat#readme","_resolved":"/home/runner/work/agentplat/agentplat/release-artifacts/agentplat-collective-quorum-1.2.0.tgz","_integrity":"sha512-NaFOWtjzRf065tPQa8Ubk0sYPK81iwEEt4Rrefk+nyvSAByPItJsbWr88LM5p+onVnIUnW8fewgR9Bov/WTDMw==","repository":{"url":"git+https://github.com/Agentplat/agentplat.git","type":"git","directory":"packages/collective-quorum"},"_npmVersion":"11.19.0","description":"Signed peer quorum protocols and Agentplat collective runtime adapters.","directories":{},"maintainers":[{"name":"douglas-grishen","email":"douglas@grishen.com"}],"sideEffects":false,"_nodeVersion":"24.20.0","dependencies":{"@agentplat/mesh":"^1.2.0","@agentplat/trust":"^1.2.0","@agentplat/mesh-crypto":"^1.2.0","@agentplat/mesh-protocol":"^1.2.0","@agentplat/inference-control":"^1.2.0","@agentplat/collective-control":"^1.2.0","@agentplat/collective-runtime":"^1.2.0","@agentplat/collective-planning":"^1.2.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/collective-quorum_1.2.0_1790812331164_0.9894477963005262"}}},"time":{"created":"2026-08-17T19:56:57.153Z","modified":"2026-09-30T23:52:11.604Z","0.3.0-beta.4":"2026-08-17T19:56:57.477Z","0.3.0-beta.5":"2026-08-22T04:10:58.334Z","0.3.0-beta.7":"2026-09-09T18:47:05.563Z","0.3.0-beta.8":"2026-09-14T01:25:35.505Z","1.0.0":"2026-09-22T22:33:29.313Z","1.1.0":"2026-09-29T16:32:59.317Z","1.2.0":"2026-09-30T23:52:11.261Z"},"bugs":{"url":"https://github.com/Agentplat/agentplat/issues"},"license":"Apache-2.0","homepage":"https://github.com/Agentplat/agentplat#readme","repository":{"url":"git+https://github.com/Agentplat/agentplat.git","type":"git","directory":"packages/collective-quorum"},"description":"Signed peer quorum protocols and Agentplat collective runtime adapters.","maintainers":[{"name":"douglas-grishen","email":"douglas@grishen.com"}],"readme":"# `@agentplat/collective-quorum`\n\nSigned, provider-neutral peer quorum protocols for `CollectivePeerNodeRuntimeV1`.\nThe package supplies the two production ports that the peer node deliberately\nleaves open:\n\n## Installation (developer preview)\n\nInstall the coordinated preview explicitly:\n\n```sh\nnpm install @agentplat/collective-quorum@next\n```\n\nKeep all `@agentplat/*` packages on the same release version. npm's default\n`latest` tag can point to an older preview. See the\n[release channels](https://github.com/Agentplat/agentplat/blob/main/docs/release-channels.md)\nfor distribution status and version selection.\n\n- assignment confirmation requires a semantic attestation from the owner and\n  a strict majority of configured witnesses over the same acceptance, lease,\n  assignment epoch and fencing token;\n- recovery election uses durable `prepare`/`promise` and `accept`/`accepted`\n  phases. Every acceptor promises and votes atomically, so a restart cannot\n  erase the information that prevents a conflicting decision.\n\nEvery request and response is an Ed25519-signed canonical JSON document bound\nto tenant, mesh, peer, process instance, audience and expiry. The package\nreuses the Mesh key resolver, but has an independent protocol envelope and does\nnot change the closed Mesh wire-version contract.\n\n## Composition\n\nCreate one repository, client and acceptor endpoint per peer. The client is a\nper-operation proposer, not a permanent leader.\n\n```ts\nimport {\n  CollectivePeerQuorumHostV1,\n  CollectiveQuorumHttpTransportV1,\n} from \"@agentplat/collective-quorum\";\n\nconst transport = new CollectiveQuorumHttpTransportV1({\n  endpointForPeer: (peerId) => peerEndpoints.get(peerId),\n});\n\nconst host = CollectivePeerQuorumHostV1.create({\n  client: { scope, signing, resolver, repository, transport, clock },\n  peer: { scope, signing, resolver, repository, clock },\n  createNode: ({ assignmentConfirmation, recoveryElection }) =>\n    new CollectivePeerNodeRuntimeV1({\n      ...nodeOptions,\n      assignmentConfirmation,\n      recoveryElection,\n    }),\n});\n```\n\nExpose `host.quorumPeer` with `handleCollectiveQuorumHttpRequestV1`, or provide\nanother implementation of `CollectiveQuorumTransportV1`. The WHATWG Fetch\nadapter is usable in Node and edge runtimes. Authentication of the transport\nchannel may be added by the host, but it never replaces document signature\nverification.\n\nFor a durable deployment, use\n`PostgresCollectiveQuorumRepositoryV1` from\n`@agentplat/collective-quorum-postgres`. The in-memory repository has identical\natomic semantics but loses promises and votes when the process exits.\n\n## Browser-safe cryptographic helpers\n\n`@agentplat/collective-quorum/crypto` is the browser-safe subpath for canonical\nSHA-256 digests and signed quorum envelopes. It requires the standard Web\nCrypto API (or an injected compatible implementation); it does not import Node\nAPIs. Use it when composing browser, worker, edge, or host runtimes that need\nthe same quorum digest format:\n\n```ts\nimport { collectiveQuorumDigestV1 } from \"@agentplat/collective-quorum/crypto\";\n\nconst digest = await collectiveQuorumDigestV1({ kind: \"mission\", revision: 1 });\n```\n\n## Certified mission context fusion\n\nThe `@agentplat/collective-quorum/mission-context-fusion` entry point turns an\nalready validated Trust fusion/profile/eligibility projection into a bounded,\ncertified planning context. It does not ingest raw evidence and it does not\ngrant execution authority. A missing certificate, stale clock, conflicting\nhead, non-admitted disposition or scope mismatch fails closed.\n\nConstruction requires a trusted monotonic logical clock and a\n`MissionContextFusionScopeBindingPortV1`. The canonical scope adapter accepts\nan application-owned authenticated projection of the current mission intent\nand compares its Trust scope digest; remote input cannot choose that mapping.\nOnly `createCertifiedMissionContextPlanningPortV1` converts an admitted,\nunexpired resolution into a planning observation. The caller supplies only the\nopaque `resolutionDigest`. The adapter reloads and hashes the retained\nresolution, requires it to be the current repository head, reloads the exact\ncollective Trust decision, rechecks every scope/policy/membership/time binding,\nand invokes an application-owned certificate reauthentication port. A digest by\nitself is never treated as certification.\n\n```ts\nimport {\n  MissionContextFusionRuntimeV1,\n  createCanonicalMissionContextFusionScopeBindingPortV1,\n  createCertifiedMissionContextPlanningPortV1,\n} from \"@agentplat/collective-quorum/mission-context-fusion\";\n\nconst scopeBinding = createCanonicalMissionContextFusionScopeBindingPortV1({\n  project: (missionScope) => authenticatedTrustScopeFor(missionScope),\n});\nconst fusion = new MissionContextFusionRuntimeV1({\n  policy,\n  certification,\n  repository,\n  clock,\n  scopeBinding,\n});\nconst planningContext = createCertifiedMissionContextPlanningPortV1({\n  repository,\n  certifiedDecisions,\n  scopeBinding,\n  certification: {\n    reauthenticate: ({ resolution, decision, logicalTimeMs }) =>\n      authenticateCurrentTrustCertificate({\n        resolution,\n        decision,\n        logicalTimeMs,\n      }),\n  },\n});\n\nconst observation = await planningContext.observation({\n  resolutionDigest: certifiedResolution.resolutionDigest,\n  observationId: \"planning.context.1\",\n  observationKind: \"certified-context\",\n  logicalTimeMs: clock.now().logicalTimeMs,\n});\n```\n\n## Byzantine-resilient agreement (opt in)\n\nDeployments whose admitted-validator fault model includes arbitrary or\nmalicious behavior can use the separate\n`@agentplat/collective-quorum/agreement` entry point. It adds `3f + 1`\nmembership bindings, `2f + 1` prevote/precommit certificates, durable locks,\nequivocation evidence, joint reconfiguration and certified catch-up. Importing\nor using the root entry point does not enable or alter this protocol.\n\nSee\n[Byzantine-resilient collective agreement V1](../../docs/agent-mesh/byzantine-resilient-collective-agreement-v1.md)\nfor integration and operations guidance.\n\nThe `@agentplat/collective-quorum/role-realignment` entry point maps a\ncontent-free role selection to the same agreement protocol. Its certificate\nbinds membership epoch and configuration, and only Trust-eligible precommit\nsigners count as role-certification witnesses. Agreement never transports role\ninstructions or grants action authority. See [Adaptive Role Realignment\nV1](../../docs/inference-control/adaptive-role-realignment-v1.md).\n\nThe `@agentplat/collective-quorum/collective-decision` entry point adapts a\ncryptographically verified agreement commit to the generic certified-decision\nport in `@agentplat/collective-runtime`. It requires an exact current membership\nmatch, derives the decision slot from scope, kind and epoch, and retains the\nagreement certificate digest plus sorted precommit attesters. The adapter never\nloads the external decision payload and does not grant effect authority. Its\nrequired agreement repository re-resolves the exact persisted commit whenever a\ndecision is committed or restored, so a caller-supplied proof digest cannot\nbypass cryptographic verification.\n\n## Collective trust consensus (opt in)\n\n`@agentplat/collective-quorum/trust-consensus` certifies one scoped Trust\ndecision through the Byzantine agreement protocol. A candidate binds exact\nsubject, scope, policy, profile, fusion input, local eligibility, predecessor\nand validity digests. It contains no evidence content, prompts, instructions or\naction parameters.\n\nEvery validator resolves the candidate against its own trusted local state\nbefore voting. A successful commit is projected into a\n`CertifiedCollectiveTrustDecisionV1` bound to the exact membership epoch,\nconfiguration and sorted precommit witnesses. Agreement proves that a quorum\naccepted the same bounded projection; it does not prove universal truth.\n\n```ts\nimport {\n  InMemoryCollectiveTrustDecisionRepositoryV1,\n  createCollectiveTrustAgreementSemanticPortV1,\n  createCollectiveTrustCandidateV1,\n  createCollectiveTrustCertificationPortV1,\n} from \"@agentplat/collective-quorum/trust-consensus\";\n\nconst decisions = new InMemoryCollectiveTrustDecisionRepositoryV1();\nconst candidate = await createCollectiveTrustCandidateV1({\n  tenantId,\n  profile,\n  fusionDecision,\n  eligibilityDecision,\n  previousCertifiedDecisionDigest: null,\n  validUntilLogicalMs,\n});\n\nconst semantics = createCollectiveTrustAgreementSemanticPortV1({\n  policyDomainId,\n  heads: decisions,\n  candidates: {\n    validate: ({ candidate }) => localCandidateResolver.validate(candidate),\n  },\n  fallback: otherAgreementSemantics,\n});\n\nconst certification = createCollectiveTrustCertificationPortV1({\n  policyDomainId,\n  agreement,\n  membership,\n  coordinates,\n  repository: decisions,\n  resolver: keyResolver,\n  clock,\n});\n\nconst certified = await certification.certify({\n  candidate,\n  logicalTimeMs,\n});\n```\n\nEach independently hosted validator installs `semantics` and calls\n`applyCollectiveTrustCommitV1` for observed commits. The latter verifies the\ncomplete certificate and reconstructs the same derived head after restart.\n\nExisting eligibility consumers can be wrapped without changing their input or\nreturn type:\n\n```ts\nimport { createCollectiveTrustEligibilityFilterV1 } from \"@agentplat/collective-quorum/trust-consensus\";\n\nconst filteredEligibility = createCollectiveTrustEligibilityFilterV1({\n  tenantId: (request) => request.tenantId,\n  logicalTimeMs: (request) => request.logicalTimeMs,\n  local: existingEligibilityPort,\n  collective: currentCertifiedDecisionResolver,\n  policy: { schemaVersion: 1, requireCertificate: true },\n});\n```\n\nThe filter returns the original local decision only when both boundaries admit\nit. A collective decision may restrict or quarantine but can never promote a\nlocally unavailable, restricted or quarantined subject. A\n`recovery_candidate` remains restricted until a separate local recovery policy\nsucceeds.\n\nMesh allocation and Inference Control perform their last eligibility lookup\nsynchronously. Use `createCollectiveTrustMeshEligibilityResolverV1` and\n`createCollectiveTrustInferenceEligibilityResolverV1` with a locally refreshed\ncache of verified gate decisions. Neither adapter performs I/O in the final\nselection or pre-delegation checkpoint, and both preserve a stricter local\nresult.\n\nSee the [implementation\nplan](../../docs/trust/collective-trust-consensus-v1-implementation-plan.md),\n[acceptance\nchecklist](../../docs/trust/collective-trust-consensus-v1-acceptance-checklist.md),\n[architecture decision](../../docs/adr/0018-collective-trust-consensus.md) and\n[threat model](../../docs/security/collective-trust-consensus-threat-model.md).\n\nRun the complete four-validator reference path locally with:\n\n```sh\npnpm example:collective-trust-consensus\n```\n\n## Sparse agreement runtime and partial views\n\nThe `./sparse-agreement-runtime` entry point provides a durable round/view\nengine for prepare, commit, reconciliation, timeout-driven view change,\nequivocation evidence and certificate assembly. `SparseFinalityAssemblyRuntimeV1`\ncombines independently certified shards only when their coordinates and\nreconciliation root agree.\n\nThe `./partial-view-agreement` entry point derives a deterministic committee\nfrom bounded validator claims rather than enumerating global membership. It\nlimits candidates and validators per independence group, seals a local snapshot\nand requires an independent witness quorum before exposing agreement\nmembership. The resulting certificate proves convergence on that bounded\nsnapshot; it does not claim complete network knowledge.\n\nThe `./webcrypto-ports` entry point supplies Ed25519 multi-signature, validator\nclaim and witness adapters. Durable round and partial-view state is available\nfrom `@agentplat/collective-quorum-postgres`.\n\nAuthenticated equivocation evidence can be verified independently and routed\nthrough `./equivocation-response`. The response bridge records a scope-local\ncredibility violation and returns an actionable agreement eligibility\ndecision. It does not create a global reputation score, and an accusation\nwithout two valid conflicting signatures is rejected.\n\n## Safety and availability\n\n- Witness thresholds must be strict majorities. Duplicate witnesses, owners or\n  assignees in the witness set are rejected.\n- An acceptor signs at most one value for a ballot and never accepts a ballot\n  below its durable promise.\n- A new proposer carries forward the value with the highest previously\n  accepted ballot returned by its promise quorum.\n- Assignment attestations are non-equivocating per lease version.\n- Invalid signatures, wrong audiences, expired envelopes, missing semantic\n  evidence and minority partitions fail closed.\n- When the optional readiness port is configured, an acceptor refuses\n  assignment attestations, recovery promises, and recovery acceptances until\n  its local causal frontier has a current membership-bound catch-up\n  certificate.\n- Independent peers may assemble different proof sets for the same selected\n  value. The node treats those certificates as semantically equivalent while\n  each port validates its own threshold evidence.\n\nThe root protocol tolerates crashes, restarts, message loss, reordering and\nminority partitions under an authenticated non-Byzantine acceptor model. It is\nnot itself a Byzantine-fault-tolerant consensus protocol; use the opt-in\nagreement entry point for that fault model. Neither protocol discovers peer\nendpoints or makes external actions exactly once. Certified dynamic\nmembership and overlapping key rotation are available through the optional\nmembership port implemented by `@agentplat/collective-membership`.\n\nSee [Distributed Peer Quorum V1](../../docs/agent-mesh/distributed-peer-quorum-v1.md)\nfor the state machines and operational invariants.\n","readmeFilename":"README.md"}