@cleocode/core 2026.9.24 → 2026.9.26
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/admin/import-tasks.d.ts.map +1 -1
- package/dist/admin/import-tasks.js +5 -2
- package/dist/admin/import-tasks.js.map +1 -1
- package/dist/admin/import.d.ts.map +1 -1
- package/dist/admin/import.js +7 -2
- package/dist/admin/import.js.map +1 -1
- package/dist/audit-prune.d.ts +32 -0
- package/dist/audit-prune.d.ts.map +1 -1
- package/dist/audit-prune.js +37 -3
- package/dist/audit-prune.js.map +1 -1
- package/dist/build-provenance.json +2 -2
- package/dist/cloud/crypto.d.ts +1 -2
- package/dist/cloud/crypto.d.ts.map +1 -1
- package/dist/cloud/crypto.js +1 -11
- package/dist/cloud/crypto.js.map +1 -1
- package/dist/cloud/index.d.ts +1 -0
- package/dist/cloud/index.d.ts.map +1 -1
- package/dist/cloud/index.js +1 -0
- package/dist/cloud/index.js.map +1 -1
- package/dist/cloud/nexus-auth.d.ts +26 -1
- package/dist/cloud/nexus-auth.d.ts.map +1 -1
- package/dist/cloud/nexus-auth.js +61 -32
- package/dist/cloud/nexus-auth.js.map +1 -1
- package/dist/cloud/nexus-credentials.js +2 -2
- package/dist/cloud/nexus-credentials.js.map +1 -1
- package/dist/cloud/nexus-device.d.ts +809 -0
- package/dist/cloud/nexus-device.d.ts.map +1 -0
- package/dist/cloud/nexus-device.js +1680 -0
- package/dist/cloud/nexus-device.js.map +1 -0
- package/dist/cloud/nexus-enrol.d.ts +210 -0
- package/dist/cloud/nexus-enrol.d.ts.map +1 -0
- package/dist/cloud/nexus-enrol.js +1023 -0
- package/dist/cloud/nexus-enrol.js.map +1 -0
- package/dist/cloud/nexus-link.d.ts +3 -0
- package/dist/cloud/nexus-link.d.ts.map +1 -1
- package/dist/cloud/nexus-link.js +38 -4
- package/dist/cloud/nexus-link.js.map +1 -1
- package/dist/cloud/signing.d.ts +20 -0
- package/dist/cloud/signing.d.ts.map +1 -1
- package/dist/cloud/signing.js +14 -0
- package/dist/cloud/signing.js.map +1 -1
- package/dist/cloud/uuidv7.d.ts +9 -0
- package/dist/cloud/uuidv7.d.ts.map +1 -0
- package/dist/cloud/uuidv7.js +19 -0
- package/dist/cloud/uuidv7.js.map +1 -0
- package/dist/crypto/credentials.d.ts +61 -0
- package/dist/crypto/credentials.d.ts.map +1 -1
- package/dist/crypto/credentials.js +154 -58
- package/dist/crypto/credentials.js.map +1 -1
- package/dist/decide/bench/index.d.ts +1 -1
- package/dist/decide/bench/index.d.ts.map +1 -1
- package/dist/decide/bench/index.js +1 -1
- package/dist/decide/bench/index.js.map +1 -1
- package/dist/decide/bench/operation.d.ts +1 -1
- package/dist/decide/bench/operation.d.ts.map +1 -1
- package/dist/decide/bench/operation.js +1 -1
- package/dist/decide/bench/operation.js.map +1 -1
- package/dist/decide/bench/profiles.d.ts +50 -22
- package/dist/decide/bench/profiles.d.ts.map +1 -1
- package/dist/decide/bench/profiles.js +103 -59
- package/dist/decide/bench/profiles.js.map +1 -1
- package/dist/decide/bench/report.d.ts.map +1 -1
- package/dist/decide/bench/report.js +6 -1
- package/dist/decide/bench/report.js.map +1 -1
- package/dist/decide/bench/runner.d.ts +6 -1
- package/dist/decide/bench/runner.d.ts.map +1 -1
- package/dist/decide/bench/runner.js +1 -0
- package/dist/decide/bench/runner.js.map +1 -1
- package/dist/decide/client.d.ts.map +1 -1
- package/dist/decide/client.js +11 -5
- package/dist/decide/client.js.map +1 -1
- package/dist/decide/jev-wire.d.ts +31 -1
- package/dist/decide/jev-wire.d.ts.map +1 -1
- package/dist/decide/jev-wire.js +61 -7
- package/dist/decide/jev-wire.js.map +1 -1
- package/dist/docs/export-document.js +12907 -10622
- package/dist/docs/export-document.js.map +3 -3
- package/dist/doctor/dependency-cycles.d.ts +41 -0
- package/dist/doctor/dependency-cycles.d.ts.map +1 -0
- package/dist/doctor/dependency-cycles.js +39 -0
- package/dist/doctor/dependency-cycles.js.map +1 -0
- package/dist/doctor/index.d.ts +2 -0
- package/dist/doctor/index.d.ts.map +1 -1
- package/dist/doctor/index.js +1 -0
- package/dist/doctor/index.js.map +1 -1
- package/dist/doctor/orphan-ac-bindings.d.ts +64 -0
- package/dist/doctor/orphan-ac-bindings.d.ts.map +1 -0
- package/dist/doctor/orphan-ac-bindings.js +59 -0
- package/dist/doctor/orphan-ac-bindings.js.map +1 -0
- package/dist/doctor/projects.d.ts.map +1 -1
- package/dist/doctor/projects.js +43 -29
- package/dist/doctor/projects.js.map +1 -1
- package/dist/doctor/row-identity.d.ts +42 -0
- package/dist/doctor/row-identity.d.ts.map +1 -0
- package/dist/doctor/row-identity.js +151 -0
- package/dist/doctor/row-identity.js.map +1 -0
- package/dist/doctor/twin-collapse.d.ts +58 -2
- package/dist/doctor/twin-collapse.d.ts.map +1 -1
- package/dist/doctor/twin-collapse.js +212 -14
- package/dist/doctor/twin-collapse.js.map +1 -1
- package/dist/error-catalog.d.ts.map +1 -1
- package/dist/error-catalog.js +4 -0
- package/dist/error-catalog.js.map +1 -1
- package/dist/error-registry.d.ts.map +1 -1
- package/dist/error-registry.js +8 -0
- package/dist/error-registry.js.map +1 -1
- package/dist/lifecycle/verification/satisfies-validator.d.ts.map +1 -1
- package/dist/lifecycle/verification/satisfies-validator.js +10 -0
- package/dist/lifecycle/verification/satisfies-validator.js.map +1 -1
- package/dist/llm/plugin-facade.js +17767 -15482
- package/dist/llm/plugin-facade.js.map +3 -3
- package/dist/memory/index.d.ts.map +1 -1
- package/dist/memory/index.js +19 -10
- package/dist/memory/index.js.map +1 -1
- package/dist/memory/manifest-identity.d.ts +171 -0
- package/dist/memory/manifest-identity.d.ts.map +1 -0
- package/dist/memory/manifest-identity.js +345 -0
- package/dist/memory/manifest-identity.js.map +1 -0
- package/dist/memory/mental-model-queue.d.ts +14 -4
- package/dist/memory/mental-model-queue.d.ts.map +1 -1
- package/dist/memory/mental-model-queue.js +64 -35
- package/dist/memory/mental-model-queue.js.map +1 -1
- package/dist/memory/pipeline-manifest-sqlite.d.ts +47 -5
- package/dist/memory/pipeline-manifest-sqlite.d.ts.map +1 -1
- package/dist/memory/pipeline-manifest-sqlite.js +130 -14
- package/dist/memory/pipeline-manifest-sqlite.js.map +1 -1
- package/dist/memory/retrieval/observe.d.ts.map +1 -1
- package/dist/memory/retrieval/observe.js +2 -0
- package/dist/memory/retrieval/observe.js.map +1 -1
- package/dist/memory/transcript-scanner.js +1 -1
- package/dist/nexus/deps.d.ts.map +1 -1
- package/dist/nexus/deps.js +7 -14
- package/dist/nexus/deps.js.map +1 -1
- package/dist/nexus/discover.d.ts.map +1 -1
- package/dist/nexus/discover.js +6 -9
- package/dist/nexus/discover.js.map +1 -1
- package/dist/nexus/git-state.d.ts.map +1 -1
- package/dist/nexus/git-state.js +10 -1
- package/dist/nexus/git-state.js.map +1 -1
- package/dist/nexus/projects-clean.d.ts.map +1 -1
- package/dist/nexus/projects-clean.js +22 -11
- package/dist/nexus/projects-clean.js.map +1 -1
- package/dist/nexus/projects-scan.d.ts.map +1 -1
- package/dist/nexus/projects-scan.js +8 -13
- package/dist/nexus/projects-scan.js.map +1 -1
- package/dist/nexus/query.d.ts.map +1 -1
- package/dist/nexus/query.js +4 -12
- package/dist/nexus/query.js.map +1 -1
- package/dist/nexus/registry-roots.d.ts +5 -2
- package/dist/nexus/registry-roots.d.ts.map +1 -1
- package/dist/nexus/registry-roots.js +8 -10
- package/dist/nexus/registry-roots.js.map +1 -1
- package/dist/nexus/registry.d.ts +18 -0
- package/dist/nexus/registry.d.ts.map +1 -1
- package/dist/nexus/registry.js +37 -16
- package/dist/nexus/registry.js.map +1 -1
- package/dist/nexus/workspace.d.ts.map +1 -1
- package/dist/nexus/workspace.js +54 -4
- package/dist/nexus/workspace.js.map +1 -1
- package/dist/orchestrate/lifecycle-ops.js +1 -1
- package/dist/orchestrate/lifecycle-ops.js.map +1 -1
- package/dist/orchestrate/pivot.d.ts.map +1 -1
- package/dist/orchestrate/pivot.js +4 -2
- package/dist/orchestrate/pivot.js.map +1 -1
- package/dist/orchestrate/query-ops.d.ts.map +1 -1
- package/dist/orchestrate/query-ops.js +3 -3
- 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/orchestrate/worktree-complete.d.ts.map +1 -1
- package/dist/orchestrate/worktree-complete.js +40 -2
- package/dist/orchestrate/worktree-complete.js.map +1 -1
- package/dist/orchestration/index.js +1 -1
- package/dist/orchestration/index.js.map +1 -1
- package/dist/orchestration/lead-rollup.d.ts.map +1 -1
- package/dist/orchestration/lead-rollup.js +3 -3
- package/dist/orchestration/lead-rollup.js.map +1 -1
- package/dist/orchestration/parallel.js +1 -1
- package/dist/orchestration/parallel.js.map +1 -1
- package/dist/orchestration/spawn-prompt.d.ts +26 -0
- package/dist/orchestration/spawn-prompt.d.ts.map +1 -1
- package/dist/orchestration/spawn-prompt.js +62 -91
- package/dist/orchestration/spawn-prompt.js.map +1 -1
- package/dist/orchestration/wave-topic.d.ts +4 -2
- package/dist/orchestration/wave-topic.d.ts.map +1 -1
- package/dist/orchestration/wave-topic.js +6 -4
- package/dist/orchestration/wave-topic.js.map +1 -1
- package/dist/orchestration/waves.d.ts +2 -1
- package/dist/orchestration/waves.d.ts.map +1 -1
- package/dist/orchestration/waves.js +4 -3
- package/dist/orchestration/waves.js.map +1 -1
- package/dist/phases/index.d.ts.map +1 -1
- package/dist/phases/index.js +4 -2
- package/dist/phases/index.js.map +1 -1
- package/dist/release/ci-evidence.d.ts +190 -0
- package/dist/release/ci-evidence.d.ts.map +1 -1
- package/dist/release/ci-evidence.js +436 -4
- package/dist/release/ci-evidence.js.map +1 -1
- package/dist/sdk/validator-ac-pull.d.ts.map +1 -1
- package/dist/sdk/validator-ac-pull.js +2 -1
- package/dist/sdk/validator-ac-pull.js.map +1 -1
- package/dist/selfimprove/fix-gen.js +12807 -10522
- package/dist/selfimprove/fix-gen.js.map +3 -3
- package/dist/sentient/cross-project-hygiene.d.ts +5 -0
- package/dist/sentient/cross-project-hygiene.d.ts.map +1 -1
- package/dist/sentient/cross-project-hygiene.js +7 -1
- package/dist/sentient/cross-project-hygiene.js.map +1 -1
- package/dist/sentient/propose-tick.d.ts.map +1 -1
- package/dist/sentient/propose-tick.js +2 -3
- package/dist/sentient/propose-tick.js.map +1 -1
- package/dist/sentient/stage-drift-tick.d.ts.map +1 -1
- package/dist/sentient/stage-drift-tick.js +2 -3
- package/dist/sentient/stage-drift-tick.js.map +1 -1
- package/dist/session/engine-ops.d.ts.map +1 -1
- package/dist/session/engine-ops.js +77 -49
- package/dist/session/engine-ops.js.map +1 -1
- package/dist/sessions/focus-state-store.d.ts +69 -23
- package/dist/sessions/focus-state-store.d.ts.map +1 -1
- package/dist/sessions/focus-state-store.js +113 -27
- 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.map +1 -1
- package/dist/sessions/index.js +24 -13
- package/dist/sessions/index.js.map +1 -1
- package/dist/sessions/terminal-identity.d.ts +165 -17
- package/dist/sessions/terminal-identity.d.ts.map +1 -1
- package/dist/sessions/terminal-identity.js +341 -32
- package/dist/sessions/terminal-identity.js.map +1 -1
- package/dist/skills/manifests/research.js +2 -0
- package/dist/skills/manifests/research.js.map +1 -1
- package/dist/skills/orchestrator/startup.js +2 -2
- package/dist/skills/orchestrator/startup.js.map +1 -1
- package/dist/skills/orchestrator/validator.d.ts.map +1 -1
- package/dist/skills/orchestrator/validator.js +9 -2
- package/dist/skills/orchestrator/validator.js.map +1 -1
- package/dist/skills/validation.d.ts +4 -1
- package/dist/skills/validation.d.ts.map +1 -1
- package/dist/skills/validation.js +11 -3
- package/dist/skills/validation.js.map +1 -1
- package/dist/snapshot/index.d.ts +4 -0
- package/dist/snapshot/index.d.ts.map +1 -1
- package/dist/snapshot/index.js +50 -3
- package/dist/snapshot/index.js.map +1 -1
- package/dist/spawn/branch-lock.d.ts +111 -7
- package/dist/spawn/branch-lock.d.ts.map +1 -1
- package/dist/spawn/branch-lock.js +296 -8
- package/dist/spawn/branch-lock.js.map +1 -1
- package/dist/store/ac-binding-prune.d.ts +144 -0
- package/dist/store/ac-binding-prune.d.ts.map +1 -0
- package/dist/store/ac-binding-prune.js +293 -0
- package/dist/store/ac-binding-prune.js.map +1 -0
- package/dist/store/agent-registry-store.d.ts.map +1 -1
- package/dist/store/agent-registry-store.js +3 -2
- package/dist/store/agent-registry-store.js.map +1 -1
- package/dist/store/backup-sidecar.d.ts +85 -2
- package/dist/store/backup-sidecar.d.ts.map +1 -1
- package/dist/store/backup-sidecar.js +173 -1
- package/dist/store/backup-sidecar.js.map +1 -1
- package/dist/store/conduit-sqlite.d.ts.map +1 -1
- package/dist/store/conduit-sqlite.js +3 -2
- package/dist/store/conduit-sqlite.js.map +1 -1
- package/dist/store/credential-transfer.d.ts.map +1 -1
- package/dist/store/credential-transfer.js +3 -0
- package/dist/store/credential-transfer.js.map +1 -1
- package/dist/store/db-helpers.d.ts +32 -13
- package/dist/store/db-helpers.d.ts.map +1 -1
- package/dist/store/db-helpers.js +144 -40
- package/dist/store/db-helpers.js.map +1 -1
- package/dist/store/dependency-cycles.d.ts +164 -0
- package/dist/store/dependency-cycles.d.ts.map +1 -0
- package/dist/store/dependency-cycles.js +360 -0
- package/dist/store/dependency-cycles.js.map +1 -0
- package/dist/store/display-id-alias.d.ts +585 -0
- package/dist/store/display-id-alias.d.ts.map +1 -0
- package/dist/store/display-id-alias.js +1538 -0
- package/dist/store/display-id-alias.js.map +1 -0
- package/dist/store/dual-scope-db.d.ts.map +1 -1
- package/dist/store/dual-scope-db.js +48 -0
- package/dist/store/dual-scope-db.js.map +1 -1
- package/dist/store/exodus/migrate.d.ts.map +1 -1
- package/dist/store/exodus/migrate.js +8 -1
- package/dist/store/exodus/migrate.js.map +1 -1
- package/dist/store/exodus/reconcile.d.ts.map +1 -1
- package/dist/store/exodus/reconcile.js +7 -2
- package/dist/store/exodus/reconcile.js.map +1 -1
- package/dist/store/exodus/recovery.d.ts.map +1 -1
- package/dist/store/exodus/recovery.js +20 -1
- package/dist/store/exodus/recovery.js.map +1 -1
- package/dist/store/global-salt.d.ts +35 -0
- package/dist/store/global-salt.d.ts.map +1 -1
- package/dist/store/global-salt.js +136 -16
- package/dist/store/global-salt.js.map +1 -1
- package/dist/store/legacy-tasks-lineage.d.ts.map +1 -1
- package/dist/store/legacy-tasks-lineage.js +19 -2
- package/dist/store/legacy-tasks-lineage.js.map +1 -1
- package/dist/store/migration-sqlite.d.ts.map +1 -1
- package/dist/store/migration-sqlite.js +19 -11
- package/dist/store/migration-sqlite.js.map +1 -1
- package/dist/store/portable-bundle-scan.d.ts.map +1 -1
- package/dist/store/portable-bundle-scan.js +6 -0
- package/dist/store/portable-bundle-scan.js.map +1 -1
- package/dist/store/row-identity-flag.d.ts +26 -0
- package/dist/store/row-identity-flag.d.ts.map +1 -0
- package/dist/store/row-identity-flag.js +31 -0
- package/dist/store/row-identity-flag.js.map +1 -0
- package/dist/store/row-identity-registry.d.ts +61 -0
- package/dist/store/row-identity-registry.d.ts.map +1 -0
- package/dist/store/row-identity-registry.js +206 -0
- package/dist/store/row-identity-registry.js.map +1 -0
- package/dist/store/row-identity.d.ts +480 -0
- package/dist/store/row-identity.d.ts.map +1 -0
- package/dist/store/row-identity.js +1509 -0
- package/dist/store/row-identity.js.map +1 -0
- package/dist/store/safety-data-accessor.d.ts +5 -2
- package/dist/store/safety-data-accessor.d.ts.map +1 -1
- package/dist/store/safety-data-accessor.js +9 -2
- package/dist/store/safety-data-accessor.js.map +1 -1
- package/dist/store/schema/attachments.d.ts +1 -1
- package/dist/store/schema/audit.d.ts +4 -4
- package/dist/store/schema/background-jobs.d.ts +1 -1
- package/dist/store/schema/cleo-global/nexus.d.ts +1 -1
- package/dist/store/schema/cleo-global/skills.d.ts +2 -2
- package/dist/store/schema/cleo-project/audit.d.ts +4 -4
- package/dist/store/schema/cleo-project/docs.d.ts +1 -1
- package/dist/store/schema/cleo-project/lifecycle.d.ts +4 -4
- package/dist/store/schema/cleo-project/nexus-graph.d.ts +3 -3
- package/dist/store/schema/cleo-project/provenance-commits.d.ts +2 -2
- package/dist/store/schema/cleo-project/provenance-rest.d.ts +3 -3
- package/dist/store/schema/cleo-project/runtime.d.ts +3 -3
- package/dist/store/schema/cleo-project/tasks-core-batch2.d.ts +87 -1
- package/dist/store/schema/cleo-project/tasks-core-batch2.d.ts.map +1 -1
- package/dist/store/schema/cleo-project/tasks-core-batch2.js +35 -0
- package/dist/store/schema/cleo-project/tasks-core-batch2.js.map +1 -1
- package/dist/store/schema/cleo-project/tasks-core.d.ts +183 -7
- package/dist/store/schema/cleo-project/tasks-core.d.ts.map +1 -1
- package/dist/store/schema/cleo-project/tasks-core.js +52 -1
- package/dist/store/schema/cleo-project/tasks-core.js.map +1 -1
- package/dist/store/schema/cleo-shared/brain.d.ts +6 -6
- package/dist/store/schema/lifecycle.d.ts +4 -4
- package/dist/store/schema/manifest.d.ts +1 -1
- package/dist/store/schema/memory-schema.d.ts +5 -5
- package/dist/store/schema/nexus-schema.d.ts +3 -3
- package/dist/store/schema/provenance/releases.d.ts +1 -1
- package/dist/store/schema/skills-schema.d.ts +2 -2
- package/dist/store/schema/tasks.d.ts +6 -6
- package/dist/store/session-store.d.ts +63 -3
- package/dist/store/session-store.d.ts.map +1 -1
- package/dist/store/session-store.js +121 -8
- package/dist/store/session-store.js.map +1 -1
- package/dist/store/split-brain-import.d.ts +2 -14
- package/dist/store/split-brain-import.d.ts.map +1 -1
- package/dist/store/split-brain-import.js +40 -19
- package/dist/store/split-brain-import.js.map +1 -1
- package/dist/store/sqlite-data-accessor.d.ts +326 -2
- package/dist/store/sqlite-data-accessor.d.ts.map +1 -1
- package/dist/store/sqlite-data-accessor.js +782 -49
- package/dist/store/sqlite-data-accessor.js.map +1 -1
- package/dist/store/sync/clock-store.d.ts +67 -0
- package/dist/store/sync/clock-store.d.ts.map +1 -0
- package/dist/store/sync/clock-store.js +117 -0
- package/dist/store/sync/clock-store.js.map +1 -0
- package/dist/store/sync/flags.d.ts +51 -0
- package/dist/store/sync/flags.d.ts.map +1 -0
- package/dist/store/sync/flags.js +81 -0
- package/dist/store/sync/flags.js.map +1 -0
- package/dist/store/sync/hlc.d.ts +115 -0
- package/dist/store/sync/hlc.d.ts.map +1 -0
- package/dist/store/sync/hlc.js +172 -0
- package/dist/store/sync/hlc.js.map +1 -0
- package/dist/store/sync/index.d.ts +20 -0
- package/dist/store/sync/index.d.ts.map +1 -0
- package/dist/store/sync/index.js +20 -0
- package/dist/store/sync/index.js.map +1 -0
- package/dist/store/sync/replica-registry.d.ts +85 -0
- package/dist/store/sync/replica-registry.d.ts.map +1 -0
- package/dist/store/sync/replica-registry.js +147 -0
- package/dist/store/sync/replica-registry.js.map +1 -0
- package/dist/store/sync/replica.d.ts +181 -0
- package/dist/store/sync/replica.d.ts.map +1 -0
- package/dist/store/sync/replica.js +305 -0
- package/dist/store/sync/replica.js.map +1 -0
- package/dist/store/sync/schema.d.ts +68 -0
- package/dist/store/sync/schema.d.ts.map +1 -0
- package/dist/store/sync/schema.js +130 -0
- package/dist/store/sync/schema.js.map +1 -0
- package/dist/store/sync/skew-hold.d.ts +71 -0
- package/dist/store/sync/skew-hold.d.ts.map +1 -0
- package/dist/store/sync/skew-hold.js +89 -0
- package/dist/store/sync/skew-hold.js.map +1 -0
- package/dist/store/table-classification.d.ts +10 -8
- package/dist/store/table-classification.d.ts.map +1 -1
- package/dist/store/table-classification.js +93 -25
- package/dist/store/table-classification.js.map +1 -1
- package/dist/store/tasks-sqlite.d.ts.map +1 -1
- package/dist/store/tasks-sqlite.js +23 -3
- package/dist/store/tasks-sqlite.js.map +1 -1
- package/dist/store/twin-collapse.d.ts +113 -2
- package/dist/store/twin-collapse.d.ts.map +1 -1
- package/dist/store/twin-collapse.js +247 -19
- package/dist/store/twin-collapse.js.map +1 -1
- package/dist/store/umbrella-data-accessor.d.ts +5 -2
- package/dist/store/umbrella-data-accessor.d.ts.map +1 -1
- package/dist/store/umbrella-data-accessor.js +9 -2
- package/dist/store/umbrella-data-accessor.js.map +1 -1
- package/dist/store/validation-schemas.d.ts +241 -49
- package/dist/store/validation-schemas.d.ts.map +1 -1
- package/dist/system/health.d.ts +2 -0
- package/dist/system/health.d.ts.map +1 -1
- package/dist/system/health.js +57 -0
- package/dist/system/health.js.map +1 -1
- package/dist/system/project-health.d.ts +9 -2
- package/dist/system/project-health.d.ts.map +1 -1
- package/dist/system/project-health.js +8 -3
- package/dist/system/project-health.js.map +1 -1
- package/dist/task-work/index.d.ts.map +1 -1
- package/dist/task-work/index.js +9 -6
- package/dist/task-work/index.js.map +1 -1
- package/dist/tasks/ac-coverage-gate.d.ts.map +1 -1
- package/dist/tasks/ac-coverage-gate.js +3 -0
- package/dist/tasks/ac-coverage-gate.js.map +1 -1
- package/dist/tasks/ac-table.d.ts +35 -7
- package/dist/tasks/ac-table.d.ts.map +1 -1
- package/dist/tasks/ac-table.js +119 -14
- package/dist/tasks/ac-table.js.map +1 -1
- package/dist/tasks/add.d.ts.map +1 -1
- package/dist/tasks/add.js +48 -2
- package/dist/tasks/add.js.map +1 -1
- package/dist/tasks/analyze.d.ts.map +1 -1
- package/dist/tasks/analyze.js +3 -2
- package/dist/tasks/analyze.js.map +1 -1
- package/dist/tasks/backfill-child-projections.js +47 -6
- package/dist/tasks/backfill-child-projections.js.map +1 -1
- package/dist/tasks/complete.d.ts.map +1 -1
- package/dist/tasks/complete.js +6 -1
- package/dist/tasks/complete.js.map +1 -1
- package/dist/tasks/completion-evaluation.d.ts.map +1 -1
- package/dist/tasks/completion-evaluation.js +3 -0
- package/dist/tasks/completion-evaluation.js.map +1 -1
- package/dist/tasks/evidence.d.ts +19 -1
- package/dist/tasks/evidence.d.ts.map +1 -1
- package/dist/tasks/evidence.js +93 -21
- package/dist/tasks/evidence.js.map +1 -1
- package/dist/tasks/infer-add-params.js +1 -1
- package/dist/tasks/infer-add-params.js.map +1 -1
- package/dist/tasks/task-context.d.ts.map +1 -1
- package/dist/tasks/task-context.js +3 -1
- package/dist/tasks/task-context.js.map +1 -1
- package/dist/tasks/task-import.d.ts.map +1 -1
- package/dist/tasks/task-import.js +11 -3
- package/dist/tasks/task-import.js.map +1 -1
- package/dist/tasks/task-next.d.ts +5 -1
- package/dist/tasks/task-next.d.ts.map +1 -1
- package/dist/tasks/task-next.js +7 -2
- package/dist/tasks/task-next.js.map +1 -1
- package/dist/validation/compliance.d.ts +5 -1
- package/dist/validation/compliance.d.ts.map +1 -1
- package/dist/validation/compliance.js +24 -3
- package/dist/validation/compliance.js.map +1 -1
- package/dist/validation/engine-ops.d.ts.map +1 -1
- package/dist/validation/engine-ops.js +3 -2
- package/dist/validation/engine-ops.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/protocol-common.d.ts +47 -2
- package/dist/validation/protocol-common.d.ts.map +1 -1
- package/dist/validation/protocol-common.js +86 -21
- package/dist/validation/protocol-common.js.map +1 -1
- package/dist/workgraph/scaffold-apply.d.ts.map +1 -1
- package/dist/workgraph/scaffold-apply.js +14 -5
- package/dist/workgraph/scaffold-apply.js.map +1 -1
- package/migrations/README.md +12 -0
- package/migrations/drizzle-cleo-project/20260928120000_t12341-row-uids/migration.sql +169 -0
- package/migrations/drizzle-cleo-project/20260930160000_t12886-dependency-cycle-guard/migration.sql +76 -0
- package/migrations/drizzle-cleo-project/20260930160000_t12886-dependency-cycle-guard/revert.sql +7 -0
- package/migrations/sync-journal/20260929140000_t12342-sync-clock/migration.sql +42 -0
- package/package.json +13 -13
- package/templates/CLEO-INJECTION.md +2 -2
- package/templates/CLEO-REFERENCE.md +5 -1
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `cleo doctor` view of row uids (T12341; spec `t12341-uid-scheme` §5, §6).
|
|
3
|
+
*
|
|
4
|
+
* Reads the project store read-only, WITHOUT binding a domain, and reports:
|
|
5
|
+
*
|
|
6
|
+
* - rows still without a uid or birth fingerprint (an older build wrote them;
|
|
7
|
+
* the next open by this build fills them);
|
|
8
|
+
* - rows the uid recipes flag: an unknown birth (uid timestamp 0), a natural
|
|
9
|
+
* row whose key references a missing row (`dangling:` uid), and the reversed
|
|
10
|
+
* twin of a symmetric relation stored both ways (a duplicate to drop).
|
|
11
|
+
*
|
|
12
|
+
* @module
|
|
13
|
+
* @task T12341
|
|
14
|
+
*/
|
|
15
|
+
import { existsSync } from 'node:fs';
|
|
16
|
+
import { resolveDualScopeDbPath } from '../store/dual-scope-db.js';
|
|
17
|
+
import { openCleoDbSnapshot } from '../store/open-cleo-db.js';
|
|
18
|
+
import { BIRTH_FP_COLUMN, missingRowIdentitySchema, ROW_IDENTITY, readRowIdentityHealReceipt, rowIdentityFindings, UID_COLUMN, } from '../store/row-identity.js';
|
|
19
|
+
import { ROW_UID_FILL_FLAG, rowUidFillEnabled } from '../store/row-identity-flag.js';
|
|
20
|
+
/**
|
|
21
|
+
* The `row_identity` check of the default `cleo doctor` report: `warning` when
|
|
22
|
+
* rows lack a uid or fingerprint, or when the recipes flag rows.
|
|
23
|
+
*
|
|
24
|
+
* @param projectRoot - Project directory.
|
|
25
|
+
* @returns The check row.
|
|
26
|
+
* @task T12341
|
|
27
|
+
*/
|
|
28
|
+
export function rowIdentityDoctorCheck(projectRoot) {
|
|
29
|
+
const dbPath = resolveDualScopeDbPath('project', projectRoot);
|
|
30
|
+
if (!existsSync(dbPath)) {
|
|
31
|
+
return { check: 'row_identity', status: 'ok', message: 'no project store yet' };
|
|
32
|
+
}
|
|
33
|
+
// T12878: the identity SCHEMA is checked whatever the fill flag; every open
|
|
34
|
+
// heals it and leaves a receipt, shown here.
|
|
35
|
+
let missing = [];
|
|
36
|
+
let receipt;
|
|
37
|
+
try {
|
|
38
|
+
const snap = openCleoDbSnapshot(dbPath, { readOnly: true });
|
|
39
|
+
try {
|
|
40
|
+
missing = missingRowIdentitySchema(snap.db);
|
|
41
|
+
receipt = readRowIdentityHealReceipt(snap.db);
|
|
42
|
+
}
|
|
43
|
+
finally {
|
|
44
|
+
snap.close();
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
// Unreadable here: the fill branch below reports it when the flag is on.
|
|
49
|
+
}
|
|
50
|
+
const schemaNote = missing.length > 0
|
|
51
|
+
? `identity schema incomplete (${missing.join(', ')}); the next open by a released build heals it`
|
|
52
|
+
: receipt
|
|
53
|
+
? `identity schema healed on ${receipt.at} (${receipt.objects.join(', ')})`
|
|
54
|
+
: '';
|
|
55
|
+
const schemaDetails = { missingSchema: missing, healReceipt: receipt ?? null };
|
|
56
|
+
if (!rowUidFillEnabled()) {
|
|
57
|
+
const off = `row uids are off (set ${ROW_UID_FILL_FLAG}=1 to enable them)`;
|
|
58
|
+
return {
|
|
59
|
+
check: 'row_identity',
|
|
60
|
+
status: missing.length > 0 ? 'warning' : 'ok',
|
|
61
|
+
message: schemaNote ? `${off}; ${schemaNote}` : off,
|
|
62
|
+
details: schemaDetails,
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
let unfilled;
|
|
66
|
+
let findings;
|
|
67
|
+
let held = {};
|
|
68
|
+
try {
|
|
69
|
+
const snap = openCleoDbSnapshot(dbPath, { readOnly: true });
|
|
70
|
+
try {
|
|
71
|
+
const has = (column, table) => (snap.db.prepare('SELECT 1 FROM pragma_table_info(?) WHERE name = ?').get(table, column) ??
|
|
72
|
+
null) !== null;
|
|
73
|
+
unfilled = {};
|
|
74
|
+
for (const spec of ROW_IDENTITY.project) {
|
|
75
|
+
if (!has(UID_COLUMN, spec.table))
|
|
76
|
+
continue;
|
|
77
|
+
const fp = spec.kind === 'minted' && has(BIRTH_FP_COLUMN, spec.table);
|
|
78
|
+
const row = snap.db
|
|
79
|
+
.prepare(`SELECT count(*) AS n FROM "${spec.table}" WHERE ${UID_COLUMN} IS NULL${fp ? ` OR ${BIRTH_FP_COLUMN} IS NULL` : ''}`)
|
|
80
|
+
.get();
|
|
81
|
+
if (row.n > 0)
|
|
82
|
+
unfilled[spec.table] = row.n;
|
|
83
|
+
}
|
|
84
|
+
findings = rowIdentityFindings(snap.db, 'project');
|
|
85
|
+
held = heldRowCounts(snap.db);
|
|
86
|
+
}
|
|
87
|
+
finally {
|
|
88
|
+
snap.close();
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
catch (error) {
|
|
92
|
+
return {
|
|
93
|
+
check: 'row_identity',
|
|
94
|
+
status: 'warning',
|
|
95
|
+
message: `row uid state unreadable: ${error instanceof Error ? error.message : String(error)}`,
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
const list = (counts) => Object.entries(counts)
|
|
99
|
+
.map(([table, n]) => `${table} (${n})`)
|
|
100
|
+
.join(', ');
|
|
101
|
+
const heldTotal = Object.values(held).reduce((a, n) => a + n, 0);
|
|
102
|
+
const parts = [
|
|
103
|
+
missing.length > 0 ? schemaNote : '',
|
|
104
|
+
// A row the store refused (invalid) needs a person; the rest wait for sync.
|
|
105
|
+
(held.invalid ?? 0) > 0 ? `received rows refused as invalid: ${held.invalid}` : '',
|
|
106
|
+
Object.keys(unfilled).length > 0
|
|
107
|
+
? `rows without a uid or birth fingerprint, filled at the next open: ${list(unfilled)}`
|
|
108
|
+
: '',
|
|
109
|
+
Object.keys(findings.unknownBirth).length > 0
|
|
110
|
+
? `rows with an unknown birth (uid timestamp 0): ${list(findings.unknownBirth)}`
|
|
111
|
+
: '',
|
|
112
|
+
Object.keys(findings.danglingRefs).length > 0
|
|
113
|
+
? `rows referencing a missing row (dangling uid): ${list(findings.danglingRefs)}`
|
|
114
|
+
: '',
|
|
115
|
+
Object.keys(findings.mirrorEdges).length > 0
|
|
116
|
+
? `symmetric relations stored in both directions (duplicates to drop): ${list(findings.mirrorEdges)}`
|
|
117
|
+
: '',
|
|
118
|
+
].filter(Boolean);
|
|
119
|
+
const details = { dbPath, unfilled, findings, held, ...schemaDetails };
|
|
120
|
+
const uids = heldTotal > 0
|
|
121
|
+
? `every row has a uid; rows held for sync: ${list(held)}`
|
|
122
|
+
: 'every row has a uid';
|
|
123
|
+
const ok = receipt ? `${uids}; ${schemaNote}` : uids;
|
|
124
|
+
return parts.length > 0
|
|
125
|
+
? { check: 'row_identity', status: 'warning', message: parts.join('; '), details }
|
|
126
|
+
: { check: 'row_identity', status: 'ok', message: ok, details };
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Received rows held in the identity quarantine, per reason (`invalid`,
|
|
130
|
+
* `ref-pending`, `uid-collision`, ...). Read-only; empty when the table is
|
|
131
|
+
* absent (T12801 review).
|
|
132
|
+
*
|
|
133
|
+
* @param db - Connection on the project store (read-only is fine).
|
|
134
|
+
* @returns Count per reason.
|
|
135
|
+
* @task T12801
|
|
136
|
+
*/
|
|
137
|
+
export function heldRowCounts(db) {
|
|
138
|
+
const has = db
|
|
139
|
+
.prepare("SELECT 1 AS x FROM sqlite_master WHERE type = 'table' AND name = 'tasks_identity_quarantine'")
|
|
140
|
+
.get();
|
|
141
|
+
if (!has)
|
|
142
|
+
return {};
|
|
143
|
+
const out = {};
|
|
144
|
+
for (const r of db
|
|
145
|
+
.prepare('SELECT reason, count(*) AS n FROM tasks_identity_quarantine GROUP BY reason ORDER BY reason')
|
|
146
|
+
.all()) {
|
|
147
|
+
out[r.reason] = r.n;
|
|
148
|
+
}
|
|
149
|
+
return out;
|
|
150
|
+
}
|
|
151
|
+
//# sourceMappingURL=row-identity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"row-identity.js","sourceRoot":"","sources":["../../src/doctor/row-identity.ts"],"names":[],"mappings":"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"}
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
* @module
|
|
32
32
|
* @task T12535
|
|
33
33
|
*/
|
|
34
|
-
import { type TwinCollapseReceipt, type TwinCollapseRecoveryPlan, type TwinCollapseRecoveryReceipt, type TwinCollapseRecoveryRollback, type TwinCollapseStatus } from '../store/twin-collapse.js';
|
|
34
|
+
import { type TwinCollapseReceipt, type TwinCollapseRecoveryPlan, type TwinCollapseRecoveryReceipt, type TwinCollapseRecoveryRollback, type TwinCollapseSnapshotRelease, type TwinCollapseSnapshotReleasePlan, type TwinCollapseSnapshotRepoint, type TwinCollapseStatus } from '../store/twin-collapse.js';
|
|
35
35
|
import { type OwnerStoreRewriteOptions } from '../store/worktree-isolation-guard.js';
|
|
36
36
|
/** Preflight of the snapshot a pending initial collapse needs. */
|
|
37
37
|
export interface TwinCollapsePreflight {
|
|
@@ -87,12 +87,18 @@ export interface TwinCollapseRecoveryResult {
|
|
|
87
87
|
readonly plan: TwinCollapseRecoveryPlan;
|
|
88
88
|
/** The receipt of this apply, or `null` (dry run, or nothing to recover). */
|
|
89
89
|
readonly receipt: TwinCollapseRecoveryReceipt | null;
|
|
90
|
+
/** Markers re-pointed at a moved store's snapshot (T12788), or `null`/absent. */
|
|
91
|
+
readonly repointed?: TwinCollapseSnapshotRepoint | null;
|
|
90
92
|
}
|
|
91
93
|
/** Options of {@link recoverTwinCollapse} and {@link rollbackTwinCollapse}. */
|
|
92
94
|
export interface TwinCollapseRecoveryOptions extends OwnerStoreRewriteOptions {
|
|
93
95
|
/** Plan only; the live store is opened read-only. */
|
|
94
96
|
readonly dryRun?: boolean;
|
|
97
|
+
/** Pin an unpinned snapshot (its sidecar only) before applying; without it the apply refuses. */
|
|
98
|
+
readonly pinSnapshot?: boolean;
|
|
95
99
|
}
|
|
100
|
+
/** Audit log of markers re-pointed at a moved store's snapshot (T12788). */
|
|
101
|
+
export declare const TWIN_COLLAPSE_REPOINT_AUDIT_FILE = "twin-collapse-repoint.jsonl";
|
|
96
102
|
/**
|
|
97
103
|
* Recover the twin values a 2026.9.21 collapse dropped or replaced (T12727):
|
|
98
104
|
* `cleo doctor twin-collapse --recover [--dry-run]`.
|
|
@@ -104,7 +110,11 @@ export interface TwinCollapseRecoveryOptions extends OwnerStoreRewriteOptions {
|
|
|
104
110
|
* opens the live store read-only and writes nothing. An apply re-plans under
|
|
105
111
|
* the write lock, writes in one transaction and records a receipt that
|
|
106
112
|
* `--rollback` undoes; a second apply finds nothing to do. A store never
|
|
107
|
-
* collapsed has nothing to recover.
|
|
113
|
+
* collapsed has nothing to recover. An unpinned snapshot is reported by the
|
|
114
|
+
* plan, and an apply refuses it unless `pinSnapshot` pins it first. A moved
|
|
115
|
+
* store's snapshot is found by file name in its own backup directory; an
|
|
116
|
+
* apply re-points the markers and appends a row to
|
|
117
|
+
* `.cleo/audit/twin-collapse-repoint.jsonl` (T12788). No network.
|
|
108
118
|
*
|
|
109
119
|
* @param projectRoot - Project directory.
|
|
110
120
|
* @param options - `cwd` the command runs from (a worktree needs
|
|
@@ -126,6 +136,52 @@ export declare function recoverTwinCollapse(projectRoot: string, options: TwinCo
|
|
|
126
136
|
* @task T12727
|
|
127
137
|
*/
|
|
128
138
|
export declare function rollbackTwinCollapse(projectRoot: string, id: string, options: OwnerStoreRewriteOptions): Promise<TwinCollapseRecoveryRollback>;
|
|
139
|
+
/** Audit log of snapshot releases, under the project's `.cleo/audit/`. */
|
|
140
|
+
export declare const TWIN_COLLAPSE_RELEASE_AUDIT_FILE = "twin-collapse-release.jsonl";
|
|
141
|
+
/** Result of {@link releaseProjectTwinCollapseSnapshot}. */
|
|
142
|
+
export interface TwinCollapseSnapshotReleaseResult {
|
|
143
|
+
/** The project store. */
|
|
144
|
+
readonly dbPath: string;
|
|
145
|
+
/** `true`: only planned, nothing written. */
|
|
146
|
+
readonly dryRun: boolean;
|
|
147
|
+
/** What a release would do, and why it may or may not. */
|
|
148
|
+
readonly plan: TwinCollapseSnapshotReleasePlan;
|
|
149
|
+
/** The release, or `null` on a dry run. */
|
|
150
|
+
readonly release: TwinCollapseSnapshotRelease | null;
|
|
151
|
+
/** The audit log the release was recorded in, or `null` on a dry run. */
|
|
152
|
+
readonly auditFile: string | null;
|
|
153
|
+
}
|
|
154
|
+
/** Options of {@link releaseProjectTwinCollapseSnapshot}. */
|
|
155
|
+
export interface TwinCollapseSnapshotReleaseOptions extends OwnerStoreRewriteOptions {
|
|
156
|
+
/** Plan only; the live store is opened read-only. */
|
|
157
|
+
readonly dryRun?: boolean;
|
|
158
|
+
/**
|
|
159
|
+
* The owner's decision to release, which the calling agent obtained through
|
|
160
|
+
* its ask tool. The CLI never prompts; without it nothing is written.
|
|
161
|
+
*/
|
|
162
|
+
readonly confirm?: boolean;
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Release a pre-collapse snapshot (T12767):
|
|
166
|
+
* `cleo doctor twin-collapse --release-snapshot <id> [--dry-run] --confirm`.
|
|
167
|
+
*
|
|
168
|
+
* Allowed only after a verified recovery or a no-recovery-needed check (see
|
|
169
|
+
* `planSnapshotRelease`): the recovery plan against the snapshot must find
|
|
170
|
+
* nothing left to recover. A release clears the markers' reference to the
|
|
171
|
+
* snapshot and its sidecar pin, and appends a row to
|
|
172
|
+
* `.cleo/audit/twin-collapse-release.jsonl`. The snapshot file is never
|
|
173
|
+
* touched; it rotates normally afterwards. A dry run reports the bytes
|
|
174
|
+
* reclaimed once it rotates and writes nothing.
|
|
175
|
+
*
|
|
176
|
+
* @param projectRoot - Project directory.
|
|
177
|
+
* @param id - The snapshot: backup id (`migration-<timestamp>`), file name or path.
|
|
178
|
+
* @param options - `cwd`, `confirmOwnerStore`, `dryRun`, `confirm`.
|
|
179
|
+
* @returns The plan and, for a release, what was released.
|
|
180
|
+
* @throws {CleoError} `E_TWIN_COLLAPSE_RELEASE` (not confirmed, or not
|
|
181
|
+
* releasable) and the owner-store guard's errors; nothing is written.
|
|
182
|
+
* @task T12767
|
|
183
|
+
*/
|
|
184
|
+
export declare function releaseProjectTwinCollapseSnapshot(projectRoot: string, id: string, options: TwinCollapseSnapshotReleaseOptions): Promise<TwinCollapseSnapshotReleaseResult>;
|
|
129
185
|
/** One row of the default `cleo doctor` report (the `DoctorCheck` shape). */
|
|
130
186
|
export interface TwinCollapseDoctorCheck {
|
|
131
187
|
readonly check: 'twin_collapse';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"twin-collapse.d.ts","sourceRoot":"","sources":["../../src/doctor/twin-collapse.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;
|
|
1
|
+
{"version":3,"file":"twin-collapse.d.ts","sourceRoot":"","sources":["../../src/doctor/twin-collapse.ts"],"names":[],"mappings":"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"}
|
|
@@ -31,12 +31,15 @@
|
|
|
31
31
|
* @module
|
|
32
32
|
* @task T12535
|
|
33
33
|
*/
|
|
34
|
-
import { existsSync, statSync } from 'node:fs';
|
|
35
|
-
import { dirname } from 'node:path';
|
|
34
|
+
import { appendFileSync, closeSync, existsSync, mkdirSync, openSync, readSync, realpathSync, statSync, } from 'node:fs';
|
|
35
|
+
import { basename, dirname, join, resolve } from 'node:path';
|
|
36
|
+
import { ExitCode } from '@cleocode/contracts';
|
|
37
|
+
import { CleoError } from '../errors.js';
|
|
38
|
+
import { readMarkerSnapshots } from '../store/backup-sidecar.js';
|
|
36
39
|
import { getDualScopeNativeDb, openDualScopeDb, resolveDualScopeDbPath, } from '../store/dual-scope-db.js';
|
|
37
40
|
import { openCleoDbSnapshot } from '../store/open-cleo-db.js';
|
|
38
41
|
import { planMigrationSnapshot } from '../store/pre-repair-snapshot.js';
|
|
39
|
-
import { applyTwinCollapseRecovery, collapseTwinTables, inspectTwinCollapse, missingSnapshot, planTwinCollapseRecovery, rollbackTwinCollapseRecovery, } from '../store/twin-collapse.js';
|
|
42
|
+
import { applyTwinCollapseRecovery, collapseTwinTables, E_TWIN_COLLAPSE_RECOVER, E_TWIN_COLLAPSE_RELEASE, inspectTwinCollapse, missingSnapshot, pinRecoverySnapshot, planSnapshotRelease, planTwinCollapseRecovery, releaseRefused, releaseTwinCollapseSnapshot, rollbackTwinCollapseRecovery, unpinnedSnapshot, } from '../store/twin-collapse.js';
|
|
40
43
|
import { assertOwnerStoreRewriteConfirmed, } from '../store/worktree-isolation-guard.js';
|
|
41
44
|
/** Why `backupDir` (or a parent) cannot hold a snapshot, or `null`. */
|
|
42
45
|
function backupDirProblem(backupDir) {
|
|
@@ -101,16 +104,75 @@ export async function retryTwinCollapse(projectRoot, options) {
|
|
|
101
104
|
const handle = await openDualScopeDb('project', projectRoot);
|
|
102
105
|
return collapseTwinTables(getDualScopeNativeDb(handle), handle.dbPath);
|
|
103
106
|
}
|
|
107
|
+
/** A path with symlinks resolved as far as it exists (macOS `/var` is `/private/var`). */
|
|
108
|
+
function realDir(dir) {
|
|
109
|
+
try {
|
|
110
|
+
return realpathSync(dir);
|
|
111
|
+
}
|
|
112
|
+
catch {
|
|
113
|
+
return resolve(dir);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
/** Audit log of markers re-pointed at a moved store's snapshot (T12788). */
|
|
117
|
+
export const TWIN_COLLAPSE_REPOINT_AUDIT_FILE = 'twin-collapse-repoint.jsonl';
|
|
118
|
+
/** The SQLite file header every snapshot starts with. */
|
|
119
|
+
const SQLITE_HEADER = 'SQLite format 3\u0000';
|
|
120
|
+
/** Whether `path` is a migration backup that starts with the SQLite header. */
|
|
121
|
+
function looksLikeStoreSnapshot(path) {
|
|
122
|
+
if (!/\.migration-/.test(basename(path)))
|
|
123
|
+
return false;
|
|
124
|
+
let fd;
|
|
125
|
+
try {
|
|
126
|
+
fd = openSync(path, 'r');
|
|
127
|
+
const header = Buffer.alloc(SQLITE_HEADER.length);
|
|
128
|
+
return (readSync(fd, header, 0, header.length, 0) === header.length &&
|
|
129
|
+
header.toString('latin1') === SQLITE_HEADER);
|
|
130
|
+
}
|
|
131
|
+
catch {
|
|
132
|
+
return false;
|
|
133
|
+
}
|
|
134
|
+
finally {
|
|
135
|
+
if (fd !== undefined)
|
|
136
|
+
closeSync(fd);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* The snapshot file to read for a marker path. The recovery reads it and
|
|
141
|
+
* `--pin-snapshot` writes a sidecar next to it, so it must be this store's own
|
|
142
|
+
* backup (T12772): a path in `<db dir>/backups/sqlite/` is used as is; a path
|
|
143
|
+
* elsewhere (the store moved: `/mnt` → `/home`, Linux → Mac) resolves to
|
|
144
|
+
* `<db dir>/backups/sqlite/<basename>` when that file is a migration backup
|
|
145
|
+
* starting with the SQLite header (T12788). Anything else is refused.
|
|
146
|
+
*
|
|
147
|
+
* @returns The file to use, and the marker path it replaces (`null` when the same).
|
|
148
|
+
*/
|
|
149
|
+
function resolveStoreSnapshot(snapshot, dbPath, code = E_TWIN_COLLAPSE_RECOVER) {
|
|
150
|
+
const expected = join(dirname(dbPath), 'backups', 'sqlite');
|
|
151
|
+
if (realDir(dirname(snapshot)) === realDir(expected))
|
|
152
|
+
return { path: snapshot, movedFrom: null };
|
|
153
|
+
const local = join(expected, basename(snapshot));
|
|
154
|
+
if (existsSync(local) && looksLikeStoreSnapshot(local))
|
|
155
|
+
return { path: local, movedFrom: snapshot };
|
|
156
|
+
throw new CleoError(ExitCode.VALIDATION_ERROR, `${code}: the marker names ${snapshot}, outside this store's backup directory ${expected}` +
|
|
157
|
+
(existsSync(local)
|
|
158
|
+
? `, and ${local} is not a migration snapshot`
|
|
159
|
+
: `, and ${local} does not exist`) +
|
|
160
|
+
'; refusing to read or pin it, nothing was changed', {
|
|
161
|
+
fix: `Copy that snapshot into ${expected} (same file name) and re-run; the markers are re-pointed at it.`,
|
|
162
|
+
details: { field: 'snapshot', expected, actual: snapshot },
|
|
163
|
+
});
|
|
164
|
+
}
|
|
104
165
|
/** Open the live store's snapshot read-only around `fn`; `null` when none is recorded. */
|
|
105
|
-
function withRecoverySnapshot(live, fn) {
|
|
166
|
+
function withRecoverySnapshot(live, dbPath, fn) {
|
|
106
167
|
const probe = planTwinCollapseRecovery(live, null);
|
|
107
168
|
if (probe.snapshot === null)
|
|
108
169
|
return fn(probe); // never collapsed: nothing to recover
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
170
|
+
const { path } = resolveStoreSnapshot(probe.snapshot, dbPath);
|
|
171
|
+
if (!existsSync(path))
|
|
172
|
+
throw missingSnapshot(path);
|
|
173
|
+
const snap = openCleoDbSnapshot(path, { readOnly: true, applyPragmas: false });
|
|
112
174
|
try {
|
|
113
|
-
return fn(planTwinCollapseRecovery(live, snap.db));
|
|
175
|
+
return fn(planTwinCollapseRecovery(live, snap.db, { snapshotPath: path }));
|
|
114
176
|
}
|
|
115
177
|
finally {
|
|
116
178
|
snap.close();
|
|
@@ -127,7 +189,11 @@ function withRecoverySnapshot(live, fn) {
|
|
|
127
189
|
* opens the live store read-only and writes nothing. An apply re-plans under
|
|
128
190
|
* the write lock, writes in one transaction and records a receipt that
|
|
129
191
|
* `--rollback` undoes; a second apply finds nothing to do. A store never
|
|
130
|
-
* collapsed has nothing to recover.
|
|
192
|
+
* collapsed has nothing to recover. An unpinned snapshot is reported by the
|
|
193
|
+
* plan, and an apply refuses it unless `pinSnapshot` pins it first. A moved
|
|
194
|
+
* store's snapshot is found by file name in its own backup directory; an
|
|
195
|
+
* apply re-points the markers and appends a row to
|
|
196
|
+
* `.cleo/audit/twin-collapse-repoint.jsonl` (T12788). No network.
|
|
131
197
|
*
|
|
132
198
|
* @param projectRoot - Project directory.
|
|
133
199
|
* @param options - `cwd` the command runs from (a worktree needs
|
|
@@ -145,19 +211,51 @@ export async function recoverTwinCollapse(projectRoot, options) {
|
|
|
145
211
|
if (dryRun) {
|
|
146
212
|
const live = openCleoDbSnapshot(dbPath, { readOnly: true });
|
|
147
213
|
try {
|
|
148
|
-
return withRecoverySnapshot(live.db, (plan) => ({
|
|
214
|
+
return withRecoverySnapshot(live.db, dbPath, (plan) => ({
|
|
215
|
+
dbPath,
|
|
216
|
+
dryRun,
|
|
217
|
+
plan,
|
|
218
|
+
receipt: null,
|
|
219
|
+
}));
|
|
149
220
|
}
|
|
150
221
|
finally {
|
|
151
222
|
live.close();
|
|
152
223
|
}
|
|
153
224
|
}
|
|
154
225
|
assertOwnerStoreRewriteConfirmed('doctor twin-collapse --recover', dbPath, options);
|
|
226
|
+
// Checked before the store opens (a collapse run during the open may pin
|
|
227
|
+
// it), and only when there is something to recover (T12772).
|
|
228
|
+
const ro = openCleoDbSnapshot(dbPath, { readOnly: true });
|
|
229
|
+
let probe;
|
|
230
|
+
try {
|
|
231
|
+
probe = withRecoverySnapshot(ro.db, dbPath, (plan) => plan);
|
|
232
|
+
}
|
|
233
|
+
finally {
|
|
234
|
+
ro.close();
|
|
235
|
+
}
|
|
236
|
+
if (probe.snapshot !== null &&
|
|
237
|
+
probe.changes &&
|
|
238
|
+
!probe.snapshotPinned &&
|
|
239
|
+
!(options.pinSnapshot === true && pinRecoverySnapshot(probe.snapshot)))
|
|
240
|
+
throw unpinnedSnapshot(probe.snapshot);
|
|
155
241
|
const handle = await openDualScopeDb('project', projectRoot);
|
|
156
242
|
const live = getDualScopeNativeDb(handle);
|
|
157
|
-
|
|
243
|
+
const auditFile = join(dirname(dbPath), 'audit', TWIN_COLLAPSE_REPOINT_AUDIT_FILE);
|
|
244
|
+
return withRecoverySnapshot(live, dbPath, (preview) => ({
|
|
158
245
|
dbPath,
|
|
159
246
|
dryRun,
|
|
160
|
-
...applyTwinCollapseRecovery(live, preview)
|
|
247
|
+
...applyTwinCollapseRecovery(live, preview, (repoint) => {
|
|
248
|
+
mkdirSync(dirname(auditFile), { recursive: true });
|
|
249
|
+
appendFileSync(auditFile, `${JSON.stringify({
|
|
250
|
+
timestamp: new Date().toISOString(),
|
|
251
|
+
operation: 'doctor twin-collapse --recover',
|
|
252
|
+
from: repoint.from,
|
|
253
|
+
to: repoint.to,
|
|
254
|
+
markers: repoint.markers,
|
|
255
|
+
cwd: resolve(options.cwd),
|
|
256
|
+
pid: process.pid,
|
|
257
|
+
})}\n`);
|
|
258
|
+
}),
|
|
161
259
|
}));
|
|
162
260
|
}
|
|
163
261
|
/**
|
|
@@ -178,6 +276,93 @@ export async function rollbackTwinCollapse(projectRoot, id, options) {
|
|
|
178
276
|
const handle = await openDualScopeDb('project', projectRoot);
|
|
179
277
|
return rollbackTwinCollapseRecovery(getDualScopeNativeDb(handle), id);
|
|
180
278
|
}
|
|
279
|
+
/** Audit log of snapshot releases, under the project's `.cleo/audit/`. */
|
|
280
|
+
export const TWIN_COLLAPSE_RELEASE_AUDIT_FILE = 'twin-collapse-release.jsonl';
|
|
281
|
+
/**
|
|
282
|
+
* Release a pre-collapse snapshot (T12767):
|
|
283
|
+
* `cleo doctor twin-collapse --release-snapshot <id> [--dry-run] --confirm`.
|
|
284
|
+
*
|
|
285
|
+
* Allowed only after a verified recovery or a no-recovery-needed check (see
|
|
286
|
+
* `planSnapshotRelease`): the recovery plan against the snapshot must find
|
|
287
|
+
* nothing left to recover. A release clears the markers' reference to the
|
|
288
|
+
* snapshot and its sidecar pin, and appends a row to
|
|
289
|
+
* `.cleo/audit/twin-collapse-release.jsonl`. The snapshot file is never
|
|
290
|
+
* touched; it rotates normally afterwards. A dry run reports the bytes
|
|
291
|
+
* reclaimed once it rotates and writes nothing.
|
|
292
|
+
*
|
|
293
|
+
* @param projectRoot - Project directory.
|
|
294
|
+
* @param id - The snapshot: backup id (`migration-<timestamp>`), file name or path.
|
|
295
|
+
* @param options - `cwd`, `confirmOwnerStore`, `dryRun`, `confirm`.
|
|
296
|
+
* @returns The plan and, for a release, what was released.
|
|
297
|
+
* @throws {CleoError} `E_TWIN_COLLAPSE_RELEASE` (not confirmed, or not
|
|
298
|
+
* releasable) and the owner-store guard's errors; nothing is written.
|
|
299
|
+
* @task T12767
|
|
300
|
+
*/
|
|
301
|
+
export async function releaseProjectTwinCollapseSnapshot(projectRoot, id, options) {
|
|
302
|
+
const dryRun = options.dryRun === true;
|
|
303
|
+
const dbPath = resolveDualScopeDbPath('project', projectRoot);
|
|
304
|
+
if (!existsSync(dbPath))
|
|
305
|
+
throw new Error(`no project store at ${dbPath}`);
|
|
306
|
+
// This store's own snapshot only (T12772); a moved store's by file name (T12788).
|
|
307
|
+
const withSnapshot = (live, fn) => {
|
|
308
|
+
const recorded = planSnapshotRelease(live, id, null).snapshot;
|
|
309
|
+
if (recorded === null)
|
|
310
|
+
return fn(null, {});
|
|
311
|
+
const { path } = resolveStoreSnapshot(recorded, dbPath, E_TWIN_COLLAPSE_RELEASE);
|
|
312
|
+
if (!existsSync(path))
|
|
313
|
+
return fn(null, { snapshotPath: path });
|
|
314
|
+
const snap = openCleoDbSnapshot(path, { readOnly: true, applyPragmas: false });
|
|
315
|
+
try {
|
|
316
|
+
return fn(snap.db, { snapshotPath: path });
|
|
317
|
+
}
|
|
318
|
+
finally {
|
|
319
|
+
snap.close();
|
|
320
|
+
}
|
|
321
|
+
};
|
|
322
|
+
if (dryRun) {
|
|
323
|
+
const live = openCleoDbSnapshot(dbPath, { readOnly: true });
|
|
324
|
+
try {
|
|
325
|
+
const plan = withSnapshot(live.db, (snap, at) => planSnapshotRelease(live.db, id, snap, at));
|
|
326
|
+
return { dbPath, dryRun, plan, release: null, auditFile: null };
|
|
327
|
+
}
|
|
328
|
+
finally {
|
|
329
|
+
live.close();
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
if (options.confirm !== true)
|
|
333
|
+
throw new CleoError(ExitCode.VALIDATION_ERROR, `${E_TWIN_COLLAPSE_RELEASE}: releasing ${id} needs the owner's decision (--confirm); nothing was changed`, {
|
|
334
|
+
fix: `cleo doctor twin-collapse --release-snapshot ${id} --dry-run # show the plan, ask the owner, then add --confirm`,
|
|
335
|
+
details: { field: 'confirm', expected: true, actual: false },
|
|
336
|
+
});
|
|
337
|
+
assertOwnerStoreRewriteConfirmed('doctor twin-collapse --release-snapshot', dbPath, options);
|
|
338
|
+
const handle = await openDualScopeDb('project', projectRoot);
|
|
339
|
+
const live = getDualScopeNativeDb(handle);
|
|
340
|
+
const auditFile = join(dirname(dbPath), 'audit', TWIN_COLLAPSE_RELEASE_AUDIT_FILE);
|
|
341
|
+
return withSnapshot(live, (snap, at) => {
|
|
342
|
+
let plan = planSnapshotRelease(live, id, snap, at);
|
|
343
|
+
if (plan.basis === null)
|
|
344
|
+
throw releaseRefused(id, plan);
|
|
345
|
+
const audit = (row) => {
|
|
346
|
+
mkdirSync(dirname(auditFile), { recursive: true });
|
|
347
|
+
appendFileSync(auditFile, `${JSON.stringify({
|
|
348
|
+
timestamp: row.releasedAt,
|
|
349
|
+
operation: 'doctor twin-collapse --release-snapshot',
|
|
350
|
+
snapshot: row.snapshot,
|
|
351
|
+
movedFrom: row.movedFrom,
|
|
352
|
+
basis: row.basis,
|
|
353
|
+
bytes: row.bytes,
|
|
354
|
+
markers: row.markers,
|
|
355
|
+
receipts: row.receipts,
|
|
356
|
+
confirmedBy: 'owner (--confirm)',
|
|
357
|
+
cwd: resolve(options.cwd),
|
|
358
|
+
pid: process.pid,
|
|
359
|
+
})}\n`);
|
|
360
|
+
};
|
|
361
|
+
const release = releaseTwinCollapseSnapshot(live, id, snap, audit, at);
|
|
362
|
+
plan = { ...plan, basis: release.basis };
|
|
363
|
+
return { dbPath, dryRun, plan, release, auditFile };
|
|
364
|
+
});
|
|
365
|
+
}
|
|
181
366
|
/**
|
|
182
367
|
* The `twin_collapse` check of the default `cleo doctor` report: `error` for a
|
|
183
368
|
* failed collapse or one whose snapshot cannot be written, `warning` for a
|
|
@@ -199,7 +384,16 @@ export function twinCollapseDoctorCheck(projectRoot) {
|
|
|
199
384
|
message: `twin collapse state unreadable: ${error instanceof Error ? error.message : String(error)}`,
|
|
200
385
|
};
|
|
201
386
|
}
|
|
202
|
-
|
|
387
|
+
// T12770: rotation keeps every migration backup while a marker is unreadable.
|
|
388
|
+
const unreadableMarkers = report.storeExists
|
|
389
|
+
? readMarkerSnapshots(join(dirname(report.dbPath), 'backups', 'sqlite')).unreadable
|
|
390
|
+
: [];
|
|
391
|
+
const details = {
|
|
392
|
+
dbPath: report.dbPath,
|
|
393
|
+
pairs: report.pairs,
|
|
394
|
+
preflight: report.preflight,
|
|
395
|
+
unreadableMarkers,
|
|
396
|
+
};
|
|
203
397
|
const failed = report.pairs.filter((p) => p.state === 'failed');
|
|
204
398
|
if (failed.length > 0 || report.preflight?.ok === false) {
|
|
205
399
|
const first = failed[0]?.failure;
|
|
@@ -230,7 +424,8 @@ export function twinCollapseDoctorCheck(projectRoot) {
|
|
|
230
424
|
conflicted.length > 0 ||
|
|
231
425
|
unguarded.length > 0 ||
|
|
232
426
|
unpinned.length > 0 ||
|
|
233
|
-
missing.length > 0
|
|
427
|
+
missing.length > 0 ||
|
|
428
|
+
unreadableMarkers.length > 0) {
|
|
234
429
|
return {
|
|
235
430
|
check: 'twin_collapse',
|
|
236
431
|
status: 'warning',
|
|
@@ -250,6 +445,9 @@ export function twinCollapseDoctorCheck(projectRoot) {
|
|
|
250
445
|
unpinned.length > 0
|
|
251
446
|
? `the pre-collapse snapshot of ${unpinned.map((p) => `${p.table} (${p.snapshotPath})`).join(', ')} is not pinned yet; the next open pins it so rotation never deletes it`
|
|
252
447
|
: '',
|
|
448
|
+
unreadableMarkers.length > 0
|
|
449
|
+
? `the twin-collapse marker ${unreadableMarkers.join(', ')} cannot be read, so backup rotation keeps every migration backup in .cleo/backups/sqlite until it is repaired`
|
|
450
|
+
: '',
|
|
253
451
|
missing.length > 0
|
|
254
452
|
? `the pre-collapse snapshot of ${missing.map((p) => `${p.table} (${p.snapshotPath})`).join(', ')} is missing: the store before the collapse can no longer be recovered from it`
|
|
255
453
|
: '',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"twin-collapse.js","sourceRoot":"","sources":["../../src/doctor/twin-collapse.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"twin-collapse.js","sourceRoot":"","sources":["../../src/doctor/twin-collapse.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"error-catalog.d.ts","sourceRoot":"","sources":["../src/error-catalog.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAExD;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,4CAA4C;IAC5C,IAAI,EAAE,MAAM,CAAC;IACb,yDAAyD;IACzD,IAAI,EAAE,MAAM,CAAC;IACb,oDAAoD;IACpD,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,sCAAsC;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,kEAAkE;IAClE,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,0CAA0C;IAC1C,UAAU,EAAE,MAAM,CAAC;IACnB,iCAAiC;IACjC,WAAW,EAAE,OAAO,CAAC;IACrB,+CAA+C;IAC/C,QAAQ,EAAE,MAAM,CAAC;CAClB;AAeD;;GAEG;AACH,eAAO,MAAM,aAAa,EAAE,WAAW,CAAC,MAAM,EAAE,eAAe,
|
|
1
|
+
{"version":3,"file":"error-catalog.d.ts","sourceRoot":"","sources":["../src/error-catalog.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAExD;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,4CAA4C;IAC5C,IAAI,EAAE,MAAM,CAAC;IACb,yDAAyD;IACzD,IAAI,EAAE,MAAM,CAAC;IACb,oDAAoD;IACpD,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,sCAAsC;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,kEAAkE;IAClE,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,0CAA0C;IAC1C,UAAU,EAAE,MAAM,CAAC;IACnB,iCAAiC;IACjC,WAAW,EAAE,OAAO,CAAC;IACrB,+CAA+C;IAC/C,QAAQ,EAAE,MAAM,CAAC;CAClB;AAeD;;GAEG;AACH,eAAO,MAAM,aAAa,EAAE,WAAW,CAAC,MAAM,EAAE,eAAe,CAioC9D,CAAC;AAEF;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS,CAE5E;AAED;;GAEG;AACH,wBAAgB,4BAA4B,CAAC,QAAQ,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS,CAK1F;AAED;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,eAAe,EAAE,CAE1D"}
|
package/dist/error-catalog.js
CHANGED
|
@@ -120,6 +120,10 @@ export const ERROR_CATALOG = new Map([
|
|
|
120
120
|
ExitCode.SESSION_UNBOUND,
|
|
121
121
|
def(ExitCode.SESSION_UNBOUND, 'SESSION_UNBOUND', 'CONTRACT', 'No session is bound to this caller', 428, true, 'E_SESSION_UNBOUND', "Bind a session: run 'cleo session start --scope global --name \"<name>\"', 'cleo session resume <id>', or set CLEO_SESSION_ID=<id>."),
|
|
122
122
|
],
|
|
123
|
+
[
|
|
124
|
+
ExitCode.TASK_RENAMED,
|
|
125
|
+
def(ExitCode.TASK_RENAMED, 'TASK_RENAMED', 'CONFLICT', 'Task was re-numbered by sync', 409, true, 'E_TASK_RENAMED', "The task you addressed now has another id (a display-id collision re-numbered it). Re-read it with 'cleo show <new id>' and retry against that id."),
|
|
126
|
+
],
|
|
123
127
|
[
|
|
124
128
|
ExitCode.WORKTREE_LOCKED,
|
|
125
129
|
def(ExitCode.WORKTREE_LOCKED, 'WORKTREE_LOCKED', 'CONFLICT', 'Task worktree is locked by a live holder', 409, true, 'E_WORKTREE_LOCKED', "Another spawn holds this task's worktree. Attach with 'cleo orchestrate spawn <id> --resume', or wait until the holder exits or its heartbeat goes stale."),
|