@cleocode/core 2026.9.8 → 2026.9.9
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/reconstruct.d.ts +13 -43
- package/dist/audit/reconstruct.d.ts.map +1 -1
- package/dist/audit/reconstruct.js +295 -290
- package/dist/audit/reconstruct.js.map +1 -1
- package/dist/bootstrap.d.ts.map +1 -1
- package/dist/bootstrap.js +8 -2
- package/dist/bootstrap.js.map +1 -1
- package/dist/dispatch/mutate-projection.d.ts.map +1 -1
- package/dist/dispatch/mutate-projection.js +12 -0
- package/dist/dispatch/mutate-projection.js.map +1 -1
- package/dist/dispatch/mvi-projection.d.ts +29 -6
- package/dist/dispatch/mvi-projection.d.ts.map +1 -1
- package/dist/dispatch/mvi-projection.js +109 -139
- package/dist/dispatch/mvi-projection.js.map +1 -1
- package/dist/docs/docs-read-model.d.ts +3 -2
- package/dist/docs/docs-read-model.d.ts.map +1 -1
- package/dist/docs/docs-read-model.js +4 -3
- package/dist/docs/docs-read-model.js.map +1 -1
- package/dist/docs/export-document.js +5100 -2297
- package/dist/docs/export-document.js.map +3 -3
- package/dist/docs/projection.d.ts +67 -0
- package/dist/docs/projection.d.ts.map +1 -0
- package/dist/docs/projection.js +370 -0
- package/dist/docs/projection.js.map +1 -0
- package/dist/doctor/acceptance-drift.d.ts +6 -2
- package/dist/doctor/acceptance-drift.d.ts.map +1 -1
- package/dist/doctor/acceptance-drift.js +43 -5
- package/dist/doctor/acceptance-drift.js.map +1 -1
- package/dist/doctor/knowledge-summary.d.ts +41 -0
- package/dist/doctor/knowledge-summary.d.ts.map +1 -0
- package/dist/doctor/knowledge-summary.js +81 -0
- package/dist/doctor/knowledge-summary.js.map +1 -0
- package/dist/doctor/knowledge.d.ts +192 -0
- package/dist/doctor/knowledge.d.ts.map +1 -0
- package/dist/doctor/knowledge.js +1864 -0
- package/dist/doctor/knowledge.js.map +1 -0
- package/dist/git/work-tree.d.ts +64 -0
- package/dist/git/work-tree.d.ts.map +1 -0
- package/dist/git/work-tree.js +111 -0
- package/dist/git/work-tree.js.map +1 -0
- package/dist/hooks/handlers/task-hooks.d.ts +8 -5
- package/dist/hooks/handlers/task-hooks.d.ts.map +1 -1
- package/dist/hooks/handlers/task-hooks.js +15 -60
- package/dist/hooks/handlers/task-hooks.js.map +1 -1
- package/dist/identity/cleo-identity.d.ts +13 -0
- package/dist/identity/cleo-identity.d.ts.map +1 -1
- package/dist/identity/cleo-identity.js +20 -6
- package/dist/identity/cleo-identity.js.map +1 -1
- package/dist/injection.d.ts.map +1 -1
- package/dist/injection.js +29 -13
- package/dist/injection.js.map +1 -1
- package/dist/internal.d.ts +2 -0
- package/dist/internal.d.ts.map +1 -1
- package/dist/internal.js +2 -0
- package/dist/internal.js.map +1 -1
- package/dist/lifecycle/verification/satisfies-validator.d.ts.map +1 -1
- package/dist/lifecycle/verification/satisfies-validator.js +124 -120
- package/dist/lifecycle/verification/satisfies-validator.js.map +1 -1
- package/dist/llm/plugin-facade.js +4018 -1726
- package/dist/llm/plugin-facade.js.map +3 -3
- package/dist/memory/brain-backfill.d.ts +27 -12
- package/dist/memory/brain-backfill.d.ts.map +1 -1
- package/dist/memory/brain-backfill.js +325 -134
- package/dist/memory/brain-backfill.js.map +1 -1
- package/dist/memory/brain-doctor.d.ts +21 -0
- package/dist/memory/brain-doctor.d.ts.map +1 -1
- package/dist/memory/brain-doctor.js +111 -53
- package/dist/memory/brain-doctor.js.map +1 -1
- package/dist/memory/brain-links.d.ts.map +1 -1
- package/dist/memory/brain-links.js +31 -4
- package/dist/memory/brain-links.js.map +1 -1
- package/dist/memory/brain-reasoning.d.ts.map +1 -1
- package/dist/memory/brain-reasoning.js +28 -2
- package/dist/memory/brain-reasoning.js.map +1 -1
- package/dist/memory/brain-reconciler.d.ts +14 -19
- package/dist/memory/brain-reconciler.d.ts.map +1 -1
- package/dist/memory/brain-reconciler.js +70 -97
- package/dist/memory/brain-reconciler.js.map +1 -1
- package/dist/memory/brain-search.d.ts +2 -0
- package/dist/memory/brain-search.d.ts.map +1 -1
- package/dist/memory/brain-search.js +59 -29
- package/dist/memory/brain-search.js.map +1 -1
- package/dist/memory/brain-similarity.d.ts.map +1 -1
- package/dist/memory/brain-similarity.js +5 -4
- package/dist/memory/brain-similarity.js.map +1 -1
- package/dist/memory/brain-stub-prune.d.ts +31 -9
- package/dist/memory/brain-stub-prune.d.ts.map +1 -1
- package/dist/memory/brain-stub-prune.js +65 -18
- package/dist/memory/brain-stub-prune.js.map +1 -1
- package/dist/memory/brain-writer-handlers.d.ts +10 -1
- package/dist/memory/brain-writer-handlers.d.ts.map +1 -1
- package/dist/memory/brain-writer-handlers.js +23 -3
- package/dist/memory/brain-writer-handlers.js.map +1 -1
- package/dist/memory/brain-writer-thread.d.ts +11 -1
- package/dist/memory/brain-writer-thread.d.ts.map +1 -1
- package/dist/memory/brain-writer-thread.js +87 -20
- package/dist/memory/brain-writer-thread.js.map +1 -1
- package/dist/memory/brain-writer-worker.js +8 -1
- package/dist/memory/brain-writer-worker.js.map +1 -1
- package/dist/memory/decision-cross-link.d.ts +39 -0
- package/dist/memory/decision-cross-link.d.ts.map +1 -1
- package/dist/memory/decision-cross-link.js +316 -0
- package/dist/memory/decision-cross-link.js.map +1 -1
- package/dist/memory/decisions.d.ts +4 -1
- package/dist/memory/decisions.d.ts.map +1 -1
- package/dist/memory/decisions.js +7 -24
- package/dist/memory/decisions.js.map +1 -1
- package/dist/memory/dispatch-trace.d.ts +12 -5
- package/dist/memory/dispatch-trace.d.ts.map +1 -1
- package/dist/memory/dispatch-trace.js +17 -7
- package/dist/memory/dispatch-trace.js.map +1 -1
- package/dist/memory/eligibility.d.ts +51 -0
- package/dist/memory/eligibility.d.ts.map +1 -0
- package/dist/memory/eligibility.js +77 -0
- package/dist/memory/eligibility.js.map +1 -0
- package/dist/memory/engine-compat.d.ts +2 -0
- package/dist/memory/engine-compat.d.ts.map +1 -1
- package/dist/memory/engine-compat.js +10 -0
- package/dist/memory/engine-compat.js.map +1 -1
- package/dist/memory/extraction-gate.d.ts +21 -7
- package/dist/memory/extraction-gate.d.ts.map +1 -1
- package/dist/memory/extraction-gate.js +178 -216
- package/dist/memory/extraction-gate.js.map +1 -1
- package/dist/memory/graph-auto-populate.d.ts +38 -5
- package/dist/memory/graph-auto-populate.d.ts.map +1 -1
- package/dist/memory/graph-auto-populate.js +182 -60
- package/dist/memory/graph-auto-populate.js.map +1 -1
- package/dist/memory/graph-memory-bridge.d.ts +14 -1
- package/dist/memory/graph-memory-bridge.d.ts.map +1 -1
- package/dist/memory/graph-memory-bridge.js +66 -28
- package/dist/memory/graph-memory-bridge.js.map +1 -1
- package/dist/memory/index.d.ts +1 -19
- package/dist/memory/index.d.ts.map +1 -1
- package/dist/memory/index.js +1 -50
- package/dist/memory/index.js.map +1 -1
- package/dist/memory/learnings.d.ts.map +1 -1
- package/dist/memory/learnings.js +2 -23
- package/dist/memory/learnings.js.map +1 -1
- package/dist/memory/manifest-filter.d.ts +21 -0
- package/dist/memory/manifest-filter.d.ts.map +1 -0
- package/dist/memory/manifest-filter.js +51 -0
- package/dist/memory/manifest-filter.js.map +1 -0
- package/dist/memory/manifest-ingestion.d.ts +28 -30
- package/dist/memory/manifest-ingestion.d.ts.map +1 -1
- package/dist/memory/manifest-ingestion.js +104 -235
- package/dist/memory/manifest-ingestion.js.map +1 -1
- package/dist/memory/observer-reflector.d.ts +2 -0
- package/dist/memory/observer-reflector.d.ts.map +1 -1
- package/dist/memory/observer-reflector.js +6 -49
- package/dist/memory/observer-reflector.js.map +1 -1
- package/dist/memory/patterns.d.ts +10 -0
- package/dist/memory/patterns.d.ts.map +1 -1
- package/dist/memory/patterns.js +25 -33
- package/dist/memory/patterns.js.map +1 -1
- package/dist/memory/pipeline-manifest-sqlite.d.ts +72 -9
- package/dist/memory/pipeline-manifest-sqlite.d.ts.map +1 -1
- package/dist/memory/pipeline-manifest-sqlite.js +508 -412
- package/dist/memory/pipeline-manifest-sqlite.js.map +1 -1
- package/dist/memory/retrieval/build-retrieval-bundle.d.ts.map +1 -1
- package/dist/memory/retrieval/build-retrieval-bundle.js +16 -15
- package/dist/memory/retrieval/build-retrieval-bundle.js.map +1 -1
- package/dist/memory/retrieval/fetch.d.ts +7 -0
- package/dist/memory/retrieval/fetch.d.ts.map +1 -1
- package/dist/memory/retrieval/fetch.js +14 -11
- package/dist/memory/retrieval/fetch.js.map +1 -1
- package/dist/memory/retrieval/observe.d.ts +7 -1
- package/dist/memory/retrieval/observe.d.ts.map +1 -1
- package/dist/memory/retrieval/observe.js +58 -4
- package/dist/memory/retrieval/observe.js.map +1 -1
- package/dist/memory/retrieval/search.d.ts +14 -1
- package/dist/memory/retrieval/search.d.ts.map +1 -1
- package/dist/memory/retrieval/search.js +133 -69
- package/dist/memory/retrieval/search.js.map +1 -1
- package/dist/memory/retrieval/telemetry.d.ts +31 -0
- package/dist/memory/retrieval/telemetry.d.ts.map +1 -0
- package/dist/memory/retrieval/telemetry.js +53 -0
- package/dist/memory/retrieval/telemetry.js.map +1 -0
- package/dist/nexus/analyze-orchestrator.d.ts +41 -9
- package/dist/nexus/analyze-orchestrator.d.ts.map +1 -1
- package/dist/nexus/analyze-orchestrator.js +257 -58
- package/dist/nexus/analyze-orchestrator.js.map +1 -1
- package/dist/nexus/api-contracts.d.ts +2 -6
- package/dist/nexus/api-contracts.d.ts.map +1 -1
- package/dist/nexus/api-contracts.js +11 -2
- package/dist/nexus/api-contracts.js.map +1 -1
- package/dist/nexus/context.d.ts.map +1 -1
- package/dist/nexus/context.js +14 -37
- package/dist/nexus/context.js.map +1 -1
- package/dist/nexus/diff.d.ts.map +1 -1
- package/dist/nexus/diff.js +2 -1
- package/dist/nexus/diff.js.map +1 -1
- package/dist/nexus/identity.d.ts +29 -3
- package/dist/nexus/identity.d.ts.map +1 -1
- package/dist/nexus/identity.js +63 -12
- package/dist/nexus/identity.js.map +1 -1
- package/dist/nexus/impact.d.ts +21 -19
- package/dist/nexus/impact.d.ts.map +1 -1
- package/dist/nexus/impact.js +96 -192
- package/dist/nexus/impact.js.map +1 -1
- package/dist/nexus/knowledge.d.ts +80 -0
- package/dist/nexus/knowledge.d.ts.map +1 -0
- package/dist/nexus/knowledge.js +786 -0
- package/dist/nexus/knowledge.js.map +1 -0
- package/dist/nexus/living-brain.d.ts +8 -5
- package/dist/nexus/living-brain.d.ts.map +1 -1
- package/dist/nexus/living-brain.js +252 -188
- package/dist/nexus/living-brain.js.map +1 -1
- package/dist/nexus/registry.d.ts +11 -2
- package/dist/nexus/registry.d.ts.map +1 -1
- package/dist/nexus/registry.js +144 -128
- package/dist/nexus/registry.js.map +1 -1
- package/dist/nexus/source-roots.d.ts +16 -0
- package/dist/nexus/source-roots.d.ts.map +1 -0
- package/dist/nexus/source-roots.js +174 -0
- package/dist/nexus/source-roots.js.map +1 -0
- package/dist/nexus/task-evidence.d.ts +22 -0
- package/dist/nexus/task-evidence.d.ts.map +1 -0
- package/dist/nexus/task-evidence.js +210 -0
- package/dist/nexus/task-evidence.js.map +1 -0
- package/dist/nexus/tasks-bridge.d.ts +14 -7
- package/dist/nexus/tasks-bridge.d.ts.map +1 -1
- package/dist/nexus/tasks-bridge.js +81 -40
- package/dist/nexus/tasks-bridge.js.map +1 -1
- package/dist/orchestrate/lifecycle-ops.d.ts.map +1 -1
- package/dist/orchestrate/lifecycle-ops.js +170 -120
- package/dist/orchestrate/lifecycle-ops.js.map +1 -1
- package/dist/orchestrate/query-ops.d.ts +6 -7
- package/dist/orchestrate/query-ops.d.ts.map +1 -1
- package/dist/orchestrate/query-ops.js +509 -532
- package/dist/orchestrate/query-ops.js.map +1 -1
- package/dist/orchestration/bootstrap.d.ts +15 -1
- package/dist/orchestration/bootstrap.d.ts.map +1 -1
- package/dist/orchestration/bootstrap.js +21 -10
- package/dist/orchestration/bootstrap.js.map +1 -1
- package/dist/orchestration/index.d.ts +35 -3
- package/dist/orchestration/index.d.ts.map +1 -1
- package/dist/orchestration/index.js +64 -35
- package/dist/orchestration/index.js.map +1 -1
- package/dist/orchestration/lead-rollup.d.ts +24 -1
- package/dist/orchestration/lead-rollup.d.ts.map +1 -1
- package/dist/orchestration/lead-rollup.js +31 -11
- package/dist/orchestration/lead-rollup.js.map +1 -1
- package/dist/orchestration/spawn-prompt.d.ts.map +1 -1
- package/dist/orchestration/spawn-prompt.js +16 -41
- package/dist/orchestration/spawn-prompt.js.map +1 -1
- package/dist/orchestration/unblock.d.ts +15 -1
- package/dist/orchestration/unblock.d.ts.map +1 -1
- package/dist/orchestration/unblock.js +23 -12
- package/dist/orchestration/unblock.js.map +1 -1
- package/dist/orchestration/validate-spawn.d.ts.map +1 -1
- package/dist/orchestration/validate-spawn.js +3 -3
- package/dist/orchestration/validate-spawn.js.map +1 -1
- package/dist/orchestration/waves.d.ts +29 -13
- package/dist/orchestration/waves.d.ts.map +1 -1
- package/dist/orchestration/waves.js +43 -55
- package/dist/orchestration/waves.js.map +1 -1
- package/dist/paths.d.ts +17 -163
- package/dist/paths.d.ts.map +1 -1
- package/dist/paths.js +145 -496
- package/dist/paths.js.map +1 -1
- package/dist/project-info.d.ts +2 -11
- package/dist/project-info.d.ts.map +1 -1
- package/dist/project-info.js +3 -31
- package/dist/project-info.js.map +1 -1
- package/dist/project-scope.d.ts +239 -0
- package/dist/project-scope.d.ts.map +1 -0
- package/dist/project-scope.js +473 -0
- package/dist/project-scope.js.map +1 -0
- package/dist/release/pr-evidence.d.ts +16 -3
- package/dist/release/pr-evidence.d.ts.map +1 -1
- package/dist/release/pr-evidence.js +53 -7
- package/dist/release/pr-evidence.js.map +1 -1
- package/dist/render/nexus/graph/index.d.ts.map +1 -1
- package/dist/render/nexus/graph/index.js +4 -2
- package/dist/render/nexus/graph/index.js.map +1 -1
- package/dist/render/orchestration/audit-reconstruct.d.ts +11 -0
- package/dist/render/orchestration/audit-reconstruct.d.ts.map +1 -1
- package/dist/render/orchestration/audit-reconstruct.js +21 -6
- package/dist/render/orchestration/audit-reconstruct.js.map +1 -1
- package/dist/render/tasks/show.js +2 -1
- package/dist/render/tasks/show.js.map +1 -1
- package/dist/resources/spawn-wrapper.d.ts +82 -14
- package/dist/resources/spawn-wrapper.d.ts.map +1 -1
- package/dist/resources/spawn-wrapper.js +585 -27
- package/dist/resources/spawn-wrapper.js.map +1 -1
- package/dist/selfimprove/fix-gen.js +4026 -1734
- package/dist/selfimprove/fix-gen.js.map +3 -3
- package/dist/sequence/index.d.ts.map +1 -1
- package/dist/sequence/index.js +76 -68
- package/dist/sequence/index.js.map +1 -1
- package/dist/session/canon-lint.d.ts +24 -3
- package/dist/session/canon-lint.d.ts.map +1 -1
- package/dist/session/canon-lint.js +72 -31
- package/dist/session/canon-lint.js.map +1 -1
- package/dist/session/engine-ops.d.ts +1 -4
- package/dist/session/engine-ops.d.ts.map +1 -1
- package/dist/session/engine-ops.js +6 -2
- package/dist/session/engine-ops.js.map +1 -1
- package/dist/sessions/briefing.d.ts +11 -1
- package/dist/sessions/briefing.d.ts.map +1 -1
- package/dist/sessions/briefing.js +76 -8
- package/dist/sessions/briefing.js.map +1 -1
- package/dist/sessions/handoff.d.ts +3 -1
- package/dist/sessions/handoff.d.ts.map +1 -1
- package/dist/sessions/handoff.js +2 -0
- package/dist/sessions/handoff.js.map +1 -1
- package/dist/shutdown-deadline.d.ts +24 -33
- package/dist/shutdown-deadline.d.ts.map +1 -1
- package/dist/shutdown-deadline.js +71 -14
- package/dist/shutdown-deadline.js.map +1 -1
- package/dist/shutdown.d.ts +21 -10
- package/dist/shutdown.d.ts.map +1 -1
- package/dist/shutdown.js +89 -42
- package/dist/shutdown.js.map +1 -1
- package/dist/skills/index.d.ts +1 -1
- package/dist/skills/index.d.ts.map +1 -1
- package/dist/skills/index.js +1 -1
- package/dist/skills/index.js.map +1 -1
- package/dist/skills/orchestrator/validator.d.ts +87 -20
- package/dist/skills/orchestrator/validator.d.ts.map +1 -1
- package/dist/skills/orchestrator/validator.js +330 -241
- package/dist/skills/orchestrator/validator.js.map +1 -1
- package/dist/store/agent-resolver.d.ts.map +1 -1
- package/dist/store/agent-resolver.js +16 -9
- package/dist/store/agent-resolver.js.map +1 -1
- package/dist/store/attachment-store.d.ts +4 -1
- package/dist/store/attachment-store.d.ts.map +1 -1
- package/dist/store/attachment-store.js +20 -3
- package/dist/store/attachment-store.js.map +1 -1
- package/dist/store/background-jobs.d.ts +426 -105
- package/dist/store/background-jobs.d.ts.map +1 -1
- package/dist/store/background-jobs.js +1208 -252
- package/dist/store/background-jobs.js.map +1 -1
- package/dist/store/background-ops.d.ts +145 -8
- package/dist/store/background-ops.d.ts.map +1 -1
- package/dist/store/background-ops.js +459 -15
- package/dist/store/background-ops.js.map +1 -1
- package/dist/store/backup-inspect.d.ts +48 -4
- package/dist/store/backup-inspect.d.ts.map +1 -1
- package/dist/store/backup-inspect.js +384 -4
- package/dist/store/backup-inspect.js.map +1 -1
- package/dist/store/converters.d.ts.map +1 -1
- package/dist/store/converters.js +19 -2
- package/dist/store/converters.js.map +1 -1
- package/dist/store/data-accessor.d.ts +9 -1
- package/dist/store/data-accessor.d.ts.map +1 -1
- package/dist/store/data-accessor.js +22 -5
- package/dist/store/data-accessor.js.map +1 -1
- package/dist/store/data-safety-central.d.ts.map +1 -1
- package/dist/store/data-safety-central.js +272 -232
- package/dist/store/data-safety-central.js.map +1 -1
- package/dist/store/db-helpers.d.ts +19 -3
- package/dist/store/db-helpers.d.ts.map +1 -1
- package/dist/store/db-helpers.js +42 -58
- package/dist/store/db-helpers.js.map +1 -1
- package/dist/store/dual-scope-db.d.ts +63 -4
- package/dist/store/dual-scope-db.d.ts.map +1 -1
- package/dist/store/dual-scope-db.js +166 -19
- package/dist/store/dual-scope-db.js.map +1 -1
- package/dist/store/exodus/archive.d.ts +21 -7
- package/dist/store/exodus/archive.d.ts.map +1 -1
- package/dist/store/exodus/archive.js +60 -18
- package/dist/store/exodus/archive.js.map +1 -1
- package/dist/store/exodus/migrate.d.ts.map +1 -1
- package/dist/store/exodus/migrate.js +27 -23
- package/dist/store/exodus/migrate.js.map +1 -1
- package/dist/store/exodus/on-open.d.ts +16 -27
- package/dist/store/exodus/on-open.d.ts.map +1 -1
- package/dist/store/exodus/on-open.js +121 -169
- package/dist/store/exodus/on-open.js.map +1 -1
- package/dist/store/exodus/recovery.d.ts +90 -0
- package/dist/store/exodus/recovery.d.ts.map +1 -0
- package/dist/store/exodus/recovery.js +434 -0
- package/dist/store/exodus/recovery.js.map +1 -0
- package/dist/store/exodus/types.d.ts +15 -0
- package/dist/store/exodus/types.d.ts.map +1 -1
- package/dist/store/memory-accessor.d.ts +52 -3
- package/dist/store/memory-accessor.d.ts.map +1 -1
- package/dist/store/memory-accessor.js +122 -7
- package/dist/store/memory-accessor.js.map +1 -1
- package/dist/store/nexus-sqlite.d.ts +24 -6
- package/dist/store/nexus-sqlite.d.ts.map +1 -1
- package/dist/store/nexus-sqlite.js +39 -20
- package/dist/store/nexus-sqlite.js.map +1 -1
- package/dist/store/ports/domain-binding.d.ts.map +1 -1
- package/dist/store/ports/domain-binding.js +27 -5
- package/dist/store/ports/domain-binding.js.map +1 -1
- package/dist/store/schema/background-jobs.d.ts +181 -2
- package/dist/store/schema/background-jobs.d.ts.map +1 -1
- package/dist/store/schema/background-jobs.js +27 -3
- package/dist/store/schema/background-jobs.js.map +1 -1
- package/dist/store/schema/cleo-global/skills.d.ts +2 -2
- package/dist/store/schema/cleo-project/lifecycle.d.ts +2 -2
- package/dist/store/schema/cleo-project/runtime.d.ts +1 -1
- package/dist/store/schema/cleo-project/tasks-core.d.ts +1 -1
- package/dist/store/schema/lifecycle.d.ts +2 -2
- package/dist/store/schema/skills-schema.d.ts +2 -2
- package/dist/store/schema/tasks.d.ts +1 -1
- package/dist/store/session-store.d.ts +3 -1
- package/dist/store/session-store.d.ts.map +1 -1
- package/dist/store/session-store.js +252 -207
- package/dist/store/session-store.js.map +1 -1
- package/dist/store/sqlite-data-accessor.d.ts +39 -4
- package/dist/store/sqlite-data-accessor.d.ts.map +1 -1
- package/dist/store/sqlite-data-accessor.js +689 -527
- package/dist/store/sqlite-data-accessor.js.map +1 -1
- package/dist/store/tasks-sqlite.d.ts +3 -1
- package/dist/store/tasks-sqlite.d.ts.map +1 -1
- package/dist/store/tasks-sqlite.js +309 -279
- package/dist/store/tasks-sqlite.js.map +1 -1
- package/dist/store/validation-schemas.d.ts +8 -8
- package/dist/store/writer-lease.d.ts +80 -8
- package/dist/store/writer-lease.d.ts.map +1 -1
- package/dist/store/writer-lease.js +503 -134
- package/dist/store/writer-lease.js.map +1 -1
- package/dist/system/audit.d.ts +2 -1
- package/dist/system/audit.d.ts.map +1 -1
- package/dist/system/audit.js +118 -71
- package/dist/system/audit.js.map +1 -1
- package/dist/system/backup.d.ts.map +1 -1
- package/dist/system/backup.js +5 -5
- package/dist/system/backup.js.map +1 -1
- package/dist/system/inject-generate.js +1 -1
- package/dist/task-work/index.d.ts +3 -0
- package/dist/task-work/index.d.ts.map +1 -1
- package/dist/task-work/index.js +34 -37
- 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 +4 -0
- package/dist/tasks/ac-coverage-gate.js.map +1 -1
- package/dist/tasks/ac-immutability.d.ts +7 -4
- package/dist/tasks/ac-immutability.d.ts.map +1 -1
- package/dist/tasks/ac-immutability.js +19 -17
- package/dist/tasks/ac-immutability.js.map +1 -1
- package/dist/tasks/ac-table.d.ts +5 -5
- package/dist/tasks/ac-table.d.ts.map +1 -1
- package/dist/tasks/ac-table.js +26 -12
- package/dist/tasks/ac-table.js.map +1 -1
- package/dist/tasks/acceptance-input.d.ts +52 -0
- package/dist/tasks/acceptance-input.d.ts.map +1 -0
- package/dist/tasks/acceptance-input.js +259 -0
- package/dist/tasks/acceptance-input.js.map +1 -0
- package/dist/tasks/add.d.ts +67 -29
- package/dist/tasks/add.d.ts.map +1 -1
- package/dist/tasks/add.js +255 -97
- package/dist/tasks/add.js.map +1 -1
- package/dist/tasks/complete.d.ts +16 -1
- package/dist/tasks/complete.d.ts.map +1 -1
- package/dist/tasks/complete.js +152 -55
- package/dist/tasks/complete.js.map +1 -1
- package/dist/tasks/decompose.d.ts +103 -0
- package/dist/tasks/decompose.d.ts.map +1 -0
- package/dist/tasks/decompose.js +224 -0
- package/dist/tasks/decompose.js.map +1 -0
- package/dist/tasks/delete.d.ts +5 -8
- package/dist/tasks/delete.d.ts.map +1 -1
- package/dist/tasks/delete.js +4 -3
- package/dist/tasks/delete.js.map +1 -1
- package/dist/tasks/dependency-check.d.ts +59 -0
- package/dist/tasks/dependency-check.d.ts.map +1 -1
- package/dist/tasks/dependency-check.js +73 -0
- package/dist/tasks/dependency-check.js.map +1 -1
- package/dist/tasks/deps-ready.d.ts +13 -1
- package/dist/tasks/deps-ready.d.ts.map +1 -1
- package/dist/tasks/deps-ready.js +16 -5
- package/dist/tasks/deps-ready.js.map +1 -1
- package/dist/tasks/engine-converters.d.ts +7 -0
- package/dist/tasks/engine-converters.d.ts.map +1 -1
- package/dist/tasks/engine-converters.js +8 -1
- package/dist/tasks/engine-converters.js.map +1 -1
- package/dist/tasks/evidence.d.ts +54 -26
- package/dist/tasks/evidence.d.ts.map +1 -1
- package/dist/tasks/evidence.js +292 -40
- package/dist/tasks/evidence.js.map +1 -1
- package/dist/tasks/find.d.ts +16 -12
- package/dist/tasks/find.d.ts.map +1 -1
- package/dist/tasks/find.js +107 -93
- package/dist/tasks/find.js.map +1 -1
- package/dist/tasks/gate-runner.d.ts +88 -14
- package/dist/tasks/gate-runner.d.ts.map +1 -1
- package/dist/tasks/gate-runner.js +596 -253
- package/dist/tasks/gate-runner.js.map +1 -1
- package/dist/tasks/hierarchy-policy.d.ts +8 -0
- package/dist/tasks/hierarchy-policy.d.ts.map +1 -1
- package/dist/tasks/hierarchy-policy.js +9 -2
- package/dist/tasks/hierarchy-policy.js.map +1 -1
- package/dist/tasks/hierarchy.d.ts +67 -1
- package/dist/tasks/hierarchy.d.ts.map +1 -1
- package/dist/tasks/hierarchy.js +81 -1
- package/dist/tasks/hierarchy.js.map +1 -1
- package/dist/tasks/index.d.ts +3 -0
- package/dist/tasks/index.d.ts.map +1 -1
- package/dist/tasks/index.js +3 -0
- package/dist/tasks/index.js.map +1 -1
- package/dist/tasks/infer-add-params.d.ts +1 -20
- package/dist/tasks/infer-add-params.d.ts.map +1 -1
- package/dist/tasks/infer-add-params.js +2 -203
- package/dist/tasks/infer-add-params.js.map +1 -1
- package/dist/tasks/list.d.ts +7 -2
- package/dist/tasks/list.d.ts.map +1 -1
- package/dist/tasks/list.js +24 -36
- package/dist/tasks/list.js.map +1 -1
- package/dist/tasks/ops.d.ts +6 -61
- package/dist/tasks/ops.d.ts.map +1 -1
- package/dist/tasks/ops.js +5 -53
- package/dist/tasks/ops.js.map +1 -1
- package/dist/tasks/plan.d.ts +15 -1
- package/dist/tasks/plan.d.ts.map +1 -1
- package/dist/tasks/plan.js +23 -25
- package/dist/tasks/plan.js.map +1 -1
- package/dist/tasks/population.d.ts +46 -0
- package/dist/tasks/population.d.ts.map +1 -0
- package/dist/tasks/population.js +88 -0
- package/dist/tasks/population.js.map +1 -0
- package/dist/tasks/reconcile-scope.d.ts +157 -0
- package/dist/tasks/reconcile-scope.d.ts.map +1 -0
- package/dist/tasks/reconcile-scope.js +242 -0
- package/dist/tasks/reconcile-scope.js.map +1 -0
- package/dist/tasks/req.d.ts +51 -12
- package/dist/tasks/req.d.ts.map +1 -1
- package/dist/tasks/req.js +125 -69
- package/dist/tasks/req.js.map +1 -1
- package/dist/tasks/session-scope.d.ts +6 -31
- package/dist/tasks/session-scope.d.ts.map +1 -1
- package/dist/tasks/session-scope.js +3 -17
- package/dist/tasks/session-scope.js.map +1 -1
- package/dist/tasks/severity-attestation.d.ts +39 -10
- package/dist/tasks/severity-attestation.d.ts.map +1 -1
- package/dist/tasks/severity-attestation.js +75 -36
- package/dist/tasks/severity-attestation.js.map +1 -1
- package/dist/tasks/task-next.d.ts +5 -0
- package/dist/tasks/task-next.d.ts.map +1 -1
- package/dist/tasks/task-next.js +10 -9
- package/dist/tasks/task-next.js.map +1 -1
- package/dist/tasks/task-reparent.d.ts.map +1 -1
- package/dist/tasks/task-reparent.js +3 -13
- package/dist/tasks/task-reparent.js.map +1 -1
- package/dist/tasks/update.d.ts +20 -43
- package/dist/tasks/update.d.ts.map +1 -1
- package/dist/tasks/update.js +64 -49
- package/dist/tasks/update.js.map +1 -1
- package/dist/validation/engine-ops.d.ts +17 -1
- package/dist/validation/engine-ops.d.ts.map +1 -1
- package/dist/validation/engine-ops.js +149 -11
- package/dist/validation/engine-ops.js.map +1 -1
- package/dist/workgraph/reparent-preflight.d.ts +1 -1
- package/dist/workgraph/reparent-preflight.d.ts.map +1 -1
- package/dist/workgraph/reparent-preflight.js +6 -1
- package/dist/workgraph/reparent-preflight.js.map +1 -1
- package/dist/workgraph/scaffold-apply.d.ts.map +1 -1
- package/dist/workgraph/scaffold-apply.js +81 -76
- package/dist/workgraph/scaffold-apply.js.map +1 -1
- package/dist/workgraph/structure-validation.d.ts +1 -1
- package/dist/workgraph/structure-validation.d.ts.map +1 -1
- package/dist/workgraph/structure-validation.js +6 -1
- package/dist/workgraph/structure-validation.js.map +1 -1
- package/migrations/drizzle-tasks/20260919180000_t12263-job-ownership-fences/migration.sql +34 -0
- package/migrations/drizzle-tasks/20260919184500_t12265-durable-pending-proposals/migration.sql +4 -0
- package/package.json +18 -13
- package/schemas/config.schema.json +2 -2
- package/templates/CLEO-INJECTION.md +103 -101
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import type { OperationExecutionContext } from '@cleocode/contracts/jobs';
|
|
2
|
+
import { type DocsProjectionCapture, type DocsProjectionOutcome, type DocsProjectionPreparation, type DocsProjectionReceipt, type DocsProjectionSource } from '@cleocode/contracts/operations/docs';
|
|
3
|
+
/**
|
|
4
|
+
* Capture a canonical project identity and one optional-maintenance deadline before storage.
|
|
5
|
+
* @param projectRoot - Explicit root captured synchronously by the calling surface.
|
|
6
|
+
* @param actor - Foreground caller provenance.
|
|
7
|
+
* @param idempotencyKey - Immutable operation key; explicit resume reuses the prepared job identity.
|
|
8
|
+
* @param budgetMs - Shared foreground budget, defaulting to two seconds.
|
|
9
|
+
* @returns Captured scope or explicit missing coverage; no guessed project identity.
|
|
10
|
+
* @throws RangeError when the caller supplies an invalid foreground budget.
|
|
11
|
+
* @remarks The metadata read is read-only. Its elapsed time is charged to the same
|
|
12
|
+
* deadline; slow filesystem I/O is not claimed to be synchronously preempted. Missing,
|
|
13
|
+
* malformed or mismatched identity never prevents the independent canonical attachment write.
|
|
14
|
+
* @example
|
|
15
|
+
* ```ts
|
|
16
|
+
* const captured = await captureDocumentProjection(root, actor, invocationId);
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
export declare function captureDocumentProjection(projectRoot: string, actor: string, idempotencyKey: string, budgetMs?: number): Promise<DocsProjectionCapture>;
|
|
20
|
+
/**
|
|
21
|
+
* Persist authentic optional work before an executor can be scheduled.
|
|
22
|
+
*
|
|
23
|
+
* @param context - Captured project, actor, retry identity and shared deadline.
|
|
24
|
+
* @param source - Canonical attachment and owner to independently verify.
|
|
25
|
+
* @returns Durable pending or coalesced job identity, never projection completion.
|
|
26
|
+
* @throws Error - Missing/changed canonical evidence, cancellation, storage or retry conflict.
|
|
27
|
+
* @remarks Canonical bytes are only read. The existing job store owns the atomic
|
|
28
|
+
* proposal insertion and immutable retry check. No executor, embedding or model
|
|
29
|
+
* starts here. An admitted synchronous store call cannot be timer-preempted;
|
|
30
|
+
* committed preparation is returned with its actual deadline observation.
|
|
31
|
+
* @example
|
|
32
|
+
* ```ts
|
|
33
|
+
* const pending = await prepareDocumentProjection(context, source);
|
|
34
|
+
* // Inspect pending.jobId before explicitly resuming this domain operation.
|
|
35
|
+
* ```
|
|
36
|
+
*/
|
|
37
|
+
export declare function prepareDocumentProjection(context: OperationExecutionContext, source: DocsProjectionSource): Promise<DocsProjectionPreparation>;
|
|
38
|
+
/**
|
|
39
|
+
* Execute only the authentic supported document proposal using its original foreground scope.
|
|
40
|
+
* @param context - Captured routing and shared lifetime; a resume may use a new caller lifetime.
|
|
41
|
+
* @param jobId - Existing durable pending or explicitly expired job identity.
|
|
42
|
+
* @returns Actual verified domain result after the existing job store records completion.
|
|
43
|
+
* @throws Error on stale inputs, ownership, cancellation, unavailable workers or verification failure.
|
|
44
|
+
* @remarks Graph and observation writes commit separately. Lost acknowledgements leave the
|
|
45
|
+
* job inspectable and require explicit resume after expiry; observation replay is idempotent.
|
|
46
|
+
* No uncertain worker write is replayed inline and no model is used. The receipt is not an
|
|
47
|
+
* atomic cross-database repair guarantee. Synchronous SQLite is cooperatively guarded only.
|
|
48
|
+
* @example
|
|
49
|
+
* ```ts
|
|
50
|
+
* const receipt = await resumeDocumentProjection(capturedContext, pending.jobId);
|
|
51
|
+
* ```
|
|
52
|
+
*/
|
|
53
|
+
export declare function resumeDocumentProjection(context: OperationExecutionContext, jobId: string): Promise<DocsProjectionReceipt>;
|
|
54
|
+
/**
|
|
55
|
+
* Prepare authentic optional work and observe its execution within one shared budget.
|
|
56
|
+
* @param context - Context captured before canonical attachment storage or other awaits.
|
|
57
|
+
* @param source - The accepted canonical attachment, preserved on every optional failure.
|
|
58
|
+
* @returns Explicit completion, durable pending identity, or a diagnostic with missing preparation.
|
|
59
|
+
* @remarks A timeout ends observation, not arbitrary work. The hardcoded domain executor
|
|
60
|
+
* guards later handles and writes; teardown cancellation reaches its worker. No model starts.
|
|
61
|
+
* @example
|
|
62
|
+
* ```ts
|
|
63
|
+
* const projection = await projectDocumentAttachment(context, acceptedSource);
|
|
64
|
+
* ```
|
|
65
|
+
*/
|
|
66
|
+
export declare function projectDocumentAttachment(context: OperationExecutionContext, source: DocsProjectionSource): Promise<DocsProjectionOutcome>;
|
|
67
|
+
//# sourceMappingURL=projection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"projection.d.ts","sourceRoot":"","sources":["../../src/docs/projection.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AAC1E,OAAO,EAGL,KAAK,qBAAqB,EAC1B,KAAK,qBAAqB,EAC1B,KAAK,yBAAyB,EAE9B,KAAK,qBAAqB,EAC1B,KAAK,oBAAoB,EAC1B,MAAM,qCAAqC,CAAC;AAkB7C;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,yBAAyB,CAC7C,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,EACb,cAAc,EAAE,MAAM,EACtB,QAAQ,SAAO,GACd,OAAO,CAAC,qBAAqB,CAAC,CA8ChC;AA4CD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,yBAAyB,CAC7C,OAAO,EAAE,yBAAyB,EAClC,MAAM,EAAE,oBAAoB,GAC3B,OAAO,CAAC,yBAAyB,CAAC,CA0CpC;AA6CD;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,wBAAwB,CAC5C,OAAO,EAAE,yBAAyB,EAClC,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,qBAAqB,CAAC,CAsHhC;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,yBAAyB,CAC7C,OAAO,EAAE,yBAAyB,EAClC,MAAM,EAAE,oBAAoB,GAC3B,OAAO,CAAC,qBAAqB,CAAC,CAmDhC"}
|
|
@@ -0,0 +1,370 @@
|
|
|
1
|
+
/** Captured, durable preparation of optional projections after canonical docs storage. */
|
|
2
|
+
import { createHash, randomUUID } from 'node:crypto';
|
|
3
|
+
import { DOCS_PROJECTION_PROPOSAL_SCHEMA, DOCS_PROJECTION_RECEIPT_SCHEMA, } from '@cleocode/contracts/operations/docs';
|
|
4
|
+
import { loadProjectInfo } from '../config/registry.js';
|
|
5
|
+
import { enqueueBrainWrite } from '../memory/brain-writer-thread.js';
|
|
6
|
+
import { ensureLlmtxtNodeScoped } from '../memory/graph-auto-populate.js';
|
|
7
|
+
import { generateProjectHash } from '../nexus/hash.js';
|
|
8
|
+
import { worktreeScope } from '../paths.js';
|
|
9
|
+
import { createAttachmentStore } from '../store/attachment-store.js';
|
|
10
|
+
import { assertOperationWriteFence, DurableJobStore } from '../store/background-jobs.js';
|
|
11
|
+
import { bindOperationWriteFence, createOperationExecutionContext, observeOperation, trackBackgroundOp, } from '../store/background-ops.js';
|
|
12
|
+
import { resolveDualScopeDbPath } from '../store/dual-scope-db.js';
|
|
13
|
+
import { getBrainAccessor } from '../store/memory-accessor.js';
|
|
14
|
+
import { getDb } from '../store/sqlite.js';
|
|
15
|
+
/**
|
|
16
|
+
* Capture a canonical project identity and one optional-maintenance deadline before storage.
|
|
17
|
+
* @param projectRoot - Explicit root captured synchronously by the calling surface.
|
|
18
|
+
* @param actor - Foreground caller provenance.
|
|
19
|
+
* @param idempotencyKey - Immutable operation key; explicit resume reuses the prepared job identity.
|
|
20
|
+
* @param budgetMs - Shared foreground budget, defaulting to two seconds.
|
|
21
|
+
* @returns Captured scope or explicit missing coverage; no guessed project identity.
|
|
22
|
+
* @throws RangeError when the caller supplies an invalid foreground budget.
|
|
23
|
+
* @remarks The metadata read is read-only. Its elapsed time is charged to the same
|
|
24
|
+
* deadline; slow filesystem I/O is not claimed to be synchronously preempted. Missing,
|
|
25
|
+
* malformed or mismatched identity never prevents the independent canonical attachment write.
|
|
26
|
+
* @example
|
|
27
|
+
* ```ts
|
|
28
|
+
* const captured = await captureDocumentProjection(root, actor, invocationId);
|
|
29
|
+
* ```
|
|
30
|
+
*/
|
|
31
|
+
export async function captureDocumentProjection(projectRoot, actor, idempotencyKey, budgetMs = 2000) {
|
|
32
|
+
if (!Number.isSafeInteger(budgetMs) || budgetMs < 0)
|
|
33
|
+
throw new RangeError('Document projection budget must be a nonnegative safe integer');
|
|
34
|
+
const deadlineAt = Date.now() + budgetMs;
|
|
35
|
+
try {
|
|
36
|
+
const info = await worktreeScope.run({ worktreeRoot: projectRoot, projectHash: generateProjectHash(projectRoot) }, () => loadProjectInfo(projectRoot));
|
|
37
|
+
if (!info || typeof info.projectId !== 'string' || !info.projectId.trim()) {
|
|
38
|
+
throw new Error('Canonical project-info lacks a stable projectId');
|
|
39
|
+
}
|
|
40
|
+
if (info.projectRoot !== undefined && info.projectRoot !== projectRoot) {
|
|
41
|
+
throw new Error('Canonical project-info root differs from the captured project root');
|
|
42
|
+
}
|
|
43
|
+
const context = createOperationExecutionContext({
|
|
44
|
+
projectId: info.projectId,
|
|
45
|
+
projectRoot,
|
|
46
|
+
actor,
|
|
47
|
+
operation: 'docs.projection',
|
|
48
|
+
idempotencyKey,
|
|
49
|
+
}, { budgetMs, deadlineAt });
|
|
50
|
+
try {
|
|
51
|
+
context.assertActive();
|
|
52
|
+
}
|
|
53
|
+
catch (error) {
|
|
54
|
+
context.close();
|
|
55
|
+
throw error;
|
|
56
|
+
}
|
|
57
|
+
return { status: 'ready', context };
|
|
58
|
+
}
|
|
59
|
+
catch (error) {
|
|
60
|
+
return {
|
|
61
|
+
status: 'unavailable',
|
|
62
|
+
outcome: {
|
|
63
|
+
projectId: null,
|
|
64
|
+
projectRoot,
|
|
65
|
+
status: 'failed',
|
|
66
|
+
coverage: 'missing',
|
|
67
|
+
deadlineAt,
|
|
68
|
+
deadlineExceeded: Date.now() >= deadlineAt,
|
|
69
|
+
diagnostics: [error instanceof Error ? error.message : String(error)],
|
|
70
|
+
},
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
/** Load actual canonical evidence without changing it or admitting an executor. */
|
|
75
|
+
async function readProjectionProposal(context, captured) {
|
|
76
|
+
const root = context.identity.projectRoot;
|
|
77
|
+
const attachments = createAttachmentStore();
|
|
78
|
+
context.assertActive();
|
|
79
|
+
const owners = await attachments.listByOwner(captured.ownerType, captured.ownerId, root);
|
|
80
|
+
context.assertActive();
|
|
81
|
+
const metadata = owners.find((entry) => entry.id === captured.attachmentId);
|
|
82
|
+
if (!metadata || metadata.sha256 !== captured.sha256) {
|
|
83
|
+
throw new Error('Document projection source or owner no longer matches canonical evidence');
|
|
84
|
+
}
|
|
85
|
+
if ('size' in metadata.attachment)
|
|
86
|
+
context.consume({ bytes: metadata.attachment.size });
|
|
87
|
+
const stored = await attachments.get(captured.sha256, root);
|
|
88
|
+
context.assertActive();
|
|
89
|
+
if (!stored || stored.metadata.id !== captured.attachmentId) {
|
|
90
|
+
throw new Error('Document projection canonical bytes are unavailable');
|
|
91
|
+
}
|
|
92
|
+
if (createHash('sha256').update(stored.bytes).digest('hex') !== captured.sha256) {
|
|
93
|
+
throw new Error('Document projection canonical bytes fail SHA-256 verification');
|
|
94
|
+
}
|
|
95
|
+
const extras = await attachments.getExtras(captured.attachmentId, root);
|
|
96
|
+
context.assertActive();
|
|
97
|
+
const proposal = {
|
|
98
|
+
version: 1,
|
|
99
|
+
operation: 'docs.projection',
|
|
100
|
+
identity: context.identity,
|
|
101
|
+
source: captured,
|
|
102
|
+
observation: {
|
|
103
|
+
kind: 'doc-attachment',
|
|
104
|
+
attachmentId: metadata.id,
|
|
105
|
+
ownerId: captured.ownerId,
|
|
106
|
+
addedAt: metadata.createdAt,
|
|
107
|
+
...(extras?.slug ? { slug: extras.slug } : {}),
|
|
108
|
+
...(extras?.type ? { type: extras.type } : {}),
|
|
109
|
+
},
|
|
110
|
+
};
|
|
111
|
+
return proposal;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Persist authentic optional work before an executor can be scheduled.
|
|
115
|
+
*
|
|
116
|
+
* @param context - Captured project, actor, retry identity and shared deadline.
|
|
117
|
+
* @param source - Canonical attachment and owner to independently verify.
|
|
118
|
+
* @returns Durable pending or coalesced job identity, never projection completion.
|
|
119
|
+
* @throws Error - Missing/changed canonical evidence, cancellation, storage or retry conflict.
|
|
120
|
+
* @remarks Canonical bytes are only read. The existing job store owns the atomic
|
|
121
|
+
* proposal insertion and immutable retry check. No executor, embedding or model
|
|
122
|
+
* starts here. An admitted synchronous store call cannot be timer-preempted;
|
|
123
|
+
* committed preparation is returned with its actual deadline observation.
|
|
124
|
+
* @example
|
|
125
|
+
* ```ts
|
|
126
|
+
* const pending = await prepareDocumentProjection(context, source);
|
|
127
|
+
* // Inspect pending.jobId before explicitly resuming this domain operation.
|
|
128
|
+
* ```
|
|
129
|
+
*/
|
|
130
|
+
export async function prepareDocumentProjection(context, source) {
|
|
131
|
+
context.assertActive();
|
|
132
|
+
if (context.identity.operation !== 'docs.projection') {
|
|
133
|
+
throw new Error('Document projection requires its captured docs.projection operation');
|
|
134
|
+
}
|
|
135
|
+
const captured = Object.freeze({ ...source });
|
|
136
|
+
if (!/^[a-f0-9]{64}$/.test(captured.sha256)) {
|
|
137
|
+
throw new Error('Document projection requires a canonical SHA-256');
|
|
138
|
+
}
|
|
139
|
+
return worktreeScope.run({
|
|
140
|
+
worktreeRoot: context.identity.projectRoot,
|
|
141
|
+
projectHash: generateProjectHash(context.identity.projectRoot),
|
|
142
|
+
execution: context,
|
|
143
|
+
}, async () => {
|
|
144
|
+
const root = context.identity.projectRoot;
|
|
145
|
+
const proposal = await readProjectionProposal(context, captured);
|
|
146
|
+
const proposalJson = JSON.stringify(DOCS_PROJECTION_PROPOSAL_SCHEMA.parse(proposal));
|
|
147
|
+
context.consume({ bytes: Buffer.byteLength(proposalJson, 'utf8'), items: 1 });
|
|
148
|
+
const db = await getDb(root);
|
|
149
|
+
context.assertActive();
|
|
150
|
+
const store = new DurableJobStore(db, {
|
|
151
|
+
projectId: context.identity.projectId,
|
|
152
|
+
actor: context.identity.actor,
|
|
153
|
+
});
|
|
154
|
+
const job = store.defer(randomUUID(), proposal.operation, Date.now(), {
|
|
155
|
+
projectId: context.identity.projectId,
|
|
156
|
+
idempotencyKey: context.identity.idempotencyKey,
|
|
157
|
+
proposalJson,
|
|
158
|
+
});
|
|
159
|
+
return {
|
|
160
|
+
jobId: job.id,
|
|
161
|
+
proposalHash: createHash('sha256').update(proposalJson).digest('hex'),
|
|
162
|
+
projectId: context.identity.projectId,
|
|
163
|
+
projectRoot: root,
|
|
164
|
+
jobStatus: job.status,
|
|
165
|
+
deadlineAt: context.deadlineAt,
|
|
166
|
+
deadlineExceeded: Date.now() >= context.deadlineAt,
|
|
167
|
+
};
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
/** Verify actual domain records after writes or when inspecting a completed operation. */
|
|
171
|
+
async function verifyProjection(context, proposal, receipt) {
|
|
172
|
+
context.assertActive();
|
|
173
|
+
const accessor = await getBrainAccessor(context.identity.projectRoot);
|
|
174
|
+
context.assertActive();
|
|
175
|
+
const observation = await accessor.getObservation(receipt.observationId);
|
|
176
|
+
context.assertActive();
|
|
177
|
+
if (!observation ||
|
|
178
|
+
observation.narrative !== JSON.stringify(proposal.observation) ||
|
|
179
|
+
observation.project !== context.identity.projectId ||
|
|
180
|
+
observation.invalidAt !== null ||
|
|
181
|
+
observation.expiredAt !== null ||
|
|
182
|
+
receipt.sourceHash !== proposal.source.sha256) {
|
|
183
|
+
throw new Error('Document observation verification failed');
|
|
184
|
+
}
|
|
185
|
+
if (receipt.graph === 'completed') {
|
|
186
|
+
const nodeId = `llmtxt:${proposal.source.sha256}`;
|
|
187
|
+
const node = await accessor.getPageNode(nodeId);
|
|
188
|
+
context.assertActive();
|
|
189
|
+
const edges = await accessor.getPageEdges(nodeId, 'in');
|
|
190
|
+
context.assertActive();
|
|
191
|
+
if (!node ||
|
|
192
|
+
node.nodeType !== 'llmtxt' ||
|
|
193
|
+
node.label !== proposal.source.label ||
|
|
194
|
+
!edges.some((edge) => edge.fromId === `${proposal.source.ownerType}:${proposal.source.ownerId}` &&
|
|
195
|
+
edge.edgeType === 'embeds' &&
|
|
196
|
+
edge.provenance === 'auto:docs-add')) {
|
|
197
|
+
throw new Error('Document graph verification failed');
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Execute only the authentic supported document proposal using its original foreground scope.
|
|
203
|
+
* @param context - Captured routing and shared lifetime; a resume may use a new caller lifetime.
|
|
204
|
+
* @param jobId - Existing durable pending or explicitly expired job identity.
|
|
205
|
+
* @returns Actual verified domain result after the existing job store records completion.
|
|
206
|
+
* @throws Error on stale inputs, ownership, cancellation, unavailable workers or verification failure.
|
|
207
|
+
* @remarks Graph and observation writes commit separately. Lost acknowledgements leave the
|
|
208
|
+
* job inspectable and require explicit resume after expiry; observation replay is idempotent.
|
|
209
|
+
* No uncertain worker write is replayed inline and no model is used. The receipt is not an
|
|
210
|
+
* atomic cross-database repair guarantee. Synchronous SQLite is cooperatively guarded only.
|
|
211
|
+
* @example
|
|
212
|
+
* ```ts
|
|
213
|
+
* const receipt = await resumeDocumentProjection(capturedContext, pending.jobId);
|
|
214
|
+
* ```
|
|
215
|
+
*/
|
|
216
|
+
export async function resumeDocumentProjection(context, jobId) {
|
|
217
|
+
context.assertActive();
|
|
218
|
+
return worktreeScope.run({
|
|
219
|
+
worktreeRoot: context.identity.projectRoot,
|
|
220
|
+
projectHash: generateProjectHash(context.identity.projectRoot),
|
|
221
|
+
execution: context,
|
|
222
|
+
}, async () => {
|
|
223
|
+
const db = await getDb(context.identity.projectRoot);
|
|
224
|
+
context.assertActive();
|
|
225
|
+
const store = new DurableJobStore(db, {
|
|
226
|
+
projectId: context.identity.projectId,
|
|
227
|
+
actor: context.identity.actor,
|
|
228
|
+
});
|
|
229
|
+
const job = store.get(jobId);
|
|
230
|
+
if (!job?.proposalJson ||
|
|
231
|
+
!job.proposalHash ||
|
|
232
|
+
job.operation !== 'docs.projection' ||
|
|
233
|
+
createHash('sha256').update(job.proposalJson).digest('hex') !== job.proposalHash) {
|
|
234
|
+
throw new Error('Document projection requires authentic persisted proposal bytes');
|
|
235
|
+
}
|
|
236
|
+
const proposal = DOCS_PROJECTION_PROPOSAL_SCHEMA.parse(JSON.parse(job.proposalJson));
|
|
237
|
+
if (proposal.identity.projectId !== context.identity.projectId ||
|
|
238
|
+
proposal.identity.projectRoot !== context.identity.projectRoot ||
|
|
239
|
+
context.identity.operation !== proposal.operation ||
|
|
240
|
+
proposal.identity.idempotencyKey !== context.identity.idempotencyKey) {
|
|
241
|
+
throw new Error('Document projection scope differs from the immutable proposal');
|
|
242
|
+
}
|
|
243
|
+
const actual = await readProjectionProposal(context, proposal.source);
|
|
244
|
+
if (JSON.stringify(actual.observation) !== JSON.stringify(proposal.observation)) {
|
|
245
|
+
throw new Error('Document projection source metadata changed after preparation');
|
|
246
|
+
}
|
|
247
|
+
if (job.status === 'complete') {
|
|
248
|
+
const receipt = DOCS_PROJECTION_RECEIPT_SCHEMA.parse(job.result);
|
|
249
|
+
await verifyProjection(context, proposal, receipt);
|
|
250
|
+
return receipt;
|
|
251
|
+
}
|
|
252
|
+
context.assertActive();
|
|
253
|
+
const lease = store.claim(job.id, Date.now());
|
|
254
|
+
const execution = bindOperationWriteFence(context, {
|
|
255
|
+
dbPath: resolveDualScopeDbPath('project', context.identity.projectRoot),
|
|
256
|
+
proposalHash: job.proposalHash,
|
|
257
|
+
lease,
|
|
258
|
+
});
|
|
259
|
+
return worktreeScope.run({
|
|
260
|
+
worktreeRoot: context.identity.projectRoot,
|
|
261
|
+
projectHash: generateProjectHash(context.identity.projectRoot),
|
|
262
|
+
execution,
|
|
263
|
+
}, async () => {
|
|
264
|
+
execution.assertActive();
|
|
265
|
+
store.checkpoint(job.id, JSON.stringify({ stage: 'graph', sourceHash: proposal.source.sha256 }), Date.now());
|
|
266
|
+
const graph = await ensureLlmtxtNodeScoped(execution, proposal.source.sha256, `${proposal.source.ownerType}:${proposal.source.ownerId}`, proposal.source.label);
|
|
267
|
+
execution.assertActive();
|
|
268
|
+
store.checkpoint(job.id, JSON.stringify({ stage: 'observation', graph: graph.status }), Date.now());
|
|
269
|
+
const observation = await enqueueBrainWrite({
|
|
270
|
+
kind: 'observe',
|
|
271
|
+
projectRoot: context.identity.projectRoot,
|
|
272
|
+
params: {
|
|
273
|
+
text: JSON.stringify(proposal.observation),
|
|
274
|
+
title: `Doc attached: ${proposal.observation.slug ?? proposal.source.attachmentId}`,
|
|
275
|
+
type: 'feature',
|
|
276
|
+
sourceType: 'agent',
|
|
277
|
+
sourceConfidence: 'agent',
|
|
278
|
+
agent: proposal.identity.actor,
|
|
279
|
+
project: proposal.identity.projectId,
|
|
280
|
+
attachmentRefs: [proposal.source.sha256],
|
|
281
|
+
origin: 'docs.projection',
|
|
282
|
+
_skipGate: true,
|
|
283
|
+
},
|
|
284
|
+
}, execution);
|
|
285
|
+
if (observation.kind !== 'observe')
|
|
286
|
+
throw new Error('Document writer returned an unrelated result');
|
|
287
|
+
const receipt = {
|
|
288
|
+
version: 1,
|
|
289
|
+
sourceHash: proposal.source.sha256,
|
|
290
|
+
graph: graph.status,
|
|
291
|
+
observationId: observation.result.id,
|
|
292
|
+
verifiedAt: new Date().toISOString(),
|
|
293
|
+
actor: context.identity.actor,
|
|
294
|
+
};
|
|
295
|
+
await verifyProjection(execution, proposal, receipt);
|
|
296
|
+
const finalSource = await readProjectionProposal(execution, proposal.source);
|
|
297
|
+
if (JSON.stringify(finalSource.observation) !== JSON.stringify(proposal.observation)) {
|
|
298
|
+
throw new Error('Document source changed before completion');
|
|
299
|
+
}
|
|
300
|
+
execution.assertActive();
|
|
301
|
+
// Finalization uses the existing store transaction. The earlier domain commits
|
|
302
|
+
// remain separately inspectable if ownership/cancellation blocks finalization.
|
|
303
|
+
assertOperationWriteFence(db, execution);
|
|
304
|
+
store.complete(job.id, receipt, Date.now());
|
|
305
|
+
return receipt;
|
|
306
|
+
});
|
|
307
|
+
});
|
|
308
|
+
}
|
|
309
|
+
/**
|
|
310
|
+
* Prepare authentic optional work and observe its execution within one shared budget.
|
|
311
|
+
* @param context - Context captured before canonical attachment storage or other awaits.
|
|
312
|
+
* @param source - The accepted canonical attachment, preserved on every optional failure.
|
|
313
|
+
* @returns Explicit completion, durable pending identity, or a diagnostic with missing preparation.
|
|
314
|
+
* @remarks A timeout ends observation, not arbitrary work. The hardcoded domain executor
|
|
315
|
+
* guards later handles and writes; teardown cancellation reaches its worker. No model starts.
|
|
316
|
+
* @example
|
|
317
|
+
* ```ts
|
|
318
|
+
* const projection = await projectDocumentAttachment(context, acceptedSource);
|
|
319
|
+
* ```
|
|
320
|
+
*/
|
|
321
|
+
export async function projectDocumentAttachment(context, source) {
|
|
322
|
+
let prepared;
|
|
323
|
+
const work = (async () => {
|
|
324
|
+
prepared = await prepareDocumentProjection(context, source);
|
|
325
|
+
context.assertActive();
|
|
326
|
+
return resumeDocumentProjection(context, prepared.jobId);
|
|
327
|
+
})();
|
|
328
|
+
trackBackgroundOp(work);
|
|
329
|
+
const observed = await observeOperation(context, work);
|
|
330
|
+
const base = {
|
|
331
|
+
projectId: context.identity.projectId,
|
|
332
|
+
projectRoot: context.identity.projectRoot,
|
|
333
|
+
deadlineAt: context.deadlineAt,
|
|
334
|
+
deadlineExceeded: observed.deadlineExceeded,
|
|
335
|
+
...(prepared
|
|
336
|
+
? {
|
|
337
|
+
jobId: prepared.jobId,
|
|
338
|
+
}
|
|
339
|
+
: {}),
|
|
340
|
+
};
|
|
341
|
+
if (observed.settled && observed.success)
|
|
342
|
+
return {
|
|
343
|
+
...base,
|
|
344
|
+
status: 'completed',
|
|
345
|
+
coverage: 'current',
|
|
346
|
+
receipt: observed.value,
|
|
347
|
+
diagnostics: [],
|
|
348
|
+
};
|
|
349
|
+
const diagnostics = [];
|
|
350
|
+
if (observed.settled) {
|
|
351
|
+
// Preserve nested SQLite diagnostics without allowing cyclic causes to loop.
|
|
352
|
+
let error = observed.error;
|
|
353
|
+
for (let depth = 0; error && depth < 16; depth++) {
|
|
354
|
+
diagnostics.push(error.message);
|
|
355
|
+
error = error.cause instanceof Error ? error.cause : undefined;
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
else {
|
|
359
|
+
diagnostics.push(`Foreground observation ended (${observed.reason}); underlying outcome remains unresolved`);
|
|
360
|
+
}
|
|
361
|
+
if (!prepared)
|
|
362
|
+
diagnostics.push('No durable pending identity was observed; inspect the accepted attachment before retrying');
|
|
363
|
+
return {
|
|
364
|
+
...base,
|
|
365
|
+
status: observed.settled ? 'failed' : 'pending',
|
|
366
|
+
coverage: prepared ? (observed.settled ? 'failed' : 'partial') : 'missing',
|
|
367
|
+
diagnostics,
|
|
368
|
+
};
|
|
369
|
+
}
|
|
370
|
+
//# sourceMappingURL=projection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"projection.js","sourceRoot":"","sources":["../../src/docs/projection.ts"],"names":[],"mappings":"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"}
|
|
@@ -131,7 +131,9 @@ export type AcceptanceDriftKind =
|
|
|
131
131
|
| 'legacy-children-omitted'
|
|
132
132
|
/** Both populated and disagreeing by something other than the child
|
|
133
133
|
* projections. */
|
|
134
|
-
| 'count-mismatch'
|
|
134
|
+
| 'count-mismatch'
|
|
135
|
+
/** Equal populations carry different criterion text or ordering. */
|
|
136
|
+
| 'content-mismatch';
|
|
135
137
|
/** One task whose acceptance stores disagree. */
|
|
136
138
|
export interface AcceptanceDriftEntry {
|
|
137
139
|
/** Task id, e.g. `T11176`. */
|
|
@@ -142,7 +144,7 @@ export interface AcceptanceDriftEntry {
|
|
|
142
144
|
readonly kind: AcceptanceDriftKind;
|
|
143
145
|
/** Number of entries in `acceptance_json`. */
|
|
144
146
|
readonly jsonCount: number;
|
|
145
|
-
/**
|
|
147
|
+
/** Non-child rows in `tasks_task_acceptance_criteria` (text or evidence-bound). */
|
|
146
148
|
readonly textRowCount: number;
|
|
147
149
|
/** Rows with `kind='child_task'` — container projections, not text. */
|
|
148
150
|
readonly childRowCount: number;
|
|
@@ -234,6 +236,8 @@ export declare function classifyAcceptanceDrift(row: {
|
|
|
234
236
|
jsonCount: number;
|
|
235
237
|
textRowCount: number;
|
|
236
238
|
childRowCount: number;
|
|
239
|
+
/** Whether persisted criterion text and ordering agree when assessed. */
|
|
240
|
+
contentMatches?: boolean;
|
|
237
241
|
}): AcceptanceDriftKind | null;
|
|
238
242
|
/**
|
|
239
243
|
* Scan a project's store for acceptance drift.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"acceptance-drift.d.ts","sourceRoot":"","sources":["../../src/doctor/acceptance-drift.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+FG;
|
|
1
|
+
{"version":3,"file":"acceptance-drift.d.ts","sourceRoot":"","sources":["../../src/doctor/acceptance-drift.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+FG;AAYH;;;;;;GAMG;AACH,eAAO,MAAM,8BAA8B,mCAAmC,CAAC;AAE/E;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,gCAAgC,eAAe,CAAC;AAE7D;;;GAGG;AACH,MAAM,MAAM,mBAAmB;AAC7B,2DAA2D;AACzD,sBAAsB;AACxB;yEACyE;GACvE,iBAAiB;AACnB;;YAEY;GACV,yBAAyB;AAC3B;mBACmB;GACjB,gBAAgB;AAClB,oEAAoE;GAClE,kBAAkB,CAAC;AAEvB,iDAAiD;AACjD,MAAM,WAAW,oBAAoB;IACnC,8BAA8B;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,4CAA4C;IAC5C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,mCAAmC;IACnC,QAAQ,CAAC,IAAI,EAAE,mBAAmB,CAAC;IACnC,8CAA8C;IAC9C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,mFAAmF;IACnF,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,uEAAuE;IACvE,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B;;;;;;;;OAQG;IACH,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,yCAAyC;IACzC,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC;;;OAGG;IACH,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;CAC7B;AAED,+DAA+D;AAC/D,MAAM,WAAW,yBAAyB;IACxC,mDAAmD;IACnD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,8EAA8E;IAC9E,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,sBAAsB;IACtB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B;;;;;OAKG;IACH,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,yEAAyE;IACzE,QAAQ,CAAC,OAAO,EAAE,SAAS,oBAAoB,EAAE,CAAC;IAClD,mDAAmD;IACnD,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,mBAAmB,EAAE,MAAM,CAAC,CAAC,CAAC;IAC/D,4EAA4E;IAC5E,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC;;;;;;;;;;;;;;OAcG;IACH,QAAQ,CAAC,WAAW,EAAE,SAAS,oBAAoB,EAAE,CAAC;IACtD,0DAA0D;IAC1D,QAAQ,CAAC,gBAAgB,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7C,oEAAoE;IACpE,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B;AAED;;;;;;GAMG;AACH,wBAAgB,2BAA2B,CAAC,YAAY,EAAE,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC,CASrF;AAED;;;;;GAKG;AACH,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,yBAAyB,GAAG,MAAM,CAmBpF;AA+FD;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CAAC,GAAG,EAAE;IAC3C,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,yEAAyE;IACzE,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B,GAAG,mBAAmB,GAAG,IAAI,CAuB7B;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,yBAAyB,CA8HlF"}
|
|
@@ -96,7 +96,9 @@
|
|
|
96
96
|
*/
|
|
97
97
|
import { existsSync, readFileSync, writeFileSync } from 'node:fs';
|
|
98
98
|
import { join } from 'node:path';
|
|
99
|
+
import { acceptanceItemSchema } from '@cleocode/contracts';
|
|
99
100
|
import { openCleoDbSnapshot } from '../store/open-cleo-db.js';
|
|
101
|
+
import { acItemToText } from '../tasks/ac-table.js';
|
|
100
102
|
/** The dual-scope store filename (ADR-068). */
|
|
101
103
|
const LIVE_STORE_FILENAME = 'cleo.db';
|
|
102
104
|
/**
|
|
@@ -192,6 +194,8 @@ function toScanRow(record) {
|
|
|
192
194
|
const jsonN = columnAsCount(record['json_n']);
|
|
193
195
|
const textN = columnAsCount(record['text_n']);
|
|
194
196
|
const childN = columnAsCount(record['child_n']);
|
|
197
|
+
const acceptanceJson = columnAsStringOrNull(record['acceptance_json']);
|
|
198
|
+
const rowTextsJson = columnAsStringOrNull(record['row_texts_json']);
|
|
195
199
|
// Name the offending column. An error that says only "the shape is wrong"
|
|
196
200
|
// sends the reader to the SQL when the problem is one value in one row —
|
|
197
201
|
// the failure describing the wrong thing with full confidence (ADR-092).
|
|
@@ -200,8 +204,16 @@ function toScanRow(record) {
|
|
|
200
204
|
['json_n', jsonN],
|
|
201
205
|
['text_n', textN],
|
|
202
206
|
['child_n', childN],
|
|
207
|
+
['acceptance_json', acceptanceJson],
|
|
208
|
+
['row_texts_json', rowTextsJson],
|
|
203
209
|
].find(([, value]) => value === null)?.[0];
|
|
204
|
-
if (bad !== undefined ||
|
|
210
|
+
if (bad !== undefined ||
|
|
211
|
+
id === null ||
|
|
212
|
+
jsonN === null ||
|
|
213
|
+
textN === null ||
|
|
214
|
+
childN === null ||
|
|
215
|
+
acceptanceJson === null ||
|
|
216
|
+
rowTextsJson === null) {
|
|
205
217
|
throw new Error(`acceptance-drift: scan column "${String(bad)}" had an unexpected type ` +
|
|
206
218
|
`(got ${typeof record[String(bad)]}) for task ${String(record['id'] ?? '<unknown>')}. ` +
|
|
207
219
|
'The SQL and ScanRow have drifted apart.');
|
|
@@ -216,6 +228,8 @@ function toScanRow(record) {
|
|
|
216
228
|
json_n: jsonN,
|
|
217
229
|
text_n: textN,
|
|
218
230
|
child_n: childN,
|
|
231
|
+
acceptance_json: acceptanceJson,
|
|
232
|
+
row_texts_json: rowTextsJson,
|
|
219
233
|
};
|
|
220
234
|
}
|
|
221
235
|
/**
|
|
@@ -237,7 +251,7 @@ export function classifyAcceptanceDrift(row) {
|
|
|
237
251
|
// child projection alike. Measured at 607/608 for tasks created since the
|
|
238
252
|
// convention settled in 2026-06.
|
|
239
253
|
if (jsonCount === expected)
|
|
240
|
-
return null;
|
|
254
|
+
return row.contentMatches === false ? 'content-mismatch' : null;
|
|
241
255
|
if (jsonCount > 0 && expected === 0)
|
|
242
256
|
return 'json-never-projected';
|
|
243
257
|
// Rows exist and the JSON column is empty. This is the only shape where the
|
|
@@ -278,6 +292,7 @@ export function scanAcceptanceDrift(projectRoot) {
|
|
|
278
292
|
'rows-unreadable': 0,
|
|
279
293
|
'legacy-children-omitted': 0,
|
|
280
294
|
'count-mismatch': 0,
|
|
295
|
+
'content-mismatch': 0,
|
|
281
296
|
};
|
|
282
297
|
if (!existsSync(storePath)) {
|
|
283
298
|
return {
|
|
@@ -308,8 +323,13 @@ export function scanAcceptanceDrift(projectRoot) {
|
|
|
308
323
|
OR t.acceptance_json IN ('', '[]', 'null')
|
|
309
324
|
THEN 0
|
|
310
325
|
ELSE json_array_length(t.acceptance_json) END AS json_n,
|
|
311
|
-
COALESCE(SUM(CASE WHEN c.kind
|
|
312
|
-
COALESCE(SUM(CASE WHEN c.kind = 'child_task' THEN 1 ELSE 0 END), 0) AS child_n
|
|
326
|
+
COALESCE(SUM(CASE WHEN c.kind IN ('text', 'evidence_bound') THEN 1 ELSE 0 END), 0) AS text_n,
|
|
327
|
+
COALESCE(SUM(CASE WHEN c.kind = 'child_task' THEN 1 ELSE 0 END), 0) AS child_n,
|
|
328
|
+
CASE WHEN t.acceptance_json IS NULL OR t.acceptance_json IN ('', 'null')
|
|
329
|
+
THEN '[]' ELSE t.acceptance_json END AS acceptance_json,
|
|
330
|
+
(SELECT json_group_array(text) FROM
|
|
331
|
+
(SELECT c2.text FROM main.tasks_task_acceptance_criteria c2
|
|
332
|
+
WHERE c2.task_id = t.id ORDER BY c2.ordinal)) AS row_texts_json
|
|
313
333
|
FROM main.tasks_tasks t
|
|
314
334
|
LEFT JOIN main.tasks_task_acceptance_criteria c ON c.task_id = t.id
|
|
315
335
|
GROUP BY t.id`)
|
|
@@ -325,7 +345,25 @@ export function scanAcceptanceDrift(projectRoot) {
|
|
|
325
345
|
const totalRows = textRowCount + childRowCount;
|
|
326
346
|
if (jsonCount !== totalRows)
|
|
327
347
|
rawDisagreements += 1;
|
|
328
|
-
|
|
348
|
+
// Validate persisted payloads rather than silently coercing malformed
|
|
349
|
+
// records into empty arrays. The canonical formatter preserves structured
|
|
350
|
+
// gates while comparing their serialized representation to row text.
|
|
351
|
+
const legacy = acceptanceItemSchema
|
|
352
|
+
.array()
|
|
353
|
+
.parse(JSON.parse(row.acceptance_json))
|
|
354
|
+
.map(acItemToText);
|
|
355
|
+
const projected = acceptanceItemSchema
|
|
356
|
+
.array()
|
|
357
|
+
.parse(JSON.parse(row.row_texts_json))
|
|
358
|
+
.map(acItemToText);
|
|
359
|
+
const contentMatches = legacy.length === projected.length &&
|
|
360
|
+
legacy.every((text, index) => text === projected[index]);
|
|
361
|
+
const kind = classifyAcceptanceDrift({
|
|
362
|
+
jsonCount,
|
|
363
|
+
textRowCount,
|
|
364
|
+
childRowCount,
|
|
365
|
+
contentMatches,
|
|
366
|
+
});
|
|
329
367
|
if (kind === null)
|
|
330
368
|
continue;
|
|
331
369
|
byKind[kind] += 1;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"acceptance-drift.js","sourceRoot":"","sources":["../../src/doctor/acceptance-drift.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+FG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAClE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"acceptance-drift.js","sourceRoot":"","sources":["../../src/doctor/acceptance-drift.ts"],"names":[],"mappings":"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"}
|