@forgeax/engine-ddc 0.1.20 → 0.1.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.tsbuildinfo +1 -1
- package/dist/index.mjs +3 -2
- package/dist/index.mjs.map +1 -1
- package/dist/lifecycle.d.ts.map +1 -1
- package/package.json +2 -2
- package/src/__tests__/lifecycle.unit.test.ts +27 -1
- package/src/lifecycle.ts +6 -2
package/dist/.tsbuildinfo
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"fileNames":["../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es5.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2016.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2018.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2019.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2021.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.dom.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.dom.iterable.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.core.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.collection.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.generator.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.promise.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2016.intl.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.date.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.object.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.string.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.intl.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2018.intl.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2018.promise.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2019.array.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2019.object.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2019.string.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2019.intl.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.date.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.promise.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.string.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.intl.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.number.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2021.promise.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2021.string.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2021.intl.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.array.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.error.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.intl.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.object.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.string.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.regexp.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.decorators.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.decorators.legacy.d.ts","../src/key.ts","../src/build-cache.ts","../src/errors.ts","../src/entry-store.ts","../src/lifecycle.ts","../src/gc.ts","../src/layout.ts","../../types/dist/animation-target.d.ts","../../types/dist/asset-errors.d.ts","../../types/dist/result.d.ts","../../types/dist/asset-evidence.d.ts","../../types/dist/asset.d.ts","../../types/dist/material/color-space.d.ts","../../types/dist/material/asset.d.ts","../../types/dist/vfx.d.ts","../../types/dist/asset-runtime.d.ts","../../types/dist/handle.d.ts","../../types/dist/material/errors.d.ts","../../types/dist/material/resolve.d.ts","../../types/dist/material/index.d.ts","../../types/dist/asset-producer.d.ts","../../types/dist/catalog.d.ts","../../types/dist/runtime-scope.d.ts","../../types/dist/texture/asset.d.ts","../../types/dist/texture/errors.d.ts","../../types/dist/texture/layout.d.ts","../../types/dist/texture/index.d.ts","../../types/dist/derive-paramschema.d.ts","../../types/dist/import.d.ts","../../types/dist/index.d.ts","../src/publication.ts","../src/runtime-scope.ts","../src/session.ts","../src/status.ts","../src/index.ts","../../../node_modules/.pnpm/@vitest+pretty-format@4.1.11/node_modules/@vitest/pretty-format/dist/index.d.ts","../../../node_modules/.pnpm/@vitest+utils@4.1.11/node_modules/@vitest/utils/dist/display.d.ts","../../../node_modules/.pnpm/@vitest+utils@4.1.11/node_modules/@vitest/utils/dist/types.d.ts","../../../node_modules/.pnpm/@vitest+utils@4.1.11/node_modules/@vitest/utils/dist/helpers.d.ts","../../../node_modules/.pnpm/@vitest+utils@4.1.11/node_modules/@vitest/utils/dist/timers.d.ts","../../../node_modules/.pnpm/@vitest+utils@4.1.11/node_modules/@vitest/utils/dist/index.d.ts","../../../node_modules/.pnpm/@vitest+utils@4.1.11/node_modules/@vitest/utils/dist/types.d-BCElaP-c.d.ts","../../../node_modules/.pnpm/@vitest+utils@4.1.11/node_modules/@vitest/utils/dist/diff.d.ts","../../../node_modules/.pnpm/@vitest+runner@4.1.11/node_modules/@vitest/runner/dist/tasks.d-DEYaIMIu.d.ts","../../../node_modules/.pnpm/@vitest+runner@4.1.11/node_modules/@vitest/runner/dist/index.d.ts","../../../node_modules/.pnpm/vitest@4.1.11_@types+node@20.19.40_@vitest+browser-playwright@4.1.11_@vitest+coverage-v_127da6c4db5f633b4e0a459eab2c3062/node_modules/vitest/dist/chunks/traces.d.D2T_R8rx.d.ts","../../../node_modules/.pnpm/vite@8.0.10_@types+node@20.19.40_esbuild@0.27.7_jiti@1.21.7/node_modules/vite/types/hmrPayload.d.ts","../../../node_modules/.pnpm/vite@8.0.10_@types+node@20.19.40_esbuild@0.27.7_jiti@1.21.7/node_modules/vite/dist/node/chunks/moduleRunnerTransport.d.ts","../../../node_modules/.pnpm/vite@8.0.10_@types+node@20.19.40_esbuild@0.27.7_jiti@1.21.7/node_modules/vite/types/customEvent.d.ts","../../../node_modules/.pnpm/vite@8.0.10_@types+node@20.19.40_esbuild@0.27.7_jiti@1.21.7/node_modules/vite/types/hot.d.ts","../../../node_modules/.pnpm/vite@8.0.10_@types+node@20.19.40_esbuild@0.27.7_jiti@1.21.7/node_modules/vite/dist/node/module-runner.d.ts","../../../node_modules/.pnpm/@vitest+snapshot@4.1.11/node_modules/@vitest/snapshot/dist/environment.d-DOJxxZV9.d.ts","../../../node_modules/.pnpm/@vitest+snapshot@4.1.11/node_modules/@vitest/snapshot/dist/rawSnapshot.d-D_X3-62x.d.ts","../../../node_modules/.pnpm/@vitest+snapshot@4.1.11/node_modules/@vitest/snapshot/dist/index.d.ts","../../../node_modules/.pnpm/vitest@4.1.11_@types+node@20.19.40_@vitest+browser-playwright@4.1.11_@vitest+coverage-v_127da6c4db5f633b4e0a459eab2c3062/node_modules/vitest/dist/chunks/config.d.A1h_Y6Jt.d.ts","../../../node_modules/.pnpm/vitest@4.1.11_@types+node@20.19.40_@vitest+browser-playwright@4.1.11_@vitest+coverage-v_127da6c4db5f633b4e0a459eab2c3062/node_modules/vitest/dist/chunks/environment.d.CrsxCzP1.d.ts","../../../node_modules/.pnpm/vitest@4.1.11_@types+node@20.19.40_@vitest+browser-playwright@4.1.11_@vitest+coverage-v_127da6c4db5f633b4e0a459eab2c3062/node_modules/vitest/dist/chunks/rpc.d.B_8sPU0w.d.ts","../../../node_modules/.pnpm/vitest@4.1.11_@types+node@20.19.40_@vitest+browser-playwright@4.1.11_@vitest+coverage-v_127da6c4db5f633b4e0a459eab2c3062/node_modules/vitest/dist/chunks/worker.d.ZpHpO4yb.d.ts","../../../node_modules/.pnpm/vitest@4.1.11_@types+node@20.19.40_@vitest+browser-playwright@4.1.11_@vitest+coverage-v_127da6c4db5f633b4e0a459eab2c3062/node_modules/vitest/dist/chunks/browser.d.BcoexmFG.d.ts","../../../node_modules/.pnpm/@vitest+spy@4.1.11/node_modules/@vitest/spy/optional-types.d.ts","../../../node_modules/.pnpm/@vitest+spy@4.1.11/node_modules/@vitest/spy/dist/index.d.ts","../../../node_modules/.pnpm/tinyrainbow@3.1.0/node_modules/tinyrainbow/dist/index.d.ts","../../../node_modules/.pnpm/@standard-schema+spec@1.1.0/node_modules/@standard-schema/spec/dist/index.d.ts","../../../node_modules/.pnpm/@types+deep-eql@4.0.2/node_modules/@types/deep-eql/index.d.ts","../../../node_modules/.pnpm/assertion-error@2.0.1/node_modules/assertion-error/index.d.ts","../../../node_modules/.pnpm/@types+chai@5.2.3/node_modules/@types/chai/index.d.ts","../../../node_modules/.pnpm/@vitest+expect@4.1.11/node_modules/@vitest/expect/dist/index.d.ts","../../../node_modules/.pnpm/@vitest+runner@4.1.11/node_modules/@vitest/runner/dist/utils.d.ts","../../../node_modules/.pnpm/tinybench@2.9.0/node_modules/tinybench/dist/index.d.ts","../../../node_modules/.pnpm/vitest@4.1.11_@types+node@20.19.40_@vitest+browser-playwright@4.1.11_@vitest+coverage-v_127da6c4db5f633b4e0a459eab2c3062/node_modules/vitest/dist/chunks/benchmark.d.DAaHLpsq.d.ts","../../../node_modules/.pnpm/vitest@4.1.11_@types+node@20.19.40_@vitest+browser-playwright@4.1.11_@vitest+coverage-v_127da6c4db5f633b4e0a459eab2c3062/node_modules/vitest/dist/chunks/global.d.DVsSRdQ5.d.ts","../../../node_modules/.pnpm/vitest@4.1.11_@types+node@20.19.40_@vitest+browser-playwright@4.1.11_@vitest+coverage-v_127da6c4db5f633b4e0a459eab2c3062/node_modules/vitest/optional-runtime-types.d.ts","../../../node_modules/.pnpm/@vitest+mocker@4.1.11_vite@8.0.10_@types+node@20.19.40_esbuild@0.27.7_jiti@1.21.7_/node_modules/@vitest/mocker/dist/types.d-BjI5eAwu.d.ts","../../../node_modules/.pnpm/@vitest+mocker@4.1.11_vite@8.0.10_@types+node@20.19.40_esbuild@0.27.7_jiti@1.21.7_/node_modules/@vitest/mocker/dist/index.d-B41z0AuW.d.ts","../../../node_modules/.pnpm/@vitest+mocker@4.1.11_vite@8.0.10_@types+node@20.19.40_esbuild@0.27.7_jiti@1.21.7_/node_modules/@vitest/mocker/dist/index.d.ts","../../../node_modules/.pnpm/vitest@4.1.11_@types+node@20.19.40_@vitest+browser-playwright@4.1.11_@vitest+coverage-v_127da6c4db5f633b4e0a459eab2c3062/node_modules/vitest/dist/chunks/suite.d.udJtyAgw.d.ts","../../../node_modules/.pnpm/vitest@4.1.11_@types+node@20.19.40_@vitest+browser-playwright@4.1.11_@vitest+coverage-v_127da6c4db5f633b4e0a459eab2c3062/node_modules/vitest/dist/chunks/evaluatedModules.d.BxJ5omdx.d.ts","../../../node_modules/.pnpm/vitest@4.1.11_@types+node@20.19.40_@vitest+browser-playwright@4.1.11_@vitest+coverage-v_127da6c4db5f633b4e0a459eab2c3062/node_modules/vitest/dist/runners.d.ts","../../../node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/utils.d.ts","../../../node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/overloads.d.ts","../../../node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/branding.d.ts","../../../node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/messages.d.ts","../../../node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/index.d.ts","../../../node_modules/.pnpm/vitest@4.1.11_@types+node@20.19.40_@vitest+browser-playwright@4.1.11_@vitest+coverage-v_127da6c4db5f633b4e0a459eab2c3062/node_modules/vitest/dist/index.d.ts","../src/__tests__/concurrency.integration.test.ts","../src/__tests__/consumer-path.integration.test.ts","../src/__tests__/crash-recovery.integration.test.ts","../src/__tests__/entry-store.integration.test.ts","../src/__tests__/errors.unit.test.ts","../src/__tests__/generation-session.integration.test.ts","../src/__tests__/generation-session.unit.test.ts","../src/__tests__/key.unit.test.ts","../src/__tests__/layout.unit.test.ts","../src/__tests__/lifecycle.unit.test.ts","../src/__tests__/multiprocess-gc.integration.test.ts","../src/__tests__/multiprocess-worker.ts","../src/__tests__/multiprocess-lifecycle.integration.test.ts","../src/__tests__/owner-chain.integration.test.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/compatibility/disposable.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/compatibility/indexable.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/compatibility/iterators.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/compatibility/index.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/globals.typedarray.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/buffer.buffer.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/globals.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/web-globals/abortcontroller.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/web-globals/domexception.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/web-globals/events.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/header.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/readable.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/file.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/fetch.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/formdata.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/connector.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/client.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/errors.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/dispatcher.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/global-dispatcher.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/global-origin.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/pool-stats.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/pool.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/handlers.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/balanced-pool.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/agent.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-interceptor.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-agent.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-client.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-pool.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-errors.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/proxy-agent.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/env-http-proxy-agent.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/retry-handler.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/retry-agent.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/api.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/interceptors.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/util.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/cookies.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/patch.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/websocket.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/eventsource.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/filereader.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/diagnostics-channel.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/content-type.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/cache.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/index.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/web-globals/fetch.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/assert.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/assert/strict.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/async_hooks.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/buffer.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/child_process.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/cluster.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/console.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/constants.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/crypto.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/dgram.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/diagnostics_channel.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/dns.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/dns/promises.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/domain.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/events.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/fs.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/fs/promises.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/http.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/http2.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/https.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/inspector.generated.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/module.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/net.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/os.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/path.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/perf_hooks.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/process.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/punycode.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/querystring.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/readline.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/readline/promises.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/repl.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/sea.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/stream.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/stream/promises.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/stream/consumers.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/stream/web.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/string_decoder.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/test.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/timers.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/timers/promises.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/tls.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/trace_events.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/tty.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/url.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/util.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/v8.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/vm.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/wasi.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/worker_threads.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/zlib.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/index.d.ts","../src/__tests__/status-root-kind-owner.test-d.ts","../src/__tests__/status.unit.test.ts"],"fileIdsList":[[163,209],[123,124,163,209],[163,206,209],[163,208,209],[209],[163,209,214,242],[163,209,210,215,220,228,239,250],[163,209,210,211,220,228],[158,159,160,163,209],[163,209,212,251],[163,209,213,214,221,229],[163,209,214,239,247],[163,209,215,217,220,228],[163,208,209,216],[163,209,217,218],[163,209,219,220],[163,208,209,220],[163,209,220,221,222,239,250],[163,209,220,221,222,235,239,242],[163,209,217,220,223,228,239,250],[163,209,220,221,223,224,228,239,247,250],[163,209,223,225,239,247,250],[161,162,163,164,165,166,167,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256],[163,209,220,226],[163,209,227,250,255],[163,209,217,220,228,239],[163,209,229],[163,209,230],[163,208,209,231],[163,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256],[163,209,233],[163,209,234],[163,209,220,235,236],[163,209,235,237,251,253],[163,209,220,239,240,242],[163,209,241,242],[163,209,239,240],[163,209,242],[163,209,243],[163,206,209,239,244],[163,209,220,245,246],[163,209,245,246],[163,209,214,228,239,247],[163,209,248],[163,209,228,249],[163,209,223,234,250],[163,209,214,251],[163,209,239,252],[163,209,227,253],[163,209,254],[163,204,209],[163,204,209,220,222,231,239,242,250,253,255],[163,209,239,256],[96,102,120,121,122,125,163,209],[132,163,209],[132,133,163,209],[100,102,103,163,209],[100,102,163,209],[100,163,209],[95,100,111,112,163,209],[95,100,111,163,209],[119,163,209],[95,101,163,209],[95,163,209],[97,163,209],[95,96,97,98,99,163,209],[138,139,163,209],[138,139,140,141,163,209],[138,140,163,209],[138,163,209],[163,176,180,209,250],[163,176,209,239,250],[163,171,209],[163,173,176,209,247,250],[163,209,228,247],[163,209,257],[163,171,209,257],[163,173,176,209,228,250],[163,168,169,172,175,209,220,239,250],[163,176,183,209],[163,168,174,209],[163,176,197,198,209],[163,172,176,209,242,250,257],[163,197,209,257],[163,170,171,209,257],[163,176,209],[163,170,171,172,173,174,175,176,177,178,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,198,199,200,201,202,203,209],[163,176,191,209],[163,176,183,184,209],[163,174,176,184,185,209],[163,175,209],[163,168,171,176,209],[163,176,180,184,185,209],[163,180,209],[163,174,176,179,209,250],[163,168,173,176,183,209],[163,209,239],[163,171,176,197,209,255,257],[106,163,209],[106,107,108,109,163,209],[108,163,209],[104,127,128,130,163,209],[104,105,117,130,163,209],[95,102,104,105,113,130,163,209],[110,163,209],[95,104,105,113,126,129,130,163,209],[104,105,110,113,130,163,209],[104,127,128,129,130,163,209],[104,110,114,115,116,130,163,209],[95,100,102,104,105,110,113,114,115,116,117,118,120,126,127,128,129,130,131,134,135,136,137,142,163,209],[95,102,104,105,113,114,127,128,129,130,135,163,209],[63,143,163,209,222,229,230],[63,64,143,163,209,222,229,230],[62,143,163,209],[63,64,92,143,163,209,222,229,230],[92,143,163,209,222,229,230],[60,143,163,209],[66,143,163,209],[62,63,64,143,163,209,222,229,230],[65,91,143,163,209,222,229,230],[143,155,163,209,222,229,230,250],[163,209,210],[63,92,143,163,209,222,229,230],[62,94,143,163,209,221,257],[93,143,163,209],[60,163,209,221,230],[60,62,163,209,214,222,230],[64,163,209,222,230],[60,61,62,63,64,65,66,90,91,92,93,163,209],[163,209,214],[62,63,163,209,214,222,230],[89,163,209,214],[62,163,209,214,222,230],[63,64,163,209],[62,163,209],[68,69,71,163,209],[68,69,71,89,163,209],[70,163,209],[69,71,80,163,209],[89,163,209],[68,80,81,82,89,163,209],[67,68,69,71,73,74,75,76,79,80,81,82,83,86,87,88,163,209],[72,89,163,209],[73,163,209],[72,73,77,78,163,209],[69,73,77,163,209],[80,81,163,209],[69,83,163,209],[83,84,85,163,209],[69,83,84,163,209]],"fileInfos":[{"version":"bcd24271a113971ba9eb71ff8cb01bc6b0f872a85c23fdbe5d93065b375933cd","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f88bedbeb09c6f5a6645cb24c7c55f1aa22d19ae96c8e6959cbd8b85a707bc6","impliedFormat":1},{"version":"7fe93b39b810eadd916be8db880dd7f0f7012a5cc6ffb62de8f62a2117fa6f1f","impliedFormat":1},{"version":"bb0074cc08b84a2374af33d8bf044b80851ccc9e719a5e202eacf40db2c31600","impliedFormat":1},{"version":"1a7daebe4f45fb03d9ec53d60008fbf9ac45a697fdc89e4ce218bc94b94f94d6","impliedFormat":1},{"version":"f94b133a3cb14a288803be545ac2683e0d0ff6661bcd37e31aaaec54fc382aed","impliedFormat":1},{"version":"f59d0650799f8782fd74cf73c19223730c6d1b9198671b1c5b3a38e1188b5953","impliedFormat":1},{"version":"8a15b4607d9a499e2dbeed9ec0d3c0d7372c850b2d5f1fb259e8f6d41d468a84","impliedFormat":1},{"version":"26e0fe14baee4e127f4365d1ae0b276f400562e45e19e35fd2d4c296684715e6","impliedFormat":1},{"version":"d6b1eba8496bdd0eed6fc8a685768fe01b2da4a0388b5fe7df558290bffcf32f","affectsGlobalScope":true,"impliedFormat":1},{"version":"7f57fc4404ff020bc45b9c620aff2b40f700b95fe31164024c453a5e3c163c54","impliedFormat":1},{"version":"eadcffda2aa84802c73938e589b9e58248d74c59cb7fcbca6474e3435ac15504","affectsGlobalScope":true,"impliedFormat":1},{"version":"105ba8ff7ba746404fe1a2e189d1d3d2e0eb29a08c18dded791af02f29fb4711","affectsGlobalScope":true,"impliedFormat":1},{"version":"00343ca5b2e3d48fa5df1db6e32ea2a59afab09590274a6cccb1dbae82e60c7c","affectsGlobalScope":true,"impliedFormat":1},{"version":"ebd9f816d4002697cb2864bea1f0b70a103124e18a8cd9645eeccc09bdf80ab4","affectsGlobalScope":true,"impliedFormat":1},{"version":"2c1afac30a01772cd2a9a298a7ce7706b5892e447bb46bdbeef720f7b5da77ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"7b0225f483e4fa685625ebe43dd584bb7973bbd84e66a6ba7bbe175ee1048b4f","affectsGlobalScope":true,"impliedFormat":1},{"version":"c0a4b8ac6ce74679c1da2b3795296f5896e31c38e888469a8e0f99dc3305de60","affectsGlobalScope":true,"impliedFormat":1},{"version":"3084a7b5f569088e0146533a00830e206565de65cae2239509168b11434cd84f","affectsGlobalScope":true,"impliedFormat":1},{"version":"c5079c53f0f141a0698faa903e76cb41cd664e3efb01cc17a5c46ec2eb0bef42","affectsGlobalScope":true,"impliedFormat":1},{"version":"32cafbc484dea6b0ab62cf8473182bbcb23020d70845b406f80b7526f38ae862","affectsGlobalScope":true,"impliedFormat":1},{"version":"fca4cdcb6d6c5ef18a869003d02c9f0fd95df8cfaf6eb431cd3376bc034cad36","affectsGlobalScope":true,"impliedFormat":1},{"version":"b93ec88115de9a9dc1b602291b85baf825c85666bf25985cc5f698073892b467","affectsGlobalScope":true,"impliedFormat":1},{"version":"f5c06dcc3fe849fcb297c247865a161f995cc29de7aa823afdd75aaaddc1419b","affectsGlobalScope":true,"impliedFormat":1},{"version":"b77e16112127a4b169ef0b8c3a4d730edf459c5f25fe52d5e436a6919206c4d7","affectsGlobalScope":true,"impliedFormat":1},{"version":"fbffd9337146eff822c7c00acbb78b01ea7ea23987f6c961eba689349e744f8c","affectsGlobalScope":true,"impliedFormat":1},{"version":"a995c0e49b721312f74fdfb89e4ba29bd9824c770bbb4021d74d2bf560e4c6bd","affectsGlobalScope":true,"impliedFormat":1},{"version":"c7b3542146734342e440a84b213384bfa188835537ddbda50d30766f0593aff9","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce6180fa19b1cccd07ee7f7dbb9a367ac19c0ed160573e4686425060b6df7f57","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f02e2476bccb9dbe21280d6090f0df17d2f66b74711489415a8aa4df73c9675","affectsGlobalScope":true,"impliedFormat":1},{"version":"45e3ab34c1c013c8ab2dc1ba4c80c780744b13b5676800ae2e3be27ae862c40c","affectsGlobalScope":true,"impliedFormat":1},{"version":"805c86f6cca8d7702a62a844856dbaa2a3fd2abef0536e65d48732441dde5b5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"e42e397f1a5a77994f0185fd1466520691456c772d06bf843e5084ceb879a0ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"f4c2b41f90c95b1c532ecc874bd3c111865793b23aebcc1c3cbbabcd5d76ffb0","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab26191cfad5b66afa11b8bf935ef1cd88fabfcb28d30b2dfa6fad877d050332","affectsGlobalScope":true,"impliedFormat":1},{"version":"2088bc26531e38fb05eedac2951480db5309f6be3fa4a08d2221abb0f5b4200d","affectsGlobalScope":true,"impliedFormat":1},{"version":"cb9d366c425fea79716a8fb3af0d78e6b22ebbab3bd64d25063b42dc9f531c1e","affectsGlobalScope":true,"impliedFormat":1},{"version":"500934a8089c26d57ebdb688fc9757389bb6207a3c8f0674d68efa900d2abb34","affectsGlobalScope":true,"impliedFormat":1},{"version":"689da16f46e647cef0d64b0def88910e818a5877ca5379ede156ca3afb780ac3","affectsGlobalScope":true,"impliedFormat":1},{"version":"bc21cc8b6fee4f4c2440d08035b7ea3c06b3511314c8bab6bef7a92de58a2593","affectsGlobalScope":true,"impliedFormat":1},{"version":"7ca53d13d2957003abb47922a71866ba7cb2068f8d154877c596d63c359fed25","affectsGlobalScope":true,"impliedFormat":1},{"version":"54725f8c4df3d900cb4dac84b64689ce29548da0b4e9b7c2de61d41c79293611","affectsGlobalScope":true,"impliedFormat":1},{"version":"e5594bc3076ac29e6c1ebda77939bc4c8833de72f654b6e376862c0473199323","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f3eb332c2d73e729f3364fcc0c2b375e72a121e8157d25a82d67a138c83a95c","affectsGlobalScope":true,"impliedFormat":1},{"version":"6f4427f9642ce8d500970e4e69d1397f64072ab73b97e476b4002a646ac743b1","affectsGlobalScope":true,"impliedFormat":1},{"version":"48915f327cd1dea4d7bd358d9dc7732f58f9e1626a29cc0c05c8c692419d9bb7","affectsGlobalScope":true,"impliedFormat":1},{"version":"b7bf9377723203b5a6a4b920164df22d56a43f593269ba6ae1fdc97774b68855","affectsGlobalScope":true,"impliedFormat":1},{"version":"db9709688f82c9e5f65a119c64d835f906efe5f559d08b11642d56eb85b79357","affectsGlobalScope":true,"impliedFormat":1},{"version":"4b25b8c874acd1a4cf8444c3617e037d444d19080ac9f634b405583fd10ce1f7","affectsGlobalScope":true,"impliedFormat":1},{"version":"37be57d7c90cf1f8112ee2636a068d8fd181289f82b744160ec56a7dc158a9f5","affectsGlobalScope":true,"impliedFormat":1},{"version":"a917a49ac94cd26b754ab84e113369a75d1a47a710661d7cd25e961cc797065f","affectsGlobalScope":true,"impliedFormat":1},{"version":"6d3261badeb7843d157ef3e6f5d1427d0eeb0af0cf9df84a62cfd29fd47ac86e","affectsGlobalScope":true,"impliedFormat":1},{"version":"195daca651dde22f2167ac0d0a05e215308119a3100f5e6268e8317d05a92526","affectsGlobalScope":true,"impliedFormat":1},{"version":"8b11e4285cd2bb164a4dc09248bdec69e9842517db4ca47c1ba913011e44ff2f","affectsGlobalScope":true,"impliedFormat":1},{"version":"0508571a52475e245b02bc50fa1394065a0a3d05277fbf5120c3784b85651799","affectsGlobalScope":true,"impliedFormat":1},{"version":"8f9af488f510c3015af3cc8c267a9e9d96c4dd38a1fdff0e11dc5a544711415b","affectsGlobalScope":true,"impliedFormat":1},{"version":"fc611fea8d30ea72c6bbfb599c9b4d393ce22e2f5bfef2172534781e7d138104","affectsGlobalScope":true,"impliedFormat":1},{"version":"1ce14b81c5cc821994aa8ec1d42b220dd41b27fcc06373bce3958af7421b77d4","affectsGlobalScope":true,"impliedFormat":1},{"version":"b3a048b3e9302ef9a34ef4ebb9aecfb28b66abb3bce577206a79fee559c230da","affectsGlobalScope":true,"impliedFormat":1},{"version":"4aa15c9cf7ebffed8c14043d2385f12abb0433ccd5f85621297fae7ae05dcc01","signature":"0d81076132183a97ec510145a0d60492031d7c617f2ff7fe8f35edea827ee0b3"},{"version":"bdbbdce986dc09368ac0765a41c7b8ec9a8fbb0b2bf29245803ea82233a3dec2","signature":"d24a344ad57ad53ccecd2fa188c4a4ab2243f5f7a9afb73a592040b512f067af"},{"version":"808a27ba1ee5c3255038479509fe53004e29b2098f553d06a82745a87545a3cd","signature":"55b3b3d14e0017c5c534cbe93dbf665bb3c8a352b5f2f7c4b6fad0c7675fe1c8"},{"version":"15520f5f5668f93dc9b352bf0d50ad79ac64a050ec6e8c34994c9881f06448af","signature":"74b6ebcac6e248128ac9b2972c9e50eb0ad48f76e4449dde5d012deedb9d0988"},{"version":"ed893a9a8ab2aef6363efb54c0cef2a76405abc2464dedb709a3c82da1568093","signature":"bbd3b7572d17142589b7b86b093c2a7e3645bd3ffd2b08abe93ce32529ec0e1f"},{"version":"f2cfd015b01d2fa50ef83fb41726dc13c44aa6e4d962667a986892dda843d405","signature":"87089bbda669ffac032e83664b35a8c2e53dd87f127ee7a984920c3dd6823721"},{"version":"a4da3b6da57eb2bc0b4b7fe4815397634688b42af3f161f5cfe866ae618fe37c","signature":"564ca8274db5e72a7cdaafcee44ef593ab06be9237d00c463bd9c209b2d79100"},"89fe170d9a59f81cd9a9d95de3278f108ff91491810b2529cc0ffb502a57b6c0","0b4928041c807c01b33b1fa028236df635c52f7acff5a40f2c2d0d677b53428b","5ad2e5b8b17893d0eb1f11a1b6e8c03b17344be03a6a72a624cd38ab05fe4d5c","6a1e553079e654a1771463e9eeb98ea4f7bb4b6417a5237d4fdf9b546d49647f","7f11be86b9ac5c2cd5127cd9d40ccc7694c58868a3157692a153d452fc171525","6e3488ee1183ea915eb43f08aebc5f75e30be25aef1f678d1965324bdd7506e1","bc2f20caa6ccca429df0bf6a6f21506c4b00f9b171fdc3a4b6ada1775252db31","a318d8734523d9e750681e7b8e685ef817d4049c5612451f4e849da8b2b572a9","8b52dd8be86f44f871db89a6c1f77f7585688d53141ff55b6c5fac3eb67b1241","beae2d03867dde9fdf8da461c7e7e84da71612842422d4b482ab1c2a15fe6b12","2aa457dd6699d3015c3c98457ac72a2dd47349f75a1edddbace0ee86dd7177c9","51342c51a9090c0bc8bae60c5ec1a0f46d6d44db84392f12a8cd46e6d8a9f617","ae777307a0baeb9b5d7ba18e6a029a54eb0b612b1491591dcedb020cc8d36f97","d7ba738e316b7baed10ca49cc156b57b8c973b747bec6612e62a925e9f7f33a4","1d5292578fcf0329a43ef19fe2481d7d1cde75e75610019a7897c70dcfff0b31","459b3765e622008ed590474ae6b61ab55107a7b9529a28d05087a6fef51d7248","d4acac107ca8b949e32947d9b5afa27721584f4ffd7ad7a4008fae892a4ec913","b52569fa5c5793a182d033b2fc7443e27205625dc67782a03d2e2e972a2918f3","097ebdc98e0de1205b1104df5038026ca5830b80faee3707b78e7c28ce6dde55","1ae177260d032e05e62f0432227af19a857b327fa604a9b34baa535f44db130e","e1f11ad703121f97a74001059d054aba25c9c4662af44da05ead0a247fe18742","d9c64d02dfe3a9c74da35fdbcc645cf4e8d4ca0f4162ec312de51474103ac3a7","a16a95d9dce4750a2611fc21abd4fc2c68653f267b059e2e4cb41a4dcefa56ce",{"version":"1f701172d8769c8ac7b1b6c9fd90e50cd4ef6cfda910c6139fa502f8b9561c5b","signature":"6c70d81036246c9137139acbf472b8d05f32abcc21fd203ea4ec837bd02c1723"},{"version":"41148bc6287111f2df08dde2de4970fccbc4062e696dec733bdf267885c167b6","signature":"5666abc02391a07d501c8c72b4110337702941ccdb567bd53cf49ec68a760879"},{"version":"835873fd8e2d4563a9be58a02134c7be3fb893103826f96ee4bf6b20198619e6","signature":"640a7eef1b5d3d9c5b1ffce130344213cedb26f553155d0bb3a4e3743e1d49a3"},{"version":"51a33584cef13ea865b9d5de78f89987cf21bb92df3587d622d549802e22fd26","signature":"dd261dd8d827f7e7f9e467e1281d5aee4b55727c1e6cca190f5f663eb28aa2e3"},{"version":"9bcbf055170c05b71626b94426d1d11a168d17cf22ff9df8493d1756d330b3c8","signature":"38496f4e66cde8ff0ad1245584947b21b8f2fb086c4d88158d4526ce15c03600"},{"version":"3a582c6e8906f5b094ccf0de6cc6f4f8a54b05a34f52517aba5c9c7f704f6b28","impliedFormat":99},{"version":"0528f6d21f7a02d4092895090d2dd86104bd5a3e79eced96d5a1a7dd90943d17","impliedFormat":99},{"version":"b5ce343886d23392be9c8280e9f24a87f1d7d3667f6672c2fe4aa61fa4ece7d4","impliedFormat":99},{"version":"72ce5b734c05da85c85a6f6dc05823b051d6aa41acaedeeb1d17c72f3b4efa72","impliedFormat":99},{"version":"b0857bb28fd5236ace84280f79a25093f919fd0eff13e47cc26ea03de60a7294","impliedFormat":99},{"version":"5e43e0824f10cd8c48e7a8c5c673638488925a12c31f0f9e0957965c290eb14c","impliedFormat":99},{"version":"ef13c73d6157a32933c612d476c1524dd674cf5b9a88571d7d6a0d147544d529","impliedFormat":99},{"version":"49ab4f1d153a252779958fc87b700743d32b5ffa42addd70ae23ad3f429daa5c","impliedFormat":99},{"version":"53cf4076f42b29b8d411259d168d51b3a0274c42c8814e5b44dfa8803a35d4fc","impliedFormat":99},{"version":"a39461ee1f27cf3e6cfd63d21045713d26d521da55ea4d8efccb705f689e6dbb","impliedFormat":99},{"version":"61bb64660ee150f3ab618340e15cca0a81664801bede7c966ca0eca3a952fe63","impliedFormat":99},{"version":"3b89216a7e38a454985ad17bb2ff85792837dc812f2a89fa5f60ad0a2e216fa7","impliedFormat":99},{"version":"16fe60bb544cfedfd2b5bb2f7d0b3957be7978706d57d9f06edc9c0c8dbdba23","impliedFormat":99},{"version":"82179358c2d9d7347f1602dc9300039a2250e483137b38ebf31d4d2e5519c181","impliedFormat":99},{"version":"4e003c868b0d8f8ad200b96cbc653e18e513fa23e1c19c4fe3cc25d4394efc47","impliedFormat":99},{"version":"605450898939e8abce51e8085a41b60640278337a969c33cd6b169e7c4f9c3f2","impliedFormat":99},{"version":"42a12f2faa483c9b48195ed794d22698162274e755f6e07219c2351c4f08d732","impliedFormat":99},{"version":"ec0c42bb0f465e4993f2bc68a6ce9df9a2dcbc7b83e21748f82f1b69561938e3","impliedFormat":99},{"version":"f50ff37a9cbbe74475f426474d9827083c7c2c138a954d28f1690df338f69291","impliedFormat":99},{"version":"61fd6c17235d530c40f543dd7c40afab091d91c1ef890baeed30db6d82b04b28","impliedFormat":99},{"version":"bcbd3becd08b4515225880abea0dbfbbf0d1181ce3af8f18f72f61edbe4febfb","impliedFormat":99},{"version":"091767bc841f937654ed597d49e023ed59850355e746ae1a6f20ab31076ee1fb","impliedFormat":99},{"version":"19c6d6135af59693698d384050b45a8a049493500add442f58e4bd7c8a255ab6","impliedFormat":99},{"version":"6a0dba12d55314638a8c51108b20fe2f68f1364a619d098918bda91c22dec154","impliedFormat":99},{"version":"c76c02846ba7d40b9b3488f0e8d75d02cbdee2f0bc5fcd55dd3bd2e1457646ea","impliedFormat":99},{"version":"4ead13a482c539b77394b2a97e3b877b809eac596390371cea490286f53b996a","impliedFormat":99},{"version":"06db2f8ba1d1dfacf04529cb731081ab23f133f29c7608ebdfbcab356996827c","impliedFormat":99},{"version":"bdd14f07b4eca0b4b5203b85b8dbc4d084c749fa590bee5ea613e1641dcd3b29","impliedFormat":99},{"version":"427fe2004642504828c1476d0af4270e6ad4db6de78c0b5da3e4c5ca95052a99","impliedFormat":1},{"version":"2eeffcee5c1661ddca53353929558037b8cf305ffb86a803512982f99bcab50d","impliedFormat":99},{"version":"9afb4cb864d297e4092a79ee2871b5d3143ea14153f62ef0bb04ede25f432030","affectsGlobalScope":true,"impliedFormat":99},{"version":"5c935b7fc4ddc1410ea1cd7cd4e35ed106a6e4920dd27a9480a40fd224359dc3","affectsGlobalScope":true,"impliedFormat":99},{"version":"2b39c6cf59088713babbfc3e20ee85f1375d40e66953156fa658346b8346f24f","impliedFormat":99},{"version":"69bf2422313487956e4dacf049f30cb91b34968912058d244cb19e4baa24da97","impliedFormat":99},{"version":"6987dfb4b0c4e02112cc4e548e7a77b3d9ddfeffa8c8a2db13ceac361a4567d9","impliedFormat":99},{"version":"4ffba3c5848b4fe62ee59b754fd5f256ad9656a0db6d37b9a2a8cb40dfc7ac21","impliedFormat":99},{"version":"c76c02846ba7d40b9b3488f0e8d75d02cbdee2f0bc5fcd55dd3bd2e1457646ea","impliedFormat":99},{"version":"5e2ba3d18d78aebbde1f34bde356e41e9c76eeaeaeee56a37036596a9eff4211","impliedFormat":99},{"version":"8280ae8ccc0493b32d1742d585357ab9f0a508ea050af25a5a20d64010d0a5cf","impliedFormat":99},{"version":"7adfd9f9056ecd4ae6c65fde2a98654960c662714c73f048478959d04c09e144","impliedFormat":99},{"version":"32b35cf0dc3a1b1a7118b61c34ce2ad1a29695851679f9ec34e0776f2ece2a69","impliedFormat":99},{"version":"b413fbc6658fe2774f8bf9a15cf4c53e586fc38a2d5256b3b9647da242c14389","impliedFormat":99},{"version":"59e5e964b84fdb2378e9455e4e59405030e4ed2b4c6f891ce395f17796af3cbb","impliedFormat":99},{"version":"c30a41267fc04c6518b17e55dcb2b810f267af4314b0b6d7df1c33a76ce1b330","impliedFormat":1},{"version":"72422d0bac4076912385d0c10911b82e4694fc106e2d70added091f88f0824ba","impliedFormat":1},{"version":"da251b82c25bee1d93f9fd80c5a61d945da4f708ca21285541d7aff83ecb8200","impliedFormat":1},{"version":"64db14db2bf37ac089766fdb3c7e1160fabc10e9929bc2deeede7237e4419fc8","impliedFormat":1},{"version":"98b94085c9f78eba36d3d2314affe973e8994f99864b8708122750788825c771","impliedFormat":1},{"version":"90ba95a763101bb61b8a799731a2ed60b5016b8135c1a2d5186862d4b534d4a1","impliedFormat":99},{"version":"bc515bf319cc6d435bababa884ffbde0f5b51fdfde5fece4e6a3450b264e235c","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"f15c678a02cd4b90a4fc11d6fe930dd9a32f2b55e75da1f5a7b9fe725420a0f3","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"64677441359673daa0012542dad3b5dcca6f37758767232d12d6a6e6ca49c7fc","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"0c42de9e3b6a24ec2204b89cd87c1c1a25b6b3f8306b8664cd846bfe6e82ed05","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"abcee8de5d7e2d4f1ced16d84296cd898860e0ce0d9247bd22469725bbd6f928","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"4bc07b813e3c8a232984020852457d1afa9ea8abd46e7ea3a0834218066ff0cf","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"3bce2254c55aadfeee3fec677260b646d350737ec5cc720634983a09f9f082df","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"0b821d738c5644a958f6e7fe5c9c3cd8a78d1793aca9f2e250e3565ee4da0606","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"f37cb836f64d2c324e0b46813c17bffbed9180e776a6ed6606977cc6a2d555ce","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"066593431287234ef322c0350d1c9b6f823f26c7881d77e5120a6effc9e467eb","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"e88c78084c5d7462d40cbf454913b2f21879d04eec9e8d33d902af3dde0fd929","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"ec70d33e4e78dc72b169cc8644378eff8a2f754657d6b18c3650946a0e6caa0a","signature":"6b734045ca6607a1eb0d808b900825f21e77264db040355bf2ae811d18dc5143"},{"version":"42ce8340284b0cf39ea71d78cae22cb7c5c5ea712683d57a15e1cf3954031961","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"b9a26406f66dcc6db304414ea3c22a830ce189eac90380d1b92f777b64e94331","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"70521b6ab0dcba37539e5303104f29b721bfb2940b2776da4cc818c07e1fefc1","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab41ef1f2cdafb8df48be20cd969d875602483859dc194e9c97c8a576892c052","affectsGlobalScope":true,"impliedFormat":1},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"21d819c173c0cf7cc3ce57c3276e77fd9a8a01d35a06ad87158781515c9a438a","impliedFormat":1},{"version":"98cffbf06d6bab333473c70a893770dbe990783904002c4f1a960447b4b53dca","affectsGlobalScope":true,"impliedFormat":1},{"version":"ba481bca06f37d3f2c137ce343c7d5937029b2468f8e26111f3c9d9963d6568d","affectsGlobalScope":true,"impliedFormat":1},{"version":"6d9ef24f9a22a88e3e9b3b3d8c40ab1ddb0853f1bfbd5c843c37800138437b61","affectsGlobalScope":true,"impliedFormat":1},{"version":"1db0b7dca579049ca4193d034d835f6bfe73096c73663e5ef9a0b5779939f3d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true,"impliedFormat":1},{"version":"f26b11d8d8e4b8028f1c7d618b22274c892e4b0ef5b3678a8ccbad85419aef43","affectsGlobalScope":true,"impliedFormat":1},{"version":"5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","impliedFormat":1},{"version":"763fe0f42b3d79b440a9b6e51e9ba3f3f91352469c1e4b3b67bfa4ff6352f3f4","impliedFormat":1},{"version":"25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","impliedFormat":1},{"version":"c464d66b20788266e5353b48dc4aa6bc0dc4a707276df1e7152ab0c9ae21fad8","impliedFormat":1},{"version":"78d0d27c130d35c60b5e5566c9f1e5be77caf39804636bc1a40133919a949f21","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"1d6e127068ea8e104a912e42fc0a110e2aa5a66a356a917a163e8cf9a65e4a75","impliedFormat":1},{"version":"5ded6427296cdf3b9542de4471d2aa8d3983671d4cac0f4bf9c637208d1ced43","impliedFormat":1},{"version":"7f182617db458e98fc18dfb272d40aa2fff3a353c44a89b2c0ccb3937709bfb5","impliedFormat":1},{"version":"cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","impliedFormat":1},{"version":"385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","impliedFormat":1},{"version":"9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","impliedFormat":1},{"version":"0b8a9268adaf4da35e7fa830c8981cfa22adbbe5b3f6f5ab91f6658899e657a7","impliedFormat":1},{"version":"11396ed8a44c02ab9798b7dca436009f866e8dae3c9c25e8c1fbc396880bf1bb","impliedFormat":1},{"version":"ba7bc87d01492633cb5a0e5da8a4a42a1c86270e7b3d2dea5d156828a84e4882","impliedFormat":1},{"version":"4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","impliedFormat":1},{"version":"c21dc52e277bcfc75fac0436ccb75c204f9e1b3fa5e12729670910639f27343e","impliedFormat":1},{"version":"13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","impliedFormat":1},{"version":"9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","impliedFormat":1},{"version":"4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","impliedFormat":1},{"version":"24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","impliedFormat":1},{"version":"ea0148f897b45a76544ae179784c95af1bd6721b8610af9ffa467a518a086a43","impliedFormat":1},{"version":"24c6a117721e606c9984335f71711877293a9651e44f59f3d21c1ea0856f9cc9","impliedFormat":1},{"version":"dd3273ead9fbde62a72949c97dbec2247ea08e0c6952e701a483d74ef92d6a17","impliedFormat":1},{"version":"405822be75ad3e4d162e07439bac80c6bcc6dbae1929e179cf467ec0b9ee4e2e","impliedFormat":1},{"version":"0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","impliedFormat":1},{"version":"e61be3f894b41b7baa1fbd6a66893f2579bfad01d208b4ff61daef21493ef0a8","impliedFormat":1},{"version":"bd0532fd6556073727d28da0edfd1736417a3f9f394877b6d5ef6ad88fba1d1a","impliedFormat":1},{"version":"89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","impliedFormat":1},{"version":"615ba88d0128ed16bf83ef8ccbb6aff05c3ee2db1cc0f89ab50a4939bfc1943f","impliedFormat":1},{"version":"a4d551dbf8746780194d550c88f26cf937caf8d56f102969a110cfaed4b06656","impliedFormat":1},{"version":"8bd86b8e8f6a6aa6c49b71e14c4ffe1211a0e97c80f08d2c8cc98838006e4b88","impliedFormat":1},{"version":"317e63deeb21ac07f3992f5b50cdca8338f10acd4fbb7257ebf56735bf52ab00","impliedFormat":1},{"version":"4732aec92b20fb28c5fe9ad99521fb59974289ed1e45aecb282616202184064f","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"bf67d53d168abc1298888693338cb82854bdb2e69ef83f8a0092093c2d562107","impliedFormat":1},{"version":"b52476feb4a0cbcb25e5931b930fc73cb6643fb1a5060bf8a3dda0eeae5b4b68","affectsGlobalScope":true,"impliedFormat":1},{"version":"e2677634fe27e87348825bb041651e22d50a613e2fdf6a4a3ade971d71bac37e","impliedFormat":1},{"version":"7394959e5a741b185456e1ef5d64599c36c60a323207450991e7a42e08911419","impliedFormat":1},{"version":"8c0bcd6c6b67b4b503c11e91a1fb91522ed585900eab2ab1f61bba7d7caa9d6f","impliedFormat":1},{"version":"8cd19276b6590b3ebbeeb030ac271871b9ed0afc3074ac88a94ed2449174b776","affectsGlobalScope":true,"impliedFormat":1},{"version":"696eb8d28f5949b87d894b26dc97318ef944c794a9a4e4f62360cd1d1958014b","impliedFormat":1},{"version":"3f8fa3061bd7402970b399300880d55257953ee6d3cd408722cb9ac20126460c","impliedFormat":1},{"version":"35ec8b6760fd7138bbf5809b84551e31028fb2ba7b6dc91d95d098bf212ca8b4","affectsGlobalScope":true,"impliedFormat":1},{"version":"5524481e56c48ff486f42926778c0a3cce1cc85dc46683b92b1271865bcf015a","impliedFormat":1},{"version":"68bd56c92c2bd7d2339457eb84d63e7de3bd56a69b25f3576e1568d21a162398","affectsGlobalScope":true,"impliedFormat":1},{"version":"3e93b123f7c2944969d291b35fed2af79a6e9e27fdd5faa99748a51c07c02d28","impliedFormat":1},{"version":"9d19808c8c291a9010a6c788e8532a2da70f811adb431c97520803e0ec649991","impliedFormat":1},{"version":"87aad3dd9752067dc875cfaa466fc44246451c0c560b820796bdd528e29bef40","impliedFormat":1},{"version":"4aacb0dd020eeaef65426153686cc639a78ec2885dc72ad220be1d25f1a439df","impliedFormat":1},{"version":"f0bd7e6d931657b59605c44112eaf8b980ba7f957a5051ed21cb93d978cf2f45","impliedFormat":1},{"version":"8db0ae9cb14d9955b14c214f34dae1b9ef2baee2fe4ce794a4cd3ac2531e3255","affectsGlobalScope":true,"impliedFormat":1},{"version":"15fc6f7512c86810273af28f224251a5a879e4261b4d4c7e532abfbfc3983134","impliedFormat":1},{"version":"58adba1a8ab2d10b54dc1dced4e41f4e7c9772cbbac40939c0dc8ce2cdb1d442","impliedFormat":1},{"version":"641942a78f9063caa5d6b777c99304b7d1dc7328076038c6d94d8a0b81fc95c1","impliedFormat":1},{"version":"092c1137e31de289f3cc6a57fdccb3cca298d8a680d1e367d206d3318f1394a1","impliedFormat":1},{"version":"855cd5f7eb396f5f1ab1bc0f8580339bff77b68a770f84c6b254e319bbfd1ac7","impliedFormat":1},{"version":"5650cf3dace09e7c25d384e3e6b818b938f68f4e8de96f52d9c5a1b3db068e86","impliedFormat":1},{"version":"1354ca5c38bd3fd3836a68e0f7c9f91f172582ba30ab15bb8c075891b91502b7","affectsGlobalScope":true,"impliedFormat":1},{"version":"7e20d899c28ca26a2a7afc98beaa69e63ff7fba0a8bc47b4e3bf3ede5e09e424","impliedFormat":1},{"version":"2d2fcaab481b31a5882065c7951255703ddbe1c0e507af56ea42d79ac3911201","impliedFormat":1},{"version":"a192fe8ec33f75edbc8d8f3ed79f768dfae11ff5735e7fe52bfa69956e46d78d","impliedFormat":1},{"version":"ca867399f7db82df981d6915bcbb2d81131d7d1ef683bc782b59f71dda59bc85","affectsGlobalScope":true,"impliedFormat":1},{"version":"372413016d17d804e1d139418aca0c68e47a83fb6669490857f4b318de8cccb3","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e043a1bc8fbf2a255bccf9bf27e0f1caf916c3b0518ea34aa72357c0afd42ec","impliedFormat":1},{"version":"b4f70ec656a11d570e1a9edce07d118cd58d9760239e2ece99306ee9dfe61d02","impliedFormat":1},{"version":"3bc2f1e2c95c04048212c569ed38e338873f6a8593930cf5a7ef24ffb38fc3b6","impliedFormat":1},{"version":"6e70e9570e98aae2b825b533aa6292b6abd542e8d9f6e9475e88e1d7ba17c866","impliedFormat":1},{"version":"f9d9d753d430ed050dc1bf2667a1bab711ccbb1c1507183d794cc195a5b085cc","impliedFormat":1},{"version":"9eece5e586312581ccd106d4853e861aaaa1a39f8e3ea672b8c3847eedd12f6e","impliedFormat":1},{"version":"085f552d005479e2e6a7311cdbbe5d8c55c497b4d19274285df161ee9684cd9c","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"45650f47bfb376c8a8ed39d4bcda5902ab899a3150029684ee4c10676d9fbaee","impliedFormat":1},{"version":"007faacc9268357caa21d24169f3f3f2497af3e9241308df2d89f6e6d9bb3f2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"74cf591a0f63db318651e0e04cb55f8791385f86e987a67fd4d2eaab8191f730","impliedFormat":1},{"version":"5eab9b3dc9b34f185417342436ec3f106898da5f4801992d8ff38ab3aff346b5","impliedFormat":1},{"version":"12ed4559eba17cd977aa0db658d25c4047067444b51acfdcbf38470630642b23","affectsGlobalScope":true,"impliedFormat":1},{"version":"f3ffabc95802521e1e4bcba4c88d8615176dc6e09111d920c7a213bdda6e1d65","impliedFormat":1},{"version":"809821b8a065e3234a55b3a9d7846231ed18d66dd749f2494c66288d890daf7f","impliedFormat":1},{"version":"ae56f65caf3be91108707bd8dfbccc2a57a91feb5daabf7165a06a945545ed26","impliedFormat":1},{"version":"a136d5de521da20f31631a0a96bf712370779d1c05b7015d7019a9b2a0446ca9","impliedFormat":1},{"version":"c3b41e74b9a84b88b1dca61ec39eee25c0dbc8e7d519ba11bb070918cfacf656","affectsGlobalScope":true,"impliedFormat":1},{"version":"4737a9dc24d0e68b734e6cfbcea0c15a2cfafeb493485e27905f7856988c6b29","affectsGlobalScope":true,"impliedFormat":1},{"version":"36d8d3e7506b631c9582c251a2c0b8a28855af3f76719b12b534c6edf952748d","impliedFormat":1},{"version":"1ca69210cc42729e7ca97d3a9ad48f2e9cb0042bada4075b588ae5387debd318","impliedFormat":1},{"version":"f5ebe66baaf7c552cfa59d75f2bfba679f329204847db3cec385acda245e574e","impliedFormat":1},{"version":"ed59add13139f84da271cafd32e2171876b0a0af2f798d0c663e8eeb867732cf","affectsGlobalScope":true,"impliedFormat":1},{"version":"b7c5e2ea4a9749097c347454805e933844ed207b6eefec6b7cfd418b5f5f7b28","impliedFormat":1},{"version":"b1810689b76fd473bd12cc9ee219f8e62f54a7d08019a235d07424afbf074d25","impliedFormat":1},{"version":"ed54b4df9d73ecc853f39d6c3b2df761e1ad9fbcfd97bdf04727860dd4db386b","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"53b86996d640250983322e55bfe3d3448befd84874ae21aae8b02a35e1ee645a","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"}],"root":[[60,66],[90,94],[144,157],258,259],"options":{"composite":true,"declaration":true,"declarationMap":true,"emitDeclarationOnly":true,"exactOptionalPropertyTypes":true,"module":99,"noFallthroughCasesInSwitch":true,"noImplicitOverride":true,"noImplicitReturns":true,"noUncheckedIndexedAccess":true,"noUnusedLocals":true,"noUnusedParameters":true,"outDir":"./","rootDir":"../src","skipLibCheck":true,"strict":true,"target":9,"tsBuildInfoFile":"./.tsbuildinfo","useDefineForClassFields":true,"verbatimModuleSyntax":true},"referencedMap":[[122,1],[125,2],[123,1],[206,3],[207,3],[208,4],[163,5],[209,6],[210,7],[211,8],[158,1],[161,9],[159,1],[160,1],[212,10],[213,11],[214,12],[215,13],[216,14],[217,15],[218,15],[219,16],[220,17],[221,18],[222,19],[164,1],[162,1],[223,20],[224,21],[225,22],[257,23],[226,24],[227,25],[228,26],[229,27],[230,28],[231,29],[232,30],[233,31],[234,32],[235,33],[236,33],[237,34],[238,1],[239,35],[241,36],[240,37],[242,38],[243,39],[244,40],[245,41],[246,42],[247,43],[248,44],[249,45],[250,46],[251,47],[252,48],[253,49],[254,50],[165,1],[166,1],[167,1],[205,51],[255,52],[256,53],[126,54],[133,55],[134,56],[132,1],[95,1],[104,57],[103,58],[127,57],[111,59],[113,60],[112,61],[120,62],[119,1],[102,63],[96,64],[98,65],[100,66],[99,1],[101,64],[97,1],[124,1],[140,67],[142,68],[141,69],[139,70],[138,1],[128,1],[121,1],[58,1],[59,1],[10,1],[11,1],[13,1],[12,1],[2,1],[14,1],[15,1],[16,1],[17,1],[18,1],[19,1],[20,1],[21,1],[3,1],[22,1],[23,1],[4,1],[24,1],[28,1],[25,1],[26,1],[27,1],[29,1],[30,1],[31,1],[5,1],[32,1],[33,1],[34,1],[35,1],[6,1],[39,1],[36,1],[37,1],[38,1],[40,1],[7,1],[41,1],[46,1],[47,1],[42,1],[43,1],[44,1],[45,1],[8,1],[51,1],[48,1],[49,1],[50,1],[52,1],[9,1],[53,1],[54,1],[55,1],[57,1],[56,1],[1,1],[183,71],[193,72],[182,71],[203,73],[174,74],[173,75],[202,76],[196,77],[201,78],[176,79],[190,80],[175,81],[199,82],[171,83],[170,76],[200,84],[172,85],[177,86],[178,1],[181,86],[168,1],[204,87],[194,88],[185,89],[186,90],[188,91],[184,92],[187,93],[197,76],[179,94],[180,95],[189,96],[169,97],[192,88],[191,86],[195,1],[198,98],[107,99],[110,100],[108,99],[106,1],[109,101],[129,102],[118,103],[114,104],[115,59],[136,105],[130,106],[116,107],[135,108],[105,1],[117,109],[143,110],[137,111],[131,1],[144,112],[145,112],[146,113],[147,112],[148,114],[149,115],[150,116],[151,117],[152,118],[153,119],[154,120],[156,121],[155,122],[157,123],[258,124],[259,125],[61,126],[63,127],[62,1],[65,128],[94,129],[60,130],[66,28],[64,131],[90,132],[91,133],[92,134],[93,135],[67,1],[68,1],[70,136],[80,1],[75,137],[71,138],[81,139],[87,140],[76,140],[88,141],[89,142],[73,143],[72,144],[77,1],[79,145],[78,146],[69,1],[82,147],[83,1],[84,148],[86,149],[85,150],[74,1]],"latestChangedDtsFile":"./__tests__/status.unit.test.d.ts","version":"6.0.3"}
|
|
1
|
+
{"fileNames":["../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es5.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2016.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2018.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2019.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2021.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.dom.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.dom.iterable.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.core.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.collection.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.generator.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.promise.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2016.intl.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.date.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.object.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.string.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.intl.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2018.intl.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2018.promise.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2019.array.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2019.object.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2019.string.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2019.intl.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.date.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.promise.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.string.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.intl.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2020.number.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2021.promise.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2021.string.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2021.intl.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.array.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.error.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.intl.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.object.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.string.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.regexp.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.decorators.d.ts","../../../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.decorators.legacy.d.ts","../src/key.ts","../src/build-cache.ts","../src/errors.ts","../src/entry-store.ts","../src/lifecycle.ts","../src/gc.ts","../src/layout.ts","../../types/dist/animation-target.d.ts","../../types/dist/asset-errors.d.ts","../../types/dist/result.d.ts","../../types/dist/asset-evidence.d.ts","../../types/dist/asset.d.ts","../../types/dist/material/color-space.d.ts","../../types/dist/material/asset.d.ts","../../types/dist/vfx.d.ts","../../types/dist/asset-runtime.d.ts","../../types/dist/handle.d.ts","../../types/dist/material/errors.d.ts","../../types/dist/material/resolve.d.ts","../../types/dist/material/index.d.ts","../../types/dist/asset-producer.d.ts","../../types/dist/catalog.d.ts","../../types/dist/runtime-scope.d.ts","../../types/dist/texture/asset.d.ts","../../types/dist/texture/errors.d.ts","../../types/dist/texture/layout.d.ts","../../types/dist/texture/index.d.ts","../../types/dist/derive-paramschema.d.ts","../../types/dist/import.d.ts","../../types/dist/index.d.ts","../src/publication.ts","../src/runtime-scope.ts","../src/session.ts","../src/status.ts","../src/index.ts","../../../node_modules/.pnpm/@vitest+pretty-format@4.1.11/node_modules/@vitest/pretty-format/dist/index.d.ts","../../../node_modules/.pnpm/@vitest+utils@4.1.11/node_modules/@vitest/utils/dist/display.d.ts","../../../node_modules/.pnpm/@vitest+utils@4.1.11/node_modules/@vitest/utils/dist/types.d.ts","../../../node_modules/.pnpm/@vitest+utils@4.1.11/node_modules/@vitest/utils/dist/helpers.d.ts","../../../node_modules/.pnpm/@vitest+utils@4.1.11/node_modules/@vitest/utils/dist/timers.d.ts","../../../node_modules/.pnpm/@vitest+utils@4.1.11/node_modules/@vitest/utils/dist/index.d.ts","../../../node_modules/.pnpm/@vitest+utils@4.1.11/node_modules/@vitest/utils/dist/types.d-BCElaP-c.d.ts","../../../node_modules/.pnpm/@vitest+utils@4.1.11/node_modules/@vitest/utils/dist/diff.d.ts","../../../node_modules/.pnpm/@vitest+runner@4.1.11/node_modules/@vitest/runner/dist/tasks.d-DEYaIMIu.d.ts","../../../node_modules/.pnpm/@vitest+runner@4.1.11/node_modules/@vitest/runner/dist/index.d.ts","../../../node_modules/.pnpm/vitest@4.1.11_@types+node@20.19.40_@vitest+browser-playwright@4.1.11_@vitest+coverage-v_127da6c4db5f633b4e0a459eab2c3062/node_modules/vitest/dist/chunks/traces.d.D2T_R8rx.d.ts","../../../node_modules/.pnpm/vite@8.0.10_@types+node@20.19.40_esbuild@0.27.7_jiti@1.21.7/node_modules/vite/types/hmrPayload.d.ts","../../../node_modules/.pnpm/vite@8.0.10_@types+node@20.19.40_esbuild@0.27.7_jiti@1.21.7/node_modules/vite/dist/node/chunks/moduleRunnerTransport.d.ts","../../../node_modules/.pnpm/vite@8.0.10_@types+node@20.19.40_esbuild@0.27.7_jiti@1.21.7/node_modules/vite/types/customEvent.d.ts","../../../node_modules/.pnpm/vite@8.0.10_@types+node@20.19.40_esbuild@0.27.7_jiti@1.21.7/node_modules/vite/types/hot.d.ts","../../../node_modules/.pnpm/vite@8.0.10_@types+node@20.19.40_esbuild@0.27.7_jiti@1.21.7/node_modules/vite/dist/node/module-runner.d.ts","../../../node_modules/.pnpm/@vitest+snapshot@4.1.11/node_modules/@vitest/snapshot/dist/environment.d-DOJxxZV9.d.ts","../../../node_modules/.pnpm/@vitest+snapshot@4.1.11/node_modules/@vitest/snapshot/dist/rawSnapshot.d-D_X3-62x.d.ts","../../../node_modules/.pnpm/@vitest+snapshot@4.1.11/node_modules/@vitest/snapshot/dist/index.d.ts","../../../node_modules/.pnpm/vitest@4.1.11_@types+node@20.19.40_@vitest+browser-playwright@4.1.11_@vitest+coverage-v_127da6c4db5f633b4e0a459eab2c3062/node_modules/vitest/dist/chunks/config.d.A1h_Y6Jt.d.ts","../../../node_modules/.pnpm/vitest@4.1.11_@types+node@20.19.40_@vitest+browser-playwright@4.1.11_@vitest+coverage-v_127da6c4db5f633b4e0a459eab2c3062/node_modules/vitest/dist/chunks/environment.d.CrsxCzP1.d.ts","../../../node_modules/.pnpm/vitest@4.1.11_@types+node@20.19.40_@vitest+browser-playwright@4.1.11_@vitest+coverage-v_127da6c4db5f633b4e0a459eab2c3062/node_modules/vitest/dist/chunks/rpc.d.B_8sPU0w.d.ts","../../../node_modules/.pnpm/vitest@4.1.11_@types+node@20.19.40_@vitest+browser-playwright@4.1.11_@vitest+coverage-v_127da6c4db5f633b4e0a459eab2c3062/node_modules/vitest/dist/chunks/worker.d.ZpHpO4yb.d.ts","../../../node_modules/.pnpm/vitest@4.1.11_@types+node@20.19.40_@vitest+browser-playwright@4.1.11_@vitest+coverage-v_127da6c4db5f633b4e0a459eab2c3062/node_modules/vitest/dist/chunks/browser.d.BcoexmFG.d.ts","../../../node_modules/.pnpm/@vitest+spy@4.1.11/node_modules/@vitest/spy/optional-types.d.ts","../../../node_modules/.pnpm/@vitest+spy@4.1.11/node_modules/@vitest/spy/dist/index.d.ts","../../../node_modules/.pnpm/tinyrainbow@3.1.0/node_modules/tinyrainbow/dist/index.d.ts","../../../node_modules/.pnpm/@standard-schema+spec@1.1.0/node_modules/@standard-schema/spec/dist/index.d.ts","../../../node_modules/.pnpm/@types+deep-eql@4.0.2/node_modules/@types/deep-eql/index.d.ts","../../../node_modules/.pnpm/assertion-error@2.0.1/node_modules/assertion-error/index.d.ts","../../../node_modules/.pnpm/@types+chai@5.2.3/node_modules/@types/chai/index.d.ts","../../../node_modules/.pnpm/@vitest+expect@4.1.11/node_modules/@vitest/expect/dist/index.d.ts","../../../node_modules/.pnpm/@vitest+runner@4.1.11/node_modules/@vitest/runner/dist/utils.d.ts","../../../node_modules/.pnpm/tinybench@2.9.0/node_modules/tinybench/dist/index.d.ts","../../../node_modules/.pnpm/vitest@4.1.11_@types+node@20.19.40_@vitest+browser-playwright@4.1.11_@vitest+coverage-v_127da6c4db5f633b4e0a459eab2c3062/node_modules/vitest/dist/chunks/benchmark.d.DAaHLpsq.d.ts","../../../node_modules/.pnpm/vitest@4.1.11_@types+node@20.19.40_@vitest+browser-playwright@4.1.11_@vitest+coverage-v_127da6c4db5f633b4e0a459eab2c3062/node_modules/vitest/dist/chunks/global.d.DVsSRdQ5.d.ts","../../../node_modules/.pnpm/vitest@4.1.11_@types+node@20.19.40_@vitest+browser-playwright@4.1.11_@vitest+coverage-v_127da6c4db5f633b4e0a459eab2c3062/node_modules/vitest/optional-runtime-types.d.ts","../../../node_modules/.pnpm/@vitest+mocker@4.1.11_vite@8.0.10_@types+node@20.19.40_esbuild@0.27.7_jiti@1.21.7_/node_modules/@vitest/mocker/dist/types.d-BjI5eAwu.d.ts","../../../node_modules/.pnpm/@vitest+mocker@4.1.11_vite@8.0.10_@types+node@20.19.40_esbuild@0.27.7_jiti@1.21.7_/node_modules/@vitest/mocker/dist/index.d-B41z0AuW.d.ts","../../../node_modules/.pnpm/@vitest+mocker@4.1.11_vite@8.0.10_@types+node@20.19.40_esbuild@0.27.7_jiti@1.21.7_/node_modules/@vitest/mocker/dist/index.d.ts","../../../node_modules/.pnpm/vitest@4.1.11_@types+node@20.19.40_@vitest+browser-playwright@4.1.11_@vitest+coverage-v_127da6c4db5f633b4e0a459eab2c3062/node_modules/vitest/dist/chunks/suite.d.udJtyAgw.d.ts","../../../node_modules/.pnpm/vitest@4.1.11_@types+node@20.19.40_@vitest+browser-playwright@4.1.11_@vitest+coverage-v_127da6c4db5f633b4e0a459eab2c3062/node_modules/vitest/dist/chunks/evaluatedModules.d.BxJ5omdx.d.ts","../../../node_modules/.pnpm/vitest@4.1.11_@types+node@20.19.40_@vitest+browser-playwright@4.1.11_@vitest+coverage-v_127da6c4db5f633b4e0a459eab2c3062/node_modules/vitest/dist/runners.d.ts","../../../node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/utils.d.ts","../../../node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/overloads.d.ts","../../../node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/branding.d.ts","../../../node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/messages.d.ts","../../../node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/index.d.ts","../../../node_modules/.pnpm/vitest@4.1.11_@types+node@20.19.40_@vitest+browser-playwright@4.1.11_@vitest+coverage-v_127da6c4db5f633b4e0a459eab2c3062/node_modules/vitest/dist/index.d.ts","../src/__tests__/concurrency.integration.test.ts","../src/__tests__/consumer-path.integration.test.ts","../src/__tests__/crash-recovery.integration.test.ts","../src/__tests__/entry-store.integration.test.ts","../src/__tests__/errors.unit.test.ts","../src/__tests__/generation-session.integration.test.ts","../src/__tests__/generation-session.unit.test.ts","../src/__tests__/key.unit.test.ts","../src/__tests__/layout.unit.test.ts","../src/__tests__/lifecycle.unit.test.ts","../src/__tests__/multiprocess-gc.integration.test.ts","../src/__tests__/multiprocess-worker.ts","../src/__tests__/multiprocess-lifecycle.integration.test.ts","../src/__tests__/owner-chain.integration.test.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/compatibility/disposable.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/compatibility/indexable.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/compatibility/iterators.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/compatibility/index.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/globals.typedarray.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/buffer.buffer.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/globals.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/web-globals/abortcontroller.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/web-globals/domexception.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/web-globals/events.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/header.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/readable.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/file.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/fetch.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/formdata.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/connector.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/client.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/errors.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/dispatcher.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/global-dispatcher.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/global-origin.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/pool-stats.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/pool.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/handlers.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/balanced-pool.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/agent.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-interceptor.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-agent.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-client.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-pool.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-errors.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/proxy-agent.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/env-http-proxy-agent.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/retry-handler.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/retry-agent.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/api.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/interceptors.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/util.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/cookies.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/patch.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/websocket.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/eventsource.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/filereader.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/diagnostics-channel.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/content-type.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/cache.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/index.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/web-globals/fetch.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/assert.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/assert/strict.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/async_hooks.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/buffer.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/child_process.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/cluster.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/console.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/constants.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/crypto.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/dgram.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/diagnostics_channel.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/dns.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/dns/promises.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/domain.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/events.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/fs.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/fs/promises.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/http.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/http2.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/https.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/inspector.generated.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/module.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/net.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/os.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/path.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/perf_hooks.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/process.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/punycode.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/querystring.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/readline.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/readline/promises.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/repl.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/sea.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/stream.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/stream/promises.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/stream/consumers.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/stream/web.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/string_decoder.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/test.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/timers.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/timers/promises.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/tls.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/trace_events.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/tty.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/url.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/util.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/v8.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/vm.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/wasi.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/worker_threads.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/zlib.d.ts","../../../node_modules/.pnpm/@types+node@20.19.40/node_modules/@types/node/index.d.ts","../src/__tests__/status-root-kind-owner.test-d.ts","../src/__tests__/status.unit.test.ts"],"fileIdsList":[[163,209],[123,124,163,209],[163,206,209],[163,208,209],[209],[163,209,214,242],[163,209,210,215,220,228,239,250],[163,209,210,211,220,228],[158,159,160,163,209],[163,209,212,251],[163,209,213,214,221,229],[163,209,214,239,247],[163,209,215,217,220,228],[163,208,209,216],[163,209,217,218],[163,209,219,220],[163,208,209,220],[163,209,220,221,222,239,250],[163,209,220,221,222,235,239,242],[163,209,217,220,223,228,239,250],[163,209,220,221,223,224,228,239,247,250],[163,209,223,225,239,247,250],[161,162,163,164,165,166,167,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256],[163,209,220,226],[163,209,227,250,255],[163,209,217,220,228,239],[163,209,229],[163,209,230],[163,208,209,231],[163,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256],[163,209,233],[163,209,234],[163,209,220,235,236],[163,209,235,237,251,253],[163,209,220,239,240,242],[163,209,241,242],[163,209,239,240],[163,209,242],[163,209,243],[163,206,209,239,244],[163,209,220,245,246],[163,209,245,246],[163,209,214,228,239,247],[163,209,248],[163,209,228,249],[163,209,223,234,250],[163,209,214,251],[163,209,239,252],[163,209,227,253],[163,209,254],[163,204,209],[163,204,209,220,222,231,239,242,250,253,255],[163,209,239,256],[96,102,120,121,122,125,163,209],[132,163,209],[132,133,163,209],[100,102,103,163,209],[100,102,163,209],[100,163,209],[95,100,111,112,163,209],[95,100,111,163,209],[119,163,209],[95,101,163,209],[95,163,209],[97,163,209],[95,96,97,98,99,163,209],[138,139,163,209],[138,139,140,141,163,209],[138,140,163,209],[138,163,209],[163,176,180,209,250],[163,176,209,239,250],[163,171,209],[163,173,176,209,247,250],[163,209,228,247],[163,209,257],[163,171,209,257],[163,173,176,209,228,250],[163,168,169,172,175,209,220,239,250],[163,176,183,209],[163,168,174,209],[163,176,197,198,209],[163,172,176,209,242,250,257],[163,197,209,257],[163,170,171,209,257],[163,176,209],[163,170,171,172,173,174,175,176,177,178,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,198,199,200,201,202,203,209],[163,176,191,209],[163,176,183,184,209],[163,174,176,184,185,209],[163,175,209],[163,168,171,176,209],[163,176,180,184,185,209],[163,180,209],[163,174,176,179,209,250],[163,168,173,176,183,209],[163,209,239],[163,171,176,197,209,255,257],[106,163,209],[106,107,108,109,163,209],[108,163,209],[104,127,128,130,163,209],[104,105,117,130,163,209],[95,102,104,105,113,130,163,209],[110,163,209],[95,104,105,113,126,129,130,163,209],[104,105,110,113,130,163,209],[104,127,128,129,130,163,209],[104,110,114,115,116,130,163,209],[95,100,102,104,105,110,113,114,115,116,117,118,120,126,127,128,129,130,131,134,135,136,137,142,163,209],[95,102,104,105,113,114,127,128,129,130,135,163,209],[63,143,163,209,222,229,230],[63,64,143,163,209,222,229,230],[62,143,163,209],[63,64,92,143,163,209,222,229,230],[92,143,163,209,222,229,230],[60,143,163,209],[66,143,163,209],[62,63,64,143,163,209,222,229,230],[65,91,143,163,209,222,229,230],[143,155,163,209,222,229,230,250],[163,209,210],[63,92,143,163,209,222,229,230],[62,94,143,163,209,221,257],[93,143,163,209],[60,163,209,221,230],[60,62,163,209,214,222,230],[64,163,209,222,230],[60,61,62,63,64,65,66,90,91,92,93,163,209],[163,209,214],[62,63,163,209,214,222,230],[89,163,209,214],[62,163,209,214,222,230],[63,64,163,209],[62,163,209],[68,69,71,163,209],[68,69,71,89,163,209],[70,163,209],[69,71,80,163,209],[89,163,209],[68,80,81,82,89,163,209],[67,68,69,71,73,74,75,76,79,80,81,82,83,86,87,88,163,209],[72,89,163,209],[73,163,209],[72,73,77,78,163,209],[69,73,77,163,209],[80,81,163,209],[69,83,163,209],[83,84,85,163,209],[69,83,84,163,209]],"fileInfos":[{"version":"bcd24271a113971ba9eb71ff8cb01bc6b0f872a85c23fdbe5d93065b375933cd","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f88bedbeb09c6f5a6645cb24c7c55f1aa22d19ae96c8e6959cbd8b85a707bc6","impliedFormat":1},{"version":"7fe93b39b810eadd916be8db880dd7f0f7012a5cc6ffb62de8f62a2117fa6f1f","impliedFormat":1},{"version":"bb0074cc08b84a2374af33d8bf044b80851ccc9e719a5e202eacf40db2c31600","impliedFormat":1},{"version":"1a7daebe4f45fb03d9ec53d60008fbf9ac45a697fdc89e4ce218bc94b94f94d6","impliedFormat":1},{"version":"f94b133a3cb14a288803be545ac2683e0d0ff6661bcd37e31aaaec54fc382aed","impliedFormat":1},{"version":"f59d0650799f8782fd74cf73c19223730c6d1b9198671b1c5b3a38e1188b5953","impliedFormat":1},{"version":"8a15b4607d9a499e2dbeed9ec0d3c0d7372c850b2d5f1fb259e8f6d41d468a84","impliedFormat":1},{"version":"26e0fe14baee4e127f4365d1ae0b276f400562e45e19e35fd2d4c296684715e6","impliedFormat":1},{"version":"d6b1eba8496bdd0eed6fc8a685768fe01b2da4a0388b5fe7df558290bffcf32f","affectsGlobalScope":true,"impliedFormat":1},{"version":"7f57fc4404ff020bc45b9c620aff2b40f700b95fe31164024c453a5e3c163c54","impliedFormat":1},{"version":"eadcffda2aa84802c73938e589b9e58248d74c59cb7fcbca6474e3435ac15504","affectsGlobalScope":true,"impliedFormat":1},{"version":"105ba8ff7ba746404fe1a2e189d1d3d2e0eb29a08c18dded791af02f29fb4711","affectsGlobalScope":true,"impliedFormat":1},{"version":"00343ca5b2e3d48fa5df1db6e32ea2a59afab09590274a6cccb1dbae82e60c7c","affectsGlobalScope":true,"impliedFormat":1},{"version":"ebd9f816d4002697cb2864bea1f0b70a103124e18a8cd9645eeccc09bdf80ab4","affectsGlobalScope":true,"impliedFormat":1},{"version":"2c1afac30a01772cd2a9a298a7ce7706b5892e447bb46bdbeef720f7b5da77ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"7b0225f483e4fa685625ebe43dd584bb7973bbd84e66a6ba7bbe175ee1048b4f","affectsGlobalScope":true,"impliedFormat":1},{"version":"c0a4b8ac6ce74679c1da2b3795296f5896e31c38e888469a8e0f99dc3305de60","affectsGlobalScope":true,"impliedFormat":1},{"version":"3084a7b5f569088e0146533a00830e206565de65cae2239509168b11434cd84f","affectsGlobalScope":true,"impliedFormat":1},{"version":"c5079c53f0f141a0698faa903e76cb41cd664e3efb01cc17a5c46ec2eb0bef42","affectsGlobalScope":true,"impliedFormat":1},{"version":"32cafbc484dea6b0ab62cf8473182bbcb23020d70845b406f80b7526f38ae862","affectsGlobalScope":true,"impliedFormat":1},{"version":"fca4cdcb6d6c5ef18a869003d02c9f0fd95df8cfaf6eb431cd3376bc034cad36","affectsGlobalScope":true,"impliedFormat":1},{"version":"b93ec88115de9a9dc1b602291b85baf825c85666bf25985cc5f698073892b467","affectsGlobalScope":true,"impliedFormat":1},{"version":"f5c06dcc3fe849fcb297c247865a161f995cc29de7aa823afdd75aaaddc1419b","affectsGlobalScope":true,"impliedFormat":1},{"version":"b77e16112127a4b169ef0b8c3a4d730edf459c5f25fe52d5e436a6919206c4d7","affectsGlobalScope":true,"impliedFormat":1},{"version":"fbffd9337146eff822c7c00acbb78b01ea7ea23987f6c961eba689349e744f8c","affectsGlobalScope":true,"impliedFormat":1},{"version":"a995c0e49b721312f74fdfb89e4ba29bd9824c770bbb4021d74d2bf560e4c6bd","affectsGlobalScope":true,"impliedFormat":1},{"version":"c7b3542146734342e440a84b213384bfa188835537ddbda50d30766f0593aff9","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce6180fa19b1cccd07ee7f7dbb9a367ac19c0ed160573e4686425060b6df7f57","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f02e2476bccb9dbe21280d6090f0df17d2f66b74711489415a8aa4df73c9675","affectsGlobalScope":true,"impliedFormat":1},{"version":"45e3ab34c1c013c8ab2dc1ba4c80c780744b13b5676800ae2e3be27ae862c40c","affectsGlobalScope":true,"impliedFormat":1},{"version":"805c86f6cca8d7702a62a844856dbaa2a3fd2abef0536e65d48732441dde5b5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"e42e397f1a5a77994f0185fd1466520691456c772d06bf843e5084ceb879a0ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"f4c2b41f90c95b1c532ecc874bd3c111865793b23aebcc1c3cbbabcd5d76ffb0","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab26191cfad5b66afa11b8bf935ef1cd88fabfcb28d30b2dfa6fad877d050332","affectsGlobalScope":true,"impliedFormat":1},{"version":"2088bc26531e38fb05eedac2951480db5309f6be3fa4a08d2221abb0f5b4200d","affectsGlobalScope":true,"impliedFormat":1},{"version":"cb9d366c425fea79716a8fb3af0d78e6b22ebbab3bd64d25063b42dc9f531c1e","affectsGlobalScope":true,"impliedFormat":1},{"version":"500934a8089c26d57ebdb688fc9757389bb6207a3c8f0674d68efa900d2abb34","affectsGlobalScope":true,"impliedFormat":1},{"version":"689da16f46e647cef0d64b0def88910e818a5877ca5379ede156ca3afb780ac3","affectsGlobalScope":true,"impliedFormat":1},{"version":"bc21cc8b6fee4f4c2440d08035b7ea3c06b3511314c8bab6bef7a92de58a2593","affectsGlobalScope":true,"impliedFormat":1},{"version":"7ca53d13d2957003abb47922a71866ba7cb2068f8d154877c596d63c359fed25","affectsGlobalScope":true,"impliedFormat":1},{"version":"54725f8c4df3d900cb4dac84b64689ce29548da0b4e9b7c2de61d41c79293611","affectsGlobalScope":true,"impliedFormat":1},{"version":"e5594bc3076ac29e6c1ebda77939bc4c8833de72f654b6e376862c0473199323","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f3eb332c2d73e729f3364fcc0c2b375e72a121e8157d25a82d67a138c83a95c","affectsGlobalScope":true,"impliedFormat":1},{"version":"6f4427f9642ce8d500970e4e69d1397f64072ab73b97e476b4002a646ac743b1","affectsGlobalScope":true,"impliedFormat":1},{"version":"48915f327cd1dea4d7bd358d9dc7732f58f9e1626a29cc0c05c8c692419d9bb7","affectsGlobalScope":true,"impliedFormat":1},{"version":"b7bf9377723203b5a6a4b920164df22d56a43f593269ba6ae1fdc97774b68855","affectsGlobalScope":true,"impliedFormat":1},{"version":"db9709688f82c9e5f65a119c64d835f906efe5f559d08b11642d56eb85b79357","affectsGlobalScope":true,"impliedFormat":1},{"version":"4b25b8c874acd1a4cf8444c3617e037d444d19080ac9f634b405583fd10ce1f7","affectsGlobalScope":true,"impliedFormat":1},{"version":"37be57d7c90cf1f8112ee2636a068d8fd181289f82b744160ec56a7dc158a9f5","affectsGlobalScope":true,"impliedFormat":1},{"version":"a917a49ac94cd26b754ab84e113369a75d1a47a710661d7cd25e961cc797065f","affectsGlobalScope":true,"impliedFormat":1},{"version":"6d3261badeb7843d157ef3e6f5d1427d0eeb0af0cf9df84a62cfd29fd47ac86e","affectsGlobalScope":true,"impliedFormat":1},{"version":"195daca651dde22f2167ac0d0a05e215308119a3100f5e6268e8317d05a92526","affectsGlobalScope":true,"impliedFormat":1},{"version":"8b11e4285cd2bb164a4dc09248bdec69e9842517db4ca47c1ba913011e44ff2f","affectsGlobalScope":true,"impliedFormat":1},{"version":"0508571a52475e245b02bc50fa1394065a0a3d05277fbf5120c3784b85651799","affectsGlobalScope":true,"impliedFormat":1},{"version":"8f9af488f510c3015af3cc8c267a9e9d96c4dd38a1fdff0e11dc5a544711415b","affectsGlobalScope":true,"impliedFormat":1},{"version":"fc611fea8d30ea72c6bbfb599c9b4d393ce22e2f5bfef2172534781e7d138104","affectsGlobalScope":true,"impliedFormat":1},{"version":"1ce14b81c5cc821994aa8ec1d42b220dd41b27fcc06373bce3958af7421b77d4","affectsGlobalScope":true,"impliedFormat":1},{"version":"b3a048b3e9302ef9a34ef4ebb9aecfb28b66abb3bce577206a79fee559c230da","affectsGlobalScope":true,"impliedFormat":1},{"version":"4aa15c9cf7ebffed8c14043d2385f12abb0433ccd5f85621297fae7ae05dcc01","signature":"0d81076132183a97ec510145a0d60492031d7c617f2ff7fe8f35edea827ee0b3"},{"version":"bdbbdce986dc09368ac0765a41c7b8ec9a8fbb0b2bf29245803ea82233a3dec2","signature":"d24a344ad57ad53ccecd2fa188c4a4ab2243f5f7a9afb73a592040b512f067af"},{"version":"808a27ba1ee5c3255038479509fe53004e29b2098f553d06a82745a87545a3cd","signature":"55b3b3d14e0017c5c534cbe93dbf665bb3c8a352b5f2f7c4b6fad0c7675fe1c8"},{"version":"15520f5f5668f93dc9b352bf0d50ad79ac64a050ec6e8c34994c9881f06448af","signature":"74b6ebcac6e248128ac9b2972c9e50eb0ad48f76e4449dde5d012deedb9d0988"},{"version":"43edec4a8d34ce01c89b39995dae96037e41e97b86ffbad786df9ce41a8271c9","signature":"bbd3b7572d17142589b7b86b093c2a7e3645bd3ffd2b08abe93ce32529ec0e1f"},{"version":"f2cfd015b01d2fa50ef83fb41726dc13c44aa6e4d962667a986892dda843d405","signature":"87089bbda669ffac032e83664b35a8c2e53dd87f127ee7a984920c3dd6823721"},{"version":"a4da3b6da57eb2bc0b4b7fe4815397634688b42af3f161f5cfe866ae618fe37c","signature":"564ca8274db5e72a7cdaafcee44ef593ab06be9237d00c463bd9c209b2d79100"},"89fe170d9a59f81cd9a9d95de3278f108ff91491810b2529cc0ffb502a57b6c0","0b4928041c807c01b33b1fa028236df635c52f7acff5a40f2c2d0d677b53428b","5ad2e5b8b17893d0eb1f11a1b6e8c03b17344be03a6a72a624cd38ab05fe4d5c","6a1e553079e654a1771463e9eeb98ea4f7bb4b6417a5237d4fdf9b546d49647f","7f11be86b9ac5c2cd5127cd9d40ccc7694c58868a3157692a153d452fc171525","6e3488ee1183ea915eb43f08aebc5f75e30be25aef1f678d1965324bdd7506e1","08b2edc86cfd71fe5a832912df79e79040c90c9df60ed2af1dc50f7baef36aeb","a318d8734523d9e750681e7b8e685ef817d4049c5612451f4e849da8b2b572a9","8b52dd8be86f44f871db89a6c1f77f7585688d53141ff55b6c5fac3eb67b1241","beae2d03867dde9fdf8da461c7e7e84da71612842422d4b482ab1c2a15fe6b12","2aa457dd6699d3015c3c98457ac72a2dd47349f75a1edddbace0ee86dd7177c9","51342c51a9090c0bc8bae60c5ec1a0f46d6d44db84392f12a8cd46e6d8a9f617","ae777307a0baeb9b5d7ba18e6a029a54eb0b612b1491591dcedb020cc8d36f97","d7ba738e316b7baed10ca49cc156b57b8c973b747bec6612e62a925e9f7f33a4","1d5292578fcf0329a43ef19fe2481d7d1cde75e75610019a7897c70dcfff0b31","459b3765e622008ed590474ae6b61ab55107a7b9529a28d05087a6fef51d7248","d4acac107ca8b949e32947d9b5afa27721584f4ffd7ad7a4008fae892a4ec913","b52569fa5c5793a182d033b2fc7443e27205625dc67782a03d2e2e972a2918f3","097ebdc98e0de1205b1104df5038026ca5830b80faee3707b78e7c28ce6dde55","1ae177260d032e05e62f0432227af19a857b327fa604a9b34baa535f44db130e","e1f11ad703121f97a74001059d054aba25c9c4662af44da05ead0a247fe18742","d9c64d02dfe3a9c74da35fdbcc645cf4e8d4ca0f4162ec312de51474103ac3a7","ef30959e03d8e4ede695c8b400a9b9004a49ed6448214f087271d4f1e56352ba",{"version":"1f701172d8769c8ac7b1b6c9fd90e50cd4ef6cfda910c6139fa502f8b9561c5b","signature":"6c70d81036246c9137139acbf472b8d05f32abcc21fd203ea4ec837bd02c1723"},{"version":"41148bc6287111f2df08dde2de4970fccbc4062e696dec733bdf267885c167b6","signature":"5666abc02391a07d501c8c72b4110337702941ccdb567bd53cf49ec68a760879"},{"version":"835873fd8e2d4563a9be58a02134c7be3fb893103826f96ee4bf6b20198619e6","signature":"640a7eef1b5d3d9c5b1ffce130344213cedb26f553155d0bb3a4e3743e1d49a3"},{"version":"51a33584cef13ea865b9d5de78f89987cf21bb92df3587d622d549802e22fd26","signature":"dd261dd8d827f7e7f9e467e1281d5aee4b55727c1e6cca190f5f663eb28aa2e3"},{"version":"9bcbf055170c05b71626b94426d1d11a168d17cf22ff9df8493d1756d330b3c8","signature":"38496f4e66cde8ff0ad1245584947b21b8f2fb086c4d88158d4526ce15c03600"},{"version":"3a582c6e8906f5b094ccf0de6cc6f4f8a54b05a34f52517aba5c9c7f704f6b28","impliedFormat":99},{"version":"0528f6d21f7a02d4092895090d2dd86104bd5a3e79eced96d5a1a7dd90943d17","impliedFormat":99},{"version":"b5ce343886d23392be9c8280e9f24a87f1d7d3667f6672c2fe4aa61fa4ece7d4","impliedFormat":99},{"version":"72ce5b734c05da85c85a6f6dc05823b051d6aa41acaedeeb1d17c72f3b4efa72","impliedFormat":99},{"version":"b0857bb28fd5236ace84280f79a25093f919fd0eff13e47cc26ea03de60a7294","impliedFormat":99},{"version":"5e43e0824f10cd8c48e7a8c5c673638488925a12c31f0f9e0957965c290eb14c","impliedFormat":99},{"version":"ef13c73d6157a32933c612d476c1524dd674cf5b9a88571d7d6a0d147544d529","impliedFormat":99},{"version":"49ab4f1d153a252779958fc87b700743d32b5ffa42addd70ae23ad3f429daa5c","impliedFormat":99},{"version":"53cf4076f42b29b8d411259d168d51b3a0274c42c8814e5b44dfa8803a35d4fc","impliedFormat":99},{"version":"a39461ee1f27cf3e6cfd63d21045713d26d521da55ea4d8efccb705f689e6dbb","impliedFormat":99},{"version":"61bb64660ee150f3ab618340e15cca0a81664801bede7c966ca0eca3a952fe63","impliedFormat":99},{"version":"3b89216a7e38a454985ad17bb2ff85792837dc812f2a89fa5f60ad0a2e216fa7","impliedFormat":99},{"version":"16fe60bb544cfedfd2b5bb2f7d0b3957be7978706d57d9f06edc9c0c8dbdba23","impliedFormat":99},{"version":"82179358c2d9d7347f1602dc9300039a2250e483137b38ebf31d4d2e5519c181","impliedFormat":99},{"version":"4e003c868b0d8f8ad200b96cbc653e18e513fa23e1c19c4fe3cc25d4394efc47","impliedFormat":99},{"version":"605450898939e8abce51e8085a41b60640278337a969c33cd6b169e7c4f9c3f2","impliedFormat":99},{"version":"42a12f2faa483c9b48195ed794d22698162274e755f6e07219c2351c4f08d732","impliedFormat":99},{"version":"ec0c42bb0f465e4993f2bc68a6ce9df9a2dcbc7b83e21748f82f1b69561938e3","impliedFormat":99},{"version":"f50ff37a9cbbe74475f426474d9827083c7c2c138a954d28f1690df338f69291","impliedFormat":99},{"version":"61fd6c17235d530c40f543dd7c40afab091d91c1ef890baeed30db6d82b04b28","impliedFormat":99},{"version":"bcbd3becd08b4515225880abea0dbfbbf0d1181ce3af8f18f72f61edbe4febfb","impliedFormat":99},{"version":"091767bc841f937654ed597d49e023ed59850355e746ae1a6f20ab31076ee1fb","impliedFormat":99},{"version":"19c6d6135af59693698d384050b45a8a049493500add442f58e4bd7c8a255ab6","impliedFormat":99},{"version":"6a0dba12d55314638a8c51108b20fe2f68f1364a619d098918bda91c22dec154","impliedFormat":99},{"version":"c76c02846ba7d40b9b3488f0e8d75d02cbdee2f0bc5fcd55dd3bd2e1457646ea","impliedFormat":99},{"version":"4ead13a482c539b77394b2a97e3b877b809eac596390371cea490286f53b996a","impliedFormat":99},{"version":"06db2f8ba1d1dfacf04529cb731081ab23f133f29c7608ebdfbcab356996827c","impliedFormat":99},{"version":"bdd14f07b4eca0b4b5203b85b8dbc4d084c749fa590bee5ea613e1641dcd3b29","impliedFormat":99},{"version":"427fe2004642504828c1476d0af4270e6ad4db6de78c0b5da3e4c5ca95052a99","impliedFormat":1},{"version":"2eeffcee5c1661ddca53353929558037b8cf305ffb86a803512982f99bcab50d","impliedFormat":99},{"version":"9afb4cb864d297e4092a79ee2871b5d3143ea14153f62ef0bb04ede25f432030","affectsGlobalScope":true,"impliedFormat":99},{"version":"5c935b7fc4ddc1410ea1cd7cd4e35ed106a6e4920dd27a9480a40fd224359dc3","affectsGlobalScope":true,"impliedFormat":99},{"version":"2b39c6cf59088713babbfc3e20ee85f1375d40e66953156fa658346b8346f24f","impliedFormat":99},{"version":"69bf2422313487956e4dacf049f30cb91b34968912058d244cb19e4baa24da97","impliedFormat":99},{"version":"6987dfb4b0c4e02112cc4e548e7a77b3d9ddfeffa8c8a2db13ceac361a4567d9","impliedFormat":99},{"version":"4ffba3c5848b4fe62ee59b754fd5f256ad9656a0db6d37b9a2a8cb40dfc7ac21","impliedFormat":99},{"version":"c76c02846ba7d40b9b3488f0e8d75d02cbdee2f0bc5fcd55dd3bd2e1457646ea","impliedFormat":99},{"version":"5e2ba3d18d78aebbde1f34bde356e41e9c76eeaeaeee56a37036596a9eff4211","impliedFormat":99},{"version":"8280ae8ccc0493b32d1742d585357ab9f0a508ea050af25a5a20d64010d0a5cf","impliedFormat":99},{"version":"7adfd9f9056ecd4ae6c65fde2a98654960c662714c73f048478959d04c09e144","impliedFormat":99},{"version":"32b35cf0dc3a1b1a7118b61c34ce2ad1a29695851679f9ec34e0776f2ece2a69","impliedFormat":99},{"version":"b413fbc6658fe2774f8bf9a15cf4c53e586fc38a2d5256b3b9647da242c14389","impliedFormat":99},{"version":"59e5e964b84fdb2378e9455e4e59405030e4ed2b4c6f891ce395f17796af3cbb","impliedFormat":99},{"version":"c30a41267fc04c6518b17e55dcb2b810f267af4314b0b6d7df1c33a76ce1b330","impliedFormat":1},{"version":"72422d0bac4076912385d0c10911b82e4694fc106e2d70added091f88f0824ba","impliedFormat":1},{"version":"da251b82c25bee1d93f9fd80c5a61d945da4f708ca21285541d7aff83ecb8200","impliedFormat":1},{"version":"64db14db2bf37ac089766fdb3c7e1160fabc10e9929bc2deeede7237e4419fc8","impliedFormat":1},{"version":"98b94085c9f78eba36d3d2314affe973e8994f99864b8708122750788825c771","impliedFormat":1},{"version":"90ba95a763101bb61b8a799731a2ed60b5016b8135c1a2d5186862d4b534d4a1","impliedFormat":99},{"version":"bc515bf319cc6d435bababa884ffbde0f5b51fdfde5fece4e6a3450b264e235c","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"f15c678a02cd4b90a4fc11d6fe930dd9a32f2b55e75da1f5a7b9fe725420a0f3","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"64677441359673daa0012542dad3b5dcca6f37758767232d12d6a6e6ca49c7fc","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"0c42de9e3b6a24ec2204b89cd87c1c1a25b6b3f8306b8664cd846bfe6e82ed05","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"abcee8de5d7e2d4f1ced16d84296cd898860e0ce0d9247bd22469725bbd6f928","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"4bc07b813e3c8a232984020852457d1afa9ea8abd46e7ea3a0834218066ff0cf","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"3bce2254c55aadfeee3fec677260b646d350737ec5cc720634983a09f9f082df","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"0b821d738c5644a958f6e7fe5c9c3cd8a78d1793aca9f2e250e3565ee4da0606","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"f37cb836f64d2c324e0b46813c17bffbed9180e776a6ed6606977cc6a2d555ce","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"3cca9861cda9b39a0898bf8745c4be4921eb249063bda80ef576ed85b74c790d","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"e88c78084c5d7462d40cbf454913b2f21879d04eec9e8d33d902af3dde0fd929","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"ec70d33e4e78dc72b169cc8644378eff8a2f754657d6b18c3650946a0e6caa0a","signature":"6b734045ca6607a1eb0d808b900825f21e77264db040355bf2ae811d18dc5143"},{"version":"42ce8340284b0cf39ea71d78cae22cb7c5c5ea712683d57a15e1cf3954031961","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"b9a26406f66dcc6db304414ea3c22a830ce189eac90380d1b92f777b64e94331","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"70521b6ab0dcba37539e5303104f29b721bfb2940b2776da4cc818c07e1fefc1","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab41ef1f2cdafb8df48be20cd969d875602483859dc194e9c97c8a576892c052","affectsGlobalScope":true,"impliedFormat":1},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"21d819c173c0cf7cc3ce57c3276e77fd9a8a01d35a06ad87158781515c9a438a","impliedFormat":1},{"version":"98cffbf06d6bab333473c70a893770dbe990783904002c4f1a960447b4b53dca","affectsGlobalScope":true,"impliedFormat":1},{"version":"ba481bca06f37d3f2c137ce343c7d5937029b2468f8e26111f3c9d9963d6568d","affectsGlobalScope":true,"impliedFormat":1},{"version":"6d9ef24f9a22a88e3e9b3b3d8c40ab1ddb0853f1bfbd5c843c37800138437b61","affectsGlobalScope":true,"impliedFormat":1},{"version":"1db0b7dca579049ca4193d034d835f6bfe73096c73663e5ef9a0b5779939f3d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true,"impliedFormat":1},{"version":"f26b11d8d8e4b8028f1c7d618b22274c892e4b0ef5b3678a8ccbad85419aef43","affectsGlobalScope":true,"impliedFormat":1},{"version":"5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","impliedFormat":1},{"version":"763fe0f42b3d79b440a9b6e51e9ba3f3f91352469c1e4b3b67bfa4ff6352f3f4","impliedFormat":1},{"version":"25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","impliedFormat":1},{"version":"c464d66b20788266e5353b48dc4aa6bc0dc4a707276df1e7152ab0c9ae21fad8","impliedFormat":1},{"version":"78d0d27c130d35c60b5e5566c9f1e5be77caf39804636bc1a40133919a949f21","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"1d6e127068ea8e104a912e42fc0a110e2aa5a66a356a917a163e8cf9a65e4a75","impliedFormat":1},{"version":"5ded6427296cdf3b9542de4471d2aa8d3983671d4cac0f4bf9c637208d1ced43","impliedFormat":1},{"version":"7f182617db458e98fc18dfb272d40aa2fff3a353c44a89b2c0ccb3937709bfb5","impliedFormat":1},{"version":"cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","impliedFormat":1},{"version":"385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","impliedFormat":1},{"version":"9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","impliedFormat":1},{"version":"0b8a9268adaf4da35e7fa830c8981cfa22adbbe5b3f6f5ab91f6658899e657a7","impliedFormat":1},{"version":"11396ed8a44c02ab9798b7dca436009f866e8dae3c9c25e8c1fbc396880bf1bb","impliedFormat":1},{"version":"ba7bc87d01492633cb5a0e5da8a4a42a1c86270e7b3d2dea5d156828a84e4882","impliedFormat":1},{"version":"4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","impliedFormat":1},{"version":"c21dc52e277bcfc75fac0436ccb75c204f9e1b3fa5e12729670910639f27343e","impliedFormat":1},{"version":"13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","impliedFormat":1},{"version":"9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","impliedFormat":1},{"version":"4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","impliedFormat":1},{"version":"24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","impliedFormat":1},{"version":"ea0148f897b45a76544ae179784c95af1bd6721b8610af9ffa467a518a086a43","impliedFormat":1},{"version":"24c6a117721e606c9984335f71711877293a9651e44f59f3d21c1ea0856f9cc9","impliedFormat":1},{"version":"dd3273ead9fbde62a72949c97dbec2247ea08e0c6952e701a483d74ef92d6a17","impliedFormat":1},{"version":"405822be75ad3e4d162e07439bac80c6bcc6dbae1929e179cf467ec0b9ee4e2e","impliedFormat":1},{"version":"0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","impliedFormat":1},{"version":"e61be3f894b41b7baa1fbd6a66893f2579bfad01d208b4ff61daef21493ef0a8","impliedFormat":1},{"version":"bd0532fd6556073727d28da0edfd1736417a3f9f394877b6d5ef6ad88fba1d1a","impliedFormat":1},{"version":"89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","impliedFormat":1},{"version":"615ba88d0128ed16bf83ef8ccbb6aff05c3ee2db1cc0f89ab50a4939bfc1943f","impliedFormat":1},{"version":"a4d551dbf8746780194d550c88f26cf937caf8d56f102969a110cfaed4b06656","impliedFormat":1},{"version":"8bd86b8e8f6a6aa6c49b71e14c4ffe1211a0e97c80f08d2c8cc98838006e4b88","impliedFormat":1},{"version":"317e63deeb21ac07f3992f5b50cdca8338f10acd4fbb7257ebf56735bf52ab00","impliedFormat":1},{"version":"4732aec92b20fb28c5fe9ad99521fb59974289ed1e45aecb282616202184064f","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"bf67d53d168abc1298888693338cb82854bdb2e69ef83f8a0092093c2d562107","impliedFormat":1},{"version":"b52476feb4a0cbcb25e5931b930fc73cb6643fb1a5060bf8a3dda0eeae5b4b68","affectsGlobalScope":true,"impliedFormat":1},{"version":"e2677634fe27e87348825bb041651e22d50a613e2fdf6a4a3ade971d71bac37e","impliedFormat":1},{"version":"7394959e5a741b185456e1ef5d64599c36c60a323207450991e7a42e08911419","impliedFormat":1},{"version":"8c0bcd6c6b67b4b503c11e91a1fb91522ed585900eab2ab1f61bba7d7caa9d6f","impliedFormat":1},{"version":"8cd19276b6590b3ebbeeb030ac271871b9ed0afc3074ac88a94ed2449174b776","affectsGlobalScope":true,"impliedFormat":1},{"version":"696eb8d28f5949b87d894b26dc97318ef944c794a9a4e4f62360cd1d1958014b","impliedFormat":1},{"version":"3f8fa3061bd7402970b399300880d55257953ee6d3cd408722cb9ac20126460c","impliedFormat":1},{"version":"35ec8b6760fd7138bbf5809b84551e31028fb2ba7b6dc91d95d098bf212ca8b4","affectsGlobalScope":true,"impliedFormat":1},{"version":"5524481e56c48ff486f42926778c0a3cce1cc85dc46683b92b1271865bcf015a","impliedFormat":1},{"version":"68bd56c92c2bd7d2339457eb84d63e7de3bd56a69b25f3576e1568d21a162398","affectsGlobalScope":true,"impliedFormat":1},{"version":"3e93b123f7c2944969d291b35fed2af79a6e9e27fdd5faa99748a51c07c02d28","impliedFormat":1},{"version":"9d19808c8c291a9010a6c788e8532a2da70f811adb431c97520803e0ec649991","impliedFormat":1},{"version":"87aad3dd9752067dc875cfaa466fc44246451c0c560b820796bdd528e29bef40","impliedFormat":1},{"version":"4aacb0dd020eeaef65426153686cc639a78ec2885dc72ad220be1d25f1a439df","impliedFormat":1},{"version":"f0bd7e6d931657b59605c44112eaf8b980ba7f957a5051ed21cb93d978cf2f45","impliedFormat":1},{"version":"8db0ae9cb14d9955b14c214f34dae1b9ef2baee2fe4ce794a4cd3ac2531e3255","affectsGlobalScope":true,"impliedFormat":1},{"version":"15fc6f7512c86810273af28f224251a5a879e4261b4d4c7e532abfbfc3983134","impliedFormat":1},{"version":"58adba1a8ab2d10b54dc1dced4e41f4e7c9772cbbac40939c0dc8ce2cdb1d442","impliedFormat":1},{"version":"641942a78f9063caa5d6b777c99304b7d1dc7328076038c6d94d8a0b81fc95c1","impliedFormat":1},{"version":"092c1137e31de289f3cc6a57fdccb3cca298d8a680d1e367d206d3318f1394a1","impliedFormat":1},{"version":"855cd5f7eb396f5f1ab1bc0f8580339bff77b68a770f84c6b254e319bbfd1ac7","impliedFormat":1},{"version":"5650cf3dace09e7c25d384e3e6b818b938f68f4e8de96f52d9c5a1b3db068e86","impliedFormat":1},{"version":"1354ca5c38bd3fd3836a68e0f7c9f91f172582ba30ab15bb8c075891b91502b7","affectsGlobalScope":true,"impliedFormat":1},{"version":"7e20d899c28ca26a2a7afc98beaa69e63ff7fba0a8bc47b4e3bf3ede5e09e424","impliedFormat":1},{"version":"2d2fcaab481b31a5882065c7951255703ddbe1c0e507af56ea42d79ac3911201","impliedFormat":1},{"version":"a192fe8ec33f75edbc8d8f3ed79f768dfae11ff5735e7fe52bfa69956e46d78d","impliedFormat":1},{"version":"ca867399f7db82df981d6915bcbb2d81131d7d1ef683bc782b59f71dda59bc85","affectsGlobalScope":true,"impliedFormat":1},{"version":"372413016d17d804e1d139418aca0c68e47a83fb6669490857f4b318de8cccb3","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e043a1bc8fbf2a255bccf9bf27e0f1caf916c3b0518ea34aa72357c0afd42ec","impliedFormat":1},{"version":"b4f70ec656a11d570e1a9edce07d118cd58d9760239e2ece99306ee9dfe61d02","impliedFormat":1},{"version":"3bc2f1e2c95c04048212c569ed38e338873f6a8593930cf5a7ef24ffb38fc3b6","impliedFormat":1},{"version":"6e70e9570e98aae2b825b533aa6292b6abd542e8d9f6e9475e88e1d7ba17c866","impliedFormat":1},{"version":"f9d9d753d430ed050dc1bf2667a1bab711ccbb1c1507183d794cc195a5b085cc","impliedFormat":1},{"version":"9eece5e586312581ccd106d4853e861aaaa1a39f8e3ea672b8c3847eedd12f6e","impliedFormat":1},{"version":"085f552d005479e2e6a7311cdbbe5d8c55c497b4d19274285df161ee9684cd9c","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"45650f47bfb376c8a8ed39d4bcda5902ab899a3150029684ee4c10676d9fbaee","impliedFormat":1},{"version":"007faacc9268357caa21d24169f3f3f2497af3e9241308df2d89f6e6d9bb3f2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"74cf591a0f63db318651e0e04cb55f8791385f86e987a67fd4d2eaab8191f730","impliedFormat":1},{"version":"5eab9b3dc9b34f185417342436ec3f106898da5f4801992d8ff38ab3aff346b5","impliedFormat":1},{"version":"12ed4559eba17cd977aa0db658d25c4047067444b51acfdcbf38470630642b23","affectsGlobalScope":true,"impliedFormat":1},{"version":"f3ffabc95802521e1e4bcba4c88d8615176dc6e09111d920c7a213bdda6e1d65","impliedFormat":1},{"version":"809821b8a065e3234a55b3a9d7846231ed18d66dd749f2494c66288d890daf7f","impliedFormat":1},{"version":"ae56f65caf3be91108707bd8dfbccc2a57a91feb5daabf7165a06a945545ed26","impliedFormat":1},{"version":"a136d5de521da20f31631a0a96bf712370779d1c05b7015d7019a9b2a0446ca9","impliedFormat":1},{"version":"c3b41e74b9a84b88b1dca61ec39eee25c0dbc8e7d519ba11bb070918cfacf656","affectsGlobalScope":true,"impliedFormat":1},{"version":"4737a9dc24d0e68b734e6cfbcea0c15a2cfafeb493485e27905f7856988c6b29","affectsGlobalScope":true,"impliedFormat":1},{"version":"36d8d3e7506b631c9582c251a2c0b8a28855af3f76719b12b534c6edf952748d","impliedFormat":1},{"version":"1ca69210cc42729e7ca97d3a9ad48f2e9cb0042bada4075b588ae5387debd318","impliedFormat":1},{"version":"f5ebe66baaf7c552cfa59d75f2bfba679f329204847db3cec385acda245e574e","impliedFormat":1},{"version":"ed59add13139f84da271cafd32e2171876b0a0af2f798d0c663e8eeb867732cf","affectsGlobalScope":true,"impliedFormat":1},{"version":"b7c5e2ea4a9749097c347454805e933844ed207b6eefec6b7cfd418b5f5f7b28","impliedFormat":1},{"version":"b1810689b76fd473bd12cc9ee219f8e62f54a7d08019a235d07424afbf074d25","impliedFormat":1},{"version":"ed54b4df9d73ecc853f39d6c3b2df761e1ad9fbcfd97bdf04727860dd4db386b","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"53b86996d640250983322e55bfe3d3448befd84874ae21aae8b02a35e1ee645a","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"}],"root":[[60,66],[90,94],[144,157],258,259],"options":{"composite":true,"declaration":true,"declarationMap":true,"emitDeclarationOnly":true,"exactOptionalPropertyTypes":true,"module":99,"noFallthroughCasesInSwitch":true,"noImplicitOverride":true,"noImplicitReturns":true,"noUncheckedIndexedAccess":true,"noUnusedLocals":true,"noUnusedParameters":true,"outDir":"./","rootDir":"../src","skipLibCheck":true,"strict":true,"target":9,"tsBuildInfoFile":"./.tsbuildinfo","useDefineForClassFields":true,"verbatimModuleSyntax":true},"referencedMap":[[122,1],[125,2],[123,1],[206,3],[207,3],[208,4],[163,5],[209,6],[210,7],[211,8],[158,1],[161,9],[159,1],[160,1],[212,10],[213,11],[214,12],[215,13],[216,14],[217,15],[218,15],[219,16],[220,17],[221,18],[222,19],[164,1],[162,1],[223,20],[224,21],[225,22],[257,23],[226,24],[227,25],[228,26],[229,27],[230,28],[231,29],[232,30],[233,31],[234,32],[235,33],[236,33],[237,34],[238,1],[239,35],[241,36],[240,37],[242,38],[243,39],[244,40],[245,41],[246,42],[247,43],[248,44],[249,45],[250,46],[251,47],[252,48],[253,49],[254,50],[165,1],[166,1],[167,1],[205,51],[255,52],[256,53],[126,54],[133,55],[134,56],[132,1],[95,1],[104,57],[103,58],[127,57],[111,59],[113,60],[112,61],[120,62],[119,1],[102,63],[96,64],[98,65],[100,66],[99,1],[101,64],[97,1],[124,1],[140,67],[142,68],[141,69],[139,70],[138,1],[128,1],[121,1],[58,1],[59,1],[10,1],[11,1],[13,1],[12,1],[2,1],[14,1],[15,1],[16,1],[17,1],[18,1],[19,1],[20,1],[21,1],[3,1],[22,1],[23,1],[4,1],[24,1],[28,1],[25,1],[26,1],[27,1],[29,1],[30,1],[31,1],[5,1],[32,1],[33,1],[34,1],[35,1],[6,1],[39,1],[36,1],[37,1],[38,1],[40,1],[7,1],[41,1],[46,1],[47,1],[42,1],[43,1],[44,1],[45,1],[8,1],[51,1],[48,1],[49,1],[50,1],[52,1],[9,1],[53,1],[54,1],[55,1],[57,1],[56,1],[1,1],[183,71],[193,72],[182,71],[203,73],[174,74],[173,75],[202,76],[196,77],[201,78],[176,79],[190,80],[175,81],[199,82],[171,83],[170,76],[200,84],[172,85],[177,86],[178,1],[181,86],[168,1],[204,87],[194,88],[185,89],[186,90],[188,91],[184,92],[187,93],[197,76],[179,94],[180,95],[189,96],[169,97],[192,88],[191,86],[195,1],[198,98],[107,99],[110,100],[108,99],[106,1],[109,101],[129,102],[118,103],[114,104],[115,59],[136,105],[130,106],[116,107],[135,108],[105,1],[117,109],[143,110],[137,111],[131,1],[144,112],[145,112],[146,113],[147,112],[148,114],[149,115],[150,116],[151,117],[152,118],[153,119],[154,120],[156,121],[155,122],[157,123],[258,124],[259,125],[61,126],[63,127],[62,1],[65,128],[94,129],[60,130],[66,28],[64,131],[90,132],[91,133],[92,134],[93,135],[67,1],[68,1],[70,136],[80,1],[75,137],[71,138],[81,139],[87,140],[76,140],[88,141],[89,142],[73,143],[72,144],[77,1],[79,145],[78,146],[69,1],[82,147],[83,1],[84,148],[86,149],[85,150],[74,1]],"latestChangedDtsFile":"./__tests__/status.unit.test.d.ts","version":"6.0.3"}
|
package/dist/index.mjs
CHANGED
|
@@ -586,14 +586,15 @@ var DdcLifecycle = class {
|
|
|
586
586
|
async commit(lease, validatedKey) {
|
|
587
587
|
return withDdcLock(this.root, `head-${lease.guid}`, async () => {
|
|
588
588
|
const current = await this.read(lease.guid);
|
|
589
|
-
|
|
589
|
+
const active = current?.active;
|
|
590
|
+
if (current === null || active === void 0 || active.attempt !== lease.attempt) {
|
|
590
591
|
if (current?.supersededAttempts?.includes(lease.attempt)) {
|
|
591
592
|
await this.write({ ...current, stale: true });
|
|
592
593
|
return withRevision({ result: "stale", key: validatedKey }, current.revision);
|
|
593
594
|
}
|
|
594
595
|
return withRevision({ result: "lease-lost", key: validatedKey }, current?.revision ?? 0);
|
|
595
596
|
}
|
|
596
|
-
if (Date.now() >
|
|
597
|
+
if (Date.now() > active.expiresAt) {
|
|
597
598
|
throw new DdcStoreError({
|
|
598
599
|
code: "ddc-lease-expired",
|
|
599
600
|
detail: "cook lease expired before commit fencing",
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/key.ts","../src/build-cache.ts","../src/errors.ts","../src/entry-store.ts","../src/lifecycle.ts","../src/gc.ts","../src/layout.ts","../src/publication.ts","../src/runtime-scope.ts","../src/session.ts","../src/status.ts"],"names":["digest","createHash","join","mkdir","writeFile","rm","readFile","randomUUID","nextRevision","failure","rename","readdir","delay"],"mappings":"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","file":"index.mjs","sourcesContent":["import { createHash } from 'node:crypto';\n\nexport interface SemanticDdcInput {\n readonly schemaVersion: string;\n readonly importer: string;\n readonly codec: string;\n readonly settings: unknown;\n readonly sourceBytes: readonly Uint8Array[];\n readonly declaredGuids: readonly string[];\n readonly targetProfile: string;\n readonly producer: string;\n}\n\nexport function canonicalDdcJson(value: unknown): string {\n const sorted = sortValue(value);\n return JSON.stringify(sorted) ?? 'null';\n}\n\nfunction sortValue(value: unknown): unknown {\n if (value instanceof Uint8Array) {\n return { encoding: 'base64', bytes: Buffer.from(value).toString('base64') };\n }\n if (Array.isArray(value)) return value.map(sortValue);\n if (value !== null && typeof value === 'object') {\n const result: Record<string, unknown> = {};\n for (const key of Object.keys(value as Record<string, unknown>).sort()) {\n result[key] = sortValue((value as Record<string, unknown>)[key]);\n }\n return result;\n }\n return value;\n}\n\nexport function semanticDdcKey(input: SemanticDdcInput): string {\n const semantic = {\n schemaVersion: input.schemaVersion,\n importer: input.importer,\n codec: input.codec,\n settings: input.settings,\n sourceBytes: input.sourceBytes,\n declaredGuids: [...input.declaredGuids].sort(),\n targetProfile: input.targetProfile,\n producer: input.producer,\n };\n return createHash('sha256').update(canonicalDdcJson(semantic)).digest('hex');\n}\n","import { existsSync } from 'node:fs';\nimport { dirname, join, resolve } from 'node:path';\nimport { semanticDdcKey as ownerSemanticDdcKey } from './key.js';\n\nexport interface BuildDdcInput {\n readonly schemaVersion: string;\n readonly importerVersion: string;\n readonly codecVersion: string;\n readonly sourceDependencies: readonly (\n | string\n | { readonly path: string; readonly digest: string }\n )[];\n readonly settings: unknown;\n readonly declaredGuids: readonly string[];\n readonly cookProfile: string;\n readonly sourceOverrides?: unknown;\n readonly publish?: unknown;\n}\n\nexport function resolveDdcRoot(cwd: string): string {\n let current = resolve(cwd);\n while (true) {\n if (existsSync(join(current, 'pnpm-workspace.yaml'))) {\n return join(current, 'node_modules/.cache/forgeax-ddc');\n }\n const parent = dirname(current);\n if (parent === current) return join(resolve(cwd), 'node_modules/.cache/forgeax-ddc');\n current = parent;\n }\n}\n\n/** Derive the build key while keeping publish URLs out of the semantic identity. */\nexport function semanticBuildKey(input: BuildDdcInput): string {\n const hasSourceOverrides =\n input.sourceOverrides !== undefined &&\n typeof input.sourceOverrides === 'object' &&\n input.sourceOverrides !== null &&\n !Array.isArray(input.sourceOverrides) &&\n Object.keys(input.sourceOverrides).length > 0;\n const settings = hasSourceOverrides\n ? { settings: input.settings, sourceOverrides: input.sourceOverrides }\n : input.settings;\n return ownerSemanticDdcKey({\n schemaVersion: input.schemaVersion,\n importer: input.importerVersion,\n codec: input.codecVersion,\n settings,\n sourceBytes: input.sourceDependencies\n .map((dependency) =>\n typeof dependency === 'string'\n ? dependency.replaceAll('\\\\', '/').replace(/^.*\\/(assets\\/)/, '$1')\n : dependency.digest,\n )\n .sort()\n .map((digest) => new TextEncoder().encode(digest)),\n declaredGuids: input.declaredGuids,\n targetProfile: input.cookProfile,\n producer: input.importerVersion,\n });\n}\n","export const DDC_ERROR_CODES = [\n 'ddc-project-root-required',\n 'ddc-object-conflict',\n 'ddc-head-conflict',\n 'ddc-generation-conflict',\n 'ddc-scope-mismatch',\n 'ddc-lease-expired',\n] as const;\n\nexport type DdcContractErrorCode = (typeof DDC_ERROR_CODES)[number];\nexport type DdcEntryErrorCode = 'ddc-entry-incomplete' | 'ddc-entry-invalid' | 'ddc-entry-conflict';\nexport type DdcErrorCode = DdcContractErrorCode | DdcEntryErrorCode;\n\nexport type DdcErrorRootKind = 'build-cache' | 'project-ddc' | 'runtime';\n\nexport interface DdcRecoveryAction {\n readonly kind:\n | 'inspect'\n | 'allocate-generation'\n | 'retry'\n | 'cold-rebuild'\n | 'prune'\n | 'release-lease';\n readonly executable: boolean;\n readonly exactTarget?: string;\n readonly reason?: string;\n}\n\nexport interface DdcStoreErrorInit {\n readonly code: DdcErrorCode;\n readonly detail: string;\n readonly hint?: string;\n readonly expected?: unknown;\n readonly actual?: unknown;\n readonly owner?: string;\n readonly rootKind?: DdcErrorRootKind;\n readonly scope?: string;\n readonly generation?: number;\n readonly lease?: string;\n readonly revision?: number;\n readonly recoveryActions?: readonly DdcRecoveryAction[];\n readonly hostPath?: string;\n}\n\nexport interface DdcBrowserError {\n readonly code: DdcErrorCode;\n readonly hint: string;\n readonly expected: unknown;\n readonly actual?: unknown;\n readonly owner?: string;\n readonly rootKind?: DdcErrorRootKind;\n readonly scope?: string;\n readonly generation?: number;\n readonly lease?: string;\n readonly revision?: number;\n readonly recoveryActions: readonly Omit<DdcRecoveryAction, 'exactTarget'>[];\n}\n\nconst defaultHints: Record<DdcErrorCode, string> = {\n 'ddc-project-root-required': 'inject the canonical projectDdcRoot before serving or publishing',\n 'ddc-object-conflict': 'keep the verified object and reject the competing publication',\n 'ddc-head-conflict': 'inspect the current head and retry with a fresh revision',\n 'ddc-generation-conflict': 'allocate a new persistent generation; do not edit the counter',\n 'ddc-scope-mismatch': 'reinspect the canonical root and allocate a new scope',\n 'ddc-lease-expired': 'discard the stale commit and acquire a new lease',\n 'ddc-entry-incomplete': 'discard the partial entry and cold-cook from author authority',\n 'ddc-entry-invalid': 'preserve last-known-good, inspect the entry, then cold-cook',\n 'ddc-entry-conflict': 'keep the verified entry and reject the competing publication',\n};\n\nfunction defaultExpected(code: DdcErrorCode): unknown {\n if (code === 'ddc-project-root-required') return 'projectDdcRoot';\n if (code === 'ddc-entry-incomplete' || code === 'ddc-entry-invalid') {\n return 'a complete DDC entry whose receipt and integrity digests validate';\n }\n return 'a valid DDC owner, scope, generation, revision, and lease';\n}\n\nfunction defaultActions(code: DdcErrorCode): readonly DdcRecoveryAction[] {\n switch (code) {\n case 'ddc-project-root-required':\n case 'ddc-scope-mismatch':\n return [\n { kind: 'inspect', executable: true },\n { kind: 'retry', executable: true },\n ];\n case 'ddc-generation-conflict':\n return [{ kind: 'allocate-generation', executable: true }];\n case 'ddc-lease-expired':\n return [\n { kind: 'release-lease', executable: true },\n { kind: 'retry', executable: true },\n ];\n case 'ddc-object-conflict':\n case 'ddc-head-conflict':\n return [\n { kind: 'inspect', executable: true },\n { kind: 'retry', executable: true },\n ];\n case 'ddc-entry-incomplete':\n case 'ddc-entry-invalid':\n return [{ kind: 'cold-rebuild', executable: true }];\n case 'ddc-entry-conflict':\n return [{ kind: 'inspect', executable: true }];\n }\n}\n\nexport class DdcStoreError extends Error {\n public readonly code: DdcErrorCode;\n public readonly detail: string;\n public readonly hint: string;\n public readonly expected: unknown;\n public readonly actual: unknown;\n public readonly owner: string | undefined;\n public readonly rootKind: DdcErrorRootKind | undefined;\n public readonly scope: string | undefined;\n public readonly generation: number | undefined;\n public readonly lease: string | undefined;\n public readonly revision: number | undefined;\n public readonly recoveryActions: readonly DdcRecoveryAction[];\n public readonly hostPath: string | undefined;\n\n public constructor(code: DdcErrorCode, detail: string);\n public constructor(input: DdcStoreErrorInit);\n public constructor(inputOrCode: DdcStoreErrorInit | DdcErrorCode, legacyDetail?: string) {\n const input: DdcStoreErrorInit =\n typeof inputOrCode === 'string'\n ? { code: inputOrCode, detail: legacyDetail ?? inputOrCode }\n : inputOrCode;\n super(input.detail);\n this.name = 'DdcStoreError';\n this.code = input.code;\n this.detail = input.detail;\n this.hint = input.hint ?? defaultHints[input.code];\n this.expected = input.expected ?? defaultExpected(input.code);\n this.actual = input.actual;\n this.owner = input.owner;\n this.rootKind = input.rootKind;\n this.scope = input.scope;\n this.generation = input.generation;\n this.lease = input.lease;\n this.revision = input.revision;\n this.recoveryActions = input.recoveryActions ?? defaultActions(input.code);\n this.hostPath = input.hostPath;\n }\n\n public toBrowserProjection(): DdcBrowserError {\n return {\n code: this.code,\n hint: this.hint,\n expected: this.expected,\n ...(this.actual === undefined ? {} : { actual: this.actual }),\n ...(this.owner === undefined ? {} : { owner: this.owner }),\n ...(this.rootKind === undefined ? {} : { rootKind: this.rootKind }),\n ...(this.scope === undefined ? {} : { scope: this.scope }),\n ...(this.generation === undefined ? {} : { generation: this.generation }),\n ...(this.lease === undefined ? {} : { lease: this.lease }),\n ...(this.revision === undefined ? {} : { revision: this.revision }),\n recoveryActions: this.recoveryActions.map(\n ({ exactTarget: _exactTarget, ...action }) => action,\n ),\n };\n }\n}\n","import { createHash, randomUUID } from 'node:crypto';\nimport { mkdir, readdir, readFile, rename, rm, stat, writeFile } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport { DdcStoreError } from './errors.js';\nimport { canonicalDdcJson } from './key.js';\n\nexport { DdcStoreError } from './errors.js';\n\nexport interface DdcArtifact {\n readonly mediaType: string;\n readonly bytes: Uint8Array;\n}\n\nexport interface DdcReceipt {\n readonly guid: string;\n readonly key: string;\n readonly producer: string;\n readonly inputFingerprint: string;\n readonly outputDigest: string;\n}\n\nexport interface DdcEntry {\n readonly key: string;\n readonly guid: string;\n readonly payload: unknown;\n readonly refs: readonly string[];\n readonly artifacts: Readonly<Record<string, DdcArtifact>>;\n readonly receipt: DdcReceipt;\n}\n\nexport interface StagedDdcEntry {\n readonly key: string;\n readonly path: string;\n}\n\nexport interface PublishDdcEntryResult {\n readonly result: 'published' | 'existing' | 'conflict';\n readonly key: string;\n}\n\ninterface ArtifactIntegrity {\n readonly mediaType: string;\n readonly byteLength: number;\n readonly digest: string;\n}\n\ninterface EntryIntegrity {\n readonly payload: string;\n readonly refs: string;\n readonly receipt: string;\n readonly artifacts: Readonly<Record<string, ArtifactIntegrity>>;\n readonly entry: string;\n}\n\nfunction digest(value: string | Uint8Array): string {\n return createHash('sha256').update(value).digest('hex');\n}\n\nfunction artifactFile(key: string): string {\n if (/^[A-Za-z0-9._-]+$/.test(key)) return key;\n return Buffer.from(key, 'utf8').toString('base64url');\n}\n\nfunction validateKey(key: string): void {\n if (!/^[a-f0-9]{64}$/.test(key)) {\n throw new DdcStoreError('ddc-entry-invalid', `invalid semantic key: ${key}`);\n }\n}\n\nfunction errorCode(error: unknown): string | undefined {\n if (error !== null && typeof error === 'object' && 'code' in error) {\n const code = (error as { readonly code?: unknown }).code;\n return typeof code === 'string' ? code : undefined;\n }\n return undefined;\n}\n\nfunction sortedArtifacts(entry: DdcEntry): readonly [string, DdcArtifact][] {\n return Object.entries(entry.artifacts).sort(([left], [right]) => left.localeCompare(right));\n}\n\n/** The one output identity shared by receipt validation and DDC publication. */\nexport function ddcOutputDigest(\n entry: Pick<DdcEntry, 'guid' | 'payload' | 'refs' | 'artifacts'>,\n): string {\n return `sha256:${digest(\n canonicalDdcJson({\n guid: entry.guid,\n payload: entry.payload,\n refs: entry.refs,\n artifacts: Object.fromEntries(\n sortedArtifacts(entry as DdcEntry).map(([key, artifact]) => [\n key,\n {\n mediaType: artifact.mediaType,\n bytes: artifact.bytes,\n },\n ]),\n ),\n }),\n )}`;\n}\n\nfunction existingResult(\n existing: DdcEntry,\n candidate: DdcEntry,\n key: string,\n): PublishDdcEntryResult {\n return canonicalDdcJson(existing) === canonicalDdcJson(candidate)\n ? { result: 'existing', key }\n : { result: 'conflict', key };\n}\n\nfunction entryShape(entry: DdcEntry): Record<string, unknown> {\n return {\n key: entry.key,\n guid: entry.guid,\n payload: entry.payload,\n refs: entry.refs,\n receipt: entry.receipt,\n artifacts: Object.fromEntries(\n sortedArtifacts(entry).map(([key, artifact]) => [\n key,\n { mediaType: artifact.mediaType, byteLength: artifact.bytes.byteLength },\n ]),\n ),\n };\n}\n\nfunction integrityFor(entry: DdcEntry): EntryIntegrity {\n const artifacts = Object.fromEntries(\n sortedArtifacts(entry).map(([key, artifact]) => [\n key,\n {\n mediaType: artifact.mediaType,\n byteLength: artifact.bytes.byteLength,\n digest: digest(artifact.bytes),\n },\n ]),\n );\n return {\n payload: digest(canonicalDdcJson(entry.payload)),\n refs: digest(canonicalDdcJson(entry.refs)),\n receipt: digest(canonicalDdcJson(entry.receipt)),\n artifacts,\n entry: digest(canonicalDdcJson(entryShape(entry))),\n };\n}\n\nasync function readJson<T>(path: string): Promise<T> {\n return JSON.parse(await readFile(path, 'utf8')) as T;\n}\n\nexport class DdcEntryStore {\n private readonly entries: string;\n private readonly staging: string;\n\n public constructor(root: string) {\n this.entries = join(root, 'entries');\n this.staging = join(root, 'staging');\n }\n\n public async stage(entry: DdcEntry): Promise<StagedDdcEntry> {\n validateKey(entry.key);\n if (entry.receipt.key !== entry.key || entry.receipt.guid !== entry.guid) {\n throw new DdcStoreError('ddc-entry-invalid', 'receipt identity does not match entry');\n }\n if (entry.receipt.outputDigest !== ddcOutputDigest(entry)) {\n throw new DdcStoreError('ddc-entry-invalid', 'receipt output digest does not match entry');\n }\n const path = join(this.staging, `${entry.key}-${randomUUID()}`);\n try {\n await mkdir(join(path, 'artifacts'), { recursive: true });\n await writeFile(join(path, 'payload.json'), canonicalDdcJson(entry.payload));\n await writeFile(join(path, 'refs.json'), canonicalDdcJson(entry.refs));\n await writeFile(join(path, 'receipt.json'), canonicalDdcJson(entry.receipt));\n const artifacts: Record<string, { mediaType: string; file: string }> = {};\n for (const [key, artifact] of sortedArtifacts(entry)) {\n const file = artifactFile(key);\n artifacts[key] = { mediaType: artifact.mediaType, file };\n await writeFile(join(path, 'artifacts', `${file}.bin`), artifact.bytes);\n }\n await writeFile(join(path, 'artifacts.json'), canonicalDdcJson(artifacts));\n await writeFile(join(path, 'integrity.json'), canonicalDdcJson(integrityFor(entry)));\n return { key: entry.key, path };\n } catch (error) {\n await rm(path, { recursive: true, force: true }).catch(() => {});\n throw error;\n }\n }\n\n public async publish(staged: StagedDdcEntry): Promise<PublishDdcEntryResult> {\n validateKey(staged.key);\n const candidate = await this.readDirectory(staged.path, true);\n const target = join(this.entries, staged.key);\n await mkdir(this.entries, { recursive: true });\n const useExisting = async (): Promise<PublishDdcEntryResult> => {\n const existing = await this.readDirectory(target, false);\n await rm(staged.path, { recursive: true, force: true });\n return existingResult(existing, candidate, staged.key);\n };\n try {\n await stat(target);\n return useExisting();\n } catch (error) {\n if (error instanceof DdcStoreError) throw error;\n if (errorCode(error) !== 'ENOENT') throw error;\n }\n try {\n await rename(staged.path, target);\n return { result: 'published', key: staged.key };\n } catch (error) {\n if (!['EEXIST', 'ENOTEMPTY', 'EISDIR'].includes(errorCode(error) ?? '')) throw error;\n return useExisting();\n }\n }\n\n public async discard(staged: StagedDdcEntry): Promise<void> {\n await rm(staged.path, { recursive: true, force: true });\n }\n\n public async write(entry: DdcEntry): Promise<PublishDdcEntryResult> {\n const staged = await this.stage(entry);\n return this.publish(staged);\n }\n\n public async read(key: string): Promise<DdcEntry | null> {\n try {\n validateKey(key);\n return await this.readDirectory(join(this.entries, key), false);\n } catch {\n return null;\n }\n }\n\n public async listKeys(): Promise<readonly string[]> {\n const entries = await readdir(this.entries, { withFileTypes: true }).catch(() => []);\n return entries\n .filter((entry) => entry.isDirectory())\n .map((entry) => entry.name)\n .sort();\n }\n\n public async remove(key: string): Promise<void> {\n validateKey(key);\n await rm(join(this.entries, key), { recursive: true, force: false });\n }\n\n /** Read with a machine-readable corruption result for recovery tooling. */\n public async readChecked(\n key: string,\n ): Promise<\n | { readonly ok: true; readonly value: DdcEntry | null }\n | { readonly ok: false; readonly error: DdcStoreError }\n > {\n try {\n validateKey(key);\n try {\n await stat(join(this.entries, key));\n } catch (error) {\n if (errorCode(error) === 'ENOENT') return { ok: true, value: null };\n throw error;\n }\n try {\n return { ok: true, value: await this.readDirectory(join(this.entries, key), false) };\n } catch (error) {\n if (error instanceof DdcStoreError && error.code === 'ddc-entry-incomplete') {\n return { ok: true, value: null };\n }\n throw error;\n }\n } catch (error) {\n const normalized =\n error instanceof DdcStoreError\n ? error\n : new DdcStoreError('ddc-entry-invalid', 'entry is unreadable');\n return { ok: false, error: normalized };\n }\n }\n\n private async readDirectory(path: string, incompleteIsError: boolean): Promise<DdcEntry> {\n try {\n const payload = await readJson<unknown>(join(path, 'payload.json'));\n const refs = await readJson<readonly string[]>(join(path, 'refs.json'));\n const receipt = await readJson<DdcReceipt>(join(path, 'receipt.json'));\n const manifest = await readJson<\n Readonly<Record<string, { mediaType: string; file: string }>>\n >(join(path, 'artifacts.json'));\n const integrity = await readJson<EntryIntegrity>(join(path, 'integrity.json'));\n const artifacts: Record<string, DdcArtifact> = {};\n for (const [key, descriptor] of Object.entries(manifest).sort(([left], [right]) =>\n left.localeCompare(right),\n )) {\n const bytes = new Uint8Array(\n await readFile(join(path, 'artifacts', `${descriptor.file}.bin`)),\n );\n artifacts[key] = { mediaType: descriptor.mediaType, bytes };\n }\n const entry = { key: receipt.key, guid: receipt.guid, payload, refs, artifacts, receipt };\n if (entry.receipt.outputDigest !== ddcOutputDigest(entry)) {\n throw new DdcStoreError('ddc-entry-invalid', 'receipt output digest does not match entry');\n }\n const actual = integrityFor(entry);\n if (canonicalDdcJson(actual) !== canonicalDdcJson(integrity)) {\n throw new DdcStoreError('ddc-entry-invalid', 'entry integrity mismatch');\n }\n return entry;\n } catch (error) {\n if (incompleteIsError) {\n if (error instanceof DdcStoreError) throw error;\n throw new DdcStoreError('ddc-entry-incomplete', 'staged entry is incomplete');\n }\n if (error instanceof DdcStoreError) throw error;\n throw new DdcStoreError('ddc-entry-invalid', 'entry is unreadable');\n }\n }\n}\n","import { randomUUID } from 'node:crypto';\nimport { mkdir, readFile, rename, rm, writeFile } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport { DdcEntryStore } from './entry-store.js';\nimport { DdcStoreError } from './errors.js';\n\nexport type DdcLifecycleState = 'missing' | 'cooking' | 'current' | 'stale' | 'failed';\n\nexport interface DdcLease {\n readonly guid: string;\n readonly desiredKey: string;\n readonly attempt: string;\n readonly generation: number;\n readonly expectedRevision: number;\n readonly instanceId: string;\n readonly expiresAt: number;\n}\n\nexport interface DdcHead {\n readonly guid: string;\n readonly desiredKey: string;\n readonly state: DdcLifecycleState;\n readonly currentKey: string | undefined;\n readonly lastKnownGoodKey: string | undefined;\n readonly revision?: number;\n readonly generation?: number;\n readonly activeLease?: DdcLease;\n readonly failure?: { readonly code: string; readonly detail: string };\n}\n\nexport interface DdcCommitResult {\n readonly result: 'current' | 'stale' | 'lease-lost' | 'invalid';\n readonly key: string;\n readonly revision?: number;\n /** Internal CAS evidence retained for a later generation rollback. */\n readonly restoreFence?: DdcRestoreFence;\n}\n\nexport interface DdcRestoreFence {\n readonly attempt: string;\n readonly generation: number;\n readonly revision: number;\n readonly desiredKey: string;\n readonly outcome: 'current' | 'invalid' | 'failed';\n readonly key?: string;\n readonly currentKey?: string;\n readonly lastKnownGoodKey?: string;\n readonly failure?: { readonly code: string; readonly detail: string };\n}\n\nexport interface DdcRestoreResult {\n readonly result: 'restored' | 'not-owner';\n readonly revision: number;\n readonly generation?: number;\n}\n\nexport type DdcRollbackSnapshot = Omit<DdcHead, 'activeLease'>;\n\nexport interface DdcBeginResult {\n readonly lease: DdcLease;\n readonly previousHead: DdcRollbackSnapshot;\n}\n\ninterface HeadRecord {\n readonly guid: string;\n readonly desiredKey: string;\n readonly revision: number;\n readonly currentKey?: string;\n readonly lastKnownGoodKey?: string;\n readonly generation?: number;\n readonly active?: DdcLease;\n readonly supersededAttempts?: readonly string[];\n readonly stale?: boolean;\n readonly empty?: boolean;\n readonly failure?: {\n readonly desiredKey: string;\n readonly code: string;\n readonly detail: string;\n };\n}\n\ninterface GenerationRecord {\n readonly schemaVersion: 'forgeax-ddc-generation/v2';\n readonly next: number;\n}\n\nconst LOCK_WAIT_MS = 10;\nconst LOCK_TIMEOUT_MS = 5000;\nconst LEASE_TTL_MS = 30_000;\n\nfunction headFile(heads: string, guid: string): string {\n return join(heads, `${encodeURIComponent(guid)}.json`);\n}\n\nfunction lockFile(root: string, name: string): string {\n return join(root, 'locks', `${encodeURIComponent(name)}.lock`);\n}\n\nfunction withRevision(\n result: Omit<DdcCommitResult, 'revision'>,\n revision: number,\n restoreFence?: DdcRestoreFence,\n): DdcCommitResult {\n const value = { ...result } as DdcCommitResult;\n Object.defineProperty(value, 'revision', { value: revision, enumerable: false });\n if (restoreFence !== undefined) {\n Object.defineProperty(value, 'restoreFence', { value: restoreFence, enumerable: false });\n }\n return value;\n}\n\nasync function delay(ms: number): Promise<void> {\n await new Promise((resolveDelay) => setTimeout(resolveDelay, ms));\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return value !== null && typeof value === 'object' && !Array.isArray(value);\n}\n\nfunction isString(value: unknown): value is string {\n return typeof value === 'string';\n}\n\nfunction isNonNegativeInteger(value: unknown): value is number {\n return typeof value === 'number' && Number.isInteger(value) && value >= 0;\n}\n\nfunction isLeaseRecord(value: unknown): value is DdcLease {\n if (!isRecord(value)) return false;\n return (\n isString(value.guid) &&\n isString(value.desiredKey) &&\n isString(value.attempt) &&\n isNonNegativeInteger(value.generation) &&\n isNonNegativeInteger(value.expectedRevision) &&\n isString(value.instanceId) &&\n typeof value.expiresAt === 'number' &&\n Number.isFinite(value.expiresAt)\n );\n}\n\nfunction isHeadRecord(value: unknown): value is HeadRecord {\n if (!isRecord(value)) return false;\n if (\n !isString(value.guid) ||\n !isString(value.desiredKey) ||\n !isNonNegativeInteger(value.revision)\n ) {\n return false;\n }\n if (value.currentKey !== undefined && !isString(value.currentKey)) return false;\n if (value.lastKnownGoodKey !== undefined && !isString(value.lastKnownGoodKey)) return false;\n if (\n value.generation !== undefined &&\n (!isNonNegativeInteger(value.generation) || value.generation === 0)\n ) {\n return false;\n }\n if (value.active !== undefined && !isLeaseRecord(value.active)) return false;\n if (\n value.supersededAttempts !== undefined &&\n (!Array.isArray(value.supersededAttempts) || !value.supersededAttempts.every(isString))\n ) {\n return false;\n }\n if (value.stale !== undefined && typeof value.stale !== 'boolean') return false;\n if (value.empty !== undefined && typeof value.empty !== 'boolean') return false;\n if (value.failure !== undefined) {\n if (!isRecord(value.failure)) return false;\n if (\n !isString(value.failure.desiredKey) ||\n !isString(value.failure.code) ||\n !isString(value.failure.detail)\n ) {\n return false;\n }\n }\n return true;\n}\n\nfunction malformedHeadError(\n actual: 'syntax-invalid' | 'schema-invalid' | 'unreadable',\n): DdcStoreError {\n const detail =\n actual === 'syntax-invalid'\n ? 'DDC head JSON is syntactically invalid'\n : actual === 'schema-invalid'\n ? 'DDC head record does not match the lifecycle schema'\n : 'DDC head file is not readable';\n return new DdcStoreError({\n code: 'ddc-head-conflict',\n detail,\n expected: 'a valid DDC head record',\n actual,\n hint: 'inspect the current head and retry with a fresh revision',\n owner: 'engine-ddc',\n rootKind: 'project-ddc',\n recoveryActions: [\n { kind: 'inspect', executable: true },\n { kind: 'retry', executable: true },\n ],\n });\n}\n\n/** Cross-process mkdir lock; a lock owned by a dead PID is reclaimable. */\nexport async function withDdcLock<T>(\n root: string,\n name: string,\n operation: () => Promise<T>,\n): Promise<T> {\n const path = lockFile(root, name);\n await mkdir(join(root, 'locks'), { recursive: true });\n const deadline = Date.now() + LOCK_TIMEOUT_MS;\n while (true) {\n try {\n await mkdir(path);\n await writeFile(\n join(path, 'owner.json'),\n JSON.stringify({ pid: process.pid, acquiredAt: Date.now() }),\n );\n try {\n return await operation();\n } finally {\n await rm(path, { recursive: true, force: true });\n }\n } catch (error) {\n if ((error as { code?: string }).code !== 'EEXIST') throw error;\n let ownerPid: number | undefined;\n try {\n ownerPid = (\n JSON.parse(await readFile(join(path, 'owner.json'), 'utf8')) as { pid?: number }\n ).pid;\n } catch {\n ownerPid = undefined;\n }\n // mkdir() publishes the lock directory before the owner record can be\n // written. Treat that short publication window as an in-flight lock,\n // not as a dead owner: reclaiming it here lets two processes enter the\n // same critical section and loses the superseded-attempt fence.\n if (ownerPid === undefined) {\n if (Date.now() >= deadline) {\n throw new DdcStoreError({\n code: 'ddc-lease-expired',\n detail: `DDC lock ${name} did not publish an owner record`,\n hint: 'inspect the lock owner and retry after the incomplete instance exits',\n expected: 'a lock owner record',\n actual: { path },\n rootKind: 'project-ddc',\n });\n }\n await delay(LOCK_WAIT_MS);\n continue;\n }\n let alive = false;\n try {\n process.kill(ownerPid, 0);\n alive = true;\n } catch {\n alive = false;\n }\n if (!alive) {\n await rm(path, { recursive: true, force: true });\n continue;\n }\n if (Date.now() >= deadline) {\n throw new DdcStoreError({\n code: 'ddc-lease-expired',\n detail: `DDC lock ${name} remained owned by process ${ownerPid}`,\n hint: 'inspect the owner and retry after the stale instance exits',\n expected: 'an available project lock',\n actual: { ownerPid },\n rootKind: 'project-ddc',\n lease: String(ownerPid),\n });\n }\n await delay(LOCK_WAIT_MS);\n }\n }\n}\n\nexport class DdcLifecycle {\n private readonly heads: string;\n private readonly entries: DdcEntryStore;\n private readonly root: string;\n private readonly leaseTtlMs: number;\n\n public constructor(root: string, options?: { readonly leaseTtlMs?: number }) {\n this.root = root;\n this.heads = join(root, 'heads');\n this.entries = new DdcEntryStore(root);\n this.leaseTtlMs = options?.leaseTtlMs ?? LEASE_TTL_MS;\n }\n\n public async inspect(guid: string, desiredKey: string): Promise<DdcHead> {\n const record = await this.read(guid);\n return this.projectHead(guid, desiredKey, record);\n }\n\n /** Begin a lease and capture the accepted rollback snapshot under one head lock. */\n public async beginWithSnapshot(guid: string, desiredKey: string): Promise<DdcBeginResult> {\n return withDdcLock(this.root, `head-${guid}`, async () => {\n const previous = await this.read(guid);\n const previousHead = await this.projectHead(guid, desiredKey, previous, false);\n const generation = await this.allocateGeneration(previous?.generation ?? 0);\n const lease: DdcLease = {\n guid,\n desiredKey,\n attempt: randomUUID(),\n generation,\n expectedRevision: previous?.revision ?? 0,\n instanceId: `${process.pid}:${randomUUID()}`,\n expiresAt: Date.now() + this.leaseTtlMs,\n };\n const lastKnownGoodKey =\n previous?.currentKey !== undefined && previous.currentKey !== desiredKey\n ? previous.currentKey\n : previous?.lastKnownGoodKey;\n const supersededAttempts = [\n ...(previous?.supersededAttempts ?? []),\n ...(previous?.active === undefined ? [] : [previous.active.attempt]),\n ];\n await this.write({\n guid,\n desiredKey,\n revision: previous?.revision ?? 0,\n generation,\n active: lease,\n ...(previous?.currentKey === undefined ? {} : { currentKey: previous.currentKey }),\n ...(supersededAttempts.length === 0 ? {} : { supersededAttempts }),\n ...(lastKnownGoodKey === undefined ? {} : { lastKnownGoodKey }),\n });\n return { lease, previousHead };\n });\n }\n\n public async begin(guid: string, desiredKey: string): Promise<DdcLease> {\n return (await this.beginWithSnapshot(guid, desiredKey)).lease;\n }\n\n public async commit(lease: DdcLease, validatedKey: string): Promise<DdcCommitResult> {\n return withDdcLock(this.root, `head-${lease.guid}`, async () => {\n const current = await this.read(lease.guid);\n if (current?.active?.attempt !== lease.attempt) {\n if (current?.supersededAttempts?.includes(lease.attempt)) {\n await this.write({ ...current, stale: true });\n return withRevision({ result: 'stale', key: validatedKey }, current.revision);\n }\n return withRevision({ result: 'lease-lost', key: validatedKey }, current?.revision ?? 0);\n }\n if (Date.now() > lease.expiresAt) {\n throw new DdcStoreError({\n code: 'ddc-lease-expired',\n detail: 'cook lease expired before commit fencing',\n expected: { attempt: lease.attempt, revision: lease.expectedRevision },\n actual: { revision: current.revision },\n owner: 'engine-ddc',\n rootKind: 'project-ddc',\n generation: lease.generation,\n lease: lease.attempt,\n revision: current.revision,\n });\n }\n if (\n current.revision !== lease.expectedRevision ||\n current.desiredKey !== lease.desiredKey ||\n validatedKey !== lease.desiredKey\n ) {\n await this.write({ ...current, stale: true });\n return withRevision({ result: 'stale', key: validatedKey }, current.revision);\n }\n const entry = await this.entries.read(validatedKey);\n if (entry === null || entry.guid !== lease.guid || entry.receipt.key !== validatedKey) {\n const nextRevision = current.revision + 1;\n const failure = {\n desiredKey: lease.desiredKey,\n code: 'entry-invalid',\n detail: 'validated DDC key has no readable entry for this asset',\n };\n await this.write({\n guid: lease.guid,\n desiredKey: lease.desiredKey,\n revision: nextRevision,\n generation: lease.generation,\n ...(current.lastKnownGoodKey === undefined\n ? {}\n : { lastKnownGoodKey: current.lastKnownGoodKey }),\n ...(current.supersededAttempts === undefined\n ? {}\n : { supersededAttempts: current.supersededAttempts }),\n failure,\n });\n return withRevision({ result: 'invalid', key: validatedKey }, nextRevision, {\n attempt: lease.attempt,\n generation: lease.generation,\n revision: nextRevision,\n desiredKey: lease.desiredKey,\n outcome: 'invalid',\n ...(current.lastKnownGoodKey === undefined\n ? {}\n : { lastKnownGoodKey: current.lastKnownGoodKey }),\n failure: { code: failure.code, detail: failure.detail },\n });\n }\n const lastKnownGoodKey =\n current.currentKey !== undefined && current.currentKey !== validatedKey\n ? current.currentKey\n : current.lastKnownGoodKey;\n const nextRevision = current.revision + 1;\n await this.write({\n guid: lease.guid,\n desiredKey: lease.desiredKey,\n revision: nextRevision,\n generation: lease.generation,\n currentKey: validatedKey,\n stale: false,\n ...(current.supersededAttempts === undefined\n ? {}\n : { supersededAttempts: current.supersededAttempts }),\n ...(lastKnownGoodKey === undefined ? {} : { lastKnownGoodKey }),\n });\n return withRevision({ result: 'current', key: validatedKey }, nextRevision, {\n attempt: lease.attempt,\n generation: lease.generation,\n revision: nextRevision,\n desiredKey: lease.desiredKey,\n outcome: 'current',\n key: validatedKey,\n currentKey: validatedKey,\n ...(lastKnownGoodKey === undefined ? {} : { lastKnownGoodKey }),\n });\n });\n }\n\n public async fail(\n lease: DdcLease,\n failure: { readonly code: string; readonly detail: string },\n ): Promise<DdcRestoreFence | undefined> {\n return withDdcLock(this.root, `head-${lease.guid}`, async () => {\n const current = await this.read(lease.guid);\n if (current?.active?.attempt !== lease.attempt) return;\n const nextRevision = current.revision + 1;\n await this.write({\n guid: lease.guid,\n desiredKey: lease.desiredKey,\n revision: nextRevision,\n generation: lease.generation,\n ...(current.currentKey === undefined ? {} : { currentKey: current.currentKey }),\n ...(current.lastKnownGoodKey === undefined\n ? {}\n : { lastKnownGoodKey: current.lastKnownGoodKey }),\n ...(current.supersededAttempts === undefined\n ? {}\n : { supersededAttempts: current.supersededAttempts }),\n failure: { desiredKey: lease.desiredKey, ...failure },\n });\n return {\n attempt: lease.attempt,\n generation: lease.generation,\n revision: nextRevision,\n desiredKey: lease.desiredKey,\n outcome: 'failed' as const,\n ...(current.currentKey === undefined ? {} : { currentKey: current.currentKey }),\n ...(current.lastKnownGoodKey === undefined\n ? {}\n : { lastKnownGoodKey: current.lastKnownGoodKey }),\n failure,\n };\n });\n }\n\n public async heartbeat(lease: DdcLease): Promise<DdcLease> {\n return withDdcLock(this.root, `head-${lease.guid}`, async () => {\n const current = await this.read(lease.guid);\n if (current?.active?.attempt !== lease.attempt) {\n throw new DdcStoreError({\n code: 'ddc-lease-expired',\n detail: 'heartbeat belongs to a stale lease',\n expected: lease.attempt,\n actual: current?.active?.attempt,\n lease: lease.attempt,\n generation: lease.generation,\n rootKind: 'project-ddc',\n });\n }\n const refreshed = { ...lease, expiresAt: Date.now() + this.leaseTtlMs };\n await this.write({ ...current, active: refreshed });\n return refreshed;\n });\n }\n\n public async close(lease: DdcLease): Promise<void> {\n await withDdcLock(this.root, `head-${lease.guid}`, async () => {\n const current = await this.read(lease.guid);\n if (current?.active?.instanceId !== lease.instanceId) return;\n const { active: _active, ...withoutActive } = current;\n await this.write({\n ...withoutActive,\n revision: current.revision + 1,\n stale: current.currentKey === undefined,\n });\n });\n }\n\n public async discard(lease: DdcLease): Promise<void> {\n await withDdcLock(this.root, `head-${lease.guid}`, async () => {\n const current = await this.read(lease.guid);\n if (current?.active?.attempt !== lease.attempt) return;\n const { active: _active, ...withoutActive } = current;\n await this.write({\n ...withoutActive,\n revision: current.revision + 1,\n generation: lease.generation,\n stale: current.currentKey === undefined,\n });\n });\n }\n\n /**\n * Restore accepted content only when this lease still owns the mutable head.\n * A newer active or terminal mutation makes rollback a deliberate no-op.\n */\n public async restore(\n head: DdcHead | DdcRollbackSnapshot,\n lease?: DdcLease,\n fence?: DdcRestoreFence,\n ): Promise<DdcRestoreResult> {\n const inferredLease =\n lease ??\n ('activeLease' in head && head.activeLease !== undefined ? head.activeLease : undefined);\n if (inferredLease === undefined) {\n return {\n result: 'not-owner',\n revision: head.revision ?? 0,\n ...(head.generation === undefined ? {} : { generation: head.generation }),\n };\n }\n const snapshot = this.rollbackSnapshot(head);\n return this.restoreIfCurrent(snapshot, inferredLease, fence);\n }\n\n public async restoreIfCurrent(\n snapshot: DdcRollbackSnapshot,\n lease: DdcLease,\n fence?: DdcRestoreFence,\n ): Promise<DdcRestoreResult> {\n return withDdcLock(this.root, `head-${lease.guid}`, async () => {\n const current = await this.read(lease.guid);\n if (current === null || current.guid !== snapshot.guid) {\n return {\n result: 'not-owner',\n revision: current?.revision ?? 0,\n ...(current?.generation === undefined ? {} : { generation: current.generation }),\n };\n }\n const ownsActive =\n current.active?.attempt === lease.attempt &&\n current.active.generation === lease.generation &&\n current.active.desiredKey === lease.desiredKey;\n const ownsTerminal = fence !== undefined && this.matchesRestoreFence(current, lease, fence);\n if (!ownsActive && !ownsTerminal) {\n return {\n result: 'not-owner',\n revision: current.revision,\n ...(current.generation === undefined ? {} : { generation: current.generation }),\n };\n }\n\n const nextRevision = current.revision + 1;\n const generation = Math.max(\n current.generation ?? 0,\n lease.generation,\n snapshot.generation ?? 0,\n );\n const supersededAttempts = current.supersededAttempts;\n const restored: HeadRecord = {\n guid: snapshot.guid,\n desiredKey: snapshot.desiredKey,\n revision: nextRevision,\n generation,\n ...(snapshot.currentKey === undefined ? {} : { currentKey: snapshot.currentKey }),\n ...(snapshot.lastKnownGoodKey === undefined\n ? {}\n : { lastKnownGoodKey: snapshot.lastKnownGoodKey }),\n ...(supersededAttempts === undefined ? {} : { supersededAttempts }),\n ...(snapshot.state === 'missing' ? { empty: true } : {}),\n ...(snapshot.state === 'stale' ? { stale: true } : {}),\n ...(snapshot.failure === undefined\n ? {}\n : { failure: { desiredKey: snapshot.desiredKey, ...snapshot.failure } }),\n };\n await this.write(restored);\n return { result: 'restored', revision: nextRevision, generation };\n });\n }\n\n public async revoke(lease: DdcLease): Promise<void> {\n await this.fail(lease, {\n code: 'lease-lost',\n detail: 'cook lease was revoked before validation',\n });\n }\n\n public async recover(guid: string, desiredKey: string): Promise<DdcHead> {\n return withDdcLock(this.root, `head-${guid}`, async () => {\n const current = await this.read(guid);\n if (current?.active?.desiredKey === desiredKey) {\n await this.write({\n guid,\n desiredKey,\n revision: current.revision + 1,\n ...(current.generation === undefined ? {} : { generation: current.generation }),\n ...(current.supersededAttempts === undefined\n ? {}\n : { supersededAttempts: current.supersededAttempts }),\n ...(current.lastKnownGoodKey === undefined\n ? {}\n : { lastKnownGoodKey: current.lastKnownGoodKey }),\n failure: {\n desiredKey,\n code: 'writer-crashed',\n detail: 'active cook attempt was recovered after process interruption',\n },\n });\n }\n return this.inspect(guid, desiredKey);\n });\n }\n\n private rollbackSnapshot(head: DdcHead | DdcRollbackSnapshot): DdcRollbackSnapshot {\n const { activeLease: _activeLease, ...snapshot } = head as DdcHead;\n if (snapshot.state !== 'cooking') return snapshot;\n return {\n ...snapshot,\n state: snapshot.currentKey === undefined ? 'missing' : 'stale',\n };\n }\n\n private matchesRestoreFence(\n current: HeadRecord,\n lease: DdcLease,\n fence: DdcRestoreFence,\n ): boolean {\n if (\n fence.attempt !== lease.attempt ||\n fence.generation !== lease.generation ||\n current.active !== undefined ||\n current.revision !== fence.revision ||\n current.generation !== fence.generation ||\n current.desiredKey !== fence.desiredKey ||\n current.currentKey !== fence.currentKey ||\n current.lastKnownGoodKey !== fence.lastKnownGoodKey\n ) {\n return false;\n }\n if (fence.outcome === 'current') {\n return (\n fence.key !== undefined &&\n current.currentKey === fence.key &&\n current.failure === undefined &&\n current.stale !== true\n );\n }\n if (\n fence.failure === undefined ||\n current.failure === undefined ||\n current.failure.desiredKey !== fence.desiredKey ||\n current.failure.code !== fence.failure.code ||\n current.failure.detail !== fence.failure.detail\n ) {\n return false;\n }\n return fence.outcome === 'invalid' ? fence.currentKey === undefined : true;\n }\n\n private async projectHead(\n guid: string,\n desiredKey: string,\n record: HeadRecord | null,\n includeActive = true,\n ): Promise<DdcHead> {\n if (record === null) {\n return {\n guid,\n desiredKey,\n state: 'missing',\n currentKey: undefined,\n lastKnownGoodKey: undefined,\n revision: 0,\n };\n }\n const recordedFailure =\n record.failure?.desiredKey === desiredKey\n ? { code: record.failure.code, detail: record.failure.detail }\n : undefined;\n const currentEntry =\n record.currentKey === undefined ? null : await this.entries.readChecked(record.currentKey);\n const entryFailure =\n currentEntry !== null && !currentEntry.ok\n ? { code: currentEntry.error.code, detail: currentEntry.error.detail }\n : undefined;\n const failure = recordedFailure ?? entryFailure;\n const currentValue = currentEntry?.ok === true ? currentEntry.value : null;\n const state: DdcLifecycleState =\n failure !== undefined\n ? 'failed'\n : record.currentKey === desiredKey && currentValue?.guid === guid\n ? 'current'\n : record.stale === true\n ? 'stale'\n : includeActive && record.active?.desiredKey === desiredKey\n ? 'cooking'\n : record.empty === true\n ? 'missing'\n : 'stale';\n return {\n guid,\n desiredKey,\n state,\n currentKey: record.currentKey,\n lastKnownGoodKey: record.lastKnownGoodKey,\n revision: record.revision,\n ...(record.generation === undefined ? {} : { generation: record.generation }),\n ...(includeActive && record.active === undefined\n ? {}\n : includeActive && record.active !== undefined\n ? { activeLease: record.active }\n : {}),\n ...(failure === undefined ? {} : { failure }),\n };\n }\n\n private async allocateGeneration(minimumExclusive = 0): Promise<number> {\n return withDdcLock(this.root, 'generation-counter', async () => {\n const path = join(this.root, 'generations', 'counter.json');\n await mkdir(join(this.root, 'generations'), { recursive: true });\n let next = 1;\n try {\n const record = JSON.parse(await readFile(path, 'utf8')) as GenerationRecord;\n if (\n record.schemaVersion === 'forgeax-ddc-generation/v2' &&\n Number.isSafeInteger(record.next) &&\n record.next >= 1\n )\n next = Math.max(1, record.next);\n } catch {\n // A missing counter is the first allocation, not an implicit legacy fallback.\n }\n const temporary = `${path}.${process.pid}.${randomUUID()}.tmp`;\n next = Math.max(next, minimumExclusive + 1);\n await writeFile(\n temporary,\n JSON.stringify({ schemaVersion: 'forgeax-ddc-generation/v2', next: next + 1 }),\n );\n await rename(temporary, path);\n return next;\n });\n }\n\n private async read(guid: string): Promise<HeadRecord | null> {\n const path = headFile(this.heads, guid);\n let source: string;\n try {\n source = await readFile(path, 'utf8');\n } catch (error) {\n if (\n error !== null &&\n typeof error === 'object' &&\n 'code' in error &&\n (error as { readonly code?: unknown }).code === 'ENOENT'\n ) {\n return null;\n }\n throw malformedHeadError('unreadable');\n }\n let value: unknown;\n try {\n value = JSON.parse(source);\n } catch {\n throw malformedHeadError('syntax-invalid');\n }\n if (!isHeadRecord(value) || value.guid !== guid) throw malformedHeadError('schema-invalid');\n return value;\n }\n\n private async write(record: HeadRecord): Promise<void> {\n await mkdir(this.heads, { recursive: true });\n const path = headFile(this.heads, record.guid);\n const temporary = `${path}.${randomUUID()}.tmp`;\n await writeFile(temporary, JSON.stringify(record));\n await rename(temporary, path);\n }\n}\n","import { readdir, rm } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport { withDdcLock } from './lifecycle.js';\n\nexport interface DdcGcInput {\n readonly currentKeys: readonly string[];\n readonly lastKnownGoodKeys: readonly string[];\n readonly activeLeaseKeys: readonly string[];\n readonly scopeIds?: readonly string[];\n}\n\nexport interface DdcGcResult {\n readonly deleted: readonly string[];\n readonly protected: readonly string[];\n}\n\n/** Mark current/LKG/lease roots, then sweep only the same project root. */\nexport async function collectDdcGarbage(root: string, input: DdcGcInput): Promise<DdcGcResult> {\n return withDdcLock(root, 'gc', async () => {\n const protectedKeys = new Set([\n ...input.currentKeys,\n ...input.lastKnownGoodKeys,\n ...input.activeLeaseKeys,\n ]);\n const entries = await readdir(join(root, 'entries'), { withFileTypes: true }).catch(() => []);\n const deleted: string[] = [];\n for (const entry of entries) {\n if (!entry.isDirectory() || protectedKeys.has(entry.name)) continue;\n await rm(join(root, 'entries', entry.name), { recursive: true, force: false });\n deleted.push(entry.name);\n }\n return { deleted, protected: [...protectedKeys].sort() };\n });\n}\n","import { isAbsolute, normalize } from 'node:path';\n\nexport const DDC_LAYOUT_VERSION = 'v2' as const;\n\nexport interface DdcBuildOptions {\n readonly buildCacheRoot: string;\n}\n\nexport interface DdcServeOptions extends DdcBuildOptions {\n readonly projectDdcRoot?: string;\n}\n\nexport interface DdcBuildLayout {\n readonly objects: string;\n readonly staging: string;\n}\n\nexport interface DdcProjectLayout {\n readonly root: string;\n readonly scope: string;\n readonly heads: string;\n readonly generations: string;\n readonly leases: string;\n readonly staging: string;\n}\n\nexport interface DdcLayout {\n readonly version: typeof DDC_LAYOUT_VERSION;\n readonly buildCacheRoot: string;\n readonly projectDdcRoot: string;\n readonly build: DdcBuildLayout;\n readonly project: DdcProjectLayout;\n}\n\nexport interface DdcBuildLayoutResult {\n readonly ok: true;\n readonly value: DdcBuildLayout;\n}\n\nexport interface DdcLayoutError {\n readonly code: 'ddc-project-root-required' | 'ddc-root-absolute-required';\n readonly detail: string;\n readonly hint: string;\n readonly expected: string;\n readonly actual?: string;\n}\n\nexport interface DdcLayoutResult {\n readonly ok: true;\n readonly value: DdcLayout;\n}\n\nexport interface DdcLayoutFailure {\n readonly ok: false;\n readonly error: DdcLayoutError;\n}\n\ntype ClosedLayoutResult = DdcLayoutResult | DdcLayoutFailure;\n\nfunction rootOrError(root: string, name: string): string | DdcLayoutError {\n if (!isAbsolute(root)) {\n return {\n code: 'ddc-root-absolute-required',\n detail: `${name} must be an absolute injected path`,\n hint: `inject the canonical ${name} from the host root policy`,\n expected: 'an absolute filesystem path',\n actual: root,\n };\n }\n const normalized = normalize(root);\n return normalized.replace(/[\\\\/]+$/, '') || normalized;\n}\n\nfunction buildLayout(root: string): DdcBuildLayout {\n return { objects: `${root}/objects`, staging: `${root}/staging` };\n}\n\nfunction projectLayout(root: string): DdcProjectLayout {\n return {\n root,\n scope: `${root}/scope.json`,\n heads: `${root}/heads`,\n generations: `${root}/generations`,\n leases: `${root}/leases`,\n staging: `${root}/staging`,\n };\n}\n\nexport function resolveBuildDdcLayout(\n options: DdcBuildOptions,\n): DdcBuildLayoutResult | DdcLayoutFailure {\n const root = rootOrError(options.buildCacheRoot, 'buildCacheRoot');\n return typeof root === 'string'\n ? { ok: true, value: buildLayout(root) }\n : { ok: false, error: root };\n}\n\nexport function resolveDdcLayout(options: DdcServeOptions): ClosedLayoutResult {\n const buildRoot = rootOrError(options.buildCacheRoot, 'buildCacheRoot');\n if (typeof buildRoot !== 'string') return { ok: false, error: buildRoot };\n if (options.projectDdcRoot === undefined || options.projectDdcRoot.trim().length === 0) {\n return {\n ok: false,\n error: {\n code: 'ddc-project-root-required',\n detail: 'serve and publication require an explicitly injected projectDdcRoot',\n hint: 'canonicalize the game directory in the host and inject its .forgeax/ddc/v2 root',\n expected: 'projectDdcRoot',\n },\n };\n }\n const projectRoot = rootOrError(options.projectDdcRoot, 'projectDdcRoot');\n if (typeof projectRoot !== 'string') return { ok: false, error: projectRoot };\n return {\n ok: true,\n value: {\n version: DDC_LAYOUT_VERSION,\n buildCacheRoot: buildRoot,\n projectDdcRoot: projectRoot,\n build: buildLayout(buildRoot),\n project: projectLayout(projectRoot),\n },\n };\n}\n\nexport function isDdcLayout(value: unknown): value is DdcLayout {\n return (\n value !== null &&\n typeof value === 'object' &&\n (value as { readonly version?: unknown }).version === DDC_LAYOUT_VERSION\n );\n}\n","import { createHash } from 'node:crypto';\nimport type {\n AssetPublicationEnvelope,\n AssetPublicationExternalEvidence,\n AssetPublicationFailure,\n AssetPublicationLocator,\n AssetPublicationOutput,\n AssetPublicationRecovery,\n Result,\n} from '@forgeax/engine-types';\nimport { err, ok } from '@forgeax/engine-types';\n\nexport interface ScriptablePackPublicationSnapshot {\n readonly current?: AssetPublicationEnvelope;\n readonly lastKnownGood?: AssetPublicationEnvelope;\n readonly failure?: AssetPublicationFailure;\n}\n\nexport interface ScriptablePackPublicationError extends AssetPublicationFailure {\n readonly recovery: AssetPublicationRecovery;\n readonly current?: AssetPublicationLocator;\n readonly lastKnownGood?: AssetPublicationLocator;\n}\n\nexport interface AcceptedPublicationCandidate {\n readonly envelope: AssetPublicationEnvelope;\n readonly cancelled?: boolean;\n}\n\nexport interface ScriptablePackPublicationBuildInput {\n readonly sourcePath: string;\n readonly sourceRevision: string;\n /** Optional caller generation; the DDC owner derives one when omitted. */\n readonly generation?: number;\n readonly digest: string;\n readonly packageUrl: string;\n readonly inputFingerprint: string;\n readonly outputs: readonly AssetPublicationOutput[];\n readonly externalEvidence: readonly AssetPublicationExternalEvidence[];\n}\n\n/**\n * DDC-owned publication authority for source keyed producers. Transport\n * adapters may stage bytes, but they do not retain current/LKG or generation\n * state themselves.\n */\nexport interface AcceptedPublicationStore {\n observe(sourcePath: string): ScriptablePackPublicationSnapshot;\n stage(\n sourcePath: string,\n candidate: AcceptedPublicationCandidate,\n ): Result<void, ScriptablePackPublicationError>;\n commit(\n sourcePath: string,\n candidate: AcceptedPublicationCandidate,\n commitRoute: () => Promise<void> | void,\n ): Promise<Result<ScriptablePackPublicationSnapshot, ScriptablePackPublicationError>>;\n discard(sourcePath: string, candidate: AssetPublicationEnvelope): void;\n restore(sourcePath: string, snapshot: ScriptablePackPublicationSnapshot): void;\n}\n\nfunction stable(value: unknown): string {\n if (Array.isArray(value)) return `[${value.map(stable).join(',')}]`;\n if (value !== null && typeof value === 'object') {\n const record = value as Record<string, unknown>;\n return `{${Object.keys(record)\n .sort()\n .map((key) => `${JSON.stringify(key)}:${stable(record[key])}`)\n .join(',')}}`;\n }\n return JSON.stringify(value) ?? 'null';\n}\n\nfunction digest(value: unknown): string {\n return `sha256:${createHash('sha256').update(stable(value)).digest('hex')}`;\n}\n\nexport function scriptablePackOutputSetDigest(outputs: readonly AssetPublicationOutput[]): string {\n return digest(\n outputs.map((output) => ({\n guid: output.guid.toLowerCase(),\n sourceKey: output.sourceKey,\n kind: output.kind,\n digest: output.digest,\n refs: [...output.refs].map((guid) => guid.toLowerCase()),\n })),\n );\n}\n\n/** Derive a stable positive generation from the accepted publication tuple. */\nexport function scriptablePackPublicationGeneration(input: {\n readonly sourceRevision: string;\n readonly digest: string;\n readonly outputSetDigest: string;\n}): number {\n const hash = createHash('sha256')\n .update(input.sourceRevision)\n .update('\\n')\n .update(input.digest)\n .update('\\n')\n .update(input.outputSetDigest)\n .digest('hex');\n const generation = Number.parseInt(hash.slice(0, 8), 16);\n return generation > 0 ? generation : 1;\n}\n\n/** Build the complete producer-owned tuple after the package route is finalized. */\nexport function createAcceptedPublication(\n input: ScriptablePackPublicationBuildInput,\n): AssetPublicationEnvelope {\n const outputSetDigest = scriptablePackOutputSetDigest(input.outputs);\n const publicationGeneration =\n input.generation ??\n scriptablePackPublicationGeneration({\n sourceRevision: input.sourceRevision,\n digest: input.digest,\n outputSetDigest,\n });\n return {\n schemaVersion: 'asset-publication/1',\n sourcePath: input.sourcePath,\n sourceRevision: input.sourceRevision,\n generation: publicationGeneration,\n digest: input.digest,\n outputSetDigest,\n outputs: input.outputs,\n receipt: {\n schemaVersion: 'asset-publication-receipt/1',\n sourcePath: input.sourcePath,\n sourceRevision: input.sourceRevision,\n inputFingerprint: input.inputFingerprint,\n outputDigest: input.digest,\n outputSetDigest,\n externalEvidence: input.externalEvidence,\n },\n externalEvidence: input.externalEvidence,\n current: {\n generation: publicationGeneration,\n digest: input.digest,\n outputSetDigest,\n packageUrl: input.packageUrl,\n receiptKey: input.inputFingerprint,\n },\n };\n}\n\nfunction locatorFor(envelope: AssetPublicationEnvelope): AssetPublicationLocator {\n return {\n generation: envelope.generation,\n digest: envelope.digest,\n outputSetDigest: envelope.outputSetDigest,\n packageUrl: envelope.current?.packageUrl ?? '',\n receiptKey: envelope.receipt.inputFingerprint,\n };\n}\n\nfunction recoveryFor(retryable: boolean, useLastKnownGood: boolean): AssetPublicationRecovery {\n return {\n retryable,\n preserveCurrent: true,\n useLastKnownGood,\n actions: retryable\n ? ['inspect-publication-failure', 'retry-rebuild', 'continue-last-known-good']\n : ['inspect-publication-failure', 'edit-source', 'continue-last-known-good'],\n };\n}\n\nfunction failure(\n envelope: AssetPublicationEnvelope,\n code: string,\n stage: AssetPublicationFailure['stage'],\n reason: string,\n retryable: boolean,\n current: AssetPublicationEnvelope | undefined,\n lastKnownGood: AssetPublicationEnvelope | undefined,\n): ScriptablePackPublicationError {\n return {\n code,\n stage,\n sourcePath: envelope.sourcePath,\n sourceRevision: envelope.sourceRevision,\n generation: envelope.generation,\n reason,\n recovery: recoveryFor(retryable, lastKnownGood !== undefined),\n ...(current === undefined ? {} : { current: locatorFor(current) }),\n ...(lastKnownGood === undefined ? {} : { lastKnownGood: locatorFor(lastKnownGood) }),\n };\n}\n\nfunction validateOutputs(\n envelope: AssetPublicationEnvelope,\n current: AssetPublicationEnvelope | undefined,\n lastKnownGood: AssetPublicationEnvelope | undefined,\n): ScriptablePackPublicationError | undefined {\n const guids = new Set<string>();\n const sourceKeys = new Set<string>();\n for (const output of envelope.outputs) {\n const guid = output.guid.toLowerCase();\n if (guids.has(guid) || sourceKeys.has(output.sourceKey)) {\n return failure(\n envelope,\n 'asset-publication-output-duplicate',\n 'output',\n 'publication output GUIDs and sourceKeys must be unique',\n false,\n current,\n lastKnownGood,\n );\n }\n guids.add(guid);\n sourceKeys.add(output.sourceKey);\n }\n if (\n envelope.outputs.length === 0 ||\n scriptablePackOutputSetDigest(envelope.outputs) !== envelope.outputSetDigest\n ) {\n return failure(\n envelope,\n 'asset-publication-output-set-mismatch',\n 'receipt',\n 'receipt outputSetDigest does not match the complete output tuple',\n false,\n current,\n lastKnownGood,\n );\n }\n return undefined;\n}\n\nfunction validateReceipt(\n envelope: AssetPublicationEnvelope,\n current: AssetPublicationEnvelope | undefined,\n lastKnownGood: AssetPublicationEnvelope | undefined,\n): ScriptablePackPublicationError | undefined {\n const receipt = envelope.receipt;\n if (\n receipt.schemaVersion !== 'asset-publication-receipt/1' ||\n receipt.sourcePath !== envelope.sourcePath ||\n receipt.sourceRevision !== envelope.sourceRevision ||\n receipt.outputSetDigest !== envelope.outputSetDigest ||\n receipt.outputDigest !== envelope.digest ||\n stable(receipt.externalEvidence) !== stable(envelope.externalEvidence)\n ) {\n return failure(\n envelope,\n 'asset-publication-receipt-mismatch',\n 'receipt',\n 'publication receipt does not match the candidate output tuple',\n false,\n current,\n lastKnownGood,\n );\n }\n return undefined;\n}\n\nfunction validateEnvelope(\n envelope: AssetPublicationEnvelope,\n current: AssetPublicationEnvelope | undefined,\n lastKnownGood: AssetPublicationEnvelope | undefined,\n): ScriptablePackPublicationError | undefined {\n if (envelope.schemaVersion !== 'asset-publication/1') {\n return failure(\n envelope,\n 'asset-publication-schema-invalid',\n 'receipt',\n 'publication envelope schemaVersion is not supported',\n false,\n current,\n lastKnownGood,\n );\n }\n if (!Number.isSafeInteger(envelope.generation) || envelope.generation < 1) {\n return failure(\n envelope,\n 'asset-publication-generation-invalid',\n 'receipt',\n 'publication generation must be a positive integer',\n false,\n current,\n lastKnownGood,\n );\n }\n const outputError = validateOutputs(envelope, current, lastKnownGood);\n if (outputError !== undefined) return outputError;\n const receiptError = validateReceipt(envelope, current, lastKnownGood);\n if (receiptError !== undefined) return receiptError;\n // Re-running a deterministic producer (for example a cold cook after a\n // rebuild) can yield the exact same publication tuple. That is an\n // idempotent request, not a late result: rejecting it here makes the\n // editor's retry/cold-cook operation fail even though the published asset is\n // already the requested content. A same-generation tuple with any changed\n // source/digest/output-set fact remains stale and is rejected below.\n const sameTuple =\n current !== undefined &&\n envelope.generation === current.generation &&\n envelope.sourcePath === current.sourcePath &&\n envelope.sourceRevision === current.sourceRevision &&\n envelope.digest === current.digest &&\n envelope.outputSetDigest === current.outputSetDigest;\n if (sameTuple) return undefined;\n if (current !== undefined && envelope.generation <= current.generation) {\n return failure(\n envelope,\n 'asset-publication-stale',\n 'cancelled',\n `candidate generation ${envelope.generation} is not newer than current ${current.generation}`,\n true,\n current,\n lastKnownGood,\n );\n }\n return undefined;\n}\n\ninterface PublicationState {\n snapshot: ScriptablePackPublicationSnapshot;\n /**\n * Staged candidates are owned by their envelope object, not by the\n * publication tuple. Two overlapping generations can legitimately produce\n * the same deterministic tuple; a stale owner's discard must not remove the\n * current owner's candidate before commit.\n */\n readonly staged: Set<AssetPublicationEnvelope>;\n}\n\nfunction validateCandidate(\n state: PublicationState,\n candidate: AcceptedPublicationCandidate,\n cancelledReason: string,\n): ScriptablePackPublicationError | undefined {\n const current = state.snapshot.current;\n const lastKnownGood = state.snapshot.lastKnownGood ?? current;\n if (candidate.cancelled === true) {\n return failure(\n candidate.envelope,\n 'asset-publication-cancelled',\n 'cancelled',\n cancelledReason,\n true,\n current,\n lastKnownGood,\n );\n }\n return validateEnvelope(candidate.envelope, current, lastKnownGood);\n}\n\nasync function publishCandidate(\n state: PublicationState,\n candidate: AcceptedPublicationCandidate,\n commitRoute: () => Promise<void> | void,\n): Promise<Result<ScriptablePackPublicationSnapshot, ScriptablePackPublicationError>> {\n const current = state.snapshot.current;\n const lastKnownGood = state.snapshot.lastKnownGood ?? current;\n const invalid = validateCandidate(\n state,\n candidate,\n 'publication request was cancelled before route commit',\n );\n if (invalid !== undefined) {\n state.snapshot = { ...state.snapshot, failure: invalid };\n return err(invalid);\n }\n try {\n await commitRoute();\n } catch (error) {\n const failed = failure(\n candidate.envelope,\n 'asset-publication-route-failed',\n 'route',\n error instanceof Error ? error.message : String(error),\n true,\n current,\n lastKnownGood,\n );\n state.snapshot = { ...state.snapshot, failure: failed };\n return err(failed);\n }\n const published = {\n ...candidate.envelope,\n current: locatorFor(candidate.envelope),\n ...(current === undefined ? {} : { lastKnownGood: locatorFor(current) }),\n recovery: recoveryFor(false, current !== undefined),\n };\n state.snapshot = {\n current: published,\n ...(current === undefined ? {} : { lastKnownGood: current }),\n };\n return ok(state.snapshot);\n}\n\n/** Create the one DDC publication authority shared by dev attempts. */\nexport function createAcceptedPublicationStore(): AcceptedPublicationStore {\n const states = new Map<string, PublicationState>();\n function stateFor(sourcePath: string): PublicationState {\n const existing = states.get(sourcePath);\n if (existing !== undefined) return existing;\n const created: PublicationState = { snapshot: {}, staged: new Set() };\n states.set(sourcePath, created);\n return created;\n }\n return {\n observe(sourcePath) {\n return stateFor(sourcePath).snapshot;\n },\n stage(sourcePath, candidate) {\n const invalid = validateCandidate(\n stateFor(sourcePath),\n candidate,\n 'publication request was cancelled before DDC commit',\n );\n if (invalid !== undefined) return err(invalid);\n stateFor(sourcePath).staged.add(candidate.envelope);\n return ok(undefined);\n },\n async commit(sourcePath, candidate, commitRoute) {\n const state = stateFor(sourcePath);\n if (!state.staged.has(candidate.envelope)) {\n const current = state.snapshot.current;\n const lastKnownGood = state.snapshot.lastKnownGood ?? current;\n return err(\n failure(\n candidate.envelope,\n 'asset-publication-cancelled',\n 'cancelled',\n 'publication candidate was discarded before DDC commit',\n true,\n current,\n lastKnownGood,\n ),\n );\n }\n const result = await publishCandidate(state, candidate, commitRoute);\n state.staged.delete(candidate.envelope);\n return result;\n },\n discard(sourcePath, candidate) {\n stateFor(sourcePath).staged.delete(candidate);\n },\n restore(sourcePath, snapshot) {\n const state = stateFor(sourcePath);\n state.staged.clear();\n state.snapshot = snapshot;\n },\n };\n}\n","import { createHash } from 'node:crypto';\nimport { mkdir, readFile, rename, writeFile } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport { DdcStoreError } from './errors.js';\n\nexport interface DdcRuntimeScope {\n readonly scopeId: string;\n readonly scopeHash: string;\n readonly root: string;\n readonly metadataPath: string;\n}\n\ninterface ScopeMetadata {\n readonly schemaVersion: 'forgeax-ddc-scope/v2';\n readonly scopeId: string;\n readonly scopeHash: string;\n}\n\nfunction scopeHash(scopeId: string): string {\n return createHash('sha256').update(scopeId, 'utf8').digest('hex');\n}\n\nexport function runtimeScopeHash(scopeId: string): string {\n return scopeHash(scopeId);\n}\n\nexport async function createRuntimeScope(root: string, scopeId: string): Promise<DdcRuntimeScope> {\n if (scopeId.length === 0) {\n throw new DdcStoreError({\n code: 'ddc-scope-mismatch',\n detail: 'runtime scope id must not be empty',\n expected: 'a non-empty original scope id',\n actual: scopeId,\n rootKind: 'project-ddc',\n });\n }\n const hash = scopeHash(scopeId);\n const scopeRoot = join(root, 'scopes', hash);\n const metadataPath = join(scopeRoot, 'scope.json');\n await mkdir(scopeRoot, { recursive: true });\n const expected: ScopeMetadata = {\n schemaVersion: 'forgeax-ddc-scope/v2',\n scopeId,\n scopeHash: hash,\n };\n try {\n const actual = JSON.parse(await readFile(metadataPath, 'utf8')) as Partial<ScopeMetadata>;\n if (\n actual.schemaVersion !== expected.schemaVersion ||\n actual.scopeId !== expected.scopeId ||\n actual.scopeHash !== expected.scopeHash\n ) {\n throw new DdcStoreError({\n code: 'ddc-scope-mismatch',\n detail: 'runtime scope metadata does not match the requested scope',\n expected,\n actual,\n rootKind: 'project-ddc',\n scope: scopeId,\n });\n }\n } catch (error) {\n if (error instanceof DdcStoreError) throw error;\n const temporary = `${metadataPath}.${process.pid}.tmp`;\n await writeFile(temporary, JSON.stringify(expected));\n await rename(temporary, metadataPath);\n }\n return { scopeId, scopeHash: hash, root: scopeRoot, metadataPath };\n}\n\nexport async function assertRuntimeScope(\n root: string,\n scope: Pick<DdcRuntimeScope, 'scopeId' | 'scopeHash'>,\n): Promise<DdcRuntimeScope> {\n const expectedHash = scopeHash(scope.scopeId);\n if (scope.scopeHash !== expectedHash) {\n throw new DdcStoreError({\n code: 'ddc-scope-mismatch',\n detail: 'runtime scope hash does not match the original scope id',\n expected: expectedHash,\n actual: scope.scopeHash,\n rootKind: 'project-ddc',\n scope: scope.scopeId,\n });\n }\n return createRuntimeScope(root, scope.scopeId);\n}\n","import type { DdcEntry, StagedDdcEntry } from './entry-store.js';\nimport { DdcEntryStore } from './entry-store.js';\nimport type {\n DdcCommitResult,\n DdcHead,\n DdcLease,\n DdcRestoreFence,\n DdcRestoreResult,\n DdcRollbackSnapshot,\n} from './lifecycle.js';\nimport { DdcLifecycle } from './lifecycle.js';\n\nexport interface DdcSessionOptions {\n readonly generation: number;\n readonly leaseTtlMs?: number;\n}\n\nexport interface DdcGenerationCandidate {\n readonly generation: number;\n readonly lease: DdcLease;\n readonly previousHead: DdcRollbackSnapshot;\n}\n\nexport interface DdcGenerationEntryCandidate extends DdcGenerationCandidate {\n readonly staged: StagedDdcEntry;\n}\n\nexport interface DdcSessionMetrics {\n readonly hitCount: number;\n readonly missCount: number;\n readonly corruptCount: number;\n readonly writeFailureCount: number;\n}\n\ntype MutableDdcGenerationCandidate = Omit<DdcGenerationCandidate, 'lease'> & {\n lease: DdcLease;\n};\n\ntype MutableDdcGenerationEntryCandidate = Omit<DdcGenerationEntryCandidate, 'lease'> & {\n lease: DdcLease;\n};\n\ntype HeartbeatTimer = ReturnType<typeof setTimeout>;\n\ninterface MutableMetrics {\n hitCount: number;\n missCount: number;\n corruptCount: number;\n writeFailureCount: number;\n}\n\nexport class DdcGenerationSession {\n public readonly generation: number;\n private readonly lifecycle: DdcLifecycle;\n private readonly entries: DdcEntryStore;\n private readonly candidates = new Map<string, MutableDdcGenerationCandidate>();\n private readonly restoreFences = new WeakMap<DdcGenerationCandidate, DdcRestoreFence>();\n private readonly heartbeatTimers = new Map<string, HeartbeatTimer>();\n private readonly counters: MutableMetrics = {\n hitCount: 0,\n missCount: 0,\n corruptCount: 0,\n writeFailureCount: 0,\n };\n private accepting = true;\n\n public constructor(root: string, options: DdcSessionOptions) {\n if (!Number.isSafeInteger(options.generation) || options.generation < 1) {\n throw new TypeError('DDC generation must be a positive safe integer');\n }\n this.generation = options.generation;\n this.lifecycle = new DdcLifecycle(\n root,\n options.leaseTtlMs === undefined ? undefined : { leaseTtlMs: options.leaseTtlMs },\n );\n this.entries = new DdcEntryStore(root);\n }\n\n public async beginCandidate(guid: string, desiredKey: string): Promise<DdcGenerationCandidate> {\n this.assertOpen();\n const { lease, previousHead } = await this.lifecycle.beginWithSnapshot(guid, desiredKey);\n if (previousHead.state === 'current') this.counters.hitCount += 1;\n else this.counters.missCount += 1;\n const candidate: MutableDdcGenerationCandidate = {\n generation: this.generation,\n lease,\n previousHead,\n };\n this.candidates.set(lease.attempt, candidate);\n this.scheduleHeartbeat(candidate);\n return candidate;\n }\n\n public async stageEntry(entry: DdcEntry): Promise<DdcGenerationEntryCandidate> {\n this.assertOpen();\n const candidate = (await this.beginCandidate(\n entry.guid,\n entry.key,\n )) as MutableDdcGenerationCandidate;\n try {\n const staged = await this.entries.stage(entry);\n const entryCandidate: MutableDdcGenerationEntryCandidate = Object.assign(candidate, {\n staged,\n });\n this.candidates.set(candidate.lease.attempt, entryCandidate);\n return entryCandidate;\n } catch (error) {\n const fence = await this.lifecycle.fail(candidate.lease, {\n code: 'ddc-entry-stage-failed',\n detail: error instanceof Error ? error.message : String(error),\n });\n if (fence !== undefined) this.restoreFences.set(candidate, fence);\n this.stopHeartbeat(candidate);\n this.candidates.delete(candidate.lease.attempt);\n this.counters.writeFailureCount += 1;\n throw error;\n }\n }\n\n public async inspect(guid: string, desiredKey: string): Promise<DdcHead> {\n this.assertOpen();\n const head = await this.lifecycle.inspect(guid, desiredKey);\n if (head.state === 'current') this.counters.hitCount += 1;\n else this.counters.missCount += 1;\n return head;\n }\n\n public async commitCandidate(\n candidate: DdcGenerationCandidate,\n validatedKey: string,\n ): Promise<DdcCommitResult> {\n const registered = this.assertCandidate(candidate);\n try {\n const result = await this.lifecycle.commit(registered.lease, validatedKey);\n if (result.restoreFence !== undefined)\n this.restoreFences.set(registered, result.restoreFence);\n if (result.result === 'invalid') this.counters.corruptCount += 1;\n this.stopHeartbeat(registered);\n this.candidates.delete(registered.lease.attempt);\n return result;\n } catch (error) {\n this.stopHeartbeat(registered);\n this.counters.writeFailureCount += 1;\n throw error;\n }\n }\n\n public async commitEntry(\n candidate: DdcGenerationEntryCandidate,\n validatedKey: string,\n ): Promise<DdcCommitResult> {\n const registered = this.assertCandidate(candidate);\n try {\n await this.entries.publish(candidate.staged);\n const result = await this.lifecycle.commit(registered.lease, validatedKey);\n if (result.restoreFence !== undefined)\n this.restoreFences.set(registered, result.restoreFence);\n this.stopHeartbeat(registered);\n this.candidates.delete(registered.lease.attempt);\n return result;\n } catch (error) {\n this.stopHeartbeat(registered);\n const fence = await this.lifecycle.fail(registered.lease, {\n code: 'ddc-entry-publish-failed',\n detail: error instanceof Error ? error.message : String(error),\n });\n if (fence !== undefined) this.restoreFences.set(registered, fence);\n await this.entries.discard(candidate.staged).catch(() => {});\n this.candidates.delete(registered.lease.attempt);\n this.counters.writeFailureCount += 1;\n throw error;\n }\n }\n\n public async discardCandidate(candidate: DdcGenerationCandidate): Promise<void> {\n const registered = this.candidates.get(candidate.lease.attempt);\n if (registered === undefined) return;\n try {\n this.stopHeartbeat(registered);\n await this.lifecycle.discard(registered.lease);\n this.candidates.delete(registered.lease.attempt);\n } catch (error) {\n this.counters.writeFailureCount += 1;\n throw error;\n }\n }\n\n public async discardEntry(candidate: DdcGenerationEntryCandidate): Promise<void> {\n await Promise.all([this.discardCandidate(candidate), this.entries.discard(candidate.staged)]);\n }\n\n public async restoreEntry(candidate: DdcGenerationEntryCandidate): Promise<DdcRestoreResult> {\n const registered = this.candidates.get(candidate.lease.attempt);\n const ownerLease = registered?.lease ?? candidate.lease;\n const fence = this.restoreFences.get(candidate);\n this.stopHeartbeat(ownerLease);\n let result: DdcRestoreResult = {\n result: 'not-owner',\n revision: candidate.previousHead.revision ?? 0,\n ...(candidate.previousHead.generation === undefined\n ? {}\n : { generation: candidate.previousHead.generation }),\n };\n let restoreError: unknown;\n try {\n result = await this.lifecycle.restoreIfCurrent(candidate.previousHead, ownerLease, fence);\n } catch (error) {\n restoreError = error;\n } finally {\n await this.entries.discard(candidate.staged).catch(() => {});\n if (registered !== undefined) {\n this.candidates.delete(registered.lease.attempt);\n }\n }\n if (restoreError !== undefined) throw restoreError;\n return result;\n }\n\n public metrics(): DdcSessionMetrics {\n return { ...this.counters };\n }\n\n public async close(): Promise<void> {\n if (!this.accepting) return;\n this.accepting = false;\n for (const timer of this.heartbeatTimers.values()) clearTimeout(timer);\n this.heartbeatTimers.clear();\n const pending = [...this.candidates.values()];\n for (const candidate of pending) {\n try {\n await this.lifecycle.discard(candidate.lease);\n } catch {\n this.counters.writeFailureCount += 1;\n }\n }\n this.candidates.clear();\n }\n\n private assertOpen(): void {\n if (!this.accepting) throw new Error('DDC generation session is closed');\n }\n\n private assertCandidate(candidate: DdcGenerationCandidate): MutableDdcGenerationCandidate {\n this.assertOpen();\n const registered = this.candidates.get(candidate.lease.attempt);\n if (candidate.generation !== this.generation || registered === undefined) {\n throw new Error('DDC candidate belongs to another generation session');\n }\n return registered;\n }\n\n private scheduleHeartbeat(candidate: MutableDdcGenerationCandidate): void {\n const attempt = candidate.lease.attempt;\n this.stopHeartbeat(candidate);\n const delay = Math.max(1, Math.floor((candidate.lease.expiresAt - Date.now()) / 2));\n const timer = setTimeout(() => {\n this.heartbeatTimers.delete(attempt);\n if (!this.accepting || this.candidates.get(attempt) !== candidate) return;\n void this.lifecycle\n .heartbeat(candidate.lease)\n .then((lease) => {\n if (!this.accepting || this.candidates.get(attempt) !== candidate) return;\n candidate.lease = lease;\n this.scheduleHeartbeat(candidate);\n })\n .catch(() => {\n this.stopHeartbeat(candidate);\n });\n }, delay);\n timer.unref?.();\n this.heartbeatTimers.set(attempt, timer);\n }\n\n private stopHeartbeat(candidate: DdcGenerationCandidate | DdcLease): void {\n const attempt = 'lease' in candidate ? candidate.lease.attempt : candidate.attempt;\n const timer = this.heartbeatTimers.get(attempt);\n if (timer === undefined) return;\n clearTimeout(timer);\n this.heartbeatTimers.delete(attempt);\n }\n}\n","import type { DdcErrorRootKind } from './errors.js';\n\nexport const DDC_STATUS_SCHEMA = 'forgeax-ddc-status/v2' as const;\n\nexport type DdcStatusHealth = 'ready' | 'blocked' | 'missing' | 'stale' | 'failed';\nexport type DdcStatusLayerKind = 'build' | 'project' | 'runtime';\nexport type DdcStatusRootKind = DdcErrorRootKind;\n\nexport interface DdcRecoveryAction {\n readonly kind: 'inspect' | 'allocate-generation' | 'retry' | 'cold-rebuild' | 'prune';\n readonly executable: boolean;\n readonly exactTarget?: string;\n readonly reason?: string;\n}\n\nexport interface DdcStatusLayer {\n readonly kind: DdcStatusLayerKind;\n readonly owner: 'engine-ddc' | 'engine-pack' | 'plugin' | 'runtime';\n readonly rootKind: DdcStatusRootKind;\n readonly scopeId?: string;\n readonly current?: number | string;\n readonly lastKnownGood?: number | string;\n readonly protection: readonly string[];\n readonly actions: readonly DdcRecoveryAction[];\n}\n\nexport interface DdcStatus {\n readonly schemaVersion: typeof DDC_STATUS_SCHEMA;\n readonly health: DdcStatusHealth;\n readonly layers: readonly DdcStatusLayer[];\n readonly gameDir?: string;\n readonly projectDdcRoot?: string;\n}\n\nexport type BrowserDdcRecoveryAction = Omit<DdcRecoveryAction, 'exactTarget'>;\nexport type BrowserDdcStatusLayer = Omit<DdcStatusLayer, 'actions'> & {\n readonly actions: readonly BrowserDdcRecoveryAction[];\n};\nexport type BrowserDdcStatus = Omit<DdcStatus, 'gameDir' | 'projectDdcRoot' | 'layers'> & {\n readonly layers: readonly BrowserDdcStatusLayer[];\n};\n\nexport function serializeDdcStatus(status: DdcStatus): string {\n return JSON.stringify(status);\n}\n\nexport function projectDdcStatusForBrowser(status: DdcStatus): BrowserDdcStatus {\n return {\n schemaVersion: DDC_STATUS_SCHEMA,\n health: status.health,\n layers: status.layers.map((layer) => ({\n ...layer,\n actions: layer.actions.map(({ exactTarget: _exactTarget, ...action }) => action),\n })),\n };\n}\n\nexport const toBrowserDdcStatus = projectDdcStatusForBrowser;\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/key.ts","../src/build-cache.ts","../src/errors.ts","../src/entry-store.ts","../src/lifecycle.ts","../src/gc.ts","../src/layout.ts","../src/publication.ts","../src/runtime-scope.ts","../src/session.ts","../src/status.ts"],"names":["digest","createHash","join","mkdir","writeFile","rm","readFile","randomUUID","nextRevision","failure","rename","readdir","delay"],"mappings":"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","file":"index.mjs","sourcesContent":["import { createHash } from 'node:crypto';\n\nexport interface SemanticDdcInput {\n readonly schemaVersion: string;\n readonly importer: string;\n readonly codec: string;\n readonly settings: unknown;\n readonly sourceBytes: readonly Uint8Array[];\n readonly declaredGuids: readonly string[];\n readonly targetProfile: string;\n readonly producer: string;\n}\n\nexport function canonicalDdcJson(value: unknown): string {\n const sorted = sortValue(value);\n return JSON.stringify(sorted) ?? 'null';\n}\n\nfunction sortValue(value: unknown): unknown {\n if (value instanceof Uint8Array) {\n return { encoding: 'base64', bytes: Buffer.from(value).toString('base64') };\n }\n if (Array.isArray(value)) return value.map(sortValue);\n if (value !== null && typeof value === 'object') {\n const result: Record<string, unknown> = {};\n for (const key of Object.keys(value as Record<string, unknown>).sort()) {\n result[key] = sortValue((value as Record<string, unknown>)[key]);\n }\n return result;\n }\n return value;\n}\n\nexport function semanticDdcKey(input: SemanticDdcInput): string {\n const semantic = {\n schemaVersion: input.schemaVersion,\n importer: input.importer,\n codec: input.codec,\n settings: input.settings,\n sourceBytes: input.sourceBytes,\n declaredGuids: [...input.declaredGuids].sort(),\n targetProfile: input.targetProfile,\n producer: input.producer,\n };\n return createHash('sha256').update(canonicalDdcJson(semantic)).digest('hex');\n}\n","import { existsSync } from 'node:fs';\nimport { dirname, join, resolve } from 'node:path';\nimport { semanticDdcKey as ownerSemanticDdcKey } from './key.js';\n\nexport interface BuildDdcInput {\n readonly schemaVersion: string;\n readonly importerVersion: string;\n readonly codecVersion: string;\n readonly sourceDependencies: readonly (\n | string\n | { readonly path: string; readonly digest: string }\n )[];\n readonly settings: unknown;\n readonly declaredGuids: readonly string[];\n readonly cookProfile: string;\n readonly sourceOverrides?: unknown;\n readonly publish?: unknown;\n}\n\nexport function resolveDdcRoot(cwd: string): string {\n let current = resolve(cwd);\n while (true) {\n if (existsSync(join(current, 'pnpm-workspace.yaml'))) {\n return join(current, 'node_modules/.cache/forgeax-ddc');\n }\n const parent = dirname(current);\n if (parent === current) return join(resolve(cwd), 'node_modules/.cache/forgeax-ddc');\n current = parent;\n }\n}\n\n/** Derive the build key while keeping publish URLs out of the semantic identity. */\nexport function semanticBuildKey(input: BuildDdcInput): string {\n const hasSourceOverrides =\n input.sourceOverrides !== undefined &&\n typeof input.sourceOverrides === 'object' &&\n input.sourceOverrides !== null &&\n !Array.isArray(input.sourceOverrides) &&\n Object.keys(input.sourceOverrides).length > 0;\n const settings = hasSourceOverrides\n ? { settings: input.settings, sourceOverrides: input.sourceOverrides }\n : input.settings;\n return ownerSemanticDdcKey({\n schemaVersion: input.schemaVersion,\n importer: input.importerVersion,\n codec: input.codecVersion,\n settings,\n sourceBytes: input.sourceDependencies\n .map((dependency) =>\n typeof dependency === 'string'\n ? dependency.replaceAll('\\\\', '/').replace(/^.*\\/(assets\\/)/, '$1')\n : dependency.digest,\n )\n .sort()\n .map((digest) => new TextEncoder().encode(digest)),\n declaredGuids: input.declaredGuids,\n targetProfile: input.cookProfile,\n producer: input.importerVersion,\n });\n}\n","export const DDC_ERROR_CODES = [\n 'ddc-project-root-required',\n 'ddc-object-conflict',\n 'ddc-head-conflict',\n 'ddc-generation-conflict',\n 'ddc-scope-mismatch',\n 'ddc-lease-expired',\n] as const;\n\nexport type DdcContractErrorCode = (typeof DDC_ERROR_CODES)[number];\nexport type DdcEntryErrorCode = 'ddc-entry-incomplete' | 'ddc-entry-invalid' | 'ddc-entry-conflict';\nexport type DdcErrorCode = DdcContractErrorCode | DdcEntryErrorCode;\n\nexport type DdcErrorRootKind = 'build-cache' | 'project-ddc' | 'runtime';\n\nexport interface DdcRecoveryAction {\n readonly kind:\n | 'inspect'\n | 'allocate-generation'\n | 'retry'\n | 'cold-rebuild'\n | 'prune'\n | 'release-lease';\n readonly executable: boolean;\n readonly exactTarget?: string;\n readonly reason?: string;\n}\n\nexport interface DdcStoreErrorInit {\n readonly code: DdcErrorCode;\n readonly detail: string;\n readonly hint?: string;\n readonly expected?: unknown;\n readonly actual?: unknown;\n readonly owner?: string;\n readonly rootKind?: DdcErrorRootKind;\n readonly scope?: string;\n readonly generation?: number;\n readonly lease?: string;\n readonly revision?: number;\n readonly recoveryActions?: readonly DdcRecoveryAction[];\n readonly hostPath?: string;\n}\n\nexport interface DdcBrowserError {\n readonly code: DdcErrorCode;\n readonly hint: string;\n readonly expected: unknown;\n readonly actual?: unknown;\n readonly owner?: string;\n readonly rootKind?: DdcErrorRootKind;\n readonly scope?: string;\n readonly generation?: number;\n readonly lease?: string;\n readonly revision?: number;\n readonly recoveryActions: readonly Omit<DdcRecoveryAction, 'exactTarget'>[];\n}\n\nconst defaultHints: Record<DdcErrorCode, string> = {\n 'ddc-project-root-required': 'inject the canonical projectDdcRoot before serving or publishing',\n 'ddc-object-conflict': 'keep the verified object and reject the competing publication',\n 'ddc-head-conflict': 'inspect the current head and retry with a fresh revision',\n 'ddc-generation-conflict': 'allocate a new persistent generation; do not edit the counter',\n 'ddc-scope-mismatch': 'reinspect the canonical root and allocate a new scope',\n 'ddc-lease-expired': 'discard the stale commit and acquire a new lease',\n 'ddc-entry-incomplete': 'discard the partial entry and cold-cook from author authority',\n 'ddc-entry-invalid': 'preserve last-known-good, inspect the entry, then cold-cook',\n 'ddc-entry-conflict': 'keep the verified entry and reject the competing publication',\n};\n\nfunction defaultExpected(code: DdcErrorCode): unknown {\n if (code === 'ddc-project-root-required') return 'projectDdcRoot';\n if (code === 'ddc-entry-incomplete' || code === 'ddc-entry-invalid') {\n return 'a complete DDC entry whose receipt and integrity digests validate';\n }\n return 'a valid DDC owner, scope, generation, revision, and lease';\n}\n\nfunction defaultActions(code: DdcErrorCode): readonly DdcRecoveryAction[] {\n switch (code) {\n case 'ddc-project-root-required':\n case 'ddc-scope-mismatch':\n return [\n { kind: 'inspect', executable: true },\n { kind: 'retry', executable: true },\n ];\n case 'ddc-generation-conflict':\n return [{ kind: 'allocate-generation', executable: true }];\n case 'ddc-lease-expired':\n return [\n { kind: 'release-lease', executable: true },\n { kind: 'retry', executable: true },\n ];\n case 'ddc-object-conflict':\n case 'ddc-head-conflict':\n return [\n { kind: 'inspect', executable: true },\n { kind: 'retry', executable: true },\n ];\n case 'ddc-entry-incomplete':\n case 'ddc-entry-invalid':\n return [{ kind: 'cold-rebuild', executable: true }];\n case 'ddc-entry-conflict':\n return [{ kind: 'inspect', executable: true }];\n }\n}\n\nexport class DdcStoreError extends Error {\n public readonly code: DdcErrorCode;\n public readonly detail: string;\n public readonly hint: string;\n public readonly expected: unknown;\n public readonly actual: unknown;\n public readonly owner: string | undefined;\n public readonly rootKind: DdcErrorRootKind | undefined;\n public readonly scope: string | undefined;\n public readonly generation: number | undefined;\n public readonly lease: string | undefined;\n public readonly revision: number | undefined;\n public readonly recoveryActions: readonly DdcRecoveryAction[];\n public readonly hostPath: string | undefined;\n\n public constructor(code: DdcErrorCode, detail: string);\n public constructor(input: DdcStoreErrorInit);\n public constructor(inputOrCode: DdcStoreErrorInit | DdcErrorCode, legacyDetail?: string) {\n const input: DdcStoreErrorInit =\n typeof inputOrCode === 'string'\n ? { code: inputOrCode, detail: legacyDetail ?? inputOrCode }\n : inputOrCode;\n super(input.detail);\n this.name = 'DdcStoreError';\n this.code = input.code;\n this.detail = input.detail;\n this.hint = input.hint ?? defaultHints[input.code];\n this.expected = input.expected ?? defaultExpected(input.code);\n this.actual = input.actual;\n this.owner = input.owner;\n this.rootKind = input.rootKind;\n this.scope = input.scope;\n this.generation = input.generation;\n this.lease = input.lease;\n this.revision = input.revision;\n this.recoveryActions = input.recoveryActions ?? defaultActions(input.code);\n this.hostPath = input.hostPath;\n }\n\n public toBrowserProjection(): DdcBrowserError {\n return {\n code: this.code,\n hint: this.hint,\n expected: this.expected,\n ...(this.actual === undefined ? {} : { actual: this.actual }),\n ...(this.owner === undefined ? {} : { owner: this.owner }),\n ...(this.rootKind === undefined ? {} : { rootKind: this.rootKind }),\n ...(this.scope === undefined ? {} : { scope: this.scope }),\n ...(this.generation === undefined ? {} : { generation: this.generation }),\n ...(this.lease === undefined ? {} : { lease: this.lease }),\n ...(this.revision === undefined ? {} : { revision: this.revision }),\n recoveryActions: this.recoveryActions.map(\n ({ exactTarget: _exactTarget, ...action }) => action,\n ),\n };\n }\n}\n","import { createHash, randomUUID } from 'node:crypto';\nimport { mkdir, readdir, readFile, rename, rm, stat, writeFile } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport { DdcStoreError } from './errors.js';\nimport { canonicalDdcJson } from './key.js';\n\nexport { DdcStoreError } from './errors.js';\n\nexport interface DdcArtifact {\n readonly mediaType: string;\n readonly bytes: Uint8Array;\n}\n\nexport interface DdcReceipt {\n readonly guid: string;\n readonly key: string;\n readonly producer: string;\n readonly inputFingerprint: string;\n readonly outputDigest: string;\n}\n\nexport interface DdcEntry {\n readonly key: string;\n readonly guid: string;\n readonly payload: unknown;\n readonly refs: readonly string[];\n readonly artifacts: Readonly<Record<string, DdcArtifact>>;\n readonly receipt: DdcReceipt;\n}\n\nexport interface StagedDdcEntry {\n readonly key: string;\n readonly path: string;\n}\n\nexport interface PublishDdcEntryResult {\n readonly result: 'published' | 'existing' | 'conflict';\n readonly key: string;\n}\n\ninterface ArtifactIntegrity {\n readonly mediaType: string;\n readonly byteLength: number;\n readonly digest: string;\n}\n\ninterface EntryIntegrity {\n readonly payload: string;\n readonly refs: string;\n readonly receipt: string;\n readonly artifacts: Readonly<Record<string, ArtifactIntegrity>>;\n readonly entry: string;\n}\n\nfunction digest(value: string | Uint8Array): string {\n return createHash('sha256').update(value).digest('hex');\n}\n\nfunction artifactFile(key: string): string {\n if (/^[A-Za-z0-9._-]+$/.test(key)) return key;\n return Buffer.from(key, 'utf8').toString('base64url');\n}\n\nfunction validateKey(key: string): void {\n if (!/^[a-f0-9]{64}$/.test(key)) {\n throw new DdcStoreError('ddc-entry-invalid', `invalid semantic key: ${key}`);\n }\n}\n\nfunction errorCode(error: unknown): string | undefined {\n if (error !== null && typeof error === 'object' && 'code' in error) {\n const code = (error as { readonly code?: unknown }).code;\n return typeof code === 'string' ? code : undefined;\n }\n return undefined;\n}\n\nfunction sortedArtifacts(entry: DdcEntry): readonly [string, DdcArtifact][] {\n return Object.entries(entry.artifacts).sort(([left], [right]) => left.localeCompare(right));\n}\n\n/** The one output identity shared by receipt validation and DDC publication. */\nexport function ddcOutputDigest(\n entry: Pick<DdcEntry, 'guid' | 'payload' | 'refs' | 'artifacts'>,\n): string {\n return `sha256:${digest(\n canonicalDdcJson({\n guid: entry.guid,\n payload: entry.payload,\n refs: entry.refs,\n artifacts: Object.fromEntries(\n sortedArtifacts(entry as DdcEntry).map(([key, artifact]) => [\n key,\n {\n mediaType: artifact.mediaType,\n bytes: artifact.bytes,\n },\n ]),\n ),\n }),\n )}`;\n}\n\nfunction existingResult(\n existing: DdcEntry,\n candidate: DdcEntry,\n key: string,\n): PublishDdcEntryResult {\n return canonicalDdcJson(existing) === canonicalDdcJson(candidate)\n ? { result: 'existing', key }\n : { result: 'conflict', key };\n}\n\nfunction entryShape(entry: DdcEntry): Record<string, unknown> {\n return {\n key: entry.key,\n guid: entry.guid,\n payload: entry.payload,\n refs: entry.refs,\n receipt: entry.receipt,\n artifacts: Object.fromEntries(\n sortedArtifacts(entry).map(([key, artifact]) => [\n key,\n { mediaType: artifact.mediaType, byteLength: artifact.bytes.byteLength },\n ]),\n ),\n };\n}\n\nfunction integrityFor(entry: DdcEntry): EntryIntegrity {\n const artifacts = Object.fromEntries(\n sortedArtifacts(entry).map(([key, artifact]) => [\n key,\n {\n mediaType: artifact.mediaType,\n byteLength: artifact.bytes.byteLength,\n digest: digest(artifact.bytes),\n },\n ]),\n );\n return {\n payload: digest(canonicalDdcJson(entry.payload)),\n refs: digest(canonicalDdcJson(entry.refs)),\n receipt: digest(canonicalDdcJson(entry.receipt)),\n artifacts,\n entry: digest(canonicalDdcJson(entryShape(entry))),\n };\n}\n\nasync function readJson<T>(path: string): Promise<T> {\n return JSON.parse(await readFile(path, 'utf8')) as T;\n}\n\nexport class DdcEntryStore {\n private readonly entries: string;\n private readonly staging: string;\n\n public constructor(root: string) {\n this.entries = join(root, 'entries');\n this.staging = join(root, 'staging');\n }\n\n public async stage(entry: DdcEntry): Promise<StagedDdcEntry> {\n validateKey(entry.key);\n if (entry.receipt.key !== entry.key || entry.receipt.guid !== entry.guid) {\n throw new DdcStoreError('ddc-entry-invalid', 'receipt identity does not match entry');\n }\n if (entry.receipt.outputDigest !== ddcOutputDigest(entry)) {\n throw new DdcStoreError('ddc-entry-invalid', 'receipt output digest does not match entry');\n }\n const path = join(this.staging, `${entry.key}-${randomUUID()}`);\n try {\n await mkdir(join(path, 'artifacts'), { recursive: true });\n await writeFile(join(path, 'payload.json'), canonicalDdcJson(entry.payload));\n await writeFile(join(path, 'refs.json'), canonicalDdcJson(entry.refs));\n await writeFile(join(path, 'receipt.json'), canonicalDdcJson(entry.receipt));\n const artifacts: Record<string, { mediaType: string; file: string }> = {};\n for (const [key, artifact] of sortedArtifacts(entry)) {\n const file = artifactFile(key);\n artifacts[key] = { mediaType: artifact.mediaType, file };\n await writeFile(join(path, 'artifacts', `${file}.bin`), artifact.bytes);\n }\n await writeFile(join(path, 'artifacts.json'), canonicalDdcJson(artifacts));\n await writeFile(join(path, 'integrity.json'), canonicalDdcJson(integrityFor(entry)));\n return { key: entry.key, path };\n } catch (error) {\n await rm(path, { recursive: true, force: true }).catch(() => {});\n throw error;\n }\n }\n\n public async publish(staged: StagedDdcEntry): Promise<PublishDdcEntryResult> {\n validateKey(staged.key);\n const candidate = await this.readDirectory(staged.path, true);\n const target = join(this.entries, staged.key);\n await mkdir(this.entries, { recursive: true });\n const useExisting = async (): Promise<PublishDdcEntryResult> => {\n const existing = await this.readDirectory(target, false);\n await rm(staged.path, { recursive: true, force: true });\n return existingResult(existing, candidate, staged.key);\n };\n try {\n await stat(target);\n return useExisting();\n } catch (error) {\n if (error instanceof DdcStoreError) throw error;\n if (errorCode(error) !== 'ENOENT') throw error;\n }\n try {\n await rename(staged.path, target);\n return { result: 'published', key: staged.key };\n } catch (error) {\n if (!['EEXIST', 'ENOTEMPTY', 'EISDIR'].includes(errorCode(error) ?? '')) throw error;\n return useExisting();\n }\n }\n\n public async discard(staged: StagedDdcEntry): Promise<void> {\n await rm(staged.path, { recursive: true, force: true });\n }\n\n public async write(entry: DdcEntry): Promise<PublishDdcEntryResult> {\n const staged = await this.stage(entry);\n return this.publish(staged);\n }\n\n public async read(key: string): Promise<DdcEntry | null> {\n try {\n validateKey(key);\n return await this.readDirectory(join(this.entries, key), false);\n } catch {\n return null;\n }\n }\n\n public async listKeys(): Promise<readonly string[]> {\n const entries = await readdir(this.entries, { withFileTypes: true }).catch(() => []);\n return entries\n .filter((entry) => entry.isDirectory())\n .map((entry) => entry.name)\n .sort();\n }\n\n public async remove(key: string): Promise<void> {\n validateKey(key);\n await rm(join(this.entries, key), { recursive: true, force: false });\n }\n\n /** Read with a machine-readable corruption result for recovery tooling. */\n public async readChecked(\n key: string,\n ): Promise<\n | { readonly ok: true; readonly value: DdcEntry | null }\n | { readonly ok: false; readonly error: DdcStoreError }\n > {\n try {\n validateKey(key);\n try {\n await stat(join(this.entries, key));\n } catch (error) {\n if (errorCode(error) === 'ENOENT') return { ok: true, value: null };\n throw error;\n }\n try {\n return { ok: true, value: await this.readDirectory(join(this.entries, key), false) };\n } catch (error) {\n if (error instanceof DdcStoreError && error.code === 'ddc-entry-incomplete') {\n return { ok: true, value: null };\n }\n throw error;\n }\n } catch (error) {\n const normalized =\n error instanceof DdcStoreError\n ? error\n : new DdcStoreError('ddc-entry-invalid', 'entry is unreadable');\n return { ok: false, error: normalized };\n }\n }\n\n private async readDirectory(path: string, incompleteIsError: boolean): Promise<DdcEntry> {\n try {\n const payload = await readJson<unknown>(join(path, 'payload.json'));\n const refs = await readJson<readonly string[]>(join(path, 'refs.json'));\n const receipt = await readJson<DdcReceipt>(join(path, 'receipt.json'));\n const manifest = await readJson<\n Readonly<Record<string, { mediaType: string; file: string }>>\n >(join(path, 'artifacts.json'));\n const integrity = await readJson<EntryIntegrity>(join(path, 'integrity.json'));\n const artifacts: Record<string, DdcArtifact> = {};\n for (const [key, descriptor] of Object.entries(manifest).sort(([left], [right]) =>\n left.localeCompare(right),\n )) {\n const bytes = new Uint8Array(\n await readFile(join(path, 'artifacts', `${descriptor.file}.bin`)),\n );\n artifacts[key] = { mediaType: descriptor.mediaType, bytes };\n }\n const entry = { key: receipt.key, guid: receipt.guid, payload, refs, artifacts, receipt };\n if (entry.receipt.outputDigest !== ddcOutputDigest(entry)) {\n throw new DdcStoreError('ddc-entry-invalid', 'receipt output digest does not match entry');\n }\n const actual = integrityFor(entry);\n if (canonicalDdcJson(actual) !== canonicalDdcJson(integrity)) {\n throw new DdcStoreError('ddc-entry-invalid', 'entry integrity mismatch');\n }\n return entry;\n } catch (error) {\n if (incompleteIsError) {\n if (error instanceof DdcStoreError) throw error;\n throw new DdcStoreError('ddc-entry-incomplete', 'staged entry is incomplete');\n }\n if (error instanceof DdcStoreError) throw error;\n throw new DdcStoreError('ddc-entry-invalid', 'entry is unreadable');\n }\n }\n}\n","import { randomUUID } from 'node:crypto';\nimport { mkdir, readFile, rename, rm, writeFile } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport { DdcEntryStore } from './entry-store.js';\nimport { DdcStoreError } from './errors.js';\n\nexport type DdcLifecycleState = 'missing' | 'cooking' | 'current' | 'stale' | 'failed';\n\nexport interface DdcLease {\n readonly guid: string;\n readonly desiredKey: string;\n readonly attempt: string;\n readonly generation: number;\n readonly expectedRevision: number;\n readonly instanceId: string;\n readonly expiresAt: number;\n}\n\nexport interface DdcHead {\n readonly guid: string;\n readonly desiredKey: string;\n readonly state: DdcLifecycleState;\n readonly currentKey: string | undefined;\n readonly lastKnownGoodKey: string | undefined;\n readonly revision?: number;\n readonly generation?: number;\n readonly activeLease?: DdcLease;\n readonly failure?: { readonly code: string; readonly detail: string };\n}\n\nexport interface DdcCommitResult {\n readonly result: 'current' | 'stale' | 'lease-lost' | 'invalid';\n readonly key: string;\n readonly revision?: number;\n /** Internal CAS evidence retained for a later generation rollback. */\n readonly restoreFence?: DdcRestoreFence;\n}\n\nexport interface DdcRestoreFence {\n readonly attempt: string;\n readonly generation: number;\n readonly revision: number;\n readonly desiredKey: string;\n readonly outcome: 'current' | 'invalid' | 'failed';\n readonly key?: string;\n readonly currentKey?: string;\n readonly lastKnownGoodKey?: string;\n readonly failure?: { readonly code: string; readonly detail: string };\n}\n\nexport interface DdcRestoreResult {\n readonly result: 'restored' | 'not-owner';\n readonly revision: number;\n readonly generation?: number;\n}\n\nexport type DdcRollbackSnapshot = Omit<DdcHead, 'activeLease'>;\n\nexport interface DdcBeginResult {\n readonly lease: DdcLease;\n readonly previousHead: DdcRollbackSnapshot;\n}\n\ninterface HeadRecord {\n readonly guid: string;\n readonly desiredKey: string;\n readonly revision: number;\n readonly currentKey?: string;\n readonly lastKnownGoodKey?: string;\n readonly generation?: number;\n readonly active?: DdcLease;\n readonly supersededAttempts?: readonly string[];\n readonly stale?: boolean;\n readonly empty?: boolean;\n readonly failure?: {\n readonly desiredKey: string;\n readonly code: string;\n readonly detail: string;\n };\n}\n\ninterface GenerationRecord {\n readonly schemaVersion: 'forgeax-ddc-generation/v2';\n readonly next: number;\n}\n\nconst LOCK_WAIT_MS = 10;\nconst LOCK_TIMEOUT_MS = 5000;\nconst LEASE_TTL_MS = 30_000;\n\nfunction headFile(heads: string, guid: string): string {\n return join(heads, `${encodeURIComponent(guid)}.json`);\n}\n\nfunction lockFile(root: string, name: string): string {\n return join(root, 'locks', `${encodeURIComponent(name)}.lock`);\n}\n\nfunction withRevision(\n result: Omit<DdcCommitResult, 'revision'>,\n revision: number,\n restoreFence?: DdcRestoreFence,\n): DdcCommitResult {\n const value = { ...result } as DdcCommitResult;\n Object.defineProperty(value, 'revision', { value: revision, enumerable: false });\n if (restoreFence !== undefined) {\n Object.defineProperty(value, 'restoreFence', { value: restoreFence, enumerable: false });\n }\n return value;\n}\n\nasync function delay(ms: number): Promise<void> {\n await new Promise((resolveDelay) => setTimeout(resolveDelay, ms));\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return value !== null && typeof value === 'object' && !Array.isArray(value);\n}\n\nfunction isString(value: unknown): value is string {\n return typeof value === 'string';\n}\n\nfunction isNonNegativeInteger(value: unknown): value is number {\n return typeof value === 'number' && Number.isInteger(value) && value >= 0;\n}\n\nfunction isLeaseRecord(value: unknown): value is DdcLease {\n if (!isRecord(value)) return false;\n return (\n isString(value.guid) &&\n isString(value.desiredKey) &&\n isString(value.attempt) &&\n isNonNegativeInteger(value.generation) &&\n isNonNegativeInteger(value.expectedRevision) &&\n isString(value.instanceId) &&\n typeof value.expiresAt === 'number' &&\n Number.isFinite(value.expiresAt)\n );\n}\n\nfunction isHeadRecord(value: unknown): value is HeadRecord {\n if (!isRecord(value)) return false;\n if (\n !isString(value.guid) ||\n !isString(value.desiredKey) ||\n !isNonNegativeInteger(value.revision)\n ) {\n return false;\n }\n if (value.currentKey !== undefined && !isString(value.currentKey)) return false;\n if (value.lastKnownGoodKey !== undefined && !isString(value.lastKnownGoodKey)) return false;\n if (\n value.generation !== undefined &&\n (!isNonNegativeInteger(value.generation) || value.generation === 0)\n ) {\n return false;\n }\n if (value.active !== undefined && !isLeaseRecord(value.active)) return false;\n if (\n value.supersededAttempts !== undefined &&\n (!Array.isArray(value.supersededAttempts) || !value.supersededAttempts.every(isString))\n ) {\n return false;\n }\n if (value.stale !== undefined && typeof value.stale !== 'boolean') return false;\n if (value.empty !== undefined && typeof value.empty !== 'boolean') return false;\n if (value.failure !== undefined) {\n if (!isRecord(value.failure)) return false;\n if (\n !isString(value.failure.desiredKey) ||\n !isString(value.failure.code) ||\n !isString(value.failure.detail)\n ) {\n return false;\n }\n }\n return true;\n}\n\nfunction malformedHeadError(\n actual: 'syntax-invalid' | 'schema-invalid' | 'unreadable',\n): DdcStoreError {\n const detail =\n actual === 'syntax-invalid'\n ? 'DDC head JSON is syntactically invalid'\n : actual === 'schema-invalid'\n ? 'DDC head record does not match the lifecycle schema'\n : 'DDC head file is not readable';\n return new DdcStoreError({\n code: 'ddc-head-conflict',\n detail,\n expected: 'a valid DDC head record',\n actual,\n hint: 'inspect the current head and retry with a fresh revision',\n owner: 'engine-ddc',\n rootKind: 'project-ddc',\n recoveryActions: [\n { kind: 'inspect', executable: true },\n { kind: 'retry', executable: true },\n ],\n });\n}\n\n/** Cross-process mkdir lock; a lock owned by a dead PID is reclaimable. */\nexport async function withDdcLock<T>(\n root: string,\n name: string,\n operation: () => Promise<T>,\n): Promise<T> {\n const path = lockFile(root, name);\n await mkdir(join(root, 'locks'), { recursive: true });\n const deadline = Date.now() + LOCK_TIMEOUT_MS;\n while (true) {\n try {\n await mkdir(path);\n await writeFile(\n join(path, 'owner.json'),\n JSON.stringify({ pid: process.pid, acquiredAt: Date.now() }),\n );\n try {\n return await operation();\n } finally {\n await rm(path, { recursive: true, force: true });\n }\n } catch (error) {\n if ((error as { code?: string }).code !== 'EEXIST') throw error;\n let ownerPid: number | undefined;\n try {\n ownerPid = (\n JSON.parse(await readFile(join(path, 'owner.json'), 'utf8')) as { pid?: number }\n ).pid;\n } catch {\n ownerPid = undefined;\n }\n // mkdir() publishes the lock directory before the owner record can be\n // written. Treat that short publication window as an in-flight lock,\n // not as a dead owner: reclaiming it here lets two processes enter the\n // same critical section and loses the superseded-attempt fence.\n if (ownerPid === undefined) {\n if (Date.now() >= deadline) {\n throw new DdcStoreError({\n code: 'ddc-lease-expired',\n detail: `DDC lock ${name} did not publish an owner record`,\n hint: 'inspect the lock owner and retry after the incomplete instance exits',\n expected: 'a lock owner record',\n actual: { path },\n rootKind: 'project-ddc',\n });\n }\n await delay(LOCK_WAIT_MS);\n continue;\n }\n let alive = false;\n try {\n process.kill(ownerPid, 0);\n alive = true;\n } catch {\n alive = false;\n }\n if (!alive) {\n await rm(path, { recursive: true, force: true });\n continue;\n }\n if (Date.now() >= deadline) {\n throw new DdcStoreError({\n code: 'ddc-lease-expired',\n detail: `DDC lock ${name} remained owned by process ${ownerPid}`,\n hint: 'inspect the owner and retry after the stale instance exits',\n expected: 'an available project lock',\n actual: { ownerPid },\n rootKind: 'project-ddc',\n lease: String(ownerPid),\n });\n }\n await delay(LOCK_WAIT_MS);\n }\n }\n}\n\nexport class DdcLifecycle {\n private readonly heads: string;\n private readonly entries: DdcEntryStore;\n private readonly root: string;\n private readonly leaseTtlMs: number;\n\n public constructor(root: string, options?: { readonly leaseTtlMs?: number }) {\n this.root = root;\n this.heads = join(root, 'heads');\n this.entries = new DdcEntryStore(root);\n this.leaseTtlMs = options?.leaseTtlMs ?? LEASE_TTL_MS;\n }\n\n public async inspect(guid: string, desiredKey: string): Promise<DdcHead> {\n const record = await this.read(guid);\n return this.projectHead(guid, desiredKey, record);\n }\n\n /** Begin a lease and capture the accepted rollback snapshot under one head lock. */\n public async beginWithSnapshot(guid: string, desiredKey: string): Promise<DdcBeginResult> {\n return withDdcLock(this.root, `head-${guid}`, async () => {\n const previous = await this.read(guid);\n const previousHead = await this.projectHead(guid, desiredKey, previous, false);\n const generation = await this.allocateGeneration(previous?.generation ?? 0);\n const lease: DdcLease = {\n guid,\n desiredKey,\n attempt: randomUUID(),\n generation,\n expectedRevision: previous?.revision ?? 0,\n instanceId: `${process.pid}:${randomUUID()}`,\n expiresAt: Date.now() + this.leaseTtlMs,\n };\n const lastKnownGoodKey =\n previous?.currentKey !== undefined && previous.currentKey !== desiredKey\n ? previous.currentKey\n : previous?.lastKnownGoodKey;\n const supersededAttempts = [\n ...(previous?.supersededAttempts ?? []),\n ...(previous?.active === undefined ? [] : [previous.active.attempt]),\n ];\n await this.write({\n guid,\n desiredKey,\n revision: previous?.revision ?? 0,\n generation,\n active: lease,\n ...(previous?.currentKey === undefined ? {} : { currentKey: previous.currentKey }),\n ...(supersededAttempts.length === 0 ? {} : { supersededAttempts }),\n ...(lastKnownGoodKey === undefined ? {} : { lastKnownGoodKey }),\n });\n return { lease, previousHead };\n });\n }\n\n public async begin(guid: string, desiredKey: string): Promise<DdcLease> {\n return (await this.beginWithSnapshot(guid, desiredKey)).lease;\n }\n\n public async commit(lease: DdcLease, validatedKey: string): Promise<DdcCommitResult> {\n return withDdcLock(this.root, `head-${lease.guid}`, async () => {\n const current = await this.read(lease.guid);\n const active = current?.active;\n if (current === null || active === undefined || active.attempt !== lease.attempt) {\n if (current?.supersededAttempts?.includes(lease.attempt)) {\n await this.write({ ...current, stale: true });\n return withRevision({ result: 'stale', key: validatedKey }, current.revision);\n }\n return withRevision({ result: 'lease-lost', key: validatedKey }, current?.revision ?? 0);\n }\n // The persisted active lease is the authority. The caller may still hold\n // an older token while a session heartbeat has already refreshed the\n // same attempt in the head.\n if (Date.now() > active.expiresAt) {\n throw new DdcStoreError({\n code: 'ddc-lease-expired',\n detail: 'cook lease expired before commit fencing',\n expected: { attempt: lease.attempt, revision: lease.expectedRevision },\n actual: { revision: current.revision },\n owner: 'engine-ddc',\n rootKind: 'project-ddc',\n generation: lease.generation,\n lease: lease.attempt,\n revision: current.revision,\n });\n }\n if (\n current.revision !== lease.expectedRevision ||\n current.desiredKey !== lease.desiredKey ||\n validatedKey !== lease.desiredKey\n ) {\n await this.write({ ...current, stale: true });\n return withRevision({ result: 'stale', key: validatedKey }, current.revision);\n }\n const entry = await this.entries.read(validatedKey);\n if (entry === null || entry.guid !== lease.guid || entry.receipt.key !== validatedKey) {\n const nextRevision = current.revision + 1;\n const failure = {\n desiredKey: lease.desiredKey,\n code: 'entry-invalid',\n detail: 'validated DDC key has no readable entry for this asset',\n };\n await this.write({\n guid: lease.guid,\n desiredKey: lease.desiredKey,\n revision: nextRevision,\n generation: lease.generation,\n ...(current.lastKnownGoodKey === undefined\n ? {}\n : { lastKnownGoodKey: current.lastKnownGoodKey }),\n ...(current.supersededAttempts === undefined\n ? {}\n : { supersededAttempts: current.supersededAttempts }),\n failure,\n });\n return withRevision({ result: 'invalid', key: validatedKey }, nextRevision, {\n attempt: lease.attempt,\n generation: lease.generation,\n revision: nextRevision,\n desiredKey: lease.desiredKey,\n outcome: 'invalid',\n ...(current.lastKnownGoodKey === undefined\n ? {}\n : { lastKnownGoodKey: current.lastKnownGoodKey }),\n failure: { code: failure.code, detail: failure.detail },\n });\n }\n const lastKnownGoodKey =\n current.currentKey !== undefined && current.currentKey !== validatedKey\n ? current.currentKey\n : current.lastKnownGoodKey;\n const nextRevision = current.revision + 1;\n await this.write({\n guid: lease.guid,\n desiredKey: lease.desiredKey,\n revision: nextRevision,\n generation: lease.generation,\n currentKey: validatedKey,\n stale: false,\n ...(current.supersededAttempts === undefined\n ? {}\n : { supersededAttempts: current.supersededAttempts }),\n ...(lastKnownGoodKey === undefined ? {} : { lastKnownGoodKey }),\n });\n return withRevision({ result: 'current', key: validatedKey }, nextRevision, {\n attempt: lease.attempt,\n generation: lease.generation,\n revision: nextRevision,\n desiredKey: lease.desiredKey,\n outcome: 'current',\n key: validatedKey,\n currentKey: validatedKey,\n ...(lastKnownGoodKey === undefined ? {} : { lastKnownGoodKey }),\n });\n });\n }\n\n public async fail(\n lease: DdcLease,\n failure: { readonly code: string; readonly detail: string },\n ): Promise<DdcRestoreFence | undefined> {\n return withDdcLock(this.root, `head-${lease.guid}`, async () => {\n const current = await this.read(lease.guid);\n if (current?.active?.attempt !== lease.attempt) return;\n const nextRevision = current.revision + 1;\n await this.write({\n guid: lease.guid,\n desiredKey: lease.desiredKey,\n revision: nextRevision,\n generation: lease.generation,\n ...(current.currentKey === undefined ? {} : { currentKey: current.currentKey }),\n ...(current.lastKnownGoodKey === undefined\n ? {}\n : { lastKnownGoodKey: current.lastKnownGoodKey }),\n ...(current.supersededAttempts === undefined\n ? {}\n : { supersededAttempts: current.supersededAttempts }),\n failure: { desiredKey: lease.desiredKey, ...failure },\n });\n return {\n attempt: lease.attempt,\n generation: lease.generation,\n revision: nextRevision,\n desiredKey: lease.desiredKey,\n outcome: 'failed' as const,\n ...(current.currentKey === undefined ? {} : { currentKey: current.currentKey }),\n ...(current.lastKnownGoodKey === undefined\n ? {}\n : { lastKnownGoodKey: current.lastKnownGoodKey }),\n failure,\n };\n });\n }\n\n public async heartbeat(lease: DdcLease): Promise<DdcLease> {\n return withDdcLock(this.root, `head-${lease.guid}`, async () => {\n const current = await this.read(lease.guid);\n if (current?.active?.attempt !== lease.attempt) {\n throw new DdcStoreError({\n code: 'ddc-lease-expired',\n detail: 'heartbeat belongs to a stale lease',\n expected: lease.attempt,\n actual: current?.active?.attempt,\n lease: lease.attempt,\n generation: lease.generation,\n rootKind: 'project-ddc',\n });\n }\n const refreshed = { ...lease, expiresAt: Date.now() + this.leaseTtlMs };\n await this.write({ ...current, active: refreshed });\n return refreshed;\n });\n }\n\n public async close(lease: DdcLease): Promise<void> {\n await withDdcLock(this.root, `head-${lease.guid}`, async () => {\n const current = await this.read(lease.guid);\n if (current?.active?.instanceId !== lease.instanceId) return;\n const { active: _active, ...withoutActive } = current;\n await this.write({\n ...withoutActive,\n revision: current.revision + 1,\n stale: current.currentKey === undefined,\n });\n });\n }\n\n public async discard(lease: DdcLease): Promise<void> {\n await withDdcLock(this.root, `head-${lease.guid}`, async () => {\n const current = await this.read(lease.guid);\n if (current?.active?.attempt !== lease.attempt) return;\n const { active: _active, ...withoutActive } = current;\n await this.write({\n ...withoutActive,\n revision: current.revision + 1,\n generation: lease.generation,\n stale: current.currentKey === undefined,\n });\n });\n }\n\n /**\n * Restore accepted content only when this lease still owns the mutable head.\n * A newer active or terminal mutation makes rollback a deliberate no-op.\n */\n public async restore(\n head: DdcHead | DdcRollbackSnapshot,\n lease?: DdcLease,\n fence?: DdcRestoreFence,\n ): Promise<DdcRestoreResult> {\n const inferredLease =\n lease ??\n ('activeLease' in head && head.activeLease !== undefined ? head.activeLease : undefined);\n if (inferredLease === undefined) {\n return {\n result: 'not-owner',\n revision: head.revision ?? 0,\n ...(head.generation === undefined ? {} : { generation: head.generation }),\n };\n }\n const snapshot = this.rollbackSnapshot(head);\n return this.restoreIfCurrent(snapshot, inferredLease, fence);\n }\n\n public async restoreIfCurrent(\n snapshot: DdcRollbackSnapshot,\n lease: DdcLease,\n fence?: DdcRestoreFence,\n ): Promise<DdcRestoreResult> {\n return withDdcLock(this.root, `head-${lease.guid}`, async () => {\n const current = await this.read(lease.guid);\n if (current === null || current.guid !== snapshot.guid) {\n return {\n result: 'not-owner',\n revision: current?.revision ?? 0,\n ...(current?.generation === undefined ? {} : { generation: current.generation }),\n };\n }\n const ownsActive =\n current.active?.attempt === lease.attempt &&\n current.active.generation === lease.generation &&\n current.active.desiredKey === lease.desiredKey;\n const ownsTerminal = fence !== undefined && this.matchesRestoreFence(current, lease, fence);\n if (!ownsActive && !ownsTerminal) {\n return {\n result: 'not-owner',\n revision: current.revision,\n ...(current.generation === undefined ? {} : { generation: current.generation }),\n };\n }\n\n const nextRevision = current.revision + 1;\n const generation = Math.max(\n current.generation ?? 0,\n lease.generation,\n snapshot.generation ?? 0,\n );\n const supersededAttempts = current.supersededAttempts;\n const restored: HeadRecord = {\n guid: snapshot.guid,\n desiredKey: snapshot.desiredKey,\n revision: nextRevision,\n generation,\n ...(snapshot.currentKey === undefined ? {} : { currentKey: snapshot.currentKey }),\n ...(snapshot.lastKnownGoodKey === undefined\n ? {}\n : { lastKnownGoodKey: snapshot.lastKnownGoodKey }),\n ...(supersededAttempts === undefined ? {} : { supersededAttempts }),\n ...(snapshot.state === 'missing' ? { empty: true } : {}),\n ...(snapshot.state === 'stale' ? { stale: true } : {}),\n ...(snapshot.failure === undefined\n ? {}\n : { failure: { desiredKey: snapshot.desiredKey, ...snapshot.failure } }),\n };\n await this.write(restored);\n return { result: 'restored', revision: nextRevision, generation };\n });\n }\n\n public async revoke(lease: DdcLease): Promise<void> {\n await this.fail(lease, {\n code: 'lease-lost',\n detail: 'cook lease was revoked before validation',\n });\n }\n\n public async recover(guid: string, desiredKey: string): Promise<DdcHead> {\n return withDdcLock(this.root, `head-${guid}`, async () => {\n const current = await this.read(guid);\n if (current?.active?.desiredKey === desiredKey) {\n await this.write({\n guid,\n desiredKey,\n revision: current.revision + 1,\n ...(current.generation === undefined ? {} : { generation: current.generation }),\n ...(current.supersededAttempts === undefined\n ? {}\n : { supersededAttempts: current.supersededAttempts }),\n ...(current.lastKnownGoodKey === undefined\n ? {}\n : { lastKnownGoodKey: current.lastKnownGoodKey }),\n failure: {\n desiredKey,\n code: 'writer-crashed',\n detail: 'active cook attempt was recovered after process interruption',\n },\n });\n }\n return this.inspect(guid, desiredKey);\n });\n }\n\n private rollbackSnapshot(head: DdcHead | DdcRollbackSnapshot): DdcRollbackSnapshot {\n const { activeLease: _activeLease, ...snapshot } = head as DdcHead;\n if (snapshot.state !== 'cooking') return snapshot;\n return {\n ...snapshot,\n state: snapshot.currentKey === undefined ? 'missing' : 'stale',\n };\n }\n\n private matchesRestoreFence(\n current: HeadRecord,\n lease: DdcLease,\n fence: DdcRestoreFence,\n ): boolean {\n if (\n fence.attempt !== lease.attempt ||\n fence.generation !== lease.generation ||\n current.active !== undefined ||\n current.revision !== fence.revision ||\n current.generation !== fence.generation ||\n current.desiredKey !== fence.desiredKey ||\n current.currentKey !== fence.currentKey ||\n current.lastKnownGoodKey !== fence.lastKnownGoodKey\n ) {\n return false;\n }\n if (fence.outcome === 'current') {\n return (\n fence.key !== undefined &&\n current.currentKey === fence.key &&\n current.failure === undefined &&\n current.stale !== true\n );\n }\n if (\n fence.failure === undefined ||\n current.failure === undefined ||\n current.failure.desiredKey !== fence.desiredKey ||\n current.failure.code !== fence.failure.code ||\n current.failure.detail !== fence.failure.detail\n ) {\n return false;\n }\n return fence.outcome === 'invalid' ? fence.currentKey === undefined : true;\n }\n\n private async projectHead(\n guid: string,\n desiredKey: string,\n record: HeadRecord | null,\n includeActive = true,\n ): Promise<DdcHead> {\n if (record === null) {\n return {\n guid,\n desiredKey,\n state: 'missing',\n currentKey: undefined,\n lastKnownGoodKey: undefined,\n revision: 0,\n };\n }\n const recordedFailure =\n record.failure?.desiredKey === desiredKey\n ? { code: record.failure.code, detail: record.failure.detail }\n : undefined;\n const currentEntry =\n record.currentKey === undefined ? null : await this.entries.readChecked(record.currentKey);\n const entryFailure =\n currentEntry !== null && !currentEntry.ok\n ? { code: currentEntry.error.code, detail: currentEntry.error.detail }\n : undefined;\n const failure = recordedFailure ?? entryFailure;\n const currentValue = currentEntry?.ok === true ? currentEntry.value : null;\n const state: DdcLifecycleState =\n failure !== undefined\n ? 'failed'\n : record.currentKey === desiredKey && currentValue?.guid === guid\n ? 'current'\n : record.stale === true\n ? 'stale'\n : includeActive && record.active?.desiredKey === desiredKey\n ? 'cooking'\n : record.empty === true\n ? 'missing'\n : 'stale';\n return {\n guid,\n desiredKey,\n state,\n currentKey: record.currentKey,\n lastKnownGoodKey: record.lastKnownGoodKey,\n revision: record.revision,\n ...(record.generation === undefined ? {} : { generation: record.generation }),\n ...(includeActive && record.active === undefined\n ? {}\n : includeActive && record.active !== undefined\n ? { activeLease: record.active }\n : {}),\n ...(failure === undefined ? {} : { failure }),\n };\n }\n\n private async allocateGeneration(minimumExclusive = 0): Promise<number> {\n return withDdcLock(this.root, 'generation-counter', async () => {\n const path = join(this.root, 'generations', 'counter.json');\n await mkdir(join(this.root, 'generations'), { recursive: true });\n let next = 1;\n try {\n const record = JSON.parse(await readFile(path, 'utf8')) as GenerationRecord;\n if (\n record.schemaVersion === 'forgeax-ddc-generation/v2' &&\n Number.isSafeInteger(record.next) &&\n record.next >= 1\n )\n next = Math.max(1, record.next);\n } catch {\n // A missing counter is the first allocation, not an implicit legacy fallback.\n }\n const temporary = `${path}.${process.pid}.${randomUUID()}.tmp`;\n next = Math.max(next, minimumExclusive + 1);\n await writeFile(\n temporary,\n JSON.stringify({ schemaVersion: 'forgeax-ddc-generation/v2', next: next + 1 }),\n );\n await rename(temporary, path);\n return next;\n });\n }\n\n private async read(guid: string): Promise<HeadRecord | null> {\n const path = headFile(this.heads, guid);\n let source: string;\n try {\n source = await readFile(path, 'utf8');\n } catch (error) {\n if (\n error !== null &&\n typeof error === 'object' &&\n 'code' in error &&\n (error as { readonly code?: unknown }).code === 'ENOENT'\n ) {\n return null;\n }\n throw malformedHeadError('unreadable');\n }\n let value: unknown;\n try {\n value = JSON.parse(source);\n } catch {\n throw malformedHeadError('syntax-invalid');\n }\n if (!isHeadRecord(value) || value.guid !== guid) throw malformedHeadError('schema-invalid');\n return value;\n }\n\n private async write(record: HeadRecord): Promise<void> {\n await mkdir(this.heads, { recursive: true });\n const path = headFile(this.heads, record.guid);\n const temporary = `${path}.${randomUUID()}.tmp`;\n await writeFile(temporary, JSON.stringify(record));\n await rename(temporary, path);\n }\n}\n","import { readdir, rm } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport { withDdcLock } from './lifecycle.js';\n\nexport interface DdcGcInput {\n readonly currentKeys: readonly string[];\n readonly lastKnownGoodKeys: readonly string[];\n readonly activeLeaseKeys: readonly string[];\n readonly scopeIds?: readonly string[];\n}\n\nexport interface DdcGcResult {\n readonly deleted: readonly string[];\n readonly protected: readonly string[];\n}\n\n/** Mark current/LKG/lease roots, then sweep only the same project root. */\nexport async function collectDdcGarbage(root: string, input: DdcGcInput): Promise<DdcGcResult> {\n return withDdcLock(root, 'gc', async () => {\n const protectedKeys = new Set([\n ...input.currentKeys,\n ...input.lastKnownGoodKeys,\n ...input.activeLeaseKeys,\n ]);\n const entries = await readdir(join(root, 'entries'), { withFileTypes: true }).catch(() => []);\n const deleted: string[] = [];\n for (const entry of entries) {\n if (!entry.isDirectory() || protectedKeys.has(entry.name)) continue;\n await rm(join(root, 'entries', entry.name), { recursive: true, force: false });\n deleted.push(entry.name);\n }\n return { deleted, protected: [...protectedKeys].sort() };\n });\n}\n","import { isAbsolute, normalize } from 'node:path';\n\nexport const DDC_LAYOUT_VERSION = 'v2' as const;\n\nexport interface DdcBuildOptions {\n readonly buildCacheRoot: string;\n}\n\nexport interface DdcServeOptions extends DdcBuildOptions {\n readonly projectDdcRoot?: string;\n}\n\nexport interface DdcBuildLayout {\n readonly objects: string;\n readonly staging: string;\n}\n\nexport interface DdcProjectLayout {\n readonly root: string;\n readonly scope: string;\n readonly heads: string;\n readonly generations: string;\n readonly leases: string;\n readonly staging: string;\n}\n\nexport interface DdcLayout {\n readonly version: typeof DDC_LAYOUT_VERSION;\n readonly buildCacheRoot: string;\n readonly projectDdcRoot: string;\n readonly build: DdcBuildLayout;\n readonly project: DdcProjectLayout;\n}\n\nexport interface DdcBuildLayoutResult {\n readonly ok: true;\n readonly value: DdcBuildLayout;\n}\n\nexport interface DdcLayoutError {\n readonly code: 'ddc-project-root-required' | 'ddc-root-absolute-required';\n readonly detail: string;\n readonly hint: string;\n readonly expected: string;\n readonly actual?: string;\n}\n\nexport interface DdcLayoutResult {\n readonly ok: true;\n readonly value: DdcLayout;\n}\n\nexport interface DdcLayoutFailure {\n readonly ok: false;\n readonly error: DdcLayoutError;\n}\n\ntype ClosedLayoutResult = DdcLayoutResult | DdcLayoutFailure;\n\nfunction rootOrError(root: string, name: string): string | DdcLayoutError {\n if (!isAbsolute(root)) {\n return {\n code: 'ddc-root-absolute-required',\n detail: `${name} must be an absolute injected path`,\n hint: `inject the canonical ${name} from the host root policy`,\n expected: 'an absolute filesystem path',\n actual: root,\n };\n }\n const normalized = normalize(root);\n return normalized.replace(/[\\\\/]+$/, '') || normalized;\n}\n\nfunction buildLayout(root: string): DdcBuildLayout {\n return { objects: `${root}/objects`, staging: `${root}/staging` };\n}\n\nfunction projectLayout(root: string): DdcProjectLayout {\n return {\n root,\n scope: `${root}/scope.json`,\n heads: `${root}/heads`,\n generations: `${root}/generations`,\n leases: `${root}/leases`,\n staging: `${root}/staging`,\n };\n}\n\nexport function resolveBuildDdcLayout(\n options: DdcBuildOptions,\n): DdcBuildLayoutResult | DdcLayoutFailure {\n const root = rootOrError(options.buildCacheRoot, 'buildCacheRoot');\n return typeof root === 'string'\n ? { ok: true, value: buildLayout(root) }\n : { ok: false, error: root };\n}\n\nexport function resolveDdcLayout(options: DdcServeOptions): ClosedLayoutResult {\n const buildRoot = rootOrError(options.buildCacheRoot, 'buildCacheRoot');\n if (typeof buildRoot !== 'string') return { ok: false, error: buildRoot };\n if (options.projectDdcRoot === undefined || options.projectDdcRoot.trim().length === 0) {\n return {\n ok: false,\n error: {\n code: 'ddc-project-root-required',\n detail: 'serve and publication require an explicitly injected projectDdcRoot',\n hint: 'canonicalize the game directory in the host and inject its .forgeax/ddc/v2 root',\n expected: 'projectDdcRoot',\n },\n };\n }\n const projectRoot = rootOrError(options.projectDdcRoot, 'projectDdcRoot');\n if (typeof projectRoot !== 'string') return { ok: false, error: projectRoot };\n return {\n ok: true,\n value: {\n version: DDC_LAYOUT_VERSION,\n buildCacheRoot: buildRoot,\n projectDdcRoot: projectRoot,\n build: buildLayout(buildRoot),\n project: projectLayout(projectRoot),\n },\n };\n}\n\nexport function isDdcLayout(value: unknown): value is DdcLayout {\n return (\n value !== null &&\n typeof value === 'object' &&\n (value as { readonly version?: unknown }).version === DDC_LAYOUT_VERSION\n );\n}\n","import { createHash } from 'node:crypto';\nimport type {\n AssetPublicationEnvelope,\n AssetPublicationExternalEvidence,\n AssetPublicationFailure,\n AssetPublicationLocator,\n AssetPublicationOutput,\n AssetPublicationRecovery,\n Result,\n} from '@forgeax/engine-types';\nimport { err, ok } from '@forgeax/engine-types';\n\nexport interface ScriptablePackPublicationSnapshot {\n readonly current?: AssetPublicationEnvelope;\n readonly lastKnownGood?: AssetPublicationEnvelope;\n readonly failure?: AssetPublicationFailure;\n}\n\nexport interface ScriptablePackPublicationError extends AssetPublicationFailure {\n readonly recovery: AssetPublicationRecovery;\n readonly current?: AssetPublicationLocator;\n readonly lastKnownGood?: AssetPublicationLocator;\n}\n\nexport interface AcceptedPublicationCandidate {\n readonly envelope: AssetPublicationEnvelope;\n readonly cancelled?: boolean;\n}\n\nexport interface ScriptablePackPublicationBuildInput {\n readonly sourcePath: string;\n readonly sourceRevision: string;\n /** Optional caller generation; the DDC owner derives one when omitted. */\n readonly generation?: number;\n readonly digest: string;\n readonly packageUrl: string;\n readonly inputFingerprint: string;\n readonly outputs: readonly AssetPublicationOutput[];\n readonly externalEvidence: readonly AssetPublicationExternalEvidence[];\n}\n\n/**\n * DDC-owned publication authority for source keyed producers. Transport\n * adapters may stage bytes, but they do not retain current/LKG or generation\n * state themselves.\n */\nexport interface AcceptedPublicationStore {\n observe(sourcePath: string): ScriptablePackPublicationSnapshot;\n stage(\n sourcePath: string,\n candidate: AcceptedPublicationCandidate,\n ): Result<void, ScriptablePackPublicationError>;\n commit(\n sourcePath: string,\n candidate: AcceptedPublicationCandidate,\n commitRoute: () => Promise<void> | void,\n ): Promise<Result<ScriptablePackPublicationSnapshot, ScriptablePackPublicationError>>;\n discard(sourcePath: string, candidate: AssetPublicationEnvelope): void;\n restore(sourcePath: string, snapshot: ScriptablePackPublicationSnapshot): void;\n}\n\nfunction stable(value: unknown): string {\n if (Array.isArray(value)) return `[${value.map(stable).join(',')}]`;\n if (value !== null && typeof value === 'object') {\n const record = value as Record<string, unknown>;\n return `{${Object.keys(record)\n .sort()\n .map((key) => `${JSON.stringify(key)}:${stable(record[key])}`)\n .join(',')}}`;\n }\n return JSON.stringify(value) ?? 'null';\n}\n\nfunction digest(value: unknown): string {\n return `sha256:${createHash('sha256').update(stable(value)).digest('hex')}`;\n}\n\nexport function scriptablePackOutputSetDigest(outputs: readonly AssetPublicationOutput[]): string {\n return digest(\n outputs.map((output) => ({\n guid: output.guid.toLowerCase(),\n sourceKey: output.sourceKey,\n kind: output.kind,\n digest: output.digest,\n refs: [...output.refs].map((guid) => guid.toLowerCase()),\n })),\n );\n}\n\n/** Derive a stable positive generation from the accepted publication tuple. */\nexport function scriptablePackPublicationGeneration(input: {\n readonly sourceRevision: string;\n readonly digest: string;\n readonly outputSetDigest: string;\n}): number {\n const hash = createHash('sha256')\n .update(input.sourceRevision)\n .update('\\n')\n .update(input.digest)\n .update('\\n')\n .update(input.outputSetDigest)\n .digest('hex');\n const generation = Number.parseInt(hash.slice(0, 8), 16);\n return generation > 0 ? generation : 1;\n}\n\n/** Build the complete producer-owned tuple after the package route is finalized. */\nexport function createAcceptedPublication(\n input: ScriptablePackPublicationBuildInput,\n): AssetPublicationEnvelope {\n const outputSetDigest = scriptablePackOutputSetDigest(input.outputs);\n const publicationGeneration =\n input.generation ??\n scriptablePackPublicationGeneration({\n sourceRevision: input.sourceRevision,\n digest: input.digest,\n outputSetDigest,\n });\n return {\n schemaVersion: 'asset-publication/1',\n sourcePath: input.sourcePath,\n sourceRevision: input.sourceRevision,\n generation: publicationGeneration,\n digest: input.digest,\n outputSetDigest,\n outputs: input.outputs,\n receipt: {\n schemaVersion: 'asset-publication-receipt/1',\n sourcePath: input.sourcePath,\n sourceRevision: input.sourceRevision,\n inputFingerprint: input.inputFingerprint,\n outputDigest: input.digest,\n outputSetDigest,\n externalEvidence: input.externalEvidence,\n },\n externalEvidence: input.externalEvidence,\n current: {\n generation: publicationGeneration,\n digest: input.digest,\n outputSetDigest,\n packageUrl: input.packageUrl,\n receiptKey: input.inputFingerprint,\n },\n };\n}\n\nfunction locatorFor(envelope: AssetPublicationEnvelope): AssetPublicationLocator {\n return {\n generation: envelope.generation,\n digest: envelope.digest,\n outputSetDigest: envelope.outputSetDigest,\n packageUrl: envelope.current?.packageUrl ?? '',\n receiptKey: envelope.receipt.inputFingerprint,\n };\n}\n\nfunction recoveryFor(retryable: boolean, useLastKnownGood: boolean): AssetPublicationRecovery {\n return {\n retryable,\n preserveCurrent: true,\n useLastKnownGood,\n actions: retryable\n ? ['inspect-publication-failure', 'retry-rebuild', 'continue-last-known-good']\n : ['inspect-publication-failure', 'edit-source', 'continue-last-known-good'],\n };\n}\n\nfunction failure(\n envelope: AssetPublicationEnvelope,\n code: string,\n stage: AssetPublicationFailure['stage'],\n reason: string,\n retryable: boolean,\n current: AssetPublicationEnvelope | undefined,\n lastKnownGood: AssetPublicationEnvelope | undefined,\n): ScriptablePackPublicationError {\n return {\n code,\n stage,\n sourcePath: envelope.sourcePath,\n sourceRevision: envelope.sourceRevision,\n generation: envelope.generation,\n reason,\n recovery: recoveryFor(retryable, lastKnownGood !== undefined),\n ...(current === undefined ? {} : { current: locatorFor(current) }),\n ...(lastKnownGood === undefined ? {} : { lastKnownGood: locatorFor(lastKnownGood) }),\n };\n}\n\nfunction validateOutputs(\n envelope: AssetPublicationEnvelope,\n current: AssetPublicationEnvelope | undefined,\n lastKnownGood: AssetPublicationEnvelope | undefined,\n): ScriptablePackPublicationError | undefined {\n const guids = new Set<string>();\n const sourceKeys = new Set<string>();\n for (const output of envelope.outputs) {\n const guid = output.guid.toLowerCase();\n if (guids.has(guid) || sourceKeys.has(output.sourceKey)) {\n return failure(\n envelope,\n 'asset-publication-output-duplicate',\n 'output',\n 'publication output GUIDs and sourceKeys must be unique',\n false,\n current,\n lastKnownGood,\n );\n }\n guids.add(guid);\n sourceKeys.add(output.sourceKey);\n }\n if (\n envelope.outputs.length === 0 ||\n scriptablePackOutputSetDigest(envelope.outputs) !== envelope.outputSetDigest\n ) {\n return failure(\n envelope,\n 'asset-publication-output-set-mismatch',\n 'receipt',\n 'receipt outputSetDigest does not match the complete output tuple',\n false,\n current,\n lastKnownGood,\n );\n }\n return undefined;\n}\n\nfunction validateReceipt(\n envelope: AssetPublicationEnvelope,\n current: AssetPublicationEnvelope | undefined,\n lastKnownGood: AssetPublicationEnvelope | undefined,\n): ScriptablePackPublicationError | undefined {\n const receipt = envelope.receipt;\n if (\n receipt.schemaVersion !== 'asset-publication-receipt/1' ||\n receipt.sourcePath !== envelope.sourcePath ||\n receipt.sourceRevision !== envelope.sourceRevision ||\n receipt.outputSetDigest !== envelope.outputSetDigest ||\n receipt.outputDigest !== envelope.digest ||\n stable(receipt.externalEvidence) !== stable(envelope.externalEvidence)\n ) {\n return failure(\n envelope,\n 'asset-publication-receipt-mismatch',\n 'receipt',\n 'publication receipt does not match the candidate output tuple',\n false,\n current,\n lastKnownGood,\n );\n }\n return undefined;\n}\n\nfunction validateEnvelope(\n envelope: AssetPublicationEnvelope,\n current: AssetPublicationEnvelope | undefined,\n lastKnownGood: AssetPublicationEnvelope | undefined,\n): ScriptablePackPublicationError | undefined {\n if (envelope.schemaVersion !== 'asset-publication/1') {\n return failure(\n envelope,\n 'asset-publication-schema-invalid',\n 'receipt',\n 'publication envelope schemaVersion is not supported',\n false,\n current,\n lastKnownGood,\n );\n }\n if (!Number.isSafeInteger(envelope.generation) || envelope.generation < 1) {\n return failure(\n envelope,\n 'asset-publication-generation-invalid',\n 'receipt',\n 'publication generation must be a positive integer',\n false,\n current,\n lastKnownGood,\n );\n }\n const outputError = validateOutputs(envelope, current, lastKnownGood);\n if (outputError !== undefined) return outputError;\n const receiptError = validateReceipt(envelope, current, lastKnownGood);\n if (receiptError !== undefined) return receiptError;\n // Re-running a deterministic producer (for example a cold cook after a\n // rebuild) can yield the exact same publication tuple. That is an\n // idempotent request, not a late result: rejecting it here makes the\n // editor's retry/cold-cook operation fail even though the published asset is\n // already the requested content. A same-generation tuple with any changed\n // source/digest/output-set fact remains stale and is rejected below.\n const sameTuple =\n current !== undefined &&\n envelope.generation === current.generation &&\n envelope.sourcePath === current.sourcePath &&\n envelope.sourceRevision === current.sourceRevision &&\n envelope.digest === current.digest &&\n envelope.outputSetDigest === current.outputSetDigest;\n if (sameTuple) return undefined;\n if (current !== undefined && envelope.generation <= current.generation) {\n return failure(\n envelope,\n 'asset-publication-stale',\n 'cancelled',\n `candidate generation ${envelope.generation} is not newer than current ${current.generation}`,\n true,\n current,\n lastKnownGood,\n );\n }\n return undefined;\n}\n\ninterface PublicationState {\n snapshot: ScriptablePackPublicationSnapshot;\n /**\n * Staged candidates are owned by their envelope object, not by the\n * publication tuple. Two overlapping generations can legitimately produce\n * the same deterministic tuple; a stale owner's discard must not remove the\n * current owner's candidate before commit.\n */\n readonly staged: Set<AssetPublicationEnvelope>;\n}\n\nfunction validateCandidate(\n state: PublicationState,\n candidate: AcceptedPublicationCandidate,\n cancelledReason: string,\n): ScriptablePackPublicationError | undefined {\n const current = state.snapshot.current;\n const lastKnownGood = state.snapshot.lastKnownGood ?? current;\n if (candidate.cancelled === true) {\n return failure(\n candidate.envelope,\n 'asset-publication-cancelled',\n 'cancelled',\n cancelledReason,\n true,\n current,\n lastKnownGood,\n );\n }\n return validateEnvelope(candidate.envelope, current, lastKnownGood);\n}\n\nasync function publishCandidate(\n state: PublicationState,\n candidate: AcceptedPublicationCandidate,\n commitRoute: () => Promise<void> | void,\n): Promise<Result<ScriptablePackPublicationSnapshot, ScriptablePackPublicationError>> {\n const current = state.snapshot.current;\n const lastKnownGood = state.snapshot.lastKnownGood ?? current;\n const invalid = validateCandidate(\n state,\n candidate,\n 'publication request was cancelled before route commit',\n );\n if (invalid !== undefined) {\n state.snapshot = { ...state.snapshot, failure: invalid };\n return err(invalid);\n }\n try {\n await commitRoute();\n } catch (error) {\n const failed = failure(\n candidate.envelope,\n 'asset-publication-route-failed',\n 'route',\n error instanceof Error ? error.message : String(error),\n true,\n current,\n lastKnownGood,\n );\n state.snapshot = { ...state.snapshot, failure: failed };\n return err(failed);\n }\n const published = {\n ...candidate.envelope,\n current: locatorFor(candidate.envelope),\n ...(current === undefined ? {} : { lastKnownGood: locatorFor(current) }),\n recovery: recoveryFor(false, current !== undefined),\n };\n state.snapshot = {\n current: published,\n ...(current === undefined ? {} : { lastKnownGood: current }),\n };\n return ok(state.snapshot);\n}\n\n/** Create the one DDC publication authority shared by dev attempts. */\nexport function createAcceptedPublicationStore(): AcceptedPublicationStore {\n const states = new Map<string, PublicationState>();\n function stateFor(sourcePath: string): PublicationState {\n const existing = states.get(sourcePath);\n if (existing !== undefined) return existing;\n const created: PublicationState = { snapshot: {}, staged: new Set() };\n states.set(sourcePath, created);\n return created;\n }\n return {\n observe(sourcePath) {\n return stateFor(sourcePath).snapshot;\n },\n stage(sourcePath, candidate) {\n const invalid = validateCandidate(\n stateFor(sourcePath),\n candidate,\n 'publication request was cancelled before DDC commit',\n );\n if (invalid !== undefined) return err(invalid);\n stateFor(sourcePath).staged.add(candidate.envelope);\n return ok(undefined);\n },\n async commit(sourcePath, candidate, commitRoute) {\n const state = stateFor(sourcePath);\n if (!state.staged.has(candidate.envelope)) {\n const current = state.snapshot.current;\n const lastKnownGood = state.snapshot.lastKnownGood ?? current;\n return err(\n failure(\n candidate.envelope,\n 'asset-publication-cancelled',\n 'cancelled',\n 'publication candidate was discarded before DDC commit',\n true,\n current,\n lastKnownGood,\n ),\n );\n }\n const result = await publishCandidate(state, candidate, commitRoute);\n state.staged.delete(candidate.envelope);\n return result;\n },\n discard(sourcePath, candidate) {\n stateFor(sourcePath).staged.delete(candidate);\n },\n restore(sourcePath, snapshot) {\n const state = stateFor(sourcePath);\n state.staged.clear();\n state.snapshot = snapshot;\n },\n };\n}\n","import { createHash } from 'node:crypto';\nimport { mkdir, readFile, rename, writeFile } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport { DdcStoreError } from './errors.js';\n\nexport interface DdcRuntimeScope {\n readonly scopeId: string;\n readonly scopeHash: string;\n readonly root: string;\n readonly metadataPath: string;\n}\n\ninterface ScopeMetadata {\n readonly schemaVersion: 'forgeax-ddc-scope/v2';\n readonly scopeId: string;\n readonly scopeHash: string;\n}\n\nfunction scopeHash(scopeId: string): string {\n return createHash('sha256').update(scopeId, 'utf8').digest('hex');\n}\n\nexport function runtimeScopeHash(scopeId: string): string {\n return scopeHash(scopeId);\n}\n\nexport async function createRuntimeScope(root: string, scopeId: string): Promise<DdcRuntimeScope> {\n if (scopeId.length === 0) {\n throw new DdcStoreError({\n code: 'ddc-scope-mismatch',\n detail: 'runtime scope id must not be empty',\n expected: 'a non-empty original scope id',\n actual: scopeId,\n rootKind: 'project-ddc',\n });\n }\n const hash = scopeHash(scopeId);\n const scopeRoot = join(root, 'scopes', hash);\n const metadataPath = join(scopeRoot, 'scope.json');\n await mkdir(scopeRoot, { recursive: true });\n const expected: ScopeMetadata = {\n schemaVersion: 'forgeax-ddc-scope/v2',\n scopeId,\n scopeHash: hash,\n };\n try {\n const actual = JSON.parse(await readFile(metadataPath, 'utf8')) as Partial<ScopeMetadata>;\n if (\n actual.schemaVersion !== expected.schemaVersion ||\n actual.scopeId !== expected.scopeId ||\n actual.scopeHash !== expected.scopeHash\n ) {\n throw new DdcStoreError({\n code: 'ddc-scope-mismatch',\n detail: 'runtime scope metadata does not match the requested scope',\n expected,\n actual,\n rootKind: 'project-ddc',\n scope: scopeId,\n });\n }\n } catch (error) {\n if (error instanceof DdcStoreError) throw error;\n const temporary = `${metadataPath}.${process.pid}.tmp`;\n await writeFile(temporary, JSON.stringify(expected));\n await rename(temporary, metadataPath);\n }\n return { scopeId, scopeHash: hash, root: scopeRoot, metadataPath };\n}\n\nexport async function assertRuntimeScope(\n root: string,\n scope: Pick<DdcRuntimeScope, 'scopeId' | 'scopeHash'>,\n): Promise<DdcRuntimeScope> {\n const expectedHash = scopeHash(scope.scopeId);\n if (scope.scopeHash !== expectedHash) {\n throw new DdcStoreError({\n code: 'ddc-scope-mismatch',\n detail: 'runtime scope hash does not match the original scope id',\n expected: expectedHash,\n actual: scope.scopeHash,\n rootKind: 'project-ddc',\n scope: scope.scopeId,\n });\n }\n return createRuntimeScope(root, scope.scopeId);\n}\n","import type { DdcEntry, StagedDdcEntry } from './entry-store.js';\nimport { DdcEntryStore } from './entry-store.js';\nimport type {\n DdcCommitResult,\n DdcHead,\n DdcLease,\n DdcRestoreFence,\n DdcRestoreResult,\n DdcRollbackSnapshot,\n} from './lifecycle.js';\nimport { DdcLifecycle } from './lifecycle.js';\n\nexport interface DdcSessionOptions {\n readonly generation: number;\n readonly leaseTtlMs?: number;\n}\n\nexport interface DdcGenerationCandidate {\n readonly generation: number;\n readonly lease: DdcLease;\n readonly previousHead: DdcRollbackSnapshot;\n}\n\nexport interface DdcGenerationEntryCandidate extends DdcGenerationCandidate {\n readonly staged: StagedDdcEntry;\n}\n\nexport interface DdcSessionMetrics {\n readonly hitCount: number;\n readonly missCount: number;\n readonly corruptCount: number;\n readonly writeFailureCount: number;\n}\n\ntype MutableDdcGenerationCandidate = Omit<DdcGenerationCandidate, 'lease'> & {\n lease: DdcLease;\n};\n\ntype MutableDdcGenerationEntryCandidate = Omit<DdcGenerationEntryCandidate, 'lease'> & {\n lease: DdcLease;\n};\n\ntype HeartbeatTimer = ReturnType<typeof setTimeout>;\n\ninterface MutableMetrics {\n hitCount: number;\n missCount: number;\n corruptCount: number;\n writeFailureCount: number;\n}\n\nexport class DdcGenerationSession {\n public readonly generation: number;\n private readonly lifecycle: DdcLifecycle;\n private readonly entries: DdcEntryStore;\n private readonly candidates = new Map<string, MutableDdcGenerationCandidate>();\n private readonly restoreFences = new WeakMap<DdcGenerationCandidate, DdcRestoreFence>();\n private readonly heartbeatTimers = new Map<string, HeartbeatTimer>();\n private readonly counters: MutableMetrics = {\n hitCount: 0,\n missCount: 0,\n corruptCount: 0,\n writeFailureCount: 0,\n };\n private accepting = true;\n\n public constructor(root: string, options: DdcSessionOptions) {\n if (!Number.isSafeInteger(options.generation) || options.generation < 1) {\n throw new TypeError('DDC generation must be a positive safe integer');\n }\n this.generation = options.generation;\n this.lifecycle = new DdcLifecycle(\n root,\n options.leaseTtlMs === undefined ? undefined : { leaseTtlMs: options.leaseTtlMs },\n );\n this.entries = new DdcEntryStore(root);\n }\n\n public async beginCandidate(guid: string, desiredKey: string): Promise<DdcGenerationCandidate> {\n this.assertOpen();\n const { lease, previousHead } = await this.lifecycle.beginWithSnapshot(guid, desiredKey);\n if (previousHead.state === 'current') this.counters.hitCount += 1;\n else this.counters.missCount += 1;\n const candidate: MutableDdcGenerationCandidate = {\n generation: this.generation,\n lease,\n previousHead,\n };\n this.candidates.set(lease.attempt, candidate);\n this.scheduleHeartbeat(candidate);\n return candidate;\n }\n\n public async stageEntry(entry: DdcEntry): Promise<DdcGenerationEntryCandidate> {\n this.assertOpen();\n const candidate = (await this.beginCandidate(\n entry.guid,\n entry.key,\n )) as MutableDdcGenerationCandidate;\n try {\n const staged = await this.entries.stage(entry);\n const entryCandidate: MutableDdcGenerationEntryCandidate = Object.assign(candidate, {\n staged,\n });\n this.candidates.set(candidate.lease.attempt, entryCandidate);\n return entryCandidate;\n } catch (error) {\n const fence = await this.lifecycle.fail(candidate.lease, {\n code: 'ddc-entry-stage-failed',\n detail: error instanceof Error ? error.message : String(error),\n });\n if (fence !== undefined) this.restoreFences.set(candidate, fence);\n this.stopHeartbeat(candidate);\n this.candidates.delete(candidate.lease.attempt);\n this.counters.writeFailureCount += 1;\n throw error;\n }\n }\n\n public async inspect(guid: string, desiredKey: string): Promise<DdcHead> {\n this.assertOpen();\n const head = await this.lifecycle.inspect(guid, desiredKey);\n if (head.state === 'current') this.counters.hitCount += 1;\n else this.counters.missCount += 1;\n return head;\n }\n\n public async commitCandidate(\n candidate: DdcGenerationCandidate,\n validatedKey: string,\n ): Promise<DdcCommitResult> {\n const registered = this.assertCandidate(candidate);\n try {\n const result = await this.lifecycle.commit(registered.lease, validatedKey);\n if (result.restoreFence !== undefined)\n this.restoreFences.set(registered, result.restoreFence);\n if (result.result === 'invalid') this.counters.corruptCount += 1;\n this.stopHeartbeat(registered);\n this.candidates.delete(registered.lease.attempt);\n return result;\n } catch (error) {\n this.stopHeartbeat(registered);\n this.counters.writeFailureCount += 1;\n throw error;\n }\n }\n\n public async commitEntry(\n candidate: DdcGenerationEntryCandidate,\n validatedKey: string,\n ): Promise<DdcCommitResult> {\n const registered = this.assertCandidate(candidate);\n try {\n await this.entries.publish(candidate.staged);\n const result = await this.lifecycle.commit(registered.lease, validatedKey);\n if (result.restoreFence !== undefined)\n this.restoreFences.set(registered, result.restoreFence);\n this.stopHeartbeat(registered);\n this.candidates.delete(registered.lease.attempt);\n return result;\n } catch (error) {\n this.stopHeartbeat(registered);\n const fence = await this.lifecycle.fail(registered.lease, {\n code: 'ddc-entry-publish-failed',\n detail: error instanceof Error ? error.message : String(error),\n });\n if (fence !== undefined) this.restoreFences.set(registered, fence);\n await this.entries.discard(candidate.staged).catch(() => {});\n this.candidates.delete(registered.lease.attempt);\n this.counters.writeFailureCount += 1;\n throw error;\n }\n }\n\n public async discardCandidate(candidate: DdcGenerationCandidate): Promise<void> {\n const registered = this.candidates.get(candidate.lease.attempt);\n if (registered === undefined) return;\n try {\n this.stopHeartbeat(registered);\n await this.lifecycle.discard(registered.lease);\n this.candidates.delete(registered.lease.attempt);\n } catch (error) {\n this.counters.writeFailureCount += 1;\n throw error;\n }\n }\n\n public async discardEntry(candidate: DdcGenerationEntryCandidate): Promise<void> {\n await Promise.all([this.discardCandidate(candidate), this.entries.discard(candidate.staged)]);\n }\n\n public async restoreEntry(candidate: DdcGenerationEntryCandidate): Promise<DdcRestoreResult> {\n const registered = this.candidates.get(candidate.lease.attempt);\n const ownerLease = registered?.lease ?? candidate.lease;\n const fence = this.restoreFences.get(candidate);\n this.stopHeartbeat(ownerLease);\n let result: DdcRestoreResult = {\n result: 'not-owner',\n revision: candidate.previousHead.revision ?? 0,\n ...(candidate.previousHead.generation === undefined\n ? {}\n : { generation: candidate.previousHead.generation }),\n };\n let restoreError: unknown;\n try {\n result = await this.lifecycle.restoreIfCurrent(candidate.previousHead, ownerLease, fence);\n } catch (error) {\n restoreError = error;\n } finally {\n await this.entries.discard(candidate.staged).catch(() => {});\n if (registered !== undefined) {\n this.candidates.delete(registered.lease.attempt);\n }\n }\n if (restoreError !== undefined) throw restoreError;\n return result;\n }\n\n public metrics(): DdcSessionMetrics {\n return { ...this.counters };\n }\n\n public async close(): Promise<void> {\n if (!this.accepting) return;\n this.accepting = false;\n for (const timer of this.heartbeatTimers.values()) clearTimeout(timer);\n this.heartbeatTimers.clear();\n const pending = [...this.candidates.values()];\n for (const candidate of pending) {\n try {\n await this.lifecycle.discard(candidate.lease);\n } catch {\n this.counters.writeFailureCount += 1;\n }\n }\n this.candidates.clear();\n }\n\n private assertOpen(): void {\n if (!this.accepting) throw new Error('DDC generation session is closed');\n }\n\n private assertCandidate(candidate: DdcGenerationCandidate): MutableDdcGenerationCandidate {\n this.assertOpen();\n const registered = this.candidates.get(candidate.lease.attempt);\n if (candidate.generation !== this.generation || registered === undefined) {\n throw new Error('DDC candidate belongs to another generation session');\n }\n return registered;\n }\n\n private scheduleHeartbeat(candidate: MutableDdcGenerationCandidate): void {\n const attempt = candidate.lease.attempt;\n this.stopHeartbeat(candidate);\n const delay = Math.max(1, Math.floor((candidate.lease.expiresAt - Date.now()) / 2));\n const timer = setTimeout(() => {\n this.heartbeatTimers.delete(attempt);\n if (!this.accepting || this.candidates.get(attempt) !== candidate) return;\n void this.lifecycle\n .heartbeat(candidate.lease)\n .then((lease) => {\n if (!this.accepting || this.candidates.get(attempt) !== candidate) return;\n candidate.lease = lease;\n this.scheduleHeartbeat(candidate);\n })\n .catch(() => {\n this.stopHeartbeat(candidate);\n });\n }, delay);\n timer.unref?.();\n this.heartbeatTimers.set(attempt, timer);\n }\n\n private stopHeartbeat(candidate: DdcGenerationCandidate | DdcLease): void {\n const attempt = 'lease' in candidate ? candidate.lease.attempt : candidate.attempt;\n const timer = this.heartbeatTimers.get(attempt);\n if (timer === undefined) return;\n clearTimeout(timer);\n this.heartbeatTimers.delete(attempt);\n }\n}\n","import type { DdcErrorRootKind } from './errors.js';\n\nexport const DDC_STATUS_SCHEMA = 'forgeax-ddc-status/v2' as const;\n\nexport type DdcStatusHealth = 'ready' | 'blocked' | 'missing' | 'stale' | 'failed';\nexport type DdcStatusLayerKind = 'build' | 'project' | 'runtime';\nexport type DdcStatusRootKind = DdcErrorRootKind;\n\nexport interface DdcRecoveryAction {\n readonly kind: 'inspect' | 'allocate-generation' | 'retry' | 'cold-rebuild' | 'prune';\n readonly executable: boolean;\n readonly exactTarget?: string;\n readonly reason?: string;\n}\n\nexport interface DdcStatusLayer {\n readonly kind: DdcStatusLayerKind;\n readonly owner: 'engine-ddc' | 'engine-pack' | 'plugin' | 'runtime';\n readonly rootKind: DdcStatusRootKind;\n readonly scopeId?: string;\n readonly current?: number | string;\n readonly lastKnownGood?: number | string;\n readonly protection: readonly string[];\n readonly actions: readonly DdcRecoveryAction[];\n}\n\nexport interface DdcStatus {\n readonly schemaVersion: typeof DDC_STATUS_SCHEMA;\n readonly health: DdcStatusHealth;\n readonly layers: readonly DdcStatusLayer[];\n readonly gameDir?: string;\n readonly projectDdcRoot?: string;\n}\n\nexport type BrowserDdcRecoveryAction = Omit<DdcRecoveryAction, 'exactTarget'>;\nexport type BrowserDdcStatusLayer = Omit<DdcStatusLayer, 'actions'> & {\n readonly actions: readonly BrowserDdcRecoveryAction[];\n};\nexport type BrowserDdcStatus = Omit<DdcStatus, 'gameDir' | 'projectDdcRoot' | 'layers'> & {\n readonly layers: readonly BrowserDdcStatusLayer[];\n};\n\nexport function serializeDdcStatus(status: DdcStatus): string {\n return JSON.stringify(status);\n}\n\nexport function projectDdcStatusForBrowser(status: DdcStatus): BrowserDdcStatus {\n return {\n schemaVersion: DDC_STATUS_SCHEMA,\n health: status.health,\n layers: status.layers.map((layer) => ({\n ...layer,\n actions: layer.actions.map(({ exactTarget: _exactTarget, ...action }) => action),\n })),\n };\n}\n\nexport const toBrowserDdcStatus = projectDdcStatusForBrowser;\n"]}
|
package/dist/lifecycle.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lifecycle.d.ts","sourceRoot":"","sources":["../src/lifecycle.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"lifecycle.d.ts","sourceRoot":"","sources":["../src/lifecycle.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@forgeax/engine-ddc",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.21",
|
|
4
4
|
"private": false,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -85,7 +85,7 @@
|
|
|
85
85
|
}
|
|
86
86
|
},
|
|
87
87
|
"dependencies": {
|
|
88
|
-
"@forgeax/engine-types": "0.1.
|
|
88
|
+
"@forgeax/engine-types": "0.1.21"
|
|
89
89
|
},
|
|
90
90
|
"devDependencies": {
|
|
91
91
|
"@types/node": "^20.14.0",
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { mkdtemp, readdir, readFile, rm, writeFile } from 'node:fs/promises';
|
|
2
2
|
import { tmpdir } from 'node:os';
|
|
3
3
|
import { join } from 'node:path';
|
|
4
|
-
import { afterEach, describe, expect, it } from 'vitest';
|
|
4
|
+
import { afterEach, describe, expect, it, vi } from 'vitest';
|
|
5
5
|
import { DdcEntryStore, ddcOutputDigest } from '../entry-store.js';
|
|
6
6
|
import { DdcStoreError } from '../errors.js';
|
|
7
7
|
import { DdcLifecycle } from '../lifecycle.js';
|
|
@@ -146,6 +146,32 @@ describe('DDC lifecycle head', () => {
|
|
|
146
146
|
});
|
|
147
147
|
});
|
|
148
148
|
|
|
149
|
+
it('uses a persisted heartbeat expiry with an older lease token', async () => {
|
|
150
|
+
const root = await mkdtemp(join(tmpdir(), 'forgeax-ddc-lifecycle-'));
|
|
151
|
+
roots.push(root);
|
|
152
|
+
const lifecycle = new DdcLifecycle(root, { leaseTtlMs: 100 });
|
|
153
|
+
let now = 1_000;
|
|
154
|
+
const clock = vi.spyOn(Date, 'now').mockImplementation(() => now);
|
|
155
|
+
try {
|
|
156
|
+
const lease = await lifecycle.begin(GUID, KEY_A);
|
|
157
|
+
await writeEntry(root, KEY_A);
|
|
158
|
+
|
|
159
|
+
now = 1_050;
|
|
160
|
+
await expect(lifecycle.heartbeat(lease)).resolves.toMatchObject({ expiresAt: 1_150 });
|
|
161
|
+
|
|
162
|
+
// The original token has expired, but the persisted active lease for the
|
|
163
|
+
// same attempt is still alive after the heartbeat refresh.
|
|
164
|
+
now = 1_101;
|
|
165
|
+
await expect(lifecycle.commit(lease, KEY_A)).resolves.toMatchObject({ result: 'current' });
|
|
166
|
+
|
|
167
|
+
const newer = await lifecycle.begin(GUID, KEY_B);
|
|
168
|
+
await expect(lifecycle.commit(lease, KEY_A)).resolves.toMatchObject({ result: 'lease-lost' });
|
|
169
|
+
await lifecycle.close(newer);
|
|
170
|
+
} finally {
|
|
171
|
+
clock.mockRestore();
|
|
172
|
+
}
|
|
173
|
+
});
|
|
174
|
+
|
|
149
175
|
it('keeps a first cook failure failed without inventing a current or LKG', async () => {
|
|
150
176
|
const root = await mkdtemp(join(tmpdir(), 'forgeax-ddc-lifecycle-'));
|
|
151
177
|
roots.push(root);
|
package/src/lifecycle.ts
CHANGED
|
@@ -340,14 +340,18 @@ export class DdcLifecycle {
|
|
|
340
340
|
public async commit(lease: DdcLease, validatedKey: string): Promise<DdcCommitResult> {
|
|
341
341
|
return withDdcLock(this.root, `head-${lease.guid}`, async () => {
|
|
342
342
|
const current = await this.read(lease.guid);
|
|
343
|
-
|
|
343
|
+
const active = current?.active;
|
|
344
|
+
if (current === null || active === undefined || active.attempt !== lease.attempt) {
|
|
344
345
|
if (current?.supersededAttempts?.includes(lease.attempt)) {
|
|
345
346
|
await this.write({ ...current, stale: true });
|
|
346
347
|
return withRevision({ result: 'stale', key: validatedKey }, current.revision);
|
|
347
348
|
}
|
|
348
349
|
return withRevision({ result: 'lease-lost', key: validatedKey }, current?.revision ?? 0);
|
|
349
350
|
}
|
|
350
|
-
|
|
351
|
+
// The persisted active lease is the authority. The caller may still hold
|
|
352
|
+
// an older token while a session heartbeat has already refreshed the
|
|
353
|
+
// same attempt in the head.
|
|
354
|
+
if (Date.now() > active.expiresAt) {
|
|
351
355
|
throw new DdcStoreError({
|
|
352
356
|
code: 'ddc-lease-expired',
|
|
353
357
|
detail: 'cook lease expired before commit fencing',
|