@cleocode/core 2026.9.24 → 2026.9.25
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/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/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/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 +17181 -15536
- package/dist/docs/export-document.js.map +3 -3
- 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 +31 -0
- package/dist/doctor/row-identity.d.ts.map +1 -0
- package/dist/doctor/row-identity.js +93 -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/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 +17045 -15400
- 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/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/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/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 +17049 -15404
- 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/skills/manifests/research.js +2 -0
- package/dist/skills/manifests/research.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/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 +17 -11
- package/dist/store/db-helpers.d.ts.map +1 -1
- package/dist/store/db-helpers.js +61 -38
- package/dist/store/db-helpers.js.map +1 -1
- package/dist/store/display-id-alias.d.ts +529 -0
- package/dist/store/display-id-alias.d.ts.map +1 -0
- package/dist/store/display-id-alias.js +1063 -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 +21 -0
- package/dist/store/dual-scope-db.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/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/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 +198 -0
- package/dist/store/row-identity-registry.js.map +1 -0
- package/dist/store/row-identity.d.ts +390 -0
- package/dist/store/row-identity.d.ts.map +1 -0
- package/dist/store/row-identity.js +1240 -0
- package/dist/store/row-identity.js.map +1 -0
- package/dist/store/safety-data-accessor.d.ts +2 -0
- package/dist/store/safety-data-accessor.d.ts.map +1 -1
- package/dist/store/safety-data-accessor.js +4 -0
- 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/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 +4 -19
- package/dist/store/split-brain-import.js.map +1 -1
- package/dist/store/sqlite-data-accessor.d.ts +279 -2
- package/dist/store/sqlite-data-accessor.d.ts.map +1 -1
- package/dist/store/sqlite-data-accessor.js +544 -44
- 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 +9 -1
- 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 +2 -0
- package/dist/store/umbrella-data-accessor.d.ts.map +1 -1
- package/dist/store/umbrella-data-accessor.js +4 -0
- 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.map +1 -1
- package/dist/system/health.js +3 -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/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/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.map +1 -1
- package/dist/tasks/evidence.js +14 -3
- package/dist/tasks/evidence.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/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/migrations/README.md +12 -0
- package/migrations/drizzle-cleo-project/20260928120000_t12341-row-uids/migration.sql +169 -0
- package/migrations/sync-journal/20260929140000_t12342-sync-clock/migration.sql +42 -0
- package/package.json +13 -13
- package/templates/CLEO-REFERENCE.md +4 -0
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Evidence ↔ AC binding pruning — the single write path that removes
|
|
3
|
+
* `tasks_evidence_ac_bindings` rows (T12790).
|
|
4
|
+
*
|
|
5
|
+
* ## Why this exists
|
|
6
|
+
*
|
|
7
|
+
* The consolidated project schema (`drizzle-cleo-project/20260531000001`)
|
|
8
|
+
* declares NO foreign key from `tasks_evidence_ac_bindings.ac_id` to
|
|
9
|
+
* `tasks_task_acceptance_criteria.id`. The legacy table's `ON DELETE CASCADE`
|
|
10
|
+
* did not survive consolidation, so every AC row that left the store —
|
|
11
|
+
* through an AC edit ({@link import('../tasks/ac-table.js').applyAcPlan}) or a
|
|
12
|
+
* hard task delete (the AC rows cascade from `tasks_tasks`) — left its
|
|
13
|
+
* bindings dangling. Adding the FK back would need a table rebuild, so the
|
|
14
|
+
* accessor deletes the bindings explicitly instead, in the same transaction
|
|
15
|
+
* that removes the AC rows.
|
|
16
|
+
*
|
|
17
|
+
* ## History is kept in the audit log, not in the bindings table
|
|
18
|
+
*
|
|
19
|
+
* One reader depends on historical bindings: alias-drift detection in
|
|
20
|
+
* `satisfies-validator.ts` (ADR-079-r2 §3) compares an alias atom's current
|
|
21
|
+
* AC against the AC a previous `satisfies` binding recorded. A binding for a
|
|
22
|
+
* removed AC is meaningless to the coverage gate, but it is exactly the
|
|
23
|
+
* record that says "alias AC2 used to mean X". So before a binding is
|
|
24
|
+
* deleted, its full row is written to `tasks_audit_log` under
|
|
25
|
+
* {@link AC_BINDINGS_PRUNED_ACTION}, keyed by the task that owned the AC, and
|
|
26
|
+
* the drift detector reads those rows as well as the live table.
|
|
27
|
+
*
|
|
28
|
+
* Every function takes the drizzle handle of an ALREADY-OPEN accessor
|
|
29
|
+
* transaction; none of them opens or commits one.
|
|
30
|
+
*
|
|
31
|
+
* @task T12790
|
|
32
|
+
* @adr ADR-079-r2
|
|
33
|
+
*/
|
|
34
|
+
import type { AcBindingRow } from '@cleocode/contracts';
|
|
35
|
+
import type { getDb } from './sqlite.js';
|
|
36
|
+
/** Drizzle handle for the project tasks store. */
|
|
37
|
+
type TasksDb = Awaited<ReturnType<typeof getDb>>;
|
|
38
|
+
/** `tasks_audit_log.action` recorded for every batch of pruned bindings. */
|
|
39
|
+
export declare const AC_BINDINGS_PRUNED_ACTION = "ac.bindings.pruned";
|
|
40
|
+
/**
|
|
41
|
+
* Why a batch of bindings was pruned.
|
|
42
|
+
*
|
|
43
|
+
* - `ac-removed` — the AC rows left the task's set in an AC edit.
|
|
44
|
+
* - `task-removed` — the owning task was hard-deleted (its AC rows cascade).
|
|
45
|
+
* - `orphan-repair` — `cleo doctor ac-bindings --fix` removed rows whose AC
|
|
46
|
+
* was already gone before T12790.
|
|
47
|
+
*/
|
|
48
|
+
export type AcBindingPruneReason = 'ac-removed' | 'task-removed' | 'orphan-repair';
|
|
49
|
+
/** `details` payload of a {@link AC_BINDINGS_PRUNED_ACTION} audit row. */
|
|
50
|
+
export interface AcBindingsPrunedDetails {
|
|
51
|
+
/** Why the bindings were removed. */
|
|
52
|
+
readonly reason: AcBindingPruneReason;
|
|
53
|
+
/** The AC ids whose bindings were removed. */
|
|
54
|
+
readonly acIds: readonly string[];
|
|
55
|
+
/** The removed binding rows, verbatim. */
|
|
56
|
+
readonly bindings: readonly AcBindingRow[];
|
|
57
|
+
}
|
|
58
|
+
/** Owner key used when an orphan's owning task cannot be inferred. */
|
|
59
|
+
export declare const UNKNOWN_BINDING_OWNER = "unknown";
|
|
60
|
+
/**
|
|
61
|
+
* Generate a task audit log row id in the `log-<epoch>-<rand>` shape.
|
|
62
|
+
*
|
|
63
|
+
* Shared by the task accessor's `appendLog` and the binding prune below, so
|
|
64
|
+
* both write ids of one shape.
|
|
65
|
+
*
|
|
66
|
+
* @task T4837 · T12790
|
|
67
|
+
*/
|
|
68
|
+
export declare function generateAuditLogId(): string;
|
|
69
|
+
/**
|
|
70
|
+
* Delete every binding whose `ac_id` is in `acIds`, recording them first in
|
|
71
|
+
* the audit log under `ownerTaskId` (the task that owned those ACs).
|
|
72
|
+
*
|
|
73
|
+
* Call it in the same transaction that removes the AC rows, BEFORE or AFTER
|
|
74
|
+
* the AC delete — the bindings table has no FK, so order does not matter.
|
|
75
|
+
*
|
|
76
|
+
* @param db - drizzle handle of the open accessor transaction
|
|
77
|
+
* @param ownerTaskId - task that owned the removed ACs
|
|
78
|
+
* @param acIds - AC ids leaving the store
|
|
79
|
+
* @param reason - why they are leaving
|
|
80
|
+
* @returns number of bindings removed
|
|
81
|
+
*
|
|
82
|
+
* @task T12790
|
|
83
|
+
*/
|
|
84
|
+
export declare function pruneAcBindingsForAcIds(db: TasksDb, ownerTaskId: string, acIds: readonly string[], reason: AcBindingPruneReason, keepBindingsForUids?: readonly string[]): Promise<number>;
|
|
85
|
+
/**
|
|
86
|
+
* Delete the bindings of every AC `taskId` owns — the hard task-delete path
|
|
87
|
+
* (the AC rows go by `ON DELETE CASCADE` from `tasks_tasks`) and the
|
|
88
|
+
* delete-every-AC-row path.
|
|
89
|
+
*
|
|
90
|
+
* @param db - drizzle handle of the open accessor transaction
|
|
91
|
+
* @param taskId - task whose AC rows are all leaving
|
|
92
|
+
* @param reason - `task-removed` (default) or `ac-removed`
|
|
93
|
+
* @returns number of bindings removed
|
|
94
|
+
*
|
|
95
|
+
* @task T12790
|
|
96
|
+
*/
|
|
97
|
+
export declare function pruneAcBindingsForTask(db: TasksDb, taskId: string, reason?: AcBindingPruneReason): Promise<number>;
|
|
98
|
+
/**
|
|
99
|
+
* Read every binding whose `ac_id` names no row of
|
|
100
|
+
* `tasks_task_acceptance_criteria`. Read-only.
|
|
101
|
+
*
|
|
102
|
+
* @param db - drizzle handle for the project tasks store
|
|
103
|
+
* @returns the dangling bindings, oldest first
|
|
104
|
+
*
|
|
105
|
+
* @task T12790
|
|
106
|
+
*/
|
|
107
|
+
export declare function selectOrphanAcBindings(db: TasksDb): Promise<AcBindingRow[]>;
|
|
108
|
+
/**
|
|
109
|
+
* Infer the task that owned an orphan binding's AC.
|
|
110
|
+
*
|
|
111
|
+
* Only `satisfies:<source>-><target>#<ac>` atom ids name it (the target owns
|
|
112
|
+
* the AC). Every other atom shape yields {@link UNKNOWN_BINDING_OWNER}.
|
|
113
|
+
*
|
|
114
|
+
* @param binding - an orphan binding
|
|
115
|
+
* @returns owning task id, or `'unknown'`
|
|
116
|
+
*
|
|
117
|
+
* @task T12790
|
|
118
|
+
*/
|
|
119
|
+
export declare function inferBindingOwnerTask(binding: AcBindingRow): string;
|
|
120
|
+
/**
|
|
121
|
+
* Remove every orphan binding, one audit row per inferred owning task.
|
|
122
|
+
*
|
|
123
|
+
* @param db - drizzle handle of the open accessor transaction
|
|
124
|
+
* @returns the removed bindings
|
|
125
|
+
*
|
|
126
|
+
* @task T12790
|
|
127
|
+
*/
|
|
128
|
+
export declare function pruneOrphanAcBindings(db: TasksDb): Promise<AcBindingRow[]>;
|
|
129
|
+
/**
|
|
130
|
+
* Read the bindings that were pruned from ACs owned by `ownerTaskId`, from
|
|
131
|
+
* their {@link AC_BINDINGS_PRUNED_ACTION} audit rows. Read-only.
|
|
132
|
+
*
|
|
133
|
+
* This is where binding history lives once the rows leave
|
|
134
|
+
* `tasks_evidence_ac_bindings`; alias-drift detection reads it.
|
|
135
|
+
*
|
|
136
|
+
* @param db - drizzle handle for the project tasks store
|
|
137
|
+
* @param ownerTaskId - task that owned the pruned ACs
|
|
138
|
+
* @returns the pruned binding rows (malformed audit payloads are skipped)
|
|
139
|
+
*
|
|
140
|
+
* @task T12790
|
|
141
|
+
*/
|
|
142
|
+
export declare function selectPrunedAcBindings(db: TasksDb, ownerTaskId: string): Promise<AcBindingRow[]>;
|
|
143
|
+
export {};
|
|
144
|
+
//# sourceMappingURL=ac-binding-prune.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ac-binding-prune.d.ts","sourceRoot":"","sources":["../../src/store/ac-binding-prune.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAGxD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAGzC,kDAAkD;AAClD,KAAK,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC;AAEjD,4EAA4E;AAC5E,eAAO,MAAM,yBAAyB,uBAAuB,CAAC;AAE9D;;;;;;;GAOG;AACH,MAAM,MAAM,oBAAoB,GAAG,YAAY,GAAG,cAAc,GAAG,eAAe,CAAC;AAEnF,0EAA0E;AAC1E,MAAM,WAAW,uBAAuB;IACtC,qCAAqC;IACrC,QAAQ,CAAC,MAAM,EAAE,oBAAoB,CAAC;IACtC,8CAA8C;IAC9C,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,0CAA0C;IAC1C,QAAQ,CAAC,QAAQ,EAAE,SAAS,YAAY,EAAE,CAAC;CAC5C;AAED,sEAAsE;AACtE,eAAO,MAAM,qBAAqB,YAAY,CAAC;AA2B/C;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,CAI3C;AA2CD;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,uBAAuB,CAC3C,EAAE,EAAE,OAAO,EACX,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,SAAS,MAAM,EAAE,EACxB,MAAM,EAAE,oBAAoB,EAC5B,mBAAmB,GAAE,SAAS,MAAM,EAAO,GAC1C,OAAO,CAAC,MAAM,CAAC,CA+CjB;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,sBAAsB,CAC1C,EAAE,EAAE,OAAO,EACX,MAAM,EAAE,MAAM,EACd,MAAM,GAAE,oBAAqC,GAC5C,OAAO,CAAC,MAAM,CAAC,CAYjB;AAED;;;;;;;;GAQG;AACH,wBAAsB,sBAAsB,CAAC,EAAE,EAAE,OAAO,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CA2BjF;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,YAAY,GAAG,MAAM,CAGnE;AAED;;;;;;;GAOG;AACH,wBAAsB,qBAAqB,CAAC,EAAE,EAAE,OAAO,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAahF;AAiBD;;;;;;;;;;;;GAYG;AACH,wBAAsB,sBAAsB,CAC1C,EAAE,EAAE,OAAO,EACX,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,YAAY,EAAE,CAAC,CAyBzB"}
|
|
@@ -0,0 +1,293 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Evidence ↔ AC binding pruning — the single write path that removes
|
|
3
|
+
* `tasks_evidence_ac_bindings` rows (T12790).
|
|
4
|
+
*
|
|
5
|
+
* ## Why this exists
|
|
6
|
+
*
|
|
7
|
+
* The consolidated project schema (`drizzle-cleo-project/20260531000001`)
|
|
8
|
+
* declares NO foreign key from `tasks_evidence_ac_bindings.ac_id` to
|
|
9
|
+
* `tasks_task_acceptance_criteria.id`. The legacy table's `ON DELETE CASCADE`
|
|
10
|
+
* did not survive consolidation, so every AC row that left the store —
|
|
11
|
+
* through an AC edit ({@link import('../tasks/ac-table.js').applyAcPlan}) or a
|
|
12
|
+
* hard task delete (the AC rows cascade from `tasks_tasks`) — left its
|
|
13
|
+
* bindings dangling. Adding the FK back would need a table rebuild, so the
|
|
14
|
+
* accessor deletes the bindings explicitly instead, in the same transaction
|
|
15
|
+
* that removes the AC rows.
|
|
16
|
+
*
|
|
17
|
+
* ## History is kept in the audit log, not in the bindings table
|
|
18
|
+
*
|
|
19
|
+
* One reader depends on historical bindings: alias-drift detection in
|
|
20
|
+
* `satisfies-validator.ts` (ADR-079-r2 §3) compares an alias atom's current
|
|
21
|
+
* AC against the AC a previous `satisfies` binding recorded. A binding for a
|
|
22
|
+
* removed AC is meaningless to the coverage gate, but it is exactly the
|
|
23
|
+
* record that says "alias AC2 used to mean X". So before a binding is
|
|
24
|
+
* deleted, its full row is written to `tasks_audit_log` under
|
|
25
|
+
* {@link AC_BINDINGS_PRUNED_ACTION}, keyed by the task that owned the AC, and
|
|
26
|
+
* the drift detector reads those rows as well as the live table.
|
|
27
|
+
*
|
|
28
|
+
* Every function takes the drizzle handle of an ALREADY-OPEN accessor
|
|
29
|
+
* transaction; none of them opens or commits one.
|
|
30
|
+
*
|
|
31
|
+
* @task T12790
|
|
32
|
+
* @adr ADR-079-r2
|
|
33
|
+
*/
|
|
34
|
+
import { and, eq, inArray, isNotNull, isNull, notInArray, or } from 'drizzle-orm';
|
|
35
|
+
import { tasksAuditLog } from './schema/cleo-project/audit.js';
|
|
36
|
+
import * as schema from './tasks-schema.js';
|
|
37
|
+
/** `tasks_audit_log.action` recorded for every batch of pruned bindings. */
|
|
38
|
+
export const AC_BINDINGS_PRUNED_ACTION = 'ac.bindings.pruned';
|
|
39
|
+
/** Owner key used when an orphan's owning task cannot be inferred. */
|
|
40
|
+
export const UNKNOWN_BINDING_OWNER = 'unknown';
|
|
41
|
+
/** Map a selected drizzle row to the contracts shape. */
|
|
42
|
+
function toBindingRow(r) {
|
|
43
|
+
return {
|
|
44
|
+
id: r.id,
|
|
45
|
+
evidenceAtomId: r.evidenceAtomId,
|
|
46
|
+
acId: r.acId,
|
|
47
|
+
bindingType: r.bindingType,
|
|
48
|
+
createdAt: r.createdAt,
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
const BINDING_COLUMNS = {
|
|
52
|
+
id: schema.evidenceAcBindings.id,
|
|
53
|
+
evidenceAtomId: schema.evidenceAcBindings.evidenceAtomId,
|
|
54
|
+
acId: schema.evidenceAcBindings.acId,
|
|
55
|
+
bindingType: schema.evidenceAcBindings.bindingType,
|
|
56
|
+
createdAt: schema.evidenceAcBindings.createdAt,
|
|
57
|
+
};
|
|
58
|
+
/**
|
|
59
|
+
* Generate a task audit log row id in the `log-<epoch>-<rand>` shape.
|
|
60
|
+
*
|
|
61
|
+
* Shared by the task accessor's `appendLog` and the binding prune below, so
|
|
62
|
+
* both write ids of one shape.
|
|
63
|
+
*
|
|
64
|
+
* @task T4837 · T12790
|
|
65
|
+
*/
|
|
66
|
+
export function generateAuditLogId() {
|
|
67
|
+
const epoch = Math.floor(Date.now() / 1000);
|
|
68
|
+
const rand = Math.random().toString(36).slice(2, 8);
|
|
69
|
+
return `log-${epoch}-${rand}`;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Record `bindings` in the audit log, then delete them — one audit row for
|
|
73
|
+
* the batch. No-op when `bindings` is empty.
|
|
74
|
+
*/
|
|
75
|
+
async function archiveAndDelete(db, ownerTaskId, reason, bindings) {
|
|
76
|
+
if (bindings.length === 0)
|
|
77
|
+
return;
|
|
78
|
+
const details = {
|
|
79
|
+
reason,
|
|
80
|
+
acIds: [...new Set(bindings.map((b) => b.acId))],
|
|
81
|
+
bindings,
|
|
82
|
+
};
|
|
83
|
+
await db
|
|
84
|
+
.insert(tasksAuditLog)
|
|
85
|
+
.values({
|
|
86
|
+
id: generateAuditLogId(),
|
|
87
|
+
timestamp: new Date().toISOString(),
|
|
88
|
+
action: AC_BINDINGS_PRUNED_ACTION,
|
|
89
|
+
taskId: ownerTaskId,
|
|
90
|
+
actor: 'system',
|
|
91
|
+
detailsJson: JSON.stringify(details),
|
|
92
|
+
beforeJson: null,
|
|
93
|
+
afterJson: null,
|
|
94
|
+
sessionId: null,
|
|
95
|
+
})
|
|
96
|
+
.run();
|
|
97
|
+
await db
|
|
98
|
+
.delete(schema.evidenceAcBindings)
|
|
99
|
+
.where(inArray(schema.evidenceAcBindings.id, bindings.map((b) => b.id)))
|
|
100
|
+
.run();
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Delete every binding whose `ac_id` is in `acIds`, recording them first in
|
|
104
|
+
* the audit log under `ownerTaskId` (the task that owned those ACs).
|
|
105
|
+
*
|
|
106
|
+
* Call it in the same transaction that removes the AC rows, BEFORE or AFTER
|
|
107
|
+
* the AC delete — the bindings table has no FK, so order does not matter.
|
|
108
|
+
*
|
|
109
|
+
* @param db - drizzle handle of the open accessor transaction
|
|
110
|
+
* @param ownerTaskId - task that owned the removed ACs
|
|
111
|
+
* @param acIds - AC ids leaving the store
|
|
112
|
+
* @param reason - why they are leaving
|
|
113
|
+
* @returns number of bindings removed
|
|
114
|
+
*
|
|
115
|
+
* @task T12790
|
|
116
|
+
*/
|
|
117
|
+
export async function pruneAcBindingsForAcIds(db, ownerTaskId, acIds, reason, keepBindingsForUids = []) {
|
|
118
|
+
if (acIds.length === 0)
|
|
119
|
+
return 0;
|
|
120
|
+
// T12341: a binding follows its criterion's uid (`ac_uid`) across edits.
|
|
121
|
+
// - The removed rows are read for THIS task only: AC ids derive from display
|
|
122
|
+
// ids, so one id can have named another task's criterion (T12799).
|
|
123
|
+
// - A binding that records a uid goes when that uid is one of the removed
|
|
124
|
+
// rows' and the same write does not carry it onto a new row (an edit keeps
|
|
125
|
+
// its evidence, stale until re-verified); a binding naming another
|
|
126
|
+
// criterion's uid stays, even when its recorded ac_id matches.
|
|
127
|
+
// - A binding without a uid (written before the fill) goes by its ac_id,
|
|
128
|
+
// unless that id's criterion carries its uid onto a new row.
|
|
129
|
+
const owned = await db
|
|
130
|
+
.select({ id: schema.taskAcceptanceCriteria.id, uid: schema.taskAcceptanceCriteria.uid })
|
|
131
|
+
.from(schema.taskAcceptanceCriteria)
|
|
132
|
+
.where(and(eq(schema.taskAcceptanceCriteria.taskId, ownerTaskId), inArray(schema.taskAcceptanceCriteria.id, acIds)))
|
|
133
|
+
.all();
|
|
134
|
+
const uidOfId = new Map(owned.map((r) => [r.id, r.uid]));
|
|
135
|
+
const uids = new Set(owned.map((r) => r.uid).filter((u) => u !== null));
|
|
136
|
+
const keep = new Set(keepBindingsForUids);
|
|
137
|
+
const rows = await db
|
|
138
|
+
.select({ ...BINDING_COLUMNS, acUid: schema.evidenceAcBindings.acUid })
|
|
139
|
+
.from(schema.evidenceAcBindings)
|
|
140
|
+
.where(uids.size > 0
|
|
141
|
+
? or(inArray(schema.evidenceAcBindings.acId, acIds), inArray(schema.evidenceAcBindings.acUid, [...uids]))
|
|
142
|
+
: inArray(schema.evidenceAcBindings.acId, acIds))
|
|
143
|
+
.all();
|
|
144
|
+
const removed = new Set(acIds);
|
|
145
|
+
const bindings = rows
|
|
146
|
+
.filter((r) => {
|
|
147
|
+
if (r.acUid !== null)
|
|
148
|
+
return uids.has(r.acUid) && !keep.has(r.acUid);
|
|
149
|
+
if (!removed.has(r.acId))
|
|
150
|
+
return false;
|
|
151
|
+
const carried = uidOfId.get(r.acId);
|
|
152
|
+
return !(carried && keep.has(carried));
|
|
153
|
+
})
|
|
154
|
+
.map(toBindingRow);
|
|
155
|
+
await archiveAndDelete(db, ownerTaskId, reason, bindings);
|
|
156
|
+
return bindings.length;
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Delete the bindings of every AC `taskId` owns — the hard task-delete path
|
|
160
|
+
* (the AC rows go by `ON DELETE CASCADE` from `tasks_tasks`) and the
|
|
161
|
+
* delete-every-AC-row path.
|
|
162
|
+
*
|
|
163
|
+
* @param db - drizzle handle of the open accessor transaction
|
|
164
|
+
* @param taskId - task whose AC rows are all leaving
|
|
165
|
+
* @param reason - `task-removed` (default) or `ac-removed`
|
|
166
|
+
* @returns number of bindings removed
|
|
167
|
+
*
|
|
168
|
+
* @task T12790
|
|
169
|
+
*/
|
|
170
|
+
export async function pruneAcBindingsForTask(db, taskId, reason = 'task-removed') {
|
|
171
|
+
const acRows = await db
|
|
172
|
+
.select({ id: schema.taskAcceptanceCriteria.id })
|
|
173
|
+
.from(schema.taskAcceptanceCriteria)
|
|
174
|
+
.where(eq(schema.taskAcceptanceCriteria.taskId, taskId))
|
|
175
|
+
.all();
|
|
176
|
+
return pruneAcBindingsForAcIds(db, taskId, acRows.map((r) => r.id), reason);
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Read every binding whose `ac_id` names no row of
|
|
180
|
+
* `tasks_task_acceptance_criteria`. Read-only.
|
|
181
|
+
*
|
|
182
|
+
* @param db - drizzle handle for the project tasks store
|
|
183
|
+
* @returns the dangling bindings, oldest first
|
|
184
|
+
*
|
|
185
|
+
* @task T12790
|
|
186
|
+
*/
|
|
187
|
+
export async function selectOrphanAcBindings(db) {
|
|
188
|
+
const rows = await db
|
|
189
|
+
.select(BINDING_COLUMNS)
|
|
190
|
+
.from(schema.evidenceAcBindings)
|
|
191
|
+
.where(and(notInArray(schema.evidenceAcBindings.acId, db.select({ id: schema.taskAcceptanceCriteria.id }).from(schema.taskAcceptanceCriteria)),
|
|
192
|
+
// T12341: a binding recorded under an older id of a criterion that
|
|
193
|
+
// still exists (same `ac_uid`) is stale evidence, not an orphan.
|
|
194
|
+
or(isNull(schema.evidenceAcBindings.acUid), notInArray(schema.evidenceAcBindings.acUid, db
|
|
195
|
+
.select({ uid: schema.taskAcceptanceCriteria.uid })
|
|
196
|
+
.from(schema.taskAcceptanceCriteria)
|
|
197
|
+
.where(isNotNull(schema.taskAcceptanceCriteria.uid))))))
|
|
198
|
+
.orderBy(schema.evidenceAcBindings.createdAt, schema.evidenceAcBindings.id)
|
|
199
|
+
.all();
|
|
200
|
+
return rows.map(toBindingRow);
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Infer the task that owned an orphan binding's AC.
|
|
204
|
+
*
|
|
205
|
+
* Only `satisfies:<source>-><target>#<ac>` atom ids name it (the target owns
|
|
206
|
+
* the AC). Every other atom shape yields {@link UNKNOWN_BINDING_OWNER}.
|
|
207
|
+
*
|
|
208
|
+
* @param binding - an orphan binding
|
|
209
|
+
* @returns owning task id, or `'unknown'`
|
|
210
|
+
*
|
|
211
|
+
* @task T12790
|
|
212
|
+
*/
|
|
213
|
+
export function inferBindingOwnerTask(binding) {
|
|
214
|
+
const match = /^satisfies:[^>]*->([^#]+)#/.exec(binding.evidenceAtomId);
|
|
215
|
+
return match?.[1] ?? UNKNOWN_BINDING_OWNER;
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* Remove every orphan binding, one audit row per inferred owning task.
|
|
219
|
+
*
|
|
220
|
+
* @param db - drizzle handle of the open accessor transaction
|
|
221
|
+
* @returns the removed bindings
|
|
222
|
+
*
|
|
223
|
+
* @task T12790
|
|
224
|
+
*/
|
|
225
|
+
export async function pruneOrphanAcBindings(db) {
|
|
226
|
+
const orphans = await selectOrphanAcBindings(db);
|
|
227
|
+
const byOwner = new Map();
|
|
228
|
+
for (const row of orphans) {
|
|
229
|
+
const owner = inferBindingOwnerTask(row);
|
|
230
|
+
const group = byOwner.get(owner);
|
|
231
|
+
if (group)
|
|
232
|
+
group.push(row);
|
|
233
|
+
else
|
|
234
|
+
byOwner.set(owner, [row]);
|
|
235
|
+
}
|
|
236
|
+
for (const [owner, group] of byOwner) {
|
|
237
|
+
await archiveAndDelete(db, owner, 'orphan-repair', group);
|
|
238
|
+
}
|
|
239
|
+
return orphans;
|
|
240
|
+
}
|
|
241
|
+
/** Narrow a parsed JSON value to an {@link AcBindingRow}. */
|
|
242
|
+
function isBindingRow(value) {
|
|
243
|
+
if (value === null)
|
|
244
|
+
return false;
|
|
245
|
+
const row = value;
|
|
246
|
+
return (typeof row.id === 'string' &&
|
|
247
|
+
typeof row.evidenceAtomId === 'string' &&
|
|
248
|
+
typeof row.acId === 'string' &&
|
|
249
|
+
(row.bindingType === 'direct' ||
|
|
250
|
+
row.bindingType === 'satisfies' ||
|
|
251
|
+
row.bindingType === 'coverage') &&
|
|
252
|
+
typeof row.createdAt === 'string');
|
|
253
|
+
}
|
|
254
|
+
/**
|
|
255
|
+
* Read the bindings that were pruned from ACs owned by `ownerTaskId`, from
|
|
256
|
+
* their {@link AC_BINDINGS_PRUNED_ACTION} audit rows. Read-only.
|
|
257
|
+
*
|
|
258
|
+
* This is where binding history lives once the rows leave
|
|
259
|
+
* `tasks_evidence_ac_bindings`; alias-drift detection reads it.
|
|
260
|
+
*
|
|
261
|
+
* @param db - drizzle handle for the project tasks store
|
|
262
|
+
* @param ownerTaskId - task that owned the pruned ACs
|
|
263
|
+
* @returns the pruned binding rows (malformed audit payloads are skipped)
|
|
264
|
+
*
|
|
265
|
+
* @task T12790
|
|
266
|
+
*/
|
|
267
|
+
export async function selectPrunedAcBindings(db, ownerTaskId) {
|
|
268
|
+
const rows = await db
|
|
269
|
+
.select({ detailsJson: tasksAuditLog.detailsJson })
|
|
270
|
+
.from(tasksAuditLog)
|
|
271
|
+
.where(and(eq(tasksAuditLog.action, AC_BINDINGS_PRUNED_ACTION), eq(tasksAuditLog.taskId, ownerTaskId)))
|
|
272
|
+
.all();
|
|
273
|
+
const out = [];
|
|
274
|
+
for (const row of rows) {
|
|
275
|
+
if (typeof row.detailsJson !== 'string')
|
|
276
|
+
continue;
|
|
277
|
+
let parsed;
|
|
278
|
+
try {
|
|
279
|
+
parsed = JSON.parse(row.detailsJson);
|
|
280
|
+
}
|
|
281
|
+
catch {
|
|
282
|
+
continue;
|
|
283
|
+
}
|
|
284
|
+
const bindings = parsed?.bindings;
|
|
285
|
+
if (!Array.isArray(bindings))
|
|
286
|
+
continue;
|
|
287
|
+
for (const b of bindings)
|
|
288
|
+
if (isBindingRow(b))
|
|
289
|
+
out.push(b);
|
|
290
|
+
}
|
|
291
|
+
return out;
|
|
292
|
+
}
|
|
293
|
+
//# sourceMappingURL=ac-binding-prune.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ac-binding-prune.js","sourceRoot":"","sources":["../../src/store/ac-binding-prune.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-registry-store.d.ts","sourceRoot":"","sources":["../../src/store/agent-registry-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmDG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAwBhD;;;;;GAKG;AACH,eAAO,MAAM,iCAAiC,kBAAkB,CAAC;AAEjE;;;;;GAKG;AACH,eAAO,MAAM,oCAAoC,cAAc,CAAC;AAEhE;;;;;GAKG;AACH,eAAO,MAAM,6BAA6B,cAAuC,CAAC;AAMlF;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,4BAA4B,IAAI,MAAM,CAmBrD;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAU3D;AAMD;;;;;;;;;;GAUG;AACH,wBAAgB,oCAAoC,IAAI,MAAM,CAE7D;
|
|
1
|
+
{"version":3,"file":"agent-registry-store.d.ts","sourceRoot":"","sources":["../../src/store/agent-registry-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmDG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAwBhD;;;;;GAKG;AACH,eAAO,MAAM,iCAAiC,kBAAkB,CAAC;AAEjE;;;;;GAKG;AACH,eAAO,MAAM,oCAAoC,cAAc,CAAC;AAEhE;;;;;GAKG;AACH,eAAO,MAAM,6BAA6B,cAAuC,CAAC;AAMlF;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,4BAA4B,IAAI,MAAM,CAmBrD;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAU3D;AAMD;;;;;;;;;;GAUG;AACH,wBAAgB,oCAAoC,IAAI,MAAM,CAE7D;AA2KD;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,2BAA2B,IAAI,OAAO,CAAC;IAC3D,MAAM,EAAE,SAAS,GAAG,QAAQ,CAAC;IAC7B,IAAI,EAAE,MAAM,CAAC;CACd,CAAC,CAkED;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,qBAAqB,CACzC,GAAG,CAAC,EAAE,MAAM,GACX,OAAO,CAAC;IAAE,MAAM,EAAE,SAAS,GAAG,QAAQ,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAUzD;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,gCAAgC,IAAI,OAAO,CAAC;IAChE,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,kBAAkB,EAAE,OAAO,CAAC;CAC7B,GAAG,IAAI,CAAC,CAwER;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,0BAA0B,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACtE,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,kBAAkB,EAAE,OAAO,CAAC;CAC7B,GAAG,IAAI,CAAC,CAUR;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,8BAA8B,IAAI,YAAY,GAAG,IAAI,CAEpE;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,wCAAwC,IAAI,IAAI,CAG/D"}
|
|
@@ -274,8 +274,9 @@ function writeAgentRegistrySchemaVersionSentinel(db) {
|
|
|
274
274
|
value TEXT NOT NULL,
|
|
275
275
|
updated_at INTEGER NOT NULL DEFAULT (strftime('%s', 'now'))
|
|
276
276
|
);
|
|
277
|
-
INSERT
|
|
278
|
-
VALUES ('schema_version', '${GLOBAL_AGENT_REGISTRY_SCHEMA_VERSION}', strftime('%s', 'now'))
|
|
277
|
+
INSERT INTO _agent_registry_meta (key, value, updated_at)
|
|
278
|
+
VALUES ('schema_version', '${GLOBAL_AGENT_REGISTRY_SCHEMA_VERSION}', strftime('%s', 'now'))
|
|
279
|
+
ON CONFLICT(key) DO UPDATE SET value = excluded.value, updated_at = excluded.updated_at;`);
|
|
279
280
|
}
|
|
280
281
|
catch {
|
|
281
282
|
// Non-fatal: if the meta write fails, ensure() still succeeds. Next
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-registry-store.js","sourceRoot":"","sources":["../../src/store/agent-registry-store.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"agent-registry-store.js","sourceRoot":"","sources":["../../src/store/agent-registry-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,7 +5,8 @@
|
|
|
5
5
|
* timestamp, the per-type rotation, and the `.meta.json` sidecar that
|
|
6
6
|
* `cleo backup list` reads.
|
|
7
7
|
*
|
|
8
|
-
* A leaf module (node:fs
|
|
8
|
+
* A leaf module (node:fs, the logger, and a read-only node:sqlite read of the
|
|
9
|
+
* twin-collapse markers during rotation), so store code that runs inside a domain bind
|
|
9
10
|
* can write an inventoried snapshot without importing `system/backup.ts`,
|
|
10
11
|
* which imports the domain binders.
|
|
11
12
|
*
|
|
@@ -31,11 +32,57 @@ export declare function formatBackupTimestamp(d: Date): string;
|
|
|
31
32
|
* touches files produced by `vacuumIntoBackupAll` in the same directory.
|
|
32
33
|
* Non-fatal — filesystem errors are silently swallowed.
|
|
33
34
|
*
|
|
35
|
+
* A pinned backup, and a pre-collapse snapshot a twin-collapse marker of the
|
|
36
|
+
* project store references (pinned or not: 2026.9.21 wrote them without a
|
|
37
|
+
* pin), is never rotated and does not count toward the cap. When a marker
|
|
38
|
+
* cannot be read (malformed, or the store busy), which snapshot it names is
|
|
39
|
+
* unknown: every `migration` backup is kept and a warning is logged, while
|
|
40
|
+
* other backup types still rotate (pre-collapse snapshots are always
|
|
41
|
+
* `migration` backups). `cleo doctor` names an unreadable marker.
|
|
42
|
+
*
|
|
34
43
|
* @task T9194
|
|
35
44
|
* @task T10315 — added scoping predicate so rotation never reaches
|
|
36
45
|
* vacuum-snapshot files that share `.cleo/backups/sqlite/`.
|
|
46
|
+
* @task T12727 — marker-referenced snapshots are never rotated.
|
|
47
|
+
* @task T12770 — an unreadable marker keeps only `migration` backups, and says so.
|
|
48
|
+
* @returns The files deleted, and why rotation kept backups past the cap.
|
|
37
49
|
*/
|
|
38
|
-
export declare function rotateBackupDir(backupDir: string, maxSnapshots: number, backupType: string):
|
|
50
|
+
export declare function rotateBackupDir(backupDir: string, maxSnapshots: number, backupType: string): BackupRotation;
|
|
51
|
+
/** What {@link rotateBackupDir} did. */
|
|
52
|
+
export interface BackupRotation {
|
|
53
|
+
/** Backup files deleted. */
|
|
54
|
+
readonly deleted: readonly string[];
|
|
55
|
+
/**
|
|
56
|
+
* Why every backup of the type was kept past the cap: a marker that does
|
|
57
|
+
* not parse, or a store that could not be read (busy, corrupt). `null` when
|
|
58
|
+
* rotation ran.
|
|
59
|
+
*/
|
|
60
|
+
readonly keptAll: 'marker-unreadable' | 'store-unreadable' | null;
|
|
61
|
+
/** The unreadable marker keys (`<kvTable>:twin_collapse:<table>`). */
|
|
62
|
+
readonly unreadable: readonly string[];
|
|
63
|
+
/** The error reading the store (for example `database is locked`), or `null`. */
|
|
64
|
+
readonly error: string | null;
|
|
65
|
+
}
|
|
66
|
+
/** The twin-collapse markers of a project store, as rotation reads them. */
|
|
67
|
+
export interface MarkerSnapshots {
|
|
68
|
+
/** File names of the pre-collapse snapshots the readable markers reference. */
|
|
69
|
+
readonly names: ReadonlySet<string>;
|
|
70
|
+
/** Marker keys whose value does not parse (`<kvTable>:twin_collapse:<table>`). */
|
|
71
|
+
readonly unreadable: readonly string[];
|
|
72
|
+
/** Why the store could not be read at all (busy, corrupt), or `null`. */
|
|
73
|
+
readonly error: string | null;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* The pre-collapse snapshots the twin-collapse markers of the project store
|
|
77
|
+
* (`<backupDir>/../../cleo.db`) reference, and the markers that cannot be
|
|
78
|
+
* read. No store there: no markers.
|
|
79
|
+
*
|
|
80
|
+
* @param backupDir - `<root>/.cleo/backups/sqlite`.
|
|
81
|
+
* @returns The referenced file names, the unreadable marker keys, and any read error.
|
|
82
|
+
* @task T12727
|
|
83
|
+
* @task T12770
|
|
84
|
+
*/
|
|
85
|
+
export declare function readMarkerSnapshots(backupDir: string): MarkerSnapshots;
|
|
39
86
|
/** Contents of a `<backupId>.meta.json` sidecar, as `cleo backup list` reads it. */
|
|
40
87
|
export interface BackupSidecar {
|
|
41
88
|
/** `<type>-YYYYMMDD-HHmmss`. */
|
|
@@ -56,6 +103,10 @@ export interface BackupSidecar {
|
|
|
56
103
|
readonly pinned?: boolean;
|
|
57
104
|
/** Why it is pinned (shown by `cleo backup list`). */
|
|
58
105
|
readonly pinnedReason?: string;
|
|
106
|
+
/** When an owner released the pin (T12767); rotation treats it as any backup. */
|
|
107
|
+
readonly releasedAt?: string;
|
|
108
|
+
/** Why it was released. */
|
|
109
|
+
readonly releasedReason?: string;
|
|
59
110
|
}
|
|
60
111
|
/**
|
|
61
112
|
* Write a `.meta.json` sidecar atomically (tmp file, then rename).
|
|
@@ -87,4 +138,36 @@ export declare function isPinnedBackup(backupDir: string, fileName: string, back
|
|
|
87
138
|
* @task T12535
|
|
88
139
|
*/
|
|
89
140
|
export declare function pinBackup(snapshotPath: string, backupType: string, reason: string): boolean;
|
|
141
|
+
/**
|
|
142
|
+
* Release a backup's pin (T12767) so rotation treats it as any other backup:
|
|
143
|
+
* rewrites its sidecar with `pinned: false`, `releasedAt` and
|
|
144
|
+
* `releasedReason`, dropping `pinnedReason`. Writes the sidecar only, never
|
|
145
|
+
* the backup; creates the sidecar when there is none.
|
|
146
|
+
*
|
|
147
|
+
* @param snapshotPath - The backup file (`<dir>/<file>.<type>-<timestamp>`).
|
|
148
|
+
* @param backupType - Its backup type.
|
|
149
|
+
* @param reason - Why it is released.
|
|
150
|
+
* @returns The sidecar as written.
|
|
151
|
+
* @throws When the backup name does not carry `backupType`, or the write fails.
|
|
152
|
+
* @task T12767
|
|
153
|
+
*/
|
|
154
|
+
export declare function unpinBackup(snapshotPath: string, backupType: string, reason: string): BackupSidecar;
|
|
155
|
+
/**
|
|
156
|
+
* Put back a sidecar exactly as it was before {@link unpinBackup} (or remove
|
|
157
|
+
* it when there was none). Best effort, for a release that is rolled back.
|
|
158
|
+
*
|
|
159
|
+
* @param snapshotPath - The backup file.
|
|
160
|
+
* @param backupType - Its backup type.
|
|
161
|
+
* @param previous - The sidecar before the release, or `null`.
|
|
162
|
+
* @task T12767
|
|
163
|
+
*/
|
|
164
|
+
export declare function restoreBackupSidecar(snapshotPath: string, backupType: string, previous: BackupSidecar | null): void;
|
|
165
|
+
/**
|
|
166
|
+
* A backup's sidecar as read back, or `null` (missing, unreadable, malformed).
|
|
167
|
+
*
|
|
168
|
+
* @param snapshotPath - The backup file.
|
|
169
|
+
* @param backupType - Its backup type.
|
|
170
|
+
* @task T12767
|
|
171
|
+
*/
|
|
172
|
+
export declare function readBackupSidecar(snapshotPath: string, backupType: string): BackupSidecar | null;
|
|
90
173
|
//# sourceMappingURL=backup-sidecar.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"backup-sidecar.d.ts","sourceRoot":"","sources":["../../src/store/backup-sidecar.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"backup-sidecar.d.ts","sourceRoot":"","sources":["../../src/store/backup-sidecar.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAiBH;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,IAAI,GAAG,MAAM,CAMrD;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,eAAe,CAC7B,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,GACjB,cAAc,CA+DhB;AAED,wCAAwC;AACxC,MAAM,WAAW,cAAc;IAC7B,4BAA4B;IAC5B,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC;;;;OAIG;IACH,QAAQ,CAAC,OAAO,EAAE,mBAAmB,GAAG,kBAAkB,GAAG,IAAI,CAAC;IAClE,sEAAsE;IACtE,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC,iFAAiF;IACjF,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B;AAQD,4EAA4E;AAC5E,MAAM,WAAW,eAAe;IAC9B,+EAA+E;IAC/E,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACpC,kFAAkF;IAClF,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC,yEAAyE;IACzE,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B;AAED;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,eAAe,CAyCtE;AAED,oFAAoF;AACpF,MAAM,WAAW,aAAa;IAC5B,gCAAgC;IAChC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,2DAA2D;IAC3D,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,8BAA8B;IAC9B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,kDAAkD;IAClD,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,8EAA8E;IAC9E,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC;;;;OAIG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B,sDAAsD;IACtD,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,iFAAiF;IACjF,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,2BAA2B;IAC3B,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;CAClC;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,IAAI,CAKlF;AA0CD;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAG/F;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,SAAS,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAsB3F;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,WAAW,CACzB,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,GACb,aAAa,CAsBf;AAED;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAClC,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,aAAa,GAAG,IAAI,GAC7B,IAAI,CAUN;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAGhG"}
|