{"_id":"@alma-harness/batch","_rev":"6-76fec529bef9f1a9dbeddf5715c829e0","name":"@alma-harness/batch","dist-tags":{"latest":"0.10.0"},"versions":{"0.6.0":{"name":"@alma-harness/batch","version":"0.6.0","license":"Apache-2.0","_id":"@alma-harness/batch@0.6.0","maintainers":[{"name":"fabiofernandescarneiro","email":"fabiofernandescarneiro@gmail.com"}],"homepage":"https://github.com/FabioFernandesCarneiro/alma#readme","bugs":{"url":"https://github.com/FabioFernandesCarneiro/alma/issues"},"dist":{"shasum":"95f832d366d4781b7df622fa0fcc053f00caddf5","tarball":"https://registry.npmjs.org/@alma-harness/batch/-/batch-0.6.0.tgz","fileCount":6,"integrity":"sha512-Is1bjhgCkThi7Cu0PRhh37R6maNTS+fAkeXUDLQPcavoJbr0By5cdUFOI1dPE21fXKdK4xNkZg4KO388XPN44A==","signatures":[{"sig":"MEYCIQCSPUcXdxXQnnLDKHklnQHAfUKEeDu1cyIHz8RuxZ4rDAIhAKaJVOd0F6NonG4jPyQOkn5hKepZqNZYzQ2c8hD5vURD","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":73803},"main":"./dist/index.js","type":"module","_from":"file:alma-harness-batch-0.6.0.tgz","types":"./dist/index.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"scripts":{"test":"vitest run","build":"tsup","typecheck":"tsc --noEmit"},"_npmUser":{"name":"fabiofernandescarneiro","email":"fabiofernandescarneiro@gmail.com"},"_resolved":"/private/var/folders/zc/snhwcnp15dj2hk0k9_g1fh3h0000gn/T/ecc1d4d9af6275c0b53a24b1b8e4a392/alma-harness-batch-0.6.0.tgz","_integrity":"sha512-Is1bjhgCkThi7Cu0PRhh37R6maNTS+fAkeXUDLQPcavoJbr0By5cdUFOI1dPE21fXKdK4xNkZg4KO388XPN44A==","repository":{"url":"git+https://github.com/FabioFernandesCarneiro/alma.git","type":"git","directory":"packages/batch"},"_npmVersion":"11.18.0","description":"Governed single-dispatch batch execution for Alma.","directories":{},"_nodeVersion":"26.4.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"pg":"^8.16.3","vitest":"^3.2.4","@types/pg":"^8.15.4","typescript":"^5.9.2","@types/node":"^24.1.0","@alma-harness/core":"^0.6.0","@alma-harness/memory":"^0.6.0","@alma-harness/postgres":"^0.6.0","@alma-harness/execution":"^0.6.0","@alma-harness/postgres-execution":"^0.6.0"},"peerDependencies":{"@alma-harness/core":"^0.6.0","@alma-harness/execution":"^0.6.0"},"_npmOperationalInternal":{"tmp":"tmp/batch_0.6.0_1788902326093_0.5940648980760421","host":"s3://npm-registry-packages-npm-production"}},"0.6.1":{"name":"@alma-harness/batch","version":"0.6.1","license":"Apache-2.0","_id":"@alma-harness/batch@0.6.1","maintainers":[{"name":"fabiofernandescarneiro","email":"fabiofernandescarneiro@gmail.com"}],"homepage":"https://github.com/FabioFernandesCarneiro/alma#readme","bugs":{"url":"https://github.com/FabioFernandesCarneiro/alma/issues"},"dist":{"shasum":"fff91417b23adebefff1e2de0f9906f3752fabbc","tarball":"https://registry.npmjs.org/@alma-harness/batch/-/batch-0.6.1.tgz","fileCount":6,"integrity":"sha512-n4xOcheaIPw4v3/qhEfh0e7nIgLDTbJwbJhZwRWAuPGqw2JUtw4blON3DXABrdva+9McTQ9AZxMxW8CueIQp9w==","signatures":[{"sig":"MEUCIQCleaNLfBPL3zBTxhRiMd4xg8uGhJnRDioPrtdZIMTjggIgSnw8BzrqBkxi6Pz746YLhWLCNWyCbCiKvL4qJ7d6GFk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":73803},"main":"./dist/index.js","type":"module","_from":"file:alma-harness-batch-0.6.1.tgz","types":"./dist/index.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"scripts":{"test":"vitest run","build":"tsup","typecheck":"tsc --noEmit"},"_npmUser":{"name":"fabiofernandescarneiro","email":"fabiofernandescarneiro@gmail.com"},"_resolved":"/private/var/folders/zc/snhwcnp15dj2hk0k9_g1fh3h0000gn/T/86fe3f2af80a5e06ef1e212b3164c1b3/alma-harness-batch-0.6.1.tgz","_integrity":"sha512-n4xOcheaIPw4v3/qhEfh0e7nIgLDTbJwbJhZwRWAuPGqw2JUtw4blON3DXABrdva+9McTQ9AZxMxW8CueIQp9w==","repository":{"url":"git+https://github.com/FabioFernandesCarneiro/alma.git","type":"git","directory":"packages/batch"},"_npmVersion":"11.18.0","description":"Governed single-dispatch batch execution for Alma.","directories":{},"_nodeVersion":"26.4.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"pg":"^8.16.3","vitest":"^3.2.4","@types/pg":"^8.15.4","typescript":"^5.9.2","@types/node":"^24.1.0","@alma-harness/core":"^0.6.1","@alma-harness/memory":"^0.6.1","@alma-harness/postgres":"^0.6.1","@alma-harness/execution":"^0.6.1","@alma-harness/postgres-execution":"^0.6.1"},"peerDependencies":{"@alma-harness/core":"^0.6.1","@alma-harness/execution":"^0.6.1"},"_npmOperationalInternal":{"tmp":"tmp/batch_0.6.1_1788905830905_0.8145360910785322","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"@alma-harness/batch","version":"0.7.0","license":"Apache-2.0","_id":"@alma-harness/batch@0.7.0","maintainers":[{"name":"fabiofernandescarneiro","email":"fabiofernandescarneiro@gmail.com"}],"homepage":"https://github.com/FabioFernandesCarneiro/alma#readme","bugs":{"url":"https://github.com/FabioFernandesCarneiro/alma/issues"},"dist":{"shasum":"623d0de8a8726227609b30bfef6d23c627925bc4","tarball":"https://registry.npmjs.org/@alma-harness/batch/-/batch-0.7.0.tgz","fileCount":6,"integrity":"sha512-Kur9VzJTaTYl/lHqQ0q0DOAzNRw4M09Su9Pt52EY5K3jPvO4vmMVt6vyx3Ld8VObf10ml8PcJbolbpzYZc9H9Q==","signatures":[{"sig":"MEUCIQCtMIODqY0yMD4ImMmx/zVgt3hR6HLwr/ZAlc3UEFHTdQIgPJajwlpJbiXEztxi1CbOs/EPn78wQz0fwZdyf0GZlek=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":77384},"main":"./dist/index.js","type":"module","_from":"file:alma-harness-batch-0.7.0.tgz","types":"./dist/index.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"scripts":{"test":"vitest run","build":"tsup","typecheck":"tsc --noEmit"},"_npmUser":{"name":"fabiofernandescarneiro","email":"fabiofernandescarneiro@gmail.com"},"_resolved":"/private/var/folders/zc/snhwcnp15dj2hk0k9_g1fh3h0000gn/T/2030c63ae20fbb9c867e8642c8775d97/alma-harness-batch-0.7.0.tgz","_integrity":"sha512-Kur9VzJTaTYl/lHqQ0q0DOAzNRw4M09Su9Pt52EY5K3jPvO4vmMVt6vyx3Ld8VObf10ml8PcJbolbpzYZc9H9Q==","repository":{"url":"git+https://github.com/FabioFernandesCarneiro/alma.git","type":"git","directory":"packages/batch"},"_npmVersion":"11.18.0","description":"Governed single-dispatch batch execution for Alma.","directories":{},"_nodeVersion":"26.4.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"pg":"^8.16.3","vitest":"^3.2.4","@types/pg":"^8.15.4","typescript":"^5.9.2","@types/node":"^24.1.0","@alma-harness/core":"^0.7.0","@alma-harness/memory":"^0.7.0","@alma-harness/postgres":"^0.7.0","@alma-harness/execution":"^0.7.0","@alma-harness/postgres-execution":"^0.7.0"},"peerDependencies":{"@alma-harness/core":"^0.7.0","@alma-harness/execution":"^0.7.0"},"_npmOperationalInternal":{"tmp":"tmp/batch_0.7.0_1789137033048_0.006291150829295766","host":"s3://npm-registry-packages-npm-production"}},"0.8.0":{"name":"@alma-harness/batch","version":"0.8.0","license":"Apache-2.0","_id":"@alma-harness/batch@0.8.0","maintainers":[{"name":"fabiofernandescarneiro","email":"fabiofernandescarneiro@gmail.com"}],"homepage":"https://github.com/FabioFernandesCarneiro/alma#readme","bugs":{"url":"https://github.com/FabioFernandesCarneiro/alma/issues"},"dist":{"shasum":"068957da523a9845676a463f3a07d34bb9ceee02","tarball":"https://registry.npmjs.org/@alma-harness/batch/-/batch-0.8.0.tgz","fileCount":6,"integrity":"sha512-F88G4NuvPWowaWmdvgVxh7TUrFtw1tbEOI4QVfOXKfKxJY163LlbKmxkhIWtYp1UtNVuLrM84QE23RCzKNfQAg==","signatures":[{"sig":"MEUCIQDt3d6nM65uMa42CJI4A/p/UwgIxL4oNbsOhXMjWnWiCQIgRArJaECMWjRcsmGYgZnuJq2f8mPqKac/ZM51BDDNHKU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":77384},"main":"./dist/index.js","type":"module","_from":"file:alma-harness-batch-0.8.0.tgz","types":"./dist/index.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"scripts":{"test":"vitest run","build":"tsup","typecheck":"tsc --noEmit"},"_npmUser":{"name":"fabiofernandescarneiro","email":"fabiofernandescarneiro@gmail.com"},"_resolved":"/private/var/folders/zc/snhwcnp15dj2hk0k9_g1fh3h0000gn/T/f4d3b45bbca19d89a45cc3e172335d13/alma-harness-batch-0.8.0.tgz","_integrity":"sha512-F88G4NuvPWowaWmdvgVxh7TUrFtw1tbEOI4QVfOXKfKxJY163LlbKmxkhIWtYp1UtNVuLrM84QE23RCzKNfQAg==","repository":{"url":"git+https://github.com/FabioFernandesCarneiro/alma.git","type":"git","directory":"packages/batch"},"_npmVersion":"11.18.0","description":"Governed single-dispatch batch execution for Alma.","directories":{},"_nodeVersion":"26.4.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"pg":"^8.16.3","vitest":"^3.2.4","@types/pg":"^8.15.4","typescript":"^5.9.2","@types/node":"^24.1.0","@alma-harness/core":"^0.8.0","@alma-harness/memory":"^0.8.0","@alma-harness/postgres":"^0.8.0","@alma-harness/execution":"^0.8.0","@alma-harness/postgres-execution":"^0.8.0"},"peerDependencies":{"@alma-harness/core":"^0.8.0","@alma-harness/execution":"^0.8.0"},"_npmOperationalInternal":{"tmp":"tmp/batch_0.8.0_1789155222669_0.6407483871244575","host":"s3://npm-registry-packages-npm-production"}},"0.9.0":{"name":"@alma-harness/batch","version":"0.9.0","license":"Apache-2.0","_id":"@alma-harness/batch@0.9.0","maintainers":[{"name":"fabiofernandescarneiro","email":"fabiofernandescarneiro@gmail.com"}],"homepage":"https://github.com/FabioFernandesCarneiro/alma#readme","bugs":{"url":"https://github.com/FabioFernandesCarneiro/alma/issues"},"dist":{"shasum":"528db112d0f737fbeba1d2481acc9bff245354f5","tarball":"https://registry.npmjs.org/@alma-harness/batch/-/batch-0.9.0.tgz","fileCount":6,"integrity":"sha512-FOjRzrTCWYAmVpVqy2dsrpOLZwpeujLgVJG4E2r6zoIU7hVT5qMziG/dGOtpUUQXpNnGVYqiSwOcguakucbaMQ==","signatures":[{"sig":"MEUCIGRaZP5HdIxMZpYKFsR54wqb/X+HH/xSPIXq+T0ABOguAiEAm4NYrFJ1Hd+K7lrZP3o1qcWSXujkyi6PhG2aLr/gwDo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":77384},"main":"./dist/index.js","type":"module","_from":"file:alma-harness-batch-0.9.0.tgz","types":"./dist/index.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"scripts":{"test":"vitest run","build":"tsup","typecheck":"tsc --noEmit"},"_npmUser":{"name":"fabiofernandescarneiro","email":"fabiofernandescarneiro@gmail.com"},"_resolved":"/private/var/folders/zc/snhwcnp15dj2hk0k9_g1fh3h0000gn/T/c4422af7c1a70d00ade3e38ebffa646b/alma-harness-batch-0.9.0.tgz","_integrity":"sha512-FOjRzrTCWYAmVpVqy2dsrpOLZwpeujLgVJG4E2r6zoIU7hVT5qMziG/dGOtpUUQXpNnGVYqiSwOcguakucbaMQ==","repository":{"url":"git+https://github.com/FabioFernandesCarneiro/alma.git","type":"git","directory":"packages/batch"},"_npmVersion":"11.18.0","description":"Governed single-dispatch batch execution for Alma.","directories":{},"_nodeVersion":"26.4.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"pg":"^8.16.3","vitest":"^3.2.4","@types/pg":"^8.15.4","typescript":"^5.9.2","@types/node":"^24.1.0","@alma-harness/core":"^0.9.0","@alma-harness/memory":"^0.9.0","@alma-harness/postgres":"^0.9.0","@alma-harness/execution":"^0.9.0","@alma-harness/postgres-execution":"^0.9.0"},"peerDependencies":{"@alma-harness/core":"^0.9.0","@alma-harness/execution":"^0.9.0"},"_npmOperationalInternal":{"tmp":"tmp/batch_0.9.0_1789655795368_0.5137246339651782","host":"s3://npm-registry-packages-npm-production"}},"0.10.0":{"_id":"@alma-harness/batch@0.10.0","bugs":{"url":"https://github.com/FabioFernandesCarneiro/alma/issues"},"dist":{"shasum":"1fd2b827f32a25c9e4185d1f9232f8a8578dda5b","tarball":"https://registry.npmjs.org/@alma-harness/batch/-/batch-0.10.0.tgz","fileCount":6,"integrity":"sha512-GkZ2lv5vF1KQRfqid7+P5u6r+S/m1F3lqP9GjtUBtc/fu52qn7MtGTe1RCWq8n1PRONQlM3mLDmcU7uabYOy4Q==","signatures":[{"sig":"MEUCIBmlC9Blh1/kmoMwIrbItLLTs6bkkMCfvfcVWE7oSFLcAiEAnul0nywUltaH0oDP4VVbOWtPMpPH8jx9mvT4BgfEH3c=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCICNtczud1sz6SMwgHHCSk6/l5XBovXEthiDdKPUVCMjCAiEAta/GfeFJzsgEr999i/+pCgFvFbYkctmt6Tm2LnIW3+c="}],"unpackedSize":78659},"main":"./dist/index.js","name":"@alma-harness/batch","type":"module","_from":"file:alma-harness-batch-0.10.0.tgz","types":"./dist/index.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"license":"Apache-2.0","scripts":{"test":"vitest run","build":"tsup","typecheck":"tsc --noEmit"},"version":"0.10.0","_npmUser":{"name":"fabiofernandescarneiro","email":"fabiofernandescarneiro@gmail.com"},"homepage":"https://github.com/FabioFernandesCarneiro/alma#readme","_resolved":"/private/var/folders/zc/snhwcnp15dj2hk0k9_g1fh3h0000gn/T/d1d226225b4b29c26578f5c56246b46e/alma-harness-batch-0.10.0.tgz","_integrity":"sha512-GkZ2lv5vF1KQRfqid7+P5u6r+S/m1F3lqP9GjtUBtc/fu52qn7MtGTe1RCWq8n1PRONQlM3mLDmcU7uabYOy4Q==","repository":{"url":"git+https://github.com/FabioFernandesCarneiro/alma.git","type":"git","directory":"packages/batch"},"_npmVersion":"11.18.0","description":"Governed single-dispatch batch execution for Alma.","directories":{},"maintainers":[{"name":"fabiofernandescarneiro","email":"fabiofernandescarneiro@gmail.com"}],"_nodeVersion":"26.4.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"pg":"^8.16.3","vitest":"^3.2.4","@types/pg":"^8.15.4","typescript":"^5.9.2","@types/node":"^24.1.0","@alma-harness/core":"^0.10.0","@alma-harness/memory":"^0.10.0","@alma-harness/postgres":"^0.10.0","@alma-harness/execution":"^0.10.0","@alma-harness/postgres-execution":"^0.10.0"},"peerDependencies":{"@alma-harness/core":"^0.10.0","@alma-harness/execution":"^0.10.0"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/batch_0.10.0_1789675253936_0.40227745303172746"}}},"time":{"created":"2026-09-08T21:18:45.944Z","modified":"2026-09-17T20:00:54.250Z","0.6.0":"2026-09-08T21:18:46.219Z","0.6.1":"2026-09-08T22:17:11.066Z","0.7.0":"2026-09-11T14:30:33.178Z","0.8.0":"2026-09-11T19:33:42.814Z","0.9.0":"2026-09-17T14:36:35.540Z","0.10.0":"2026-09-17T20:00:54.066Z"},"bugs":{"url":"https://github.com/FabioFernandesCarneiro/alma/issues"},"license":"Apache-2.0","homepage":"https://github.com/FabioFernandesCarneiro/alma#readme","repository":{"url":"git+https://github.com/FabioFernandesCarneiro/alma.git","type":"git","directory":"packages/batch"},"description":"Governed single-dispatch batch execution for Alma.","maintainers":[{"name":"fabiofernandescarneiro","email":"fabiofernandescarneiro@gmail.com"}],"readme":"# @alma-harness/batch\n\nGoverned single-dispatch batch execution. Node >=22 and matching Alma\npackages are required. `createGovernedBatchRunner` composes BatchSubmissionStore,\nBatchUsageStore, BatchAccountingStore, ExecutionResultStore, governed settlement,\nsame-counter spend.peek, audit and SingleDispatchBatchClient capabilities.\n\nSupply immutable configRevision (including provider account selection), bounded\nrequest/output/aggregate sizes, runTimeoutMs <=5 minutes and onBackgroundError.\nThe host creates authorized complete manifests: scope/session, item identities,\noriginal prices/policy/controls, content/config revisions and result retention.\nThe host derives allowed tools/media/schema; this primitive does not route policy\nor execute handlers. Never accept manifests/scopes/handles from model output or\nunverified browser input. Changing config requires a new revision; old batches\nmust still resolve their original configuration, prices and provider account.\n\n`submit({input,rationale,loadItems,signal?})` reserves every result and awaits audit\nbefore loading content. Requests must match ordered IDs, model, batch tier and\ncontrols. Only the first durable dispatch:true response permits a provider attempt.\nEqual replay never loads input or submits again. The optional awaited onInputFile\nhook can retain upload references before create; without it no durable orphan-file\ninventory is claimed. Any ambiguous submission stays unresolved, even after expiry.\nNo fallback, automatic resubmission or lease takeover exists. Explicit provider\ncancellation is separate from submission ownership and settlement.\n\n`collect({scope,key},{signal?})` resolves the stored handle and collects every\nterminal status, including failed/expired/cancelled. Every observation is journaled\nbefore governed settlement and inclusive accounting. Those are the only financial\nwriters: neither SpendStore.add nor AuditLog.cost runs. Hashes deduplicate metadata\nobservations only; original manifest settlement identities own charges. Unknown,\nunpriced and contradictory evidence stays pending for explicit reconciliation.\n\nNew output is retained only after complete, independently validated EOF. Corrupt\nor missing tails cannot authorize partial new output. Content bounds/failures do\nnot stop known-usage drainage. `eof` describes this invocation, not a durable\ncompletion certificate. `reconciliationRequired` reports this collection's pending\nfinancial/content work. Existing output remains readable after a later failed GET.\nA crash between puts can require another GET, but never another model submission.\n\n`read({scope,key})` returns persisted metadata, inclusive financial evidence and\ncurrent retained item results; it makes no claim of EOF or delivery. Successful\n`output` is a backstage `governed-batch-v1` envelope with ordered neutral blocks and\nstop. Reasoning is not a public reply; the host validates its business schema and\nauthorizes any effects. Refusal/truncation/invalid/blocked/unavailable stay distinct.\nOriginal block decisions suppress successful outputs; missing aggregate receipts\nkeep block-mode success pending until those decisions can be evaluated; warn preserves them. Monetary\nwarnings are durable evidence, not calls to an external notification service.\n\n`reconcile({scope,key},query?)` repairs journaled finance without provider/content\naccess. It returns scanned/repaired/pending counts and afterId. Pages default50,\nmaximum100; restart future passes at the beginning. Already adopted observations\nmust still repair missing aggregate receipts, so default queries include them.\n\nResult retention begins at submission reservation. Collection never prepares a\nnew reservation, renews retention or resurrects erasure. Read/put respect the\noriginal binding; register result erasure/purge with the host. Successful public\nsubmit/collect promises are bounded by timeout/abort (submission also by its\noriginal deadline); cancellation does not prove dependency termination. Late\nacceptance/financial work is observed, and background failures report only scoped\nstage metadata. Permanent process loss cannot guarantee missing provider evidence.\n\nMigrate batch accounting (which composes submission, usage and governed costs),\nresults and audit before enabling this runner. PostgreSQL store deadlines still\napply to read/reconcile. Routines and channel/business delivery require their own\npersistent claims; this runner never sends real messages or certifies delivery.\nSee [spec](../../docs/specs/099-governed-batch-runner.md).\n\n## Status and cancellation (spec: governed-batch-cancellation-adoption)\n\n`status({scope,key},{signal?})` and `cancel({scope,key},{signal?})` resolve the\noriginal accepted handle under the runner's configuration. They reject missing\nhandles, foreign scope/configuration and unsupported cancellation before HTTP.\nThey remain available after the submission deadline, bounded by this invocation's\nrunTimeoutMs/signal. Neither loads input nor changes durable execution or finance.\n\nCancellation returns `{status:\"requested\",progress}`: one validated provider\nacknowledgement, not terminal cancellation or a refund. A failed/ambiguous request\nis never retried automatically; an explicit later call is another cancellation\nrequest. Continue explicit status/collection to account for completed items and\nretain unknown evidence. Closing a connection does not prove dependency termination.\n\n## Tool selection\n\nEach item's `execution.controls.toolChoice` must equal its loaded\n`request.toolChoice`. Supported neutral modes are auto, none, required and\n`{type:\"tool\",name}`; provider/model restrictions remain those documented by the\nproviders package. Named choices are validated against the actual authorized\nToolSpecs before dispatch, including with custom transport validators. Choice is\npart of immutable batch identity; changed choice conflicts without another input\nload or submission. Absence retains the old wire and replay contract.\n\nSuccessful extraction items preserve their `tool_use` stop and ordered `tool_call`\nblocks, alongside original financial receipts. Inspect outcome, stop, expected name\nand validate arguments before using them. Selection invokes no business handler\nor personal-memory write. Read/status/collect/reconcile/cancel never infer authority\nto submit again from missing content, unknown usage or an absent handle.\n","readmeFilename":"README.md"}