{"_id":"@buildtovalue/soundness","_rev":"2-3e916dd50e8e7cecd01f800f3f79f688","name":"@buildtovalue/soundness","dist-tags":{"latest":"1.0.2-next.0"},"versions":{"1.0.1":{"name":"@buildtovalue/soundness","version":"1.0.1","keywords":["bpmn","soundness","deadlock","verification","process-analysis"],"license":"Apache-2.0","_id":"@buildtovalue/soundness@1.0.1","maintainers":[{"name":"danzeroum","email":"danzeroum@gmail.com"}],"homepage":"https://github.com/danzeroum/bpmn#readme","bugs":{"url":"https://github.com/danzeroum/bpmn/issues"},"dist":{"shasum":"43f08d195ed63b278b3651ae5c80a55ae212a9df","tarball":"https://registry.npmjs.org/@buildtovalue/soundness/-/soundness-1.0.1.tgz","fileCount":28,"integrity":"sha512-TKgXNqkgR3xd39KGMM1tm7a0zO2qgdOsewM10a1gEAJzk7G5Z3u8ViDdnQ28gkTtwf6npFQD1wqlD38CnBJYJg==","signatures":[{"sig":"MEUCIFBOmEgHahku1yPCvW+tMEf93alhCt2NscjMCYRPHXKcAiEAsmwCNjIaH/ox3sGUOsAFKjR8v8M8Cdzz4eBe4mPEtx8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":115882},"main":"./dist/cjs/index.js","type":"module","_from":"file:buildtovalue-soundness-1.0.1.tgz","types":"./dist/esm/index.d.ts","module":"./dist/esm/index.js","engines":{"node":">=20"},"exports":{".":{"types":"./dist/esm/index.d.ts","import":"./dist/esm/index.js","require":"./dist/cjs/index.js"}},"scripts":{"build":"tsc -p tsconfig.build.json && tsc -p tsconfig.cjs.json && node ../../scripts/write-cjs-package.mjs dist/cjs","typecheck":"tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"danzeroum","email":"danzeroum@gmail.com"},"_resolved":"C:\\Users\\danni\\AppData\\Local\\Temp\\a2e3db648fdea06360a099879e7dafdf\\buildtovalue-soundness-1.0.1.tgz","_integrity":"sha512-TKgXNqkgR3xd39KGMM1tm7a0zO2qgdOsewM10a1gEAJzk7G5Z3u8ViDdnQ28gkTtwf6npFQD1wqlD38CnBJYJg==","repository":{"url":"git+https://github.com/danzeroum/bpmn.git","type":"git","directory":"packages/soundness"},"_npmVersion":"10.9.3","description":"Structural soundness analysis for bpmn-react: deadlock/livelock/dead-branch detection over the process graph (O(V+E), no state-space search), delivered as plugin-compatible validation rules. Zero runtime dependencies.","directories":{},"sideEffects":false,"_nodeVersion":"22.20.0","dependencies":{"@buildtovalue/core":"1.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/soundness_1.0.1_1784345287797_0.7496226018553345","host":"s3://npm-registry-packages-npm-production"}},"1.0.2-next.0":{"name":"@buildtovalue/soundness","version":"1.0.2-next.0","description":"Structural soundness analysis for bpmn-react: deadlock/livelock/dead-branch detection over the process graph (O(V+E), no state-space search), delivered as plugin-compatible validation rules. Zero runtime dependencies.","license":"Apache-2.0","type":"module","sideEffects":false,"engines":{"node":">=20"},"main":"./dist/cjs/index.js","module":"./dist/esm/index.js","types":"./dist/esm/index.d.ts","exports":{".":{"types":"./dist/esm/index.d.ts","import":"./dist/esm/index.js","require":"./dist/cjs/index.js"}},"dependencies":{"@buildtovalue/core":"1.2.0-next.0"},"keywords":["bpmn","soundness","deadlock","verification","process-analysis"],"repository":{"type":"git","url":"git+https://github.com/danzeroum/bpmn.git","directory":"packages/soundness"},"publishConfig":{"access":"public"},"scripts":{"build":"tsc -p tsconfig.build.json && tsc -p tsconfig.cjs.json && node ../../scripts/write-cjs-package.mjs dist/cjs","typecheck":"tsc -p tsconfig.json --noEmit"},"_id":"@buildtovalue/soundness@1.0.2-next.0","bugs":{"url":"https://github.com/danzeroum/bpmn/issues"},"homepage":"https://github.com/danzeroum/bpmn#readme","_integrity":"sha512-NPOeWjHUvMjcoUXE/GzZOXoD8PWUXMNmXfXR9MtRCAwpplDYqJMilmToNWZWTi94Uj79aI1uqiCXYocvs7BqJQ==","_resolved":"/tmp/c3b75e059b9a1b403a7d3509591310fb/buildtovalue-soundness-1.0.2-next.0.tgz","_from":"file:buildtovalue-soundness-1.0.2-next.0.tgz","_nodeVersion":"22.23.1","_npmVersion":"10.9.8","dist":{"integrity":"sha512-NPOeWjHUvMjcoUXE/GzZOXoD8PWUXMNmXfXR9MtRCAwpplDYqJMilmToNWZWTi94Uj79aI1uqiCXYocvs7BqJQ==","shasum":"b880914d897ff13fd05d5022eeee010aa75095ec","tarball":"https://registry.npmjs.org/@buildtovalue/soundness/-/soundness-1.0.2-next.0.tgz","fileCount":28,"unpackedSize":115657,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIFxAGYBip+4CX+F7xzL5JU1PJmhX2+hX8dQtQ24smdJpAiEA8BQjzO4ypSHgdioYXtSoQ/KgdHFu/VLXfO47lgPI1/g="}]},"_npmUser":{"name":"danzeroum","email":"danzeroum@gmail.com"},"directories":{},"maintainers":[{"name":"danzeroum","email":"danzeroum@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/soundness_1.0.2-next.0_1784725566925_0.41371749218864196"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-18T03:28:07.706Z","modified":"2026-07-22T13:06:07.277Z","1.0.1":"2026-07-18T03:28:07.961Z","1.0.2-next.0":"2026-07-22T13:06:07.090Z"},"bugs":{"url":"https://github.com/danzeroum/bpmn/issues"},"license":"Apache-2.0","homepage":"https://github.com/danzeroum/bpmn#readme","keywords":["bpmn","soundness","deadlock","verification","process-analysis"],"repository":{"type":"git","url":"git+https://github.com/danzeroum/bpmn.git","directory":"packages/soundness"},"description":"Structural soundness analysis for bpmn-react: deadlock/livelock/dead-branch detection over the process graph (O(V+E), no state-space search), delivered as plugin-compatible validation rules. Zero runtime dependencies.","maintainers":[{"name":"danzeroum","email":"danzeroum@gmail.com"}],"readme":"# @buildtovalue/soundness\n\nStructural soundness analysis for BPMN diagrams: deadlock, livelock and\ndead-branch detection over the process graph — **O(V+E) per rule, never\nstate-space search** — delivered in the plugin `validationRules` format so\nthe react editor and the CLI consume it with zero new integration code.\nZero runtime dependencies.\n\n```ts\nimport { soundnessRules, analyzeSoundness } from '@buildtovalue/soundness';\n\n// As an editor plugin (errors surface in Validate and block promotion in C2):\nconst plugin = { id: 'soundness', validationRules: soundnessRules() };\n\n// Headless:\nconst issues = analyzeSoundness(diagram, { locale: 'pt' });\n```\n\n## Rules\n\n| Code | Severity | Detects |\n|---|---|---|\n| `SND_DEADLOCK_JOIN` | error | AND-join fed by an XOR-split (never synchronizes) |\n| `SND_UNMATCHED_SPLIT` | warning | split without a same-type join downstream |\n| `SND_NO_PATH_TO_END` | error | node with no path to any end event |\n| `SND_INFINITE_LOOP` | warning | cycle with no exit edge (structural livelock) |\n| `SND_DEAD_BRANCH` | warning | gateway branch unreachable from the start |\n| `SND_BOUNDARY_NO_OUTFLOW` | error | boundary event without outgoing flow |\n| `SND_EVENT_GW_TARGETS` | error | event gateway targeting a non-catch element |\n| `SND_LANE_NO_ACTOR` | info | empty swimlane |\n| `SND_IMPLICIT_MERGE` | info | 2+ incoming flows without a gateway |\n\nEvery rule traverses the sub-process hierarchy (F7): each scope — the top\nprocess level and each `subProcess` — is analyzed as its own subgraph, with\nboundary events attached to their host's scope.\n\nTune without forking: `soundnessRules({ severityOverrides, disabled, locale })`.\n","readmeFilename":"README.md"}