@cleocode/core 2026.6.11 → 2026.6.13
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/conduit/local-transport.d.ts +12 -0
- package/dist/conduit/local-transport.d.ts.map +1 -1
- package/dist/conduit/local-transport.js +53 -23
- package/dist/conduit/local-transport.js.map +1 -1
- package/dist/crypto/credentials.d.ts +37 -0
- package/dist/crypto/credentials.d.ts.map +1 -1
- package/dist/crypto/credentials.js +110 -0
- package/dist/crypto/credentials.js.map +1 -1
- package/dist/dispatch/contracts/derive-output-contract.d.ts +86 -0
- package/dist/dispatch/contracts/derive-output-contract.d.ts.map +1 -0
- package/dist/dispatch/contracts/derive-output-contract.js +347 -0
- package/dist/dispatch/contracts/derive-output-contract.js.map +1 -0
- package/dist/dispatch/contracts/ensures-schema.d.ts +77 -0
- package/dist/dispatch/contracts/ensures-schema.d.ts.map +1 -0
- package/dist/dispatch/contracts/ensures-schema.js +91 -0
- package/dist/dispatch/contracts/ensures-schema.js.map +1 -0
- package/dist/dispatch/contracts/output-contracts.d.ts +27 -5
- package/dist/dispatch/contracts/output-contracts.d.ts.map +1 -1
- package/dist/dispatch/contracts/output-contracts.js +29 -6
- package/dist/dispatch/contracts/output-contracts.js.map +1 -1
- package/dist/docs/export-document.js +2309 -1262
- package/dist/docs/export-document.js.map +3 -3
- package/dist/go/driver.d.ts +132 -7
- package/dist/go/driver.d.ts.map +1 -1
- package/dist/go/driver.js +135 -10
- package/dist/go/driver.js.map +1 -1
- package/dist/go/index.d.ts +1 -1
- package/dist/go/index.d.ts.map +1 -1
- package/dist/go/index.js +1 -1
- package/dist/go/index.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -1
- package/dist/internal.d.ts +13 -10
- package/dist/internal.d.ts.map +1 -1
- package/dist/internal.js +11 -11
- package/dist/internal.js.map +1 -1
- package/dist/lifecycle/engine-ops.d.ts.map +1 -1
- package/dist/lifecycle/engine-ops.js +7 -4
- package/dist/lifecycle/engine-ops.js.map +1 -1
- package/dist/lifecycle/ivtr-loop.d.ts +108 -183
- package/dist/lifecycle/ivtr-loop.d.ts.map +1 -1
- package/dist/lifecycle/ivtr-loop.js +207 -522
- package/dist/lifecycle/ivtr-loop.js.map +1 -1
- package/dist/llm/auxiliary-fallback.js +1 -1
- package/dist/llm/auxiliary-fallback.js.map +1 -1
- package/dist/llm/cli-ops.d.ts +14 -1
- package/dist/llm/cli-ops.d.ts.map +1 -1
- package/dist/llm/cli-ops.js +41 -12
- package/dist/llm/cli-ops.js.map +1 -1
- package/dist/llm/concrete-session.d.ts.map +1 -1
- package/dist/llm/concrete-session.js +4 -0
- package/dist/llm/concrete-session.js.map +1 -1
- package/dist/llm/credentials.d.ts +35 -0
- package/dist/llm/credentials.d.ts.map +1 -1
- package/dist/llm/credentials.js +49 -0
- package/dist/llm/credentials.js.map +1 -1
- package/dist/llm/index.d.ts +4 -0
- package/dist/llm/index.d.ts.map +1 -1
- package/dist/llm/index.js +4 -0
- package/dist/llm/index.js.map +1 -1
- package/dist/llm/pi/gondolin-loader.d.ts +241 -0
- package/dist/llm/pi/gondolin-loader.d.ts.map +1 -0
- package/dist/llm/pi/gondolin-loader.js +195 -0
- package/dist/llm/pi/gondolin-loader.js.map +1 -0
- package/dist/llm/pi/index.d.ts +28 -0
- package/dist/llm/pi/index.d.ts.map +1 -0
- package/dist/llm/pi/index.js +27 -0
- package/dist/llm/pi/index.js.map +1 -0
- package/dist/llm/pi/pi-agent-adapter.d.ts +135 -0
- package/dist/llm/pi/pi-agent-adapter.d.ts.map +1 -0
- package/dist/llm/pi/pi-agent-adapter.js +329 -0
- package/dist/llm/pi/pi-agent-adapter.js.map +1 -0
- package/dist/llm/pi/pi-errors.d.ts +161 -0
- package/dist/llm/pi/pi-errors.d.ts.map +1 -0
- package/dist/llm/pi/pi-errors.js +296 -0
- package/dist/llm/pi/pi-errors.js.map +1 -0
- package/dist/llm/pi/pi-execution-env.d.ts +286 -0
- package/dist/llm/pi/pi-execution-env.d.ts.map +1 -0
- package/dist/llm/pi/pi-execution-env.js +406 -0
- package/dist/llm/pi/pi-execution-env.js.map +1 -0
- package/dist/llm/pi/pi-gondolin-env.d.ts +227 -0
- package/dist/llm/pi/pi-gondolin-env.d.ts.map +1 -0
- package/dist/llm/pi/pi-gondolin-env.js +541 -0
- package/dist/llm/pi/pi-gondolin-env.js.map +1 -0
- package/dist/llm/pi/pi-session-storage.d.ts +154 -0
- package/dist/llm/pi/pi-session-storage.d.ts.map +1 -0
- package/dist/llm/pi/pi-session-storage.js +314 -0
- package/dist/llm/pi/pi-session-storage.js.map +1 -0
- package/dist/llm/pi/pi-stream-fn.d.ts +124 -0
- package/dist/llm/pi/pi-stream-fn.d.ts.map +1 -0
- package/dist/llm/pi/pi-stream-fn.js +504 -0
- package/dist/llm/pi/pi-stream-fn.js.map +1 -0
- package/dist/llm/pi/pi-tool-bridge.d.ts +99 -0
- package/dist/llm/pi/pi-tool-bridge.d.ts.map +1 -0
- package/dist/llm/pi/pi-tool-bridge.js +117 -0
- package/dist/llm/pi/pi-tool-bridge.js.map +1 -0
- package/dist/llm/pi/pi-types.d.ts +56 -0
- package/dist/llm/pi/pi-types.d.ts.map +1 -0
- package/dist/llm/pi/pi-types.js +16 -0
- package/dist/llm/pi/pi-types.js.map +1 -0
- package/dist/llm/pi/resolve-execution-env.d.ts +194 -0
- package/dist/llm/pi/resolve-execution-env.d.ts.map +1 -0
- package/dist/llm/pi/resolve-execution-env.js +132 -0
- package/dist/llm/pi/resolve-execution-env.js.map +1 -0
- package/dist/llm/plugin-facade.js +2253 -1151
- package/dist/llm/plugin-facade.js.map +3 -3
- package/dist/llm/role-executor.d.ts.map +1 -1
- package/dist/llm/role-executor.js +8 -5
- package/dist/llm/role-executor.js.map +1 -1
- package/dist/llm/role-resolver.d.ts +46 -14
- package/dist/llm/role-resolver.d.ts.map +1 -1
- package/dist/llm/role-resolver.js +178 -20
- package/dist/llm/role-resolver.js.map +1 -1
- package/dist/llm/sealed-credential.d.ts +125 -0
- package/dist/llm/sealed-credential.d.ts.map +1 -0
- package/dist/llm/sealed-credential.js +133 -0
- package/dist/llm/sealed-credential.js.map +1 -0
- package/dist/llm/session-factory.d.ts.map +1 -1
- package/dist/llm/session-factory.js +6 -2
- package/dist/llm/session-factory.js.map +1 -1
- package/dist/llm/system-key.d.ts +67 -0
- package/dist/llm/system-key.d.ts.map +1 -0
- package/dist/llm/system-key.js +87 -0
- package/dist/llm/system-key.js.map +1 -0
- package/dist/llm/system-of-use-registry.d.ts +119 -0
- package/dist/llm/system-of-use-registry.d.ts.map +1 -0
- package/dist/llm/system-of-use-registry.js +200 -0
- package/dist/llm/system-of-use-registry.js.map +1 -0
- package/dist/llm/system-resolver.d.ts +32 -10
- package/dist/llm/system-resolver.d.ts.map +1 -1
- package/dist/llm/system-resolver.js +70 -18
- package/dist/llm/system-resolver.js.map +1 -1
- package/dist/memory/brain-writer-thread.d.ts.map +1 -1
- package/dist/memory/brain-writer-thread.js +116 -11
- package/dist/memory/brain-writer-thread.js.map +1 -1
- package/dist/memory/claude-mem-migration.d.ts.map +1 -1
- package/dist/memory/claude-mem-migration.js +21 -0
- package/dist/memory/claude-mem-migration.js.map +1 -1
- package/dist/memory/graph-memory-bridge.d.ts.map +1 -1
- package/dist/memory/graph-memory-bridge.js +32 -25
- package/dist/memory/graph-memory-bridge.js.map +1 -1
- package/dist/memory/llm-backend-resolver.js +23 -5
- package/dist/memory/llm-backend-resolver.js.map +1 -1
- package/dist/nexus/migrations/M-split-graph.d.ts.map +1 -1
- package/dist/nexus/migrations/M-split-graph.js +60 -53
- package/dist/nexus/migrations/M-split-graph.js.map +1 -1
- package/dist/orchestrate/pivot.d.ts.map +1 -1
- package/dist/orchestrate/pivot.js +20 -2
- package/dist/orchestrate/pivot.js.map +1 -1
- package/dist/release/engine-ops.js +2 -2
- package/dist/release/engine-ops.js.map +1 -1
- package/dist/release/plan.d.ts +4 -6
- package/dist/release/plan.d.ts.map +1 -1
- package/dist/release/plan.js +10 -23
- package/dist/release/plan.js.map +1 -1
- package/dist/release/reconcile.d.ts +0 -2
- package/dist/release/reconcile.d.ts.map +1 -1
- package/dist/release/reconcile.js +43 -50
- package/dist/release/reconcile.js.map +1 -1
- package/dist/release/release-manifest.d.ts.map +1 -1
- package/dist/release/release-manifest.js +4 -1
- package/dist/release/release-manifest.js.map +1 -1
- package/dist/release/verify-provenance.js +20 -20
- package/dist/release/verify-provenance.js.map +1 -1
- package/dist/routing/capability-matrix.d.ts.map +1 -1
- package/dist/routing/capability-matrix.js +0 -57
- package/dist/routing/capability-matrix.js.map +1 -1
- package/dist/selfimprove/budget.d.ts +206 -0
- package/dist/selfimprove/budget.d.ts.map +1 -0
- package/dist/selfimprove/budget.js +203 -0
- package/dist/selfimprove/budget.js.map +1 -0
- package/dist/selfimprove/dhq-adapter.d.ts +105 -0
- package/dist/selfimprove/dhq-adapter.d.ts.map +1 -0
- package/dist/selfimprove/dhq-adapter.js +95 -0
- package/dist/selfimprove/dhq-adapter.js.map +1 -0
- package/dist/selfimprove/draft-pr.d.ts +129 -0
- package/dist/selfimprove/draft-pr.d.ts.map +1 -0
- package/dist/selfimprove/draft-pr.js +158 -0
- package/dist/selfimprove/draft-pr.js.map +1 -0
- package/dist/selfimprove/envelope-diff.d.ts +162 -0
- package/dist/selfimprove/envelope-diff.d.ts.map +1 -0
- package/dist/selfimprove/envelope-diff.js +321 -0
- package/dist/selfimprove/envelope-diff.js.map +1 -0
- package/dist/selfimprove/replay.d.ts +121 -0
- package/dist/selfimprove/replay.d.ts.map +1 -0
- package/dist/selfimprove/replay.js +109 -0
- package/dist/selfimprove/replay.js.map +1 -0
- package/dist/selfimprove/run-loop.d.ts +148 -0
- package/dist/selfimprove/run-loop.d.ts.map +1 -0
- package/dist/selfimprove/run-loop.js +240 -0
- package/dist/selfimprove/run-loop.js.map +1 -0
- package/dist/selfimprove/scenario.d.ts +145 -0
- package/dist/selfimprove/scenario.d.ts.map +1 -0
- package/dist/selfimprove/scenario.js +243 -0
- package/dist/selfimprove/scenario.js.map +1 -0
- package/dist/sentient/daemon-entry.js +5 -0
- package/dist/sentient/daemon-entry.js.map +1 -1
- package/dist/sentient/daemon.d.ts.map +1 -1
- package/dist/sentient/daemon.js +19 -0
- package/dist/sentient/daemon.js.map +1 -1
- package/dist/sentient/hygiene-scan.d.ts.map +1 -1
- package/dist/sentient/hygiene-scan.js +14 -6
- package/dist/sentient/hygiene-scan.js.map +1 -1
- package/dist/sessions/briefing.d.ts.map +1 -1
- package/dist/sessions/briefing.js +13 -9
- package/dist/sessions/briefing.js.map +1 -1
- package/dist/sessions/connection-session-handle.d.ts +161 -0
- package/dist/sessions/connection-session-handle.d.ts.map +1 -0
- package/dist/sessions/connection-session-handle.js +168 -0
- package/dist/sessions/connection-session-handle.js.map +1 -0
- package/dist/sessions/handoff.d.ts.map +1 -1
- package/dist/sessions/handoff.js +9 -0
- package/dist/sessions/handoff.js.map +1 -1
- package/dist/sessions/index.d.ts +4 -1
- package/dist/sessions/index.d.ts.map +1 -1
- package/dist/sessions/index.js +31 -1
- package/dist/sessions/index.js.map +1 -1
- package/dist/sessions/session-id.d.ts +34 -0
- package/dist/sessions/session-id.d.ts.map +1 -1
- package/dist/sessions/session-id.js +37 -0
- package/dist/sessions/session-id.js.map +1 -1
- package/dist/sessions/session-manifest-mirror.d.ts +115 -0
- package/dist/sessions/session-manifest-mirror.d.ts.map +1 -0
- package/dist/sessions/session-manifest-mirror.js +250 -0
- package/dist/sessions/session-manifest-mirror.js.map +1 -0
- package/dist/sessions/session-switch.d.ts.map +1 -1
- package/dist/sessions/session-switch.js +5 -2
- package/dist/sessions/session-switch.js.map +1 -1
- package/dist/store/converters.d.ts.map +1 -1
- package/dist/store/converters.js +2 -0
- package/dist/store/converters.js.map +1 -1
- package/dist/store/db-helpers.d.ts.map +1 -1
- package/dist/store/db-helpers.js +2 -0
- package/dist/store/db-helpers.js.map +1 -1
- package/dist/store/dual-scope-db.d.ts.map +1 -1
- package/dist/store/dual-scope-db.js +87 -47
- package/dist/store/dual-scope-db.js.map +1 -1
- package/dist/store/pi-session-store.d.ts +151 -0
- package/dist/store/pi-session-store.d.ts.map +1 -0
- package/dist/store/pi-session-store.js +166 -0
- package/dist/store/pi-session-store.js.map +1 -0
- package/dist/store/safety-data-accessor.d.ts +1 -0
- package/dist/store/safety-data-accessor.d.ts.map +1 -1
- package/dist/store/safety-data-accessor.js +5 -0
- package/dist/store/safety-data-accessor.js.map +1 -1
- package/dist/store/schema/cleo-global/accounts.d.ts +357 -0
- package/dist/store/schema/cleo-global/accounts.d.ts.map +1 -0
- package/dist/store/schema/cleo-global/accounts.js +136 -0
- package/dist/store/schema/cleo-global/accounts.js.map +1 -0
- package/dist/store/schema/cleo-global/index.d.ts +2 -0
- package/dist/store/schema/cleo-global/index.d.ts.map +1 -1
- package/dist/store/schema/cleo-global/index.js +2 -0
- package/dist/store/schema/cleo-global/index.js.map +1 -1
- package/dist/store/schema/cleo-global/session-manifest.d.ts +217 -0
- package/dist/store/schema/cleo-global/session-manifest.d.ts.map +1 -0
- package/dist/store/schema/cleo-global/session-manifest.js +99 -0
- package/dist/store/schema/cleo-global/session-manifest.js.map +1 -0
- package/dist/store/schema/cleo-project/tasks-core.d.ts +16 -0
- package/dist/store/schema/cleo-project/tasks-core.d.ts.map +1 -1
- package/dist/store/schema/cleo-project/tasks-core.js +14 -0
- package/dist/store/schema/cleo-project/tasks-core.js.map +1 -1
- package/dist/store/schema/tasks.d.ts +16 -0
- package/dist/store/schema/tasks.d.ts.map +1 -1
- package/dist/store/schema/tasks.js +10 -0
- package/dist/store/schema/tasks.js.map +1 -1
- package/dist/store/selfimprove-dhq-schema.d.ts +284 -0
- package/dist/store/selfimprove-dhq-schema.d.ts.map +1 -0
- package/dist/store/selfimprove-dhq-schema.js +128 -0
- package/dist/store/selfimprove-dhq-schema.js.map +1 -0
- package/dist/store/selfimprove-dhq-store.d.ts +175 -0
- package/dist/store/selfimprove-dhq-store.d.ts.map +1 -0
- package/dist/store/selfimprove-dhq-store.js +182 -0
- package/dist/store/selfimprove-dhq-store.js.map +1 -0
- package/dist/store/session-store.d.ts +52 -13
- package/dist/store/session-store.d.ts.map +1 -1
- package/dist/store/session-store.js +71 -13
- package/dist/store/session-store.js.map +1 -1
- package/dist/store/sqlite-data-accessor.d.ts.map +1 -1
- package/dist/store/sqlite-data-accessor.js +7 -0
- package/dist/store/sqlite-data-accessor.js.map +1 -1
- package/dist/store/tasks-schema.d.ts +4 -0
- package/dist/store/tasks-schema.d.ts.map +1 -1
- package/dist/store/tasks-schema.js +14 -0
- package/dist/store/tasks-schema.js.map +1 -1
- package/dist/store/umbrella-data-accessor.d.ts +1 -0
- package/dist/store/umbrella-data-accessor.d.ts.map +1 -1
- package/dist/store/umbrella-data-accessor.js +5 -0
- package/dist/store/umbrella-data-accessor.js.map +1 -1
- package/dist/store/validation-schemas.d.ts +94 -62
- package/dist/store/validation-schemas.d.ts.map +1 -1
- package/dist/store/writer-lease-schema.d.ts +392 -0
- package/dist/store/writer-lease-schema.d.ts.map +1 -0
- package/dist/store/writer-lease-schema.js +142 -0
- package/dist/store/writer-lease-schema.js.map +1 -0
- package/dist/store/writer-lease.d.ts +368 -0
- package/dist/store/writer-lease.d.ts.map +1 -0
- package/dist/store/writer-lease.js +1002 -0
- package/dist/store/writer-lease.js.map +1 -0
- package/dist/task-tools/describe-schema.d.ts +4 -2
- package/dist/task-tools/describe-schema.d.ts.map +1 -1
- package/dist/task-tools/describe-schema.js +9 -3
- package/dist/task-tools/describe-schema.js.map +1 -1
- package/dist/tasks/backfill-child-projections.d.ts.map +1 -1
- package/dist/tasks/backfill-child-projections.js +14 -9
- package/dist/tasks/backfill-child-projections.js.map +1 -1
- package/dist/tasks/complete.d.ts.map +1 -1
- package/dist/tasks/complete.js +7 -10
- package/dist/tasks/complete.js.map +1 -1
- package/dist/tasks/duplicate-detector.d.ts.map +1 -1
- package/dist/tasks/duplicate-detector.js +14 -7
- package/dist/tasks/duplicate-detector.js.map +1 -1
- package/dist/telemetry/index.d.ts.map +1 -1
- package/dist/telemetry/index.js +10 -4
- package/dist/telemetry/index.js.map +1 -1
- package/dist/tools/agent-registry.d.ts +250 -0
- package/dist/tools/agent-registry.d.ts.map +1 -0
- package/dist/tools/agent-registry.js +292 -0
- package/dist/tools/agent-registry.js.map +1 -0
- package/dist/tools/agent-tool-families.d.ts +107 -0
- package/dist/tools/agent-tool-families.d.ts.map +1 -0
- package/dist/tools/agent-tool-families.js +527 -0
- package/dist/tools/agent-tool-families.js.map +1 -0
- package/dist/tools/browser-driver.d.ts +183 -0
- package/dist/tools/browser-driver.d.ts.map +1 -0
- package/dist/tools/browser-driver.js +242 -0
- package/dist/tools/browser-driver.js.map +1 -0
- package/dist/tools/builtin-agent-tools.d.ts +36 -0
- package/dist/tools/builtin-agent-tools.d.ts.map +1 -0
- package/dist/tools/builtin-agent-tools.js +150 -0
- package/dist/tools/builtin-agent-tools.js.map +1 -0
- package/dist/tools/dispatch.d.ts +370 -0
- package/dist/tools/dispatch.d.ts.map +1 -0
- package/dist/tools/dispatch.js +505 -0
- package/dist/tools/dispatch.js.map +1 -0
- package/dist/tools/env-scrub.d.ts +93 -0
- package/dist/tools/env-scrub.d.ts.map +1 -0
- package/dist/tools/env-scrub.js +176 -0
- package/dist/tools/env-scrub.js.map +1 -0
- package/dist/tools/fs.d.ts +30 -0
- package/dist/tools/fs.d.ts.map +1 -1
- package/dist/tools/fs.js +55 -2
- package/dist/tools/fs.js.map +1 -1
- package/dist/tools/guard.d.ts +15 -0
- package/dist/tools/guard.d.ts.map +1 -1
- package/dist/tools/guard.js +49 -12
- package/dist/tools/guard.js.map +1 -1
- package/dist/tools/index.d.ts +10 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +37 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/pty.d.ts +45 -0
- package/dist/tools/pty.d.ts.map +1 -0
- package/dist/tools/pty.js +166 -0
- package/dist/tools/pty.js.map +1 -0
- package/dist/tools/schema-gen.d.ts +57 -0
- package/dist/tools/schema-gen.d.ts.map +1 -0
- package/dist/tools/schema-gen.js +52 -0
- package/dist/tools/schema-gen.js.map +1 -0
- package/dist/tools/shell.d.ts +12 -0
- package/dist/tools/shell.d.ts.map +1 -1
- package/dist/tools/shell.js +14 -1
- package/dist/tools/shell.js.map +1 -1
- package/dist/tools/web-agent-tools.d.ts +72 -0
- package/dist/tools/web-agent-tools.d.ts.map +1 -0
- package/dist/tools/web-agent-tools.js +393 -0
- package/dist/tools/web-agent-tools.js.map +1 -0
- package/dist/tools/web-search-backends.d.ts +156 -0
- package/dist/tools/web-search-backends.d.ts.map +1 -0
- package/dist/tools/web-search-backends.js +290 -0
- package/dist/tools/web-search-backends.js.map +1 -0
- package/dist/validation/ops.d.ts +1 -15
- package/dist/validation/ops.d.ts.map +1 -1
- package/dist/validation/ops.js +0 -20
- package/dist/validation/ops.js.map +1 -1
- package/migrations/drizzle-cleo-global/20260607000000_t11891-writer-leases/migration.sql +55 -0
- package/migrations/drizzle-cleo-global/20260607010000_t11639-session-manifest/migration.sql +43 -0
- package/migrations/drizzle-cleo-global/20260608000000_t11899-pi-session-tree/migration.sql +52 -0
- package/migrations/drizzle-cleo-global/20260608010000_t11709-accounts-credential-pool/migration.sql +72 -0
- package/migrations/drizzle-cleo-global/20260608020000_t11889-selfimprove-dhq/migration.sql +64 -0
- package/migrations/drizzle-cleo-project/20260606000000_t11884-restore-prefixed-task-triggers/migration.sql +272 -0
- package/migrations/drizzle-cleo-project/20260606000000_t11884-restore-prefixed-task-triggers/revert.sql +29 -0
- package/migrations/drizzle-cleo-project/20260606000100_t11883-tasks-releases-version-unique/migration.sql +21 -0
- package/migrations/drizzle-cleo-project/20260606000100_t11883-tasks-releases-version-unique/revert.sql +4 -0
- package/migrations/drizzle-cleo-project/20260607000000_t11891-writer-leases/migration.sql +55 -0
- package/migrations/drizzle-cleo-project/20260607010000_t11639-session-parent/migration.sql +22 -0
- package/migrations/drizzle-cleo-project/20260608000000_t11899-pi-session-tree/migration.sql +52 -0
- package/migrations/drizzle-cleo-project/20260608020000_t11889-selfimprove-dhq/migration.sql +64 -0
- package/package.json +15 -13
- package/dist/lifecycle/chain-composition.d.ts +0 -30
- package/dist/lifecycle/chain-composition.d.ts.map +0 -1
- package/dist/lifecycle/chain-composition.js +0 -152
- package/dist/lifecycle/chain-composition.js.map +0 -1
- package/dist/lifecycle/chain-store.d.ts +0 -70
- package/dist/lifecycle/chain-store.d.ts.map +0 -1
- package/dist/lifecycle/chain-store.js +0 -246
- package/dist/lifecycle/chain-store.js.map +0 -1
- package/dist/lifecycle/default-chain.d.ts +0 -39
- package/dist/lifecycle/default-chain.d.ts.map +0 -1
- package/dist/lifecycle/default-chain.js +0 -176
- package/dist/lifecycle/default-chain.js.map +0 -1
- package/dist/lifecycle/tessera-engine.d.ts +0 -48
- package/dist/lifecycle/tessera-engine.d.ts.map +0 -1
- package/dist/lifecycle/tessera-engine.js +0 -249
- package/dist/lifecycle/tessera-engine.js.map +0 -1
- package/dist/release/provenance-fk.d.ts +0 -74
- package/dist/release/provenance-fk.d.ts.map +0 -1
- package/dist/release/provenance-fk.js +0 -122
- package/dist/release/provenance-fk.js.map +0 -1
- package/dist/validation/chain-validation.d.ts +0 -43
- package/dist/validation/chain-validation.d.ts.map +0 -1
- package/dist/validation/chain-validation.js +0 -146
- package/dist/validation/chain-validation.js.map +0 -1
|
@@ -1,122 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Post-cutover provenance `task_id` / `epic_id` FK reconciliation (DHQ-051).
|
|
3
|
-
*
|
|
4
|
-
* Shared between `cleo release reconcile` ({@link releaseReconcileV2}) and
|
|
5
|
-
* `cleo release plan` ({@link releasePlan} → `upsertReleasesRow`). Both verbs
|
|
6
|
-
* write provenance rows (`task_commits`, `pr_tasks`, `releases`,
|
|
7
|
-
* `release_changes`) whose `task_id` / `epic_id` foreign keys reference the
|
|
8
|
-
* BARE `tasks` table — which is empty on a consolidated dual-scope `cleo.db`
|
|
9
|
-
* after the T11578 cutover (runtime task data moved to the prefixed
|
|
10
|
-
* `tasks_tasks` table). A row inserted with an `epicId` / `taskId` that exists
|
|
11
|
-
* only in `tasks_tasks` violates the FK at INSERT time, aborting the verb.
|
|
12
|
-
*
|
|
13
|
-
* This module is the single source of truth for the FK-ordered parent backfill
|
|
14
|
-
* that makes those FKs satisfiable. `reconcile.ts` re-exports both symbols so
|
|
15
|
-
* its public surface is unchanged.
|
|
16
|
-
*
|
|
17
|
-
* @task T11659 — reconcile slice (original)
|
|
18
|
-
* @task T11818 — plan/open slice (DRY hoist)
|
|
19
|
-
* @epic T11466
|
|
20
|
-
*/
|
|
21
|
-
import { getLogger } from '../logger.js';
|
|
22
|
-
const log = getLogger('release:provenance-fk');
|
|
23
|
-
/**
|
|
24
|
-
* Make the provenance `task_id` foreign keys satisfiable on a consolidated
|
|
25
|
-
* `cleo.db` by inserting any missing FK-parent rows in FK order (parent-before
|
|
26
|
-
* -child), then returning the set of IDs the FK can resolve.
|
|
27
|
-
*
|
|
28
|
-
* ## Background (DHQ-051 · T11659 / T11818 — same class as DHQ-045)
|
|
29
|
-
*
|
|
30
|
-
* After the dual-scope `cleo.db` cutover (T11578) the runtime task store moved
|
|
31
|
-
* from the bare `tasks` table to the prefixed `tasks_tasks` table. The drizzle
|
|
32
|
-
* `schema.tasks` symbol is shadowed at the barrel (`tasks-schema.ts`) onto
|
|
33
|
-
* `tasks_tasks`, so token-validity probes read the populated prefixed table.
|
|
34
|
-
* BUT the provenance tables (`task_commits`, `pr_tasks`, `releases`,
|
|
35
|
-
* `release_changes`) predate the cutover — their `task_id` / `epic_id` FKs
|
|
36
|
-
* still reference the BARE `tasks` table, which is empty on a consolidated
|
|
37
|
-
* `cleo.db`. A token validated against `tasks_tasks` therefore passes the
|
|
38
|
-
* legacy gate yet violates the FK at INSERT time, aborting the whole verb with
|
|
39
|
-
* `E_PROVENANCE_FAILED` (reconcile) or `E_INTERNAL` (plan).
|
|
40
|
-
*
|
|
41
|
-
* ## Strategy — FK-ordered parent backfill (Strategy 1)
|
|
42
|
-
*
|
|
43
|
-
* For every task referenced by this release we ensure a row exists in the FK
|
|
44
|
-
* parent table BEFORE the child provenance rows are written. The parent table
|
|
45
|
-
* is discovered dynamically via `PRAGMA foreign_key_list('task_commits')` (so
|
|
46
|
-
* the logic tracks whatever the live schema enforces — including a future
|
|
47
|
-
* schema that repoints the FK at `tasks_tasks`, where this becomes a no-op).
|
|
48
|
-
* Missing parent rows are copied from the runtime `tasks_tasks` store via
|
|
49
|
-
* `INSERT OR IGNORE … SELECT` of only the NOT NULL columns, so the copied rows
|
|
50
|
-
* satisfy the parent table's own CHECK/NOT NULL constraints. Tasks that exist
|
|
51
|
-
* in neither table remain unresolvable and are skipped-with-warn / NULLed by
|
|
52
|
-
* the callers (the row, never the whole verb).
|
|
53
|
-
*
|
|
54
|
-
* Idempotent: `INSERT OR IGNORE` never duplicates and never overwrites an
|
|
55
|
-
* existing parent row. Callers run it inside their write transaction so a later
|
|
56
|
-
* failure rolls the shim rows back too.
|
|
57
|
-
*
|
|
58
|
-
* @param nativeDb - The consolidated `cleo.db` native handle.
|
|
59
|
-
* @param referencedIds - Every task id this verb may reference (commit tokens,
|
|
60
|
-
* PR tokens, plan tasks, epic).
|
|
61
|
-
* @returns The FK parent table name + the IDs it can now resolve.
|
|
62
|
-
*/
|
|
63
|
-
export function ensureProvenanceTaskFkParents(nativeDb, referencedIds) {
|
|
64
|
-
// Discover the physical parent table the `task_commits.task_id` FK targets.
|
|
65
|
-
let parentTable = 'tasks';
|
|
66
|
-
try {
|
|
67
|
-
const fks = nativeDb.prepare(`PRAGMA foreign_key_list('task_commits')`).all();
|
|
68
|
-
const taskFk = fks.find((fk) => fk.from === 'task_id');
|
|
69
|
-
if (taskFk?.table)
|
|
70
|
-
parentTable = taskFk.table;
|
|
71
|
-
}
|
|
72
|
-
catch {
|
|
73
|
-
// PRAGMA unavailable (table absent / older sqlite) — keep the bare default.
|
|
74
|
-
}
|
|
75
|
-
const tableExists = (name) => nativeDb.prepare(`SELECT name FROM sqlite_master WHERE type='table' AND name=?`).get(name) !=
|
|
76
|
-
null;
|
|
77
|
-
// Parent table absent entirely → nothing resolvable, nothing to backfill.
|
|
78
|
-
if (!tableExists(parentTable)) {
|
|
79
|
-
return { parentTable: null, resolvableIds: new Set() };
|
|
80
|
-
}
|
|
81
|
-
// FK-ordered shim backfill: copy any referenced task that lives in the
|
|
82
|
-
// runtime `tasks_tasks` store but is missing from the FK parent. Only when
|
|
83
|
-
// the parent is the bare legacy table AND the prefixed store exists (i.e. the
|
|
84
|
-
// post-cutover split-brain) — when the FK already points at `tasks_tasks`
|
|
85
|
-
// this is skipped and the parent is read as-is.
|
|
86
|
-
// Identifiers come from sqlite_master / the FK pragma (verified existing
|
|
87
|
-
// table names), never user input — safe to interpolate (node:sqlite exposes
|
|
88
|
-
// no bound-identifier form). All VALUES are bound parameters.
|
|
89
|
-
if (parentTable !== 'tasks_tasks' && tableExists('tasks_tasks') && referencedIds.size > 0) {
|
|
90
|
-
// `pipeline_stage` is copied alongside the NOT NULL columns so the bare
|
|
91
|
-
// `tasks` table's T877 invariant trigger (status='done' ⇒ pipeline_stage IN
|
|
92
|
-
// ('contribution','cancelled'); status='cancelled' ⇒ pipeline_stage=
|
|
93
|
-
// 'cancelled') is satisfied. A released epic is typically status='done', so
|
|
94
|
-
// omitting `pipeline_stage` would RAISE(ABORT) the shim copy and leave the
|
|
95
|
-
// epic unresolvable (DHQ-051 · T11818).
|
|
96
|
-
const insertShim = nativeDb.prepare(`INSERT OR IGNORE INTO "${parentTable}" (id, title, status, priority, role, scope, pipeline_stage)
|
|
97
|
-
SELECT id, title, status, priority, role, scope, pipeline_stage FROM tasks_tasks WHERE id = ?`);
|
|
98
|
-
for (const id of referencedIds) {
|
|
99
|
-
try {
|
|
100
|
-
insertShim.run(id);
|
|
101
|
-
}
|
|
102
|
-
catch (err) {
|
|
103
|
-
// A single shim copy that violates the parent's own constraints (e.g. a
|
|
104
|
-
// NOT NULL / CHECK the prefixed row does not satisfy) must NOT abort the
|
|
105
|
-
// whole verb. Leave the id unresolvable — the writers below
|
|
106
|
-
// skip-with-warn that one link (Strategy 3). SAVEPOINT-free: the failed
|
|
107
|
-
// statement is rolled back individually by SQLite, leaving the
|
|
108
|
-
// surrounding transaction intact.
|
|
109
|
-
log.warn({ taskId: id, parentTable, err: err instanceof Error ? err.message : String(err) }, 'provenance: FK-parent shim copy failed — task_id stays unresolvable, link will be skipped');
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
// Read back what the FK can now resolve.
|
|
114
|
-
const resolvableIds = new Set();
|
|
115
|
-
const rows = nativeDb.prepare(`SELECT id FROM "${parentTable}"`).all();
|
|
116
|
-
for (const r of rows) {
|
|
117
|
-
if (typeof r.id === 'string')
|
|
118
|
-
resolvableIds.add(r.id);
|
|
119
|
-
}
|
|
120
|
-
return { parentTable, resolvableIds };
|
|
121
|
-
}
|
|
122
|
-
//# sourceMappingURL=provenance-fk.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"provenance-fk.js","sourceRoot":"","sources":["../../src/release/provenance-fk.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAGzC,MAAM,GAAG,GAAG,SAAS,CAAC,uBAAuB,CAAC,CAAC;AAc/C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,MAAM,UAAU,6BAA6B,CAC3C,QAAsB,EACtB,aAAkC;IAElC,4EAA4E;IAC5E,IAAI,WAAW,GAAG,OAAO,CAAC;IAC1B,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,yCAAyC,CAAC,CAAC,GAAG,EAGzE,CAAC;QACH,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;QACvD,IAAI,MAAM,EAAE,KAAK;YAAE,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC;IAChD,CAAC;IAAC,MAAM,CAAC;QACP,4EAA4E;IAC9E,CAAC;IAED,MAAM,WAAW,GAAG,CAAC,IAAY,EAAW,EAAE,CAC5C,QAAQ,CAAC,OAAO,CAAC,8DAA8D,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC;QAC1F,IAAI,CAAC;IAEP,0EAA0E;IAC1E,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,EAAE,CAAC;QAC9B,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,GAAG,EAAU,EAAE,CAAC;IACjE,CAAC;IAED,uEAAuE;IACvE,2EAA2E;IAC3E,8EAA8E;IAC9E,0EAA0E;IAC1E,gDAAgD;IAChD,yEAAyE;IACzE,4EAA4E;IAC5E,8DAA8D;IAC9D,IAAI,WAAW,KAAK,aAAa,IAAI,WAAW,CAAC,aAAa,CAAC,IAAI,aAAa,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;QAC1F,wEAAwE;QACxE,4EAA4E;QAC5E,qEAAqE;QACrE,4EAA4E;QAC5E,2EAA2E;QAC3E,wCAAwC;QACxC,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,CACjC,0BAA0B,WAAW;qGAC0D,CAChG,CAAC;QACF,KAAK,MAAM,EAAE,IAAI,aAAa,EAAE,CAAC;YAC/B,IAAI,CAAC;gBACH,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACrB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,wEAAwE;gBACxE,yEAAyE;gBACzE,4DAA4D;gBAC5D,wEAAwE;gBACxE,+DAA+D;gBAC/D,kCAAkC;gBAClC,GAAG,CAAC,IAAI,CACN,EAAE,MAAM,EAAE,EAAE,EAAE,WAAW,EAAE,GAAG,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EAClF,2FAA2F,CAC5F,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED,yCAAyC;IACzC,MAAM,aAAa,GAAG,IAAI,GAAG,EAAU,CAAC;IACxC,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,mBAAmB,WAAW,GAAG,CAAC,CAAC,GAAG,EAA4B,CAAC;IACjG,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;QACrB,IAAI,OAAO,CAAC,CAAC,EAAE,KAAK,QAAQ;YAAE,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACxD,CAAC;IACD,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,CAAC;AACxC,CAAC"}
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Chain Validation Engine
|
|
3
|
-
*
|
|
4
|
-
* Validates WarpChain definitions for structural correctness (shape)
|
|
5
|
-
* and gate satisfiability (gates reference valid stages/gate names).
|
|
6
|
-
*
|
|
7
|
-
* @task T5401
|
|
8
|
-
*/
|
|
9
|
-
import type { ChainShape, ChainValidation, WarpChain } from '@cleocode/contracts';
|
|
10
|
-
/**
|
|
11
|
-
* Validate the topology/DAG of a chain shape.
|
|
12
|
-
*
|
|
13
|
-
* Checks:
|
|
14
|
-
* - All link source/target IDs reference existing stages
|
|
15
|
-
* - entryPoint references an existing stage
|
|
16
|
-
* - All exitPoints reference existing stages
|
|
17
|
-
* - No cycles (topological sort)
|
|
18
|
-
* - All stages are reachable from the entry point
|
|
19
|
-
*
|
|
20
|
-
* @task T5401
|
|
21
|
-
*/
|
|
22
|
-
export declare function validateChainShape(shape: ChainShape): string[];
|
|
23
|
-
/**
|
|
24
|
-
* Validate that all gates in a chain reference valid stages and gate names.
|
|
25
|
-
*
|
|
26
|
-
* Checks:
|
|
27
|
-
* - Every gate's stageId references an existing stage
|
|
28
|
-
* - Every stage_complete check references an existing stage
|
|
29
|
-
* - Every verification_gate check references a valid GateName
|
|
30
|
-
*
|
|
31
|
-
* @task T5401
|
|
32
|
-
*/
|
|
33
|
-
export declare function validateGateSatisfiability(chain: WarpChain): string[];
|
|
34
|
-
/**
|
|
35
|
-
* Validate a complete WarpChain definition.
|
|
36
|
-
*
|
|
37
|
-
* Orchestrates shape validation and gate satisfiability checks,
|
|
38
|
-
* returning a unified ChainValidation result.
|
|
39
|
-
*
|
|
40
|
-
* @task T5401
|
|
41
|
-
*/
|
|
42
|
-
export declare function validateChain(chain: WarpChain): ChainValidation;
|
|
43
|
-
//# sourceMappingURL=chain-validation.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"chain-validation.d.ts","sourceRoot":"","sources":["../../src/validation/chain-validation.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAGlF;;;;;;;;;;;GAWG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,EAAE,CAmF9D;AAED;;;;;;;;;GASG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,EAAE,CA4BrE;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,SAAS,GAAG,eAAe,CAa/D"}
|
|
@@ -1,146 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Chain Validation Engine
|
|
3
|
-
*
|
|
4
|
-
* Validates WarpChain definitions for structural correctness (shape)
|
|
5
|
-
* and gate satisfiability (gates reference valid stages/gate names).
|
|
6
|
-
*
|
|
7
|
-
* @task T5401
|
|
8
|
-
*/
|
|
9
|
-
import { VERIFICATION_GATE_ORDER } from './verification.js';
|
|
10
|
-
/**
|
|
11
|
-
* Validate the topology/DAG of a chain shape.
|
|
12
|
-
*
|
|
13
|
-
* Checks:
|
|
14
|
-
* - All link source/target IDs reference existing stages
|
|
15
|
-
* - entryPoint references an existing stage
|
|
16
|
-
* - All exitPoints reference existing stages
|
|
17
|
-
* - No cycles (topological sort)
|
|
18
|
-
* - All stages are reachable from the entry point
|
|
19
|
-
*
|
|
20
|
-
* @task T5401
|
|
21
|
-
*/
|
|
22
|
-
export function validateChainShape(shape) {
|
|
23
|
-
const errors = [];
|
|
24
|
-
const stageIds = new Set(shape.stages.map((s) => s.id));
|
|
25
|
-
if (!stageIds.has(shape.entryPoint)) {
|
|
26
|
-
errors.push(`entryPoint "${shape.entryPoint}" does not reference an existing stage`);
|
|
27
|
-
}
|
|
28
|
-
for (const exit of shape.exitPoints) {
|
|
29
|
-
if (!stageIds.has(exit)) {
|
|
30
|
-
errors.push(`exitPoint "${exit}" does not reference an existing stage`);
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
for (const link of shape.links) {
|
|
34
|
-
if (!stageIds.has(link.from)) {
|
|
35
|
-
errors.push(`Link source "${link.from}" does not reference an existing stage`);
|
|
36
|
-
}
|
|
37
|
-
if (!stageIds.has(link.to)) {
|
|
38
|
-
errors.push(`Link target "${link.to}" does not reference an existing stage`);
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
// Cycle detection via topological sort (Kahn's algorithm)
|
|
42
|
-
const inDegree = new Map();
|
|
43
|
-
const adjacency = new Map();
|
|
44
|
-
for (const id of stageIds) {
|
|
45
|
-
inDegree.set(id, 0);
|
|
46
|
-
adjacency.set(id, []);
|
|
47
|
-
}
|
|
48
|
-
for (const link of shape.links) {
|
|
49
|
-
if (stageIds.has(link.from) && stageIds.has(link.to)) {
|
|
50
|
-
adjacency.get(link.from).push(link.to);
|
|
51
|
-
inDegree.set(link.to, (inDegree.get(link.to) ?? 0) + 1);
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
const queue = [];
|
|
55
|
-
for (const [id, deg] of inDegree) {
|
|
56
|
-
if (deg === 0)
|
|
57
|
-
queue.push(id);
|
|
58
|
-
}
|
|
59
|
-
let sorted = 0;
|
|
60
|
-
while (queue.length > 0) {
|
|
61
|
-
const node = queue.shift();
|
|
62
|
-
sorted++;
|
|
63
|
-
for (const neighbor of adjacency.get(node) ?? []) {
|
|
64
|
-
const newDeg = (inDegree.get(neighbor) ?? 1) - 1;
|
|
65
|
-
inDegree.set(neighbor, newDeg);
|
|
66
|
-
if (newDeg === 0)
|
|
67
|
-
queue.push(neighbor);
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
if (sorted < stageIds.size) {
|
|
71
|
-
errors.push('Chain contains a cycle — topological sort could not complete');
|
|
72
|
-
}
|
|
73
|
-
// Reachability from entry point (BFS)
|
|
74
|
-
if (stageIds.has(shape.entryPoint)) {
|
|
75
|
-
const visited = new Set();
|
|
76
|
-
const bfsQueue = [shape.entryPoint];
|
|
77
|
-
visited.add(shape.entryPoint);
|
|
78
|
-
while (bfsQueue.length > 0) {
|
|
79
|
-
const current = bfsQueue.shift();
|
|
80
|
-
for (const neighbor of adjacency.get(current) ?? []) {
|
|
81
|
-
if (!visited.has(neighbor)) {
|
|
82
|
-
visited.add(neighbor);
|
|
83
|
-
bfsQueue.push(neighbor);
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
for (const id of stageIds) {
|
|
88
|
-
if (!visited.has(id)) {
|
|
89
|
-
errors.push(`Stage "${id}" is not reachable from entry point "${shape.entryPoint}"`);
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
return errors;
|
|
94
|
-
}
|
|
95
|
-
/**
|
|
96
|
-
* Validate that all gates in a chain reference valid stages and gate names.
|
|
97
|
-
*
|
|
98
|
-
* Checks:
|
|
99
|
-
* - Every gate's stageId references an existing stage
|
|
100
|
-
* - Every stage_complete check references an existing stage
|
|
101
|
-
* - Every verification_gate check references a valid GateName
|
|
102
|
-
*
|
|
103
|
-
* @task T5401
|
|
104
|
-
*/
|
|
105
|
-
export function validateGateSatisfiability(chain) {
|
|
106
|
-
const errors = [];
|
|
107
|
-
const stageIds = new Set(chain.shape.stages.map((s) => s.id));
|
|
108
|
-
const validGateNames = new Set(VERIFICATION_GATE_ORDER);
|
|
109
|
-
for (const gate of chain.gates) {
|
|
110
|
-
if (!stageIds.has(gate.stageId)) {
|
|
111
|
-
errors.push(`Gate "${gate.id}" references non-existent stage "${gate.stageId}"`);
|
|
112
|
-
}
|
|
113
|
-
if (gate.check.type === 'stage_complete') {
|
|
114
|
-
if (!stageIds.has(gate.check.stageId)) {
|
|
115
|
-
errors.push(`Gate "${gate.id}" stage_complete check references non-existent stage "${gate.check.stageId}"`);
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
if (gate.check.type === 'verification_gate') {
|
|
119
|
-
if (!validGateNames.has(gate.check.gateName)) {
|
|
120
|
-
errors.push(`Gate "${gate.id}" references invalid verification gate name "${gate.check.gateName}"`);
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
return errors;
|
|
125
|
-
}
|
|
126
|
-
/**
|
|
127
|
-
* Validate a complete WarpChain definition.
|
|
128
|
-
*
|
|
129
|
-
* Orchestrates shape validation and gate satisfiability checks,
|
|
130
|
-
* returning a unified ChainValidation result.
|
|
131
|
-
*
|
|
132
|
-
* @task T5401
|
|
133
|
-
*/
|
|
134
|
-
export function validateChain(chain) {
|
|
135
|
-
const shapeErrors = validateChainShape(chain.shape);
|
|
136
|
-
const gateErrors = validateGateSatisfiability(chain);
|
|
137
|
-
const allErrors = [...shapeErrors, ...gateErrors];
|
|
138
|
-
return {
|
|
139
|
-
wellFormed: shapeErrors.length === 0,
|
|
140
|
-
gateSatisfiable: gateErrors.length === 0,
|
|
141
|
-
artifactComplete: true,
|
|
142
|
-
errors: allErrors,
|
|
143
|
-
warnings: [],
|
|
144
|
-
};
|
|
145
|
-
}
|
|
146
|
-
//# sourceMappingURL=chain-validation.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"chain-validation.js","sourceRoot":"","sources":["../../src/validation/chain-validation.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAE5D;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAiB;IAClD,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAExD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;QACpC,MAAM,CAAC,IAAI,CAAC,eAAe,KAAK,CAAC,UAAU,wCAAwC,CAAC,CAAC;IACvF,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;QACpC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACxB,MAAM,CAAC,IAAI,CAAC,cAAc,IAAI,wCAAwC,CAAC,CAAC;QAC1E,CAAC;IACH,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;QAC/B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7B,MAAM,CAAC,IAAI,CAAC,gBAAgB,IAAI,CAAC,IAAI,wCAAwC,CAAC,CAAC;QACjF,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;YAC3B,MAAM,CAAC,IAAI,CAAC,gBAAgB,IAAI,CAAC,EAAE,wCAAwC,CAAC,CAAC;QAC/E,CAAC;IACH,CAAC;IAED,0DAA0D;IAC1D,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC3C,MAAM,SAAS,GAAG,IAAI,GAAG,EAAoB,CAAC;IAE9C,KAAK,MAAM,EAAE,IAAI,QAAQ,EAAE,CAAC;QAC1B,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QACpB,SAAS,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IACxB,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;QAC/B,IAAI,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;YACrD,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACxC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;IAED,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,IAAI,QAAQ,EAAE,CAAC;QACjC,IAAI,GAAG,KAAK,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAChC,CAAC;IAED,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,EAAG,CAAC;QAC5B,MAAM,EAAE,CAAC;QACT,KAAK,MAAM,QAAQ,IAAI,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;YACjD,MAAM,MAAM,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YACjD,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAC/B,IAAI,MAAM,KAAK,CAAC;gBAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;IAED,IAAI,MAAM,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;QAC3B,MAAM,CAAC,IAAI,CAAC,8DAA8D,CAAC,CAAC;IAC9E,CAAC;IAED,sCAAsC;IACtC,IAAI,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;QACnC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;QAClC,MAAM,QAAQ,GAAa,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAC9C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAE9B,OAAO,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3B,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,EAAG,CAAC;YAClC,KAAK,MAAM,QAAQ,IAAI,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;gBACpD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAC3B,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;oBACtB,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAC1B,CAAC;YACH,CAAC;QACH,CAAC;QAED,KAAK,MAAM,EAAE,IAAI,QAAQ,EAAE,CAAC;YAC1B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;gBACrB,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,wCAAwC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC;YACvF,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,0BAA0B,CAAC,KAAgB;IACzD,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9D,MAAM,cAAc,GAAG,IAAI,GAAG,CAAS,uBAA4C,CAAC,CAAC;IAErF,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;QAC/B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YAChC,MAAM,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,EAAE,oCAAoC,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;QACnF,CAAC;QAED,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,gBAAgB,EAAE,CAAC;YACzC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;gBACtC,MAAM,CAAC,IAAI,CACT,SAAS,IAAI,CAAC,EAAE,yDAAyD,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,CAC/F,CAAC;YACJ,CAAC;QACH,CAAC;QAED,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,mBAAmB,EAAE,CAAC;YAC5C,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC7C,MAAM,CAAC,IAAI,CACT,SAAS,IAAI,CAAC,EAAE,gDAAgD,IAAI,CAAC,KAAK,CAAC,QAAkB,GAAG,CACjG,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,aAAa,CAAC,KAAgB;IAC5C,MAAM,WAAW,GAAG,kBAAkB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACpD,MAAM,UAAU,GAAG,0BAA0B,CAAC,KAAK,CAAC,CAAC;IAErD,MAAM,SAAS,GAAG,CAAC,GAAG,WAAW,EAAE,GAAG,UAAU,CAAC,CAAC;IAElD,OAAO;QACL,UAAU,EAAE,WAAW,CAAC,MAAM,KAAK,CAAC;QACpC,eAAe,EAAE,UAAU,CAAC,MAAM,KAAK,CAAC;QACxC,gBAAgB,EAAE,IAAI;QACtB,MAAM,EAAE,SAAS;QACjB,QAAQ,EAAE,EAAE;KACb,CAAC;AACJ,CAAC"}
|