@cleocode/core 2026.10.4 → 2026.10.5-rc.ci.672
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/bootstrap.d.ts.map +1 -1
- package/dist/bootstrap.js +7 -37
- package/dist/bootstrap.js.map +1 -1
- package/dist/build-provenance.json +2 -2
- package/dist/caamp/adapter.d.ts.map +1 -1
- package/dist/caamp/adapter.js +5 -2
- package/dist/caamp/adapter.js.map +1 -1
- package/dist/changesets/parse-frontmatter.d.ts +1 -1
- package/dist/changesets/parse-frontmatter.d.ts.map +1 -1
- package/dist/changesets/parse-frontmatter.js +2 -1
- package/dist/changesets/parse-frontmatter.js.map +1 -1
- package/dist/changesets/parser.d.ts +1 -1
- package/dist/changesets/parser.d.ts.map +1 -1
- package/dist/changesets/parser.js +2 -1
- package/dist/changesets/parser.js.map +1 -1
- package/dist/changesets/writer.d.ts +8 -1
- package/dist/changesets/writer.d.ts.map +1 -1
- package/dist/changesets/writer.js +56 -5
- package/dist/changesets/writer.js.map +1 -1
- package/dist/cloud/keys.d.ts +9 -0
- package/dist/cloud/keys.d.ts.map +1 -1
- package/dist/cloud/keys.js +11 -0
- package/dist/cloud/keys.js.map +1 -1
- package/dist/cloud/nexus-attach.d.ts +17 -0
- package/dist/cloud/nexus-attach.d.ts.map +1 -1
- package/dist/cloud/nexus-attach.js +30 -9
- package/dist/cloud/nexus-attach.js.map +1 -1
- package/dist/cloud/nexus-auth.d.ts +7 -1
- package/dist/cloud/nexus-auth.d.ts.map +1 -1
- package/dist/cloud/nexus-auth.js +7 -1
- package/dist/cloud/nexus-auth.js.map +1 -1
- package/dist/cloud/nexus-cloud-activity.d.ts.map +1 -1
- package/dist/cloud/nexus-cloud-activity.js +2 -1
- package/dist/cloud/nexus-cloud-activity.js.map +1 -1
- package/dist/cloud/nexus-cloud-conflicts.d.ts +48 -0
- package/dist/cloud/nexus-cloud-conflicts.d.ts.map +1 -0
- package/dist/cloud/nexus-cloud-conflicts.js +68 -0
- package/dist/cloud/nexus-cloud-conflicts.js.map +1 -0
- package/dist/cloud/nexus-cloud-status.d.ts +42 -6
- package/dist/cloud/nexus-cloud-status.d.ts.map +1 -1
- package/dist/cloud/nexus-cloud-status.js +233 -19
- package/dist/cloud/nexus-cloud-status.js.map +1 -1
- package/dist/cloud/nexus-cloud.d.ts +18 -1
- package/dist/cloud/nexus-cloud.d.ts.map +1 -1
- package/dist/cloud/nexus-cloud.js +56 -2
- package/dist/cloud/nexus-cloud.js.map +1 -1
- package/dist/cloud/nexus-credentials.d.ts +1 -1
- package/dist/cloud/nexus-credentials.d.ts.map +1 -1
- package/dist/cloud/nexus-credentials.js +1 -1
- package/dist/cloud/nexus-credentials.js.map +1 -1
- package/dist/cloud/nexus-enrol.d.ts +1 -1
- package/dist/cloud/nexus-enrol.d.ts.map +1 -1
- package/dist/cloud/nexus-enrol.js +2 -1
- package/dist/cloud/nexus-enrol.js.map +1 -1
- package/dist/cloud/nexus-first-run.d.ts +6 -2
- package/dist/cloud/nexus-first-run.d.ts.map +1 -1
- package/dist/cloud/nexus-first-run.js +8 -2
- package/dist/cloud/nexus-first-run.js.map +1 -1
- package/dist/cloud/nexus-link.d.ts +35 -4
- package/dist/cloud/nexus-link.d.ts.map +1 -1
- package/dist/cloud/nexus-link.js +172 -7
- package/dist/cloud/nexus-link.js.map +1 -1
- package/dist/cloud/nexus-presence-refresh.d.ts +65 -0
- package/dist/cloud/nexus-presence-refresh.d.ts.map +1 -0
- package/dist/cloud/nexus-presence-refresh.js +122 -0
- package/dist/cloud/nexus-presence-refresh.js.map +1 -0
- package/dist/cloud/nexus-project-history.d.ts +54 -0
- package/dist/cloud/nexus-project-history.d.ts.map +1 -0
- package/dist/cloud/nexus-project-history.js +108 -0
- package/dist/cloud/nexus-project-history.js.map +1 -0
- package/dist/cloud/nexus-vault-keys.d.ts.map +1 -1
- package/dist/cloud/nexus-vault-keys.js +12 -6
- package/dist/cloud/nexus-vault-keys.js.map +1 -1
- package/dist/cloud/nexus-vault.d.ts +7 -3
- package/dist/cloud/nexus-vault.d.ts.map +1 -1
- package/dist/cloud/nexus-vault.js +176 -29
- package/dist/cloud/nexus-vault.js.map +1 -1
- package/dist/cloud/presence.d.ts +1 -1
- package/dist/cloud/presence.d.ts.map +1 -1
- package/dist/cloud/presence.js +1 -1
- package/dist/cloud/presence.js.map +1 -1
- package/dist/cloud/projects.d.ts +7 -4
- package/dist/cloud/projects.d.ts.map +1 -1
- package/dist/cloud/projects.js +10 -1
- package/dist/cloud/projects.js.map +1 -1
- package/dist/cloud/signing.d.ts +14 -0
- package/dist/cloud/signing.d.ts.map +1 -1
- package/dist/cloud/signing.js +9 -0
- package/dist/cloud/signing.js.map +1 -1
- package/dist/conduit/cloud-endpoint.d.ts +96 -0
- package/dist/conduit/cloud-endpoint.d.ts.map +1 -0
- package/dist/conduit/cloud-endpoint.js +191 -0
- package/dist/conduit/cloud-endpoint.js.map +1 -0
- package/dist/conduit/conduit-client.d.ts.map +1 -1
- package/dist/conduit/conduit-client.js +2 -1
- package/dist/conduit/conduit-client.js.map +1 -1
- package/dist/conduit/factory.d.ts +4 -0
- package/dist/conduit/factory.d.ts.map +1 -1
- package/dist/conduit/factory.js +7 -1
- package/dist/conduit/factory.js.map +1 -1
- package/dist/conduit/http-transport.d.ts +12 -7
- package/dist/conduit/http-transport.d.ts.map +1 -1
- package/dist/conduit/http-transport.js +18 -11
- package/dist/conduit/http-transport.js.map +1 -1
- package/dist/conduit/index.d.ts +3 -1
- package/dist/conduit/index.d.ts.map +1 -1
- package/dist/conduit/index.js +3 -1
- package/dist/conduit/index.js.map +1 -1
- package/dist/conduit/sse-transport.d.ts +5 -1
- package/dist/conduit/sse-transport.d.ts.map +1 -1
- package/dist/conduit/sse-transport.js +10 -2
- package/dist/conduit/sse-transport.js.map +1 -1
- package/dist/config/registry.js +1 -1
- package/dist/config/registry.js.map +1 -1
- package/dist/core-paths.d.ts +13 -0
- package/dist/core-paths.d.ts.map +1 -0
- package/dist/core-paths.js +13 -0
- package/dist/core-paths.js.map +1 -0
- package/dist/decide/bench/source.js +1 -1
- package/dist/decide/bench/source.js.map +1 -1
- package/dist/decide/client.d.ts +1 -1
- package/dist/decide/client.d.ts.map +1 -1
- package/dist/decide/client.js +1 -1
- package/dist/decide/client.js.map +1 -1
- package/dist/decide/credentials.d.ts +1 -1
- package/dist/decide/credentials.d.ts.map +1 -1
- package/dist/decide/credentials.js +1 -1
- package/dist/decide/credentials.js.map +1 -1
- package/dist/decide/jev-wire.d.ts +1 -1
- package/dist/decide/jev-wire.d.ts.map +1 -1
- package/dist/decide/jev-wire.js +1 -1
- package/dist/decide/jev-wire.js.map +1 -1
- package/dist/decide/operations.d.ts +1 -1
- package/dist/decide/operations.d.ts.map +1 -1
- package/dist/decide/operations.js +1 -1
- package/dist/decide/operations.js.map +1 -1
- package/dist/decide/providers.d.ts +1 -1
- package/dist/decide/providers.d.ts.map +1 -1
- package/dist/decide/providers.js +1 -1
- package/dist/decide/providers.js.map +1 -1
- package/dist/decide/wizard.d.ts.map +1 -1
- package/dist/decide/wizard.js +1 -1
- package/dist/decide/wizard.js.map +1 -1
- package/dist/dispatch/config-domain-handler.d.ts +1 -1
- package/dist/dispatch/config-domain-handler.d.ts.map +1 -1
- package/dist/dispatch/config-domain-handler.js +1 -1
- package/dist/dispatch/config-domain-handler.js.map +1 -1
- package/dist/dispatch/contracts/ensures-schema.d.ts +1 -1
- package/dist/dispatch/contracts/ensures-schema.d.ts.map +1 -1
- package/dist/dispatch/contracts/ensures-schema.js +1 -1
- package/dist/dispatch/contracts/ensures-schema.js.map +1 -1
- package/dist/dispatch/contracts/input-contracts.d.ts +1 -1
- package/dist/dispatch/contracts/input-contracts.d.ts.map +1 -1
- package/dist/dispatch/contracts/input-contracts.js +3 -1
- package/dist/dispatch/contracts/input-contracts.js.map +1 -1
- package/dist/dispatch/describe-operation.d.ts +1 -1
- package/dist/dispatch/describe-operation.d.ts.map +1 -1
- package/dist/dispatch/describe-operation.js +1 -1
- package/dist/dispatch/describe-operation.js.map +1 -1
- package/dist/docs/display-alias.js +1 -1
- package/dist/docs/display-alias.js.map +1 -1
- package/dist/docs/docs-update.d.ts +1 -1
- package/dist/docs/docs-update.d.ts.map +1 -1
- package/dist/docs/docs-update.js +2 -1
- package/dist/docs/docs-update.js.map +1 -1
- package/dist/docs/export-document.js +14 -58300
- package/dist/docs/export-document.js.map +3 -3
- package/dist/docs/publish-pr.js +1 -1
- package/dist/docs/publish-pr.js.map +1 -1
- package/dist/docs/supersede.js +1 -1
- package/dist/docs/supersede.js.map +1 -1
- package/dist/docs/validate-body.d.ts +1 -1
- package/dist/docs/validate-body.d.ts.map +1 -1
- package/dist/docs/validate-body.js +1 -1
- package/dist/docs/validate-body.js.map +1 -1
- package/dist/docs/writer-registry.js +1 -1
- package/dist/docs/writer-registry.js.map +1 -1
- package/dist/doctor/acceptance-drift.js +1 -1
- package/dist/doctor/acceptance-drift.js.map +1 -1
- package/dist/doctor/db-substrate.d.ts +1 -1
- package/dist/doctor/db-substrate.d.ts.map +1 -1
- package/dist/doctor/db-substrate.js +1 -1
- package/dist/doctor/db-substrate.js.map +1 -1
- package/dist/doctor/invariant-audit.js +1 -1
- package/dist/doctor/invariant-audit.js.map +1 -1
- package/dist/doctor/malformed-task-ids.js +1 -1
- package/dist/doctor/malformed-task-ids.js.map +1 -1
- package/dist/doctor/row-identity-refill.d.ts +43 -0
- package/dist/doctor/row-identity-refill.d.ts.map +1 -0
- package/dist/doctor/row-identity-refill.js +186 -0
- package/dist/doctor/row-identity-refill.js.map +1 -0
- package/dist/doctor/superseded-store.d.ts.map +1 -1
- package/dist/doctor/superseded-store.js +51 -2
- package/dist/doctor/superseded-store.js.map +1 -1
- package/dist/doctor/sync-repair.d.ts +39 -0
- package/dist/doctor/sync-repair.d.ts.map +1 -0
- package/dist/doctor/sync-repair.js +71 -0
- package/dist/doctor/sync-repair.js.map +1 -0
- package/dist/doctor/sync-triggers.d.ts +63 -4
- package/dist/doctor/sync-triggers.d.ts.map +1 -1
- package/dist/doctor/sync-triggers.js +352 -9
- package/dist/doctor/sync-triggers.js.map +1 -1
- package/dist/doctor/twin-collapse.js +1 -1
- package/dist/doctor/twin-collapse.js.map +1 -1
- package/dist/engine/engine-ops.d.ts.map +1 -1
- package/dist/engine/engine-ops.js +7 -1
- package/dist/engine/engine-ops.js.map +1 -1
- package/dist/engine-result.d.ts +1 -1
- package/dist/engine-result.d.ts.map +1 -1
- package/dist/engine-result.js +1 -1
- package/dist/engine-result.js.map +1 -1
- package/dist/error-registry.d.ts +1 -1
- package/dist/error-registry.d.ts.map +1 -1
- package/dist/error-registry.js +1 -1
- package/dist/error-registry.js.map +1 -1
- package/dist/errors-to-engine.d.ts +20 -0
- package/dist/errors-to-engine.d.ts.map +1 -1
- package/dist/errors-to-engine.js +37 -0
- package/dist/errors-to-engine.js.map +1 -1
- package/dist/gc/janitor.d.ts +23 -4
- package/dist/gc/janitor.d.ts.map +1 -1
- package/dist/gc/janitor.js +71 -11
- package/dist/gc/janitor.js.map +1 -1
- package/dist/goal/continuation.d.ts +1 -1
- package/dist/goal/continuation.d.ts.map +1 -1
- package/dist/goal/continuation.js +1 -1
- package/dist/goal/continuation.js.map +1 -1
- package/dist/goal/judge.d.ts.map +1 -1
- package/dist/goal/judge.js +2 -1
- package/dist/goal/judge.js.map +1 -1
- package/dist/hooks/handlers/session-hooks.d.ts.map +1 -1
- package/dist/hooks/handlers/session-hooks.js +1 -1
- package/dist/hooks/handlers/session-hooks.js.map +1 -1
- package/dist/init/engine-ops.js +1 -1
- package/dist/init/engine-ops.js.map +1 -1
- package/dist/init.d.ts.map +1 -1
- package/dist/init.js +10 -41
- package/dist/init.js.map +1 -1
- package/dist/inject/index.js +1 -1
- package/dist/inject/index.js.map +1 -1
- package/dist/injection.d.ts.map +1 -1
- package/dist/injection.js +13 -0
- package/dist/injection.js.map +1 -1
- package/dist/internal.d.ts +4 -3
- package/dist/internal.d.ts.map +1 -1
- package/dist/internal.js +7 -4
- package/dist/internal.js.map +1 -1
- package/dist/issue/create.js +1 -1
- package/dist/issue/create.js.map +1 -1
- package/dist/json-schema-validator.js +1 -1
- package/dist/json-schema-validator.js.map +1 -1
- package/dist/lifecycle/index.d.ts +2 -23
- package/dist/lifecycle/index.d.ts.map +1 -1
- package/dist/lifecycle/index.js +5 -112
- package/dist/lifecycle/index.js.map +1 -1
- package/dist/lifecycle/kind-requirements.d.ts +1 -1
- package/dist/lifecycle/kind-requirements.d.ts.map +1 -1
- package/dist/lifecycle/kind-requirements.js +1 -1
- package/dist/lifecycle/kind-requirements.js.map +1 -1
- package/dist/lifecycle/pipeline.js +1 -1
- package/dist/lifecycle/pipeline.js.map +1 -1
- package/dist/lifecycle/resume.js +2 -2
- package/dist/lifecycle/resume.js.map +1 -1
- package/dist/lifecycle/state-machine.js +1 -1
- package/dist/lifecycle/state-machine.js.map +1 -1
- package/dist/lifecycle/status.d.ts +46 -0
- package/dist/lifecycle/status.d.ts.map +1 -0
- package/dist/lifecycle/status.js +147 -0
- package/dist/lifecycle/status.js.map +1 -0
- package/dist/lifecycle/verification/satisfies-validator.js +1 -1
- package/dist/lifecycle/verification/satisfies-validator.js.map +1 -1
- package/dist/llm/catalog-seeder.d.ts +1 -1
- package/dist/llm/catalog-seeder.d.ts.map +1 -1
- package/dist/llm/catalog-seeder.js +1 -1
- package/dist/llm/catalog-seeder.js.map +1 -1
- package/dist/llm/cli-ops.d.ts +1 -2
- package/dist/llm/cli-ops.d.ts.map +1 -1
- package/dist/llm/cli-ops.js +2 -1
- package/dist/llm/cli-ops.js.map +1 -1
- package/dist/llm/credential-seeders/claude-code-seeder.js +1 -1
- package/dist/llm/credential-seeders/claude-code-seeder.js.map +1 -1
- package/dist/llm/credential-seeders/cleo-pkce-seeder.js +1 -1
- package/dist/llm/credential-seeders/cleo-pkce-seeder.js.map +1 -1
- package/dist/llm/credential-writeback.js +1 -1
- package/dist/llm/credential-writeback.js.map +1 -1
- package/dist/llm/entity-ops.d.ts +1 -1
- package/dist/llm/entity-ops.d.ts.map +1 -1
- package/dist/llm/entity-ops.js +2 -1
- package/dist/llm/entity-ops.js.map +1 -1
- package/dist/llm/llm-queue-admit.d.ts +1 -1
- package/dist/llm/llm-queue-admit.d.ts.map +1 -1
- package/dist/llm/llm-queue-admit.js +2 -1
- package/dist/llm/llm-queue-admit.js.map +1 -1
- package/dist/llm/onboarding/login-engine.js +1 -1
- package/dist/llm/onboarding/login-engine.js.map +1 -1
- package/dist/llm/pi/pi-errors.d.ts +1 -1
- package/dist/llm/pi/pi-errors.d.ts.map +1 -1
- package/dist/llm/pi/pi-errors.js +1 -1
- package/dist/llm/pi/pi-errors.js.map +1 -1
- package/dist/llm/plugin-facade.d.ts.map +1 -1
- package/dist/llm/plugin-facade.js +14 -93552
- package/dist/llm/plugin-facade.js.map +3 -3
- package/dist/llm/system-key.d.ts +1 -1
- package/dist/llm/system-key.d.ts.map +1 -1
- package/dist/llm/system-key.js +1 -1
- package/dist/llm/system-key.js.map +1 -1
- package/dist/llm/system-of-use-registry.d.ts +1 -1
- package/dist/llm/system-of-use-registry.d.ts.map +1 -1
- package/dist/llm/system-of-use-registry.js +1 -1
- package/dist/llm/system-of-use-registry.js.map +1 -1
- package/dist/llm/system-resolver.js +1 -1
- package/dist/llm/system-resolver.js.map +1 -1
- package/dist/memory/brain-host.d.ts +71 -0
- package/dist/memory/brain-host.d.ts.map +1 -0
- package/dist/memory/brain-host.js +84 -0
- package/dist/memory/brain-host.js.map +1 -0
- package/dist/memory/brain-writer-handlers.d.ts.map +1 -1
- package/dist/memory/brain-writer-handlers.js +24 -7
- package/dist/memory/brain-writer-handlers.js.map +1 -1
- package/dist/memory/brain-writer-thread.d.ts +66 -6
- package/dist/memory/brain-writer-thread.d.ts.map +1 -1
- package/dist/memory/brain-writer-thread.js +67 -10
- package/dist/memory/brain-writer-thread.js.map +1 -1
- package/dist/memory/brain-writer-worker.js +7 -0
- package/dist/memory/brain-writer-worker.js.map +1 -1
- package/dist/memory/decisions.js +2 -1
- package/dist/memory/decisions.js.map +1 -1
- package/dist/memory/embedding-backfill.d.ts +70 -0
- package/dist/memory/embedding-backfill.d.ts.map +1 -0
- package/dist/memory/embedding-backfill.js +110 -0
- package/dist/memory/embedding-backfill.js.map +1 -0
- package/dist/memory/index.js +1 -1
- package/dist/memory/index.js.map +1 -1
- package/dist/memory/manifest-identity.js +1 -1
- package/dist/memory/manifest-identity.js.map +1 -1
- package/dist/memory/retrieval/observe.d.ts +23 -0
- package/dist/memory/retrieval/observe.d.ts.map +1 -1
- package/dist/memory/retrieval/observe.js +82 -36
- package/dist/memory/retrieval/observe.js.map +1 -1
- package/dist/metrics/model-provider-registry.d.ts.map +1 -1
- package/dist/metrics/model-provider-registry.js +6 -0
- package/dist/metrics/model-provider-registry.js.map +1 -1
- package/dist/metrics/token-service.d.ts +17 -0
- package/dist/metrics/token-service.d.ts.map +1 -1
- package/dist/metrics/token-service.js +17 -0
- package/dist/metrics/token-service.js.map +1 -1
- package/dist/migration/index.js +1 -1
- package/dist/migration/index.js.map +1 -1
- package/dist/migration/manual/T10165-backfill-adr-index.js +1 -1
- package/dist/migration/manual/T10165-backfill-adr-index.js.map +1 -1
- package/dist/nexus/assessment-projection.d.ts +1 -1
- package/dist/nexus/assessment-projection.d.ts.map +1 -1
- package/dist/nexus/assessment-projection.js +1 -1
- package/dist/nexus/assessment-projection.js.map +1 -1
- package/dist/nexus/deps.d.ts +1 -1
- package/dist/nexus/deps.d.ts.map +1 -1
- package/dist/nexus/deps.js +1 -1
- package/dist/nexus/deps.js.map +1 -1
- package/dist/nexus/fleet-status.d.ts +1 -1
- package/dist/nexus/fleet-status.d.ts.map +1 -1
- package/dist/nexus/fleet-status.js +1 -1
- package/dist/nexus/fleet-status.js.map +1 -1
- package/dist/nexus/identity.js +1 -1
- package/dist/nexus/identity.js.map +1 -1
- package/dist/nexus/permissions.d.ts +1 -1
- package/dist/nexus/permissions.d.ts.map +1 -1
- package/dist/nexus/permissions.js +1 -1
- package/dist/nexus/permissions.js.map +1 -1
- package/dist/nexus/query-dsl.js +1 -1
- package/dist/nexus/query-dsl.js.map +1 -1
- package/dist/nexus/query.d.ts +1 -2
- package/dist/nexus/query.d.ts.map +1 -1
- package/dist/nexus/query.js +1 -1
- package/dist/nexus/query.js.map +1 -1
- package/dist/nexus/registry-errors.js +1 -1
- package/dist/nexus/registry-errors.js.map +1 -1
- package/dist/nexus/registry.d.ts +1 -1
- package/dist/nexus/registry.d.ts.map +1 -1
- package/dist/nexus/registry.js +1 -1
- package/dist/nexus/registry.js.map +1 -1
- package/dist/nexus/workspace.js +1 -1
- package/dist/nexus/workspace.js.map +1 -1
- package/dist/orchestrate/pivot.d.ts.map +1 -1
- package/dist/orchestrate/pivot.js +2 -1
- package/dist/orchestrate/pivot.js.map +1 -1
- package/dist/orchestrate/query-ops.js +1 -1
- package/dist/orchestrate/query-ops.js.map +1 -1
- package/dist/orchestrate/spawn-ops.js +1 -1
- package/dist/orchestrate/spawn-ops.js.map +1 -1
- package/dist/orchestration/atomicity.d.ts +1 -1
- package/dist/orchestration/atomicity.d.ts.map +1 -1
- package/dist/orchestration/atomicity.js +1 -1
- package/dist/orchestration/atomicity.js.map +1 -1
- package/dist/orchestration/classify.js +1 -1
- package/dist/orchestration/classify.js.map +1 -1
- package/dist/orchestration/index.js +1 -1
- package/dist/orchestration/index.js.map +1 -1
- package/dist/orchestration/parallel.js +1 -1
- package/dist/orchestration/parallel.js.map +1 -1
- package/dist/orchestration/protocol-validators.d.ts +1 -1
- package/dist/orchestration/protocol-validators.d.ts.map +1 -1
- package/dist/orchestration/protocol-validators.js +1 -1
- package/dist/orchestration/protocol-validators.js.map +1 -1
- package/dist/orchestration/skill-ops.js +1 -1
- package/dist/orchestration/skill-ops.js.map +1 -1
- package/dist/orchestration/spawn-prompt.d.ts +9 -0
- package/dist/orchestration/spawn-prompt.d.ts.map +1 -1
- package/dist/orchestration/spawn-prompt.js +13 -2
- package/dist/orchestration/spawn-prompt.js.map +1 -1
- package/dist/orchestration/spawn.js +1 -1
- package/dist/orchestration/spawn.js.map +1 -1
- package/dist/paths.d.ts +3 -1
- package/dist/paths.d.ts.map +1 -1
- package/dist/paths.js +3 -1
- package/dist/paths.js.map +1 -1
- package/dist/phases/deps.js +1 -1
- package/dist/phases/deps.js.map +1 -1
- package/dist/phases/index.js +1 -1
- package/dist/phases/index.js.map +1 -1
- package/dist/project-lifecycle.js +3 -3
- package/dist/project-lifecycle.js.map +1 -1
- package/dist/registrations.d.ts +30 -0
- package/dist/registrations.d.ts.map +1 -0
- package/dist/registrations.js +30 -0
- package/dist/registrations.js.map +1 -0
- package/dist/release/changesets-aggregator.js +1 -1
- package/dist/release/changesets-aggregator.js.map +1 -1
- package/dist/release/ci-evidence.d.ts +68 -2
- package/dist/release/ci-evidence.d.ts.map +1 -1
- package/dist/release/ci-evidence.js +203 -39
- package/dist/release/ci-evidence.js.map +1 -1
- package/dist/release/invariants/archive-reason-invariant.d.ts +1 -1
- package/dist/release/invariants/archive-reason-invariant.d.ts.map +1 -1
- package/dist/release/invariants/archive-reason-invariant.js +1 -1
- package/dist/release/invariants/archive-reason-invariant.js.map +1 -1
- package/dist/release/invariants/registry.d.ts +1 -1
- package/dist/release/invariants/registry.d.ts.map +1 -1
- package/dist/release/invariants/registry.js +1 -1
- package/dist/release/invariants/registry.js.map +1 -1
- package/dist/release/open.d.ts +1 -1
- package/dist/release/open.d.ts.map +1 -1
- package/dist/release/open.js +3 -1
- package/dist/release/open.js.map +1 -1
- package/dist/release/plan.d.ts +1 -2
- package/dist/release/plan.d.ts.map +1 -1
- package/dist/release/plan.js +4 -1
- package/dist/release/plan.js.map +1 -1
- package/dist/release/pr-evidence.d.ts +1 -1
- package/dist/release/pr-evidence.d.ts.map +1 -1
- package/dist/release/pr-evidence.js +2 -2
- package/dist/release/pr-evidence.js.map +1 -1
- package/dist/release/preflight-skip.d.ts +5 -0
- package/dist/release/preflight-skip.d.ts.map +1 -1
- package/dist/release/preflight-skip.js +60 -1
- package/dist/release/preflight-skip.js.map +1 -1
- package/dist/release/reconcile.d.ts +1 -1
- package/dist/release/reconcile.d.ts.map +1 -1
- package/dist/release/reconcile.js +19 -3
- package/dist/release/reconcile.js.map +1 -1
- package/dist/release/version-bump.d.ts +1 -1
- package/dist/release/version-bump.d.ts.map +1 -1
- package/dist/release/version-bump.js +1 -1
- package/dist/release/version-bump.js.map +1 -1
- package/dist/resources/admission-ledger.d.ts +587 -0
- package/dist/resources/admission-ledger.d.ts.map +1 -0
- package/dist/resources/admission-ledger.js +1401 -0
- package/dist/resources/admission-ledger.js.map +1 -0
- package/dist/resources/backend.d.ts +37 -1
- package/dist/resources/backend.d.ts.map +1 -1
- package/dist/resources/backend.js +1 -1
- package/dist/resources/darwin-backend.d.ts +152 -26
- package/dist/resources/darwin-backend.d.ts.map +1 -1
- package/dist/resources/darwin-backend.js +217 -34
- package/dist/resources/darwin-backend.js.map +1 -1
- package/dist/resources/governor.d.ts +36 -39
- package/dist/resources/governor.d.ts.map +1 -1
- package/dist/resources/governor.js +140 -49
- package/dist/resources/governor.js.map +1 -1
- package/dist/resources/pressure-gate.d.ts +148 -0
- package/dist/resources/pressure-gate.d.ts.map +1 -0
- package/dist/resources/pressure-gate.js +273 -0
- package/dist/resources/pressure-gate.js.map +1 -0
- package/dist/resources/run-admission.d.ts +33 -45
- package/dist/resources/run-admission.d.ts.map +1 -1
- package/dist/resources/run-admission.js +50 -118
- package/dist/resources/run-admission.js.map +1 -1
- package/dist/resources/run-class.d.ts +60 -4
- package/dist/resources/run-class.d.ts.map +1 -1
- package/dist/resources/run-class.js +473 -6
- package/dist/resources/run-class.js.map +1 -1
- package/dist/resources/run-governed.d.ts +43 -11
- package/dist/resources/run-governed.d.ts.map +1 -1
- package/dist/resources/run-governed.js +139 -99
- package/dist/resources/run-governed.js.map +1 -1
- package/dist/resources/slot-holder.d.ts +12 -4
- package/dist/resources/slot-holder.d.ts.map +1 -1
- package/dist/resources/slot-holder.js +19 -14
- package/dist/resources/slot-holder.js.map +1 -1
- package/dist/resources/spawn-wrapper.js +1 -1
- package/dist/resources/spawn-wrapper.js.map +1 -1
- package/dist/resources/supervisor-admit.d.ts +1 -1
- package/dist/resources/supervisor-admit.d.ts.map +1 -1
- package/dist/resources/supervisor-admit.js +2 -1
- package/dist/resources/supervisor-admit.js.map +1 -1
- package/dist/runtime/openapi/generate-openapi.d.ts +1 -1
- package/dist/runtime/openapi/generate-openapi.d.ts.map +1 -1
- package/dist/runtime/openapi/generate-openapi.js +1 -1
- package/dist/runtime/openapi/generate-openapi.js.map +1 -1
- package/dist/sagas/index.d.ts +3 -1
- package/dist/sagas/index.d.ts.map +1 -1
- package/dist/sagas/index.js +2 -5
- package/dist/sagas/index.js.map +1 -1
- package/dist/scaffold/project-identity.js +1 -1
- package/dist/scaffold/project-identity.js.map +1 -1
- package/dist/sdk/validator-attest.d.ts +1 -1
- package/dist/sdk/validator-attest.d.ts.map +1 -1
- package/dist/sdk/validator-attest.js +1 -1
- package/dist/sdk/validator-attest.js.map +1 -1
- package/dist/sdk/validator-reject.d.ts +1 -1
- package/dist/sdk/validator-reject.d.ts.map +1 -1
- package/dist/sdk/validator-reject.js +1 -1
- package/dist/sdk/validator-reject.js.map +1 -1
- package/dist/security/input-sanitization.js +2 -1
- package/dist/security/input-sanitization.js.map +1 -1
- package/dist/security/override-cap.js +1 -1
- package/dist/security/override-cap.js.map +1 -1
- package/dist/security/owner-override-auth.js +1 -1
- package/dist/security/owner-override-auth.js.map +1 -1
- package/dist/security/shared-evidence-tracker.js +1 -1
- package/dist/security/shared-evidence-tracker.js.map +1 -1
- package/dist/selfimprove/fix-gen.js +35 -93037
- package/dist/selfimprove/fix-gen.js.map +3 -3
- package/dist/sentient/daemon.d.ts.map +1 -1
- package/dist/sentient/daemon.js +3 -0
- package/dist/sentient/daemon.js.map +1 -1
- package/dist/sentient/tick.d.ts +7 -0
- package/dist/sentient/tick.d.ts.map +1 -1
- package/dist/sentient/tick.js +11 -0
- package/dist/sentient/tick.js.map +1 -1
- package/dist/sequence/index.js +1 -1
- package/dist/sequence/index.js.map +1 -1
- package/dist/session/engine-ops.d.ts +3 -45
- package/dist/session/engine-ops.d.ts.map +1 -1
- package/dist/session/engine-ops.js +63 -112
- package/dist/session/engine-ops.js.map +1 -1
- package/dist/session/status-op.d.ts +40 -0
- package/dist/session/status-op.d.ts.map +1 -0
- package/dist/session/status-op.js +71 -0
- package/dist/session/status-op.js.map +1 -0
- package/dist/session/task-current.d.ts +31 -0
- package/dist/session/task-current.d.ts.map +1 -0
- package/dist/session/task-current.js +59 -0
- package/dist/session/task-current.js.map +1 -0
- package/dist/sessions/assumptions.d.ts +1 -1
- package/dist/sessions/assumptions.d.ts.map +1 -1
- package/dist/sessions/assumptions.js +1 -1
- package/dist/sessions/assumptions.js.map +1 -1
- package/dist/sessions/context-inject.js +1 -1
- package/dist/sessions/context-inject.js.map +1 -1
- package/dist/sessions/decisions.d.ts +1 -1
- package/dist/sessions/decisions.d.ts.map +1 -1
- package/dist/sessions/decisions.js +1 -1
- package/dist/sessions/decisions.js.map +1 -1
- package/dist/sessions/focus-state-store.d.ts.map +1 -1
- package/dist/sessions/focus-state-store.js +2 -1
- package/dist/sessions/focus-state-store.js.map +1 -1
- package/dist/sessions/handoff.js +1 -1
- package/dist/sessions/handoff.js.map +1 -1
- package/dist/sessions/index.d.ts +1 -2
- package/dist/sessions/index.d.ts.map +1 -1
- package/dist/sessions/index.js +3 -2
- package/dist/sessions/index.js.map +1 -1
- package/dist/sessions/session-drift.js +1 -1
- package/dist/sessions/session-drift.js.map +1 -1
- package/dist/sessions/session-end-snapshot-entry.d.ts +4 -0
- package/dist/sessions/session-end-snapshot-entry.d.ts.map +1 -1
- package/dist/sessions/session-end-snapshot-entry.js +11 -0
- package/dist/sessions/session-end-snapshot-entry.js.map +1 -1
- package/dist/sessions/session-end-snapshot.d.ts.map +1 -1
- package/dist/sessions/session-end-snapshot.js +4 -0
- package/dist/sessions/session-end-snapshot.js.map +1 -1
- package/dist/sessions/session-enforcement.js +1 -1
- package/dist/sessions/session-enforcement.js.map +1 -1
- package/dist/sessions/session-show.d.ts +1 -2
- package/dist/sessions/session-show.d.ts.map +1 -1
- package/dist/sessions/session-show.js +1 -1
- package/dist/sessions/session-show.js.map +1 -1
- package/dist/sessions/session-stats.js +1 -1
- package/dist/sessions/session-stats.js.map +1 -1
- package/dist/sessions/session-suspend.d.ts +1 -2
- package/dist/sessions/session-suspend.d.ts.map +1 -1
- package/dist/sessions/session-suspend.js +1 -1
- package/dist/sessions/session-suspend.js.map +1 -1
- package/dist/sessions/session-switch.js +1 -1
- package/dist/sessions/session-switch.js.map +1 -1
- package/dist/sessions/snapshot.js +1 -1
- package/dist/sessions/snapshot.js.map +1 -1
- package/dist/sessions/terminal-identity.d.ts +1 -1
- package/dist/sessions/terminal-identity.d.ts.map +1 -1
- package/dist/sessions/terminal-identity.js +1 -1
- package/dist/sessions/terminal-identity.js.map +1 -1
- package/dist/setup/sections/integrations.d.ts.map +1 -1
- package/dist/setup/sections/integrations.js +9 -0
- package/dist/setup/sections/integrations.js.map +1 -1
- package/dist/setup/sections/models-roles.js +1 -1
- package/dist/setup/sections/models-roles.js.map +1 -1
- package/dist/setup/sections/verification.d.ts.map +1 -1
- package/dist/setup/sections/verification.js +8 -2
- package/dist/setup/sections/verification.js.map +1 -1
- package/dist/shutdown.d.ts +24 -0
- package/dist/shutdown.d.ts.map +1 -1
- package/dist/shutdown.js +30 -1
- package/dist/shutdown.js.map +1 -1
- package/dist/skills/agents/install.d.ts +46 -6
- package/dist/skills/agents/install.d.ts.map +1 -1
- package/dist/skills/agents/install.js +86 -17
- package/dist/skills/agents/install.js.map +1 -1
- package/dist/skills/injection/subagent.js +1 -1
- package/dist/skills/injection/subagent.js.map +1 -1
- package/dist/skills/manifests/research.d.ts.map +1 -1
- package/dist/skills/manifests/research.js +2 -1
- package/dist/skills/manifests/research.js.map +1 -1
- package/dist/skills/orchestrator/spawn.js +1 -1
- package/dist/skills/orchestrator/spawn.js.map +1 -1
- package/dist/skills/orchestrator/validator.js +1 -1
- package/dist/skills/orchestrator/validator.js.map +1 -1
- package/dist/snapshot/index.d.ts.map +1 -1
- package/dist/snapshot/index.js +13 -0
- package/dist/snapshot/index.js.map +1 -1
- package/dist/spawn/agent-identity.js +1 -1
- package/dist/spawn/agent-identity.js.map +1 -1
- package/dist/stats/index.d.ts.map +1 -1
- package/dist/stats/index.js +2 -1
- package/dist/stats/index.js.map +1 -1
- package/dist/store/agent-install.d.ts.map +1 -1
- package/dist/store/agent-install.js +2 -1
- package/dist/store/agent-install.js.map +1 -1
- package/dist/store/agent-registry-accessor.d.ts +1 -0
- package/dist/store/agent-registry-accessor.d.ts.map +1 -1
- package/dist/store/agent-registry-accessor.js +3 -1
- package/dist/store/agent-registry-accessor.js.map +1 -1
- package/dist/store/atomic.js +1 -1
- package/dist/store/atomic.js.map +1 -1
- package/dist/store/attachment-store.js +1 -1
- package/dist/store/attachment-store.js.map +1 -1
- package/dist/store/audit-log-schema.d.ts +645 -0
- package/dist/store/audit-log-schema.d.ts.map +1 -0
- package/dist/store/audit-log-schema.js +30 -0
- package/dist/store/audit-log-schema.js.map +1 -0
- package/dist/store/background-ops.d.ts +26 -0
- package/dist/store/background-ops.d.ts.map +1 -1
- package/dist/store/background-ops.js +46 -0
- package/dist/store/background-ops.js.map +1 -1
- package/dist/store/backup-recover.d.ts +36 -1
- package/dist/store/backup-recover.d.ts.map +1 -1
- package/dist/store/backup-recover.js +99 -1
- package/dist/store/backup-recover.js.map +1 -1
- package/dist/store/backup-verify.d.ts +1 -1
- package/dist/store/backup-verify.d.ts.map +1 -1
- package/dist/store/backup-verify.js +6 -1
- package/dist/store/backup-verify.js.map +1 -1
- package/dist/store/backup.js +1 -1
- package/dist/store/backup.js.map +1 -1
- package/dist/store/conduit-sqlite.d.ts.map +1 -1
- package/dist/store/conduit-sqlite.js +2 -26
- package/dist/store/conduit-sqlite.js.map +1 -1
- package/dist/store/converters.js +1 -1
- package/dist/store/converters.js.map +1 -1
- package/dist/store/db-helpers.js +1 -1
- package/dist/store/db-helpers.js.map +1 -1
- package/dist/store/dependency-cycles.js +1 -1
- package/dist/store/dependency-cycles.js.map +1 -1
- package/dist/store/display-id-alias.d.ts +2 -2
- package/dist/store/display-id-alias.d.ts.map +1 -1
- package/dist/store/display-id-alias.js +5 -28
- package/dist/store/display-id-alias.js.map +1 -1
- package/dist/store/drizzle-node-sqlite.d.ts +56 -0
- package/dist/store/drizzle-node-sqlite.d.ts.map +1 -0
- package/dist/store/drizzle-node-sqlite.js +87 -0
- package/dist/store/drizzle-node-sqlite.js.map +1 -0
- package/dist/store/dual-scope-db.d.ts +26 -33
- package/dist/store/dual-scope-db.d.ts.map +1 -1
- package/dist/store/dual-scope-db.js +416 -127
- package/dist/store/dual-scope-db.js.map +1 -1
- package/dist/store/exodus/abort-events.d.ts +134 -0
- package/dist/store/exodus/abort-events.d.ts.map +1 -1
- package/dist/store/exodus/abort-events.js +201 -0
- package/dist/store/exodus/abort-events.js.map +1 -1
- package/dist/store/exodus/migrate.d.ts +7 -0
- package/dist/store/exodus/migrate.d.ts.map +1 -1
- package/dist/store/exodus/migrate.js +156 -118
- package/dist/store/exodus/migrate.js.map +1 -1
- package/dist/store/exodus/on-open.d.ts +36 -0
- package/dist/store/exodus/on-open.d.ts.map +1 -1
- package/dist/store/exodus/on-open.js +102 -27
- package/dist/store/exodus/on-open.js.map +1 -1
- package/dist/store/exodus/prior-recoveries.d.ts +75 -0
- package/dist/store/exodus/prior-recoveries.d.ts.map +1 -0
- package/dist/store/exodus/prior-recoveries.js +122 -0
- package/dist/store/exodus/prior-recoveries.js.map +1 -0
- package/dist/store/exodus/reconcile.d.ts.map +1 -1
- package/dist/store/exodus/reconcile.js +188 -24
- package/dist/store/exodus/reconcile.js.map +1 -1
- package/dist/store/exodus/runtime-targets.d.ts +3 -3
- package/dist/store/exodus/runtime-targets.js +3 -3
- package/dist/store/exodus/task-id-collision-sql.d.ts +52 -0
- package/dist/store/exodus/task-id-collision-sql.d.ts.map +1 -0
- package/dist/store/exodus/task-id-collision-sql.js +97 -0
- package/dist/store/exodus/task-id-collision-sql.js.map +1 -0
- package/dist/store/exodus/task-id-remap.d.ts +113 -0
- package/dist/store/exodus/task-id-remap.d.ts.map +1 -0
- package/dist/store/exodus/task-id-remap.js +301 -0
- package/dist/store/exodus/task-id-remap.js.map +1 -0
- package/dist/store/exodus/verify-migration.js +1 -1
- package/dist/store/exodus/verify-migration.js.map +1 -1
- package/dist/store/exodus/write-guard.d.ts +136 -0
- package/dist/store/exodus/write-guard.d.ts.map +1 -0
- package/dist/store/exodus/write-guard.js +289 -0
- package/dist/store/exodus/write-guard.js.map +1 -0
- package/dist/store/identity-share.d.ts +31 -0
- package/dist/store/identity-share.d.ts.map +1 -0
- package/dist/store/identity-share.js +54 -0
- package/dist/store/identity-share.js.map +1 -0
- package/dist/store/import-remap.js +1 -1
- package/dist/store/import-remap.js.map +1 -1
- package/dist/store/import-sort.js +1 -1
- package/dist/store/import-sort.js.map +1 -1
- package/dist/store/json.js +1 -1
- package/dist/store/json.js.map +1 -1
- package/dist/store/legacy-tasks-lineage.js +3 -3
- package/dist/store/legacy-tasks-lineage.js.map +1 -1
- package/dist/store/lock.d.ts +17 -0
- package/dist/store/lock.d.ts.map +1 -1
- package/dist/store/lock.js +18 -1
- package/dist/store/lock.js.map +1 -1
- package/dist/store/memory-sqlite.d.ts.map +1 -1
- package/dist/store/memory-sqlite.js +2 -25
- package/dist/store/memory-sqlite.js.map +1 -1
- package/dist/store/migration-files.d.ts +30 -0
- package/dist/store/migration-files.d.ts.map +1 -0
- package/dist/store/migration-files.js +59 -0
- package/dist/store/migration-files.js.map +1 -0
- package/dist/store/migration-manager.d.ts.map +1 -1
- package/dist/store/migration-manager.js +14 -14
- package/dist/store/migration-manager.js.map +1 -1
- package/dist/store/migration-runner.d.ts.map +1 -1
- package/dist/store/migration-runner.js +2 -2
- package/dist/store/migration-runner.js.map +1 -1
- package/dist/store/migration-sqlite.d.ts +1 -1
- package/dist/store/migration-sqlite.d.ts.map +1 -1
- package/dist/store/migration-sqlite.js +290 -355
- package/dist/store/migration-sqlite.js.map +1 -1
- package/dist/store/open-cleo-db.d.ts.map +1 -1
- package/dist/store/open-cleo-db.js +4 -2
- package/dist/store/open-cleo-db.js.map +1 -1
- package/dist/store/pid-alive.d.ts +15 -0
- package/dist/store/pid-alive.d.ts.map +1 -0
- package/dist/store/pid-alive.js +24 -0
- package/dist/store/pid-alive.js.map +1 -0
- package/dist/store/portable-bundle-scan.d.ts +1 -1
- package/dist/store/portable-bundle-scan.d.ts.map +1 -1
- package/dist/store/portable-bundle-scan.js +1 -1
- package/dist/store/portable-bundle-scan.js.map +1 -1
- package/dist/store/portable-bundle.d.ts +10 -1
- package/dist/store/portable-bundle.d.ts.map +1 -1
- package/dist/store/portable-bundle.js +10 -1
- package/dist/store/portable-bundle.js.map +1 -1
- package/dist/store/recover-malformed-db.d.ts +1 -1
- package/dist/store/recover-malformed-db.d.ts.map +1 -1
- package/dist/store/recover-malformed-db.js +1 -1
- package/dist/store/recover-malformed-db.js.map +1 -1
- package/dist/store/repair-malformed-dbs.d.ts +1 -1
- package/dist/store/repair-malformed-dbs.d.ts.map +1 -1
- package/dist/store/repair-malformed-dbs.js +1 -1
- package/dist/store/repair-malformed-dbs.js.map +1 -1
- package/dist/store/restore-marker.d.ts +89 -0
- package/dist/store/restore-marker.d.ts.map +1 -0
- package/dist/store/restore-marker.js +197 -0
- package/dist/store/restore-marker.js.map +1 -0
- package/dist/store/restore-store.d.ts +85 -0
- package/dist/store/restore-store.d.ts.map +1 -0
- package/dist/store/restore-store.js +391 -0
- package/dist/store/restore-store.js.map +1 -0
- package/dist/store/row-identity.d.ts +123 -1
- package/dist/store/row-identity.d.ts.map +1 -1
- package/dist/store/row-identity.js +454 -80
- package/dist/store/row-identity.js.map +1 -1
- package/dist/store/schema/agent-registry-schema.d.ts +1 -1
- package/dist/store/schema/agent-registry-schema.d.ts.map +1 -1
- package/dist/store/schema/agent-registry-schema.js +5 -1
- package/dist/store/schema/agent-registry-schema.js.map +1 -1
- package/dist/store/schema/cleo-global/agent-registry.d.ts +1 -1
- package/dist/store/schema/cleo-global/agent-registry.d.ts.map +1 -1
- package/dist/store/schema/cleo-global/agent-registry.js +9 -5
- package/dist/store/schema/cleo-global/agent-registry.js.map +1 -1
- package/dist/store/schema/cleo-global/models-catalog.js +1 -1
- package/dist/store/schema/cleo-global/models-catalog.js.map +1 -1
- package/dist/store/schema/cleo-global/nexus.js +1 -1
- package/dist/store/schema/cleo-global/nexus.js.map +1 -1
- package/dist/store/schema/cleo-project/provenance-commits.d.ts +1 -1
- package/dist/store/schema/cleo-project/provenance-orphans.d.ts +1 -1
- package/dist/store/schema/cleo-project/provenance-orphans.d.ts.map +1 -1
- package/dist/store/schema/cleo-project/provenance-orphans.js +9 -2
- package/dist/store/schema/cleo-project/provenance-orphans.js.map +1 -1
- package/dist/store/schema/cleo-project/provenance-rest.d.ts +1 -1
- package/dist/store/schema/cleo-project/provenance-rest.js +1 -1
- package/dist/store/schema/cleo-project/provenance-rest.js.map +1 -1
- package/dist/store/schema/cleo-shared/brain.js +1 -1
- package/dist/store/schema/cleo-shared/brain.js.map +1 -1
- package/dist/store/schema/memory-schema.d.ts +1 -1
- package/dist/store/schema/memory-schema.d.ts.map +1 -1
- package/dist/store/schema/memory-schema.js +1 -1
- package/dist/store/schema/memory-schema.js.map +1 -1
- package/dist/store/schema/nexus-schema.js +1 -1
- package/dist/store/schema/nexus-schema.js.map +1 -1
- package/dist/store/service-host-matcher.d.ts +1 -1
- package/dist/store/service-host-matcher.d.ts.map +1 -1
- package/dist/store/service-host-matcher.js +1 -1
- package/dist/store/service-host-matcher.js.map +1 -1
- package/dist/store/service-oauth.js +1 -1
- package/dist/store/service-oauth.js.map +1 -1
- package/dist/store/session-store.d.ts.map +1 -1
- package/dist/store/session-store.js +7 -1
- package/dist/store/session-store.js.map +1 -1
- package/dist/store/sqlite-backup.d.ts +1 -1
- package/dist/store/sqlite-backup.d.ts.map +1 -1
- package/dist/store/sqlite-backup.js +1 -1
- package/dist/store/sqlite-backup.js.map +1 -1
- package/dist/store/sqlite-data-accessor.d.ts +52 -1
- package/dist/store/sqlite-data-accessor.d.ts.map +1 -1
- package/dist/store/sqlite-data-accessor.js +95 -22
- package/dist/store/sqlite-data-accessor.js.map +1 -1
- package/dist/store/sqlite-native.d.ts.map +1 -1
- package/dist/store/sqlite-native.js +9 -9
- package/dist/store/sqlite-native.js.map +1 -1
- package/dist/store/sqlite-pragmas.d.ts +12 -5
- package/dist/store/sqlite-pragmas.d.ts.map +1 -1
- package/dist/store/sqlite-pragmas.js +13 -2
- package/dist/store/sqlite-pragmas.js.map +1 -1
- package/dist/store/sqlite.d.ts.map +1 -1
- package/dist/store/sqlite.js +7 -32
- package/dist/store/sqlite.js.map +1 -1
- package/dist/store/status-registry.d.ts +1 -1
- package/dist/store/status-registry.d.ts.map +1 -1
- package/dist/store/status-registry.js +1 -1
- package/dist/store/status-registry.js.map +1 -1
- package/dist/store/sync/apply/applier.d.ts +119 -0
- package/dist/store/sync/apply/applier.d.ts.map +1 -0
- package/dist/store/sync/apply/applier.js +1239 -0
- package/dist/store/sync/apply/applier.js.map +1 -0
- package/dist/store/sync/apply/fk.d.ts +47 -0
- package/dist/store/sync/apply/fk.d.ts.map +1 -0
- package/dist/store/sync/apply/fk.js +89 -0
- package/dist/store/sync/apply/fk.js.map +1 -0
- package/dist/store/sync/apply/footprints.d.ts +60 -0
- package/dist/store/sync/apply/footprints.d.ts.map +1 -0
- package/dist/store/sync/apply/footprints.js +235 -0
- package/dist/store/sync/apply/footprints.js.map +1 -0
- package/dist/store/sync/apply/frame.d.ts +80 -0
- package/dist/store/sync/apply/frame.d.ts.map +1 -0
- package/dist/store/sync/apply/frame.js +127 -0
- package/dist/store/sync/apply/frame.js.map +1 -0
- package/dist/store/sync/apply/index.d.ts +11 -0
- package/dist/store/sync/apply/index.d.ts.map +1 -0
- package/dist/store/sync/apply/index.js +11 -0
- package/dist/store/sync/apply/index.js.map +1 -0
- package/dist/store/sync/apply/parent-delete.d.ts +38 -0
- package/dist/store/sync/apply/parent-delete.d.ts.map +1 -0
- package/dist/store/sync/apply/parent-delete.js +41 -0
- package/dist/store/sync/apply/parent-delete.js.map +1 -0
- package/dist/store/sync/apply/post-apply.d.ts +67 -0
- package/dist/store/sync/apply/post-apply.d.ts.map +1 -0
- package/dist/store/sync/apply/post-apply.js +118 -0
- package/dist/store/sync/apply/post-apply.js.map +1 -0
- package/dist/store/sync/apply/refs.d.ts +60 -0
- package/dist/store/sync/apply/refs.d.ts.map +1 -0
- package/dist/store/sync/apply/refs.js +90 -0
- package/dist/store/sync/apply/refs.js.map +1 -0
- package/dist/store/sync/apply/write-api.d.ts +195 -0
- package/dist/store/sync/apply/write-api.d.ts.map +1 -0
- package/dist/store/sync/apply/write-api.js +416 -0
- package/dist/store/sync/apply/write-api.js.map +1 -0
- package/dist/store/sync/apply-intent.d.ts +117 -0
- package/dist/store/sync/apply-intent.d.ts.map +1 -0
- package/dist/store/sync/apply-intent.js +225 -0
- package/dist/store/sync/apply-intent.js.map +1 -0
- package/dist/store/sync/capture.d.ts +32 -2
- package/dist/store/sync/capture.d.ts.map +1 -1
- package/dist/store/sync/capture.js +47 -13
- package/dist/store/sync/capture.js.map +1 -1
- package/dist/store/sync/conflicts.d.ts +81 -0
- package/dist/store/sync/conflicts.d.ts.map +1 -0
- package/dist/store/sync/conflicts.js +98 -0
- package/dist/store/sync/conflicts.js.map +1 -0
- package/dist/store/sync/field-leave.d.ts +146 -0
- package/dist/store/sync/field-leave.d.ts.map +1 -0
- package/dist/store/sync/field-leave.js +241 -0
- package/dist/store/sync/field-leave.js.map +1 -0
- package/dist/store/sync/flags.d.ts +119 -0
- package/dist/store/sync/flags.d.ts.map +1 -1
- package/dist/store/sync/flags.js +360 -0
- package/dist/store/sync/flags.js.map +1 -1
- package/dist/store/sync/held.d.ts +197 -0
- package/dist/store/sync/held.d.ts.map +1 -0
- package/dist/store/sync/held.js +314 -0
- package/dist/store/sync/held.js.map +1 -0
- package/dist/store/sync/identity-fill.d.ts.map +1 -1
- package/dist/store/sync/identity-fill.js +10 -2
- package/dist/store/sync/identity-fill.js.map +1 -1
- package/dist/store/sync/inbox.d.ts +114 -0
- package/dist/store/sync/inbox.d.ts.map +1 -0
- package/dist/store/sync/inbox.js +222 -0
- package/dist/store/sync/inbox.js.map +1 -0
- package/dist/store/sync/inherit.d.ts +36 -0
- package/dist/store/sync/inherit.d.ts.map +1 -0
- package/dist/store/sync/inherit.js +38 -0
- package/dist/store/sync/inherit.js.map +1 -0
- package/dist/store/sync/merge/engine.d.ts +114 -0
- package/dist/store/sync/merge/engine.d.ts.map +1 -0
- package/dist/store/sync/merge/engine.js +698 -0
- package/dist/store/sync/merge/engine.js.map +1 -0
- package/dist/store/sync/merge/index.d.ts +11 -0
- package/dist/store/sync/merge/index.d.ts.map +1 -0
- package/dist/store/sync/merge/index.js +11 -0
- package/dist/store/sync/merge/index.js.map +1 -0
- package/dist/store/sync/merge/rules.d.ts +91 -0
- package/dist/store/sync/merge/rules.d.ts.map +1 -0
- package/dist/store/sync/merge/rules.js +151 -0
- package/dist/store/sync/merge/rules.js.map +1 -0
- package/dist/store/sync/merge/types.d.ts +206 -0
- package/dist/store/sync/merge/types.d.ts.map +1 -0
- package/dist/store/sync/merge/types.js +15 -0
- package/dist/store/sync/merge/types.js.map +1 -0
- package/dist/store/sync/migration-hooks.d.ts +47 -0
- package/dist/store/sync/migration-hooks.d.ts.map +1 -0
- package/dist/store/sync/migration-hooks.js +74 -0
- package/dist/store/sync/migration-hooks.js.map +1 -0
- package/dist/store/sync/netting.d.ts +5 -0
- package/dist/store/sync/netting.d.ts.map +1 -1
- package/dist/store/sync/netting.js +29 -2
- package/dist/store/sync/netting.js.map +1 -1
- package/dist/store/sync/remap.d.ts +72 -0
- package/dist/store/sync/remap.d.ts.map +1 -0
- package/dist/store/sync/remap.js +209 -0
- package/dist/store/sync/remap.js.map +1 -0
- package/dist/store/sync/repair.d.ts +180 -0
- package/dist/store/sync/repair.d.ts.map +1 -0
- package/dist/store/sync/repair.js +499 -0
- package/dist/store/sync/repair.js.map +1 -0
- package/dist/store/sync/replica-registry.d.ts +54 -0
- package/dist/store/sync/replica-registry.d.ts.map +1 -1
- package/dist/store/sync/replica-registry.js +72 -2
- package/dist/store/sync/replica-registry.js.map +1 -1
- package/dist/store/sync/replica.d.ts +71 -9
- package/dist/store/sync/replica.d.ts.map +1 -1
- package/dist/store/sync/replica.js +95 -11
- package/dist/store/sync/replica.js.map +1 -1
- package/dist/store/sync/row-meta.d.ts +148 -0
- package/dist/store/sync/row-meta.d.ts.map +1 -0
- package/dist/store/sync/row-meta.js +200 -0
- package/dist/store/sync/row-meta.js.map +1 -0
- package/dist/store/sync/schema.d.ts +13 -5
- package/dist/store/sync/schema.d.ts.map +1 -1
- package/dist/store/sync/schema.js +34 -7
- package/dist/store/sync/schema.js.map +1 -1
- package/dist/store/sync/sealer-values.d.ts.map +1 -1
- package/dist/store/sync/sealer-values.js +1 -0
- package/dist/store/sync/sealer-values.js.map +1 -1
- package/dist/store/sync/sealer.d.ts +96 -0
- package/dist/store/sync/sealer.d.ts.map +1 -1
- package/dist/store/sync/sealer.js +532 -58
- package/dist/store/sync/sealer.js.map +1 -1
- package/dist/store/sync/sequencing.d.ts +175 -0
- package/dist/store/sync/sequencing.d.ts.map +1 -0
- package/dist/store/sync/sequencing.js +295 -0
- package/dist/store/sync/sequencing.js.map +1 -0
- package/dist/store/sync/structural.d.ts +30 -2
- package/dist/store/sync/structural.d.ts.map +1 -1
- package/dist/store/sync/structural.js +64 -2
- package/dist/store/sync/structural.js.map +1 -1
- package/dist/store/sync/timestamp-canon.d.ts +44 -0
- package/dist/store/sync/timestamp-canon.d.ts.map +1 -0
- package/dist/store/sync/timestamp-canon.js +102 -0
- package/dist/store/sync/timestamp-canon.js.map +1 -0
- package/dist/store/sync/timestamps.d.ts +1 -30
- package/dist/store/sync/timestamps.d.ts.map +1 -1
- package/dist/store/sync/timestamps.js +2 -89
- package/dist/store/sync/timestamps.js.map +1 -1
- package/dist/store/sync/trigger-classes.d.ts +8 -0
- package/dist/store/sync/trigger-classes.d.ts.map +1 -1
- package/dist/store/sync/trigger-classes.js +13 -0
- package/dist/store/sync/trigger-classes.js.map +1 -1
- package/dist/store/sync/write-actor.d.ts +58 -0
- package/dist/store/sync/write-actor.d.ts.map +1 -0
- package/dist/store/sync/write-actor.js +67 -0
- package/dist/store/sync/write-actor.js.map +1 -0
- package/dist/store/table-classification.d.ts.map +1 -1
- package/dist/store/table-classification.js +84 -0
- package/dist/store/table-classification.js.map +1 -1
- package/dist/store/task-claim.d.ts +1 -1
- package/dist/store/task-claim.d.ts.map +1 -1
- package/dist/store/task-claim.js +1 -1
- package/dist/store/task-claim.js.map +1 -1
- package/dist/store/task-reference-columns.d.ts +27 -0
- package/dist/store/task-reference-columns.d.ts.map +1 -0
- package/dist/store/task-reference-columns.js +65 -0
- package/dist/store/task-reference-columns.js.map +1 -0
- package/dist/store/task-version.d.ts +1 -1
- package/dist/store/task-version.d.ts.map +1 -1
- package/dist/store/task-version.js +1 -1
- package/dist/store/task-version.js.map +1 -1
- package/dist/store/tasks-schema.d.ts +2 -1
- package/dist/store/tasks-schema.d.ts.map +1 -1
- package/dist/store/tasks-schema.js +5 -4
- package/dist/store/tasks-schema.js.map +1 -1
- package/dist/store/tasks-sqlite.d.ts +1 -1
- package/dist/store/tasks-sqlite.d.ts.map +1 -1
- package/dist/store/tasks-sqlite.js +3 -1
- package/dist/store/tasks-sqlite.js.map +1 -1
- package/dist/store/twin-collapse.d.ts +43 -14
- package/dist/store/twin-collapse.d.ts.map +1 -1
- package/dist/store/twin-collapse.js +373 -32
- package/dist/store/twin-collapse.js.map +1 -1
- package/dist/store/validation-schemas.d.ts +44 -674
- package/dist/store/validation-schemas.d.ts.map +1 -1
- package/dist/store/validation-schemas.js +2 -22
- package/dist/store/validation-schemas.js.map +1 -1
- package/dist/store/vault-manifest.d.ts +1 -1
- package/dist/store/vault-manifest.d.ts.map +1 -1
- package/dist/store/vault-manifest.js +1 -1
- package/dist/store/vault-manifest.js.map +1 -1
- package/dist/store/worktree-build-guard.js +1 -1
- package/dist/store/worktree-build-guard.js.map +1 -1
- package/dist/store/worktree-isolation-guard.js +1 -1
- package/dist/store/worktree-isolation-guard.js.map +1 -1
- package/dist/store/writer-lease.d.ts.map +1 -1
- package/dist/store/writer-lease.js +1 -11
- package/dist/store/writer-lease.js.map +1 -1
- package/dist/store/zod-schema-factory.d.ts +16 -0
- package/dist/store/zod-schema-factory.d.ts.map +1 -0
- package/dist/store/zod-schema-factory.js +23 -0
- package/dist/store/zod-schema-factory.js.map +1 -0
- package/dist/system/backup.d.ts +106 -0
- package/dist/system/backup.d.ts.map +1 -1
- package/dist/system/backup.js +295 -19
- package/dist/system/backup.js.map +1 -1
- package/dist/system/cleanup.js +1 -1
- package/dist/system/cleanup.js.map +1 -1
- package/dist/system/labels.js +1 -1
- package/dist/system/labels.js.map +1 -1
- package/dist/system/migrate.js +1 -1
- package/dist/system/migrate.js.map +1 -1
- package/dist/system/safestop.d.ts.map +1 -1
- package/dist/system/safestop.js +1 -1
- package/dist/system/safestop.js.map +1 -1
- package/dist/task-work/current.d.ts +34 -0
- package/dist/task-work/current.d.ts.map +1 -0
- package/dist/task-work/current.js +34 -0
- package/dist/task-work/current.js.map +1 -0
- package/dist/task-work/index.d.ts +2 -19
- package/dist/task-work/index.d.ts.map +1 -1
- package/dist/task-work/index.js +6 -20
- package/dist/task-work/index.js.map +1 -1
- package/dist/tasks/ac-identity.d.ts +28 -0
- package/dist/tasks/ac-identity.d.ts.map +1 -0
- package/dist/tasks/ac-identity.js +43 -0
- package/dist/tasks/ac-identity.js.map +1 -0
- package/dist/tasks/ac-immutability.d.ts +1 -1
- package/dist/tasks/ac-immutability.d.ts.map +1 -1
- package/dist/tasks/ac-immutability.js +1 -1
- package/dist/tasks/ac-immutability.js.map +1 -1
- package/dist/tasks/ac-table.d.ts +2 -14
- package/dist/tasks/ac-table.d.ts.map +1 -1
- package/dist/tasks/ac-table.js +6 -29
- package/dist/tasks/ac-table.js.map +1 -1
- package/dist/tasks/acceptance-input.js +1 -1
- package/dist/tasks/acceptance-input.js.map +1 -1
- package/dist/tasks/add.d.ts.map +1 -1
- package/dist/tasks/add.js +3 -1
- package/dist/tasks/add.js.map +1 -1
- package/dist/tasks/affected-packages.d.ts +80 -12
- package/dist/tasks/affected-packages.d.ts.map +1 -1
- package/dist/tasks/affected-packages.js +130 -19
- package/dist/tasks/affected-packages.js.map +1 -1
- package/dist/tasks/archive.d.ts.map +1 -1
- package/dist/tasks/archive.js +1 -1
- package/dist/tasks/archive.js.map +1 -1
- package/dist/tasks/axis-filters.d.ts.map +1 -1
- package/dist/tasks/axis-filters.js +2 -1
- package/dist/tasks/axis-filters.js.map +1 -1
- package/dist/tasks/child-disposition.js +1 -1
- package/dist/tasks/child-disposition.js.map +1 -1
- package/dist/tasks/collection.js +1 -1
- package/dist/tasks/collection.js.map +1 -1
- package/dist/tasks/complete.d.ts.map +1 -1
- package/dist/tasks/complete.js +2 -1
- package/dist/tasks/complete.js.map +1 -1
- package/dist/tasks/decompose.js +1 -1
- package/dist/tasks/decompose.js.map +1 -1
- package/dist/tasks/delete.js +1 -1
- package/dist/tasks/delete.js.map +1 -1
- package/dist/tasks/done-plan.d.ts +2 -1
- package/dist/tasks/done-plan.d.ts.map +1 -1
- package/dist/tasks/done-plan.js +10 -20
- package/dist/tasks/done-plan.js.map +1 -1
- package/dist/tasks/done-record.d.ts +1 -1
- package/dist/tasks/done-record.d.ts.map +1 -1
- package/dist/tasks/done-record.js +1 -1
- package/dist/tasks/done-record.js.map +1 -1
- package/dist/tasks/enforcement.d.ts +2 -1
- package/dist/tasks/enforcement.d.ts.map +1 -1
- package/dist/tasks/enforcement.js +1 -1
- package/dist/tasks/enforcement.js.map +1 -1
- package/dist/tasks/engine-wrap-ops.js +1 -1
- package/dist/tasks/engine-wrap-ops.js.map +1 -1
- package/dist/tasks/engine-wrap.d.ts.map +1 -1
- package/dist/tasks/engine-wrap.js +7 -3
- package/dist/tasks/engine-wrap.js.map +1 -1
- package/dist/tasks/epic-enforcement.js +1 -1
- package/dist/tasks/epic-enforcement.js.map +1 -1
- package/dist/tasks/evidence.d.ts.map +1 -1
- package/dist/tasks/evidence.js +41 -19
- package/dist/tasks/evidence.js.map +1 -1
- package/dist/tasks/find.js +1 -1
- package/dist/tasks/find.js.map +1 -1
- package/dist/tasks/gate-result-cache.js +1 -1
- package/dist/tasks/gate-result-cache.js.map +1 -1
- package/dist/tasks/gate-runner.d.ts.map +1 -1
- package/dist/tasks/gate-runner.js +1 -1
- package/dist/tasks/gate-runner.js.map +1 -1
- package/dist/tasks/heavy-tool-env.d.ts +79 -11
- package/dist/tasks/heavy-tool-env.d.ts.map +1 -1
- package/dist/tasks/heavy-tool-env.js +111 -14
- package/dist/tasks/heavy-tool-env.js.map +1 -1
- package/dist/tasks/index.d.ts +1 -1
- package/dist/tasks/index.d.ts.map +1 -1
- package/dist/tasks/index.js +2 -2
- package/dist/tasks/index.js.map +1 -1
- package/dist/tasks/labels.js +1 -1
- package/dist/tasks/labels.js.map +1 -1
- package/dist/tasks/nexus-impact-gate.js +1 -1
- package/dist/tasks/nexus-impact-gate.js.map +1 -1
- package/dist/tasks/pipeline-stage.js +1 -1
- package/dist/tasks/pipeline-stage.js.map +1 -1
- package/dist/tasks/population.js +1 -1
- package/dist/tasks/population.js.map +1 -1
- package/dist/tasks/ranking-audit.js +1 -1
- package/dist/tasks/ranking-audit.js.map +1 -1
- package/dist/tasks/reconcile-scope.js +1 -1
- package/dist/tasks/reconcile-scope.js.map +1 -1
- package/dist/tasks/relates.js +1 -1
- package/dist/tasks/relates.js.map +1 -1
- package/dist/tasks/req.d.ts.map +1 -1
- package/dist/tasks/req.js +2 -1
- package/dist/tasks/req.js.map +1 -1
- package/dist/tasks/severity-attestation.d.ts +1 -1
- package/dist/tasks/severity-attestation.d.ts.map +1 -1
- package/dist/tasks/severity-attestation.js +1 -1
- package/dist/tasks/severity-attestation.js.map +1 -1
- package/dist/tasks/show.d.ts.map +1 -1
- package/dist/tasks/show.js +47 -3
- package/dist/tasks/show.js.map +1 -1
- package/dist/tasks/task-import.js +1 -1
- package/dist/tasks/task-import.js.map +1 -1
- package/dist/tasks/task-reparent.d.ts.map +1 -1
- package/dist/tasks/task-reparent.js +2 -1
- package/dist/tasks/task-reparent.js.map +1 -1
- package/dist/tasks/test-run-binding.d.ts.map +1 -1
- package/dist/tasks/test-run-binding.js +9 -2
- package/dist/tasks/test-run-binding.js.map +1 -1
- package/dist/tasks/tool-cache.d.ts +23 -8
- package/dist/tasks/tool-cache.d.ts.map +1 -1
- package/dist/tasks/tool-cache.js +57 -16
- package/dist/tasks/tool-cache.js.map +1 -1
- package/dist/tasks/tool-resolver.d.ts +8 -0
- package/dist/tasks/tool-resolver.d.ts.map +1 -1
- package/dist/tasks/tool-resolver.js +15 -1
- package/dist/tasks/tool-resolver.js.map +1 -1
- package/dist/tasks/tool-runner-guard.d.ts +131 -0
- package/dist/tasks/tool-runner-guard.d.ts.map +1 -0
- package/dist/tasks/tool-runner-guard.js +141 -0
- package/dist/tasks/tool-runner-guard.js.map +1 -0
- package/dist/tasks/tool-semaphore.d.ts +103 -342
- package/dist/tasks/tool-semaphore.d.ts.map +1 -1
- package/dist/tasks/tool-semaphore.js +131 -619
- package/dist/tasks/tool-semaphore.js.map +1 -1
- package/dist/tasks/update.d.ts.map +1 -1
- package/dist/tasks/update.js +2 -1
- package/dist/tasks/update.js.map +1 -1
- package/dist/upgrade.d.ts.map +1 -1
- package/dist/upgrade.js +5 -34
- package/dist/upgrade.js.map +1 -1
- package/dist/validation/doctor/checks.d.ts +24 -0
- package/dist/validation/doctor/checks.d.ts.map +1 -1
- package/dist/validation/doctor/checks.js +168 -0
- package/dist/validation/doctor/checks.js.map +1 -1
- package/dist/validation/doctor/index.d.ts +1 -1
- package/dist/validation/doctor/index.d.ts.map +1 -1
- package/dist/validation/doctor/index.js +1 -1
- package/dist/validation/doctor/index.js.map +1 -1
- package/dist/validation/engine-ops.js +1 -1
- package/dist/validation/engine-ops.js.map +1 -1
- package/dist/validation/engine.d.ts +1 -1
- package/dist/validation/engine.d.ts.map +1 -1
- package/dist/validation/engine.js +2 -1
- package/dist/validation/engine.js.map +1 -1
- package/dist/validation/index.d.ts +1 -1
- package/dist/validation/index.d.ts.map +1 -1
- package/dist/validation/index.js +1 -1
- package/dist/validation/index.js.map +1 -1
- package/dist/validation/operation-gate-validators.js +1 -1
- package/dist/validation/operation-gate-validators.js.map +1 -1
- package/dist/validation/protocol-common.js +1 -1
- package/dist/validation/protocol-common.js.map +1 -1
- package/dist/validation/protocols/_shared.js +1 -1
- package/dist/validation/protocols/_shared.js.map +1 -1
- package/dist/validation/validate-ops.js +1 -1
- package/dist/validation/validate-ops.js.map +1 -1
- package/dist/validation/verification.js +1 -1
- package/dist/validation/verification.js.map +1 -1
- package/dist/workgraph/index.d.ts +1 -1
- package/dist/workgraph/index.d.ts.map +1 -1
- package/dist/workgraph/index.js +1 -1
- package/dist/workgraph/index.js.map +1 -1
- package/dist/workgraph/reparent-preflight.d.ts +1 -2
- package/dist/workgraph/reparent-preflight.d.ts.map +1 -1
- package/dist/workgraph/reparent-preflight.js +1 -1
- package/dist/workgraph/reparent-preflight.js.map +1 -1
- package/dist/workgraph/scaffold-validate.js +1 -1
- package/dist/workgraph/scaffold-validate.js.map +1 -1
- package/dist/worktree/force-unlock.d.ts +1 -1
- package/dist/worktree/force-unlock.d.ts.map +1 -1
- package/dist/worktree/force-unlock.js +1 -1
- package/dist/worktree/force-unlock.js.map +1 -1
- package/dist/worktree/isolation.d.ts +1 -1
- package/dist/worktree/isolation.d.ts.map +1 -1
- package/dist/worktree/isolation.js +1 -1
- package/dist/worktree/isolation.js.map +1 -1
- package/dist/worktree/list.d.ts +1 -1
- package/dist/worktree/list.d.ts.map +1 -1
- package/dist/worktree/list.js +1 -1
- package/dist/worktree/list.js.map +1 -1
- package/dist/worktree/prune.d.ts +1 -1
- package/dist/worktree/prune.d.ts.map +1 -1
- package/dist/worktree/prune.js +1 -1
- package/dist/worktree/prune.js.map +1 -1
- package/dist/worktree/worktree-adopt.d.ts +1 -2
- package/dist/worktree/worktree-adopt.d.ts.map +1 -1
- package/dist/worktree/worktree-adopt.js +1 -1
- package/dist/worktree/worktree-adopt.js.map +1 -1
- package/migrations/sync-journal/20261004120000_t12757-apply-intent/migration.sql +21 -0
- package/migrations/sync-journal/20261005120000_t12344-inbox/migration.sql +67 -0
- package/migrations/sync-journal/20261006120000_t13193-rebase-undo/migration.sql +51 -0
- package/migrations/sync-journal/20261006130000_t13193-rebase-state/migration.sql +17 -0
- package/migrations/sync-journal/20261006140000_t13193-held-rows/migration.sql +24 -0
- package/package.json +13 -13
- package/schemas/project-context.schema.json +14 -0
- package/templates/CLEO-INJECTION.md +11 -11
- package/templates/CLEO-REFERENCE.md +2 -2
- package/templates/workflows/release-prepare.yml.tmpl +10 -10
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The repair diff (journal spec §4.4, §4.3 item 3; S3d, T12987).
|
|
3
|
+
*
|
|
4
|
+
* A table is `suspect:` when something may have written it uncaptured: a
|
|
5
|
+
* bracketed rewriter (exodus, the lineage carry-forward, the identity fill),
|
|
6
|
+
* a quarantined capture, or a migration pass over rows that were already out
|
|
7
|
+
* of baseline. Later migrations skip every row of a suspect table when they
|
|
8
|
+
* re-baseline `chash` (T13202), so this pass is the only place those rows are
|
|
9
|
+
* checked again, and it re-checks EVERY row of the table, never only the
|
|
10
|
+
* captured ones.
|
|
11
|
+
*
|
|
12
|
+
* For each suspect table it compares the live rows with `_sync_row_meta`:
|
|
13
|
+
* - a live row whose meta `chash` differs: U, carrying the full after-image
|
|
14
|
+
* (the before-image is unknown; only its hash was kept);
|
|
15
|
+
* - a live row with no meta, or with a tombstone: I;
|
|
16
|
+
* - a live meta row with no live row (an orphan): D.
|
|
17
|
+
*
|
|
18
|
+
* Rows held by a rebase (`held = 1`, §3.5 Rule 5) are skipped, so a held
|
|
19
|
+
* insert never produces a spurious D. The ops are written as captures of one
|
|
20
|
+
* `repair` frame per table and sealed by the sealer (`via: 'repair'`), so row
|
|
21
|
+
* meta, the ledger and `chash` have one writer.
|
|
22
|
+
*
|
|
23
|
+
* A table whose row meta was never baselined (no `baseline:<table>` key)
|
|
24
|
+
* cannot tell a pre-sync row from an uncaptured insert: both lack meta. Such
|
|
25
|
+
* rows are baselined instead (meta with the §1.2 genesis HLC, no op) and the
|
|
26
|
+
* ledger is set to the verified count; nothing is pushed before the genesis
|
|
27
|
+
* checkpoint, which carries them. From then on a row without meta is an
|
|
28
|
+
* uncaptured insert. Once the stream has started ({@link streamStarted}) a
|
|
29
|
+
* row without meta is journaled as an I in every table, baselined or not,
|
|
30
|
+
* and the table is then marked baselined (T13217): never absorbed silently.
|
|
31
|
+
*
|
|
32
|
+
* The suspect key is cleared only after verification: no live capture of the
|
|
33
|
+
* table remains, a rescan finds nothing to repair, and the ledger equals
|
|
34
|
+
* `count(*) + held`. A key re-marked while the repair ran is kept.
|
|
35
|
+
*
|
|
36
|
+
* @task T12987
|
|
37
|
+
* @module store/sync/repair
|
|
38
|
+
*/
|
|
39
|
+
import type { DatabaseSync } from 'node:sqlite';
|
|
40
|
+
import type { TableScope } from '@cleocode/contracts';
|
|
41
|
+
import { type SealerRowView } from './sealer.js';
|
|
42
|
+
/** `_sync_meta` key prefix of a table whose row meta covers every live row. */
|
|
43
|
+
export declare const BASELINE_KEY_PREFIX = "baseline:";
|
|
44
|
+
/** How many uids a report lists per kind (the counts are always complete). */
|
|
45
|
+
export declare const REPAIR_SAMPLE_SIZE = 20;
|
|
46
|
+
/** A live row: its uid and its local key `rk` (as the capture triggers write it). */
|
|
47
|
+
export interface RepairRow {
|
|
48
|
+
readonly uid: string;
|
|
49
|
+
readonly rk: string;
|
|
50
|
+
}
|
|
51
|
+
/** The repair diff of one suspect table. */
|
|
52
|
+
export interface RepairPlan {
|
|
53
|
+
readonly table: string;
|
|
54
|
+
/** Row meta covers every live row, so a row without meta is an uncaptured insert. */
|
|
55
|
+
readonly baselined: boolean;
|
|
56
|
+
/** Live rows to emit as I. */
|
|
57
|
+
readonly inserts: readonly RepairRow[];
|
|
58
|
+
/** Live rows whose `chash` differs: U. */
|
|
59
|
+
readonly updates: readonly RepairRow[];
|
|
60
|
+
/** Live meta rows without a live row: D. */
|
|
61
|
+
readonly deletes: readonly string[];
|
|
62
|
+
/** Live rows without meta in a table never baselined: baselined, no op. */
|
|
63
|
+
readonly unbaselined: readonly RepairRow[];
|
|
64
|
+
/** Rows a rebase holds (skipped). */
|
|
65
|
+
readonly held: number;
|
|
66
|
+
/** Live rows with no uid: the identity fill must run first. */
|
|
67
|
+
readonly unidentified: number;
|
|
68
|
+
/** Why the table was not diffed, or null. */
|
|
69
|
+
readonly skipped: string | null;
|
|
70
|
+
}
|
|
71
|
+
/** What the repair did to one table. */
|
|
72
|
+
export interface RepairTableResult {
|
|
73
|
+
readonly table: string;
|
|
74
|
+
readonly baselined: boolean;
|
|
75
|
+
readonly counts: {
|
|
76
|
+
readonly inserts: number;
|
|
77
|
+
readonly updates: number;
|
|
78
|
+
readonly deletes: number;
|
|
79
|
+
readonly baselinedRows: number;
|
|
80
|
+
readonly held: number;
|
|
81
|
+
readonly unidentified: number;
|
|
82
|
+
};
|
|
83
|
+
/** Up to {@link REPAIR_SAMPLE_SIZE} uids per kind. */
|
|
84
|
+
readonly sample: {
|
|
85
|
+
readonly inserts: readonly string[];
|
|
86
|
+
readonly updates: readonly string[];
|
|
87
|
+
readonly deletes: readonly string[];
|
|
88
|
+
};
|
|
89
|
+
/** The repair frame written, or null (dry run, nothing to emit, skipped). */
|
|
90
|
+
readonly frame: string | null;
|
|
91
|
+
/** The suspect key was cleared. */
|
|
92
|
+
readonly cleared: boolean;
|
|
93
|
+
/** Why the table stays suspect, or null. */
|
|
94
|
+
readonly reason: string | null;
|
|
95
|
+
}
|
|
96
|
+
/** What {@link repairSuspectTables} did. */
|
|
97
|
+
export interface RepairReport {
|
|
98
|
+
/** Why nothing ran, or null. */
|
|
99
|
+
readonly refused: string | null;
|
|
100
|
+
readonly dryRun: boolean;
|
|
101
|
+
readonly tables: readonly RepairTableResult[];
|
|
102
|
+
/** Transactions and ops the sealer wrote while sealing pending and repair captures. */
|
|
103
|
+
readonly sealed: {
|
|
104
|
+
readonly txns: number;
|
|
105
|
+
readonly ops: number;
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
/** Options of {@link repairSuspectTables}. */
|
|
109
|
+
export interface RepairOptions {
|
|
110
|
+
readonly scope: TableScope;
|
|
111
|
+
/** Plan only: write nothing, seal nothing, clear nothing. */
|
|
112
|
+
readonly dryRun?: boolean;
|
|
113
|
+
/** Restrict to these suspect tables (default: every suspect table). */
|
|
114
|
+
readonly tables?: readonly string[];
|
|
115
|
+
readonly env?: NodeJS.ProcessEnv;
|
|
116
|
+
/** The replica to seal as (default: the store's bound replica). */
|
|
117
|
+
readonly replica?: string;
|
|
118
|
+
/** Seal while `sync.seal` is unreleased (tests and Gate B only). */
|
|
119
|
+
readonly allowUnreleased?: boolean;
|
|
120
|
+
readonly now?: () => number;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Whether this store's stream has started (T13217): a genesis cut was
|
|
124
|
+
* recorded (a `_sync_meta` key starting with {@link GENESIS_CUT_KEY_PREFIX},
|
|
125
|
+
* §2.11 §10), a sealed transaction was carried by a segment or folded into a
|
|
126
|
+
* checkpoint (`state` `segmented` or `folded`; `inherited` is another
|
|
127
|
+
* replica's and does not count), or undo is on (it turns on with the genesis
|
|
128
|
+
* cut, C1). After that, a checkpoint may already have left the device, so a
|
|
129
|
+
* row without meta can no longer be assumed to be in it.
|
|
130
|
+
*
|
|
131
|
+
* The `undo_enabled` clause never decides the repair diff, which refuses to
|
|
132
|
+
* run while undo is on; it is there for other callers of this function.
|
|
133
|
+
*/
|
|
134
|
+
export declare function streamStarted(db: DatabaseSync): boolean;
|
|
135
|
+
/**
|
|
136
|
+
* Diff one table against its row meta, every row. Read-only.
|
|
137
|
+
*
|
|
138
|
+
* @param db - The store.
|
|
139
|
+
* @param scope - Its scope.
|
|
140
|
+
* @param table - A sync-set table.
|
|
141
|
+
* @param view - From {@link sealerRowView}, shared across tables.
|
|
142
|
+
*/
|
|
143
|
+
export declare function planRepair(db: DatabaseSync, scope: TableScope, table: string, view?: SealerRowView): RepairPlan;
|
|
144
|
+
/**
|
|
145
|
+
* Baseline one table's row meta (§1.2 "genesis of an existing row"; §1.6
|
|
146
|
+
* "one live meta row per live sync-set row"): every live row with a uid and
|
|
147
|
+
* no meta gets meta with its genesis HLC and no op, the ledger is set to
|
|
148
|
+
* `count(*) + held`, and `baseline:<table>` is recorded, atomically. The
|
|
149
|
+
* repair diff calls it for a table never baselined; T12342's first-enable
|
|
150
|
+
* init is meant to call it for every sync-set table, so row meta keeps one
|
|
151
|
+
* initializer.
|
|
152
|
+
*
|
|
153
|
+
* Runs in the caller's transaction when there is one, else in its own
|
|
154
|
+
* `BEGIN IMMEDIATE`.
|
|
155
|
+
*
|
|
156
|
+
* @param db - The store.
|
|
157
|
+
* @param scope - Its scope.
|
|
158
|
+
* @param table - A sync-set table with a uid column.
|
|
159
|
+
* @param replica - The replica the baseline meta names as origin.
|
|
160
|
+
* @param now - Wall milliseconds (the genesis HLC is clamped to it).
|
|
161
|
+
* @returns The rows baselined, or null when the table is not in the sync set.
|
|
162
|
+
*/
|
|
163
|
+
export declare function baselineRowMeta(db: DatabaseSync, scope: TableScope, table: string, replica: string, now?: number): number | null;
|
|
164
|
+
/**
|
|
165
|
+
* Seal what is pending, then run the repair diff over every suspect table
|
|
166
|
+
* (§4.4; S3d, T12987): emit each table's repair ops in a `repair` frame, seal
|
|
167
|
+
* them, then verify and clear the suspect key. The pending seal runs even
|
|
168
|
+
* when no table is suspect (the NEW-8 step before a migration pass). A dry
|
|
169
|
+
* run only plans.
|
|
170
|
+
*
|
|
171
|
+
* Prerequisites (§4.4): the sealer's preconditions hold, a replica is bound,
|
|
172
|
+
* the table's capture triggers are present, and no capture of the table is
|
|
173
|
+
* left waiting after the pending seal. Undo is not written for repair
|
|
174
|
+
* captures yet, so the repair refuses while `undo_enabled` is set.
|
|
175
|
+
*
|
|
176
|
+
* @param db - The store; must not be inside a transaction.
|
|
177
|
+
* @param opts - {@link RepairOptions}.
|
|
178
|
+
*/
|
|
179
|
+
export declare function repairSuspectTables(db: DatabaseSync, opts: RepairOptions): RepairReport;
|
|
180
|
+
//# sourceMappingURL=repair.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repair.d.ts","sourceRoot":"","sources":["../../../src/store/sync/repair.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAQtD,OAAO,EAAE,KAAK,aAAa,EAAiD,MAAM,aAAa,CAAC;AAMhG,+EAA+E;AAC/E,eAAO,MAAM,mBAAmB,cAAc,CAAC;AAE/C,8EAA8E;AAC9E,eAAO,MAAM,kBAAkB,KAAK,CAAC;AAErC,qFAAqF;AACrF,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;CACrB;AAED,4CAA4C;AAC5C,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,qFAAqF;IACrF,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,8BAA8B;IAC9B,QAAQ,CAAC,OAAO,EAAE,SAAS,SAAS,EAAE,CAAC;IACvC,0CAA0C;IAC1C,QAAQ,CAAC,OAAO,EAAE,SAAS,SAAS,EAAE,CAAC;IACvC,4CAA4C;IAC5C,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,2EAA2E;IAC3E,QAAQ,CAAC,WAAW,EAAE,SAAS,SAAS,EAAE,CAAC;IAC3C,qCAAqC;IACrC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,+DAA+D;IAC/D,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,6CAA6C;IAC7C,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC;AAED,wCAAwC;AACxC,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE;QACf,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QACzB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;QAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QACtB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;KAC/B,CAAC;IACF,sDAAsD;IACtD,QAAQ,CAAC,MAAM,EAAE;QACf,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;QACpC,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;QACpC,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;KACrC,CAAC;IACF,6EAA6E;IAC7E,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,mCAAmC;IACnC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,4CAA4C;IAC5C,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC;AAED,4CAA4C;AAC5C,MAAM,WAAW,YAAY;IAC3B,gCAAgC;IAChC,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,SAAS,iBAAiB,EAAE,CAAC;IAC9C,uFAAuF;IACvF,QAAQ,CAAC,MAAM,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;CAClE;AAED,8CAA8C;AAC9C,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAC3B,6DAA6D;IAC7D,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B,uEAAuE;IACvE,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACjC,mEAAmE;IACnE,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,oEAAoE;IACpE,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC;IACnC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CAC7B;AAoCD;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAAC,EAAE,EAAE,YAAY,GAAG,OAAO,CAYvD;AAED;;;;;;;GAOG;AACH,wBAAgB,UAAU,CACxB,EAAE,EAAE,YAAY,EAChB,KAAK,EAAE,UAAU,EACjB,KAAK,EAAE,MAAM,EACb,IAAI,GAAE,aAAwC,GAC7C,UAAU,CA2EZ;AAqJD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,eAAe,CAC7B,EAAE,EAAE,YAAY,EAChB,KAAK,EAAE,UAAU,EACjB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,GAAG,GAAE,MAAmB,GACvB,MAAM,GAAG,IAAI,CA0Bf;AA2ED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,aAAa,GAAG,YAAY,CA6EvF"}
|
|
@@ -0,0 +1,499 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The repair diff (journal spec §4.4, §4.3 item 3; S3d, T12987).
|
|
3
|
+
*
|
|
4
|
+
* A table is `suspect:` when something may have written it uncaptured: a
|
|
5
|
+
* bracketed rewriter (exodus, the lineage carry-forward, the identity fill),
|
|
6
|
+
* a quarantined capture, or a migration pass over rows that were already out
|
|
7
|
+
* of baseline. Later migrations skip every row of a suspect table when they
|
|
8
|
+
* re-baseline `chash` (T13202), so this pass is the only place those rows are
|
|
9
|
+
* checked again, and it re-checks EVERY row of the table, never only the
|
|
10
|
+
* captured ones.
|
|
11
|
+
*
|
|
12
|
+
* For each suspect table it compares the live rows with `_sync_row_meta`:
|
|
13
|
+
* - a live row whose meta `chash` differs: U, carrying the full after-image
|
|
14
|
+
* (the before-image is unknown; only its hash was kept);
|
|
15
|
+
* - a live row with no meta, or with a tombstone: I;
|
|
16
|
+
* - a live meta row with no live row (an orphan): D.
|
|
17
|
+
*
|
|
18
|
+
* Rows held by a rebase (`held = 1`, §3.5 Rule 5) are skipped, so a held
|
|
19
|
+
* insert never produces a spurious D. The ops are written as captures of one
|
|
20
|
+
* `repair` frame per table and sealed by the sealer (`via: 'repair'`), so row
|
|
21
|
+
* meta, the ledger and `chash` have one writer.
|
|
22
|
+
*
|
|
23
|
+
* A table whose row meta was never baselined (no `baseline:<table>` key)
|
|
24
|
+
* cannot tell a pre-sync row from an uncaptured insert: both lack meta. Such
|
|
25
|
+
* rows are baselined instead (meta with the §1.2 genesis HLC, no op) and the
|
|
26
|
+
* ledger is set to the verified count; nothing is pushed before the genesis
|
|
27
|
+
* checkpoint, which carries them. From then on a row without meta is an
|
|
28
|
+
* uncaptured insert. Once the stream has started ({@link streamStarted}) a
|
|
29
|
+
* row without meta is journaled as an I in every table, baselined or not,
|
|
30
|
+
* and the table is then marked baselined (T13217): never absorbed silently.
|
|
31
|
+
*
|
|
32
|
+
* The suspect key is cleared only after verification: no live capture of the
|
|
33
|
+
* table remains, a rescan finds nothing to repair, and the ledger equals
|
|
34
|
+
* `count(*) + held`. A key re-marked while the repair ran is kept.
|
|
35
|
+
*
|
|
36
|
+
* @task T12987
|
|
37
|
+
* @module store/sync/repair
|
|
38
|
+
*/
|
|
39
|
+
import { randomUUID } from 'node:crypto';
|
|
40
|
+
import { rowIdentitySpec, UID_COLUMN } from '../row-identity-registry.js';
|
|
41
|
+
import { AT_MS_SQL, captureTableDef, repairImageSql } from './capture.js';
|
|
42
|
+
import { withImmediateTransaction } from './clock-store.js';
|
|
43
|
+
import { encodeHlc, MAX_PHYS } from './hlc.js';
|
|
44
|
+
import { activeReplica } from './replica.js';
|
|
45
|
+
import { upsertRowMeta } from './row-meta.js';
|
|
46
|
+
import { GENESIS_CUT_KEY_PREFIX, hasTable } from './schema.js';
|
|
47
|
+
import { sealerRowView, sealPending, sealPreconditions } from './sealer.js';
|
|
48
|
+
import { decodeEnc } from './sealer-values.js';
|
|
49
|
+
import { suspectTables } from './structural.js';
|
|
50
|
+
import { canonicalStoreTimestamp, timestampColumns } from './timestamps.js';
|
|
51
|
+
import { CAPTURE_TRIGGER_PREFIX } from './trigger-classes.js';
|
|
52
|
+
/** `_sync_meta` key prefix of a table whose row meta covers every live row. */
|
|
53
|
+
export const BASELINE_KEY_PREFIX = 'baseline:';
|
|
54
|
+
/** How many uids a report lists per kind (the counts are always complete). */
|
|
55
|
+
export const REPAIR_SAMPLE_SIZE = 20;
|
|
56
|
+
const q = (id) => `"${id.replaceAll('"', '""')}"`;
|
|
57
|
+
const empty = (refused, dryRun) => ({
|
|
58
|
+
refused,
|
|
59
|
+
dryRun,
|
|
60
|
+
tables: [],
|
|
61
|
+
sealed: { txns: 0, ops: 0 },
|
|
62
|
+
});
|
|
63
|
+
/** The live captures of `table` still waiting to seal. */
|
|
64
|
+
function waiting(db, table) {
|
|
65
|
+
return db
|
|
66
|
+
.prepare("SELECT count(*) AS n FROM _sync_capture WHERE state = 'live' AND tbl = ?")
|
|
67
|
+
.get(table).n;
|
|
68
|
+
}
|
|
69
|
+
function metaValue(db, key) {
|
|
70
|
+
return db.prepare('SELECT value FROM _sync_meta WHERE key = ?').get(key)?.value;
|
|
71
|
+
}
|
|
72
|
+
function captureTriggersPresent(db, table) {
|
|
73
|
+
return (db
|
|
74
|
+
.prepare("SELECT 1 FROM sqlite_master WHERE type = 'trigger' AND name = ?")
|
|
75
|
+
.get(`${CAPTURE_TRIGGER_PREFIX}${table}_i`) !== undefined);
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Whether this store's stream has started (T13217): a genesis cut was
|
|
79
|
+
* recorded (a `_sync_meta` key starting with {@link GENESIS_CUT_KEY_PREFIX},
|
|
80
|
+
* §2.11 §10), a sealed transaction was carried by a segment or folded into a
|
|
81
|
+
* checkpoint (`state` `segmented` or `folded`; `inherited` is another
|
|
82
|
+
* replica's and does not count), or undo is on (it turns on with the genesis
|
|
83
|
+
* cut, C1). After that, a checkpoint may already have left the device, so a
|
|
84
|
+
* row without meta can no longer be assumed to be in it.
|
|
85
|
+
*
|
|
86
|
+
* The `undo_enabled` clause never decides the repair diff, which refuses to
|
|
87
|
+
* run while undo is on; it is there for other callers of this function.
|
|
88
|
+
*/
|
|
89
|
+
export function streamStarted(db) {
|
|
90
|
+
const meta = db
|
|
91
|
+
.prepare("SELECT 1 FROM _sync_meta WHERE substr(key, 1, length(?)) = ? OR key = 'undo_enabled' LIMIT 1")
|
|
92
|
+
.get(GENESIS_CUT_KEY_PREFIX, GENESIS_CUT_KEY_PREFIX);
|
|
93
|
+
if (meta !== undefined)
|
|
94
|
+
return true;
|
|
95
|
+
return (hasTable(db, '_sync_txn') &&
|
|
96
|
+
db.prepare("SELECT 1 FROM _sync_txn WHERE state IN ('segmented', 'folded') LIMIT 1").get() !==
|
|
97
|
+
undefined);
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Diff one table against its row meta, every row. Read-only.
|
|
101
|
+
*
|
|
102
|
+
* @param db - The store.
|
|
103
|
+
* @param scope - Its scope.
|
|
104
|
+
* @param table - A sync-set table.
|
|
105
|
+
* @param view - From {@link sealerRowView}, shared across tables.
|
|
106
|
+
*/
|
|
107
|
+
export function planRepair(db, scope, table, view = sealerRowView(db, scope)) {
|
|
108
|
+
const plan = (skipped, baselined = false) => ({
|
|
109
|
+
table,
|
|
110
|
+
baselined,
|
|
111
|
+
inserts: [],
|
|
112
|
+
updates: [],
|
|
113
|
+
deletes: [],
|
|
114
|
+
unbaselined: [],
|
|
115
|
+
held: 0,
|
|
116
|
+
unidentified: 0,
|
|
117
|
+
skipped,
|
|
118
|
+
});
|
|
119
|
+
if (!hasTable(db, table))
|
|
120
|
+
return plan('table does not exist');
|
|
121
|
+
const def = captureTableDef(db, scope, table);
|
|
122
|
+
if (!def)
|
|
123
|
+
return plan('not in the sync set');
|
|
124
|
+
if (!def.identity.includes(UID_COLUMN))
|
|
125
|
+
return plan('table has no uid column');
|
|
126
|
+
if (!captureTriggersPresent(db, table)) {
|
|
127
|
+
return plan('capture triggers missing: run cleo doctor sync-triggers --repair first');
|
|
128
|
+
}
|
|
129
|
+
if (waiting(db, table) > 0)
|
|
130
|
+
return plan('captures still waiting to seal');
|
|
131
|
+
const baselined = metaValue(db, `${BASELINE_KEY_PREFIX}${table}`) !== undefined;
|
|
132
|
+
// Once the stream has started, no row may be absorbed silently: a row
|
|
133
|
+
// without meta is journaled as an I even in a table never baselined
|
|
134
|
+
// (T13217). Only before genesis is it baselined without an op.
|
|
135
|
+
const journalMissing = baselined || streamStarted(db);
|
|
136
|
+
const meta = new Map();
|
|
137
|
+
for (const m of db
|
|
138
|
+
.prepare('SELECT uid, chash, deleted, held FROM _sync_row_meta WHERE tbl = ?')
|
|
139
|
+
.all(table)) {
|
|
140
|
+
meta.set(m.uid, { chash: m.chash, deleted: m.deleted, held: m.held });
|
|
141
|
+
}
|
|
142
|
+
const inserts = [];
|
|
143
|
+
const updates = [];
|
|
144
|
+
const unbaselined = [];
|
|
145
|
+
let held = 0;
|
|
146
|
+
let unidentified = 0;
|
|
147
|
+
const live = new Set();
|
|
148
|
+
const rows = db
|
|
149
|
+
.prepare(`SELECT x.${q(UID_COLUMN)} AS uid, ${repairImageSql(def, 'x').rk} AS rk FROM ${q(table)} x`)
|
|
150
|
+
.iterate();
|
|
151
|
+
for (const r of rows) {
|
|
152
|
+
// A natural row's uid is a function of its key, as the sealer reads it.
|
|
153
|
+
const uid = r.uid ?? view.naturalUid(def, r.rk);
|
|
154
|
+
if (uid === null) {
|
|
155
|
+
unidentified += 1;
|
|
156
|
+
continue;
|
|
157
|
+
}
|
|
158
|
+
live.add(uid);
|
|
159
|
+
const row = { uid, rk: r.rk };
|
|
160
|
+
const m = meta.get(uid);
|
|
161
|
+
if (!m)
|
|
162
|
+
(journalMissing ? inserts : unbaselined).push(row);
|
|
163
|
+
else if (m.held === 1)
|
|
164
|
+
held += 1;
|
|
165
|
+
else if (m.deleted === 1)
|
|
166
|
+
inserts.push(row);
|
|
167
|
+
else if (view.chash(def, uid) !== m.chash)
|
|
168
|
+
updates.push(row);
|
|
169
|
+
}
|
|
170
|
+
const deletes = [];
|
|
171
|
+
for (const [uid, m] of meta) {
|
|
172
|
+
if (live.has(uid) || m.deleted === 1)
|
|
173
|
+
continue;
|
|
174
|
+
if (m.held === 1)
|
|
175
|
+
held += 1;
|
|
176
|
+
else
|
|
177
|
+
deletes.push(uid);
|
|
178
|
+
}
|
|
179
|
+
return {
|
|
180
|
+
table,
|
|
181
|
+
baselined,
|
|
182
|
+
inserts,
|
|
183
|
+
updates,
|
|
184
|
+
deletes,
|
|
185
|
+
unbaselined,
|
|
186
|
+
held,
|
|
187
|
+
unidentified,
|
|
188
|
+
skipped: null,
|
|
189
|
+
};
|
|
190
|
+
}
|
|
191
|
+
/** `x`'s local key matches the bound key values ({@link keyValues}). */
|
|
192
|
+
function keyWhere(def) {
|
|
193
|
+
return def.key.map((k) => `x.${q(k)} IS ?`).join(' AND ');
|
|
194
|
+
}
|
|
195
|
+
/** A bindable SQLite value for a decoded key part. */
|
|
196
|
+
function bindable(v) {
|
|
197
|
+
if (v === null || typeof v === 'string' || typeof v === 'number')
|
|
198
|
+
return v;
|
|
199
|
+
if ('$i' in v)
|
|
200
|
+
return BigInt(v.$i);
|
|
201
|
+
if ('$r' in v)
|
|
202
|
+
return Number(v.$r);
|
|
203
|
+
return Buffer.from(v.$b, 'base64');
|
|
204
|
+
}
|
|
205
|
+
/** The key values a row's `rk` encodes, in key-column order. */
|
|
206
|
+
function keyValues(rk) {
|
|
207
|
+
return JSON.parse(rk).map((p) => bindable(decodeEnc(p)));
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Write a plan's ops as the captures of one `repair` frame. Runs in the
|
|
211
|
+
* caller's transaction.
|
|
212
|
+
*
|
|
213
|
+
* @returns The frame, or null when the plan emits nothing.
|
|
214
|
+
*/
|
|
215
|
+
function writeRepairFrame(db, def, plan) {
|
|
216
|
+
if (plan.inserts.length + plan.updates.length + plan.deletes.length === 0)
|
|
217
|
+
return null;
|
|
218
|
+
const frame = randomUUID();
|
|
219
|
+
const first = db.prepare('SELECT coalesce(max(seq), 0) + 1 AS n FROM main._sync_capture').get().n;
|
|
220
|
+
db.prepare('INSERT INTO _sync_frame (frame, kind, actor, first_seq) VALUES (?, ?, ?, ?)').run(frame, 'repair', null, first);
|
|
221
|
+
const img = repairImageSql(def, 'x');
|
|
222
|
+
const fromLive = (op, image) => db.prepare(`INSERT INTO _sync_capture (tbl, op, rk, uid, img, at_ms, frame, kind) ` +
|
|
223
|
+
`SELECT ?, '${op}', ?, ?, ${image}, ${AT_MS_SQL}, ?, 'repair' ` +
|
|
224
|
+
`FROM ${q(def.table)} x WHERE ${keyWhere(def)}`);
|
|
225
|
+
const ins = fromLive('I', img.insert);
|
|
226
|
+
const upd = fromLive('U', img.update);
|
|
227
|
+
// An orphan has no live row, so no local key: its rk only has to be unique
|
|
228
|
+
// per row, and its image is empty (the sealer reads a natural key from meta).
|
|
229
|
+
const del = db.prepare(`INSERT INTO _sync_capture (tbl, op, rk, uid, img, at_ms, frame, kind) ` +
|
|
230
|
+
`VALUES (?, 'D', ?, ?, '{}', ${AT_MS_SQL}, ?, 'repair')`);
|
|
231
|
+
for (const r of plan.updates)
|
|
232
|
+
upd.run(def.table, r.rk, r.uid, frame, ...keyValues(r.rk));
|
|
233
|
+
for (const r of plan.inserts)
|
|
234
|
+
ins.run(def.table, r.rk, r.uid, frame, ...keyValues(r.rk));
|
|
235
|
+
for (const uid of plan.deletes)
|
|
236
|
+
del.run(def.table, JSON.stringify(['<orphan>', uid]), uid, frame);
|
|
237
|
+
return frame;
|
|
238
|
+
}
|
|
239
|
+
/** The column a pre-sync row's genesis HLC is read from (§1.2), or null. */
|
|
240
|
+
function genesisColumn(scope, table) {
|
|
241
|
+
const stamps = timestampColumns(scope, table);
|
|
242
|
+
for (const c of ['updated_at', 'created_at', 'recorded_at', 'started_at']) {
|
|
243
|
+
if (stamps.has(c))
|
|
244
|
+
return c;
|
|
245
|
+
}
|
|
246
|
+
return null;
|
|
247
|
+
}
|
|
248
|
+
/**
|
|
249
|
+
* Baseline live rows that have no meta (§1.2 "genesis of an existing row"):
|
|
250
|
+
* the row's modification column, else its birth column, clamped to
|
|
251
|
+
* `[0, now]`, counter 0, this replica. No op is emitted.
|
|
252
|
+
*/
|
|
253
|
+
function baselineRows(db, scope, def, rows, replica, view, now) {
|
|
254
|
+
const col = genesisColumn(scope, def.table);
|
|
255
|
+
const natural = rowIdentitySpec(scope, def.table)?.kind !== 'minted';
|
|
256
|
+
const read = db.prepare(`SELECT ${col ? `x.${q(col)}` : 'NULL'} AS at FROM ${q(def.table)} x WHERE ${keyWhere(def)}`);
|
|
257
|
+
for (const r of rows) {
|
|
258
|
+
const row = read.get(...keyValues(r.rk));
|
|
259
|
+
if (!row)
|
|
260
|
+
continue;
|
|
261
|
+
const canon = typeof row.at === 'string' ? canonicalStoreTimestamp(row.at) : null;
|
|
262
|
+
const phys = canon ? Math.min(Math.max(Date.parse(canon), 0), now, MAX_PHYS) : 0;
|
|
263
|
+
const uid = r.uid;
|
|
264
|
+
upsertRowMeta(db, {
|
|
265
|
+
tbl: def.table,
|
|
266
|
+
uid,
|
|
267
|
+
hlc: encodeHlc({ phys, ctr: 0, replica }),
|
|
268
|
+
fhlc: null,
|
|
269
|
+
origin: replica,
|
|
270
|
+
actor: null,
|
|
271
|
+
version: 0,
|
|
272
|
+
deleted: false,
|
|
273
|
+
keyJson: natural ? view.naturalKeyJson(def, r.rk) : null,
|
|
274
|
+
chash: view.chash(def, uid),
|
|
275
|
+
bfp: natural ? null : (view.liveBirthFp(def.table, uid) ?? null),
|
|
276
|
+
});
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
/** Set `table`'s sealed-row count in the ledger. */
|
|
280
|
+
function setLedger(db, table, live) {
|
|
281
|
+
db.prepare('INSERT INTO _sync_ledger (tbl, live) VALUES (?, ?) ON CONFLICT (tbl) DO UPDATE SET live = excluded.live').run(table, live);
|
|
282
|
+
}
|
|
283
|
+
/**
|
|
284
|
+
* Baseline `rows` and record it, in the caller's transaction: their meta,
|
|
285
|
+
* the ledger set to `count(*) + held`, and `baseline:<table>` commit (or roll
|
|
286
|
+
* back, or die with the process) together, so a crash mid-baseline leaves
|
|
287
|
+
* nothing half-written and the next run starts over.
|
|
288
|
+
*/
|
|
289
|
+
function baselineTable(db, scope, def, rows, replica, view, now) {
|
|
290
|
+
baselineRows(db, scope, def, rows, replica, view, now);
|
|
291
|
+
const count = db.prepare(`SELECT count(*) AS n FROM ${q(def.table)}`).get().n;
|
|
292
|
+
const held = db.prepare('SELECT held FROM _sync_ledger WHERE tbl = ?').get(def.table)?.held ?? 0;
|
|
293
|
+
setLedger(db, def.table, count + held);
|
|
294
|
+
const at = new Date(now).toISOString();
|
|
295
|
+
db.prepare('INSERT INTO _sync_meta (key, value, updated_at) VALUES (?, ?, ?) ' +
|
|
296
|
+
'ON CONFLICT(key) DO UPDATE SET value = excluded.value, updated_at = excluded.updated_at').run(`${BASELINE_KEY_PREFIX}${def.table}`, at, at);
|
|
297
|
+
}
|
|
298
|
+
/**
|
|
299
|
+
* Baseline one table's row meta (§1.2 "genesis of an existing row"; §1.6
|
|
300
|
+
* "one live meta row per live sync-set row"): every live row with a uid and
|
|
301
|
+
* no meta gets meta with its genesis HLC and no op, the ledger is set to
|
|
302
|
+
* `count(*) + held`, and `baseline:<table>` is recorded, atomically. The
|
|
303
|
+
* repair diff calls it for a table never baselined; T12342's first-enable
|
|
304
|
+
* init is meant to call it for every sync-set table, so row meta keeps one
|
|
305
|
+
* initializer.
|
|
306
|
+
*
|
|
307
|
+
* Runs in the caller's transaction when there is one, else in its own
|
|
308
|
+
* `BEGIN IMMEDIATE`.
|
|
309
|
+
*
|
|
310
|
+
* @param db - The store.
|
|
311
|
+
* @param scope - Its scope.
|
|
312
|
+
* @param table - A sync-set table with a uid column.
|
|
313
|
+
* @param replica - The replica the baseline meta names as origin.
|
|
314
|
+
* @param now - Wall milliseconds (the genesis HLC is clamped to it).
|
|
315
|
+
* @returns The rows baselined, or null when the table is not in the sync set.
|
|
316
|
+
*/
|
|
317
|
+
export function baselineRowMeta(db, scope, table, replica, now = Date.now()) {
|
|
318
|
+
const def = captureTableDef(db, scope, table);
|
|
319
|
+
if (!def)
|
|
320
|
+
return null;
|
|
321
|
+
if (!def.identity.includes(UID_COLUMN))
|
|
322
|
+
return null;
|
|
323
|
+
const run = (fn) => (db.isTransaction ? fn() : withImmediateTransaction(db, fn));
|
|
324
|
+
return run(() => {
|
|
325
|
+
const view = sealerRowView(db, scope);
|
|
326
|
+
const known = new Set(db.prepare('SELECT uid FROM _sync_row_meta WHERE tbl = ?').all(table).map((r) => r.uid));
|
|
327
|
+
const rows = [];
|
|
328
|
+
for (const r of db
|
|
329
|
+
.prepare(`SELECT x.${q(UID_COLUMN)} AS uid, ${repairImageSql(def, 'x').rk} AS rk FROM ${q(table)} x`)
|
|
330
|
+
.iterate()) {
|
|
331
|
+
const uid = r.uid ?? view.naturalUid(def, r.rk);
|
|
332
|
+
if (uid !== null && !known.has(uid))
|
|
333
|
+
rows.push({ uid, rk: r.rk });
|
|
334
|
+
}
|
|
335
|
+
baselineTable(db, scope, def, rows, replica, view, now);
|
|
336
|
+
return rows.length;
|
|
337
|
+
});
|
|
338
|
+
}
|
|
339
|
+
function resultOf(plan, frame, cleared, reason) {
|
|
340
|
+
return {
|
|
341
|
+
table: plan.table,
|
|
342
|
+
baselined: plan.baselined,
|
|
343
|
+
counts: {
|
|
344
|
+
inserts: plan.inserts.length,
|
|
345
|
+
updates: plan.updates.length,
|
|
346
|
+
deletes: plan.deletes.length,
|
|
347
|
+
baselinedRows: plan.unbaselined.length,
|
|
348
|
+
held: plan.held,
|
|
349
|
+
unidentified: plan.unidentified,
|
|
350
|
+
},
|
|
351
|
+
sample: {
|
|
352
|
+
inserts: plan.inserts.slice(0, REPAIR_SAMPLE_SIZE).map((r) => r.uid),
|
|
353
|
+
updates: plan.updates.slice(0, REPAIR_SAMPLE_SIZE).map((r) => r.uid),
|
|
354
|
+
deletes: plan.deletes.slice(0, REPAIR_SAMPLE_SIZE),
|
|
355
|
+
},
|
|
356
|
+
frame,
|
|
357
|
+
cleared,
|
|
358
|
+
reason,
|
|
359
|
+
};
|
|
360
|
+
}
|
|
361
|
+
/**
|
|
362
|
+
* Verify a repaired table and clear its suspect key (§4.4 verification). Runs
|
|
363
|
+
* in its own `BEGIN IMMEDIATE`.
|
|
364
|
+
*
|
|
365
|
+
* @returns Why the table stays suspect, or null when the key was cleared.
|
|
366
|
+
*/
|
|
367
|
+
function verifyAndClear(db, scope, table, mark, replica, now) {
|
|
368
|
+
return withImmediateTransaction(db, () => {
|
|
369
|
+
const def = captureTableDef(db, scope, table);
|
|
370
|
+
if (!def)
|
|
371
|
+
return 'left the sync set during the repair';
|
|
372
|
+
if (waiting(db, table) > 0)
|
|
373
|
+
return 'writes arrived during the repair: run it again';
|
|
374
|
+
const view = sealerRowView(db, scope);
|
|
375
|
+
const plan = planRepair(db, scope, table, view);
|
|
376
|
+
if (plan.skipped)
|
|
377
|
+
return plan.skipped;
|
|
378
|
+
if (plan.unidentified > 0) {
|
|
379
|
+
return `${plan.unidentified} row(s) without uid: run the identity fill first`;
|
|
380
|
+
}
|
|
381
|
+
const left = plan.inserts.length + plan.updates.length + plan.deletes.length;
|
|
382
|
+
if (left > 0)
|
|
383
|
+
return `the rescan still finds ${left} row(s) to repair`;
|
|
384
|
+
const count = db.prepare(`SELECT count(*) AS n FROM ${q(table)}`).get().n;
|
|
385
|
+
const ledger = db.prepare('SELECT live, held FROM _sync_ledger WHERE tbl = ?').get(table);
|
|
386
|
+
if (!plan.baselined) {
|
|
387
|
+
baselineTable(db, scope, def, plan.unbaselined, replica, view, now);
|
|
388
|
+
}
|
|
389
|
+
else if (!ledger) {
|
|
390
|
+
setLedger(db, table, count);
|
|
391
|
+
}
|
|
392
|
+
else if (ledger.live !== count + ledger.held) {
|
|
393
|
+
return `ledger ${ledger.live} differs from count ${count} + held ${ledger.held}`;
|
|
394
|
+
}
|
|
395
|
+
// A key re-marked while the repair ran carries a newer value: keep it.
|
|
396
|
+
const gone = db
|
|
397
|
+
.prepare('DELETE FROM _sync_meta WHERE key = ? AND value = ?')
|
|
398
|
+
.run(`suspect:${table}`, mark);
|
|
399
|
+
return gone.changes === 1 ? null : 'marked suspect again during the repair: run it again';
|
|
400
|
+
});
|
|
401
|
+
}
|
|
402
|
+
/**
|
|
403
|
+
* Seal what is pending, then run the repair diff over every suspect table
|
|
404
|
+
* (§4.4; S3d, T12987): emit each table's repair ops in a `repair` frame, seal
|
|
405
|
+
* them, then verify and clear the suspect key. The pending seal runs even
|
|
406
|
+
* when no table is suspect (the NEW-8 step before a migration pass). A dry
|
|
407
|
+
* run only plans.
|
|
408
|
+
*
|
|
409
|
+
* Prerequisites (§4.4): the sealer's preconditions hold, a replica is bound,
|
|
410
|
+
* the table's capture triggers are present, and no capture of the table is
|
|
411
|
+
* left waiting after the pending seal. Undo is not written for repair
|
|
412
|
+
* captures yet, so the repair refuses while `undo_enabled` is set.
|
|
413
|
+
*
|
|
414
|
+
* @param db - The store; must not be inside a transaction.
|
|
415
|
+
* @param opts - {@link RepairOptions}.
|
|
416
|
+
*/
|
|
417
|
+
export function repairSuspectTables(db, opts) {
|
|
418
|
+
const dryRun = opts.dryRun === true;
|
|
419
|
+
const env = opts.env ?? process.env;
|
|
420
|
+
const now = opts.now ?? Date.now;
|
|
421
|
+
if (!hasTable(db, '_sync_row_meta') || !hasTable(db, '_sync_meta')) {
|
|
422
|
+
return empty('sync schema not installed', dryRun);
|
|
423
|
+
}
|
|
424
|
+
const wanted = opts.tables ? new Set(opts.tables) : null;
|
|
425
|
+
const suspect = suspectTables(db).filter((t) => wanted === null || wanted.has(t));
|
|
426
|
+
if (dryRun) {
|
|
427
|
+
const view = sealerRowView(db, opts.scope);
|
|
428
|
+
return {
|
|
429
|
+
refused: null,
|
|
430
|
+
dryRun,
|
|
431
|
+
tables: suspect.map((t) => {
|
|
432
|
+
const plan = planRepair(db, opts.scope, t, view);
|
|
433
|
+
return resultOf(plan, null, false, plan.skipped ?? 'dry run');
|
|
434
|
+
}),
|
|
435
|
+
sealed: { txns: 0, ops: 0 },
|
|
436
|
+
};
|
|
437
|
+
}
|
|
438
|
+
const refused = sealPreconditions(db, env, opts.allowUnreleased === true);
|
|
439
|
+
if (refused)
|
|
440
|
+
return empty(refused, dryRun);
|
|
441
|
+
const replica = opts.replica ?? activeReplica(db, opts.scope)?.replicaId;
|
|
442
|
+
if (!replica)
|
|
443
|
+
return empty('no bound replica', dryRun);
|
|
444
|
+
const sealed = { txns: 0, ops: 0 };
|
|
445
|
+
const sealAll = () => {
|
|
446
|
+
for (;;) {
|
|
447
|
+
const r = sealPending(db, {
|
|
448
|
+
scope: opts.scope,
|
|
449
|
+
replica,
|
|
450
|
+
env,
|
|
451
|
+
allowUnreleased: opts.allowUnreleased === true,
|
|
452
|
+
now,
|
|
453
|
+
});
|
|
454
|
+
sealed.txns += r.txns;
|
|
455
|
+
sealed.ops += r.ops;
|
|
456
|
+
if (r.refused !== null || r.captures === 0 || r.pending.length > 0)
|
|
457
|
+
return;
|
|
458
|
+
}
|
|
459
|
+
};
|
|
460
|
+
// §4.4 prerequisite: sealing idle. Captured writes seal first (NEW-8),
|
|
461
|
+
// whether or not any table is suspect.
|
|
462
|
+
sealAll();
|
|
463
|
+
if (suspect.length === 0)
|
|
464
|
+
return { refused: null, dryRun, tables: [], sealed };
|
|
465
|
+
if (metaValue(db, 'undo_enabled') !== undefined) {
|
|
466
|
+
return {
|
|
467
|
+
refused: 'repair captures carry no undo yet: refused while undo_enabled is set',
|
|
468
|
+
dryRun,
|
|
469
|
+
tables: [],
|
|
470
|
+
sealed,
|
|
471
|
+
};
|
|
472
|
+
}
|
|
473
|
+
const results = [];
|
|
474
|
+
const written = [];
|
|
475
|
+
for (const table of suspect) {
|
|
476
|
+
const out = withImmediateTransaction(db, () => {
|
|
477
|
+
const mark = metaValue(db, `suspect:${table}`);
|
|
478
|
+
const plan = planRepair(db, opts.scope, table);
|
|
479
|
+
if (mark === undefined || plan.skipped !== null)
|
|
480
|
+
return { plan, frame: null, mark };
|
|
481
|
+
const def = captureTableDef(db, opts.scope, table);
|
|
482
|
+
return { plan, frame: def ? writeRepairFrame(db, def, plan) : null, mark };
|
|
483
|
+
});
|
|
484
|
+
if (out.mark === undefined)
|
|
485
|
+
continue; // cleared by someone else meanwhile
|
|
486
|
+
if (out.plan.skipped !== null) {
|
|
487
|
+
results.push(resultOf(out.plan, null, false, out.plan.skipped));
|
|
488
|
+
continue;
|
|
489
|
+
}
|
|
490
|
+
written.push({ plan: out.plan, frame: out.frame, mark: out.mark });
|
|
491
|
+
}
|
|
492
|
+
sealAll();
|
|
493
|
+
for (const w of written) {
|
|
494
|
+
const reason = verifyAndClear(db, opts.scope, w.plan.table, w.mark, replica, now());
|
|
495
|
+
results.push(resultOf(w.plan, w.frame, reason === null, reason));
|
|
496
|
+
}
|
|
497
|
+
return { refused: null, dryRun, tables: results, sealed };
|
|
498
|
+
}
|
|
499
|
+
//# sourceMappingURL=repair.js.map
|