@cleocode/core 2026.9.8 → 2026.9.10
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/compliance/protocol-rules.d.ts.map +1 -1
- package/dist/compliance/protocol-rules.js +3 -1
- package/dist/compliance/protocol-rules.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 +5129 -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 +169 -0
- package/dist/git/work-tree.d.ts.map +1 -0
- package/dist/git/work-tree.js +341 -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 +3 -0
- package/dist/internal.d.ts.map +1 -1
- package/dist/internal.js +4 -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 +4047 -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 +25 -45
- 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 +23 -4
- package/dist/release/pr-evidence.d.ts.map +1 -1
- package/dist/release/pr-evidence.js +65 -9
- 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 +4055 -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 +42 -6
- 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 +88 -27
- package/dist/tasks/evidence.d.ts.map +1 -1
- package/dist/tasks/evidence.js +344 -43
- 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-preview.d.ts +73 -0
- package/dist/tasks/gate-preview.d.ts.map +1 -0
- package/dist/tasks/gate-preview.js +119 -0
- package/dist/tasks/gate-preview.js.map +1 -0
- 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 +719 -250
- 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/schemas/project-context.schema.json +12 -0
- package/templates/CLEO-INJECTION.md +114 -101
package/dist/tasks/ops.js
CHANGED
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
* @see ADR-057 — Core API normalization
|
|
20
20
|
* @see packages/contracts/src/operations/tasks.ts
|
|
21
21
|
*/
|
|
22
|
-
import { addTask } from './add.js';
|
|
22
|
+
import { addTask, toTaskAddOptions } from './add.js';
|
|
23
23
|
import { tasksAddBatchOp } from './add-batch.js';
|
|
24
24
|
import { archiveTasks } from './archive.js';
|
|
25
25
|
import { completeTask } from './complete.js';
|
|
@@ -28,7 +28,7 @@ import { findTasks } from './find.js';
|
|
|
28
28
|
import { listTasks } from './list.js';
|
|
29
29
|
import { showTask } from './show.js';
|
|
30
30
|
import { coreTaskSlice } from './task-data.js';
|
|
31
|
-
import { updateTask } from './update.js';
|
|
31
|
+
import { toTaskUpdateOptions, updateTask } from './update.js';
|
|
32
32
|
// ---------------------------------------------------------------------------
|
|
33
33
|
// Query ops
|
|
34
34
|
// ---------------------------------------------------------------------------
|
|
@@ -117,26 +117,7 @@ export async function tasksSliceOp(projectRoot, params) {
|
|
|
117
117
|
* @throws CleoError on validation failures or duplicate detection.
|
|
118
118
|
*/
|
|
119
119
|
export async function tasksAddOp(projectRoot, params) {
|
|
120
|
-
return addTask(
|
|
121
|
-
title: params.title,
|
|
122
|
-
description: params.description,
|
|
123
|
-
// ADR-057 D2: wire field `parent` maps to Core internal `parentId`
|
|
124
|
-
parentId: params.parent,
|
|
125
|
-
depends: params.depends,
|
|
126
|
-
priority: params.priority,
|
|
127
|
-
labels: params.labels,
|
|
128
|
-
type: params.type,
|
|
129
|
-
acceptance: params.acceptance,
|
|
130
|
-
phase: params.phase,
|
|
131
|
-
size: params.size,
|
|
132
|
-
notes: params.notes,
|
|
133
|
-
files: params.files,
|
|
134
|
-
dryRun: params.dryRun,
|
|
135
|
-
kind: params.kind,
|
|
136
|
-
scope: params.scope,
|
|
137
|
-
severity: params.severity,
|
|
138
|
-
forceDuplicate: params.forceDuplicate,
|
|
139
|
-
}, projectRoot);
|
|
120
|
+
return addTask(toTaskAddOptions(params), projectRoot);
|
|
140
121
|
}
|
|
141
122
|
/**
|
|
142
123
|
* Normalized wrapper for {@link tasksAddBatchOp}.
|
|
@@ -165,33 +146,7 @@ export async function tasksAddBatchOpNormalized(projectRoot, params) {
|
|
|
165
146
|
* @throws CleoError with ExitCode.NOT_FOUND when task does not exist.
|
|
166
147
|
*/
|
|
167
148
|
export async function tasksUpdateOp(projectRoot, params) {
|
|
168
|
-
return updateTask(
|
|
169
|
-
taskId: params.taskId,
|
|
170
|
-
title: params.title,
|
|
171
|
-
description: params.description,
|
|
172
|
-
status: params.status,
|
|
173
|
-
priority: params.priority,
|
|
174
|
-
notes: params.notes,
|
|
175
|
-
labels: params.labels,
|
|
176
|
-
addLabels: params.addLabels,
|
|
177
|
-
removeLabels: params.removeLabels,
|
|
178
|
-
depends: params.depends,
|
|
179
|
-
addDepends: params.addDepends,
|
|
180
|
-
removeDepends: params.removeDepends,
|
|
181
|
-
acceptance: params.acceptance,
|
|
182
|
-
// ADR-057 D2: wire field `parent` maps to Core internal `parentId`
|
|
183
|
-
parentId: params.parent,
|
|
184
|
-
type: params.type,
|
|
185
|
-
size: params.size,
|
|
186
|
-
files: params.files,
|
|
187
|
-
addFiles: params.addFiles,
|
|
188
|
-
removeFiles: params.removeFiles,
|
|
189
|
-
pipelineStage: params.pipelineStage,
|
|
190
|
-
kind: params.kind,
|
|
191
|
-
scope: params.scope,
|
|
192
|
-
severity: params.severity,
|
|
193
|
-
clearBlockedBy: params.clearBlockedBy,
|
|
194
|
-
}, projectRoot);
|
|
149
|
+
return updateTask(toTaskUpdateOptions(params), projectRoot);
|
|
195
150
|
}
|
|
196
151
|
/**
|
|
197
152
|
* Normalized wrapper for {@link completeTask}.
|
|
@@ -219,10 +174,7 @@ export async function tasksCompleteOp(projectRoot, params) {
|
|
|
219
174
|
* @throws CleoError with ExitCode.NOT_FOUND when task does not exist.
|
|
220
175
|
*/
|
|
221
176
|
export async function tasksDeleteOp(projectRoot, params) {
|
|
222
|
-
return deleteTask(
|
|
223
|
-
taskId: params.taskId,
|
|
224
|
-
force: params.force,
|
|
225
|
-
}, projectRoot);
|
|
177
|
+
return deleteTask(params, projectRoot);
|
|
226
178
|
}
|
|
227
179
|
/**
|
|
228
180
|
* Normalized wrapper for {@link archiveTasks}.
|
package/dist/tasks/ops.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ops.js","sourceRoot":"","sources":["../../src/tasks/ops.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;
|
|
1
|
+
{"version":3,"file":"ops.js","sourceRoot":"","sources":["../../src/tasks/ops.ts"],"names":[],"mappings":"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"}
|
package/dist/tasks/plan.d.ts
CHANGED
|
@@ -47,7 +47,21 @@ export interface PlanResult {
|
|
|
47
47
|
metrics: PlanMetrics;
|
|
48
48
|
}
|
|
49
49
|
/**
|
|
50
|
-
* Build composite
|
|
50
|
+
* Build a composite plan with canonical hard-dependency evidence.
|
|
51
|
+
*
|
|
52
|
+
* @remarks
|
|
53
|
+
* Candidate selection, hierarchy and metrics retain the active query population.
|
|
54
|
+
* A separate lookup resolves explicit external dependencies, including archived
|
|
55
|
+
* records. Missing or cancelled dependencies remain blockers; required read
|
|
56
|
+
* failures propagate rather than returning an apparently healthy empty plan.
|
|
57
|
+
*
|
|
58
|
+
* @param projectRoot - Explicit owning project root.
|
|
59
|
+
* @returns Ranked candidates, unresolved blockers and selected-population metrics.
|
|
60
|
+
* @throws Error when required task or dependency evidence cannot be read.
|
|
61
|
+
* @example
|
|
62
|
+
* ```ts
|
|
63
|
+
* const plan = await coreTaskPlan(projectRoot);
|
|
64
|
+
* ```
|
|
51
65
|
* @task T4914
|
|
52
66
|
*/
|
|
53
67
|
export declare function coreTaskPlan(projectRoot: string): Promise<PlanResult>;
|
package/dist/tasks/plan.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plan.d.ts","sourceRoot":"","sources":["../../src/tasks/plan.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAe,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,KAAK,YAAY,EAAiB,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"plan.d.ts","sourceRoot":"","sources":["../../src/tasks/plan.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAe,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,KAAK,YAAY,EAAiB,MAAM,qBAAqB,CAAC;AAWvE,8BAA8B;AAC9B,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,+CAA+C;AAC/C,MAAM,WAAW,SAAU,SAAQ,IAAI,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,GAAG,UAAU,CAAC;IACxE,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,0BAA0B;AAC1B,MAAM,WAAW,WAAY,SAAQ,IAAI,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC;IAC7D,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,sBAAsB;AACtB,MAAM,WAAW,OAAQ,SAAQ,IAAI,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,GAAG,UAAU,CAAC;IACtE,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAwB;AACxB,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,sCAAsC;AACtC,MAAM,WAAW,UAAU;IACzB,UAAU,EAAE,cAAc,EAAE,CAAC;IAC7B,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,OAAO,EAAE,WAAW,CAAC;CACtB;AA4FD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAgM3E;AAMD;;;;;;;;;GASG;AACH,wBAAsB,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CASzE"}
|
package/dist/tasks/plan.js
CHANGED
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
import { engineSuccess } from '../engine-result.js';
|
|
7
7
|
import { cleoErrorToEngineResult } from '../errors-to-engine.js';
|
|
8
8
|
import { getTaskAccessor } from '../store/data-accessor.js';
|
|
9
|
+
import { getReadinessDependencyBlockers, loadReadinessDependencyLookup, } from './dependency-check.js';
|
|
9
10
|
import { depsReady } from './deps-ready.js';
|
|
10
11
|
const PRIORITY_SCORE = {
|
|
11
12
|
critical: 100,
|
|
@@ -13,11 +14,6 @@ const PRIORITY_SCORE = {
|
|
|
13
14
|
medium: 50,
|
|
14
15
|
low: 25,
|
|
15
16
|
};
|
|
16
|
-
async function loadAllTasks(projectRoot) {
|
|
17
|
-
const accessor = await getTaskAccessor(projectRoot);
|
|
18
|
-
const { tasks } = await accessor.queryTasks({});
|
|
19
|
-
return tasks;
|
|
20
|
-
}
|
|
21
17
|
/**
|
|
22
18
|
* Calculate leverage score for a task based on how many other tasks depend on it.
|
|
23
19
|
*/
|
|
@@ -89,11 +85,27 @@ function calculateEpicCompletion(epicId, taskMap) {
|
|
|
89
85
|
return { activeTasks, completionPercent };
|
|
90
86
|
}
|
|
91
87
|
/**
|
|
92
|
-
* Build composite
|
|
88
|
+
* Build a composite plan with canonical hard-dependency evidence.
|
|
89
|
+
*
|
|
90
|
+
* @remarks
|
|
91
|
+
* Candidate selection, hierarchy and metrics retain the active query population.
|
|
92
|
+
* A separate lookup resolves explicit external dependencies, including archived
|
|
93
|
+
* records. Missing or cancelled dependencies remain blockers; required read
|
|
94
|
+
* failures propagate rather than returning an apparently healthy empty plan.
|
|
95
|
+
*
|
|
96
|
+
* @param projectRoot - Explicit owning project root.
|
|
97
|
+
* @returns Ranked candidates, unresolved blockers and selected-population metrics.
|
|
98
|
+
* @throws Error when required task or dependency evidence cannot be read.
|
|
99
|
+
* @example
|
|
100
|
+
* ```ts
|
|
101
|
+
* const plan = await coreTaskPlan(projectRoot);
|
|
102
|
+
* ```
|
|
93
103
|
* @task T4914
|
|
94
104
|
*/
|
|
95
105
|
export async function coreTaskPlan(projectRoot) {
|
|
96
|
-
const
|
|
106
|
+
const accessor = await getTaskAccessor(projectRoot);
|
|
107
|
+
const { tasks: allTasks } = await accessor.queryTasks({});
|
|
108
|
+
const dependencyLookup = await loadReadinessDependencyLookup(allTasks, accessor);
|
|
97
109
|
const taskMap = new Map(allTasks.map((t) => [t.id, t]));
|
|
98
110
|
const currentPhase = await getCurrentPhase(projectRoot);
|
|
99
111
|
// ========================================================================
|
|
@@ -117,7 +129,7 @@ export async function coreTaskPlan(projectRoot) {
|
|
|
117
129
|
const readyTasks = [];
|
|
118
130
|
const pendingTasks = allTasks.filter((t) => t.status === 'pending');
|
|
119
131
|
for (const task of pendingTasks) {
|
|
120
|
-
if (depsReady(task.depends,
|
|
132
|
+
if (depsReady(task.depends, dependencyLookup)) {
|
|
121
133
|
const leverage = calculateLeverage(task.id, taskMap);
|
|
122
134
|
const epicId = findEpicId(task, taskMap);
|
|
123
135
|
// Calculate score using same logic as tasks.next
|
|
@@ -169,14 +181,7 @@ export async function coreTaskPlan(projectRoot) {
|
|
|
169
181
|
if (task.blockedBy) {
|
|
170
182
|
blockedBy.push(task.blockedBy);
|
|
171
183
|
}
|
|
172
|
-
|
|
173
|
-
for (const depId of task.depends) {
|
|
174
|
-
const dep = taskMap.get(depId);
|
|
175
|
-
if (dep && dep.status !== 'done' && dep.status !== 'cancelled') {
|
|
176
|
-
blockedBy.push(depId);
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
}
|
|
184
|
+
blockedBy.push(...getReadinessDependencyBlockers(task.depends, dependencyLookup));
|
|
180
185
|
// Calculate how many tasks this blocks
|
|
181
186
|
let blocksCount = 0;
|
|
182
187
|
for (const t of allTasks) {
|
|
@@ -195,15 +200,8 @@ export async function coreTaskPlan(projectRoot) {
|
|
|
195
200
|
// Tasks with unresolved dependencies (pending + has incomplete deps)
|
|
196
201
|
for (const task of allTasks) {
|
|
197
202
|
if (task.status === 'pending' && task.depends && task.depends.length > 0) {
|
|
198
|
-
const
|
|
199
|
-
|
|
200
|
-
return dep && dep.status !== 'done' && dep.status !== 'cancelled';
|
|
201
|
-
});
|
|
202
|
-
if (hasUnresolvedDeps && !blockedTasks.some((b) => b.id === task.id)) {
|
|
203
|
-
const blockedBy = task.depends.filter((depId) => {
|
|
204
|
-
const dep = taskMap.get(depId);
|
|
205
|
-
return dep && dep.status !== 'done' && dep.status !== 'cancelled';
|
|
206
|
-
});
|
|
203
|
+
const blockedBy = getReadinessDependencyBlockers(task.depends, dependencyLookup);
|
|
204
|
+
if (blockedBy.length > 0 && !blockedTasks.some((b) => b.id === task.id)) {
|
|
207
205
|
// Calculate how many tasks this blocks
|
|
208
206
|
let blocksCount = 0;
|
|
209
207
|
for (const t of allTasks) {
|
package/dist/tasks/plan.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plan.js","sourceRoot":"","sources":["../../src/tasks/plan.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAqB,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACvE,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAmD5C,MAAM,cAAc,GAA2B;IAC7C,QAAQ,EAAE,GAAG;IACb,IAAI,EAAE,EAAE;IACR,MAAM,EAAE,EAAE;IACV,GAAG,EAAE,EAAE;CACR,CAAC;AAEF
|
|
1
|
+
{"version":3,"file":"plan.js","sourceRoot":"","sources":["../../src/tasks/plan.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/** Shared task filtering and enumeration truth (T12200). */
|
|
2
|
+
import type { DataAccessor, Task, TaskPopulation, TaskQueryFilters } from '@cleocode/contracts';
|
|
3
|
+
/**
|
|
4
|
+
* Apply identical eligibility to ordinary and archived task rows.
|
|
5
|
+
* @param task - Candidate task from either storage population.
|
|
6
|
+
* @param filters - Axis, parent, label and phase eligibility constraints.
|
|
7
|
+
* @returns Whether the candidate satisfies every supplied constraint.
|
|
8
|
+
* @remarks Archive inclusion is handled by the population reader, before pagination.
|
|
9
|
+
* @example
|
|
10
|
+
* ```ts
|
|
11
|
+
* const eligible = matchesTaskFilters(task, { parentId: "T001" });
|
|
12
|
+
* ```
|
|
13
|
+
*/
|
|
14
|
+
export declare function matchesTaskFilters(task: Task, filters: TaskQueryFilters): boolean;
|
|
15
|
+
/**
|
|
16
|
+
* Read the full eligible population before matching or pagination.
|
|
17
|
+
* @param accessor - Project-bound canonical task store.
|
|
18
|
+
* @param filters - Eligibility constraints; pagination fields are deliberately ignored.
|
|
19
|
+
* @param includeArchive - Include archived storage rows with the same filters.
|
|
20
|
+
* @returns Eligible task rows deduplicated by task identity.
|
|
21
|
+
* @remarks Archive read errors propagate; they must not imply an empty population.
|
|
22
|
+
* @example
|
|
23
|
+
* ```ts
|
|
24
|
+
* const tasks = await readTaskPopulation(accessor, { parentId: "T001" }, true);
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
export declare function readTaskPopulation(accessor: DataAccessor, filters: TaskQueryFilters, includeArchive?: boolean): Promise<Task[]>;
|
|
28
|
+
/**
|
|
29
|
+
* Slice once and retain explicit match, returned, pagination and archive facts.
|
|
30
|
+
* @typeParam T - Eligible row shape retained without projection.
|
|
31
|
+
* @param rows - Entire matched population in presentation order.
|
|
32
|
+
* @param limit - Non-negative page size; zero returns all rows after offset.
|
|
33
|
+
* @param offset - Non-negative count of initial matched rows to skip.
|
|
34
|
+
* @param archive - Archive inclusion policy used when assembling the population.
|
|
35
|
+
* @returns Selected rows and matched-versus-returned population facts.
|
|
36
|
+
* @remarks Invalid or fractional bounds are rejected rather than rounded or defaulted.
|
|
37
|
+
* @example
|
|
38
|
+
* ```ts
|
|
39
|
+
* const page = paginateTaskPopulation(tasks, 10, 0, "excluded");
|
|
40
|
+
* ```
|
|
41
|
+
*/
|
|
42
|
+
export declare function paginateTaskPopulation<T>(rows: T[], limit: number, offset?: number, archive?: TaskPopulation['archive']): {
|
|
43
|
+
rows: T[];
|
|
44
|
+
population: TaskPopulation;
|
|
45
|
+
};
|
|
46
|
+
//# sourceMappingURL=population.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"population.d.ts","sourceRoot":"","sources":["../../src/tasks/population.ts"],"names":[],"mappings":"AAAA,4DAA4D;AAC5D,OAAO,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAWhG;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAYjF;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,kBAAkB,CACtC,QAAQ,EAAE,YAAY,EACtB,OAAO,EAAE,gBAAgB,EACzB,cAAc,UAAQ,GACrB,OAAO,CAAC,IAAI,EAAE,CAAC,CAajB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,sBAAsB,CAAC,CAAC,EACtC,IAAI,EAAE,CAAC,EAAE,EACT,KAAK,EAAE,MAAM,EACb,MAAM,SAAI,EACV,OAAO,GAAE,cAAc,CAAC,SAAS,CAAc,GAC9C;IAAE,IAAI,EAAE,CAAC,EAAE,CAAC;IAAC,UAAU,EAAE,cAAc,CAAA;CAAE,CAmB3C"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { ExitCode } from '@cleocode/contracts';
|
|
2
|
+
import { CleoError } from '../errors.js';
|
|
3
|
+
import { assertTaskAxisFilters } from './axis-filters.js';
|
|
4
|
+
function includesValue(filter, value) {
|
|
5
|
+
return (filter === undefined || (Array.isArray(filter) ? filter.includes(value) : filter === value));
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Apply identical eligibility to ordinary and archived task rows.
|
|
9
|
+
* @param task - Candidate task from either storage population.
|
|
10
|
+
* @param filters - Axis, parent, label and phase eligibility constraints.
|
|
11
|
+
* @returns Whether the candidate satisfies every supplied constraint.
|
|
12
|
+
* @remarks Archive inclusion is handled by the population reader, before pagination.
|
|
13
|
+
* @example
|
|
14
|
+
* ```ts
|
|
15
|
+
* const eligible = matchesTaskFilters(task, { parentId: "T001" });
|
|
16
|
+
* ```
|
|
17
|
+
*/
|
|
18
|
+
export function matchesTaskFilters(task, filters) {
|
|
19
|
+
return (includesValue(filters.status, task.status) &&
|
|
20
|
+
(!filters.excludeStatus || !includesValue(filters.excludeStatus, task.status)) &&
|
|
21
|
+
includesValue(filters.kind, task.kind) &&
|
|
22
|
+
includesValue(filters.severity, task.severity) &&
|
|
23
|
+
(!filters.priority || task.priority === filters.priority) &&
|
|
24
|
+
(!filters.type || task.type === filters.type) &&
|
|
25
|
+
(filters.parentId === undefined || task.parentId === filters.parentId) &&
|
|
26
|
+
(!filters.phase || task.phase === filters.phase) &&
|
|
27
|
+
(!filters.label || (task.labels ?? []).includes(filters.label)));
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Read the full eligible population before matching or pagination.
|
|
31
|
+
* @param accessor - Project-bound canonical task store.
|
|
32
|
+
* @param filters - Eligibility constraints; pagination fields are deliberately ignored.
|
|
33
|
+
* @param includeArchive - Include archived storage rows with the same filters.
|
|
34
|
+
* @returns Eligible task rows deduplicated by task identity.
|
|
35
|
+
* @remarks Archive read errors propagate; they must not imply an empty population.
|
|
36
|
+
* @example
|
|
37
|
+
* ```ts
|
|
38
|
+
* const tasks = await readTaskPopulation(accessor, { parentId: "T001" }, true);
|
|
39
|
+
* ```
|
|
40
|
+
*/
|
|
41
|
+
export async function readTaskPopulation(accessor, filters, includeArchive = false) {
|
|
42
|
+
assertTaskAxisFilters(filters);
|
|
43
|
+
const queried = await accessor.queryTasks({ ...filters, limit: undefined, offset: undefined });
|
|
44
|
+
const archive = includeArchive ? await accessor.loadArchive() : null;
|
|
45
|
+
const rows = [...queried.tasks, ...(archive?.archivedTasks ?? [])];
|
|
46
|
+
const unique = new Map();
|
|
47
|
+
for (const task of rows) {
|
|
48
|
+
if (!includeArchive && !includesValue(filters.status, 'archived') && task.status === 'archived')
|
|
49
|
+
continue;
|
|
50
|
+
if (!includeArchive && filters.status === undefined && task.status === 'archived')
|
|
51
|
+
continue;
|
|
52
|
+
if (matchesTaskFilters(task, filters))
|
|
53
|
+
unique.set(task.id, task);
|
|
54
|
+
}
|
|
55
|
+
return [...unique.values()];
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Slice once and retain explicit match, returned, pagination and archive facts.
|
|
59
|
+
* @typeParam T - Eligible row shape retained without projection.
|
|
60
|
+
* @param rows - Entire matched population in presentation order.
|
|
61
|
+
* @param limit - Non-negative page size; zero returns all rows after offset.
|
|
62
|
+
* @param offset - Non-negative count of initial matched rows to skip.
|
|
63
|
+
* @param archive - Archive inclusion policy used when assembling the population.
|
|
64
|
+
* @returns Selected rows and matched-versus-returned population facts.
|
|
65
|
+
* @remarks Invalid or fractional bounds are rejected rather than rounded or defaulted.
|
|
66
|
+
* @example
|
|
67
|
+
* ```ts
|
|
68
|
+
* const page = paginateTaskPopulation(tasks, 10, 0, "excluded");
|
|
69
|
+
* ```
|
|
70
|
+
*/
|
|
71
|
+
export function paginateTaskPopulation(rows, limit, offset = 0, archive = 'excluded') {
|
|
72
|
+
if (!Number.isSafeInteger(limit) || limit < 0 || !Number.isSafeInteger(offset) || offset < 0) {
|
|
73
|
+
throw new CleoError(ExitCode.INVALID_INPUT, 'Task limit and offset must be non-negative integers');
|
|
74
|
+
}
|
|
75
|
+
const selected = limit === 0 ? rows.slice(offset) : rows.slice(offset, offset + limit);
|
|
76
|
+
return {
|
|
77
|
+
rows: selected,
|
|
78
|
+
population: {
|
|
79
|
+
matched: rows.length,
|
|
80
|
+
returned: selected.length,
|
|
81
|
+
truncated: selected.length < rows.length,
|
|
82
|
+
limit: limit === 0 ? null : limit,
|
|
83
|
+
offset,
|
|
84
|
+
archive,
|
|
85
|
+
},
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=population.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"population.js","sourceRoot":"","sources":["../../src/tasks/population.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAE1D,SAAS,aAAa,CAAI,MAA2B,EAAE,KAAQ;IAC7D,OAAO,CACL,MAAM,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,KAAK,CAAC,CAC5F,CAAC;AACJ,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAU,EAAE,OAAyB;IACtE,OAAO,CACL,aAAa,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC;QAC1C,CAAC,CAAC,OAAO,CAAC,aAAa,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,aAAa,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAC9E,aAAa,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC;QACtC,aAAa,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC;QAC9C,CAAC,CAAC,OAAO,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,KAAK,OAAO,CAAC,QAAQ,CAAC;QACzD,CAAC,CAAC,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC;QAC7C,CAAC,OAAO,CAAC,QAAQ,KAAK,SAAS,IAAI,IAAI,CAAC,QAAQ,KAAK,OAAO,CAAC,QAAQ,CAAC;QACtE,CAAC,CAAC,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,KAAK,OAAO,CAAC,KAAK,CAAC;QAChD,CAAC,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAChE,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,QAAsB,EACtB,OAAyB,EACzB,cAAc,GAAG,KAAK;IAEtB,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAC/B,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,UAAU,CAAC,EAAE,GAAG,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;IAC/F,MAAM,OAAO,GAAG,cAAc,CAAC,CAAC,CAAC,MAAM,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IACrE,MAAM,IAAI,GAAG,CAAC,GAAG,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,aAAa,IAAI,EAAE,CAAC,CAAC,CAAC;IACnE,MAAM,MAAM,GAAG,IAAI,GAAG,EAAgB,CAAC;IACvC,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE,CAAC;QACxB,IAAI,CAAC,cAAc,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,MAAM,EAAE,UAAU,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,UAAU;YAC7F,SAAS;QACX,IAAI,CAAC,cAAc,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,KAAK,UAAU;YAAE,SAAS;QAC5F,IAAI,kBAAkB,CAAC,IAAI,EAAE,OAAO,CAAC;YAAE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IACnE,CAAC;IACD,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;AAC9B,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,sBAAsB,CACpC,IAAS,EACT,KAAa,EACb,MAAM,GAAG,CAAC,EACV,UAAqC,UAAU;IAE/C,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7F,MAAM,IAAI,SAAS,CACjB,QAAQ,CAAC,aAAa,EACtB,qDAAqD,CACtD,CAAC;IACJ,CAAC;IACD,MAAM,QAAQ,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,CAAC,CAAC;IACvF,OAAO;QACL,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,OAAO,EAAE,IAAI,CAAC,MAAM;YACpB,QAAQ,EAAE,QAAQ,CAAC,MAAM;YACzB,SAAS,EAAE,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM;YACxC,KAAK,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK;YACjC,MAAM;YACN,OAAO;SACR;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Containment-aware scope reconciliation across a saga or epic.
|
|
3
|
+
*
|
|
4
|
+
* ## Why this exists
|
|
5
|
+
*
|
|
6
|
+
* `duplicate-detector.ts` runs at INSERT time over a FLAT candidate set — it
|
|
7
|
+
* queries `{status: [pending, active, blocked], limit}` with no parent or saga
|
|
8
|
+
* scoping — and its verdict is binary: reject, or insert. Two consequences,
|
|
9
|
+
* both reported from the field on large projects:
|
|
10
|
+
*
|
|
11
|
+
* 1. **Partial overlap is invisible.** Two tasks that share part of their
|
|
12
|
+
* scope are neither duplicates nor unrelated, and the insert-time check
|
|
13
|
+
* has no vocabulary for that. They both get created and quietly compete.
|
|
14
|
+
* 2. **Nothing is ever re-examined.** Overlap mostly emerges AFTER filing, as
|
|
15
|
+
* scope drifts during execution and several agents extend adjacent tasks
|
|
16
|
+
* toward the same middle. The insert-time check has long since run.
|
|
17
|
+
*
|
|
18
|
+
* `cleo reconcile` already existed but only covers release tags. The `relates`
|
|
19
|
+
* vocabulary (`duplicates`, `absorbs`, `supersedes`) already existed too, and
|
|
20
|
+
* nothing produced or consumed it — it was declarable by hand and never by a
|
|
21
|
+
* workflow.
|
|
22
|
+
*
|
|
23
|
+
* This module supplies the missing sweep: retro-active, scoped to a container,
|
|
24
|
+
* and classifying each overlapping pair into a concrete ACTION rather than a
|
|
25
|
+
* duplicate yes/no.
|
|
26
|
+
*
|
|
27
|
+
* ## Deliberately deterministic
|
|
28
|
+
*
|
|
29
|
+
* Detection reuses `computeLexicalSimilarity` and `computeJaccardWordSimilarity`
|
|
30
|
+
* from the duplicate detector. No LLM call, no embedding provider. A sweep an
|
|
31
|
+
* agent is expected to run repeatedly must be cheap, offline, and give the same
|
|
32
|
+
* answer twice — an LLM-scored sweep that reshuffles its own findings between
|
|
33
|
+
* runs cannot be acted on incrementally.
|
|
34
|
+
*
|
|
35
|
+
* @task T12299
|
|
36
|
+
*/
|
|
37
|
+
import { type EngineResult } from '../engine-result.js';
|
|
38
|
+
import type { DataAccessor } from '../store/data-accessor.js';
|
|
39
|
+
/**
|
|
40
|
+
* Pairs are O(n²). Above this many live nodes the sweep reports a bounded scan
|
|
41
|
+
* rather than silently comparing a subset — a truncated sweep that reads as
|
|
42
|
+
* complete is worse than one that says what it skipped.
|
|
43
|
+
*/
|
|
44
|
+
export declare const MAX_SWEEP_NODES = 400;
|
|
45
|
+
/** At or above this combined score two tasks describe the same deliverable. */
|
|
46
|
+
export declare const MERGE_THRESHOLD = 0.9;
|
|
47
|
+
/**
|
|
48
|
+
* At or above this two tasks share enough scope to need a decision.
|
|
49
|
+
*
|
|
50
|
+
* Calibrated against real data, not chosen: swept saga T9977 in this repo (144
|
|
51
|
+
* live tasks, 10,160 pairs) and counted findings by threshold —
|
|
52
|
+
*
|
|
53
|
+
* ```
|
|
54
|
+
* >= 0.55: 427 >= 0.70: 7
|
|
55
|
+
* >= 0.60: 128 >= 0.75: 5
|
|
56
|
+
* >= 0.65: 32 >= 0.85: 2
|
|
57
|
+
* ```
|
|
58
|
+
*
|
|
59
|
+
* 0.55 returns 427 findings, which is not a report anyone acts on. 0.65 returns
|
|
60
|
+
* 32 from 144 tasks, which is reviewable.
|
|
61
|
+
*
|
|
62
|
+
* The residual false positives are instructive and worth knowing before
|
|
63
|
+
* lowering this again: on a codebase with naming conventions, titles share
|
|
64
|
+
* vocabulary without sharing scope. `Route createAgentWorktree through core SDK`
|
|
65
|
+
* vs `Route destroyAgentWorktree through core SDK` scores 0.852 and is two
|
|
66
|
+
* genuinely different pieces of work. That is why high-confidence actions
|
|
67
|
+
* (`merge`/`absorb`) sit at {@link MERGE_THRESHOLD} and additionally require a
|
|
68
|
+
* tier/parent match — on that same real sweep they fired ZERO times, while
|
|
69
|
+
* firing correctly on a synthetic control with true duplicates.
|
|
70
|
+
*/
|
|
71
|
+
export declare const OVERLAP_THRESHOLD = 0.65;
|
|
72
|
+
/** What to do about an overlapping pair. */
|
|
73
|
+
export type ReconcileAction = 'merge' | 'absorb' | 'split' | 'link';
|
|
74
|
+
/** One overlapping pair and the action proposed for it. */
|
|
75
|
+
export interface ScopeOverlap {
|
|
76
|
+
/** The earlier-created task of the pair; the survivor for `merge`/`absorb`. */
|
|
77
|
+
readonly keepId: string;
|
|
78
|
+
readonly keepTitle: string;
|
|
79
|
+
/** The later-created task; the one absorbed or superseded. */
|
|
80
|
+
readonly otherId: string;
|
|
81
|
+
readonly otherTitle: string;
|
|
82
|
+
/** Proposed action. */
|
|
83
|
+
readonly action: ReconcileAction;
|
|
84
|
+
/** Combined similarity in [0,1], max of the lexical and word-level scores. */
|
|
85
|
+
readonly score: number;
|
|
86
|
+
/** `relates` edge `--apply` would write for this pair. */
|
|
87
|
+
readonly relation: 'duplicates' | 'absorbs' | 'related';
|
|
88
|
+
/** Why this action, in one sentence, for a human or an agent to act on. */
|
|
89
|
+
readonly rationale: string;
|
|
90
|
+
/** True when the two sit under the same immediate parent. */
|
|
91
|
+
readonly sameParent: boolean;
|
|
92
|
+
}
|
|
93
|
+
/** Result of a scope reconciliation sweep. */
|
|
94
|
+
export interface ReconcileScopeResult {
|
|
95
|
+
/** Container the sweep was scoped to. */
|
|
96
|
+
readonly rootId: string;
|
|
97
|
+
/** Live tasks compared. */
|
|
98
|
+
readonly scanned: number;
|
|
99
|
+
/** Pairs compared. */
|
|
100
|
+
readonly pairs: number;
|
|
101
|
+
/** Overlapping pairs, worst first. */
|
|
102
|
+
readonly overlaps: ScopeOverlap[];
|
|
103
|
+
/** Relation edges written. Zero unless `apply` was set. */
|
|
104
|
+
readonly applied: number;
|
|
105
|
+
/** Set when the node count exceeded {@link MAX_SWEEP_NODES}. */
|
|
106
|
+
readonly truncated?: {
|
|
107
|
+
limit: number;
|
|
108
|
+
liveNodes: number;
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
/** Options for {@link reconcileScope}. */
|
|
112
|
+
export interface ReconcileScopeOptions {
|
|
113
|
+
/** Saga, epic or any container to sweep. Its whole subtree is considered. */
|
|
114
|
+
rootId: string;
|
|
115
|
+
/** Write the proposed `relates` edges. Read-only when false or omitted. */
|
|
116
|
+
apply?: boolean;
|
|
117
|
+
/** Report pairs at or above this score. Defaults to {@link OVERLAP_THRESHOLD}. */
|
|
118
|
+
threshold?: number;
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Sweep a container for tasks whose scope overlaps, and propose what to do.
|
|
122
|
+
*
|
|
123
|
+
* Read-only unless `apply` is set. Even with `apply`, the ONLY mutation is
|
|
124
|
+
* writing `relates` edges — nothing is merged, retitled, reparented or deleted.
|
|
125
|
+
* A sweep that restructured the graph on its own reading of a similarity score
|
|
126
|
+
* would be acting on exactly the judgement it is least qualified to make; the
|
|
127
|
+
* edges make the overlap visible and leave the decision with the caller.
|
|
128
|
+
*
|
|
129
|
+
* Idempotent: `addRelation` upserts, so a second run over an unchanged graph
|
|
130
|
+
* writes the same edges and changes nothing.
|
|
131
|
+
*
|
|
132
|
+
* @param options - Sweep inputs; see {@link ReconcileScopeOptions}.
|
|
133
|
+
* @param cwd - Project root. Defaults to the resolved CLEO project.
|
|
134
|
+
* @param accessor - Optional pre-bound data accessor.
|
|
135
|
+
* @returns The overlaps found, worst first, and how many edges were written.
|
|
136
|
+
* @throws {@link CleoError} `E_NOT_FOUND` when the root does not exist.
|
|
137
|
+
*
|
|
138
|
+
* @example
|
|
139
|
+
* ```ts
|
|
140
|
+
* const r = await reconcileScope({ rootId: 'T12243' });
|
|
141
|
+
* for (const o of r.overlaps) console.log(o.action, o.keepId, o.otherId, o.rationale);
|
|
142
|
+
* ```
|
|
143
|
+
*/
|
|
144
|
+
export declare function reconcileScope(options: ReconcileScopeOptions, cwd?: string, accessor?: DataAccessor): Promise<ReconcileScopeResult>;
|
|
145
|
+
/**
|
|
146
|
+
* Dispatch-layer wrapper for {@link reconcileScope}.
|
|
147
|
+
*
|
|
148
|
+
* Mirrors `taskDecompose`: converts thrown {@link CleoError}s into an
|
|
149
|
+
* {@link EngineResult} so the gateway renders a LAFS envelope, preserving the
|
|
150
|
+
* original LAFS code rather than blanket-labelling every failure.
|
|
151
|
+
*
|
|
152
|
+
* @param projectRoot - Absolute path to the CLEO project root.
|
|
153
|
+
* @param options - Sweep inputs; see {@link ReconcileScopeOptions}.
|
|
154
|
+
* @returns Engine result carrying the overlaps and applied-edge count.
|
|
155
|
+
*/
|
|
156
|
+
export declare function taskReconcileScope(projectRoot: string, options: ReconcileScopeOptions): Promise<EngineResult<ReconcileScopeResult>>;
|
|
157
|
+
//# sourceMappingURL=reconcile-scope.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reconcile-scope.d.ts","sourceRoot":"","sources":["../../src/tasks/reconcile-scope.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAIH,OAAO,EAAE,KAAK,YAAY,EAAiB,MAAM,qBAAqB,CAAC;AAGvE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAO9D;;;;GAIG;AACH,eAAO,MAAM,eAAe,MAAM,CAAC;AAEnC,+EAA+E;AAC/E,eAAO,MAAM,eAAe,MAAM,CAAC;AAEnC;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,eAAO,MAAM,iBAAiB,OAAO,CAAC;AAEtC,4CAA4C;AAC5C,MAAM,MAAM,eAAe,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAC;AAEpE,2DAA2D;AAC3D,MAAM,WAAW,YAAY;IAC3B,+EAA+E;IAC/E,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,8DAA8D;IAC9D,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,uBAAuB;IACvB,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC;IACjC,8EAA8E;IAC9E,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,0DAA0D;IAC1D,QAAQ,CAAC,QAAQ,EAAE,YAAY,GAAG,SAAS,GAAG,SAAS,CAAC;IACxD,2EAA2E;IAC3E,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,6DAA6D;IAC7D,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;CAC9B;AAED,8CAA8C;AAC9C,MAAM,WAAW,oBAAoB;IACnC,yCAAyC;IACzC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,2BAA2B;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,sBAAsB;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,sCAAsC;IACtC,QAAQ,CAAC,QAAQ,EAAE,YAAY,EAAE,CAAC;IAClC,2DAA2D;IAC3D,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,gEAAgE;IAChE,QAAQ,CAAC,SAAS,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;CAC3D;AAED,0CAA0C;AAC1C,MAAM,WAAW,qBAAqB;IACpC,6EAA6E;IAC7E,MAAM,EAAE,MAAM,CAAC;IACf,2EAA2E;IAC3E,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,kFAAkF;IAClF,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAgDD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAsB,cAAc,CAClC,OAAO,EAAE,qBAAqB,EAC9B,GAAG,CAAC,EAAE,MAAM,EACZ,QAAQ,CAAC,EAAE,YAAY,GACtB,OAAO,CAAC,oBAAoB,CAAC,CAsG/B;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,kBAAkB,CACtC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,qBAAqB,GAC7B,OAAO,CAAC,YAAY,CAAC,oBAAoB,CAAC,CAAC,CAO7C"}
|