@cleocode/core 2026.9.20 → 2026.9.22
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/agents/scaffold.d.ts.map +1 -1
- package/dist/agents/scaffold.js +0 -1
- package/dist/agents/scaffold.js.map +1 -1
- package/dist/bootstrap.d.ts +5 -1
- package/dist/bootstrap.d.ts.map +1 -1
- package/dist/bootstrap.js +45 -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/dispatch/mutate-projection.d.ts.map +1 -1
- package/dist/dispatch/mutate-projection.js +5 -0
- package/dist/dispatch/mutate-projection.js.map +1 -1
- package/dist/docs/docs-update.d.ts.map +1 -1
- package/dist/docs/docs-update.js +25 -9
- package/dist/docs/docs-update.js.map +1 -1
- package/dist/docs/export-document.js +5963 -2406
- 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 +16 -1
- package/dist/doctor/knowledge.d.ts.map +1 -1
- package/dist/doctor/knowledge.js +58 -32
- 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 +36 -6
- package/dist/engine/engine-ops.d.ts.map +1 -1
- package/dist/engine/engine-ops.js +115 -14
- 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/gateway-client/generated/types.gen.d.ts +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 +8 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -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 +578 -53
- package/dist/init.js.map +1 -1
- package/dist/inject/index.d.ts.map +1 -1
- package/dist/inject/index.js +8 -3
- package/dist/inject/index.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 +11 -7
- package/dist/internal.d.ts.map +1 -1
- package/dist/internal.js +9 -5
- 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 +4400 -1801
- 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.js +31 -31
- 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 +38 -0
- package/dist/nexus/analyze-orchestrator.d.ts.map +1 -1
- package/dist/nexus/analyze-orchestrator.js +136 -48
- 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 +40 -5
- 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 +171 -0
- package/dist/nexus/stored-roots.d.ts.map +1 -0
- package/dist/nexus/stored-roots.js +253 -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/lifecycle-ops.d.ts.map +1 -1
- package/dist/orchestrate/lifecycle-ops.js +4 -1
- package/dist/orchestrate/lifecycle-ops.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/plan.d.ts.map +1 -1
- package/dist/orchestrate/plan.js +5 -2
- package/dist/orchestrate/plan.js.map +1 -1
- package/dist/orchestrate/query-ops.d.ts +7 -2
- package/dist/orchestrate/query-ops.d.ts.map +1 -1
- package/dist/orchestrate/query-ops.js +17 -6
- package/dist/orchestrate/query-ops.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 +157 -71
- package/dist/orchestrate/spawn-ops.js.map +1 -1
- package/dist/orchestration/bootstrap.d.ts.map +1 -1
- package/dist/orchestration/bootstrap.js +4 -2
- package/dist/orchestration/bootstrap.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 +4 -2
- package/dist/orchestration/index.d.ts.map +1 -1
- package/dist/orchestration/index.js +6 -4
- package/dist/orchestration/index.js.map +1 -1
- package/dist/orchestration/lead-rollup.d.ts +8 -5
- package/dist/orchestration/lead-rollup.d.ts.map +1 -1
- package/dist/orchestration/lead-rollup.js +32 -15
- package/dist/orchestration/lead-rollup.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/parallel.d.ts.map +1 -1
- package/dist/orchestration/parallel.js +10 -17
- package/dist/orchestration/parallel.js.map +1 -1
- 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 +16 -2
- package/dist/orchestration/spawn-prompt.d.ts.map +1 -1
- package/dist/orchestration/spawn-prompt.js +144 -181
- 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/orchestration/status.d.ts +8 -3
- package/dist/orchestration/status.d.ts.map +1 -1
- package/dist/orchestration/status.js +9 -6
- package/dist/orchestration/status.js.map +1 -1
- package/dist/orchestration/wave-topic.d.ts +54 -0
- package/dist/orchestration/wave-topic.d.ts.map +1 -0
- package/dist/orchestration/wave-topic.js +68 -0
- package/dist/orchestration/wave-topic.js.map +1 -0
- package/dist/orchestration/waves.d.ts +47 -8
- package/dist/orchestration/waves.d.ts.map +1 -1
- package/dist/orchestration/waves.js +152 -43
- package/dist/orchestration/waves.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/phases/index.d.ts.map +1 -1
- package/dist/phases/index.js +6 -2
- package/dist/phases/index.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 +104 -4
- package/dist/project-scope.d.ts.map +1 -1
- package/dist/project-scope.js +263 -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 +233 -0
- package/dist/release/ci-evidence.d.ts.map +1 -0
- package/dist/release/ci-evidence.js +668 -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/github-pr.d.ts +30 -0
- package/dist/release/github-pr.d.ts.map +1 -1
- package/dist/release/github-pr.js +40 -0
- package/dist/release/github-pr.js.map +1 -1
- package/dist/release/plan.d.ts.map +1 -1
- package/dist/release/plan.js +11 -7
- 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 +79 -15
- 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 +20 -3
- package/dist/security/input-sanitization.js.map +1 -1
- package/dist/selfimprove/fix-gen.js +4409 -1810
- 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 +15 -0
- package/dist/session/engine-ops.d.ts.map +1 -1
- package/dist/session/engine-ops.js +146 -22
- 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 +23 -0
- package/dist/sessions/briefing.d.ts.map +1 -1
- package/dist/sessions/briefing.js +59 -9
- 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 +8 -5
- package/dist/sessions/drift-watchdog.js.map +1 -1
- package/dist/sessions/focus-state-store.d.ts +89 -1
- package/dist/sessions/focus-state-store.d.ts.map +1 -1
- package/dist/sessions/focus-state-store.js +97 -1
- package/dist/sessions/focus-state-store.js.map +1 -1
- package/dist/sessions/index.d.ts +2 -2
- package/dist/sessions/index.d.ts.map +1 -1
- package/dist/sessions/index.js +34 -5
- package/dist/sessions/index.js.map +1 -1
- package/dist/sessions/session-drift.d.ts.map +1 -1
- package/dist/sessions/session-drift.js +4 -3
- package/dist/sessions/session-drift.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 +20 -3
- package/dist/skills/discovery.d.ts.map +1 -1
- package/dist/skills/discovery.js +41 -4
- 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/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 +14 -7
- package/dist/skills/orchestrator/startup.js.map +1 -1
- package/dist/skills/prune-bundled.d.ts +267 -0
- package/dist/skills/prune-bundled.d.ts.map +1 -0
- package/dist/skills/prune-bundled.js +536 -0
- package/dist/skills/prune-bundled.js.map +1 -0
- 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 +32 -1
- package/dist/skills/types.d.ts.map +1 -1
- package/dist/skills/types.js +17 -34
- 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 +80 -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/stats/index.d.ts.map +1 -1
- package/dist/stats/index.js +4 -2
- package/dist/stats/index.js.map +1 -1
- 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/skills-db.d.ts +17 -0
- package/dist/store/skills-db.d.ts.map +1 -1
- package/dist/store/skills-db.js +30 -0
- package/dist/store/skills-db.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 +401 -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 +73 -4
- package/dist/store/sqlite-data-accessor.js.map +1 -1
- package/dist/store/sqlite.d.ts +15 -1
- package/dist/store/sqlite.d.ts.map +1 -1
- package/dist/store/sqlite.js +75 -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 +320 -0
- package/dist/store/twin-collapse.d.ts.map +1 -0
- package/dist/store/twin-collapse.js +931 -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 +71 -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 +3 -6
- 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/inject-generate.d.ts.map +1 -1
- package/dist/system/inject-generate.js +4 -4
- package/dist/system/inject-generate.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/task-work/index.d.ts +6 -0
- package/dist/task-work/index.d.ts.map +1 -1
- package/dist/task-work/index.js +6 -3
- package/dist/task-work/index.js.map +1 -1
- 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 +218 -0
- package/dist/tasks/affected-packages.d.ts.map +1 -0
- package/dist/tasks/affected-packages.js +496 -0
- package/dist/tasks/affected-packages.js.map +1 -0
- package/dist/tasks/affected-scope.d.ts +59 -0
- package/dist/tasks/affected-scope.d.ts.map +1 -0
- package/dist/tasks/affected-scope.js +81 -0
- package/dist/tasks/affected-scope.js.map +1 -0
- package/dist/tasks/analyze.d.ts.map +1 -1
- package/dist/tasks/analyze.js +7 -2
- package/dist/tasks/analyze.js.map +1 -1
- package/dist/tasks/change-set.d.ts +175 -0
- package/dist/tasks/change-set.d.ts.map +1 -0
- package/dist/tasks/change-set.js +753 -0
- package/dist/tasks/change-set.js.map +1 -0
- package/dist/tasks/complete.d.ts +10 -0
- package/dist/tasks/complete.d.ts.map +1 -1
- package/dist/tasks/complete.js +59 -5
- package/dist/tasks/complete.js.map +1 -1
- package/dist/tasks/component-pr.d.ts +106 -0
- package/dist/tasks/component-pr.d.ts.map +1 -0
- package/dist/tasks/component-pr.js +190 -0
- package/dist/tasks/component-pr.js.map +1 -0
- package/dist/tasks/done-plan.d.ts +123 -0
- package/dist/tasks/done-plan.d.ts.map +1 -0
- package/dist/tasks/done-plan.js +696 -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 +302 -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 +101 -1
- package/dist/tasks/evidence.d.ts.map +1 -1
- package/dist/tasks/evidence.js +278 -31
- 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/task-next.d.ts +4 -0
- package/dist/tasks/task-next.d.ts.map +1 -1
- package/dist/tasks/task-next.js +32 -28
- package/dist/tasks/task-next.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 +24 -1
- package/dist/validation/engine-ops.d.ts.map +1 -1
- package/dist/validation/engine-ops.js +272 -98
- package/dist/validation/engine-ops.js.map +1 -1
- package/dist/validation/validate-ops.d.ts.map +1 -1
- package/dist/validation/validate-ops.js +9 -3
- package/dist/validation/validate-ops.js.map +1 -1
- package/dist/worktree/worktree-adopt.d.ts.map +1 -1
- package/dist/worktree/worktree-adopt.js +5 -2
- package/dist/worktree/worktree-adopt.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/dist/tasks/evidence.js
CHANGED
|
@@ -29,10 +29,12 @@ import { CleoError } from '../errors.js';
|
|
|
29
29
|
import { describeUnusableEvidenceGitRoot, E_EVIDENCE_GIT_ROOT, findNestedGitWorkTrees, findWorkTreeContainingCommit, gitToplevel, isGitWorkTree, resolveDeclaredEvidenceGitRoot, } from '../git/work-tree.js';
|
|
30
30
|
import { pushWarning } from '../output.js';
|
|
31
31
|
import { getEffectiveHead } from '../worktree/effective-head.js';
|
|
32
|
+
import { loadRecordedProjectRoots, rebaseLegacyEvidencePath } from './evidence-paths.js';
|
|
32
33
|
import { DISABLE_ENV, describeMemoryLimit } from './heavy-tool-limit.js';
|
|
33
34
|
import { computeCommitRevalidationKey, readCommitRevalidationEntry, writeCommitRevalidationEntry, } from './revalidation-cache.js';
|
|
34
35
|
import { resolveSpawnTimeoutMs, runToolCached } from './tool-cache.js';
|
|
35
36
|
import { CANONICAL_TOOLS, listValidToolNames, resolveToolCommand, } from './tool-resolver.js';
|
|
37
|
+
import { detectStaticVacuity, probeTscFileCount, VACUOUS_TOOL_FIX } from './tool-vacuity.js';
|
|
36
38
|
/**
|
|
37
39
|
* Valid tool names recognised by the `tool:<name>` evidence atom.
|
|
38
40
|
*
|
|
@@ -217,7 +219,25 @@ siblingCommitSha, context) {
|
|
|
217
219
|
// db, which is CLEO's own record, not the repository's.
|
|
218
220
|
return validateDecision(parsed.decisionId, roots);
|
|
219
221
|
case 'pr':
|
|
220
|
-
return validatePrAtom(parsed.prNumber, roots, context);
|
|
222
|
+
return validatePrAtom(parsed.prNumber, roots, context, parsed.componentPrNumber);
|
|
223
|
+
case 'ci': {
|
|
224
|
+
// T12634 (D11149): `gh` runs in the repo (executionRoot); the opt-in,
|
|
225
|
+
// required-check list and PR cache are CLEO's own records (storeRoot).
|
|
226
|
+
const { resolveCiEvidenceAtom } = await import('../release/ci-evidence.js');
|
|
227
|
+
const { loadProjectContext } = await import('../agents/variable-substitution.js');
|
|
228
|
+
const ctx = loadProjectContext(roots.storeRoot);
|
|
229
|
+
const result = await resolveCiEvidenceAtom(parsed.prNumber, roots, {
|
|
230
|
+
projectContext: ctx.loaded ? ctx.context : null,
|
|
231
|
+
...(context ? { context } : {}),
|
|
232
|
+
...(parsed.componentPrNumber !== undefined
|
|
233
|
+
? { componentPrNumber: parsed.componentPrNumber }
|
|
234
|
+
: {}),
|
|
235
|
+
...(context?.readOnly ? { readOnly: true } : {}),
|
|
236
|
+
});
|
|
237
|
+
return result.ok
|
|
238
|
+
? { ok: true, atom: result.atom }
|
|
239
|
+
: { ok: false, reason: result.reason, codeName: result.codeName };
|
|
240
|
+
}
|
|
221
241
|
case 'satisfies': {
|
|
222
242
|
// ADR-079-r2: 5-check validator pipeline shipped by T10507.
|
|
223
243
|
// Delegates to the dedicated validator module to keep the dispatch
|
|
@@ -1012,6 +1032,14 @@ async function gitShowFileContent(relPath, taskId, projectRoot) {
|
|
|
1012
1032
|
// Normalise the path: strip leading "./" so git:show works correctly.
|
|
1013
1033
|
const norm = relPath.replace(/^\.\//, '');
|
|
1014
1034
|
// Try task/<taskId> first, then main, then master, then HEAD.
|
|
1035
|
+
//
|
|
1036
|
+
// Ref order is unchanged since T11959 and is identical at verify and at
|
|
1037
|
+
// re-validation. This fallback runs only when the file is absent from disk,
|
|
1038
|
+
// so it answers "does the branch the work was verified on still carry these
|
|
1039
|
+
// bytes?". A tamper committed to main while task/<id> stays pristine is NOT
|
|
1040
|
+
// detected here: that is a change to a different ref, and it surfaces on
|
|
1041
|
+
// disk (checked first) wherever main is checked out. API callers passing a
|
|
1042
|
+
// taskId get this order; `cleo complete` passes none.
|
|
1015
1043
|
const refs = [`task/${taskId}`, 'main', 'master', 'HEAD'];
|
|
1016
1044
|
for (const ref of refs) {
|
|
1017
1045
|
const r = await runCommand('git', ['show', `${ref}:${norm}`], projectRoot);
|
|
@@ -1116,6 +1144,7 @@ async function validateFiles(paths, roots, taskId, commitSha, requireCommitArtif
|
|
|
1116
1144
|
reason: `Cannot inspect ${p} at PR merge ${commitSha}; fetch that commit before recording evidence. Current checkout bytes cannot substitute.`,
|
|
1117
1145
|
};
|
|
1118
1146
|
}
|
|
1147
|
+
let readFromDisk = false;
|
|
1119
1148
|
if (content === null && existsSync(abs)) {
|
|
1120
1149
|
// Happy path — file exists on disk.
|
|
1121
1150
|
const st = await stat(abs);
|
|
@@ -1127,6 +1156,7 @@ async function validateFiles(paths, roots, taskId, commitSha, requireCommitArtif
|
|
|
1127
1156
|
};
|
|
1128
1157
|
}
|
|
1129
1158
|
content = await readFile(abs);
|
|
1159
|
+
readFromDisk = true;
|
|
1130
1160
|
}
|
|
1131
1161
|
if (content === null && taskId) {
|
|
1132
1162
|
// T11959: Git-show fallback for branch-only files (worktree context).
|
|
@@ -1151,10 +1181,51 @@ async function validateFiles(paths, roots, taskId, commitSha, requireCommitArtif
|
|
|
1151
1181
|
};
|
|
1152
1182
|
}
|
|
1153
1183
|
const sha256 = createHash('sha256').update(content).digest('hex');
|
|
1154
|
-
|
|
1184
|
+
// T12476: `path` stays exactly as supplied (consumers match it against
|
|
1185
|
+
// repo-relative PR paths). When the bytes came from disk, the absolute
|
|
1186
|
+
// file that was hashed is recorded too, so re-validation reads THAT file
|
|
1187
|
+
// whatever directory `cleo complete` runs from. `resolvedPath` is a
|
|
1188
|
+
// DEVICE-LOCAL hint (an absolute path on this device) and is never
|
|
1189
|
+
// authoritative across devices; re-validation falls back when it is gone.
|
|
1190
|
+
files.push(readFromDisk ? { path: p, sha256, resolvedPath: abs } : { path: p, sha256 });
|
|
1155
1191
|
}
|
|
1156
1192
|
return { ok: true, atom: { kind: 'files', files } };
|
|
1157
1193
|
}
|
|
1194
|
+
/**
|
|
1195
|
+
* `tool:test-affected` (D11150, T12635): run `testing.affectedCommand` over the
|
|
1196
|
+
* packages the branch diff touches plus their dependents, through the same
|
|
1197
|
+
* ADR-061 cache and heavy-tool caps as `tool:test` (canonical `test`, so the
|
|
1198
|
+
* memory and timeout limits apply). The atom records `scope: 'affected'` and
|
|
1199
|
+
* the packages, so a receipt never passes for a full run.
|
|
1200
|
+
*/
|
|
1201
|
+
async function validateAffectedTests(roots) {
|
|
1202
|
+
const { storeRoot, executionRoot } = roots;
|
|
1203
|
+
const { planAffectedTestRun } = await import('./affected-packages.js');
|
|
1204
|
+
const run = await planAffectedTestRun(storeRoot, executionRoot, { wait: true });
|
|
1205
|
+
if (!run.ok)
|
|
1206
|
+
return { ok: false, codeName: run.codeName, reason: run.reason };
|
|
1207
|
+
const result = await runToolCached(run.command, storeRoot, { executionRoot });
|
|
1208
|
+
if (result.exitCode !== 0) {
|
|
1209
|
+
return {
|
|
1210
|
+
ok: false,
|
|
1211
|
+
codeName: result.timedOut ? 'E_EVIDENCE_TOOL_TIMEOUT' : 'E_EVIDENCE_TOOL_FAILED',
|
|
1212
|
+
reason: `tool:test-affected (${[run.command.cmd, ...run.command.args].join(' ')}) exited ${result.exitCode}: ${(result.stderrTail || result.stdoutTail).trim().slice(-300)}`,
|
|
1213
|
+
};
|
|
1214
|
+
}
|
|
1215
|
+
return {
|
|
1216
|
+
ok: true,
|
|
1217
|
+
atom: {
|
|
1218
|
+
kind: 'tool',
|
|
1219
|
+
tool: 'test-affected',
|
|
1220
|
+
exitCode: 0,
|
|
1221
|
+
stdoutTail: result.stdoutTail,
|
|
1222
|
+
scope: 'affected',
|
|
1223
|
+
affectedPackages: run.packages,
|
|
1224
|
+
affectedProjects: run.projects,
|
|
1225
|
+
...(run.untested.length > 0 ? { untestedPackages: run.untested } : {}),
|
|
1226
|
+
},
|
|
1227
|
+
};
|
|
1228
|
+
}
|
|
1158
1229
|
/**
|
|
1159
1230
|
* Resolve the tree that evidence tools should RUN in, given the CLEO store
|
|
1160
1231
|
* root.
|
|
@@ -1351,7 +1422,11 @@ async function validateTestRun(path, roots) {
|
|
|
1351
1422
|
ok: true,
|
|
1352
1423
|
atom: {
|
|
1353
1424
|
kind: 'test-run',
|
|
1425
|
+
// T12476: `path` exactly as supplied; `resolvedPath` is the report that
|
|
1426
|
+
// was hashed, which re-validation reads regardless of cwd. DEVICE-LOCAL:
|
|
1427
|
+
// an absolute path on this device, never authoritative cross-device.
|
|
1354
1428
|
path,
|
|
1429
|
+
resolvedPath: abs,
|
|
1355
1430
|
sha256,
|
|
1356
1431
|
passCount: passed,
|
|
1357
1432
|
failCount: failed,
|
|
@@ -1360,8 +1435,12 @@ async function validateTestRun(path, roots) {
|
|
|
1360
1435
|
};
|
|
1361
1436
|
}
|
|
1362
1437
|
async function validateTool(tool, roots) {
|
|
1438
|
+
if (tool === 'test-affected')
|
|
1439
|
+
return validateAffectedTests(roots);
|
|
1363
1440
|
const { storeRoot: projectRoot, executionRoot } = roots;
|
|
1364
|
-
|
|
1441
|
+
// T12633: project-context lives in the store; package.json scripts and
|
|
1442
|
+
// tsconfig describe the code under test, so they are read where it runs.
|
|
1443
|
+
const resolution = resolveToolCommand(tool, projectRoot, { executionRoot });
|
|
1365
1444
|
// T12083: the project has no such toolchain. This is a fact about the
|
|
1366
1445
|
// project, not a failure of the work — a plain JavaScript project cannot
|
|
1367
1446
|
// typecheck, and demanding it means no task in that project can ever be
|
|
@@ -1388,6 +1467,18 @@ async function validateTool(tool, roots) {
|
|
|
1388
1467
|
: 'E_EVIDENCE_TOOL_UNAVAILABLE',
|
|
1389
1468
|
};
|
|
1390
1469
|
}
|
|
1470
|
+
// T12633: a checker that provably checks nothing is not evidence. Decided
|
|
1471
|
+
// BEFORE the cache lookup, so a pass cached for the vacuous command (every
|
|
1472
|
+
// `npx tsc --noEmit` against a references-only tsconfig) is never served.
|
|
1473
|
+
const staticVacuity = detectStaticVacuity(resolution.command, executionRoot);
|
|
1474
|
+
if (staticVacuity !== null) {
|
|
1475
|
+
return {
|
|
1476
|
+
ok: false,
|
|
1477
|
+
reason: `Tool "${tool}" → ${resolution.command.cmd} ${resolution.command.args.join(' ')} ` +
|
|
1478
|
+
`(${resolution.command.source}) is VACUOUS: ${staticVacuity} Fix: ${VACUOUS_TOOL_FIX}`,
|
|
1479
|
+
codeName: 'E_EVIDENCE_TOOL_VACUOUS',
|
|
1480
|
+
};
|
|
1481
|
+
}
|
|
1391
1482
|
// gh#1220/#1226/#1230: spawn in — and fingerprint against — the tree the
|
|
1392
1483
|
// operator actually invoked from, not the shared store root. gh#1365: the
|
|
1393
1484
|
// root arrives as a parameter now; it is NOT re-resolved here.
|
|
@@ -1489,6 +1580,17 @@ async function validateTool(tool, roots) {
|
|
|
1489
1580
|
codeName: 'E_EVIDENCE_TOOL_FAILED',
|
|
1490
1581
|
};
|
|
1491
1582
|
}
|
|
1583
|
+
// T12633: exit 0 from a direct `tsc` run is only a pass if it compiled
|
|
1584
|
+
// something. `--listFilesOnly` answers that without re-checking.
|
|
1585
|
+
if (probeTscFileCount(resolution.command, result.executionRoot) === 0) {
|
|
1586
|
+
return {
|
|
1587
|
+
ok: false,
|
|
1588
|
+
reason: `Tool "${tool}" → ${resolution.command.cmd} ${resolution.command.args.join(' ')} ` +
|
|
1589
|
+
`exited 0 but is VACUOUS: \`--listFilesOnly\` reports 0 project files in ` +
|
|
1590
|
+
`${result.executionRoot}, so it checked nothing. Fix: ${VACUOUS_TOOL_FIX}`,
|
|
1591
|
+
codeName: 'E_EVIDENCE_TOOL_VACUOUS',
|
|
1592
|
+
};
|
|
1593
|
+
}
|
|
1492
1594
|
return {
|
|
1493
1595
|
ok: true,
|
|
1494
1596
|
atom: { kind: 'tool', tool, exitCode: 0, stdoutTail: result.stdoutTail },
|
|
@@ -1808,6 +1910,39 @@ async function validateDecision(decisionId, roots) {
|
|
|
1808
1910
|
// ---------------------------------------------------------------------------
|
|
1809
1911
|
// PR atom (T9764)
|
|
1810
1912
|
// ---------------------------------------------------------------------------
|
|
1913
|
+
/**
|
|
1914
|
+
* The task linkage `pr:` provenance requires, shared with `ci:<pr>` (T12634):
|
|
1915
|
+
* the PR's changed-file inventory is complete, and the PR either cites the
|
|
1916
|
+
* task in its title, body or head branch, or its diff intersects the task's
|
|
1917
|
+
* declared files — and when files are declared, the diff MUST intersect them.
|
|
1918
|
+
*
|
|
1919
|
+
* @param prNumber - The PR being linked.
|
|
1920
|
+
* @param pr - The verified PR (title, body, head branch, changed files).
|
|
1921
|
+
* @param context - The task the evidence is being recorded for.
|
|
1922
|
+
* @returns The refusal, or null when the PR is linked to the task.
|
|
1923
|
+
* @task T12634
|
|
1924
|
+
*/
|
|
1925
|
+
export function checkPrTaskLinkage(prNumber, pr, context) {
|
|
1926
|
+
if (pr.changedFileCount !== pr.changedPaths.length || pr.changedPaths.length === 0) {
|
|
1927
|
+
return {
|
|
1928
|
+
ok: false,
|
|
1929
|
+
codeName: 'E_EVIDENCE_INSUFFICIENT',
|
|
1930
|
+
reason: `PR #${prNumber} changed-file coverage is incomplete or empty (${pr.changedPaths.length}/${pr.changedFileCount})${pr.changedFilesError ? ` — ${pr.changedFilesError}` : ''}; inspect the full diff before recording evidence.`,
|
|
1931
|
+
};
|
|
1932
|
+
}
|
|
1933
|
+
const declaredFiles = context.task.files ?? [];
|
|
1934
|
+
const taskMention = new RegExp(`(^|[^A-Za-z0-9])${context.task.id}([^A-Za-z0-9]|$)`);
|
|
1935
|
+
const explicitlyLinked = taskMention.test(`${pr.title}\n${pr.body}\n${pr.headRefName}`);
|
|
1936
|
+
const scopeIntersects = declaredFiles.length > 0 && diffIntersectsAc(pr.changedPaths, declaredFiles);
|
|
1937
|
+
if ((!explicitlyLinked && !scopeIntersects) || (declaredFiles.length > 0 && !scopeIntersects)) {
|
|
1938
|
+
return {
|
|
1939
|
+
ok: false,
|
|
1940
|
+
codeName: 'E_EVIDENCE_CONTENT_MISMATCH',
|
|
1941
|
+
reason: `PR #${prNumber} does not establish a relationship to task ${context.task.id}. Changed artifacts: ${pr.changedPaths.join(', ')}. Declare task files or cite the exact task in the PR; declared scope must intersect the diff.`,
|
|
1942
|
+
};
|
|
1943
|
+
}
|
|
1944
|
+
return null;
|
|
1945
|
+
}
|
|
1811
1946
|
/**
|
|
1812
1947
|
* Validate a `pr:<number>` atom by resolving the PR via the `gh` CLI.
|
|
1813
1948
|
*
|
|
@@ -1821,7 +1956,7 @@ async function validateDecision(decisionId, roots) {
|
|
|
1821
1956
|
*
|
|
1822
1957
|
* @task T9764
|
|
1823
1958
|
*/
|
|
1824
|
-
async function validatePrAtom(prNumber, roots, context) {
|
|
1959
|
+
async function validatePrAtom(prNumber, roots, context, componentPrNumber) {
|
|
1825
1960
|
if (!context) {
|
|
1826
1961
|
return {
|
|
1827
1962
|
ok: false,
|
|
@@ -1848,35 +1983,28 @@ async function validatePrAtom(prNumber, roots, context) {
|
|
|
1848
1983
|
// atom needs BOTH roots, and a swap would be as wrong as the original.
|
|
1849
1984
|
const result = await resolvePrEvidenceAtom(prNumber, roots, {
|
|
1850
1985
|
projectContext: ctx.loaded ? ctx.context : null,
|
|
1986
|
+
...(context.readOnly ? { readOnly: true } : {}),
|
|
1851
1987
|
});
|
|
1852
1988
|
if (!result.ok) {
|
|
1853
1989
|
return { ok: false, reason: result.reason, codeName: result.codeName };
|
|
1854
1990
|
}
|
|
1855
|
-
|
|
1856
|
-
|
|
1857
|
-
|
|
1858
|
-
|
|
1859
|
-
|
|
1860
|
-
|
|
1861
|
-
|
|
1862
|
-
|
|
1863
|
-
|
|
1864
|
-
const
|
|
1865
|
-
const scopeIntersects = declaredFiles.length > 0 && diffIntersectsAc(result.changedPaths, declaredFiles);
|
|
1866
|
-
if ((!explicitlyLinked && !scopeIntersects) || (declaredFiles.length > 0 && !scopeIntersects)) {
|
|
1867
|
-
return {
|
|
1868
|
-
ok: false,
|
|
1869
|
-
codeName: 'E_EVIDENCE_CONTENT_MISMATCH',
|
|
1870
|
-
reason: `PR #${prNumber} does not establish a relationship to task ${context.task.id}. Changed artifacts: ${result.changedPaths.join(', ')}. Declare task files or cite the exact task in the PR; declared scope must intersect the diff.`,
|
|
1871
|
-
};
|
|
1872
|
-
}
|
|
1991
|
+
// T12671: `pr:<component>@<integration>` — the integration PR is the
|
|
1992
|
+
// provenance (merge commit, required workflows); the component PR is the
|
|
1993
|
+
// task's link and its change. Both are verified, both are recorded.
|
|
1994
|
+
const linked = await linkedPrChange(prNumber, result, roots, componentPrNumber);
|
|
1995
|
+
if (!linked.ok)
|
|
1996
|
+
return linked;
|
|
1997
|
+
const unlinked = checkPrTaskLinkage(linked.prNumber, linked.pr, context);
|
|
1998
|
+
if (unlinked)
|
|
1999
|
+
return unlinked;
|
|
2000
|
+
const changedPaths = linked.pr.changedPaths;
|
|
1873
2001
|
if (context.gates.includes('implemented') &&
|
|
1874
2002
|
classifyEvidenceTask(context) === 'code' &&
|
|
1875
|
-
|
|
2003
|
+
changedPaths.every(isDocumentArtifact)) {
|
|
1876
2004
|
return {
|
|
1877
2005
|
ok: false,
|
|
1878
2006
|
codeName: 'E_EVIDENCE_CONTENT_MISMATCH',
|
|
1879
|
-
reason: `PR #${prNumber} changes only documentation and cannot implement code task ${context.task.id}. Changed artifacts: ${
|
|
2007
|
+
reason: `PR #${linked.prNumber} changes only documentation and cannot implement code task ${context.task.id}. Changed artifacts: ${changedPaths.join(', ')}.`,
|
|
1880
2008
|
};
|
|
1881
2009
|
}
|
|
1882
2010
|
return {
|
|
@@ -1888,16 +2016,73 @@ async function validatePrAtom(prNumber, roots, context) {
|
|
|
1888
2016
|
mergedAt: result.mergedAt,
|
|
1889
2017
|
successCount: result.successCount,
|
|
1890
2018
|
totalChecks: result.totalChecks,
|
|
1891
|
-
changedPaths
|
|
2019
|
+
changedPaths,
|
|
1892
2020
|
taskId: context.task.id,
|
|
2021
|
+
...(componentPrNumber !== undefined ? { componentPrNumber } : {}),
|
|
2022
|
+
},
|
|
2023
|
+
};
|
|
2024
|
+
}
|
|
2025
|
+
/**
|
|
2026
|
+
* For `pr:`/`ci:` evidence, the PR a task is linked through (T12671): the PR
|
|
2027
|
+
* itself, or — with a component — the component PR verified as landed by the
|
|
2028
|
+
* integration PR, carrying the component's surviving files only.
|
|
2029
|
+
*
|
|
2030
|
+
* @param prNumber - The (integration) PR the atom names.
|
|
2031
|
+
* @param landing - Its verified resolution.
|
|
2032
|
+
* @param roots - Evidence roots (git runs in the execution root).
|
|
2033
|
+
* @param componentPrNumber - Component PR, when the atom names one.
|
|
2034
|
+
* @param view - Component PR reader (tests inject; defaults to `gh pr view`).
|
|
2035
|
+
* @returns The linkage subject, or the refusal.
|
|
2036
|
+
* @task T12671
|
|
2037
|
+
*/
|
|
2038
|
+
export async function linkedPrChange(prNumber, landing, roots, componentPrNumber, view) {
|
|
2039
|
+
if (componentPrNumber === undefined)
|
|
2040
|
+
return { ok: true, prNumber, pr: landing };
|
|
2041
|
+
const { resolveComponentPr } = await import('./component-pr.js');
|
|
2042
|
+
const c = await resolveComponentPr(componentPrNumber, {
|
|
2043
|
+
prNumber,
|
|
2044
|
+
headRefName: landing.headRefName,
|
|
2045
|
+
headRefOid: landing.headRefOid,
|
|
2046
|
+
mergeCommitSha: landing.mergeCommitSha,
|
|
2047
|
+
}, roots.executionRoot, view);
|
|
2048
|
+
if (!c.ok)
|
|
2049
|
+
return { ok: false, reason: c.reason, codeName: c.codeName };
|
|
2050
|
+
return {
|
|
2051
|
+
ok: true,
|
|
2052
|
+
prNumber: componentPrNumber,
|
|
2053
|
+
pr: {
|
|
2054
|
+
title: c.title,
|
|
2055
|
+
body: c.body,
|
|
2056
|
+
headRefName: c.headRefName,
|
|
2057
|
+
changedPaths: c.files,
|
|
2058
|
+
changedFileCount: c.files.length,
|
|
1893
2059
|
},
|
|
1894
2060
|
};
|
|
1895
2061
|
}
|
|
1896
|
-
|
|
2062
|
+
/**
|
|
2063
|
+
* Whether a path is a documentation artifact (`.md`/`.mdx`/`.rst`/`.adoc`/`.txt`,
|
|
2064
|
+
* README, LICENSE, CHANGELOG) — the rule `pr:` uses to refuse a docs-only PR
|
|
2065
|
+
* as implementation of a code task.
|
|
2066
|
+
*
|
|
2067
|
+
* @param path - Repo-relative path.
|
|
2068
|
+
* @returns True for a documentation artifact.
|
|
2069
|
+
*/
|
|
2070
|
+
export function isDocumentArtifact(path) {
|
|
1897
2071
|
return (/\.(md|mdx|rst|adoc|txt)$/i.test(path) ||
|
|
1898
2072
|
/(?:^|\/)(README|LICENSE|CHANGELOG)(?:\.[^/]*)?$/i.test(path));
|
|
1899
2073
|
}
|
|
1900
|
-
|
|
2074
|
+
/**
|
|
2075
|
+
* Classify a task for evidence purposes: `research` (research/spike kind),
|
|
2076
|
+
* `documentation` (docs-only declared files or a docs label) or `code`.
|
|
2077
|
+
*
|
|
2078
|
+
* Exported so the read-only `cleo done --plan` planner chooses the same
|
|
2079
|
+
* documentary path the validators accept — one classification, not two.
|
|
2080
|
+
*
|
|
2081
|
+
* @param context - Task context; only `task` is read.
|
|
2082
|
+
* @returns The evidence classification.
|
|
2083
|
+
* @task T12624
|
|
2084
|
+
*/
|
|
2085
|
+
export function classifyEvidenceTask(context) {
|
|
1901
2086
|
if (context.task.kind === 'research' || context.task.kind === 'spike')
|
|
1902
2087
|
return 'research';
|
|
1903
2088
|
if (context.task.files?.length && context.task.files.every(isDocumentArtifact))
|
|
@@ -1922,6 +2107,9 @@ function classifyEvidenceTask(context) {
|
|
|
1922
2107
|
*/
|
|
1923
2108
|
export function checkTaskEvidenceContext(context, gate, atoms) {
|
|
1924
2109
|
const filePaths = atoms.flatMap((atom) => atom.kind === 'files' ? atom.files.map((file) => file.path) : []);
|
|
2110
|
+
// T12634: a `ci:` result is bound to the task it was validated for, like `pr:`.
|
|
2111
|
+
if (atoms.some((atom) => atom.kind === 'ci' && atom.taskId !== context.task.id))
|
|
2112
|
+
return 'CI evidence lacks verified task linkage; re-verify with current task context.';
|
|
1925
2113
|
const prAtoms = atoms.filter((atom) => atom.kind === 'pr');
|
|
1926
2114
|
if (prAtoms.length > 1)
|
|
1927
2115
|
return 'Record one PR and its merge-pinned artifacts per verification attempt; multiple merge identities are ambiguous.';
|
|
@@ -1939,7 +2127,9 @@ export function checkTaskEvidenceContext(context, gate, atoms) {
|
|
|
1939
2127
|
return null;
|
|
1940
2128
|
if (classifyEvidenceTask(context) === 'code' &&
|
|
1941
2129
|
(gate === 'testsPassed' || gate === 'qaPassed') &&
|
|
1942
|
-
!atoms.some((atom) => atom.kind === 'test-run' ||
|
|
2130
|
+
!atoms.some((atom) => atom.kind === 'test-run' ||
|
|
2131
|
+
atom.kind === 'ci' ||
|
|
2132
|
+
(atom.kind === 'tool' && !atom.notApplicable))) {
|
|
1943
2133
|
return `Code task ${context.task.id} requires an actual verification result for ${gate}; absence of a toolchain is not a passing result.`;
|
|
1944
2134
|
}
|
|
1945
2135
|
const linked = atoms.filter((atom) => atom.kind === 'satisfies' && atom.targetTaskId === context.task.id);
|
|
@@ -2130,7 +2320,7 @@ export function composeGateEvidence(atoms, capturedBy, override, overrideReason,
|
|
|
2130
2320
|
return atom.kind === 'commit' || atom.kind === 'pr' || atom.kind === 'decision'
|
|
2131
2321
|
? [index]
|
|
2132
2322
|
: [];
|
|
2133
|
-
return atom.kind === 'tool' || atom.kind === 'test-run' ? [index] : [];
|
|
2323
|
+
return atom.kind === 'tool' || atom.kind === 'test-run' || atom.kind === 'ci' ? [index] : [];
|
|
2134
2324
|
});
|
|
2135
2325
|
result.scope = {
|
|
2136
2326
|
taskId: context.task.id,
|
|
@@ -2187,6 +2377,46 @@ export const CRITICAL_GATES_NO_OVERRIDE = Object.freeze([
|
|
|
2187
2377
|
export function isHardAtom(atom) {
|
|
2188
2378
|
return atom.kind !== 'override' && atom.kind !== 'note' && atom.kind !== 'url';
|
|
2189
2379
|
}
|
|
2380
|
+
/**
|
|
2381
|
+
* The on-disk file re-validation should hash for a `files:` / `test-run:`
|
|
2382
|
+
* entry.
|
|
2383
|
+
*
|
|
2384
|
+
* 1. `resolvedPath`, when it still exists. It pins the file attested at verify
|
|
2385
|
+
* time, independent of the completing process's cwd.
|
|
2386
|
+
* 2. The first candidate that is gone (`resolvedPath`, else `mainResolution`),
|
|
2387
|
+
* rebased through a vanished, recorded checkout root of this project.
|
|
2388
|
+
* 3. `mainResolution`: how the atom resolved before T12476. It covers a
|
|
2389
|
+
* verified worktree that was removed after merge.
|
|
2390
|
+
*
|
|
2391
|
+
* This only chooses bytes; the caller's sha256 comparison is the verdict.
|
|
2392
|
+
*
|
|
2393
|
+
* @internal
|
|
2394
|
+
* @task T12476
|
|
2395
|
+
*/
|
|
2396
|
+
async function resolveAttestedPath(resolvedPath, mainResolution, executionRoot, storeRoot) {
|
|
2397
|
+
if (resolvedPath !== undefined && existsSync(resolvedPath))
|
|
2398
|
+
return resolvedPath;
|
|
2399
|
+
const pinned = resolvedPath ?? mainResolution;
|
|
2400
|
+
const rebased = await rebaseForRevalidation(pinned, executionRoot, storeRoot);
|
|
2401
|
+
if (rebased !== null)
|
|
2402
|
+
return rebased;
|
|
2403
|
+
return mainResolution;
|
|
2404
|
+
}
|
|
2405
|
+
/**
|
|
2406
|
+
* Rebase a legacy absolute evidence path whose checkout moved onto the live
|
|
2407
|
+
* root. Returns the absolute rebased path, or `null` when the path is
|
|
2408
|
+
* relative, still exists, or cannot be mapped safely (see
|
|
2409
|
+
* {@link rebaseLegacyEvidencePath} for the guards).
|
|
2410
|
+
*
|
|
2411
|
+
* @internal
|
|
2412
|
+
* @task T12476
|
|
2413
|
+
*/
|
|
2414
|
+
async function rebaseForRevalidation(path, executionRoot, storeRoot) {
|
|
2415
|
+
if (!isAbsolute(path) || existsSync(path))
|
|
2416
|
+
return null;
|
|
2417
|
+
const recordedRoots = await loadRecordedProjectRoots(storeRoot);
|
|
2418
|
+
return rebaseLegacyEvidencePath(path, [executionRoot, storeRoot], recordedRoots);
|
|
2419
|
+
}
|
|
2190
2420
|
/**
|
|
2191
2421
|
* Re-validate stored evidence to detect tampering between verify and complete.
|
|
2192
2422
|
*
|
|
@@ -2318,7 +2548,17 @@ export async function revalidateEvidence(evidence, projectRoot, gate, taskId, op
|
|
|
2318
2548
|
const siblingCommitSha = siblingPr?.mergeCommitSha ?? siblingCommit?.sha;
|
|
2319
2549
|
const executionRoot = resolveEvidenceExecutionRoot(projectRoot, undefined, siblingCommitSha === undefined ? {} : { commitSha: siblingCommitSha });
|
|
2320
2550
|
for (const f of atom.files) {
|
|
2321
|
-
|
|
2551
|
+
// T12476: read the file hashed at verify time, in this order:
|
|
2552
|
+
// 1. `resolvedPath` — pins the attested file regardless of cwd;
|
|
2553
|
+
// 2. that path rebased through a vanished recorded project root;
|
|
2554
|
+
// 3. main's resolution of `path` (execution root). This covers the
|
|
2555
|
+
// ADR-055 lifecycle — verify in a worktree, remove it after
|
|
2556
|
+
// merge, complete from main — where the pinned file is gone but
|
|
2557
|
+
// the merged copy is present.
|
|
2558
|
+
// Every step only chooses which bytes to hash; the sha256 comparison
|
|
2559
|
+
// below decides, so none of them can pass a modified file.
|
|
2560
|
+
const mainResolution = isAbsolute(f.path) ? f.path : resolvePath(executionRoot, f.path);
|
|
2561
|
+
const abs = await resolveAttestedPath(f.resolvedPath, mainResolution, executionRoot, projectRoot);
|
|
2322
2562
|
let content = null;
|
|
2323
2563
|
if (siblingCommitSha) {
|
|
2324
2564
|
content = await gitShowFileContentAtCommit(f.path, siblingCommitSha, executionRoot);
|
|
@@ -2360,7 +2600,10 @@ export async function revalidateEvidence(evidence, projectRoot, gate, taskId, op
|
|
|
2360
2600
|
// Deliberately NOT cached (T12102): same reasoning as files: — the
|
|
2361
2601
|
// content hash comparison IS the staleness guarantee.
|
|
2362
2602
|
const startedAt = Date.now();
|
|
2363
|
-
|
|
2603
|
+
// T12476: same order as `files:` — pinned `resolvedPath`, then a
|
|
2604
|
+
// rebase through a vanished recorded root, then main's store-root
|
|
2605
|
+
// resolution of `path`. The sha256 comparison below decides.
|
|
2606
|
+
const abs = await resolveAttestedPath(atom.resolvedPath, isAbsolute(atom.path) ? atom.path : resolvePath(projectRoot, atom.path), resolveEvidenceExecutionRoot(projectRoot), projectRoot);
|
|
2364
2607
|
if (!existsSync(abs)) {
|
|
2365
2608
|
failed.push({ atom, reason: `test-run file removed since verify: ${atom.path}` });
|
|
2366
2609
|
options?.onProgress?.(`test-run:${atom.path} FAILED ${Date.now() - startedAt}ms`);
|
|
@@ -2394,6 +2637,10 @@ export async function revalidateEvidence(evidence, projectRoot, gate, taskId, op
|
|
|
2394
2637
|
// once accepted/proposed. Re-validation is not performed at complete
|
|
2395
2638
|
// time — the DB row is trusted as captured at verify time.
|
|
2396
2639
|
break;
|
|
2640
|
+
case 'ci':
|
|
2641
|
+
// T12634: check conclusions on a merge commit are immutable once
|
|
2642
|
+
// completed; the atom is trusted as captured, like `pr:`.
|
|
2643
|
+
break;
|
|
2397
2644
|
case 'pr':
|
|
2398
2645
|
// PR atoms capture (prNumber, mergedAt, mergeCommitSha) at verify
|
|
2399
2646
|
// time. A merged PR's mergedAt is immutable, so the atom is trusted
|