@cleocode/core 2026.9.19 → 2026.9.21
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/adapters/discovery.d.ts.map +1 -1
- package/dist/adapters/discovery.js +3 -10
- package/dist/adapters/discovery.js.map +1 -1
- package/dist/adrs/link-pipeline.js +2 -2
- package/dist/adrs/link-pipeline.js.map +1 -1
- package/dist/adrs/parse.js +3 -3
- package/dist/adrs/parse.js.map +1 -1
- package/dist/agents/invoke-meta-agent.d.ts.map +1 -1
- package/dist/agents/invoke-meta-agent.js +8 -4
- package/dist/agents/invoke-meta-agent.js.map +1 -1
- package/dist/bootstrap.d.ts +5 -1
- package/dist/bootstrap.d.ts.map +1 -1
- package/dist/bootstrap.js +41 -21
- package/dist/bootstrap.js.map +1 -1
- package/dist/cloud/crypto.d.ts +47 -0
- package/dist/cloud/crypto.d.ts.map +1 -0
- package/dist/cloud/crypto.js +223 -0
- package/dist/cloud/crypto.js.map +1 -0
- package/dist/cloud/http.d.ts +52 -0
- package/dist/cloud/http.d.ts.map +1 -0
- package/dist/cloud/http.js +98 -0
- package/dist/cloud/http.js.map +1 -0
- package/dist/cloud/index.d.ts +19 -0
- package/dist/cloud/index.d.ts.map +1 -0
- package/dist/cloud/index.js +19 -0
- package/dist/cloud/index.js.map +1 -0
- package/dist/cloud/journal.d.ts +169 -0
- package/dist/cloud/journal.d.ts.map +1 -0
- package/dist/cloud/journal.js +428 -0
- package/dist/cloud/journal.js.map +1 -0
- package/dist/cloud/keys.d.ts +213 -0
- package/dist/cloud/keys.d.ts.map +1 -0
- package/dist/cloud/keys.js +362 -0
- package/dist/cloud/keys.js.map +1 -0
- package/dist/cloud/manifest-check.d.ts +36 -0
- package/dist/cloud/manifest-check.d.ts.map +1 -0
- package/dist/cloud/manifest-check.js +70 -0
- package/dist/cloud/manifest-check.js.map +1 -0
- package/dist/cloud/projects.d.ts +13 -0
- package/dist/cloud/projects.d.ts.map +1 -0
- package/dist/cloud/projects.js +11 -0
- package/dist/cloud/projects.js.map +1 -0
- package/dist/cloud/signing.d.ts +105 -0
- package/dist/cloud/signing.d.ts.map +1 -0
- package/dist/cloud/signing.js +117 -0
- package/dist/cloud/signing.js.map +1 -0
- package/dist/cloud/streams.d.ts +6 -0
- package/dist/cloud/streams.d.ts.map +1 -0
- package/dist/cloud/streams.js +5 -0
- package/dist/cloud/streams.js.map +1 -0
- package/dist/decide/audit.d.ts +131 -0
- package/dist/decide/audit.d.ts.map +1 -0
- package/dist/decide/audit.js +98 -0
- package/dist/decide/audit.js.map +1 -0
- package/dist/decide/budget.d.ts +91 -0
- package/dist/decide/budget.d.ts.map +1 -0
- package/dist/decide/budget.js +194 -0
- package/dist/decide/budget.js.map +1 -0
- package/dist/decide/cache.d.ts +49 -0
- package/dist/decide/cache.d.ts.map +1 -0
- package/dist/decide/cache.js +87 -0
- package/dist/decide/cache.js.map +1 -0
- package/dist/decide/client.d.ts +103 -0
- package/dist/decide/client.d.ts.map +1 -0
- package/dist/decide/client.js +262 -0
- package/dist/decide/client.js.map +1 -0
- package/dist/decide/credentials.d.ts +159 -0
- package/dist/decide/credentials.d.ts.map +1 -0
- package/dist/decide/credentials.js +383 -0
- package/dist/decide/credentials.js.map +1 -0
- package/dist/decide/index.d.ts +18 -0
- package/dist/decide/index.d.ts.map +1 -0
- package/dist/decide/index.js +18 -0
- package/dist/decide/index.js.map +1 -0
- package/dist/decide/jev-wire.d.ts +155 -0
- package/dist/decide/jev-wire.d.ts.map +1 -0
- package/dist/decide/jev-wire.js +420 -0
- package/dist/decide/jev-wire.js.map +1 -0
- package/dist/decide/operations.d.ts +152 -0
- package/dist/decide/operations.d.ts.map +1 -0
- package/dist/decide/operations.js +199 -0
- package/dist/decide/operations.js.map +1 -0
- package/dist/decide/provider.d.ts +90 -0
- package/dist/decide/provider.d.ts.map +1 -0
- package/dist/decide/provider.js +43 -0
- package/dist/decide/provider.js.map +1 -0
- package/dist/decide/site.d.ts +148 -0
- package/dist/decide/site.d.ts.map +1 -0
- package/dist/decide/site.js +181 -0
- package/dist/decide/site.js.map +1 -0
- package/dist/decide/transport.d.ts +67 -0
- package/dist/decide/transport.d.ts.map +1 -0
- package/dist/decide/transport.js +350 -0
- package/dist/decide/transport.js.map +1 -0
- package/dist/docs/export-document.js +5908 -2436
- package/dist/docs/export-document.js.map +3 -3
- package/dist/docs/index.d.ts +2 -2
- package/dist/docs/index.d.ts.map +1 -1
- package/dist/docs/index.js +1 -1
- package/dist/docs/index.js.map +1 -1
- package/dist/docs/projection.d.ts.map +1 -1
- package/dist/docs/projection.js +2 -3
- package/dist/docs/projection.js.map +1 -1
- package/dist/docs/publish-pr.d.ts +69 -1
- package/dist/docs/publish-pr.d.ts.map +1 -1
- package/dist/docs/publish-pr.js +112 -10
- package/dist/docs/publish-pr.js.map +1 -1
- package/dist/doctor/db-substrate.d.ts +13 -8
- package/dist/doctor/db-substrate.d.ts.map +1 -1
- package/dist/doctor/db-substrate.js +39 -26
- package/dist/doctor/db-substrate.js.map +1 -1
- package/dist/doctor/index.d.ts +2 -0
- package/dist/doctor/index.d.ts.map +1 -1
- package/dist/doctor/index.js +1 -0
- package/dist/doctor/index.js.map +1 -1
- package/dist/doctor/knowledge.d.ts.map +1 -1
- package/dist/doctor/knowledge.js +5 -15
- package/dist/doctor/knowledge.js.map +1 -1
- package/dist/doctor/nexus-schema-residency.d.ts +1 -1
- package/dist/doctor/nexus-schema-residency.d.ts.map +1 -1
- package/dist/doctor/nexus-schema-residency.js +3 -0
- package/dist/doctor/nexus-schema-residency.js.map +1 -1
- package/dist/doctor/project-identity.d.ts +44 -1
- package/dist/doctor/project-identity.d.ts.map +1 -1
- package/dist/doctor/project-identity.js +237 -10
- package/dist/doctor/project-identity.js.map +1 -1
- package/dist/doctor/projects.d.ts +170 -0
- package/dist/doctor/projects.d.ts.map +1 -0
- package/dist/doctor/projects.js +1075 -0
- package/dist/doctor/projects.js.map +1 -0
- package/dist/doctor/twin-collapse.d.ts +97 -0
- package/dist/doctor/twin-collapse.d.ts.map +1 -0
- package/dist/doctor/twin-collapse.js +168 -0
- package/dist/doctor/twin-collapse.js.map +1 -0
- package/dist/doctor/worktree-orphans.d.ts.map +1 -1
- package/dist/doctor/worktree-orphans.js +13 -29
- package/dist/doctor/worktree-orphans.js.map +1 -1
- package/dist/doctor/worktree-stores.d.ts +128 -0
- package/dist/doctor/worktree-stores.d.ts.map +1 -0
- package/dist/doctor/worktree-stores.js +374 -0
- package/dist/doctor/worktree-stores.js.map +1 -0
- package/dist/engine/engine-ops.d.ts.map +1 -1
- package/dist/engine/engine-ops.js +59 -23
- package/dist/engine/engine-ops.js.map +1 -1
- package/dist/error-catalog.d.ts.map +1 -1
- package/dist/error-catalog.js +21 -0
- package/dist/error-catalog.js.map +1 -1
- package/dist/error-registry.d.ts.map +1 -1
- package/dist/error-registry.js +40 -0
- package/dist/error-registry.js.map +1 -1
- package/dist/gc/cleanup.d.ts.map +1 -1
- package/dist/gc/cleanup.js +32 -19
- package/dist/gc/cleanup.js.map +1 -1
- package/dist/git/bounded-git.d.ts +170 -0
- package/dist/git/bounded-git.d.ts.map +1 -0
- package/dist/git/bounded-git.js +371 -0
- package/dist/git/bounded-git.js.map +1 -0
- package/dist/git/work-tree.d.ts +20 -0
- package/dist/git/work-tree.d.ts.map +1 -1
- package/dist/git/work-tree.js +20 -2
- package/dist/git/work-tree.js.map +1 -1
- package/dist/hooks/handlers/session-hooks.d.ts +11 -26
- package/dist/hooks/handlers/session-hooks.d.ts.map +1 -1
- package/dist/hooks/handlers/session-hooks.js +18 -47
- package/dist/hooks/handlers/session-hooks.js.map +1 -1
- package/dist/hooks/payload-schemas.d.ts +2 -2
- package/dist/index.d.ts +6 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -3
- package/dist/index.js.map +1 -1
- package/dist/init/engine-ops.d.ts.map +1 -1
- package/dist/init/engine-ops.js +23 -1
- package/dist/init/engine-ops.js.map +1 -1
- package/dist/init.d.ts +158 -1
- package/dist/init.d.ts.map +1 -1
- package/dist/init.js +535 -44
- package/dist/init.js.map +1 -1
- package/dist/injection.d.ts +55 -0
- package/dist/injection.d.ts.map +1 -1
- package/dist/injection.js +102 -6
- package/dist/injection.js.map +1 -1
- package/dist/internal.d.ts +9 -5
- package/dist/internal.d.ts.map +1 -1
- package/dist/internal.js +8 -4
- package/dist/internal.js.map +1 -1
- package/dist/issue/diagnostics.d.ts.map +1 -1
- package/dist/issue/diagnostics.js +2 -1
- package/dist/issue/diagnostics.js.map +1 -1
- package/dist/lib/concurrency.d.ts +25 -0
- package/dist/lib/concurrency.d.ts.map +1 -0
- package/dist/lib/concurrency.js +43 -0
- package/dist/lib/concurrency.js.map +1 -0
- package/dist/lib/index.d.ts +1 -0
- package/dist/lib/index.d.ts.map +1 -1
- package/dist/lib/index.js +1 -0
- package/dist/lib/index.js.map +1 -1
- package/dist/lifecycle/engine-ops.d.ts.map +1 -1
- package/dist/lifecycle/engine-ops.js +4 -2
- package/dist/lifecycle/engine-ops.js.map +1 -1
- package/dist/lifecycle/stage-guidance.d.ts +5 -0
- package/dist/lifecycle/stage-guidance.d.ts.map +1 -1
- package/dist/lifecycle/stage-guidance.js +14 -4
- package/dist/lifecycle/stage-guidance.js.map +1 -1
- package/dist/llm/catalog-cache.d.ts +3 -2
- package/dist/llm/catalog-cache.d.ts.map +1 -1
- package/dist/llm/catalog-cache.js +5 -5
- package/dist/llm/catalog-cache.js.map +1 -1
- package/dist/llm/credentials.d.ts +4 -4
- package/dist/llm/credentials.js +6 -6
- package/dist/llm/credentials.js.map +1 -1
- package/dist/llm/plugin-facade.js +4312 -1798
- package/dist/llm/plugin-facade.js.map +3 -3
- package/dist/llm/stable-device-id.d.ts.map +1 -1
- package/dist/llm/stable-device-id.js +3 -5
- package/dist/llm/stable-device-id.js.map +1 -1
- package/dist/memory/attention.d.ts.map +1 -1
- package/dist/memory/attention.js +30 -30
- package/dist/memory/attention.js.map +1 -1
- package/dist/memory/decision-contradiction.d.ts +152 -0
- package/dist/memory/decision-contradiction.d.ts.map +1 -0
- package/dist/memory/decision-contradiction.js +273 -0
- package/dist/memory/decision-contradiction.js.map +1 -0
- package/dist/memory/decisions.d.ts +42 -11
- package/dist/memory/decisions.d.ts.map +1 -1
- package/dist/memory/decisions.js +153 -56
- package/dist/memory/decisions.js.map +1 -1
- package/dist/memory/dialectic-evaluator.d.ts +7 -0
- package/dist/memory/dialectic-evaluator.d.ts.map +1 -1
- package/dist/memory/dialectic-evaluator.js +23 -8
- package/dist/memory/dialectic-evaluator.js.map +1 -1
- package/dist/memory/dispatch-trace-format.d.ts +39 -0
- package/dist/memory/dispatch-trace-format.d.ts.map +1 -0
- package/dist/memory/dispatch-trace-format.js +54 -0
- package/dist/memory/dispatch-trace-format.js.map +1 -0
- package/dist/memory/dispatch-trace.d.ts.map +1 -1
- package/dist/memory/dispatch-trace.js +1 -27
- package/dist/memory/dispatch-trace.js.map +1 -1
- 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 +1 -0
- package/dist/memory/engine-compat.js.map +1 -1
- package/dist/memory/import-from-provider.js +3 -3
- package/dist/memory/import-from-provider.js.map +1 -1
- package/dist/memory/learnings.d.ts +2 -2
- package/dist/memory/observation-type-decision.d.ts +96 -0
- package/dist/memory/observation-type-decision.d.ts.map +1 -0
- package/dist/memory/observation-type-decision.js +218 -0
- package/dist/memory/observation-type-decision.js.map +1 -0
- package/dist/memory/redaction.js +2 -0
- package/dist/memory/redaction.js.map +1 -1
- package/dist/memory/retrieval/build-retrieval-bundle.d.ts +9 -2
- package/dist/memory/retrieval/build-retrieval-bundle.d.ts.map +1 -1
- package/dist/memory/retrieval/build-retrieval-bundle.js +42 -11
- package/dist/memory/retrieval/build-retrieval-bundle.js.map +1 -1
- package/dist/memory/retrieval/get-current-session-id.d.ts +5 -0
- package/dist/memory/retrieval/get-current-session-id.d.ts.map +1 -1
- package/dist/memory/retrieval/get-current-session-id.js +7 -2
- package/dist/memory/retrieval/get-current-session-id.js.map +1 -1
- package/dist/memory/retrieval/observe.d.ts.map +1 -1
- package/dist/memory/retrieval/observe.js +30 -29
- package/dist/memory/retrieval/observe.js.map +1 -1
- package/dist/nexus/analyze-orchestrator.d.ts.map +1 -1
- package/dist/nexus/analyze-orchestrator.js +42 -29
- package/dist/nexus/analyze-orchestrator.js.map +1 -1
- package/dist/nexus/assessment-projection.d.ts +76 -0
- package/dist/nexus/assessment-projection.d.ts.map +1 -0
- package/dist/nexus/assessment-projection.js +143 -0
- package/dist/nexus/assessment-projection.js.map +1 -0
- package/dist/nexus/assessment-store.d.ts +14 -2
- package/dist/nexus/assessment-store.d.ts.map +1 -1
- package/dist/nexus/assessment-store.js +21 -3
- package/dist/nexus/assessment-store.js.map +1 -1
- package/dist/nexus/checkout-nonce.d.ts +48 -0
- package/dist/nexus/checkout-nonce.d.ts.map +1 -0
- package/dist/nexus/checkout-nonce.js +84 -0
- package/dist/nexus/checkout-nonce.js.map +1 -0
- package/dist/nexus/devices.d.ts +93 -0
- package/dist/nexus/devices.d.ts.map +1 -0
- package/dist/nexus/devices.js +141 -0
- package/dist/nexus/devices.js.map +1 -0
- package/dist/nexus/freshness.d.ts.map +1 -1
- package/dist/nexus/freshness.js +25 -6
- package/dist/nexus/freshness.js.map +1 -1
- package/dist/nexus/git-state.d.ts +225 -0
- package/dist/nexus/git-state.d.ts.map +1 -0
- package/dist/nexus/git-state.js +677 -0
- package/dist/nexus/git-state.js.map +1 -0
- package/dist/nexus/graph-manifest.d.ts +20 -4
- package/dist/nexus/graph-manifest.d.ts.map +1 -1
- package/dist/nexus/graph-manifest.js +40 -5
- package/dist/nexus/graph-manifest.js.map +1 -1
- package/dist/nexus/identity.d.ts +68 -23
- package/dist/nexus/identity.d.ts.map +1 -1
- package/dist/nexus/identity.js +99 -22
- package/dist/nexus/identity.js.map +1 -1
- package/dist/nexus/index.d.ts +5 -2
- package/dist/nexus/index.d.ts.map +1 -1
- package/dist/nexus/index.js +10 -4
- package/dist/nexus/index.js.map +1 -1
- package/dist/nexus/knowledge.d.ts +5 -0
- package/dist/nexus/knowledge.d.ts.map +1 -1
- package/dist/nexus/knowledge.js +26 -2
- package/dist/nexus/knowledge.js.map +1 -1
- package/dist/nexus/legacy-alias.d.ts +60 -0
- package/dist/nexus/legacy-alias.d.ts.map +1 -0
- package/dist/nexus/legacy-alias.js +68 -0
- package/dist/nexus/legacy-alias.js.map +1 -0
- package/dist/nexus/migrate-json-to-sqlite.js +2 -2
- package/dist/nexus/migrate-json-to-sqlite.js.map +1 -1
- package/dist/nexus/ops.d.ts +1 -0
- package/dist/nexus/ops.d.ts.map +1 -1
- package/dist/nexus/path-map.d.ts +264 -20
- package/dist/nexus/path-map.d.ts.map +1 -1
- package/dist/nexus/path-map.js +580 -44
- package/dist/nexus/path-map.js.map +1 -1
- package/dist/nexus/projects-clean.d.ts +9 -1
- package/dist/nexus/projects-clean.d.ts.map +1 -1
- package/dist/nexus/projects-clean.js +126 -14
- package/dist/nexus/projects-clean.js.map +1 -1
- package/dist/nexus/projects-scan.d.ts +56 -1
- package/dist/nexus/projects-scan.d.ts.map +1 -1
- package/dist/nexus/projects-scan.js +144 -3
- package/dist/nexus/projects-scan.js.map +1 -1
- package/dist/nexus/registry-hygiene.d.ts +18 -2
- package/dist/nexus/registry-hygiene.d.ts.map +1 -1
- package/dist/nexus/registry-hygiene.js +37 -11
- package/dist/nexus/registry-hygiene.js.map +1 -1
- package/dist/nexus/registry-roots.d.ts +47 -0
- package/dist/nexus/registry-roots.d.ts.map +1 -0
- package/dist/nexus/registry-roots.js +79 -0
- package/dist/nexus/registry-roots.js.map +1 -0
- package/dist/nexus/registry.d.ts +50 -9
- package/dist/nexus/registry.d.ts.map +1 -1
- package/dist/nexus/registry.js +311 -156
- package/dist/nexus/registry.js.map +1 -1
- package/dist/nexus/stored-roots.d.ts +106 -0
- package/dist/nexus/stored-roots.d.ts.map +1 -0
- package/dist/nexus/stored-roots.js +180 -0
- package/dist/nexus/stored-roots.js.map +1 -0
- package/dist/nexus/transfer.d.ts.map +1 -1
- package/dist/nexus/transfer.js +3 -0
- package/dist/nexus/transfer.js.map +1 -1
- package/dist/nexus/user-profile-hygiene.d.ts +168 -0
- package/dist/nexus/user-profile-hygiene.d.ts.map +1 -0
- package/dist/nexus/user-profile-hygiene.js +305 -0
- package/dist/nexus/user-profile-hygiene.js.map +1 -0
- package/dist/nexus/user-profile.d.ts +53 -2
- package/dist/nexus/user-profile.d.ts.map +1 -1
- package/dist/nexus/user-profile.js +106 -4
- package/dist/nexus/user-profile.js.map +1 -1
- package/dist/orchestrate/pivot.d.ts.map +1 -1
- package/dist/orchestrate/pivot.js +5 -1
- package/dist/orchestrate/pivot.js.map +1 -1
- package/dist/orchestrate/spawn-ops.d.ts +12 -0
- package/dist/orchestrate/spawn-ops.d.ts.map +1 -1
- package/dist/orchestrate/spawn-ops.js +152 -57
- package/dist/orchestrate/spawn-ops.js.map +1 -1
- package/dist/orchestration/classify-readiness.d.ts +37 -1
- package/dist/orchestration/classify-readiness.d.ts.map +1 -1
- package/dist/orchestration/classify-readiness.js +48 -19
- package/dist/orchestration/classify-readiness.js.map +1 -1
- package/dist/orchestration/index.d.ts +3 -2
- package/dist/orchestration/index.d.ts.map +1 -1
- package/dist/orchestration/index.js +2 -1
- package/dist/orchestration/index.js.map +1 -1
- package/dist/orchestration/owner-decision-readiness.d.ts +88 -0
- package/dist/orchestration/owner-decision-readiness.d.ts.map +1 -0
- package/dist/orchestration/owner-decision-readiness.js +152 -0
- package/dist/orchestration/owner-decision-readiness.js.map +1 -0
- package/dist/orchestration/psyche-memory-budget.d.ts +105 -0
- package/dist/orchestration/psyche-memory-budget.d.ts.map +1 -0
- package/dist/orchestration/psyche-memory-budget.js +383 -0
- package/dist/orchestration/psyche-memory-budget.js.map +1 -0
- package/dist/orchestration/spawn-prompt.d.ts +12 -1
- package/dist/orchestration/spawn-prompt.d.ts.map +1 -1
- package/dist/orchestration/spawn-prompt.js +141 -179
- package/dist/orchestration/spawn-prompt.js.map +1 -1
- package/dist/orchestration/spawn.d.ts +7 -0
- package/dist/orchestration/spawn.d.ts.map +1 -1
- package/dist/orchestration/spawn.js +1 -0
- package/dist/orchestration/spawn.js.map +1 -1
- package/dist/paths.d.ts +24 -8
- package/dist/paths.d.ts.map +1 -1
- package/dist/paths.js +135 -71
- package/dist/paths.js.map +1 -1
- package/dist/platform.d.ts +6 -1
- package/dist/platform.d.ts.map +1 -1
- package/dist/platform.js +8 -19
- package/dist/platform.js.map +1 -1
- package/dist/project-info.d.ts +18 -0
- package/dist/project-info.d.ts.map +1 -1
- package/dist/project-info.js +29 -1
- package/dist/project-info.js.map +1 -1
- package/dist/project-lifecycle.d.ts +91 -32
- package/dist/project-lifecycle.d.ts.map +1 -1
- package/dist/project-lifecycle.js +639 -75
- package/dist/project-lifecycle.js.map +1 -1
- package/dist/project-scope.d.ts +86 -4
- package/dist/project-scope.d.ts.map +1 -1
- package/dist/project-scope.js +226 -13
- package/dist/project-scope.js.map +1 -1
- package/dist/project-tombstone.d.ts +111 -0
- package/dist/project-tombstone.d.ts.map +1 -0
- package/dist/project-tombstone.js +220 -0
- package/dist/project-tombstone.js.map +1 -0
- package/dist/release/artifacts.d.ts.map +1 -1
- package/dist/release/artifacts.js +14 -9
- package/dist/release/artifacts.js.map +1 -1
- package/dist/release/ci-evidence.d.ts +223 -0
- package/dist/release/ci-evidence.d.ts.map +1 -0
- package/dist/release/ci-evidence.js +652 -0
- package/dist/release/ci-evidence.js.map +1 -0
- package/dist/release/engine-ops.d.ts.map +1 -1
- package/dist/release/engine-ops.js +3 -3
- package/dist/release/engine-ops.js.map +1 -1
- package/dist/release/plan.d.ts.map +1 -1
- package/dist/release/plan.js +7 -6
- package/dist/release/plan.js.map +1 -1
- package/dist/release/pr-evidence.d.ts +38 -0
- package/dist/release/pr-evidence.d.ts.map +1 -1
- package/dist/release/pr-evidence.js +67 -11
- package/dist/release/pr-evidence.js.map +1 -1
- package/dist/release/reconcile.d.ts.map +1 -1
- package/dist/release/reconcile.js +3 -2
- package/dist/release/reconcile.js.map +1 -1
- package/dist/release/release-manifest.d.ts +2 -1
- package/dist/release/release-manifest.d.ts.map +1 -1
- package/dist/release/release-manifest.js +6 -5
- package/dist/release/release-manifest.js.map +1 -1
- package/dist/render/nexus/graph/index.d.ts +4 -0
- package/dist/render/nexus/graph/index.d.ts.map +1 -1
- package/dist/render/nexus/graph/index.js +57 -0
- package/dist/render/nexus/graph/index.js.map +1 -1
- package/dist/resources/spawn-wrapper.d.ts +8 -1
- package/dist/resources/spawn-wrapper.d.ts.map +1 -1
- package/dist/resources/spawn-wrapper.js +42 -5
- package/dist/resources/spawn-wrapper.js.map +1 -1
- package/dist/routing/build-command-groups.d.ts.map +1 -1
- package/dist/routing/build-command-groups.js +1 -0
- package/dist/routing/build-command-groups.js.map +1 -1
- package/dist/sagas/index.d.ts +1 -1
- package/dist/sagas/index.d.ts.map +1 -1
- package/dist/sagas/index.js +1 -1
- package/dist/sagas/index.js.map +1 -1
- package/dist/sagas/reconcile.d.ts +24 -4
- package/dist/sagas/reconcile.d.ts.map +1 -1
- package/dist/sagas/reconcile.js +226 -100
- package/dist/sagas/reconcile.js.map +1 -1
- package/dist/scaffold/ensure-config.d.ts.map +1 -1
- package/dist/scaffold/ensure-config.js +31 -1
- package/dist/scaffold/ensure-config.js.map +1 -1
- package/dist/scaffold/project-identity.d.ts +2 -8
- package/dist/scaffold/project-identity.d.ts.map +1 -1
- package/dist/scaffold/project-identity.js +5 -21
- package/dist/scaffold/project-identity.js.map +1 -1
- package/dist/security/input-sanitization.d.ts +9 -1
- package/dist/security/input-sanitization.d.ts.map +1 -1
- package/dist/security/input-sanitization.js +12 -2
- package/dist/security/input-sanitization.js.map +1 -1
- package/dist/selfimprove/fix-gen.js +4321 -1807
- package/dist/selfimprove/fix-gen.js.map +3 -3
- package/dist/sentient/propose-tick.d.ts.map +1 -1
- package/dist/sentient/propose-tick.js +4 -2
- package/dist/sentient/propose-tick.js.map +1 -1
- package/dist/sequence/index.d.ts.map +1 -1
- package/dist/sequence/index.js +6 -23
- package/dist/sequence/index.js.map +1 -1
- package/dist/session/engine-ops.d.ts +9 -0
- package/dist/session/engine-ops.d.ts.map +1 -1
- package/dist/session/engine-ops.js +110 -18
- package/dist/session/engine-ops.js.map +1 -1
- package/dist/sessions/assumptions.d.ts.map +1 -1
- package/dist/sessions/assumptions.js +7 -4
- package/dist/sessions/assumptions.js.map +1 -1
- package/dist/sessions/briefing.d.ts +6 -0
- package/dist/sessions/briefing.d.ts.map +1 -1
- package/dist/sessions/briefing.js +12 -1
- package/dist/sessions/briefing.js.map +1 -1
- package/dist/sessions/decisions.d.ts +38 -3
- package/dist/sessions/decisions.d.ts.map +1 -1
- package/dist/sessions/decisions.js +235 -21
- package/dist/sessions/decisions.js.map +1 -1
- package/dist/sessions/drift-watchdog.d.ts.map +1 -1
- package/dist/sessions/drift-watchdog.js +4 -2
- package/dist/sessions/drift-watchdog.js.map +1 -1
- package/dist/sessions/index.d.ts.map +1 -1
- package/dist/sessions/index.js +33 -4
- package/dist/sessions/index.js.map +1 -1
- package/dist/sessions/session-end-snapshot-entry.d.ts +26 -0
- package/dist/sessions/session-end-snapshot-entry.d.ts.map +1 -0
- package/dist/sessions/session-end-snapshot-entry.js +59 -0
- package/dist/sessions/session-end-snapshot-entry.js.map +1 -0
- package/dist/sessions/session-end-snapshot.d.ts +114 -0
- package/dist/sessions/session-end-snapshot.d.ts.map +1 -0
- package/dist/sessions/session-end-snapshot.js +446 -0
- package/dist/sessions/session-end-snapshot.js.map +1 -0
- package/dist/sessions/session-manifest-mirror.d.ts.map +1 -1
- package/dist/sessions/session-manifest-mirror.js +10 -17
- package/dist/sessions/session-manifest-mirror.js.map +1 -1
- package/dist/sessions/session-switch.d.ts.map +1 -1
- package/dist/sessions/session-switch.js +5 -3
- package/dist/sessions/session-switch.js.map +1 -1
- package/dist/sessions/snapshot.d.ts.map +1 -1
- package/dist/sessions/snapshot.js +5 -4
- package/dist/sessions/snapshot.js.map +1 -1
- package/dist/sessions/terminal-identity.d.ts +169 -0
- package/dist/sessions/terminal-identity.d.ts.map +1 -0
- package/dist/sessions/terminal-identity.js +273 -0
- package/dist/sessions/terminal-identity.js.map +1 -0
- package/dist/setup/sections/verification.d.ts +1 -1
- package/dist/setup/sections/verification.d.ts.map +1 -1
- package/dist/setup/sections/verification.js +11 -15
- package/dist/setup/sections/verification.js.map +1 -1
- package/dist/skills/discovery.d.ts +8 -2
- package/dist/skills/discovery.d.ts.map +1 -1
- package/dist/skills/discovery.js +15 -3
- package/dist/skills/discovery.js.map +1 -1
- package/dist/skills/dispatch.d.ts +5 -2
- package/dist/skills/dispatch.d.ts.map +1 -1
- package/dist/skills/dispatch.js +5 -2
- package/dist/skills/dispatch.js.map +1 -1
- package/dist/skills/doctor.d.ts.map +1 -1
- package/dist/skills/doctor.js +5 -1
- package/dist/skills/doctor.js.map +1 -1
- package/dist/skills/federated-search.js +2 -2
- package/dist/skills/federated-search.js.map +1 -1
- package/dist/skills/index.d.ts +3 -3
- 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/install.d.ts +15 -2
- package/dist/skills/install.d.ts.map +1 -1
- package/dist/skills/install.js +21 -5
- package/dist/skills/install.js.map +1 -1
- package/dist/skills/migration.d.ts +5 -5
- package/dist/skills/migration.d.ts.map +1 -1
- package/dist/skills/migration.js +7 -9
- package/dist/skills/migration.js.map +1 -1
- package/dist/skills/orchestrator/startup.d.ts.map +1 -1
- package/dist/skills/orchestrator/startup.js +4 -2
- package/dist/skills/orchestrator/startup.js.map +1 -1
- package/dist/skills/skill-paths.d.ts +30 -3
- package/dist/skills/skill-paths.d.ts.map +1 -1
- package/dist/skills/skill-paths.js +28 -9
- package/dist/skills/skill-paths.js.map +1 -1
- package/dist/skills/skill-root.d.ts +60 -11
- package/dist/skills/skill-root.d.ts.map +1 -1
- package/dist/skills/skill-root.js +100 -14
- package/dist/skills/skill-root.js.map +1 -1
- package/dist/skills/skills-guard.js +5 -5
- package/dist/skills/skills-guard.js.map +1 -1
- package/dist/skills/types.d.ts +23 -0
- package/dist/skills/types.d.ts.map +1 -1
- package/dist/skills/types.js.map +1 -1
- package/dist/spawn/agent-identity.d.ts +51 -2
- package/dist/spawn/agent-identity.d.ts.map +1 -1
- package/dist/spawn/agent-identity.js +89 -26
- package/dist/spawn/agent-identity.js.map +1 -1
- package/dist/spawn/branch-lock.d.ts.map +1 -1
- package/dist/spawn/branch-lock.js +56 -79
- package/dist/spawn/branch-lock.js.map +1 -1
- package/dist/spawn/index.d.ts +2 -2
- package/dist/spawn/index.d.ts.map +1 -1
- package/dist/spawn/index.js +1 -1
- package/dist/spawn/index.js.map +1 -1
- package/dist/spawn/worktree-lock-holder.d.ts +37 -0
- package/dist/spawn/worktree-lock-holder.d.ts.map +1 -0
- package/dist/spawn/worktree-lock-holder.js +41 -0
- package/dist/spawn/worktree-lock-holder.js.map +1 -0
- package/dist/sticky/convert.d.ts.map +1 -1
- package/dist/sticky/convert.js +16 -4
- package/dist/sticky/convert.js.map +1 -1
- package/dist/store/attachment-store.d.ts +14 -0
- package/dist/store/attachment-store.d.ts.map +1 -1
- package/dist/store/attachment-store.js +11 -1
- package/dist/store/attachment-store.js.map +1 -1
- package/dist/store/backup-inspect.d.ts +7 -3
- package/dist/store/backup-inspect.d.ts.map +1 -1
- package/dist/store/backup-inspect.js +18 -7
- package/dist/store/backup-inspect.js.map +1 -1
- package/dist/store/backup-sidecar.d.ts +60 -0
- package/dist/store/backup-sidecar.d.ts.map +1 -0
- package/dist/store/backup-sidecar.js +96 -0
- package/dist/store/backup-sidecar.js.map +1 -0
- package/dist/store/data-accessor.d.ts +1 -1
- package/dist/store/data-accessor.d.ts.map +1 -1
- package/dist/store/data-accessor.js +6 -6
- package/dist/store/data-accessor.js.map +1 -1
- package/dist/store/data-safety-central.d.ts +13 -4
- package/dist/store/data-safety-central.d.ts.map +1 -1
- package/dist/store/data-safety-central.js +31 -4
- package/dist/store/data-safety-central.js.map +1 -1
- package/dist/store/dual-scope-db.d.ts.map +1 -1
- package/dist/store/dual-scope-db.js +10 -0
- package/dist/store/dual-scope-db.js.map +1 -1
- package/dist/store/exodus/__fixtures__/representative-fixture.d.ts.map +1 -1
- package/dist/store/exodus/__fixtures__/representative-fixture.js +4 -0
- package/dist/store/exodus/__fixtures__/representative-fixture.js.map +1 -1
- package/dist/store/exodus/migrate.js +1 -1
- package/dist/store/exodus/migrate.js.map +1 -1
- package/dist/store/exodus/reconcile.js +1 -1
- package/dist/store/exodus/reconcile.js.map +1 -1
- package/dist/store/exodus/runtime-targets.d.ts +4 -3
- package/dist/store/exodus/runtime-targets.d.ts.map +1 -1
- package/dist/store/exodus/runtime-targets.js +4 -3
- package/dist/store/exodus/runtime-targets.js.map +1 -1
- package/dist/store/import-logging.d.ts.map +1 -1
- package/dist/store/import-logging.js +5 -4
- package/dist/store/import-logging.js.map +1 -1
- package/dist/store/legacy-tasks-lineage.d.ts.map +1 -1
- package/dist/store/legacy-tasks-lineage.js +2 -7
- package/dist/store/legacy-tasks-lineage.js.map +1 -1
- package/dist/store/lock.d.ts +1 -0
- package/dist/store/lock.d.ts.map +1 -1
- package/dist/store/lock.js +1 -0
- package/dist/store/lock.js.map +1 -1
- package/dist/store/memory-accessor.d.ts +8 -3
- package/dist/store/memory-accessor.d.ts.map +1 -1
- package/dist/store/memory-accessor.js +29 -13
- package/dist/store/memory-accessor.js.map +1 -1
- package/dist/store/memory-sqlite.d.ts.map +1 -1
- package/dist/store/memory-sqlite.js +5 -0
- package/dist/store/memory-sqlite.js.map +1 -1
- package/dist/store/open-cleo-db.d.ts.map +1 -1
- package/dist/store/open-cleo-db.js +11 -6
- package/dist/store/open-cleo-db.js.map +1 -1
- package/dist/store/portable-bundle-relocate.d.ts +13 -8
- package/dist/store/portable-bundle-relocate.d.ts.map +1 -1
- package/dist/store/portable-bundle-relocate.js +75 -31
- package/dist/store/portable-bundle-relocate.js.map +1 -1
- package/dist/store/portable-bundle-scan.d.ts.map +1 -1
- package/dist/store/portable-bundle-scan.js +2 -1
- package/dist/store/portable-bundle-scan.js.map +1 -1
- package/dist/store/portable-bundle.d.ts.map +1 -1
- package/dist/store/portable-bundle.js +7 -3
- package/dist/store/portable-bundle.js.map +1 -1
- package/dist/store/pre-repair-snapshot.d.ts +77 -0
- package/dist/store/pre-repair-snapshot.d.ts.map +1 -0
- package/dist/store/pre-repair-snapshot.js +122 -0
- package/dist/store/pre-repair-snapshot.js.map +1 -0
- package/dist/store/regenerators.d.ts +2 -1
- package/dist/store/regenerators.d.ts.map +1 -1
- package/dist/store/regenerators.js +17 -3
- package/dist/store/regenerators.js.map +1 -1
- package/dist/store/relocated-store-guard.d.ts +71 -0
- package/dist/store/relocated-store-guard.d.ts.map +1 -0
- package/dist/store/relocated-store-guard.js +138 -0
- package/dist/store/relocated-store-guard.js.map +1 -0
- package/dist/store/safety-data-accessor.d.ts +2 -2
- package/dist/store/safety-data-accessor.d.ts.map +1 -1
- package/dist/store/safety-data-accessor.js +2 -2
- package/dist/store/safety-data-accessor.js.map +1 -1
- package/dist/store/schema/attachments.d.ts +2 -2
- package/dist/store/schema/audit.d.ts +5 -5
- package/dist/store/schema/background-jobs.d.ts +1 -1
- package/dist/store/schema/cleo-global/models-catalog.d.ts +1 -1
- package/dist/store/schema/cleo-global/nexus.d.ts +686 -0
- package/dist/store/schema/cleo-global/nexus.d.ts.map +1 -1
- package/dist/store/schema/cleo-global/nexus.js +175 -7
- package/dist/store/schema/cleo-global/nexus.js.map +1 -1
- package/dist/store/schema/cleo-global/skills.d.ts +2 -2
- package/dist/store/schema/cleo-project/audit.d.ts +5 -5
- package/dist/store/schema/cleo-project/docs.d.ts +3 -3
- package/dist/store/schema/cleo-project/lifecycle.d.ts +3 -3
- package/dist/store/schema/cleo-project/provenance-commits.d.ts +2 -2
- package/dist/store/schema/cleo-project/provenance-rest.d.ts +3 -3
- package/dist/store/schema/cleo-project/tasks-core-batch2.d.ts +1 -1
- package/dist/store/schema/cleo-project/tasks-core.d.ts +6 -6
- package/dist/store/schema/cleo-shared/brain.d.ts +26 -26
- package/dist/store/schema/lifecycle.d.ts +3 -3
- package/dist/store/schema/manifest.d.ts +1 -1
- package/dist/store/schema/memory-schema.d.ts +26 -26
- package/dist/store/schema/nexus-schema.d.ts +696 -2
- package/dist/store/schema/nexus-schema.d.ts.map +1 -1
- package/dist/store/schema/nexus-schema.js +175 -19
- package/dist/store/schema/nexus-schema.js.map +1 -1
- package/dist/store/schema/provenance/releases.d.ts +1 -1
- package/dist/store/schema/skills-schema.d.ts +2 -2
- package/dist/store/schema/tasks.d.ts +5 -5
- package/dist/store/session-binding-schema.d.ts +132 -0
- package/dist/store/session-binding-schema.d.ts.map +1 -0
- package/dist/store/session-binding-schema.js +53 -0
- package/dist/store/session-binding-schema.js.map +1 -0
- package/dist/store/session-store.d.ts +262 -4
- package/dist/store/session-store.d.ts.map +1 -1
- package/dist/store/session-store.js +486 -26
- package/dist/store/session-store.js.map +1 -1
- package/dist/store/snapshot-gate.d.ts +239 -0
- package/dist/store/snapshot-gate.d.ts.map +1 -0
- package/dist/store/snapshot-gate.js +398 -0
- package/dist/store/snapshot-gate.js.map +1 -0
- package/dist/store/split-brain-import.js +2 -2
- package/dist/store/split-brain-import.js.map +1 -1
- package/dist/store/sqlite-backup.d.ts +55 -13
- package/dist/store/sqlite-backup.d.ts.map +1 -1
- package/dist/store/sqlite-backup.js +414 -106
- package/dist/store/sqlite-backup.js.map +1 -1
- package/dist/store/sqlite-data-accessor.d.ts +15 -0
- package/dist/store/sqlite-data-accessor.d.ts.map +1 -1
- package/dist/store/sqlite-data-accessor.js +63 -4
- package/dist/store/sqlite-data-accessor.js.map +1 -1
- package/dist/store/sqlite.d.ts +1 -1
- package/dist/store/sqlite.d.ts.map +1 -1
- package/dist/store/sqlite.js +53 -5
- package/dist/store/sqlite.js.map +1 -1
- package/dist/store/store-write-guard.d.ts +28 -0
- package/dist/store/store-write-guard.d.ts.map +1 -0
- package/dist/store/store-write-guard.js +50 -0
- package/dist/store/store-write-guard.js.map +1 -0
- package/dist/store/table-classification.d.ts +143 -0
- package/dist/store/table-classification.d.ts.map +1 -0
- package/dist/store/table-classification.js +1866 -0
- package/dist/store/table-classification.js.map +1 -0
- package/dist/store/task-version.d.ts +72 -0
- package/dist/store/task-version.d.ts.map +1 -0
- package/dist/store/task-version.js +93 -0
- package/dist/store/task-version.js.map +1 -0
- package/dist/store/tasks-schema.d.ts +1 -0
- package/dist/store/tasks-schema.d.ts.map +1 -1
- package/dist/store/tasks-schema.js +13 -0
- package/dist/store/tasks-schema.js.map +1 -1
- package/dist/store/tasks-sqlite.d.ts +10 -3
- package/dist/store/tasks-sqlite.d.ts.map +1 -1
- package/dist/store/tasks-sqlite.js +12 -3
- package/dist/store/tasks-sqlite.js.map +1 -1
- package/dist/store/twin-collapse.d.ts +275 -0
- package/dist/store/twin-collapse.d.ts.map +1 -0
- package/dist/store/twin-collapse.js +805 -0
- package/dist/store/twin-collapse.js.map +1 -0
- package/dist/store/umbrella-data-accessor.d.ts +2 -2
- package/dist/store/umbrella-data-accessor.d.ts.map +1 -1
- package/dist/store/umbrella-data-accessor.js +2 -2
- package/dist/store/umbrella-data-accessor.js.map +1 -1
- package/dist/store/validation-schemas.d.ts +63 -63
- package/dist/store/worktree-isolation-guard.d.ts +46 -24
- package/dist/store/worktree-isolation-guard.d.ts.map +1 -1
- package/dist/store/worktree-isolation-guard.js +69 -50
- package/dist/store/worktree-isolation-guard.js.map +1 -1
- package/dist/system/backup.d.ts.map +1 -1
- package/dist/system/backup.js +3 -67
- package/dist/system/backup.js.map +1 -1
- package/dist/system/cleo-link.d.ts +163 -0
- package/dist/system/cleo-link.d.ts.map +1 -0
- package/dist/system/cleo-link.js +246 -0
- package/dist/system/cleo-link.js.map +1 -0
- package/dist/system/dependencies.d.ts.map +1 -1
- package/dist/system/dependencies.js +26 -41
- package/dist/system/dependencies.js.map +1 -1
- package/dist/system/global-delivery.d.ts +205 -0
- package/dist/system/global-delivery.d.ts.map +1 -0
- package/dist/system/global-delivery.js +320 -0
- package/dist/system/global-delivery.js.map +1 -0
- package/dist/system/health.d.ts.map +1 -1
- package/dist/system/health.js +29 -6
- package/dist/system/health.js.map +1 -1
- package/dist/system/project-health.d.ts.map +1 -1
- package/dist/system/project-health.js +1 -20
- package/dist/system/project-health.js.map +1 -1
- package/dist/system/runtime.d.ts.map +1 -1
- package/dist/system/runtime.js +2 -12
- package/dist/system/runtime.js.map +1 -1
- package/dist/system/safestop.d.ts.map +1 -1
- package/dist/system/safestop.js +5 -2
- package/dist/system/safestop.js.map +1 -1
- package/dist/system/skill-fixtures.d.ts +200 -0
- package/dist/system/skill-fixtures.d.ts.map +1 -0
- package/dist/system/skill-fixtures.js +331 -0
- package/dist/system/skill-fixtures.js.map +1 -0
- package/dist/tasks/add.d.ts.map +1 -1
- package/dist/tasks/add.js +4 -2
- package/dist/tasks/add.js.map +1 -1
- package/dist/tasks/affected-packages.d.ts +173 -0
- package/dist/tasks/affected-packages.d.ts.map +1 -0
- package/dist/tasks/affected-packages.js +389 -0
- package/dist/tasks/affected-packages.js.map +1 -0
- package/dist/tasks/change-set.d.ts +151 -0
- package/dist/tasks/change-set.d.ts.map +1 -0
- package/dist/tasks/change-set.js +634 -0
- package/dist/tasks/change-set.js.map +1 -0
- package/dist/tasks/complete.d.ts.map +1 -1
- package/dist/tasks/complete.js +10 -5
- package/dist/tasks/complete.js.map +1 -1
- package/dist/tasks/done-plan.d.ts +103 -0
- package/dist/tasks/done-plan.d.ts.map +1 -0
- package/dist/tasks/done-plan.js +541 -0
- package/dist/tasks/done-plan.js.map +1 -0
- package/dist/tasks/done-record.d.ts +127 -0
- package/dist/tasks/done-record.d.ts.map +1 -0
- package/dist/tasks/done-record.js +373 -0
- package/dist/tasks/done-record.js.map +1 -0
- package/dist/tasks/duplicate-detector.d.ts +68 -11
- package/dist/tasks/duplicate-detector.d.ts.map +1 -1
- package/dist/tasks/duplicate-detector.js +314 -58
- package/dist/tasks/duplicate-detector.js.map +1 -1
- package/dist/tasks/evidence-paths.d.ts +78 -0
- package/dist/tasks/evidence-paths.d.ts.map +1 -0
- package/dist/tasks/evidence-paths.js +150 -0
- package/dist/tasks/evidence-paths.js.map +1 -0
- package/dist/tasks/evidence.d.ts +55 -0
- package/dist/tasks/evidence.d.ts.map +1 -1
- package/dist/tasks/evidence.js +223 -26
- package/dist/tasks/evidence.js.map +1 -1
- package/dist/tasks/gate-preview.d.ts +5 -0
- package/dist/tasks/gate-preview.d.ts.map +1 -1
- package/dist/tasks/gate-preview.js +25 -21
- package/dist/tasks/gate-preview.js.map +1 -1
- package/dist/tasks/gate-result-cache.d.ts +205 -0
- package/dist/tasks/gate-result-cache.d.ts.map +1 -0
- package/dist/tasks/gate-result-cache.js +285 -0
- package/dist/tasks/gate-result-cache.js.map +1 -0
- package/dist/tasks/gate-runner.d.ts +126 -3
- package/dist/tasks/gate-runner.d.ts.map +1 -1
- package/dist/tasks/gate-runner.js +483 -28
- package/dist/tasks/gate-runner.js.map +1 -1
- package/dist/tasks/session-scope.d.ts +3 -1
- package/dist/tasks/session-scope.d.ts.map +1 -1
- package/dist/tasks/session-scope.js +18 -3
- package/dist/tasks/session-scope.js.map +1 -1
- package/dist/tasks/tool-resolver.d.ts +23 -6
- package/dist/tasks/tool-resolver.d.ts.map +1 -1
- package/dist/tasks/tool-resolver.js +146 -8
- package/dist/tasks/tool-resolver.js.map +1 -1
- package/dist/tasks/tool-vacuity.d.ts +71 -0
- package/dist/tasks/tool-vacuity.d.ts.map +1 -0
- package/dist/tasks/tool-vacuity.js +334 -0
- package/dist/tasks/tool-vacuity.js.map +1 -0
- package/dist/tasks/update.d.ts +8 -0
- package/dist/tasks/update.d.ts.map +1 -1
- package/dist/tasks/update.js +159 -78
- package/dist/tasks/update.js.map +1 -1
- package/dist/upgrade.d.ts.map +1 -1
- package/dist/upgrade.js +18 -2
- package/dist/upgrade.js.map +1 -1
- package/dist/validation/doctor/checks.d.ts +20 -2
- package/dist/validation/doctor/checks.d.ts.map +1 -1
- package/dist/validation/doctor/checks.js +64 -4
- package/dist/validation/doctor/checks.js.map +1 -1
- package/dist/validation/doctor/index.d.ts +1 -1
- package/dist/validation/doctor/index.d.ts.map +1 -1
- package/dist/validation/doctor/index.js +1 -1
- package/dist/validation/doctor/index.js.map +1 -1
- package/dist/validation/doctor/utils.d.ts.map +1 -1
- package/dist/validation/doctor/utils.js +7 -2
- package/dist/validation/doctor/utils.js.map +1 -1
- package/dist/validation/engine-ops.d.ts +15 -0
- package/dist/validation/engine-ops.d.ts.map +1 -1
- package/dist/validation/engine-ops.js +249 -98
- package/dist/validation/engine-ops.js.map +1 -1
- package/migrations/drizzle-cleo-global/20260927000000_t12469-project-locations/migration.sql +121 -0
- package/migrations/drizzle-cleo-global/20260927010000_t12543-user-profile-project-scope/migration.sql +23 -0
- package/migrations/drizzle-cleo-global/20260928010000_t12470-location-candidates/migration.sql +72 -0
- package/migrations/drizzle-cleo-global/20260928020000_t12510-nexus-devices/migration.sql +34 -0
- package/migrations/drizzle-cleo-global/20260928030000_t12511-project-git-state/migration.sql +62 -0
- package/migrations/drizzle-cleo-project/20260927000000_t12499-session-terminal-bindings/migration.sql +34 -0
- package/migrations/drizzle-cleo-project/20260928000000_t12500-binding-provider-flag/migration.sql +15 -0
- package/package.json +23 -13
- package/schemas/config.schema.json +54 -0
- package/schemas/project-context.schema.json +51 -3
- package/schemas/project-info.schema.json +28 -1
- package/templates/CLEO-INJECTION.md +40 -332
- package/templates/CLEO-REFERENCE.md +303 -0
- package/templates/workflows/README.md +36 -14
- package/templates/workflows/release-prepare.yml.tmpl +7 -0
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
* @task T4525
|
|
8
8
|
* @epic T4454
|
|
9
9
|
*/
|
|
10
|
+
import { isEphemeralPath } from '../../nexus/registry-hygiene.js';
|
|
10
11
|
// ============================================================================
|
|
11
12
|
// Temp Project Detection
|
|
12
13
|
// ============================================================================
|
|
@@ -16,8 +17,12 @@ const TEMP_PATTERNS = ['/.temp/', '/tmp/', '/bats-run-', '/.tmp/', '/tmp.', '/ba
|
|
|
16
17
|
* @task T4525
|
|
17
18
|
*/
|
|
18
19
|
export function isTempProject(path) {
|
|
19
|
-
|
|
20
|
-
|
|
20
|
+
// Patterns are '/'-form; fold Windows separators so they match there too,
|
|
21
|
+
// and defer real temp-dir containment to the shared check (T12606).
|
|
22
|
+
const p = path.replace(/\\/g, '/');
|
|
23
|
+
return (isEphemeralPath(path) ||
|
|
24
|
+
TEMP_PATTERNS.some((pattern) => p.includes(pattern)) ||
|
|
25
|
+
(p.includes('/test/') && (p.includes('bats-run-') || p.includes('test-'))));
|
|
21
26
|
}
|
|
22
27
|
// ============================================================================
|
|
23
28
|
// Project Categorization
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/validation/doctor/utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/validation/doctor/utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -72,6 +72,21 @@ export interface GateVerifyParams {
|
|
|
72
72
|
* triggers a warning (or a hard reject in strict mode).
|
|
73
73
|
*/
|
|
74
74
|
sharedEvidence?: boolean;
|
|
75
|
+
/**
|
|
76
|
+
* `--no-run` (T12621): serve every process-executing typed gate from the
|
|
77
|
+
* ADR-061 result cache and execute none. A gate without a fresh cached pass
|
|
78
|
+
* refuses the write, before anything is recorded, with `E_GATE_NOT_CACHED`.
|
|
79
|
+
*/
|
|
80
|
+
noRun?: boolean;
|
|
81
|
+
/**
|
|
82
|
+
* Per-gate evidence for ONE write (T12625 · `cleo done`): each gate's own
|
|
83
|
+
* atom string goes through the same parse → `validateAtom` → gate minimum →
|
|
84
|
+
* `checkTaskEvidenceContext` path as `--gate … --evidence …`, and every gate
|
|
85
|
+
* is persisted in the same transaction. Exclusive with `gate`/`all`/
|
|
86
|
+
* `evidence`, and refuses `CLEO_OWNER_OVERRIDE` (the override stays a
|
|
87
|
+
* single-gate, audited `cleo verify` path).
|
|
88
|
+
*/
|
|
89
|
+
gateEvidence?: Partial<Record<VerificationGate, string | readonly string[]>>;
|
|
75
90
|
}
|
|
76
91
|
export interface GateVerifyResult {
|
|
77
92
|
/** Coverage assessed when evidence is recorded, independent of gate success. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine-ops.d.ts","sourceRoot":"","sources":["../../src/validation/engine-ops.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAKH,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"engine-ops.d.ts","sourceRoot":"","sources":["../../src/validation/engine-ops.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAKH,OAAO,KAAK,EAEV,YAAY,EAEZ,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EACjB,MAAM,qBAAqB,CAAC;AAI7B,OAAO,EAAE,KAAK,YAAY,EAA8B,MAAM,qBAAqB,CAAC;AAmNpF,mEAAmE;AACnE,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,MAAM,GAAG,UAAU,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAE9B,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,OAAO,CAAC;IAEvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,UAAU,GAAG,UAAU,GAAG,YAAY,GAAG,YAAY,CAAC;IAC/D,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,yBAAyB,CAAC,EAAE,OAAO,CAAC;IAEpC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,wDAAwD;IACxD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;;;OAIG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB;;;;;;;OAOG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,gBAAgB,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAAC,CAAC,CAAC;CAC9E;AAED,MAAM,WAAW,gBAAgB;IAC/B,gFAAgF;IAChF,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,gBAAgB,CAAC;IAC/B,kBAAkB,EAAE,QAAQ,GAAG,SAAS,CAAC;IACzC,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,gBAAgB,EAAE,CAAC;IAClC,YAAY,EAAE,gBAAgB,EAAE,CAAC;IACjC,MAAM,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,GAAG,OAAO,CAAC;IACnD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAC9B,oEAAoE;IACpE,cAAc,CAAC,EAAE,YAAY,EAAE,CAAC;IAChC,yEAAyE;IACzE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;;OAKG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAoBD;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAsB,kBAAkB,CACtC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,gBAAgB,GACvB,OAAO,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC,CAqyBzC;AA4BD;;;GAGG;AACH,wBAAsB,yBAAyB,CAC7C,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,wBAAwB,GAC/B,OAAO,CAAC,YAAY,CAAC,CAuBvB;AAED;;;GAGG;AACH,wBAAsB,4BAA4B,CAChD,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,wBAAwB,GAC/B,OAAO,CAAC,YAAY,CAAC,CAoBvB;AAED;;;GAGG;AACH,wBAAsB,6BAA6B,CACjD,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,wBAAwB,GAC/B,OAAO,CAAC,YAAY,CAAC,CAoBvB;AAED;;;GAGG;AACH,wBAAsB,8BAA8B,CAClD,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,wBAAwB,GAC/B,OAAO,CAAC,YAAY,CAAC,CAoBvB;AAED;;;GAGG;AACH,wBAAsB,6BAA6B,CACjD,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,wBAAwB,GAC/B,OAAO,CAAC,YAAY,CAAC,CAoBvB;AAED;;;GAGG;AACH,wBAAsB,wBAAwB,CAC5C,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,wBAAwB,GAC/B,OAAO,CAAC,YAAY,CAAC,CAkBvB;AAED;;;GAGG;AACH,wBAAsB,oCAAoC,CACxD,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,wBAAwB,GAC/B,OAAO,CAAC,YAAY,CAAC,CAoBvB;AAED;;;GAGG;AACH,wBAAsB,0BAA0B,CAC9C,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,wBAAwB,GAC/B,OAAO,CAAC,YAAY,CAAC,CAwBvB;AAED;;;GAGG;AACH,wBAAsB,uBAAuB,CAC3C,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,wBAAwB,GAC/B,OAAO,CAAC,YAAY,CAAC,CAoDvB;AAED;;;GAGG;AACH,wBAAsB,uBAAuB,CAC3C,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,wBAAwB,GAC/B,OAAO,CAAC,YAAY,CAAC,CAmBvB;AAED;;;GAGG;AACH,wBAAsB,+BAA+B,CACnD,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,wBAAwB,GAC/B,OAAO,CAAC,YAAY,CAAC,CAmBvB;AAED;;;GAGG;AACH,wBAAsB,0BAA0B,CAC9C,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,wBAAwB,GAC/B,OAAO,CAAC,YAAY,CAAC,CAmBvB"}
|
|
@@ -23,11 +23,12 @@ import { captureProjectScope, readProjectInfoAtDirectorySync, worktreeScope, } f
|
|
|
23
23
|
import { checkAndIncrementOverrideCap } from '../security/override-cap.js';
|
|
24
24
|
import { enforceSharedEvidence } from '../security/shared-evidence-tracker.js';
|
|
25
25
|
import { warnIfNoActiveSession } from '../sessions/session-enforcement.js';
|
|
26
|
-
import { createOperationExecutionContext } from '../store/background-ops.js';
|
|
26
|
+
import { createOperationExecutionContext, OperationExecutionError, } from '../store/background-ops.js';
|
|
27
27
|
import { getTaskAccessor } from '../store/data-accessor.js';
|
|
28
28
|
import { checkCallsiteCoverageAtom, checkEngineMigrationLocDrop, checkGateEvidenceMinimumDetailed, checkTaskEvidenceContext, composeGateEvidence, DECISION_ONLY_INAPPLICABLE_GATES, isDecisionOnlyImplementation, isHardAtom, parseEvidence, validateAtom, } from '../tasks/evidence.js';
|
|
29
29
|
import { appendForceBypassLine, appendGateAuditLine } from '../tasks/gate-audit.js';
|
|
30
|
-
import {
|
|
30
|
+
import { readAllowCachedGates } from '../tasks/gate-result-cache.js';
|
|
31
|
+
import { createTaskGateReceipt, GATE_CACHE_INVALID_PREFIX, GATE_NOT_CACHED_PREFIX, revalidateTaskGateResults, runTaskGates, typedGateAdmissionMs, } from '../tasks/gate-runner.js';
|
|
31
32
|
import { hasCallsiteCoverageLabel, hasEngineMigrationLabel, } from '../verification/evidence-atoms.js';
|
|
32
33
|
import { checkArchitectureDecisionManifest, validateArchitectureDecisionTask, } from './protocols/architecture-decision.js';
|
|
33
34
|
import { checkArtifactPublishManifest, validateArtifactPublishTask, } from './protocols/artifact-publish.js';
|
|
@@ -192,10 +193,10 @@ function protocolCatch(err) {
|
|
|
192
193
|
* @adr ADR-051
|
|
193
194
|
*/
|
|
194
195
|
export async function validateGateVerify(projectRoot, params) {
|
|
195
|
-
const admittedAt = Date.now();
|
|
196
196
|
projectRoot = resolve(projectRoot);
|
|
197
197
|
const inheritedExecution = worktreeScope.getStore()?.execution;
|
|
198
198
|
let ownedVerificationExecution;
|
|
199
|
+
let typedPhase = 'task and evidence validation';
|
|
199
200
|
try {
|
|
200
201
|
const { taskId, gate, value = true, agent, all, reset } = params;
|
|
201
202
|
const agentId = agent ?? 'unknown';
|
|
@@ -221,26 +222,44 @@ export async function validateGateVerify(projectRoot, params) {
|
|
|
221
222
|
const originalUpdatedAt = task.updatedAt;
|
|
222
223
|
const typedWrite = !reset &&
|
|
223
224
|
value !== false &&
|
|
224
|
-
Boolean(gate || all) &&
|
|
225
|
+
Boolean(gate || all || params.gateEvidence) &&
|
|
225
226
|
originalAcceptance.some((item) => typeof item !== 'string');
|
|
227
|
+
// T12621: `evidence.allowCachedGates: false` disables reuse, so `--no-run`
|
|
228
|
+
// has nothing it may record from.
|
|
229
|
+
const allowCachedGates = readAllowCachedGates(projectRoot);
|
|
230
|
+
if (typedWrite && params.noRun && !allowCachedGates)
|
|
231
|
+
return engineError('E_GATE_CACHE_DISABLED', `--no-run: this project sets evidence.allowCachedGates to false, so typed gates must execute; drop --no-run to verify ${taskId}`);
|
|
226
232
|
const initialAcRows = typedWrite ? await accessor.getAcRows(taskId) : [];
|
|
227
233
|
let typedExecution;
|
|
234
|
+
// T12516: an owned typed lifetime is admitted only when the typed gates are
|
|
235
|
+
// about to run, and it is sized from their ADR-061 tool deadlines plus the
|
|
236
|
+
// shared bookkeeping budget. It used to be a fixed two seconds from admission,
|
|
237
|
+
// created here, so the lifetime was spent by evidence tools (`tool:test`) and
|
|
238
|
+
// by the gates themselves: any suite over two seconds ended in
|
|
239
|
+
// E_OPERATION_DEADLINE. A caller-owned (inherited) lifetime is kept as is.
|
|
240
|
+
let admitOwnedTypedExecution;
|
|
228
241
|
if (typedWrite) {
|
|
229
242
|
typedExecution = inheritedExecution;
|
|
230
243
|
if (!typedExecution) {
|
|
231
244
|
const identity = readProjectInfoAtDirectorySync(projectRoot, join(projectRoot, '.cleo'));
|
|
232
|
-
|
|
245
|
+
const projectId = identity.projectId;
|
|
246
|
+
if (!projectId)
|
|
233
247
|
throw new Error('Typed verification requires a stable project identity');
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
248
|
+
const typedGates = originalAcceptance.filter((item) => typeof item !== 'string');
|
|
249
|
+
admitOwnedTypedExecution = () => {
|
|
250
|
+
ownedVerificationExecution = createOperationExecutionContext({
|
|
251
|
+
projectId,
|
|
252
|
+
projectRoot,
|
|
253
|
+
actor: agentId,
|
|
254
|
+
operation: 'check.gate.verify',
|
|
255
|
+
idempotencyKey: `${taskId}:${randomUUID()}`,
|
|
256
|
+
}, { budgetMs: typedGateAdmissionMs(typedGates) });
|
|
257
|
+
return ownedVerificationExecution;
|
|
258
|
+
};
|
|
259
|
+
}
|
|
260
|
+
else {
|
|
261
|
+
typedExecution.assertActive();
|
|
242
262
|
}
|
|
243
|
-
typedExecution.assertActive();
|
|
244
263
|
}
|
|
245
264
|
const validateEvidenceAtom = (...args) => typedExecution
|
|
246
265
|
? worktreeScope.run(captureProjectScope(projectRoot, {
|
|
@@ -249,8 +268,24 @@ export async function validateGateVerify(projectRoot, params) {
|
|
|
249
268
|
}), () => validateAtom(...args))
|
|
250
269
|
: validateAtom(...args);
|
|
251
270
|
const configGates = await loadRequiredGates(projectRoot);
|
|
271
|
+
// T12625: a multi-gate write names its gates by the keys of gateEvidence.
|
|
272
|
+
const multiTargets = params.gateEvidence
|
|
273
|
+
? VALID_GATES.filter((g) => params.gateEvidence?.[g] !== undefined)
|
|
274
|
+
: null;
|
|
275
|
+
if (multiTargets) {
|
|
276
|
+
const unknown = Object.keys(params.gateEvidence ?? {}).filter((g) => !VALID_GATES.includes(g));
|
|
277
|
+
if (unknown.length > 0 ||
|
|
278
|
+
multiTargets.length === 0 ||
|
|
279
|
+
gate ||
|
|
280
|
+
all ||
|
|
281
|
+
reset ||
|
|
282
|
+
params.evidence)
|
|
283
|
+
return engineError('E_INVALID_INPUT', unknown.length > 0
|
|
284
|
+
? `Invalid gate(s) in gateEvidence: ${unknown.join(', ')}. Valid: ${VALID_GATES.join(', ')}`
|
|
285
|
+
: 'gateEvidence needs at least one gate and excludes gate, all, reset and evidence');
|
|
286
|
+
}
|
|
252
287
|
// View mode (no modifications)
|
|
253
|
-
if (!gate && !all && !reset) {
|
|
288
|
+
if (!gate && !all && !reset && !multiTargets) {
|
|
254
289
|
const verification = task.verification ?? initVerification();
|
|
255
290
|
const missing = getMissingGates(verification, configGates);
|
|
256
291
|
return engineSuccess({
|
|
@@ -269,7 +304,9 @@ export async function validateGateVerify(projectRoot, params) {
|
|
|
269
304
|
}
|
|
270
305
|
// T9231 / ADR-070: FISE-2 — Lead authorship bypass prevention.
|
|
271
306
|
// Reject implemented gate write from a Lead session without upstream delegation.
|
|
272
|
-
if (gate === 'implemented'
|
|
307
|
+
if ((gate === 'implemented' || multiTargets?.includes('implemented')) &&
|
|
308
|
+
value !== false &&
|
|
309
|
+
!reset) {
|
|
273
310
|
const { validateSpawnRequest } = await import('../lifecycle/ivtr-loop.js');
|
|
274
311
|
const spawnCheck = await validateSpawnRequest(taskId, 'implemented', sessionId);
|
|
275
312
|
if (!spawnCheck.allowed) {
|
|
@@ -278,8 +315,11 @@ export async function validateGateVerify(projectRoot, params) {
|
|
|
278
315
|
}
|
|
279
316
|
// Check if evidence-based requirement applies. gate failures
|
|
280
317
|
// (value=false) and resets do NOT require evidence.
|
|
281
|
-
const isWriteRequiringEvidence = (all || (gate && value !== false)) && !reset;
|
|
318
|
+
const isWriteRequiringEvidence = (all || multiTargets !== null || (gate && value !== false)) && !reset;
|
|
282
319
|
const override = readOverrideState();
|
|
320
|
+
if (multiTargets && override.override)
|
|
321
|
+
return engineError('E_OVERRIDE_NOT_ACCEPTED', 'CLEO_OWNER_OVERRIDE is not accepted by a derived multi-gate write (cleo done / verify --auto). ' +
|
|
322
|
+
'Unset it, or record the gate with `cleo verify <id> --gate <gate> --evidence …`, which keeps the audited override path.');
|
|
283
323
|
// T1501 / P0-5 — per-session CLEO_OWNER_OVERRIDE cap.
|
|
284
324
|
// Enforce before the write proceeds so the error surfaces early.
|
|
285
325
|
let sessionOverrideOrdinal;
|
|
@@ -303,8 +343,10 @@ export async function validateGateVerify(projectRoot, params) {
|
|
|
303
343
|
else {
|
|
304
344
|
// Attempt to resolve the active session from the DB as a better key.
|
|
305
345
|
try {
|
|
306
|
-
|
|
307
|
-
|
|
346
|
+
// T12500: the caller's BOUND session only — never charge an
|
|
347
|
+
// override to whichever agent's session is newest.
|
|
348
|
+
const { resolveBoundSessionId } = await import('../store/session-store.js');
|
|
349
|
+
capSessionId = (await resolveBoundSessionId(projectRoot)) ?? 'global';
|
|
308
350
|
}
|
|
309
351
|
catch {
|
|
310
352
|
capSessionId = 'global';
|
|
@@ -320,13 +362,20 @@ export async function validateGateVerify(projectRoot, params) {
|
|
|
320
362
|
// T1502 / P0-6 — shared-evidence detection.
|
|
321
363
|
let sharedEvidenceAcknowledged = false;
|
|
322
364
|
let sharedAtomWarned = false;
|
|
323
|
-
|
|
324
|
-
|
|
365
|
+
const evidenceStrings = multiTargets
|
|
366
|
+
? multiTargets.flatMap((g) => evidenceAttempts(params.gateEvidence?.[g]))
|
|
367
|
+
: params.evidence
|
|
368
|
+
? [params.evidence]
|
|
369
|
+
: [];
|
|
370
|
+
for (const evidenceString of evidenceStrings) {
|
|
371
|
+
if (!isWriteRequiringEvidence || override.override || !sessionId)
|
|
372
|
+
break;
|
|
373
|
+
const seResult = enforceSharedEvidence(projectRoot, sessionId, taskId, evidenceString, params.sharedEvidence === true);
|
|
325
374
|
if (!seResult.allowed) {
|
|
326
375
|
return engineError(seResult.errorCode ?? 'E_SHARED_EVIDENCE_FLAG_REQUIRED', seResult.errorMessage ?? 'Shared evidence flag required.');
|
|
327
376
|
}
|
|
328
|
-
sharedEvidenceAcknowledged
|
|
329
|
-
sharedAtomWarned
|
|
377
|
+
sharedEvidenceAcknowledged ||= seResult.acknowledged === true;
|
|
378
|
+
sharedAtomWarned ||= seResult.warned === true;
|
|
330
379
|
}
|
|
331
380
|
// Modification mode
|
|
332
381
|
let verification = task.verification ?? initVerification();
|
|
@@ -336,21 +385,97 @@ export async function validateGateVerify(projectRoot, params) {
|
|
|
336
385
|
const now = new Date().toISOString();
|
|
337
386
|
let action = 'view';
|
|
338
387
|
const evidenceStored = [];
|
|
388
|
+
const perGateAtoms = new Map();
|
|
339
389
|
if (reset) {
|
|
340
390
|
verification = initVerification();
|
|
341
391
|
action = 'reset';
|
|
342
392
|
}
|
|
343
393
|
else if (isWriteRequiringEvidence) {
|
|
344
394
|
// Determine target gates.
|
|
345
|
-
const targets = all ? configGates : [gate];
|
|
395
|
+
const targets = multiTargets ?? (all ? configGates : [gate]);
|
|
346
396
|
const evidenceContext = {
|
|
347
397
|
task,
|
|
348
398
|
gates: targets,
|
|
349
399
|
criteria: await accessor.getAcRows(taskId),
|
|
350
400
|
};
|
|
351
|
-
if (!all && !VALID_GATES.includes(gate)) {
|
|
401
|
+
if (!all && !multiTargets && !VALID_GATES.includes(gate)) {
|
|
352
402
|
return engineError('E_INVALID_INPUT', `Invalid gate: ${gate}. Valid: ${VALID_GATES.join(', ')}`);
|
|
353
403
|
}
|
|
404
|
+
// One evidence string, validated for `gates` through the ADR-051 path:
|
|
405
|
+
// parse → validateAtom → per-gate minimum → label gates. Shared by the
|
|
406
|
+
// single-gate write and the T12625 multi-gate write, so there is one
|
|
407
|
+
// validation path, not two.
|
|
408
|
+
const validateEvidenceFor = async (evidence, gates) => {
|
|
409
|
+
const atoms = [];
|
|
410
|
+
let parsed;
|
|
411
|
+
try {
|
|
412
|
+
parsed = parseEvidence(evidence);
|
|
413
|
+
}
|
|
414
|
+
catch (err) {
|
|
415
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
416
|
+
return engineError('E_EVIDENCE_INVALID', message);
|
|
417
|
+
}
|
|
418
|
+
// T12107 (gh#1195): a sibling `commit:` atom anchors `files:` paths —
|
|
419
|
+
// thread its sha so files are resolved against that commit's tree first.
|
|
420
|
+
const siblingCommitSha = parsed.atoms.find((a) => a.kind === 'commit')?.sha;
|
|
421
|
+
for (const atom of parsed.atoms.toSorted((a, b) => Number(b.kind === 'pr') - Number(a.kind === 'pr'))) {
|
|
422
|
+
// T9178: pass taskId for branch-scope commit validation
|
|
423
|
+
const check = await validateEvidenceAtom(atom, projectRoot, taskId, siblingCommitSha, {
|
|
424
|
+
...evidenceContext,
|
|
425
|
+
artifactCommitSha: atoms.find((atom) => atom.kind === 'pr')?.mergeCommitSha,
|
|
426
|
+
});
|
|
427
|
+
if (!check.ok) {
|
|
428
|
+
return engineError(check.codeName, check.reason);
|
|
429
|
+
}
|
|
430
|
+
atoms.push(check.atom);
|
|
431
|
+
}
|
|
432
|
+
// Check each target gate satisfies its minimum.
|
|
433
|
+
// T9949: surface the rich example-bearing remediation hint via
|
|
434
|
+
// `engineError({fix:})` so `note:`-only callers see exactly which
|
|
435
|
+
// alternative atom kind the gate requires (commit/files/decision/pr).
|
|
436
|
+
// gh#1215: a task whose `implemented` gate was satisfied by a DECISION
|
|
437
|
+
// with no commit/pr changed no code, so `testsPassed` / `qaPassed` have
|
|
438
|
+
// nothing to measure. Demanding them made correctly-evidenced audit and
|
|
439
|
+
// review tasks uncompletable: tool:test is meaningless when nothing
|
|
440
|
+
// changed, and the owner override is session-capped and rejected on
|
|
441
|
+
// critical gates. Satisfied by absence, as with the T12083
|
|
442
|
+
// `notApplicable` tool atom.
|
|
443
|
+
const decisionOnly = isDecisionOnlyImplementation(verification.evidence?.implemented);
|
|
444
|
+
for (const targetGate of gates) {
|
|
445
|
+
if (decisionOnly && DECISION_ONLY_INAPPLICABLE_GATES.includes(targetGate))
|
|
446
|
+
continue;
|
|
447
|
+
const missing = checkGateEvidenceMinimumDetailed(targetGate, atoms);
|
|
448
|
+
if (missing) {
|
|
449
|
+
return engineError('E_EVIDENCE_INSUFFICIENT', missing.message, {
|
|
450
|
+
fix: missing.hint,
|
|
451
|
+
});
|
|
452
|
+
}
|
|
453
|
+
}
|
|
454
|
+
// T1604 — engine-migration label gate.
|
|
455
|
+
// If the task carries the `engine-migration` label and the `implemented`
|
|
456
|
+
// gate is among the targets, require a `loc-drop` evidence atom proving
|
|
457
|
+
// the migrated engine shed ≥ the configured minimum percentage of LOC.
|
|
458
|
+
const isImplementedTarget = gates.includes('implemented');
|
|
459
|
+
if (isImplementedTarget && hasEngineMigrationLabel(task.labels ?? [])) {
|
|
460
|
+
const locDropError = checkEngineMigrationLocDrop(atoms);
|
|
461
|
+
if (locDropError) {
|
|
462
|
+
return engineError('E_EVIDENCE_INSUFFICIENT', locDropError);
|
|
463
|
+
}
|
|
464
|
+
}
|
|
465
|
+
// T1605 — callsite-coverage label gate.
|
|
466
|
+
// If the task carries the `callsite-coverage` label and the `implemented`
|
|
467
|
+
// gate is among the targets, require a `callsite-coverage` evidence atom
|
|
468
|
+
// proving the exported symbol has ≥1 production callsite outside its
|
|
469
|
+
// own source file, test files, and dist directories. Catches the T1601
|
|
470
|
+
// pattern where a function is shipped but never wired to production.
|
|
471
|
+
if (isImplementedTarget && hasCallsiteCoverageLabel(task.labels ?? [])) {
|
|
472
|
+
const callsiteError = checkCallsiteCoverageAtom(atoms);
|
|
473
|
+
if (callsiteError) {
|
|
474
|
+
return engineError('E_EVIDENCE_INSUFFICIENT', callsiteError);
|
|
475
|
+
}
|
|
476
|
+
}
|
|
477
|
+
return atoms;
|
|
478
|
+
};
|
|
354
479
|
// Parse evidence if provided.
|
|
355
480
|
let validatedAtoms = [];
|
|
356
481
|
if (override.override) {
|
|
@@ -433,81 +558,48 @@ export async function validateGateVerify(projectRoot, params) {
|
|
|
433
558
|
validatedAtoms = [{ kind: 'override', reason: override.reason }, ...overrideAtoms];
|
|
434
559
|
}
|
|
435
560
|
else {
|
|
436
|
-
if (!
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
let parsed;
|
|
442
|
-
try {
|
|
443
|
-
parsed = parseEvidence(params.evidence);
|
|
444
|
-
}
|
|
445
|
-
catch (err) {
|
|
446
|
-
const message = err instanceof Error ? err.message : String(err);
|
|
447
|
-
return engineError('E_EVIDENCE_INVALID', message);
|
|
448
|
-
}
|
|
449
|
-
// T12107 (gh#1195): a sibling `commit:` atom anchors `files:` paths —
|
|
450
|
-
// thread its sha so files are resolved against that commit's tree first.
|
|
451
|
-
const siblingCommitSha = parsed.atoms.find((a) => a.kind === 'commit')?.sha;
|
|
452
|
-
for (const atom of parsed.atoms.toSorted((a, b) => Number(b.kind === 'pr') - Number(a.kind === 'pr'))) {
|
|
453
|
-
// T9178: pass taskId for branch-scope commit validation
|
|
454
|
-
const check = await validateEvidenceAtom(atom, projectRoot, taskId, siblingCommitSha, {
|
|
455
|
-
...evidenceContext,
|
|
456
|
-
artifactCommitSha: validatedAtoms.find((atom) => atom.kind === 'pr')?.mergeCommitSha,
|
|
457
|
-
});
|
|
458
|
-
if (!check.ok) {
|
|
459
|
-
return engineError(check.codeName, check.reason);
|
|
561
|
+
if (!multiTargets) {
|
|
562
|
+
if (!params.evidence) {
|
|
563
|
+
return engineError('E_EVIDENCE_MISSING', `Evidence is required. See ADR-051.\n` +
|
|
564
|
+
`Example: cleo verify ${taskId} --gate implemented --evidence commit:<sha>;files:<path>\n` +
|
|
565
|
+
`Or set CLEO_OWNER_OVERRIDE=1 with CLEO_OWNER_OVERRIDE_REASON=<reason> for emergency bypass (audited).`);
|
|
460
566
|
}
|
|
461
|
-
|
|
567
|
+
const checked = await validateEvidenceFor(params.evidence, targets);
|
|
568
|
+
if (!Array.isArray(checked))
|
|
569
|
+
return checked;
|
|
570
|
+
validatedAtoms = checked;
|
|
462
571
|
}
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
const
|
|
475
|
-
for (const
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
}
|
|
485
|
-
// T1604 — engine-migration label gate.
|
|
486
|
-
// If the task carries the `engine-migration` label and the `implemented`
|
|
487
|
-
// gate is among the targets, require a `loc-drop` evidence atom proving
|
|
488
|
-
// the migrated engine shed ≥ the configured minimum percentage of LOC.
|
|
489
|
-
const isImplementedTarget = targets.includes('implemented');
|
|
490
|
-
if (isImplementedTarget && hasEngineMigrationLabel(task.labels ?? [])) {
|
|
491
|
-
const locDropError = checkEngineMigrationLocDrop(validatedAtoms);
|
|
492
|
-
if (locDropError) {
|
|
493
|
-
return engineError('E_EVIDENCE_INSUFFICIENT', locDropError);
|
|
494
|
-
}
|
|
495
|
-
}
|
|
496
|
-
// T1605 — callsite-coverage label gate.
|
|
497
|
-
// If the task carries the `callsite-coverage` label and the `implemented`
|
|
498
|
-
// gate is among the targets, require a `callsite-coverage` evidence atom
|
|
499
|
-
// proving the exported symbol has ≥1 production callsite outside its
|
|
500
|
-
// own source file, test files, and dist directories. Catches the T1601
|
|
501
|
-
// pattern where a function is shipped but never wired to production.
|
|
502
|
-
if (isImplementedTarget && hasCallsiteCoverageLabel(task.labels ?? [])) {
|
|
503
|
-
const callsiteError = checkCallsiteCoverageAtom(validatedAtoms);
|
|
504
|
-
if (callsiteError) {
|
|
505
|
-
return engineError('E_EVIDENCE_INSUFFICIENT', callsiteError);
|
|
506
|
-
}
|
|
572
|
+
}
|
|
573
|
+
// T12625: each gate validates and composes its OWN atoms, in gate order,
|
|
574
|
+
// so `implemented` is on the record before the decision-only rule for
|
|
575
|
+
// testsPassed/qaPassed reads it.
|
|
576
|
+
//
|
|
577
|
+
// T12628 (D11151): a gate may carry ORDERED attempts (one per PR a task
|
|
578
|
+
// shipped in). Every attempt is validated before anything is persisted,
|
|
579
|
+
// each gets its own audit line, and the gate's stored evidence is the
|
|
580
|
+
// last attempt — so the whole set is recorded in this one write or not
|
|
581
|
+
// at all.
|
|
582
|
+
for (const targetGate of multiTargets ?? []) {
|
|
583
|
+
const attempts = [];
|
|
584
|
+
for (const attempt of evidenceAttempts(params.gateEvidence?.[targetGate])) {
|
|
585
|
+
const atoms = await validateEvidenceFor(attempt, [targetGate]);
|
|
586
|
+
if (!Array.isArray(atoms))
|
|
587
|
+
return atoms;
|
|
588
|
+
const contextualFailure = checkTaskEvidenceContext(evidenceContext, targetGate, atoms);
|
|
589
|
+
if (contextualFailure)
|
|
590
|
+
return engineError('E_EVIDENCE_CONTENT_MISMATCH', contextualFailure);
|
|
591
|
+
evidenceStored.push(...atoms);
|
|
592
|
+
attempts.push(atoms);
|
|
507
593
|
}
|
|
594
|
+
const last = attempts[attempts.length - 1];
|
|
595
|
+
if (!last)
|
|
596
|
+
return engineError('E_INVALID_INPUT', `gateEvidence.${targetGate} is empty`);
|
|
597
|
+
perGateAtoms.set(targetGate, attempts);
|
|
598
|
+
verification.gates[targetGate] = true;
|
|
599
|
+
verification.evidence[targetGate] = composeGateEvidence(last, agentId, undefined, undefined, evidenceContext, targetGate);
|
|
508
600
|
}
|
|
509
601
|
evidenceStored.push(...validatedAtoms);
|
|
510
|
-
for (const targetGate of targets) {
|
|
602
|
+
for (const targetGate of multiTargets ? [] : targets) {
|
|
511
603
|
const contextualFailure = override.override && targetGate !== 'implemented' && targetGate !== 'testsPassed'
|
|
512
604
|
? null
|
|
513
605
|
: checkTaskEvidenceContext(evidenceContext, targetGate, validatedAtoms);
|
|
@@ -518,7 +610,7 @@ export async function validateGateVerify(projectRoot, params) {
|
|
|
518
610
|
}
|
|
519
611
|
verification.lastAgent = agent;
|
|
520
612
|
verification.lastUpdated = now;
|
|
521
|
-
action = all ? 'set_all' : 'set_gate';
|
|
613
|
+
action = all || multiTargets ? 'set_all' : 'set_gate';
|
|
522
614
|
}
|
|
523
615
|
else if (gate) {
|
|
524
616
|
// Gate failure — no evidence required (failures do not need proof).
|
|
@@ -539,11 +631,32 @@ export async function validateGateVerify(projectRoot, params) {
|
|
|
539
631
|
});
|
|
540
632
|
action = 'set_gate';
|
|
541
633
|
}
|
|
634
|
+
if (admitOwnedTypedExecution)
|
|
635
|
+
typedExecution = admitOwnedTypedExecution();
|
|
542
636
|
if (typedExecution) {
|
|
637
|
+
typedPhase = 'typed gate execution';
|
|
638
|
+
typedExecution.assertActive();
|
|
543
639
|
verification.gateResults = await runTaskGates(task, initialAcRows, {
|
|
544
640
|
projectRoot,
|
|
545
641
|
execution: typedExecution,
|
|
642
|
+
// T12621: reuse a pass cached by `cleo verify --run` or an earlier
|
|
643
|
+
// attempt; `--no-run` executes nothing.
|
|
644
|
+
cache: allowCachedGates ? (params.noRun ? 'only' : 'use') : 'off',
|
|
546
645
|
});
|
|
646
|
+
// `--no-run` refuses the whole write rather than recording a gate it
|
|
647
|
+
// declined to execute as an `error` result.
|
|
648
|
+
const results = verification.gateResults;
|
|
649
|
+
const refusedFrom = (prefix) => results
|
|
650
|
+
.filter((result) => result.errorMessage?.startsWith(prefix))
|
|
651
|
+
.map((result) => result.errorMessage.replace('<taskId>', taskId));
|
|
652
|
+
const invalid = refusedFrom(GATE_CACHE_INVALID_PREFIX);
|
|
653
|
+
if (invalid.length > 0)
|
|
654
|
+
return engineError('E_GATE_CACHE_INVALID', invalid.join('\n'));
|
|
655
|
+
const notCached = refusedFrom(GATE_NOT_CACHED_PREFIX);
|
|
656
|
+
if (notCached.length > 0)
|
|
657
|
+
return engineError('E_GATE_NOT_CACHED', notCached.join('\n'));
|
|
658
|
+
typedExecution.assertActive();
|
|
659
|
+
typedPhase = 'persisting the verification';
|
|
547
660
|
}
|
|
548
661
|
verification.passed =
|
|
549
662
|
computePassed(verification, configGates) &&
|
|
@@ -636,7 +749,22 @@ export async function validateGateVerify(projectRoot, params) {
|
|
|
636
749
|
override: override.override,
|
|
637
750
|
};
|
|
638
751
|
try {
|
|
639
|
-
|
|
752
|
+
// T12625: a multi-gate write logs one line per gate with that gate's
|
|
753
|
+
// own atoms, the shape every single-gate write already has.
|
|
754
|
+
if (multiTargets) {
|
|
755
|
+
for (const g of multiTargets) {
|
|
756
|
+
for (const attempt of perGateAtoms.get(g) ?? []) {
|
|
757
|
+
await appendGateAuditLine(projectRoot, {
|
|
758
|
+
...auditRecord,
|
|
759
|
+
gate: g,
|
|
760
|
+
action: 'set',
|
|
761
|
+
evidence: composeGateEvidence(attempt, agentId),
|
|
762
|
+
});
|
|
763
|
+
}
|
|
764
|
+
}
|
|
765
|
+
}
|
|
766
|
+
else
|
|
767
|
+
await appendGateAuditLine(projectRoot, auditRecord);
|
|
640
768
|
if (override.override && action !== 'reset') {
|
|
641
769
|
// T1501: include sessionOverrideOrdinal in the force-bypass record.
|
|
642
770
|
// T1504: include workTreeContext when the override was exempt from the cap counter.
|
|
@@ -684,7 +812,7 @@ export async function validateGateVerify(projectRoot, params) {
|
|
|
684
812
|
result.gateSet = gate;
|
|
685
813
|
}
|
|
686
814
|
else if (action === 'set_all') {
|
|
687
|
-
result.gatesSet = configGates;
|
|
815
|
+
result.gatesSet = multiTargets ?? configGates;
|
|
688
816
|
}
|
|
689
817
|
if (evidenceStored.length > 0) {
|
|
690
818
|
result.evidenceStored = evidenceStored;
|
|
@@ -717,6 +845,10 @@ export async function validateGateVerify(projectRoot, params) {
|
|
|
717
845
|
return engineSuccess(result);
|
|
718
846
|
}
|
|
719
847
|
catch (err) {
|
|
848
|
+
// T12621: a bare "Shared operation deadline reached" named neither the
|
|
849
|
+
// phase that ran out nor the remedy, so agents grepped the dist bundle.
|
|
850
|
+
if (err instanceof OperationExecutionError && err.code === 'E_OPERATION_DEADLINE')
|
|
851
|
+
return engineError('E_OPERATION_DEADLINE', typedDeadlineMessage(params.taskId, typedPhase));
|
|
720
852
|
const message = err instanceof Error
|
|
721
853
|
? [err.message, err.cause instanceof Error ? err.cause.message : undefined]
|
|
722
854
|
.filter(Boolean)
|
|
@@ -728,6 +860,25 @@ export async function validateGateVerify(projectRoot, params) {
|
|
|
728
860
|
ownedVerificationExecution?.close();
|
|
729
861
|
}
|
|
730
862
|
}
|
|
863
|
+
/** A gate's evidence as ordered attempts (a single string is one attempt). */
|
|
864
|
+
function evidenceAttempts(value) {
|
|
865
|
+
if (value === undefined)
|
|
866
|
+
return [];
|
|
867
|
+
return typeof value === 'string' ? [value] : [...value];
|
|
868
|
+
}
|
|
869
|
+
/**
|
|
870
|
+
* Deadline diagnostic for a typed verification write: the phase that ran out
|
|
871
|
+
* and the remedies, in one self-contained message (the CLI envelope carries
|
|
872
|
+
* only `code` and `message`).
|
|
873
|
+
*/
|
|
874
|
+
function typedDeadlineMessage(taskId, phase) {
|
|
875
|
+
return (`Typed verification of ${taskId} reached its operation deadline during ${phase}. ` +
|
|
876
|
+
'Each typed gate is bounded by its own timeout (gate `timeoutMs`, else CLEO_GATE_TIMEOUT_MS, ' +
|
|
877
|
+
'else CLEO_TOOL_TIMEOUT_<KIND>, else 1800000 ms for test and 300000 ms otherwise). ' +
|
|
878
|
+
'Fix: raise that timeout for a slow gate, or run `cleo verify ' +
|
|
879
|
+
taskId +
|
|
880
|
+
' --run` first so passing results are cached and the write reuses them (add --no-run to forbid execution).');
|
|
881
|
+
}
|
|
731
882
|
// ---------------------------------------------------------------------------
|
|
732
883
|
// Protocol validation operations (T5327 + T260)
|
|
733
884
|
// ---------------------------------------------------------------------------
|