{"_id":"@affordance/core","_rev":"6-009d0f76217cbbc28b74ab3017338a09","name":"@affordance/core","dist-tags":{"latest":"0.6.0"},"versions":{"0.1.0":{"name":"@affordance/core","version":"0.1.0","keywords":["affordance","case-management","typescript","postgres"],"author":{"url":"https://mochicode.com","name":"Mochicode LLC"},"license":"MIT","_id":"@affordance/core@0.1.0","maintainers":[{"name":"affordance","email":"jin@mochicode.com"}],"homepage":"https://github.com/mochicodecom/affordance#readme","bugs":{"url":"https://github.com/mochicodecom/affordance/issues"},"dist":{"shasum":"064ffdbc88333261d3d6b2a1dddd20923fa22cee","tarball":"https://registry.npmjs.org/@affordance/core/-/core-0.1.0.tgz","fileCount":126,"integrity":"sha512-1eD09U7rKmeOvFWoCEBcx2vszJE/3cfar7gFiNkAbfJfdMUC0aO6baAxxROO3h/M+s8j/RDyNjkWjIrNtz0QeA==","signatures":[{"sig":"MEUCIDOQQfb/ZLGdqNXBDf+QV1b1ON+T/usHdqtVQxQEGE9CAiEAw/LbdLv3PUJPxYLVJ+tCsVjkXuMCL0G1YCWMTbvZohE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":650621},"main":"./dist/index.js","type":"module","_from":"file:/Users/jwshin/mochicode/affordance/dist/npm/affordance-core-0.1.0.tgz","types":"./dist/index.d.ts","engines":{"node":">=22.12"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"test":"vitest run","build":"node ../../scripts/build-package.mjs","typecheck":"tsc --noEmit"},"_npmUser":{"name":"affordance","email":"jin@mochicode.com"},"_resolved":"/Users/jwshin/mochicode/affordance/dist/npm/affordance-core-0.1.0.tgz","_integrity":"sha512-1eD09U7rKmeOvFWoCEBcx2vszJE/3cfar7gFiNkAbfJfdMUC0aO6baAxxROO3h/M+s8j/RDyNjkWjIrNtz0QeA==","repository":{"url":"git+https://github.com/mochicodecom/affordance.git","type":"git","directory":"packages/core"},"_npmVersion":"11.19.0","description":"Adaptive case management with guarded steps, async execution, and a Postgres journal.","directories":{},"_nodeVersion":"26.8.1","dependencies":{"@types/pg":"^8.11.10","@affordance/contract":"0.1.0","@standard-schema/spec":"^1.1.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"pg":"^8.13.1","zod":"^4.4.3","vitest":"^3.2.0","typescript":"^5.7.2","@types/node":"^24.0.0","@affordance/testkit":"0.0.0"},"_npmOperationalInternal":{"tmp":"tmp/core_0.1.0_1788743528691_0.7335002676844924","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@affordance/core","version":"0.2.0","keywords":["affordance","case-management","typescript"],"author":{"url":"https://mochicode.com","name":"Mochicode LLC"},"license":"MIT","_id":"@affordance/core@0.2.0","maintainers":[{"name":"affordance","email":"jin@mochicode.com"}],"homepage":"https://github.com/mochicodecom/affordance#readme","bugs":{"url":"https://github.com/mochicodecom/affordance/issues"},"dist":{"shasum":"86f26423dba0baf6817ffabcfebcb8db37e203d7","tarball":"https://registry.npmjs.org/@affordance/core/-/core-0.2.0.tgz","fileCount":117,"integrity":"sha512-PjeprllMiDK0cXRrO6isFibeO0VZF8dMLF0jcrLBetd/XCdEbL5cUEktJrB6bkD43EymFyL9z/jP+5qTIvqGOQ==","signatures":[{"sig":"MEUCIBB/zvTWfmYVM/++/NRUw1+4JOMcXbaEb3ei9KPkTuliAiEA6BjB9Cban2/uo6o6Sgzi+XE80NGjManwhcf59xzjj3c=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@affordance%2fcore@0.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":549921},"main":"./dist/index.js","type":"module","_from":"file:/home/runner/work/affordance/affordance/dist/npm/affordance-core-0.2.0.tgz","types":"./dist/index.d.ts","engines":{"node":">=22.12"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./storage":{"types":"./dist/storage.d.ts","import":"./dist/storage.js"}},"scripts":{"test":"vitest run","build":"node ../../scripts/build-package.mjs","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:56034c47-a19d-4742-89c1-25e7334e3c61"}},"_resolved":"/home/runner/work/affordance/affordance/dist/npm/affordance-core-0.2.0.tgz","_integrity":"sha512-PjeprllMiDK0cXRrO6isFibeO0VZF8dMLF0jcrLBetd/XCdEbL5cUEktJrB6bkD43EymFyL9z/jP+5qTIvqGOQ==","repository":{"url":"git+https://github.com/mochicodecom/affordance.git","type":"git","directory":"packages/core"},"_npmVersion":"11.19.1","description":"Adaptive case management with guarded steps, async execution, and pluggable storage.","directories":{},"_nodeVersion":"24.20.0","dependencies":{"@standard-schema/spec":"^1.1.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"zod":"^4.4.3","vitest":"^3.2.0","typescript":"^5.7.2","@types/node":"^24.0.0","@affordance/testkit":"0.0.0"},"_npmOperationalInternal":{"tmp":"tmp/core_0.2.0_1788927124723_0.5105462588093777","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@affordance/core","version":"0.3.0","keywords":["affordance","case-management","typescript"],"author":{"url":"https://mochicode.com","name":"Mochicode LLC"},"license":"MIT","_id":"@affordance/core@0.3.0","maintainers":[{"name":"affordance","email":"jin@mochicode.com"}],"homepage":"https://github.com/mochicodecom/affordance#readme","bugs":{"url":"https://github.com/mochicodecom/affordance/issues"},"dist":{"shasum":"90e5145e32064319d5ca3b9e76808db7ebac137e","tarball":"https://registry.npmjs.org/@affordance/core/-/core-0.3.0.tgz","fileCount":120,"integrity":"sha512-ZZKsh3CWFPI2pELW5xFR2R6yVFrR34gXIc27Htn7F397C6/puZ3ealI04ak/Ji3R2IK7LO98sW+pz1FKXcRDNQ==","signatures":[{"sig":"MEUCIQDd+qLg/NnQA7ocjqewIKjpiXY4Faxq6/XWl5xa29PdqgIgeT82yh+pEOgVTljjnJcBktAItBh9d83kaEJNO4LLpRA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQD2EKw9RCyCR0XbM76IH6IbK9sXDrZmefHdYnAtSmvuiwIhAN0aoAsbBiF04m0h/dYH8rYRAS/yyExtWnpD/kDygAAr","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@affordance%2fcore@0.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":582167},"main":"./dist/index.js","type":"module","_from":"file:/home/runner/work/affordance/affordance/dist/npm/affordance-core-0.3.0.tgz","types":"./dist/index.d.ts","engines":{"node":">=22.12"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./storage":{"types":"./dist/storage.d.ts","import":"./dist/storage.js"}},"scripts":{"test":"vitest run","build":"node ../../scripts/build-package.mjs","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:56034c47-a19d-4742-89c1-25e7334e3c61"}},"_resolved":"/home/runner/work/affordance/affordance/dist/npm/affordance-core-0.3.0.tgz","_integrity":"sha512-ZZKsh3CWFPI2pELW5xFR2R6yVFrR34gXIc27Htn7F397C6/puZ3ealI04ak/Ji3R2IK7LO98sW+pz1FKXcRDNQ==","repository":{"url":"git+https://github.com/mochicodecom/affordance.git","type":"git","directory":"packages/core"},"_npmVersion":"11.19.1","description":"Adaptive case management with guarded steps, async execution, and pluggable storage.","directories":{},"_nodeVersion":"24.20.0","dependencies":{"superjson":"^2.2.6","@standard-schema/spec":"^1.1.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"zod":"^4.4.3","vitest":"^3.2.0","typescript":"^5.7.2","@types/node":"^24.0.0","@affordance/testkit":"0.0.0"},"_npmOperationalInternal":{"tmp":"tmp/core_0.3.0_1789174848436_0.6780227700018591","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@affordance/core","version":"0.4.0","keywords":["affordance","case-management","typescript"],"author":{"url":"https://mochicode.com","name":"Mochicode LLC"},"license":"MIT","_id":"@affordance/core@0.4.0","maintainers":[{"name":"affordance","email":"jin@mochicode.com"}],"homepage":"https://github.com/mochicodecom/affordance#readme","bugs":{"url":"https://github.com/mochicodecom/affordance/issues"},"dist":{"shasum":"93685bc02dc28954bfd089ae940146d1919b29de","tarball":"https://registry.npmjs.org/@affordance/core/-/core-0.4.0.tgz","fileCount":108,"integrity":"sha512-Wd8j/y/sx2ETJA4E0z9s+UwQvHZ4v+9LEoZGeQSFrcPpC1B/xUhMP5wmgjRDwsL/TMAp1bpxZfggjEcvaKUKPw==","signatures":[{"sig":"MEQCIG9nyX3/Zp3i+YMaWW9s2+5rr2YbVxPGszb50JWDy0S4AiBvY68LXLFpwbsghzD0wwynjf2Tcrx0EiUSvK8zcruPvA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCpNoBxL4nAu0L2wwoe9wrwM4afXw6y07m9Fuxmqa8wYQIhAKKWIjzbNvL2avCovGHX3VJbDPZ1HFwh6zTnYE/s9Sk8","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@affordance%2fcore@0.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":454055},"main":"./dist/index.js","type":"module","_from":"file:/home/runner/work/affordance/affordance/dist/npm/affordance-core-0.4.0.tgz","types":"./dist/index.d.ts","engines":{"node":">=22.12"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./storage":{"types":"./dist/storage.d.ts","import":"./dist/storage.js"}},"scripts":{"test":"vitest run","build":"node ../../scripts/build-package.mjs","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:56034c47-a19d-4742-89c1-25e7334e3c61"}},"_resolved":"/home/runner/work/affordance/affordance/dist/npm/affordance-core-0.4.0.tgz","_integrity":"sha512-Wd8j/y/sx2ETJA4E0z9s+UwQvHZ4v+9LEoZGeQSFrcPpC1B/xUhMP5wmgjRDwsL/TMAp1bpxZfggjEcvaKUKPw==","repository":{"url":"git+https://github.com/mochicodecom/affordance.git","type":"git","directory":"packages/core"},"_npmVersion":"11.19.1","description":"Adaptive case management with guarded steps, async execution, and pluggable storage.","directories":{},"_nodeVersion":"24.20.0","dependencies":{"superjson":"^2.2.6","@standard-schema/spec":"^1.1.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"zod":"^4.4.3","vitest":"^3.2.0","typescript":"^5.7.2","@types/node":"^24.0.0","@affordance/testkit":"0.0.0"},"_npmOperationalInternal":{"tmp":"tmp/core_0.4.0_1789337358883_0.09684788379944242","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@affordance/core","version":"0.5.0","keywords":["affordance","case-management","typescript"],"author":{"url":"https://mochicode.com","name":"Mochicode LLC"},"license":"MIT","_id":"@affordance/core@0.5.0","maintainers":[{"name":"affordance","email":"jin@mochicode.com"}],"homepage":"https://github.com/mochicodecom/affordance#readme","bugs":{"url":"https://github.com/mochicodecom/affordance/issues"},"dist":{"shasum":"21516aca7af3e28e88fbfce2e2858536792e895b","tarball":"https://registry.npmjs.org/@affordance/core/-/core-0.5.0.tgz","fileCount":111,"integrity":"sha512-b99jKTDMx5XCfLW48+bEx34cFW86IxKbWkKdUZQsdK2/rO2LhDM/R9q1s/WywNfMMqVaYjJmbB2z1t/bb3ZL0Q==","signatures":[{"sig":"MEUCIBTMeJm2uAdeuVi4/9DS/9qtNmJpgzRuCJexNkLKPaDKAiEAojc65AWNtV4GP1LMdXoSVRyBwEE4MpoVwjSjjehuPQ4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDezwvAaKqvdswVO6swNrmLcfuzK63Wgc7lOXbiS+hsTgIgW+bxy/jcJfwbiwLWGG3xMC4cipPQwnFz6vSPDt9FSDU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@affordance%2fcore@0.5.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":466068},"main":"./dist/index.js","type":"module","_from":"file:/home/runner/work/affordance/affordance/dist/npm/affordance-core-0.5.0.tgz","types":"./dist/index.d.ts","engines":{"node":">=22.12"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./storage":{"types":"./dist/storage.d.ts","import":"./dist/storage.js"}},"scripts":{"test":"vitest run","build":"node ../../scripts/build-package.mjs","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:56034c47-a19d-4742-89c1-25e7334e3c61"}},"_resolved":"/home/runner/work/affordance/affordance/dist/npm/affordance-core-0.5.0.tgz","_integrity":"sha512-b99jKTDMx5XCfLW48+bEx34cFW86IxKbWkKdUZQsdK2/rO2LhDM/R9q1s/WywNfMMqVaYjJmbB2z1t/bb3ZL0Q==","repository":{"url":"git+https://github.com/mochicodecom/affordance.git","type":"git","directory":"packages/core"},"_npmVersion":"11.19.1","description":"Adaptive case management with guarded steps, async execution, and pluggable storage.","directories":{},"_nodeVersion":"24.20.0","dependencies":{"superjson":"^2.2.6","@standard-schema/spec":"^1.1.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"zod":"^4.4.3","vitest":"^3.2.0","typescript":"^5.7.2","@types/node":"^24.0.0","@affordance/testkit":"0.0.0"},"_npmOperationalInternal":{"tmp":"tmp/core_0.5.0_1789620849832_0.7491224991720213","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"_id":"@affordance/core@0.6.0","bugs":{"url":"https://github.com/mochicodecom/affordance/issues"},"dist":{"shasum":"951f06492dfebd5ee157d370af53857d278e3635","tarball":"https://registry.npmjs.org/@affordance/core/-/core-0.6.0.tgz","fileCount":117,"integrity":"sha512-rd8Drd/ce8m2Oz1DFuS3tiALIJYvQtdFAv53Qz2wqCyVD1hcgsu59ObBJ19tN32U0hlOG5sz2490fiZ2UjunhA==","signatures":[{"sig":"MEYCIQDh019jrguyDXEqMMyCL+455t5k0tdW7XblE6AE7NTkwAIhAIwPQQdd+AKGS+mHBrDgk5ugFp5jtocmWKagAKfs1gug","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCFOX60qcrKDAgfJEB4pNxR36z0SCjB160V4vqyOTzICAIgMNsvMV2ONv4TEEwdyaYubPzDgDLvJ8V8zScu6+aycVo="}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@affordance%2fcore@0.6.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":479171},"main":"./dist/index.js","name":"@affordance/core","type":"module","_from":"file:/home/runner/work/affordance/affordance/dist/npm/affordance-core-0.6.0.tgz","types":"./dist/index.d.ts","author":{"url":"https://mochicode.com","name":"Mochicode LLC"},"engines":{"node":">=22.12"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./storage":{"types":"./dist/storage.d.ts","import":"./dist/storage.js"}},"license":"MIT","scripts":{"test":"vitest run","build":"node ../../scripts/build-package.mjs","typecheck":"tsc --noEmit"},"version":"0.6.0","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:56034c47-a19d-4742-89c1-25e7334e3c61"}},"homepage":"https://github.com/mochicodecom/affordance#readme","keywords":["affordance","case-management","typescript"],"_resolved":"/home/runner/work/affordance/affordance/dist/npm/affordance-core-0.6.0.tgz","_integrity":"sha512-rd8Drd/ce8m2Oz1DFuS3tiALIJYvQtdFAv53Qz2wqCyVD1hcgsu59ObBJ19tN32U0hlOG5sz2490fiZ2UjunhA==","repository":{"url":"git+https://github.com/mochicodecom/affordance.git","type":"git","directory":"packages/core"},"_npmVersion":"11.19.1","description":"Adaptive case management with guarded steps, async execution, and pluggable storage.","directories":{},"maintainers":[{"name":"affordance","email":"jin@mochicode.com"}],"_nodeVersion":"24.20.0","dependencies":{"superjson":"^2.2.6","@standard-schema/spec":"^1.1.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"zod":"^4.4.3","vitest":"^3.2.0","typescript":"^5.7.2","@types/node":"^24.0.0","@affordance/testkit":"0.0.0"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/core_0.6.0_1789671213930_0.08196736732717369"}}},"time":{"created":"2026-09-07T01:12:08.519Z","modified":"2026-09-17T18:53:34.355Z","0.1.0":"2026-09-07T01:12:08.869Z","0.2.0":"2026-09-09T04:12:04.876Z","0.3.0":"2026-09-12T01:00:48.523Z","0.4.0":"2026-09-13T22:09:18.989Z","0.5.0":"2026-09-17T04:54:09.941Z","0.6.0":"2026-09-17T18:53:34.033Z"},"bugs":{"url":"https://github.com/mochicodecom/affordance/issues"},"author":{"url":"https://mochicode.com","name":"Mochicode LLC"},"license":"MIT","homepage":"https://github.com/mochicodecom/affordance#readme","keywords":["affordance","case-management","typescript"],"repository":{"url":"git+https://github.com/mochicodecom/affordance.git","type":"git","directory":"packages/core"},"description":"Adaptive case management with guarded steps, async execution, and pluggable storage.","maintainers":[{"name":"affordance","email":"jin@mochicode.com"}],"readme":"# @affordance/core\n\nCompute available work from current domain facts and actor permissions. A Step's\nhandler owns persistence, transactions, final business admission and external\ncalls. Affordance validates state/input, evaluates Guards and invokes it once.\n\n```ts\nimport { actor, caseType, createBackgroundRuntime, createEngine, stepsOf } from '@affordance/core'\nimport { z } from 'zod'\n\nconst State = z.object({ ein: z.string().nullable() })\nconst step = stepsOf(State, actor<{ id: string }>())\nconst definition = caseType({\n  name: 'deal', state: State,\n  steps: [\n    step({\n      name: 'record-ein', input: z.object({ ein: z.string() }),\n      handler: async ({ reference, actor, input, state }) => {\n        const saved = await deals.recordEin(reference, actor, input)\n        return { ...state, ein: saved.ein } // Already persisted; evidence only.\n      },\n    }),\n    step({\n      name: 'notify',\n      handler: async ({ reference, executionId }) => {\n        await notifications.send(reference, { executionId })\n        // No return: success without a diff journal.\n      },\n    }),\n  ],\n})\n\n// Bind an authoritative loader using your adapter, e.g. storage.bindCase(definition, { load }).\nconst runtime = createBackgroundRuntime()\nconst engine = createEngine({\n  storage, caseTypes: [binding],\n  operations: { journalTimeoutMs: 1000 },\n  launch: { runtime, leaseMs: 60_000 },\n})\nconst result = await engine.run(caseId, 'record-ein', { actor, input: { ein: '12-3456789' } })\n// result.journal.status: 'skipped' | 'recorded' | 'failed'\nconst { executionId } = await engine.launch(caseId, 'notify', { actor })\nconst execution = await engine.getExecution(executionId)\n// running | completed | unresolved | resolved; null for unknown IDs and ordinary runs.\nawait runtime.drain() // Stop new launches and await owned tasks during application shutdown.\n```\n\n`run` waits for handler completion and a bounded optional journal attempt. `launch`\nreturns after handler entry while the runtime owns the remaining work. Both use\nthe same `Promise<State | void>` contract and handler context. There are no injected\nrepositories, transaction callbacks, or completion wrappers. `undefined` skips\nthe journal; a valid State produces an `observed` diff, even if unchanged.\nReturned State never becomes current Case State. Subsequent reads use the binding.\n\nA thrown handler error propagates unchanged from `run`; committed effects may\nalready exist. A launched handler error appears as unresolved status. Invalid\nevidence and journal failure do not reverse successful handler completion or\nretry business code. The journal timeout includes adapter acquisition wait.\nAn already-started write may finish late under the original execution ID.\n\nThe supplied runtime is for a long-lived Node process and keeps outstanding tasks\nalive until they settle. It cannot survive process death or a serverless host\nfreezing after a request. Such hosts need an independently owned runtime with a\nreal handler-entry acknowledgment. A queue acceptance alone is insufficient.\nThere is no replay, heartbeat, automatic retry, compensation or recovery worker.\n\nLaunch ownership excludes other participating launches for the same Case.\nExpiration leaves a block until application/operator reconciliation:\n\n```ts\nawait engine.resolveExecution(executionId, { actor, reason: 'Reconciled with provider' })\n```\n\nResolution is not cancellation. Leases do not fence domain or provider writes;\nan old handler can still write after expiry or resolution. Ordinary runs and\nunrelated writers do not participate. The host must authorize status and resolution.\n\nSafe actor attribution defaults to a string actor or string `actor.id`, otherwise\nnull. Configure `operations.actorIdentity` for another string identity. Request\ninput and authentication objects are not journaled by this pipeline. Define Case\nState as the intended journal projection; schema validation applies before and\nafter. Keep credentials and unrelated data out of that schema.\n\nThis breaking beta removes `execute`, `executeNonAtomic`, transaction-bound\nhandler repositories and the atomic adapter port. Framework journal/lease data\nis not migrated. See [architecture](https://github.com/mochicodecom/affordance/blob/main/docs/architecture.md).\n","readmeFilename":"README.md"}