{"_id":"@bsuite/workflow-canvas","_rev":"14-626da35e1a53fdb8e45ca12cb07515d6","name":"@bsuite/workflow-canvas","dist-tags":{"latest":"0.3.3","next":"0.3.3-next.1"},"versions":{"0.2.0":{"name":"@bsuite/workflow-canvas","version":"0.2.0","license":"UNLICENSED","_id":"@bsuite/workflow-canvas@0.2.0","maintainers":[{"name":"garyocean428","email":"braden.lang77@gmail.com"}],"homepage":"https://github.com/GaryOcean428/bsuite#readme","bugs":{"url":"https://github.com/GaryOcean428/bsuite/issues"},"dist":{"shasum":"2c9d9782126153014e33ee11e67512e7b7ca5da0","tarball":"https://registry.npmjs.org/@bsuite/workflow-canvas/-/workflow-canvas-0.2.0.tgz","fileCount":80,"integrity":"sha512-90+2jCEZVdJnQLl69151I3cNAm+JVmhHGl0UdCz7TMT+bUDA+dMjSJIFel1DGxL7sAiwSXv97Lv7vE6PxGBsqg==","signatures":[{"sig":"MEYCIQC46vbr2TyWSzsnz6SciyMntxRrJwvhPQJqgVgkkjbXUAIhALI0IVl9my0cxoFufxyhV9QFGiNfyYgHqFo7rQ1Y9fto","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":243966},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./hooks":{"types":"./dist/hooks/index.d.ts","import":"./dist/hooks/index.js"},"./nodes":{"types":"./dist/nodes/index.d.ts","import":"./dist/nodes/index.js"},"./utils":{"types":"./dist/utils/index.d.ts","import":"./dist/utils/index.js"},"./schemas":{"types":"./dist/schemas.d.ts","import":"./dist/schemas.js"},"./components":{"types":"./dist/components/index.d.ts","import":"./dist/components/index.js"}},"gitHead":"a4742aa00fb31d78ad022f3e811f770b4801d5fb","scripts":{"test":"vitest run","build":"tsc -p tsconfig.build.json","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"pnpm build"},"_npmUser":{"name":"garyocean428","email":"braden.lang77@gmail.com"},"repository":{"url":"git+https://github.com/GaryOcean428/bsuite.git","type":"git","directory":"packages/workflow-canvas"},"_npmVersion":"11.7.0","description":"Process-shaped xyflow canvas for BSuite: a generic node-type registry (step / decision / terminator / handoff), swimlanes as xyflow parent nodes, LOOP-PERMISSIVE connection validation, and a controller + RPC-backed service persisting xyflow's native {node","directories":{},"sideEffects":["**/*.css","./dist/components/WorkflowCanvas.js"],"_nodeVersion":"25.2.1","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.3","devDependencies":{"zod":"^4.5.4","vite":"^8.2.2","jsdom":"^30.0.1","react":"^19.2.8","vitest":"^4.1.11","react-dom":"^19.2.8","typescript":"^6.0.3","@types/node":"^26.4.0","@types/react":"^19.2.18","lucide-react":"^1.37.0","@xyflow/react":"^12.11.5","@types/react-dom":"^19.2.5","@vitejs/plugin-react":"^6.1.1","@supabase/supabase-js":"^2.112.4","@tanstack/react-query":"^5.102.8","@bsuite/schema-builder":"workspace:^","@testing-library/react":"^16.3.3","@testing-library/jest-dom":"^7.0.1"},"peerDependencies":{"zod":"^4","react":">=18 <21","react-dom":">=18 <21","lucide-react":">=0.400.0","@xyflow/react":"^12","@supabase/supabase-js":"^2","@tanstack/react-query":"^5","@bsuite/schema-builder":">=1.9.0 <2"},"_npmOperationalInternal":{"tmp":"tmp/workflow-canvas_0.2.0_1788312984690_0.5782878169699497","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@bsuite/workflow-canvas","version":"0.2.1","license":"UNLICENSED","_id":"@bsuite/workflow-canvas@0.2.1","maintainers":[{"name":"garyocean428","email":"braden.lang77@gmail.com"}],"homepage":"https://github.com/GaryOcean428/bsuite#readme","bugs":{"url":"https://github.com/GaryOcean428/bsuite/issues"},"dist":{"shasum":"6ce397afee975eee0c94ee7fe1d0251772ec2a47","tarball":"https://registry.npmjs.org/@bsuite/workflow-canvas/-/workflow-canvas-0.2.1.tgz","fileCount":80,"integrity":"sha512-9g7jTTCwtlA0EoQFKifVi/AsojxgBFFH4ZkiOS4DykbuOr0Rhp85OZ0N+wVkyJQzZ+/YGmRFSwe4Djm/+5RedQ==","signatures":[{"sig":"MEUCIHu1/pq/C+SQNke/NockHO6fBuPFeKAHnuCyIEanvc3JAiEA8Tk5/XVcB29NkY4fBcwz0cFXnWJQvmr5FdZz7Ykazng=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":245967},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./hooks":{"types":"./dist/hooks/index.d.ts","import":"./dist/hooks/index.js"},"./nodes":{"types":"./dist/nodes/index.d.ts","import":"./dist/nodes/index.js"},"./utils":{"types":"./dist/utils/index.d.ts","import":"./dist/utils/index.js"},"./schemas":{"types":"./dist/schemas.d.ts","import":"./dist/schemas.js"},"./components":{"types":"./dist/components/index.d.ts","import":"./dist/components/index.js"}},"gitHead":"8dabdfc3aa768c3cc318dedafc45f526b740f0a3","scripts":{"test":"vitest run","build":"tsc -p tsconfig.build.json","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"pnpm build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:54778f50-174c-44b5-9238-4e943cf89f33"}},"repository":{"url":"git+https://github.com/GaryOcean428/bsuite.git","type":"git","directory":"packages/workflow-canvas"},"_npmVersion":"11.9.0","description":"Process-shaped xyflow canvas for BSuite: a generic node-type registry (step / decision / terminator / handoff), swimlanes as xyflow parent nodes, LOOP-PERMISSIVE connection validation, and a controller + RPC-backed service persisting xyflow's native {node","directories":{},"sideEffects":["**/*.css","./dist/components/WorkflowCanvas.js"],"_nodeVersion":"24.14.0","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.3","devDependencies":{"zod":"^4.5.4","vite":"^8.2.2","jsdom":"^30.0.1","react":"^19.2.8","vitest":"^4.1.11","react-dom":"^19.2.8","typescript":"^6.0.3","@types/node":"^26.4.0","@types/react":"^19.2.18","lucide-react":"^1.37.0","@xyflow/react":"^12.11.5","@types/react-dom":"^19.2.5","@vitejs/plugin-react":"^6.1.1","@supabase/supabase-js":"^2.112.4","@tanstack/react-query":"^5.102.8","@bsuite/schema-builder":"workspace:^","@testing-library/react":"^16.3.3","@testing-library/jest-dom":"^7.0.1"},"peerDependencies":{"zod":"^4","react":">=18 <21","react-dom":">=18 <21","lucide-react":">=0.400.0","@xyflow/react":"^12","@supabase/supabase-js":"^2","@tanstack/react-query":"^5","@bsuite/schema-builder":">=1.9.0 <2"},"_npmOperationalInternal":{"tmp":"tmp/workflow-canvas_0.2.1_1788325591742_0.2807545952209949","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"name":"@bsuite/workflow-canvas","version":"0.2.2","license":"UNLICENSED","_id":"@bsuite/workflow-canvas@0.2.2","maintainers":[{"name":"garyocean428","email":"braden.lang77@gmail.com"}],"homepage":"https://github.com/GaryOcean428/bsuite#readme","bugs":{"url":"https://github.com/GaryOcean428/bsuite/issues"},"dist":{"shasum":"71b9d1d14548cdcf54605830b79001357dae4f76","tarball":"https://registry.npmjs.org/@bsuite/workflow-canvas/-/workflow-canvas-0.2.2.tgz","fileCount":80,"integrity":"sha512-2pGfb9IxoZt5XUlvpB04sh4y3d9TbDqmidcXbtQn2UC7ZQc5Zu3c+X1WPvniQjzqDcLr56X3ghKBdFLcpQH/bA==","signatures":[{"sig":"MEYCIQChjQcVtbrLcj7trIzvdSYZb75fINjRbFKGyW9w2n9AKwIhAKffmybs+FmRPN3OSjzwid6Np3FbFkGakII7zWRCIj2W","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":247887},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./hooks":{"types":"./dist/hooks/index.d.ts","import":"./dist/hooks/index.js"},"./nodes":{"types":"./dist/nodes/index.d.ts","import":"./dist/nodes/index.js"},"./utils":{"types":"./dist/utils/index.d.ts","import":"./dist/utils/index.js"},"./schemas":{"types":"./dist/schemas.d.ts","import":"./dist/schemas.js"},"./components":{"types":"./dist/components/index.d.ts","import":"./dist/components/index.js"}},"gitHead":"1db6ca980ee447f41d4b4a25839cc18e0ad37df4","scripts":{"test":"vitest run","build":"tsc -p tsconfig.build.json","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"pnpm build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:54778f50-174c-44b5-9238-4e943cf89f33"}},"repository":{"url":"git+https://github.com/GaryOcean428/bsuite.git","type":"git","directory":"packages/workflow-canvas"},"_npmVersion":"11.9.0","description":"Process-shaped xyflow canvas for BSuite: a generic node-type registry (step / decision / terminator / handoff), swimlanes as xyflow parent nodes, LOOP-PERMISSIVE connection validation, and a controller + RPC-backed service persisting xyflow's native {node","directories":{},"sideEffects":["**/*.css","./dist/components/WorkflowCanvas.js"],"_nodeVersion":"24.14.0","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.3","devDependencies":{"zod":"^4.5.4","vite":"^8.2.2","jsdom":"^30.0.1","react":"^19.2.8","vitest":"^4.1.11","react-dom":"^19.2.8","typescript":"^6.0.3","@types/node":"^26.4.0","@types/react":"^19.2.18","lucide-react":"^1.37.0","@xyflow/react":"^12.11.5","@types/react-dom":"^19.2.5","@vitejs/plugin-react":"^6.1.1","@supabase/supabase-js":"^2.112.4","@tanstack/react-query":"^5.102.8","@bsuite/schema-builder":"workspace:^","@testing-library/react":"^16.3.3","@testing-library/jest-dom":"^7.0.1"},"peerDependencies":{"zod":"^4","react":">=18 <21","react-dom":">=18 <21","lucide-react":">=0.400.0","@xyflow/react":"^12","@supabase/supabase-js":"^2","@tanstack/react-query":"^5","@bsuite/schema-builder":">=1.9.0 <2"},"_npmOperationalInternal":{"tmp":"tmp/workflow-canvas_0.2.2_1788337310435_0.870182561332987","host":"s3://npm-registry-packages-npm-production"}},"0.2.3":{"name":"@bsuite/workflow-canvas","version":"0.2.3","license":"UNLICENSED","_id":"@bsuite/workflow-canvas@0.2.3","maintainers":[{"name":"garyocean428","email":"braden.lang77@gmail.com"}],"homepage":"https://github.com/GaryOcean428/bsuite#readme","bugs":{"url":"https://github.com/GaryOcean428/bsuite/issues"},"dist":{"shasum":"6b98beed97c3bf5e8c90daac8a10089ff6921ff6","tarball":"https://registry.npmjs.org/@bsuite/workflow-canvas/-/workflow-canvas-0.2.3.tgz","fileCount":80,"integrity":"sha512-Y80R4vvJiooQ+HgtjZAj8ocNrpishywJRzRlVxi0wfRCdfTb5dVCKbvFdsexY8pZUZL9pn2eorfsKGq8h3QP4Q==","signatures":[{"sig":"MEYCIQCCq5suRJwBR1G6Zu9CgLJ+MTWuATJDGb05yYJhgruhpAIhALJftUWHM38F7moYBESpqhOd5RLIFp5TDVK/AMqa+6Ci","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":247923},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./hooks":{"types":"./dist/hooks/index.d.ts","import":"./dist/hooks/index.js"},"./nodes":{"types":"./dist/nodes/index.d.ts","import":"./dist/nodes/index.js"},"./utils":{"types":"./dist/utils/index.d.ts","import":"./dist/utils/index.js"},"./schemas":{"types":"./dist/schemas.d.ts","import":"./dist/schemas.js"},"./components":{"types":"./dist/components/index.d.ts","import":"./dist/components/index.js"}},"gitHead":"714b91f912115d8a015ab0fa840bb7dc3afec145","scripts":{"test":"vitest run","build":"tsc -p tsconfig.build.json","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"pnpm build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:54778f50-174c-44b5-9238-4e943cf89f33"}},"repository":{"url":"git+https://github.com/GaryOcean428/bsuite.git","type":"git","directory":"packages/workflow-canvas"},"_npmVersion":"11.9.0","description":"Process-shaped xyflow canvas for BSuite: a generic node-type registry (step / decision / terminator / handoff), swimlanes as xyflow parent nodes, LOOP-PERMISSIVE connection validation, and a controller + RPC-backed service persisting xyflow's native {node","directories":{},"sideEffects":["**/*.css","./dist/components/WorkflowCanvas.js"],"_nodeVersion":"24.14.0","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.3","devDependencies":{"zod":"^4.5.4","vite":"^8.2.2","jsdom":"^30.0.1","react":"^19.2.8","vitest":"^4.1.11","react-dom":"^19.2.8","typescript":"^6.0.3","@types/node":"^26.4.0","@types/react":"^19.2.18","lucide-react":"^1.37.0","@xyflow/react":"^12.11.5","@types/react-dom":"^19.2.5","@vitejs/plugin-react":"^6.1.1","@supabase/supabase-js":"^2.112.4","@tanstack/react-query":"^5.102.8","@bsuite/schema-builder":"workspace:^","@testing-library/react":"^16.3.3","@testing-library/jest-dom":"^7.0.1"},"peerDependencies":{"zod":"^4","react":">=18 <21","react-dom":">=18 <21","lucide-react":">=0.400.0","@xyflow/react":"^12","@supabase/supabase-js":"^2","@tanstack/react-query":"^5","@bsuite/schema-builder":">=1.9.0 <2"},"_npmOperationalInternal":{"tmp":"tmp/workflow-canvas_0.2.3_1788473323443_0.5886552123713558","host":"s3://npm-registry-packages-npm-production"}},"0.3.0-rc.1":{"name":"@bsuite/workflow-canvas","version":"0.3.0-rc.1","license":"UNLICENSED","_id":"@bsuite/workflow-canvas@0.3.0-rc.1","maintainers":[{"name":"garyocean428","email":"braden.lang77@gmail.com"}],"homepage":"https://github.com/GaryOcean428/bsuite#readme","bugs":{"url":"https://github.com/GaryOcean428/bsuite/issues"},"dist":{"shasum":"a153a803a2b11d702e3b9d5f586e1be39208c0ac","tarball":"https://registry.npmjs.org/@bsuite/workflow-canvas/-/workflow-canvas-0.3.0-rc.1.tgz","fileCount":83,"integrity":"sha512-umczHmdHws2TnM+EAFJ0HNVXcD+PWIFuK8lfjNUAtsDOjY8QvhnQFZQh86e4jiTOb705QXoSMYwy+srJf1C2Mw==","signatures":[{"sig":"MEUCIQDSNhv+D9z3AP0gmHVK1D5NGQBJnu/wLgPEUObnPFjjeQIgM/gnOHLoaKXFGXlqoHHDjXh9w6sYrHg4gMkR6aObUO0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":268696},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./hooks":{"types":"./dist/hooks/index.d.ts","import":"./dist/hooks/index.js"},"./nodes":{"types":"./dist/nodes/index.d.ts","import":"./dist/nodes/index.js"},"./utils":{"types":"./dist/utils/index.d.ts","import":"./dist/utils/index.js"},"./schemas":{"types":"./dist/schemas.d.ts","import":"./dist/schemas.js"},"./components":{"types":"./dist/components/index.d.ts","import":"./dist/components/index.js"}},"gitHead":"e75878973dd712af648c3a3f04eadc96aca04509","scripts":{"test":"vitest run","build":"tsc -p tsconfig.build.json","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"pnpm build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:54778f50-174c-44b5-9238-4e943cf89f33"}},"repository":{"url":"git+https://github.com/GaryOcean428/bsuite.git","type":"git","directory":"packages/workflow-canvas"},"_npmVersion":"11.9.0","description":"Process-shaped xyflow canvas for BSuite: a generic node-type registry (step / decision / terminator / handoff), swimlanes as xyflow parent nodes, LOOP-PERMISSIVE connection validation, and a controller + RPC-backed service persisting xyflow's native {node","directories":{},"sideEffects":["**/*.css","./dist/components/WorkflowCanvas.js"],"_nodeVersion":"24.14.0","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.3","readmeFilename":"README.md","devDependencies":{"zod":"^4.5.4","vite":"^8.2.2","jsdom":"^30.0.1","react":"^19.2.8","vitest":"^4.1.11","react-dom":"^19.2.8","typescript":"^6.0.3","@types/node":"^26.4.0","@types/react":"^19.2.18","lucide-react":"^1.37.0","@xyflow/react":"^12.11.5","@types/react-dom":"^19.2.5","@vitejs/plugin-react":"^6.1.1","@supabase/supabase-js":"^2.112.4","@tanstack/react-query":"^5.102.8","@bsuite/schema-builder":"workspace:^","@testing-library/react":"^16.3.3","@testing-library/jest-dom":"^7.0.1"},"peerDependencies":{"zod":"^4","react":">=18 <21","react-dom":">=18 <21","lucide-react":">=0.400.0","@xyflow/react":"^12","@supabase/supabase-js":"^2","@tanstack/react-query":"^5","@bsuite/schema-builder":">=1.9.0 <2"},"_npmOperationalInternal":{"tmp":"tmp/workflow-canvas_0.3.0-rc.1_1788930646280_0.7966283490744848","host":"s3://npm-registry-packages-npm-production"}},"0.3.0-rc.2":{"name":"@bsuite/workflow-canvas","version":"0.3.0-rc.2","license":"UNLICENSED","_id":"@bsuite/workflow-canvas@0.3.0-rc.2","maintainers":[{"name":"garyocean428","email":"braden.lang77@gmail.com"}],"homepage":"https://github.com/GaryOcean428/bsuite#readme","bugs":{"url":"https://github.com/GaryOcean428/bsuite/issues"},"dist":{"shasum":"db3b8bd61e8f9d0a11f00559de827f58937ffd9c","tarball":"https://registry.npmjs.org/@bsuite/workflow-canvas/-/workflow-canvas-0.3.0-rc.2.tgz","fileCount":83,"integrity":"sha512-135wzCaYBYpURquAoz+XgtGqIN/tLNUt8c02E9nnJgujcnA5y4jlDcyWHZz4PE2urHx5LR8cQVlJqj3wQRpGHQ==","signatures":[{"sig":"MEYCIQD5466ZuM66E6LZ/aT/jiXfWBrB3hytUA9IOAJStwmxcAIhAJlocj7uVAMM4ASzeYN+4MiQdtcF4VF5l2NMDQe1Ui09","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":279583},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./hooks":{"types":"./dist/hooks/index.d.ts","import":"./dist/hooks/index.js"},"./nodes":{"types":"./dist/nodes/index.d.ts","import":"./dist/nodes/index.js"},"./utils":{"types":"./dist/utils/index.d.ts","import":"./dist/utils/index.js"},"./schemas":{"types":"./dist/schemas.d.ts","import":"./dist/schemas.js"},"./components":{"types":"./dist/components/index.d.ts","import":"./dist/components/index.js"}},"gitHead":"7b7aed44aa51cadf0233f64152230a74fa741d09","scripts":{"test":"vitest run","build":"tsc -p tsconfig.build.json","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"pnpm build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:54778f50-174c-44b5-9238-4e943cf89f33"}},"repository":{"url":"git+https://github.com/GaryOcean428/bsuite.git","type":"git","directory":"packages/workflow-canvas"},"_npmVersion":"11.9.0","description":"Process-shaped xyflow canvas for BSuite: a generic node-type registry (step / decision / terminator / handoff), swimlanes as xyflow parent nodes, LOOP-PERMISSIVE connection validation, and a controller + RPC-backed service persisting xyflow's native {node","directories":{},"sideEffects":["**/*.css","./dist/components/WorkflowCanvas.js"],"_nodeVersion":"24.14.0","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.3","readmeFilename":"README.md","devDependencies":{"zod":"^4.5.4","vite":"^8.2.2","jsdom":"^30.0.1","react":"^19.2.8","vitest":"^4.1.11","react-dom":"^19.2.8","typescript":"^6.0.3","@types/node":"^26.4.0","@types/react":"^19.2.18","lucide-react":"^1.37.0","@xyflow/react":"^12.11.5","@types/react-dom":"^19.2.5","@vitejs/plugin-react":"^6.1.1","@supabase/supabase-js":"^2.112.4","@tanstack/react-query":"^5.102.8","@bsuite/schema-builder":"workspace:^","@testing-library/react":"^16.3.3","@testing-library/jest-dom":"^7.0.1"},"peerDependencies":{"zod":"^4","react":">=18 <21","react-dom":">=18 <21","lucide-react":">=0.400.0","@xyflow/react":"^12","@supabase/supabase-js":"^2","@tanstack/react-query":"^5","@bsuite/schema-builder":">=1.9.0 <2"},"_npmOperationalInternal":{"tmp":"tmp/workflow-canvas_0.3.0-rc.2_1788936247142_0.39496080841160053","host":"s3://npm-registry-packages-npm-production"}},"0.3.0-rc.3":{"name":"@bsuite/workflow-canvas","version":"0.3.0-rc.3","license":"UNLICENSED","_id":"@bsuite/workflow-canvas@0.3.0-rc.3","maintainers":[{"name":"garyocean428","email":"braden.lang77@gmail.com"}],"homepage":"https://github.com/GaryOcean428/bsuite#readme","bugs":{"url":"https://github.com/GaryOcean428/bsuite/issues"},"dist":{"shasum":"cbe9c5f9518bdf8b0c67989c3fbbde8fd95ff58f","tarball":"https://registry.npmjs.org/@bsuite/workflow-canvas/-/workflow-canvas-0.3.0-rc.3.tgz","fileCount":92,"integrity":"sha512-iF87RdBCRx5VuPtHfHOQ3Pon7twUcn1ZbovhSoiIKCmzw59eO4JM/ZwdNs2ob8/6UYuxc4eChbBz1RXpYI127Q==","signatures":[{"sig":"MEUCIQCf3R5OKwasg5mbIkSFqBWiFz62TXc31RZL9sN1ry23mwIgfrbHNUI8pYFxJmrNXpxS/QEu/fGRytBXYJ0F0apvW8o=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":309610},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./hooks":{"types":"./dist/hooks/index.d.ts","import":"./dist/hooks/index.js"},"./nodes":{"types":"./dist/nodes/index.d.ts","import":"./dist/nodes/index.js"},"./utils":{"types":"./dist/utils/index.d.ts","import":"./dist/utils/index.js"},"./schemas":{"types":"./dist/schemas.d.ts","import":"./dist/schemas.js"},"./components":{"types":"./dist/components/index.d.ts","import":"./dist/components/index.js"}},"gitHead":"1b337ad3b3f72a9b0ab4425149b1ee33d059147e","scripts":{"test":"vitest run","build":"tsc -p tsconfig.build.json","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"pnpm build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:54778f50-174c-44b5-9238-4e943cf89f33"}},"repository":{"url":"git+https://github.com/GaryOcean428/bsuite.git","type":"git","directory":"packages/workflow-canvas"},"_npmVersion":"11.9.0","description":"Process-shaped xyflow canvas for BSuite: a generic node-type registry (step / decision / terminator / handoff), swimlanes as xyflow parent nodes, LOOP-PERMISSIVE connection validation, and a controller + RPC-backed service persisting xyflow's native {node","directories":{},"sideEffects":["**/*.css","./dist/components/WorkflowCanvas.js"],"_nodeVersion":"24.14.0","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.3","readmeFilename":"README.md","devDependencies":{"zod":"^4.5.4","vite":"^8.2.2","jsdom":"^30.0.1","react":"^19.2.8","vitest":"^4.1.11","react-dom":"^19.2.8","typescript":"^6.0.3","@types/node":"^26.4.0","@types/react":"^19.2.18","lucide-react":"^1.37.0","@xyflow/react":"^12.11.5","@types/react-dom":"^19.2.5","@vitejs/plugin-react":"^6.1.1","@supabase/supabase-js":"^2.112.4","@tanstack/react-query":"^5.102.8","@bsuite/schema-builder":"workspace:^","@testing-library/react":"^16.3.3","@testing-library/jest-dom":"^7.0.1"},"peerDependencies":{"zod":"^4","react":">=18 <21","react-dom":">=18 <21","lucide-react":">=0.400.0","@xyflow/react":"^12","@supabase/supabase-js":"^2","@tanstack/react-query":"^5","@bsuite/schema-builder":">=1.9.0 <2"},"_npmOperationalInternal":{"tmp":"tmp/workflow-canvas_0.3.0-rc.3_1789032359440_0.6885348344219275","host":"s3://npm-registry-packages-npm-production"}},"0.3.0-rc.4":{"name":"@bsuite/workflow-canvas","version":"0.3.0-rc.4","license":"UNLICENSED","_id":"@bsuite/workflow-canvas@0.3.0-rc.4","maintainers":[{"name":"garyocean428","email":"braden.lang77@gmail.com"}],"homepage":"https://github.com/GaryOcean428/bsuite#readme","bugs":{"url":"https://github.com/GaryOcean428/bsuite/issues"},"dist":{"shasum":"f3aa97e21c6075745bbcd4d157f5cad9c9798f5c","tarball":"https://registry.npmjs.org/@bsuite/workflow-canvas/-/workflow-canvas-0.3.0-rc.4.tgz","fileCount":92,"integrity":"sha512-7fWd+OcKq90DWrdyj29NITO6SyzSfH6Yw2VF8t2E0fKPzRxPJ8XpGbFkfO51BRe6vE9aZ3pD47XLkPJOupZQkA==","signatures":[{"sig":"MEUCIFfO98PDP3Olc4MDU+YqE7C3BUbtNoXUrVBXW8C8QwDnAiEAlKa/37wsxp6BaM+gkZxWhCp/wfukdpiEHTZAYcQ/ig0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":312506},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./hooks":{"types":"./dist/hooks/index.d.ts","import":"./dist/hooks/index.js"},"./nodes":{"types":"./dist/nodes/index.d.ts","import":"./dist/nodes/index.js"},"./utils":{"types":"./dist/utils/index.d.ts","import":"./dist/utils/index.js"},"./schemas":{"types":"./dist/schemas.d.ts","import":"./dist/schemas.js"},"./components":{"types":"./dist/components/index.d.ts","import":"./dist/components/index.js"}},"gitHead":"b6f0931eee9a93c1863ed41ec136f9df9e77e280","scripts":{"test":"vitest run","build":"tsc -p tsconfig.build.json","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"pnpm build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:54778f50-174c-44b5-9238-4e943cf89f33"}},"repository":{"url":"git+https://github.com/GaryOcean428/bsuite.git","type":"git","directory":"packages/workflow-canvas"},"_npmVersion":"11.9.0","description":"Process-shaped xyflow canvas for BSuite: a generic node-type registry (step / decision / terminator / handoff), swimlanes as xyflow parent nodes, LOOP-PERMISSIVE connection validation, and a controller + RPC-backed service persisting xyflow's native {node","directories":{},"sideEffects":["**/*.css","./dist/components/WorkflowCanvas.js"],"_nodeVersion":"24.14.0","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.3","readmeFilename":"README.md","devDependencies":{"zod":"^4.5.4","vite":"^8.2.2","jsdom":"^30.0.1","react":"^19.2.8","vitest":"^4.1.11","react-dom":"^19.2.8","typescript":"^6.0.3","@types/node":"^26.4.0","@types/react":"^19.2.18","lucide-react":"^1.37.0","@xyflow/react":"^12.11.5","@types/react-dom":"^19.2.5","@vitejs/plugin-react":"^6.1.1","@supabase/supabase-js":"^2.112.4","@tanstack/react-query":"^5.102.8","@bsuite/schema-builder":"workspace:^","@testing-library/react":"^16.3.3","@testing-library/jest-dom":"^7.0.1"},"peerDependencies":{"zod":"^4","react":">=18 <21","react-dom":">=18 <21","lucide-react":">=0.400.0","@xyflow/react":"^12","@supabase/supabase-js":"^2","@tanstack/react-query":"^5","@bsuite/schema-builder":">=1.9.0 <2"},"_npmOperationalInternal":{"tmp":"tmp/workflow-canvas_0.3.0-rc.4_1789048134720_0.24276722896916203","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@bsuite/workflow-canvas","version":"0.3.0","license":"UNLICENSED","_id":"@bsuite/workflow-canvas@0.3.0","maintainers":[{"name":"garyocean428","email":"braden.lang77@gmail.com"}],"homepage":"https://github.com/GaryOcean428/bsuite#readme","bugs":{"url":"https://github.com/GaryOcean428/bsuite/issues"},"dist":{"shasum":"190b3ac4d1b56ae477e43d9181a210f6aa24a5d6","tarball":"https://registry.npmjs.org/@bsuite/workflow-canvas/-/workflow-canvas-0.3.0.tgz","fileCount":92,"integrity":"sha512-BCvdccqVgUe4x/fXt+AapneuWFsl3OClwWMnnx3xPORjd07dHb+dMnIaRQQm0cUV68w9LWdIN5oCBCDGVFD35g==","signatures":[{"sig":"MEQCIE0AWnu8vJFY7iIVM+iCR96YllG72J+PWJcfyMXMLZ7sAiAz/gZjGiY8oq8SGwIjqRI1VVQEe6TCGpvuE3keg7MVaA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIEnPMx3jcmaZiXMMwZfZ0DUJ4TdbBm2zHlyOkSdUNybPAiEA0eVyakKAr3aGD/2/uP4gpU0bTHktt0puywuRuw1zCh8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":312501},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./hooks":{"types":"./dist/hooks/index.d.ts","import":"./dist/hooks/index.js"},"./nodes":{"types":"./dist/nodes/index.d.ts","import":"./dist/nodes/index.js"},"./utils":{"types":"./dist/utils/index.d.ts","import":"./dist/utils/index.js"},"./schemas":{"types":"./dist/schemas.d.ts","import":"./dist/schemas.js"},"./components":{"types":"./dist/components/index.d.ts","import":"./dist/components/index.js"}},"gitHead":"88c9df9b16ec327aea6962f5ff3a53e9bb7a79d5","scripts":{"test":"vitest run","build":"tsc -p tsconfig.build.json","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"pnpm build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:54778f50-174c-44b5-9238-4e943cf89f33"}},"repository":{"url":"git+https://github.com/GaryOcean428/bsuite.git","type":"git","directory":"packages/workflow-canvas"},"_npmVersion":"11.9.0","description":"Process-shaped xyflow canvas for BSuite: a generic node-type registry (step / decision / terminator / handoff), swimlanes as xyflow parent nodes, LOOP-PERMISSIVE connection validation, and a controller + RPC-backed service persisting xyflow's native {node","directories":{},"sideEffects":["**/*.css","./dist/components/WorkflowCanvas.js"],"_nodeVersion":"24.14.0","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.3","devDependencies":{"zod":"^4.5.4","vite":"^8.2.2","jsdom":"^30.0.1","react":"^19.2.8","vitest":"^4.1.11","react-dom":"^19.2.8","typescript":"^6.0.3","@types/node":"^26.4.0","@types/react":"^19.2.18","lucide-react":"^1.37.0","@xyflow/react":"^12.11.5","@types/react-dom":"^19.2.5","@vitejs/plugin-react":"^6.1.1","@supabase/supabase-js":"^2.112.4","@tanstack/react-query":"^5.102.8","@bsuite/schema-builder":"workspace:^","@testing-library/react":"^16.3.3","@testing-library/jest-dom":"^7.0.1"},"peerDependencies":{"zod":"^4","react":">=18 <21","react-dom":">=18 <21","lucide-react":">=0.400.0","@xyflow/react":"^12","@supabase/supabase-js":"^2","@tanstack/react-query":"^5","@bsuite/schema-builder":">=1.9.0 <2"},"_npmOperationalInternal":{"tmp":"tmp/workflow-canvas_0.3.0_1789719549824_0.20290496857638463","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"@bsuite/workflow-canvas","version":"0.3.1","license":"UNLICENSED","_id":"@bsuite/workflow-canvas@0.3.1","maintainers":[{"name":"garyocean428","email":"braden.lang77@gmail.com"}],"homepage":"https://github.com/Arcane-Fly/bsuite#readme","bugs":{"url":"https://github.com/Arcane-Fly/bsuite/issues"},"dist":{"shasum":"561fbc8d4ae0d52443610609211d067abd8983a5","tarball":"https://registry.npmjs.org/@bsuite/workflow-canvas/-/workflow-canvas-0.3.1.tgz","fileCount":92,"integrity":"sha512-GEhBjUc2aZjfhW6rCa09w8aFIFt5XzLHINNt1riVb0tGwIHAmJlTv21/lrjpz6Jn9993JUow1KES4N+IRR5MFQ==","signatures":[{"sig":"MEYCIQDdQB7iy3qTB7oWMtqVY7sfvKZ0I4vLmBi6y06WdjEGoAIhAPmuMl7+wxQ1FcRI9k918Y+PBqGZQ2qqzyfKdMd+hgHC","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIB+pIHVQ8B6XnqZN0IiEge8NUOpxz1uVPz7Fr43uHf2XAiEA1nPm4wETM0kYE7cUuZKas8SpT/e/jtZw6N3x3S+hP8g=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bsuite%2fworkflow-canvas@0.3.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":316892},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./hooks":{"types":"./dist/hooks/index.d.ts","import":"./dist/hooks/index.js"},"./nodes":{"types":"./dist/nodes/index.d.ts","import":"./dist/nodes/index.js"},"./utils":{"types":"./dist/utils/index.d.ts","import":"./dist/utils/index.js"},"./schemas":{"types":"./dist/schemas.d.ts","import":"./dist/schemas.js"},"./components":{"types":"./dist/components/index.d.ts","import":"./dist/components/index.js"}},"gitHead":"6b7f2be9bdc629847bf0124833152f3a750daa5c","scripts":{"test":"vitest run","build":"tsc -p tsconfig.build.json","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"pnpm build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d3627dae-6dc1-4416-a488-498bde702129"}},"repository":{"url":"git+https://github.com/Arcane-Fly/bsuite.git","type":"git","directory":"packages/workflow-canvas"},"_npmVersion":"11.9.0","description":"Process-shaped xyflow canvas for BSuite: a generic node-type registry (step / decision / terminator / handoff), swimlanes as xyflow parent nodes, LOOP-PERMISSIVE connection validation, and a controller + RPC-backed service persisting xyflow's native {node","directories":{},"sideEffects":["**/*.css","./dist/components/WorkflowCanvas.js"],"_nodeVersion":"24.14.0","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.3","devDependencies":{"zod":"^4.6.5","vite":"^8.3.0","jsdom":"^30.1.0","react":"^19.3.0","vitest":"^4.1.11","react-dom":"^19.3.0","typescript":"^6.0.3","@types/node":"^26.6.2","@types/react":"^19.3.0","lucide-react":"^1.47.0","@xyflow/react":"^12.11.6","@types/react-dom":"^19.3.0","@vitejs/plugin-react":"^6.1.1","@supabase/supabase-js":"^2.116.0","@tanstack/react-query":"^5.103.1","@bsuite/schema-builder":"workspace:^","@testing-library/react":"^16.3.3","@testing-library/jest-dom":"^7.0.1"},"peerDependencies":{"zod":"^4","react":">=18 <21","react-dom":">=18 <21","lucide-react":">=0.400.0","@xyflow/react":"^12","@supabase/supabase-js":"^2","@tanstack/react-query":"^5","@bsuite/schema-builder":">=1.9.0 <2"},"_npmOperationalInternal":{"tmp":"tmp/workflow-canvas_0.3.1_1790333029633_0.5147435701469889","host":"s3://npm-registry-packages-npm-production"}},"0.3.2":{"name":"@bsuite/workflow-canvas","version":"0.3.2","license":"UNLICENSED","_id":"@bsuite/workflow-canvas@0.3.2","maintainers":[{"name":"garyocean428","email":"braden.lang77@gmail.com"}],"homepage":"https://github.com/Arcane-Fly/bsuite#readme","bugs":{"url":"https://github.com/Arcane-Fly/bsuite/issues"},"dist":{"shasum":"ba8178d3e91ccd0c8d049cea43df8b396999d66f","tarball":"https://registry.npmjs.org/@bsuite/workflow-canvas/-/workflow-canvas-0.3.2.tgz","fileCount":95,"integrity":"sha512-QlbNpdQq9yzhSuo0IU1hQ2sZ9Y/3yPzE6I4/f5SpSUsW5HC38HCYoxshGrS+UWH/ZCENlIdjN99XKDK73dC+KQ==","signatures":[{"sig":"MEUCICEtCaPpDKJJMabrhc4SCCOLkPCtPJQxwwQ/Tr2rSme8AiEAvRtk55YFYLzeaOkMrGSQsAl+ZKvjEG9/5TnxU6maKWI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQC2f2jqtqwEhWZWm+eDWa37iSkSKOKhO6Wt7E+l0tndogIgZIax2f+TCXSK3KkwL+CIy9cLPY7gWduHWdFDufTPLnU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bsuite%2fworkflow-canvas@0.3.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":322203},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./hooks":{"types":"./dist/hooks/index.d.ts","import":"./dist/hooks/index.js"},"./nodes":{"types":"./dist/nodes/index.d.ts","import":"./dist/nodes/index.js"},"./utils":{"types":"./dist/utils/index.d.ts","import":"./dist/utils/index.js"},"./schemas":{"types":"./dist/schemas.d.ts","import":"./dist/schemas.js"},"./components":{"types":"./dist/components/index.d.ts","import":"./dist/components/index.js"}},"gitHead":"51a3d4e864dd47919ec0587a18e5d43edf8dd42a","scripts":{"test":"vitest run","build":"tsc -p tsconfig.build.json","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"pnpm build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d3627dae-6dc1-4416-a488-498bde702129"}},"repository":{"url":"git+https://github.com/Arcane-Fly/bsuite.git","type":"git","directory":"packages/workflow-canvas"},"_npmVersion":"11.9.0","description":"Process-shaped xyflow canvas for BSuite: a generic node-type registry (step / decision / terminator / handoff), swimlanes as xyflow parent nodes, LOOP-PERMISSIVE connection validation, and a controller + RPC-backed service persisting xyflow's native {node","directories":{},"sideEffects":["**/*.css","./dist/components/WorkflowCanvas.js"],"_nodeVersion":"24.14.0","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.3","devDependencies":{"zod":"^4.6.5","vite":"^8.3.0","jsdom":"^30.1.0","react":"^19.3.0","vitest":"^4.1.11","react-dom":"^19.3.0","typescript":"^6.0.3","@types/node":"^26.6.2","@types/react":"^19.3.0","lucide-react":"^1.47.0","@xyflow/react":"^12.11.6","@types/react-dom":"^19.3.0","@vitejs/plugin-react":"^6.1.1","@supabase/supabase-js":"^2.116.0","@tanstack/react-query":"^5.103.1","@bsuite/schema-builder":"workspace:^","@testing-library/react":"^16.3.3","@testing-library/jest-dom":"^7.0.1"},"peerDependencies":{"zod":"^4","react":">=18 <21","react-dom":">=18 <21","lucide-react":">=0.400.0","@xyflow/react":"^12","@supabase/supabase-js":"^2","@tanstack/react-query":"^5","@bsuite/schema-builder":">=1.9.0 <2"},"_npmOperationalInternal":{"tmp":"tmp/workflow-canvas_0.3.2_1790339477642_0.603155347612689","host":"s3://npm-registry-packages-npm-production"}},"0.3.3-next.0":{"name":"@bsuite/workflow-canvas","version":"0.3.3-next.0","license":"UNLICENSED","_id":"@bsuite/workflow-canvas@0.3.3-next.0","maintainers":[{"name":"garyocean428","email":"braden.lang77@gmail.com"}],"homepage":"https://github.com/Arcane-Fly/bsuite#readme","bugs":{"url":"https://github.com/Arcane-Fly/bsuite/issues"},"dist":{"shasum":"8a9f516cdbf71d233cb9dc10c20188d013efd614","tarball":"https://registry.npmjs.org/@bsuite/workflow-canvas/-/workflow-canvas-0.3.3-next.0.tgz","fileCount":95,"integrity":"sha512-iNH5jR4LU0lxaqGZ9MqmfvofjDKee5gbWDj52zuWcRkZRTQdzkkTYWKJ7jkU6uiRB0wOfUCR9UWqXumV2TdlsQ==","signatures":[{"sig":"MEUCIQCTbc7jOeXmFNexNkFr76rJsn1EN5eNONO/NOTNoda5HAIgBeyBwqIMq3KubG+w/XHXR5vEF6PGmstKuh/iaCm0Hus=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDAkdwIZ0N0gpXUc1xNyIuwGFndtrcF503SO8xJyAtjpQIgQNNkh/21owUa3kt2QUZCMKF0DzgSRK3LmZsCP939L74=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bsuite%2fworkflow-canvas@0.3.3-next.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":322696},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./hooks":{"types":"./dist/hooks/index.d.ts","import":"./dist/hooks/index.js"},"./nodes":{"types":"./dist/nodes/index.d.ts","import":"./dist/nodes/index.js"},"./utils":{"types":"./dist/utils/index.d.ts","import":"./dist/utils/index.js"},"./schemas":{"types":"./dist/schemas.d.ts","import":"./dist/schemas.js"},"./components":{"types":"./dist/components/index.d.ts","import":"./dist/components/index.js"}},"gitHead":"d0d802e115ccea9b314ea899212ed7bd475c75f8","scripts":{"test":"vitest run","build":"tsc -p tsconfig.build.json","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"pnpm build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d3627dae-6dc1-4416-a488-498bde702129"}},"repository":{"url":"git+https://github.com/Arcane-Fly/bsuite.git","type":"git","directory":"packages/workflow-canvas"},"_npmVersion":"11.9.0","description":"Process-shaped xyflow canvas for BSuite: a generic node-type registry (step / decision / terminator / handoff), swimlanes as xyflow parent nodes, LOOP-PERMISSIVE connection validation, and a controller + RPC-backed service persisting xyflow's native {node","directories":{},"sideEffects":["**/*.css","./dist/components/WorkflowCanvas.js"],"_nodeVersion":"24.14.0","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.3","readmeFilename":"README.md","devDependencies":{"zod":"^4.6.5","vite":"^8.3.0","jsdom":"^30.1.0","react":"^19.3.0","vitest":"^4.1.11","react-dom":"^19.3.0","typescript":"^6.0.3","@types/node":"^26.6.2","@types/react":"^19.3.0","lucide-react":"^1.47.0","@xyflow/react":"^12.11.6","@types/react-dom":"^19.3.0","@vitejs/plugin-react":"^6.1.1","@supabase/supabase-js":"^2.116.0","@tanstack/react-query":"^5.103.1","@bsuite/schema-builder":"workspace:^","@testing-library/react":"^16.3.3","@testing-library/jest-dom":"^7.0.1"},"peerDependencies":{"zod":"^4","react":">=18 <21","react-dom":">=18 <21","lucide-react":">=0.400.0","@xyflow/react":"^12","@supabase/supabase-js":"^2","@tanstack/react-query":"^5","@bsuite/schema-builder":">=1.9.0 <2"},"_npmOperationalInternal":{"tmp":"tmp/workflow-canvas_0.3.3-next.0_1790396586509_0.37024294051525075","host":"s3://npm-registry-packages-npm-production"}},"0.3.3-next.1":{"name":"@bsuite/workflow-canvas","version":"0.3.3-next.1","license":"UNLICENSED","_id":"@bsuite/workflow-canvas@0.3.3-next.1","maintainers":[{"name":"garyocean428","email":"braden.lang77@gmail.com"}],"homepage":"https://github.com/Arcane-Fly/bsuite#readme","bugs":{"url":"https://github.com/Arcane-Fly/bsuite/issues"},"dist":{"shasum":"7339b405de90d30c49dac166b49c93cf4d69fb57","tarball":"https://registry.npmjs.org/@bsuite/workflow-canvas/-/workflow-canvas-0.3.3-next.1.tgz","fileCount":95,"integrity":"sha512-7a5rMfS/ALRIljm6U5pWgeDlalh46YynMEwpZibabxZXkqa99g+zsYdQvwd1ddTTG4hOzOfndJC3PuCXyrauSw==","signatures":[{"sig":"MEUCIQCBSKlpmKjs/0PCwWKbhI9JoAmKA/YKfurwrFlw70arPgIgb/eeeg/eRKhCt2e29MTNTTOcqR7s3bRdlqY6xHmZKhM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIHOVSyslwR/UGh++7XpUA0C1UQWmHvbp6EiN1ljJfRCiAiEA42iV2u3YQrae0lDEPXBRz5PcVvldY0idI0kYsRnS6uY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bsuite%2fworkflow-canvas@0.3.3-next.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":322990},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./hooks":{"types":"./dist/hooks/index.d.ts","import":"./dist/hooks/index.js"},"./nodes":{"types":"./dist/nodes/index.d.ts","import":"./dist/nodes/index.js"},"./utils":{"types":"./dist/utils/index.d.ts","import":"./dist/utils/index.js"},"./schemas":{"types":"./dist/schemas.d.ts","import":"./dist/schemas.js"},"./components":{"types":"./dist/components/index.d.ts","import":"./dist/components/index.js"}},"gitHead":"301b5bd3e23ecbbe31f1cc4b85cc7d86081ac2c7","scripts":{"test":"vitest run","build":"tsc -p tsconfig.build.json","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"pnpm build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d3627dae-6dc1-4416-a488-498bde702129"}},"repository":{"url":"git+https://github.com/Arcane-Fly/bsuite.git","type":"git","directory":"packages/workflow-canvas"},"_npmVersion":"11.9.0","description":"Process-shaped xyflow canvas for BSuite: a generic node-type registry (step / decision / terminator / handoff), swimlanes as xyflow parent nodes, LOOP-PERMISSIVE connection validation, and a controller + RPC-backed service persisting xyflow's native {node","directories":{},"sideEffects":["**/*.css","./dist/components/WorkflowCanvas.js"],"_nodeVersion":"24.14.0","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.3","readmeFilename":"README.md","devDependencies":{"zod":"^4.6.5","vite":"^8.3.0","jsdom":"^30.1.0","react":"^19.3.0","vitest":"^4.1.11","react-dom":"^19.3.0","typescript":"^6.0.3","@types/node":"^26.6.2","@types/react":"^19.3.0","lucide-react":"^1.47.0","@xyflow/react":"^12.11.6","@types/react-dom":"^19.3.0","@vitejs/plugin-react":"^6.1.1","@supabase/supabase-js":"^2.116.0","@tanstack/react-query":"^5.103.1","@bsuite/schema-builder":"workspace:^","@testing-library/react":"^16.3.3","@testing-library/jest-dom":"^7.0.1"},"peerDependencies":{"zod":"^4","react":">=18 <21","react-dom":">=18 <21","lucide-react":">=0.400.0","@xyflow/react":"^12","@supabase/supabase-js":"^2","@tanstack/react-query":"^5","@bsuite/schema-builder":">=1.9.0 <2"},"_npmOperationalInternal":{"tmp":"tmp/workflow-canvas_0.3.3-next.1_1790400414846_0.9638833682414847","host":"s3://npm-registry-packages-npm-production"}},"0.3.3":{"_id":"@bsuite/workflow-canvas@0.3.3","bugs":{"url":"https://github.com/Arcane-Fly/bsuite/issues"},"dist":{"shasum":"5fde40553d4ba0aa2c68ba9342bd8d5c2208ecc4","tarball":"https://registry.npmjs.org/@bsuite/workflow-canvas/-/workflow-canvas-0.3.3.tgz","fileCount":95,"integrity":"sha512-hXk+I+pa9tJb5YGnw3IMT4oBTDV7yvTLoXSR4v7Sl7BqcsWXAp1JKxaL9c/nihCjRx9UHZD0bngVH51Lm3d+xA==","signatures":[{"sig":"MEUCIGCyh0iyiTutL4j6VWybkscMRpqT7XFsTZ5zwqPqtd7zAiEAkKhChjWGkT9oGRrz73MFz1mDmC9pDwbquZcgaSiPZU4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCag65i3vzGmO8FGxbVe0HYvM8CA1sG+AbhiGepaPHu0wIgXE0a6DWFpv94u/DqrTIdMoZhlhKDjSGKGNGBk4h10Mk="}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bsuite%2fworkflow-canvas@0.3.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":322983},"main":"dist/index.js","name":"@bsuite/workflow-canvas","type":"module","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./hooks":{"types":"./dist/hooks/index.d.ts","import":"./dist/hooks/index.js"},"./nodes":{"types":"./dist/nodes/index.d.ts","import":"./dist/nodes/index.js"},"./utils":{"types":"./dist/utils/index.d.ts","import":"./dist/utils/index.js"},"./schemas":{"types":"./dist/schemas.d.ts","import":"./dist/schemas.js"},"./components":{"types":"./dist/components/index.d.ts","import":"./dist/components/index.js"}},"gitHead":"55dc1d3ea869b16f8ab870191083f9a7e2686328","license":"UNLICENSED","scripts":{"test":"vitest run","build":"tsc -p tsconfig.build.json","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"pnpm build"},"version":"0.3.3","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d3627dae-6dc1-4416-a488-498bde702129"}},"homepage":"https://github.com/Arcane-Fly/bsuite#readme","repository":{"url":"git+https://github.com/Arcane-Fly/bsuite.git","type":"git","directory":"packages/workflow-canvas"},"_npmVersion":"11.9.0","description":"Process-shaped xyflow canvas for BSuite: a generic node-type registry (step / decision / terminator / handoff), swimlanes as xyflow parent nodes, LOOP-PERMISSIVE connection validation, and a controller + RPC-backed service persisting xyflow's native {node","directories":{},"maintainers":[{"name":"garyocean428","email":"braden.lang77@gmail.com"}],"sideEffects":["**/*.css","./dist/components/WorkflowCanvas.js"],"_nodeVersion":"24.14.0","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.3","devDependencies":{"zod":"^4.6.5","vite":"^8.3.0","jsdom":"^30.1.0","react":"^19.3.0","vitest":"^4.1.11","react-dom":"^19.3.0","typescript":"^6.0.3","@types/node":"^26.6.2","@types/react":"^19.3.0","lucide-react":"^1.47.0","@xyflow/react":"^12.11.6","@types/react-dom":"^19.3.0","@vitejs/plugin-react":"^6.1.1","@supabase/supabase-js":"^2.116.0","@tanstack/react-query":"^5.103.1","@bsuite/schema-builder":"workspace:^","@testing-library/react":"^16.3.3","@testing-library/jest-dom":"^7.0.1"},"peerDependencies":{"zod":"^4","react":">=18 <21","react-dom":">=18 <21","lucide-react":">=0.400.0","@xyflow/react":"^12","@supabase/supabase-js":"^2","@tanstack/react-query":"^5","@bsuite/schema-builder":">=1.9.0 <2"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/workflow-canvas_0.3.3_1790405354467_0.06712573127688004"}}},"time":{"created":"2026-09-02T01:36:24.415Z","modified":"2026-09-26T06:49:14.933Z","0.2.0":"2026-09-02T01:36:24.829Z","0.2.1":"2026-09-02T05:06:31.889Z","0.2.2":"2026-09-02T08:21:50.581Z","0.2.3":"2026-09-03T22:08:53.712Z","0.3.0-rc.1":"2026-09-09T05:10:46.489Z","0.3.0-rc.2":"2026-09-09T06:44:07.348Z","0.3.0-rc.3":"2026-09-10T09:25:59.612Z","0.3.0-rc.4":"2026-09-10T13:48:54.879Z","0.3.0":"2026-09-18T08:19:09.913Z","0.3.1":"2026-09-25T10:43:49.735Z","0.3.2":"2026-09-25T12:31:17.745Z","0.3.3-next.0":"2026-09-26T04:23:06.611Z","0.3.3-next.1":"2026-09-26T05:26:54.939Z","0.3.3":"2026-09-26T06:49:14.594Z"},"bugs":{"url":"https://github.com/Arcane-Fly/bsuite/issues"},"license":"UNLICENSED","homepage":"https://github.com/Arcane-Fly/bsuite#readme","repository":{"url":"git+https://github.com/Arcane-Fly/bsuite.git","type":"git","directory":"packages/workflow-canvas"},"description":"Process-shaped xyflow canvas for BSuite: a generic node-type registry (step / decision / terminator / handoff), swimlanes as xyflow parent nodes, LOOP-PERMISSIVE connection validation, and a controller + RPC-backed service persisting xyflow's native {node","maintainers":[{"name":"garyocean428","email":"braden.lang77@gmail.com"}],"readme":"# `@bsuite/workflow-canvas`\n\nA process-shaped xyflow canvas: `step` / `decision` / `terminator` / `handoff` nodes, swimlanes as\nreal xyflow parent nodes, **loop-permissive** connection validation, and a controller + service that\npersist xyflow's native `{nodes, edges, viewport}` into `workflow_definition_versions.graph`.\n\nPhase 1 of `docs/plans/20260901-workflow-canvas-implementation-v1.00A.md`, which finishes work\nscoped and red-teamed in `docs/plans/20260510-universal-canvas-capability-implementation-v1.00F.md`\nback in May.\n\n---\n\n## What this is NOT a rebuild of\n\n| Thing | Where | What was taken |\n|---|---|---|\n| `@bsuite/schema-builder` v1.9.0 | `packages/schema-builder/` | **The architecture.** Controller hook + RPC-backed service + TanStack optimistic mutations with rollback + Realtime cross-tab sync + a thin per-app wrapper. Also `computeDagreLayout` and `XY_TOKEN_BINDINGS`, **imported, not copied**. |\n| `RelationshipCanvas` | `business-suite-unified/src/components/feature-builder/` | The `ReactFlowProvider` wrapper only. |\n| `useUndoRedo` | `crm7/src/pages/sales/pipeline-flow-inner.tsx` | The 50-snapshot hook, lifted and corrected. |\n\n**Zero new runtime dependencies.** `package.json`'s `dependencies` is `{}`. `@dagrejs/dagre`,\n`@xyflow/react`, `zod` and `@tanstack/react-query` are all already in every consumer's bundle.\n\n---\n\n## The rule that matters most: LOOPS ARE PERMITTED\n\n`RelationshipCanvas` runs a cycle-detecting DFS and **refuses** cycles. That is right for foreign\nkeys and wrong here. The apprentice placement process requires loops, and the Lucidchart source\nnames two:\n\n- *\"Change rates or placement and resend for e-signing\"* → back to *\"Send placement for\n  CRM-triggered e-signing\"*\n- *\"Cancel placement and seek a new host\"* → back to *\"Create or confirm host placement\"*\n\n`wouldCreateCycle` is never called from this package. `__tests__/connectionValidation.test.ts`\nasserts a cycle **is accepted** — a suite that only proved rejection would be the bug.\n\n### What is still refused\n\n| # | Refusal | Why it is not a loop question |\n|---|---|---|\n| R1 | No source or no target | Nothing to attach |\n| R2 | **Self-loop** (`source === target`) | A step looping into itself changes no state between iterations. A **two**-node cycle `A → B → A` is accepted — both apprentice loops are that shape |\n| R3 | Wrong end of a terminator | A `start` declares only a source handle, an `end` only a target, so there is no port to grab. Enforced through the registry's handle set, not as a special case |\n| R4 | Handle-kind or handle-role mismatch | One kind (`flow`) exists today; the axis is named now so a later data edge is refused by this same code |\n| R5 | An edge touching a swimlane | A lane groups steps; edges attach to the work inside it |\n| R6 | Exact duplicate edge | A second copy renders on top of the first, so the drag looks inert while the graph grows |\n\nExplicitly **not** refused: cycles of any length ≥ 2, several edges leaving one decision (the\napprentice process branches four ways out of *Host accepted placement?*), several edges arriving at\none step, and edges crossing swimlanes — that last one is what a handoff *is*.\n\n---\n\n## The node-type registry\n\nThere is no generic `nodeTypes` registry anywhere else in the estate: `SchemaCanvas` is\n`{ entity: EntityNode }` and `RelationshipCanvas` is `{ entity, reference }`. Both are right for a\nschema diagram and closed. This one is open.\n\n```ts\nimport { workflowNodeTypeRegistry } from '@bsuite/workflow-canvas';\n\n// Add a kind without forking the package. Returns a NEW registry.\nconst registry = workflowNodeTypeRegistry.extend([myDelayDescriptor]);\n```\n\nA descriptor answers four questions in one place so they cannot drift: what it looks like\n(`component`), what it can connect to (`handles(data)`, read by both the card and\n`isValidConnection`), what it means (`dataSchema`, enforced on save), and how it behaves\n(`container`, `defaultSize`, `defaultData`).\n\nHandles follow the node's **data**, not just its kind — a decision's ports track its branch list, a\nterminator's track its start/end role.\n\n---\n\n## Swimlanes\n\nLanes are xyflow **parent nodes** with `extent: 'parent'` on their members, not background bands.\nThe difference is that xyflow then enforces the lane during the drag itself, so the graph cannot\nexpress a step that has drifted out of the lane that owns it. `parentId` and `extent` are native\nxyflow fields, so they round-trip through `graph jsonb` for free.\n\n`computeSwimlaneLayout` asks dagre for the **x axis only** — process order — and takes y from the\nnode's lane, because ownership is not something a layout algorithm gets a vote on.\n\nThe six apprentice lanes: Apprentice · GTO / Labour Hire Team · Apprentice Connect Provider · DEWR\nand State Training Authority · Training Provider · Host Employer.\n\n---\n\n## Usage\n\n```tsx\nimport {\n  WorkflowCanvas,\n  WorkflowInspector,\n  WorkflowPalette,\n  WorkflowToolbar,\n  useWorkflowController,\n} from '@bsuite/workflow-canvas';\n\nfunction WorkflowPage({ id }: { id: string }) {\n  const controller = useWorkflowController({\n    supabase,\n    tenantId,\n    definitionId: id,\n    onError: (message, err) => toast.error(message, err),\n    onConnectionRefused: (v) => toast.info(v.reason),\n  });\n\n  return (\n    <WorkflowCanvas controller={controller}>\n      <WorkflowPalette controller={controller} activeLaneId={activeLane} />\n      <WorkflowToolbar controller={controller} onDuplicated={(id) => navigate(`/workflows/${id}`)} />\n      <WorkflowInspector\n        controller={controller}\n        selectedNodeId={selected}\n        onNodeDeleted={() => setSelected(null)}\n      />\n    </WorkflowCanvas>\n  );\n}\n```\n\nThe three chrome components are children of the canvas. The canvas sorts them into reserved\nregions (toolbar / palette / diagram / inspector) so they do not paint over the flow pane —\nFit View and edge clicks see the remaining box. Each chrome component still renders nothing\nwhen it has nothing to do — no selection, or a workflow the session cannot edit — so a consumer\nnever has to gate them itself. Do not pass placement-only `className`s; surface classes are\nalways applied and extras compose rather than replace. Below ~800px of *canvas* width the\npalette becomes a chip row; the inspector column is reserved when a step is selected.\n\nLazy-load the route. `@xyflow/react` must never reach the entry chunk — Phase C.2 of the May plan\nmade that a hard rule with a bundle-analyser proof.\n\n### Editing, drafts and publishing\n\n- **The palette is built from the registry**, not from a list. A kind added through\n  `registry.extend()` appears without the palette being touched; containers (swimlanes) are excluded\n  because a lane is the frame of the diagram rather than a step in it.\n- **A rename commits on blur or Enter, not per keystroke.** `updateNodeData` checkpoints the undo\n  stack, so a per-keystroke commit would spend the whole 50-slot buffer on one word.\n- **Publish is disabled while an edit is unsaved.** The graph saves on a 900 ms debounce; publishing\n  inside that window would freeze a version whose last edits are still in a timer. The controller\n  flushes first as a second guard.\n- **`duplicateToTenant()` copies a template as a DRAFT**, reading the source THROUGH\n  `current_published_version_id` so it never copies somebody's open draft, and bumping the key rather\n  than surfacing a 23505 when the same template is copied twice.\n\n---\n\n## The table contract\n\nThis package does **not** create its tables. The `workflow_definitions` migration owns\n`workflow_definitions` and `workflow_definition_versions` (its own `tenant_id` column, flat RLS\npredicate copied verbatim from `public.form_layouts`, `graph jsonb`, `ai_context jsonb`). If a\ncolumn name in `src/types.ts` disagrees with that file, the migration is right.\n\nThe tables are created by `20261103000000_workflow_definitions.sql` and extended by\n`20261105000000_workflow_definition_versions_published_at.sql`. Both are checked into three scopes\n(root, crm7, business-suite-unified) byte-identically, with paired entries in\n`scripts/migration-collision-allowlist.txt`.\n\n> **Version collisions are silent.** `schema_migrations` is keyed on the 14-digit version ALONE\n> across eight applier scopes, so a file at a version already in the ledger is **skipped without a\n> word** — success reported, nothing applied. The plan reserved `20261102000000` and #2896 took it\n> the same day; `published_at` is a new file for the same reason, rather than an edit to the merged\n> `20261103000000` — and it was itself renumbered from `20261104000000` to `20261105000000` when\n> business-suite-unified#1085 merged the execution bridge at that version an hour after this one had\n> checked it free. A census is a snapshot, not a reservation, in both directions.\n\n> **0.1.0 disagreed with its own tables, and every test passed.** The service ordered by, SET and\n> inserted `label` — a column that has never existed — and `publishVersion()` wrote `published_at`,\n> which `20261103000000` never created. Listing, renaming, creating and publishing a workflow each\n> returned a PostgREST error, and the merged apprentice seed could not land at all. Nothing caught it\n> because every test stubbed the Supabase client. `src/__tests__/tableContract.test.ts` now parses\n> the migration files and fails when the service names a column the DDL does not declare.\n\nReaders must go through `current_published_version_id`, never \"the highest version number\" — that\nis what makes publishing atomic and reversible, and what stops a half-finished draft reaching\nproduction.\n\n---\n\n## Tests\n\n`pnpm test` — 105 tests over eight files:\n\n- `nodeRegistry.test.ts` — the vocabulary, `nodeTypes` stability, data-driven handles, openness\n- `connectionValidation.test.ts` — **a cycle is accepted**, both apprentice loops, the four-way\n  branch, and each refusal\n- `swimlaneLayout.test.ts` — parenting, lane order, parents-before-children, and a spy proving the\n  dagre call is schema-builder's rather than a reimplementation\n- `graphRoundTrip.test.ts` — serialise → deserialise → deep-equal, including through `JSON`\n- `undoRedo.test.ts` — the 50-snapshot cap, batching correctness, one-drag-one-step\n- `tableContract.test.ts` — the service may only name columns the migration FILES declare, with a\n  control assertion so a parser that matched nothing cannot report clean\n- `duplicateDefinition.test.ts` — the copy lands as a draft, comes from the published pointer rather\n  than `max(version)`, carries the rationale notes, bumps a colliding key, and does **not** retry an\n  error that is not a unique violation\n- `editorChrome.test.tsx` — the palette follows the registry, a rename is one undo step, deleting a\n  lane asks first, and publish is refused while an edit is unsaved\n","readmeFilename":"README.md"}