@cleocode/core 2026.9.26 → 2026.10.2
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/build-provenance.json +2 -2
- package/dist/cloud/journal.d.ts +9 -5
- package/dist/cloud/journal.d.ts.map +1 -1
- package/dist/cloud/journal.js +29 -8
- package/dist/cloud/journal.js.map +1 -1
- package/dist/cloud/manifest-check.d.ts +140 -4
- package/dist/cloud/manifest-check.d.ts.map +1 -1
- package/dist/cloud/manifest-check.js +309 -10
- package/dist/cloud/manifest-check.js.map +1 -1
- package/dist/cloud/nexus-attach.d.ts +119 -0
- package/dist/cloud/nexus-attach.d.ts.map +1 -0
- package/dist/cloud/nexus-attach.js +267 -0
- package/dist/cloud/nexus-attach.js.map +1 -0
- package/dist/cloud/nexus-auth.d.ts +15 -3
- package/dist/cloud/nexus-auth.d.ts.map +1 -1
- package/dist/cloud/nexus-auth.js +90 -6
- package/dist/cloud/nexus-auth.js.map +1 -1
- package/dist/cloud/nexus-cloud-activity.d.ts +37 -0
- package/dist/cloud/nexus-cloud-activity.d.ts.map +1 -0
- package/dist/cloud/nexus-cloud-activity.js +79 -0
- package/dist/cloud/nexus-cloud-activity.js.map +1 -0
- package/dist/cloud/nexus-cloud-status.d.ts +132 -0
- package/dist/cloud/nexus-cloud-status.d.ts.map +1 -0
- package/dist/cloud/nexus-cloud-status.js +476 -0
- package/dist/cloud/nexus-cloud-status.js.map +1 -0
- package/dist/cloud/nexus-cloud.d.ts +179 -0
- package/dist/cloud/nexus-cloud.d.ts.map +1 -0
- package/dist/cloud/nexus-cloud.js +296 -0
- package/dist/cloud/nexus-cloud.js.map +1 -0
- package/dist/cloud/nexus-device.d.ts +32 -7
- package/dist/cloud/nexus-device.d.ts.map +1 -1
- package/dist/cloud/nexus-device.js +54 -7
- package/dist/cloud/nexus-device.js.map +1 -1
- package/dist/cloud/nexus-enrol.d.ts +35 -4
- package/dist/cloud/nexus-enrol.d.ts.map +1 -1
- package/dist/cloud/nexus-enrol.js +192 -47
- package/dist/cloud/nexus-enrol.js.map +1 -1
- package/dist/cloud/nexus-home.d.ts +74 -0
- package/dist/cloud/nexus-home.d.ts.map +1 -0
- package/dist/cloud/nexus-home.js +97 -0
- package/dist/cloud/nexus-home.js.map +1 -0
- package/dist/cloud/nexus-link.d.ts +8 -1
- package/dist/cloud/nexus-link.d.ts.map +1 -1
- package/dist/cloud/nexus-link.js +138 -11
- package/dist/cloud/nexus-link.js.map +1 -1
- package/dist/cloud/nexus-logout.d.ts +114 -0
- package/dist/cloud/nexus-logout.d.ts.map +1 -0
- package/dist/cloud/nexus-logout.js +429 -0
- package/dist/cloud/nexus-logout.js.map +1 -0
- package/dist/cloud/nexus-vault-keys.d.ts +129 -0
- package/dist/cloud/nexus-vault-keys.d.ts.map +1 -0
- package/dist/cloud/nexus-vault-keys.js +277 -0
- package/dist/cloud/nexus-vault-keys.js.map +1 -0
- package/dist/cloud/nexus-vault-state.d.ts +121 -0
- package/dist/cloud/nexus-vault-state.d.ts.map +1 -0
- package/dist/cloud/nexus-vault-state.js +274 -0
- package/dist/cloud/nexus-vault-state.js.map +1 -0
- package/dist/cloud/nexus-vault.d.ts +160 -0
- package/dist/cloud/nexus-vault.d.ts.map +1 -0
- package/dist/cloud/nexus-vault.js +1733 -0
- package/dist/cloud/nexus-vault.js.map +1 -0
- package/dist/cloud/signing.d.ts +24 -8
- package/dist/cloud/signing.d.ts.map +1 -1
- package/dist/cloud/signing.js +61 -15
- package/dist/cloud/signing.js.map +1 -1
- package/dist/docs/export-document.js +8341 -3317
- package/dist/docs/export-document.js.map +3 -3
- package/dist/doctor/migrations.d.ts +75 -0
- package/dist/doctor/migrations.d.ts.map +1 -0
- package/dist/doctor/migrations.js +136 -0
- package/dist/doctor/migrations.js.map +1 -0
- package/dist/doctor/sync-sealer.d.ts +48 -0
- package/dist/doctor/sync-sealer.d.ts.map +1 -0
- package/dist/doctor/sync-sealer.js +109 -0
- package/dist/doctor/sync-sealer.js.map +1 -0
- package/dist/doctor/sync-triggers.d.ts +53 -0
- package/dist/doctor/sync-triggers.d.ts.map +1 -0
- package/dist/doctor/sync-triggers.js +157 -0
- package/dist/doctor/sync-triggers.js.map +1 -0
- package/dist/init.d.ts.map +1 -1
- package/dist/init.js +5 -1
- package/dist/init.js.map +1 -1
- package/dist/internal.d.ts +1 -1
- package/dist/internal.d.ts.map +1 -1
- package/dist/internal.js +1 -1
- package/dist/internal.js.map +1 -1
- package/dist/llm/plugin-facade.js +8668 -3644
- package/dist/llm/plugin-facade.js.map +3 -3
- package/dist/nexus/projects-clean.d.ts +3 -0
- package/dist/nexus/projects-clean.d.ts.map +1 -1
- package/dist/nexus/projects-clean.js +9 -3
- package/dist/nexus/projects-clean.js.map +1 -1
- package/dist/nexus/registry-roots.d.ts +3 -1
- package/dist/nexus/registry-roots.d.ts.map +1 -1
- package/dist/nexus/registry-roots.js +5 -2
- package/dist/nexus/registry-roots.js.map +1 -1
- package/dist/nexus/registry.d.ts +8 -1
- package/dist/nexus/registry.d.ts.map +1 -1
- package/dist/nexus/registry.js +24 -10
- package/dist/nexus/registry.js.map +1 -1
- package/dist/nexus/workspace.d.ts +4 -1
- package/dist/nexus/workspace.d.ts.map +1 -1
- package/dist/nexus/workspace.js +10 -4
- package/dist/nexus/workspace.js.map +1 -1
- package/dist/orchestrate/spawn-ops.d.ts.map +1 -1
- package/dist/orchestrate/spawn-ops.js +7 -2
- package/dist/orchestrate/spawn-ops.js.map +1 -1
- package/dist/orchestrate/worker-verify.d.ts +121 -12
- package/dist/orchestrate/worker-verify.d.ts.map +1 -1
- package/dist/orchestrate/worker-verify.js +172 -21
- package/dist/orchestrate/worker-verify.js.map +1 -1
- package/dist/orchestration/spawn-prompt.d.ts.map +1 -1
- package/dist/orchestration/spawn-prompt.js +15 -9
- package/dist/orchestration/spawn-prompt.js.map +1 -1
- package/dist/release/ci-evidence.d.ts +9 -0
- package/dist/release/ci-evidence.d.ts.map +1 -1
- package/dist/release/ci-evidence.js +9 -2
- package/dist/release/ci-evidence.js.map +1 -1
- package/dist/resources/backend.d.ts +15 -3
- package/dist/resources/backend.d.ts.map +1 -1
- package/dist/resources/backend.js +7 -3
- package/dist/resources/backend.js.map +1 -1
- package/dist/resources/darwin-backend.d.ts +142 -0
- package/dist/resources/darwin-backend.d.ts.map +1 -0
- package/dist/resources/darwin-backend.js +288 -0
- package/dist/resources/darwin-backend.js.map +1 -0
- package/dist/resources/governor.d.ts +44 -1
- package/dist/resources/governor.d.ts.map +1 -1
- package/dist/resources/governor.js +100 -36
- package/dist/resources/governor.js.map +1 -1
- package/dist/resources/heavy-command.d.ts +132 -0
- package/dist/resources/heavy-command.d.ts.map +1 -0
- package/dist/resources/heavy-command.js +768 -0
- package/dist/resources/heavy-command.js.map +1 -0
- package/dist/resources/monitor.d.ts +50 -1
- package/dist/resources/monitor.d.ts.map +1 -1
- package/dist/resources/monitor.js +83 -1
- package/dist/resources/monitor.js.map +1 -1
- package/dist/resources/run-admission.d.ts +303 -0
- package/dist/resources/run-admission.d.ts.map +1 -0
- package/dist/resources/run-admission.js +648 -0
- package/dist/resources/run-admission.js.map +1 -0
- package/dist/resources/run-class.d.ts +111 -0
- package/dist/resources/run-class.d.ts.map +1 -0
- package/dist/resources/run-class.js +658 -0
- package/dist/resources/run-class.js.map +1 -0
- package/dist/resources/run-governed.d.ts +158 -0
- package/dist/resources/run-governed.d.ts.map +1 -0
- package/dist/resources/run-governed.js +406 -0
- package/dist/resources/run-governed.js.map +1 -0
- package/dist/resources/slot-holder.d.ts +267 -0
- package/dist/resources/slot-holder.d.ts.map +1 -0
- package/dist/resources/slot-holder.js +505 -0
- package/dist/resources/slot-holder.js.map +1 -0
- package/dist/resources/tool-groups.d.ts +74 -0
- package/dist/resources/tool-groups.d.ts.map +1 -0
- package/dist/resources/tool-groups.js +118 -0
- package/dist/resources/tool-groups.js.map +1 -0
- 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/selfimprove/fix-gen.js +8676 -3652
- package/dist/selfimprove/fix-gen.js.map +3 -3
- package/dist/sentient/cross-project-hygiene.d.ts +3 -2
- package/dist/sentient/cross-project-hygiene.d.ts.map +1 -1
- package/dist/sentient/cross-project-hygiene.js +5 -2
- package/dist/sentient/cross-project-hygiene.js.map +1 -1
- package/dist/sentient/state.d.ts +7 -0
- package/dist/sentient/state.d.ts.map +1 -1
- package/dist/sentient/state.js.map +1 -1
- package/dist/sentient/tick.d.ts +14 -2
- package/dist/sentient/tick.d.ts.map +1 -1
- package/dist/sentient/tick.js +63 -4
- package/dist/sentient/tick.js.map +1 -1
- package/dist/setup/sections/nexus-account.d.ts +8 -6
- package/dist/setup/sections/nexus-account.d.ts.map +1 -1
- package/dist/setup/sections/nexus-account.js +53 -9
- package/dist/setup/sections/nexus-account.js.map +1 -1
- package/dist/store/backup-recover.d.ts.map +1 -1
- package/dist/store/backup-recover.js +5 -0
- package/dist/store/backup-recover.js.map +1 -1
- package/dist/store/data-accessor.d.ts +1 -0
- package/dist/store/data-accessor.d.ts.map +1 -1
- package/dist/store/data-accessor.js +7 -0
- package/dist/store/data-accessor.js.map +1 -1
- package/dist/store/dual-scope-db.d.ts +23 -1
- package/dist/store/dual-scope-db.d.ts.map +1 -1
- package/dist/store/dual-scope-db.js +126 -36
- package/dist/store/dual-scope-db.js.map +1 -1
- package/dist/store/exodus/recovery.d.ts.map +1 -1
- package/dist/store/exodus/recovery.js +15 -0
- package/dist/store/exodus/recovery.js.map +1 -1
- package/dist/store/legacy-tasks-lineage.d.ts.map +1 -1
- package/dist/store/legacy-tasks-lineage.js +5 -0
- package/dist/store/legacy-tasks-lineage.js.map +1 -1
- package/dist/store/lock.d.ts +8 -1
- package/dist/store/lock.d.ts.map +1 -1
- package/dist/store/lock.js +10 -2
- package/dist/store/lock.js.map +1 -1
- package/dist/store/migration-manager.d.ts +5 -0
- package/dist/store/migration-manager.d.ts.map +1 -1
- package/dist/store/migration-manager.js +11 -0
- package/dist/store/migration-manager.js.map +1 -1
- package/dist/store/migration-runner.d.ts +158 -0
- package/dist/store/migration-runner.d.ts.map +1 -0
- package/dist/store/migration-runner.js +493 -0
- package/dist/store/migration-runner.js.map +1 -0
- package/dist/store/portable-bundle-import.d.ts +15 -1
- package/dist/store/portable-bundle-import.d.ts.map +1 -1
- package/dist/store/portable-bundle-import.js +24 -4
- package/dist/store/portable-bundle-import.js.map +1 -1
- package/dist/store/portable-bundle-relocate.d.ts +43 -0
- package/dist/store/portable-bundle-relocate.d.ts.map +1 -1
- package/dist/store/portable-bundle-relocate.js +79 -5
- package/dist/store/portable-bundle-relocate.js.map +1 -1
- package/dist/store/portable-bundle-scan.d.ts +20 -0
- package/dist/store/portable-bundle-scan.d.ts.map +1 -1
- package/dist/store/portable-bundle-scan.js +38 -3
- package/dist/store/portable-bundle-scan.js.map +1 -1
- package/dist/store/portable-bundle.d.ts +33 -0
- package/dist/store/portable-bundle.d.ts.map +1 -1
- package/dist/store/portable-bundle.js +34 -7
- package/dist/store/portable-bundle.js.map +1 -1
- package/dist/store/row-identity-registry.d.ts +137 -7
- package/dist/store/row-identity-registry.d.ts.map +1 -1
- package/dist/store/row-identity-registry.js +364 -9
- package/dist/store/row-identity-registry.js.map +1 -1
- package/dist/store/row-identity.d.ts.map +1 -1
- package/dist/store/row-identity.js +9 -10
- package/dist/store/row-identity.js.map +1 -1
- package/dist/store/sqlite-data-accessor.d.ts.map +1 -1
- package/dist/store/sqlite-data-accessor.js +10 -0
- package/dist/store/sqlite-data-accessor.js.map +1 -1
- package/dist/store/sqlite.d.ts +31 -0
- package/dist/store/sqlite.d.ts.map +1 -1
- package/dist/store/sqlite.js +5 -1
- package/dist/store/sqlite.js.map +1 -1
- package/dist/store/sync/capture.d.ts +203 -0
- package/dist/store/sync/capture.d.ts.map +1 -0
- package/dist/store/sync/capture.js +562 -0
- package/dist/store/sync/capture.js.map +1 -0
- package/dist/store/sync/clock-store.d.ts.map +1 -1
- package/dist/store/sync/clock-store.js +2 -0
- package/dist/store/sync/clock-store.js.map +1 -1
- package/dist/store/sync/fk-orphans.d.ts +133 -0
- package/dist/store/sync/fk-orphans.d.ts.map +1 -0
- package/dist/store/sync/fk-orphans.js +265 -0
- package/dist/store/sync/fk-orphans.js.map +1 -0
- package/dist/store/sync/flags.d.ts +7 -0
- package/dist/store/sync/flags.d.ts.map +1 -1
- package/dist/store/sync/flags.js +16 -0
- package/dist/store/sync/flags.js.map +1 -1
- package/dist/store/sync/hlc.d.ts.map +1 -1
- package/dist/store/sync/hlc.js +4 -0
- package/dist/store/sync/hlc.js.map +1 -1
- package/dist/store/sync/identity-fill.d.ts +45 -0
- package/dist/store/sync/identity-fill.d.ts.map +1 -0
- package/dist/store/sync/identity-fill.js +85 -0
- package/dist/store/sync/identity-fill.js.map +1 -0
- package/dist/store/sync/machinery.d.ts +27 -0
- package/dist/store/sync/machinery.d.ts.map +1 -0
- package/dist/store/sync/machinery.js +44 -0
- package/dist/store/sync/machinery.js.map +1 -0
- package/dist/store/sync/netting.d.ts +120 -0
- package/dist/store/sync/netting.d.ts.map +1 -0
- package/dist/store/sync/netting.js +336 -0
- package/dist/store/sync/netting.js.map +1 -0
- package/dist/store/sync/replica.d.ts +59 -3
- package/dist/store/sync/replica.d.ts.map +1 -1
- package/dist/store/sync/replica.js +84 -3
- package/dist/store/sync/replica.js.map +1 -1
- package/dist/store/sync/schema.d.ts +18 -3
- package/dist/store/sync/schema.d.ts.map +1 -1
- package/dist/store/sync/schema.js +27 -3
- package/dist/store/sync/schema.js.map +1 -1
- package/dist/store/sync/seal-backlog.d.ts +21 -0
- package/dist/store/sync/seal-backlog.d.ts.map +1 -0
- package/dist/store/sync/seal-backlog.js +24 -0
- package/dist/store/sync/seal-backlog.js.map +1 -0
- package/dist/store/sync/sealer-values.d.ts +34 -0
- package/dist/store/sync/sealer-values.d.ts.map +1 -0
- package/dist/store/sync/sealer-values.js +53 -0
- package/dist/store/sync/sealer-values.js.map +1 -0
- package/dist/store/sync/sealer.d.ts +145 -0
- package/dist/store/sync/sealer.d.ts.map +1 -0
- package/dist/store/sync/sealer.js +906 -0
- package/dist/store/sync/sealer.js.map +1 -0
- package/dist/store/sync/structural.d.ts +63 -0
- package/dist/store/sync/structural.d.ts.map +1 -0
- package/dist/store/sync/structural.js +180 -0
- package/dist/store/sync/structural.js.map +1 -0
- package/dist/store/sync/timestamps.d.ts +92 -0
- package/dist/store/sync/timestamps.d.ts.map +1 -0
- package/dist/store/sync/timestamps.js +228 -0
- package/dist/store/sync/timestamps.js.map +1 -0
- package/dist/store/sync/tombstones.d.ts +75 -0
- package/dist/store/sync/tombstones.d.ts.map +1 -0
- package/dist/store/sync/tombstones.js +103 -0
- package/dist/store/sync/tombstones.js.map +1 -0
- package/dist/store/sync/trigger-classes.d.ts +221 -0
- package/dist/store/sync/trigger-classes.d.ts.map +1 -0
- package/dist/store/sync/trigger-classes.js +441 -0
- package/dist/store/sync/trigger-classes.js.map +1 -0
- package/dist/store/sync/trigger-suspend-at-path.d.ts +23 -0
- package/dist/store/sync/trigger-suspend-at-path.d.ts.map +1 -0
- package/dist/store/sync/trigger-suspend-at-path.js +44 -0
- package/dist/store/sync/trigger-suspend-at-path.js.map +1 -0
- package/dist/store/sync/writer-version.d.ts +43 -0
- package/dist/store/sync/writer-version.d.ts.map +1 -0
- package/dist/store/sync/writer-version.js +90 -0
- package/dist/store/sync/writer-version.js.map +1 -0
- package/dist/store/table-classification.d.ts.map +1 -1
- package/dist/store/table-classification.js +102 -0
- package/dist/store/table-classification.js.map +1 -1
- package/dist/store/trigger-suspend-schema.d.ts +44 -0
- package/dist/store/trigger-suspend-schema.d.ts.map +1 -0
- package/dist/store/trigger-suspend-schema.js +25 -0
- package/dist/store/trigger-suspend-schema.js.map +1 -0
- package/dist/store/vault-manifest.d.ts +365 -0
- package/dist/store/vault-manifest.d.ts.map +1 -0
- package/dist/store/vault-manifest.js +812 -0
- package/dist/store/vault-manifest.js.map +1 -0
- package/dist/store/writer-lease.d.ts +31 -0
- package/dist/store/writer-lease.d.ts.map +1 -1
- package/dist/store/writer-lease.js +65 -2
- package/dist/store/writer-lease.js.map +1 -1
- package/dist/system/health.d.ts.map +1 -1
- package/dist/system/health.js +21 -0
- package/dist/system/health.js.map +1 -1
- package/dist/system/project-health.d.ts.map +1 -1
- package/dist/system/project-health.js +3 -1
- package/dist/system/project-health.js.map +1 -1
- package/dist/tasks/affected-packages.d.ts +58 -0
- package/dist/tasks/affected-packages.d.ts.map +1 -1
- package/dist/tasks/affected-packages.js +75 -6
- package/dist/tasks/affected-packages.js.map +1 -1
- package/dist/tasks/affected-scope.d.ts +150 -23
- package/dist/tasks/affected-scope.d.ts.map +1 -1
- package/dist/tasks/affected-scope.js +320 -32
- package/dist/tasks/affected-scope.js.map +1 -1
- package/dist/tasks/change-set.d.ts +96 -0
- package/dist/tasks/change-set.d.ts.map +1 -1
- package/dist/tasks/change-set.js +169 -4
- package/dist/tasks/change-set.js.map +1 -1
- package/dist/tasks/complete-ci.d.ts +115 -0
- package/dist/tasks/complete-ci.d.ts.map +1 -0
- package/dist/tasks/complete-ci.js +171 -0
- package/dist/tasks/complete-ci.js.map +1 -0
- package/dist/tasks/complete.d.ts.map +1 -1
- package/dist/tasks/complete.js +50 -17
- package/dist/tasks/complete.js.map +1 -1
- package/dist/tasks/compute-task-view.d.ts.map +1 -1
- package/dist/tasks/compute-task-view.js +7 -0
- package/dist/tasks/compute-task-view.js.map +1 -1
- package/dist/tasks/done-plan.d.ts.map +1 -1
- package/dist/tasks/done-plan.js +51 -30
- package/dist/tasks/done-plan.js.map +1 -1
- package/dist/tasks/done-record.d.ts +6 -0
- package/dist/tasks/done-record.d.ts.map +1 -1
- package/dist/tasks/done-record.js +9 -3
- package/dist/tasks/done-record.js.map +1 -1
- package/dist/tasks/evidence.d.ts +3 -2
- package/dist/tasks/evidence.d.ts.map +1 -1
- package/dist/tasks/evidence.js +143 -12
- package/dist/tasks/evidence.js.map +1 -1
- package/dist/tasks/gate-notes.d.ts +22 -0
- package/dist/tasks/gate-notes.d.ts.map +1 -0
- package/dist/tasks/gate-notes.js +33 -0
- package/dist/tasks/gate-notes.js.map +1 -0
- package/dist/tasks/index.d.ts +2 -1
- package/dist/tasks/index.d.ts.map +1 -1
- package/dist/tasks/index.js +2 -1
- package/dist/tasks/index.js.map +1 -1
- package/dist/tasks/test-run-binding.d.ts +117 -0
- package/dist/tasks/test-run-binding.d.ts.map +1 -0
- package/dist/tasks/test-run-binding.js +365 -0
- package/dist/tasks/test-run-binding.js.map +1 -0
- package/dist/tasks/tool-cache-env.d.ts +123 -0
- package/dist/tasks/tool-cache-env.d.ts.map +1 -0
- package/dist/tasks/tool-cache-env.js +287 -0
- package/dist/tasks/tool-cache-env.js.map +1 -0
- package/dist/tasks/tool-cache-failed-first.d.ts +155 -0
- package/dist/tasks/tool-cache-failed-first.d.ts.map +1 -0
- package/dist/tasks/tool-cache-failed-first.js +285 -0
- package/dist/tasks/tool-cache-failed-first.js.map +1 -0
- package/dist/tasks/tool-cache.d.ts +375 -55
- package/dist/tasks/tool-cache.d.ts.map +1 -1
- package/dist/tasks/tool-cache.js +912 -303
- package/dist/tasks/tool-cache.js.map +1 -1
- package/dist/tasks/tool-resolver.d.ts +4 -3
- package/dist/tasks/tool-resolver.d.ts.map +1 -1
- package/dist/tasks/tool-resolver.js +15 -4
- package/dist/tasks/tool-resolver.js.map +1 -1
- package/dist/tasks/tool-semaphore.d.ts +67 -7
- package/dist/tasks/tool-semaphore.d.ts.map +1 -1
- package/dist/tasks/tool-semaphore.js +134 -56
- package/dist/tasks/tool-semaphore.js.map +1 -1
- package/dist/upgrade.d.ts.map +1 -1
- package/dist/upgrade.js +4 -0
- package/dist/upgrade.js.map +1 -1
- package/dist/validation/engine-ops.d.ts +6 -0
- package/dist/validation/engine-ops.d.ts.map +1 -1
- package/dist/validation/engine-ops.js +8 -0
- package/dist/validation/engine-ops.js.map +1 -1
- package/migrations/drizzle-cleo-project/20260930170000_t12819-trigger-suspend-clause/migration.sql +367 -0
- package/migrations/sync-journal/20260930120000_t12343-capture/migration.sql +47 -0
- package/migrations/sync-journal/20261001170000_t12984-sealer/migration.sql +101 -0
- package/package.json +13 -13
- package/templates/CLEO-INJECTION.md +5 -5
- package/templates/CLEO-REFERENCE.md +8 -4
|
@@ -1,26 +1,48 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* When
|
|
2
|
+
* When a scoped `testsPassed` stops counting (owner decision D11150).
|
|
3
3
|
*
|
|
4
|
-
* A `tool:test-affected
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
4
|
+
* A scoped run (`tool:test-affected`, a scope-aware `tool:test` that chose the
|
|
5
|
+
* affected packages, or a targeted `test-run:` report) proves what it ran
|
|
6
|
+
* before merge. Once the change has merged, only merged CI (`ci:<pr>`) or a
|
|
7
|
+
* full `tool:test` proves `testsPassed`. A tree-bound `test-run:` also stops
|
|
8
|
+
* counting as soon as the tree it ran on moves (T12965). This module
|
|
9
|
+
* is the single place both rules live: `cleo done` planning and
|
|
10
|
+
* `cleo complete` ask {@link testsPassedSupersededReason}, and they and a
|
|
11
|
+
* scope-aware `tool:test` all judge the merge — and the PR whose CI proves
|
|
12
|
+
* it — through {@link taskChangeMergeState} (T12959, T12656 AC2).
|
|
8
13
|
*
|
|
9
14
|
* @task T12656
|
|
15
|
+
* @task T12959
|
|
16
|
+
* @task T12960
|
|
17
|
+
* @task T12965
|
|
10
18
|
*/
|
|
11
|
-
import type { ChangeSetMergeState, EvidenceAtom,
|
|
12
|
-
import type { ChangeSetDeps } from './change-set.js';
|
|
19
|
+
import type { ChangeSetMergeState, EvidenceAtom, TaskChangeSet } from '@cleocode/contracts';
|
|
20
|
+
import type { ChangeSetDeps, ChangeSetTask, PatchEquivalenceUnknown } from './change-set.js';
|
|
13
21
|
/** Whether the task's change has merged to the default branch. */
|
|
14
22
|
export type ChangeMergeState = ChangeSetMergeState;
|
|
23
|
+
/** A merge state and, when a lookup it needed failed, which one (T12959 review). */
|
|
24
|
+
export interface MergeVerdict {
|
|
25
|
+
/** Merge state of the task's latest implementation. */
|
|
26
|
+
state: ChangeMergeState;
|
|
27
|
+
/**
|
|
28
|
+
* Why a lookup failed — `gh` unreachable, or commits missing from the
|
|
29
|
+
* local object store. With `state: 'unknown'` it is why the state is
|
|
30
|
+
* unknown; with `state: 'merged'` and no PR named, why the PR that carries
|
|
31
|
+
* the change is unknown.
|
|
32
|
+
*/
|
|
33
|
+
lookupFailed?: string;
|
|
34
|
+
}
|
|
15
35
|
/**
|
|
16
|
-
* Recorded `testsPassed` evidence whose only verification
|
|
17
|
-
* affected-scope
|
|
36
|
+
* Recorded `testsPassed` evidence whose only verification results are scoped:
|
|
37
|
+
* affected-scope tool runs and targeted `test-run:` reports (no `ci:` and no
|
|
38
|
+
* full `tool:` result).
|
|
18
39
|
*
|
|
19
40
|
* @param atoms - The gate's recorded atoms.
|
|
20
|
-
* @returns True when every result atom is
|
|
41
|
+
* @returns True when every result atom is scoped.
|
|
21
42
|
* @task T12656
|
|
43
|
+
* @task T12965
|
|
22
44
|
*/
|
|
23
|
-
export declare function
|
|
45
|
+
export declare function isScopedOnly(atoms: ReadonlyArray<EvidenceAtom>): boolean;
|
|
24
46
|
/**
|
|
25
47
|
* The merge state a derived change set implies. What the PR lookup found
|
|
26
48
|
* decides (`mergeState`), never `source` alone: a merged PR whose `pr:`
|
|
@@ -34,26 +56,131 @@ export declare function isAffectedOnly(atoms: ReadonlyArray<EvidenceAtom>): bool
|
|
|
34
56
|
*/
|
|
35
57
|
export declare function mergeStateOfChangeSet(changeSet: Pick<TaskChangeSet, 'source' | 'prDiscoveryFailed' | 'mergeState'>): ChangeMergeState;
|
|
36
58
|
/**
|
|
37
|
-
* Why a
|
|
38
|
-
* Fails closed:
|
|
39
|
-
*
|
|
59
|
+
* Why a scoped-only `testsPassed` no longer stands, or null when it does.
|
|
60
|
+
* Fails closed: a scoped result whose merge state is unknown does not stand
|
|
61
|
+
* either, since a scoped run counts before merge ONLY.
|
|
40
62
|
*
|
|
41
63
|
* @param atoms - Recorded `testsPassed` atoms.
|
|
42
64
|
* @param state - Merge state of the task's change.
|
|
65
|
+
* @param lookupFailed - With `state: 'unknown'`, why (defaults to `gh` unreachable).
|
|
43
66
|
* @returns The reason, or null.
|
|
44
67
|
* @task T12656
|
|
45
68
|
*/
|
|
46
|
-
export declare function
|
|
69
|
+
export declare function scopedRunSupersededReason(atoms: ReadonlyArray<EvidenceAtom>, state: ChangeMergeState, lookupFailed?: string): string | null;
|
|
47
70
|
/**
|
|
48
|
-
*
|
|
49
|
-
*
|
|
50
|
-
*
|
|
71
|
+
* Why a recorded `testsPassed` resting on a tree-bound `test-run:` no longer
|
|
72
|
+
* stands, or null when it does (T12965). A targeted report proves the tree it
|
|
73
|
+
* ran on; once that content moved, it proves nothing about the code
|
|
74
|
+
* being completed. A `ci:<pr>` or a full tool run in the same gate carries the
|
|
75
|
+
* gate on its own, and atoms recorded before T12965 (no `treeHash`) are not
|
|
76
|
+
* judged.
|
|
51
77
|
*
|
|
52
|
-
* @param
|
|
53
|
-
* @param
|
|
54
|
-
*
|
|
55
|
-
* @returns The reason
|
|
78
|
+
* @param atoms - Recorded `testsPassed` atoms.
|
|
79
|
+
* @param current - The current tree hash of the execution root, or null when
|
|
80
|
+
* it cannot be computed (not a git checkout, or git failed).
|
|
81
|
+
* @returns The reason, or null.
|
|
82
|
+
* @task T12965
|
|
83
|
+
*/
|
|
84
|
+
export declare function testRunTreeMismatchReason(atoms: ReadonlyArray<EvidenceAtom>, current: string | null): string | null;
|
|
85
|
+
/**
|
|
86
|
+
* Whether the recorded `testsPassed` atoms carry a tree-bound `test-run:`
|
|
87
|
+
* that {@link testRunTreeMismatchReason} would judge, so callers compute the
|
|
88
|
+
* current tree hash only when it matters.
|
|
89
|
+
*
|
|
90
|
+
* @param atoms - Recorded `testsPassed` atoms.
|
|
91
|
+
* @returns True when a tree-bound test-run is present.
|
|
92
|
+
* @task T12965
|
|
93
|
+
*/
|
|
94
|
+
export declare function hasTreeBoundTestRun(atoms: ReadonlyArray<EvidenceAtom>): boolean;
|
|
95
|
+
/**
|
|
96
|
+
* The one rule for whether a recorded `testsPassed` still stands — shared by
|
|
97
|
+
* `cleo done` planning and `cleo complete` (T12656 AC2). A moved tree under a
|
|
98
|
+
* targeted test-run (T12965) is checked first, then a scoped-only result
|
|
99
|
+
* after (or with unknown) merge (D11150). Each input is resolved lazily, only
|
|
100
|
+
* when the recorded atoms make it relevant.
|
|
101
|
+
*
|
|
102
|
+
* @param atoms - Recorded `testsPassed` atoms.
|
|
103
|
+
* @param probe - Lazy merge state (with why a lookup failed, when known) and
|
|
104
|
+
* current tree hash.
|
|
105
|
+
* @returns The reason it no longer stands, or null.
|
|
56
106
|
* @task T12656
|
|
107
|
+
* @task T12965
|
|
108
|
+
*/
|
|
109
|
+
export declare function testsPassedSupersededReason(atoms: ReadonlyArray<EvidenceAtom>, probe: {
|
|
110
|
+
mergeState: () => Promise<ChangeMergeState | MergeVerdict> | ChangeMergeState | MergeVerdict;
|
|
111
|
+
currentTree: () => Promise<string | null> | string | null;
|
|
112
|
+
}): Promise<string | null>;
|
|
113
|
+
/** Git and `gh` probes {@link taskChangeMergeState} uses; injectable for tests. */
|
|
114
|
+
export interface MergeProbeDeps {
|
|
115
|
+
/**
|
|
116
|
+
* Change-set I/O for the merged-PR lookup (tests inject `gh`). Its `viewPr`
|
|
117
|
+
* also lists a PR's own commits for the containment check, and its
|
|
118
|
+
* `listPrsForCommit` finds the PRs GitHub associates with a commit.
|
|
119
|
+
*/
|
|
120
|
+
changeSet?: ChangeSetDeps;
|
|
121
|
+
/** A change set already derived for this task (`cleo done` planning), so it is not derived twice. */
|
|
122
|
+
derived?: TaskChangeSet;
|
|
123
|
+
/**
|
|
124
|
+
* Repository the implementation commits live in; defaults to the task's
|
|
125
|
+
* change-set root (its worktree when one is registered, T12965 review).
|
|
126
|
+
*/
|
|
127
|
+
executionRoot?: string;
|
|
128
|
+
/**
|
|
129
|
+
* Whether `sha` is on origin's default branch; defaults to
|
|
130
|
+
* `git merge-base --is-ancestor`. A positive signal only: a local
|
|
131
|
+
* `origin/<default>` can be stale, and a squash or rebase merge never makes
|
|
132
|
+
* the recorded SHA an ancestor.
|
|
133
|
+
*/
|
|
134
|
+
isLanded?: (root: string, sha: string) => boolean;
|
|
135
|
+
/** Whether `ancestor` is contained in `descendant`; defaults to `git merge-base --is-ancestor`. */
|
|
136
|
+
contains?: (root: string, ancestor: string, descendant: string) => boolean;
|
|
137
|
+
/**
|
|
138
|
+
* Whether `sha`'s patch is among `candidates`: null when git failed,
|
|
139
|
+
* `{ missing }` when commits it needs are not local; defaults to `git patch-id`.
|
|
140
|
+
*/
|
|
141
|
+
equivalent?: (root: string, sha: string, candidates: readonly string[]) => boolean | null | PatchEquivalenceUnknown;
|
|
142
|
+
}
|
|
143
|
+
/** Where a task's change stands, and the PR whose CI would prove it. */
|
|
144
|
+
export interface TaskMergeInfo extends MergeVerdict {
|
|
145
|
+
/** The derived change set, when one was derived. */
|
|
146
|
+
changeSet: TaskChangeSet | null;
|
|
147
|
+
/**
|
|
148
|
+
* The merged PR that carries the latest implementation (`<n>` or
|
|
149
|
+
* `<component>@<n>`), or null when none is known. Never a PR that merely
|
|
150
|
+
* cites the task: its CI must have run the recorded commits.
|
|
151
|
+
*/
|
|
152
|
+
prRef: string | null;
|
|
153
|
+
/**
|
|
154
|
+
* With `state: 'merged'`, no {@link prRef} and no `lookupFailed`: why no
|
|
155
|
+
* merged PR is named — every lookup answered, and none carries the change.
|
|
156
|
+
*/
|
|
157
|
+
unproven?: string;
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Whether a task's LATEST implementation has merged, and through which PR —
|
|
161
|
+
* the one function `cleo done` planning, `cleo complete` and a scope-aware
|
|
162
|
+
* `tool:test` all ask (T12656 AC2).
|
|
163
|
+
*
|
|
164
|
+
* With recorded `commit:` atoms, the commits decide, never "any merged PR
|
|
165
|
+
* that cites the task": the PR named is one that carries every commit (see
|
|
166
|
+
* {@link carriesAll}) — a recorded `pr:` atom first (newest), then the PR the
|
|
167
|
+
* change-set derivation found, then a merged PR into the default branch that
|
|
168
|
+
* GitHub associates with the commits. Landing on the local `origin/<default>`
|
|
169
|
+
* is a positive signal only (merged, but no PR proves it); its absence proves
|
|
170
|
+
* nothing, since the ref may be stale and squash and rebase merges rewrite
|
|
171
|
+
* SHAs. With no sign of a merge, the state is unmerged — or unknown when a
|
|
172
|
+
* lookup it needed failed. A landed change with no carrier and a failed lookup
|
|
173
|
+
* names that lookup (`lookupFailed`): the carrier is unknown, which is not
|
|
174
|
+
* "no PR carries it" (`unproven`). Without commit atoms, the newest recorded
|
|
175
|
+
* `pr:` atom, else the derivation, decides.
|
|
176
|
+
*
|
|
177
|
+
* @param task - The task whose change is examined.
|
|
178
|
+
* @param storeRoot - CLEO store root.
|
|
179
|
+
* @param deps - Change-set I/O and git/`gh` probes.
|
|
180
|
+
* @returns The merge state, the PR, the change set when one was derived, and
|
|
181
|
+
* any lookup that failed.
|
|
182
|
+
* @task T12959
|
|
183
|
+
* @task T12960
|
|
57
184
|
*/
|
|
58
|
-
export declare function
|
|
185
|
+
export declare function taskChangeMergeState(task: ChangeSetTask, storeRoot: string, deps?: MergeProbeDeps): Promise<TaskMergeInfo>;
|
|
59
186
|
//# sourceMappingURL=affected-scope.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"affected-scope.d.ts","sourceRoot":"","sources":["../../src/tasks/affected-scope.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"affected-scope.d.ts","sourceRoot":"","sources":["../../src/tasks/affected-scope.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,24 +1,41 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* When
|
|
2
|
+
* When a scoped `testsPassed` stops counting (owner decision D11150).
|
|
3
3
|
*
|
|
4
|
-
* A `tool:test-affected
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
4
|
+
* A scoped run (`tool:test-affected`, a scope-aware `tool:test` that chose the
|
|
5
|
+
* affected packages, or a targeted `test-run:` report) proves what it ran
|
|
6
|
+
* before merge. Once the change has merged, only merged CI (`ci:<pr>`) or a
|
|
7
|
+
* full `tool:test` proves `testsPassed`. A tree-bound `test-run:` also stops
|
|
8
|
+
* counting as soon as the tree it ran on moves (T12965). This module
|
|
9
|
+
* is the single place both rules live: `cleo done` planning and
|
|
10
|
+
* `cleo complete` ask {@link testsPassedSupersededReason}, and they and a
|
|
11
|
+
* scope-aware `tool:test` all judge the merge — and the PR whose CI proves
|
|
12
|
+
* it — through {@link taskChangeMergeState} (T12959, T12656 AC2).
|
|
8
13
|
*
|
|
9
14
|
* @task T12656
|
|
15
|
+
* @task T12959
|
|
16
|
+
* @task T12960
|
|
17
|
+
* @task T12965
|
|
10
18
|
*/
|
|
19
|
+
/** What a failed `gh` lookup means for the caller, and the first thing to check. */
|
|
20
|
+
const GH_UNREACHABLE = 'gh unreachable — check `gh auth status`';
|
|
21
|
+
/** A full (unscoped) tool run that actually executed. */
|
|
22
|
+
function isFullToolRun(a) {
|
|
23
|
+
return a.kind === 'tool' && a.scope !== 'affected' && a.notApplicable !== true;
|
|
24
|
+
}
|
|
11
25
|
/**
|
|
12
|
-
* Recorded `testsPassed` evidence whose only verification
|
|
13
|
-
* affected-scope
|
|
26
|
+
* Recorded `testsPassed` evidence whose only verification results are scoped:
|
|
27
|
+
* affected-scope tool runs and targeted `test-run:` reports (no `ci:` and no
|
|
28
|
+
* full `tool:` result).
|
|
14
29
|
*
|
|
15
30
|
* @param atoms - The gate's recorded atoms.
|
|
16
|
-
* @returns True when every result atom is
|
|
31
|
+
* @returns True when every result atom is scoped.
|
|
17
32
|
* @task T12656
|
|
33
|
+
* @task T12965
|
|
18
34
|
*/
|
|
19
|
-
export function
|
|
35
|
+
export function isScopedOnly(atoms) {
|
|
20
36
|
const results = atoms.filter((a) => a.kind === 'tool' || a.kind === 'test-run' || a.kind === 'ci');
|
|
21
|
-
return results.length > 0 &&
|
|
37
|
+
return (results.length > 0 &&
|
|
38
|
+
results.every((a) => (a.kind === 'tool' && a.scope === 'affected') || a.kind === 'test-run'));
|
|
22
39
|
}
|
|
23
40
|
/**
|
|
24
41
|
* The merge state a derived change set implies. What the PR lookup found
|
|
@@ -39,43 +56,314 @@ export function mergeStateOfChangeSet(changeSet) {
|
|
|
39
56
|
return changeSet.prDiscoveryFailed === true ? 'unknown' : 'unmerged';
|
|
40
57
|
}
|
|
41
58
|
/**
|
|
42
|
-
* Why a
|
|
43
|
-
* Fails closed:
|
|
44
|
-
*
|
|
59
|
+
* Why a scoped-only `testsPassed` no longer stands, or null when it does.
|
|
60
|
+
* Fails closed: a scoped result whose merge state is unknown does not stand
|
|
61
|
+
* either, since a scoped run counts before merge ONLY.
|
|
45
62
|
*
|
|
46
63
|
* @param atoms - Recorded `testsPassed` atoms.
|
|
47
64
|
* @param state - Merge state of the task's change.
|
|
65
|
+
* @param lookupFailed - With `state: 'unknown'`, why (defaults to `gh` unreachable).
|
|
48
66
|
* @returns The reason, or null.
|
|
49
67
|
* @task T12656
|
|
50
68
|
*/
|
|
51
|
-
export function
|
|
52
|
-
if (state === 'unmerged' || !
|
|
69
|
+
export function scopedRunSupersededReason(atoms, state, lookupFailed) {
|
|
70
|
+
if (state === 'unmerged' || !isScopedOnly(atoms))
|
|
53
71
|
return null;
|
|
54
72
|
return state === 'merged'
|
|
55
|
-
? 'testsPassed was recorded from
|
|
56
|
-
:
|
|
73
|
+
? 'testsPassed was recorded from a scoped run (affected packages or a targeted test-run); the merged change needs merged CI (ci:<pr>) or a full run (tool:test).'
|
|
74
|
+
: `testsPassed was recorded from a scoped run (affected packages or a targeted test-run), which counts before merge only, and whether the change has merged cannot be determined (${lookupFailed ?? GH_UNREACHABLE}); retry, or record tool:test (or ci:<pr>).`;
|
|
57
75
|
}
|
|
58
76
|
/**
|
|
59
|
-
*
|
|
60
|
-
*
|
|
61
|
-
*
|
|
77
|
+
* Why a recorded `testsPassed` resting on a tree-bound `test-run:` no longer
|
|
78
|
+
* stands, or null when it does (T12965). A targeted report proves the tree it
|
|
79
|
+
* ran on; once that content moved, it proves nothing about the code
|
|
80
|
+
* being completed. A `ci:<pr>` or a full tool run in the same gate carries the
|
|
81
|
+
* gate on its own, and atoms recorded before T12965 (no `treeHash`) are not
|
|
82
|
+
* judged.
|
|
62
83
|
*
|
|
63
|
-
* @param
|
|
64
|
-
* @param
|
|
65
|
-
*
|
|
66
|
-
* @returns The reason
|
|
84
|
+
* @param atoms - Recorded `testsPassed` atoms.
|
|
85
|
+
* @param current - The current tree hash of the execution root, or null when
|
|
86
|
+
* it cannot be computed (not a git checkout, or git failed).
|
|
87
|
+
* @returns The reason, or null.
|
|
88
|
+
* @task T12965
|
|
89
|
+
*/
|
|
90
|
+
export function testRunTreeMismatchReason(atoms, current) {
|
|
91
|
+
if (atoms.some((a) => a.kind === 'ci' || isFullToolRun(a)))
|
|
92
|
+
return null;
|
|
93
|
+
const moved = atoms.filter((a) => a.kind === 'test-run' && typeof a.treeHash === 'string' && a.treeHash !== current);
|
|
94
|
+
const first = moved[0];
|
|
95
|
+
if (!first?.treeHash)
|
|
96
|
+
return null;
|
|
97
|
+
return current === null
|
|
98
|
+
? `testsPassed rests on test-run:${first.path}, bound to tree ${first.treeHash.slice(0, 12)}, and the current tree cannot be computed here (not a git checkout?); complete from the checkout the report ran in, or record ci:<pr> once the PR merges.`
|
|
99
|
+
: `testsPassed rests on test-run:${first.path}, recorded on tree ${first.treeHash.slice(0, 12)}, but the tree is now ${current.slice(0, 12)}; the report no longer describes this code. Re-run the targeted tests and record a fresh test-run, or record ci:<pr> once the PR merges.`;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Whether the recorded `testsPassed` atoms carry a tree-bound `test-run:`
|
|
103
|
+
* that {@link testRunTreeMismatchReason} would judge, so callers compute the
|
|
104
|
+
* current tree hash only when it matters.
|
|
105
|
+
*
|
|
106
|
+
* @param atoms - Recorded `testsPassed` atoms.
|
|
107
|
+
* @returns True when a tree-bound test-run is present.
|
|
108
|
+
* @task T12965
|
|
109
|
+
*/
|
|
110
|
+
export function hasTreeBoundTestRun(atoms) {
|
|
111
|
+
return atoms.some((a) => a.kind === 'test-run' && typeof a.treeHash === 'string');
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* The one rule for whether a recorded `testsPassed` still stands — shared by
|
|
115
|
+
* `cleo done` planning and `cleo complete` (T12656 AC2). A moved tree under a
|
|
116
|
+
* targeted test-run (T12965) is checked first, then a scoped-only result
|
|
117
|
+
* after (or with unknown) merge (D11150). Each input is resolved lazily, only
|
|
118
|
+
* when the recorded atoms make it relevant.
|
|
119
|
+
*
|
|
120
|
+
* @param atoms - Recorded `testsPassed` atoms.
|
|
121
|
+
* @param probe - Lazy merge state (with why a lookup failed, when known) and
|
|
122
|
+
* current tree hash.
|
|
123
|
+
* @returns The reason it no longer stands, or null.
|
|
67
124
|
* @task T12656
|
|
125
|
+
* @task T12965
|
|
68
126
|
*/
|
|
69
|
-
export async function
|
|
70
|
-
|
|
71
|
-
|
|
127
|
+
export async function testsPassedSupersededReason(atoms, probe) {
|
|
128
|
+
if (hasTreeBoundTestRun(atoms)) {
|
|
129
|
+
const moved = testRunTreeMismatchReason(atoms, await probe.currentTree());
|
|
130
|
+
if (moved)
|
|
131
|
+
return moved;
|
|
132
|
+
}
|
|
133
|
+
if (!isScopedOnly(atoms))
|
|
72
134
|
return null;
|
|
135
|
+
const merge = await probe.mergeState();
|
|
136
|
+
const verdict = typeof merge === 'string' ? { state: merge } : merge;
|
|
137
|
+
return scopedRunSupersededReason(atoms, verdict.state, verdict.lookupFailed);
|
|
138
|
+
}
|
|
139
|
+
function prRefOf(pr) {
|
|
140
|
+
return pr.componentPrNumber !== undefined
|
|
141
|
+
? `${pr.componentPrNumber}@${pr.prNumber}`
|
|
142
|
+
: String(pr.prNumber);
|
|
143
|
+
}
|
|
144
|
+
function changeSetPrRef(cs) {
|
|
145
|
+
return cs.source === 'pr' && cs.prNumber !== undefined && cs.stackedOn === undefined
|
|
146
|
+
? prRefOf({
|
|
147
|
+
prNumber: cs.prNumber,
|
|
148
|
+
...(cs.componentPrNumber !== undefined ? { componentPrNumber: cs.componentPrNumber } : {}),
|
|
149
|
+
})
|
|
150
|
+
: null;
|
|
151
|
+
}
|
|
152
|
+
/** The same commit, whichever side is abbreviated. */
|
|
153
|
+
function sameCommit(a, b) {
|
|
154
|
+
const [x, y] = [a.toLowerCase(), b.toLowerCase()];
|
|
155
|
+
return x.length >= 7 && y.length >= 7 && (x.startsWith(y) || y.startsWith(x));
|
|
156
|
+
}
|
|
157
|
+
/** The first 12 characters of each commit, comma-separated. */
|
|
158
|
+
function shortShas(shas) {
|
|
159
|
+
return shas.map((sha) => sha.slice(0, 12)).join(', ');
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Whether a merged PR carries every implementation commit, so its CI ran them
|
|
163
|
+
* (T12959 review). A commit is carried when it is an ancestor of the PR's
|
|
164
|
+
* merge commit, one of the PR's own commits as `gh` lists them (a squash or
|
|
165
|
+
* rebase merge rewrites the SHAs; a component's commits count for its
|
|
166
|
+
* integration PR), or a patch-equivalent of one of them (rebased before the
|
|
167
|
+
* PR merged). A commit built on top of the merge came after it and is never
|
|
168
|
+
* carried. `incomplete` names a lookup it needed that failed.
|
|
169
|
+
*/
|
|
170
|
+
async function carriesAll(root, pr, commits, probes) {
|
|
171
|
+
const merge = pr.mergeCommitSha ?? null;
|
|
172
|
+
let rest = merge === null ? [...commits] : commits.filter((sha) => !probes.contains(root, sha, merge));
|
|
173
|
+
if (rest.length === 0)
|
|
174
|
+
return { carried: true, incomplete: null };
|
|
175
|
+
if (merge !== null && rest.some((sha) => probes.contains(root, merge, sha))) {
|
|
176
|
+
return { carried: false, incomplete: null };
|
|
177
|
+
}
|
|
178
|
+
let incomplete = null;
|
|
179
|
+
const own = [];
|
|
180
|
+
for (const n of [pr.prNumber, pr.componentPrNumber]) {
|
|
181
|
+
if (n === undefined)
|
|
182
|
+
continue;
|
|
183
|
+
const view = await probes.viewPr(n, root);
|
|
184
|
+
if (view === null)
|
|
185
|
+
incomplete ??= `gh pr view ${n} failed (${GH_UNREACHABLE})`;
|
|
186
|
+
else
|
|
187
|
+
own.push(...(view.commits ?? []));
|
|
188
|
+
}
|
|
189
|
+
rest = rest.filter((sha) => !own.some((oid) => sameCommit(oid, sha)));
|
|
190
|
+
if (rest.length === 0)
|
|
191
|
+
return { carried: true, incomplete: null };
|
|
192
|
+
for (const sha of rest) {
|
|
193
|
+
const equivalent = own.length > 0 ? probes.equivalent(root, sha, own) : false;
|
|
194
|
+
if (equivalent === true)
|
|
195
|
+
continue;
|
|
196
|
+
if (equivalent === null) {
|
|
197
|
+
incomplete ??= `git could not compare ${shortShas([sha])} with the commits of PR #${pr.prNumber}`;
|
|
198
|
+
}
|
|
199
|
+
else if (equivalent !== false) {
|
|
200
|
+
incomplete ??= `commit(s) ${shortShas(equivalent.missing)} are not in the local object store — run \`git fetch\``;
|
|
201
|
+
}
|
|
202
|
+
return { carried: false, incomplete };
|
|
203
|
+
}
|
|
204
|
+
return { carried: true, incomplete: null };
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Merged PRs into the default branch that GitHub associates with every
|
|
208
|
+
* commit, newest first — candidates only, which {@link carriesAll} then
|
|
209
|
+
* checks. `failed` names a lookup that failed: a `gh` call, or the default
|
|
210
|
+
* branch, which comes from origin's ref, else from `gh` (a PR merged into any
|
|
211
|
+
* other branch, such as a stacked PR's base, never counts).
|
|
212
|
+
*/
|
|
213
|
+
async function githubCarrierCandidates(root, commits, list, defaultBranch) {
|
|
214
|
+
const perCommit = [];
|
|
215
|
+
for (const sha of commits) {
|
|
216
|
+
const rows = await list(sha, root);
|
|
217
|
+
if (rows === null) {
|
|
218
|
+
return {
|
|
219
|
+
prs: [],
|
|
220
|
+
failed: `gh api commits/${shortShas([sha])}/pulls failed (${GH_UNREACHABLE})`,
|
|
221
|
+
};
|
|
222
|
+
}
|
|
223
|
+
const merged = new Map(rows.filter((pr) => pr.mergedAt !== null).map((pr) => [pr.number, pr]));
|
|
224
|
+
if (merged.size === 0)
|
|
225
|
+
return { prs: [], failed: null };
|
|
226
|
+
perCommit.push(merged);
|
|
227
|
+
}
|
|
228
|
+
const [first, ...others] = perCommit;
|
|
229
|
+
const common = [...(first?.values() ?? [])].filter((pr) => others.every((m) => m.has(pr.number)));
|
|
230
|
+
if (common.length === 0)
|
|
231
|
+
return { prs: [], failed: null };
|
|
232
|
+
const base = await defaultBranch();
|
|
233
|
+
if (base === null) {
|
|
234
|
+
return {
|
|
235
|
+
prs: [],
|
|
236
|
+
failed: `the default branch is unknown (no origin/HEAD, origin/main or origin/master, and gh repo view failed: ${GH_UNREACHABLE})`,
|
|
237
|
+
};
|
|
238
|
+
}
|
|
239
|
+
return {
|
|
240
|
+
prs: common
|
|
241
|
+
.filter((pr) => pr.baseRefName === base)
|
|
242
|
+
.sort((a, b) => (b.mergedAt ?? '').localeCompare(a.mergedAt ?? ''))
|
|
243
|
+
.map((pr) => ({ prNumber: pr.number, mergeCommitSha: pr.mergeCommitSha ?? null })),
|
|
244
|
+
failed: null,
|
|
245
|
+
};
|
|
246
|
+
}
|
|
247
|
+
/**
|
|
248
|
+
* Whether a task's LATEST implementation has merged, and through which PR —
|
|
249
|
+
* the one function `cleo done` planning, `cleo complete` and a scope-aware
|
|
250
|
+
* `tool:test` all ask (T12656 AC2).
|
|
251
|
+
*
|
|
252
|
+
* With recorded `commit:` atoms, the commits decide, never "any merged PR
|
|
253
|
+
* that cites the task": the PR named is one that carries every commit (see
|
|
254
|
+
* {@link carriesAll}) — a recorded `pr:` atom first (newest), then the PR the
|
|
255
|
+
* change-set derivation found, then a merged PR into the default branch that
|
|
256
|
+
* GitHub associates with the commits. Landing on the local `origin/<default>`
|
|
257
|
+
* is a positive signal only (merged, but no PR proves it); its absence proves
|
|
258
|
+
* nothing, since the ref may be stale and squash and rebase merges rewrite
|
|
259
|
+
* SHAs. With no sign of a merge, the state is unmerged — or unknown when a
|
|
260
|
+
* lookup it needed failed. A landed change with no carrier and a failed lookup
|
|
261
|
+
* names that lookup (`lookupFailed`): the carrier is unknown, which is not
|
|
262
|
+
* "no PR carries it" (`unproven`). Without commit atoms, the newest recorded
|
|
263
|
+
* `pr:` atom, else the derivation, decides.
|
|
264
|
+
*
|
|
265
|
+
* @param task - The task whose change is examined.
|
|
266
|
+
* @param storeRoot - CLEO store root.
|
|
267
|
+
* @param deps - Change-set I/O and git/`gh` probes.
|
|
268
|
+
* @returns The merge state, the PR, the change set when one was derived, and
|
|
269
|
+
* any lookup that failed.
|
|
270
|
+
* @task T12959
|
|
271
|
+
* @task T12960
|
|
272
|
+
*/
|
|
273
|
+
export async function taskChangeMergeState(task, storeRoot, deps = {}) {
|
|
73
274
|
const implemented = task.verification?.evidence?.implemented?.atoms ?? [];
|
|
74
|
-
|
|
75
|
-
|
|
275
|
+
const commits = implemented.flatMap((a) => (a.kind === 'commit' ? [a.sha] : []));
|
|
276
|
+
const prs = implemented
|
|
277
|
+
.filter((a) => a.kind === 'pr')
|
|
278
|
+
.toSorted((a, b) => (b.mergedAt ?? '').localeCompare(a.mergedAt ?? ''));
|
|
279
|
+
const cs = await import('./change-set.js');
|
|
280
|
+
const derive = async () => deps.derived ??
|
|
281
|
+
(await cs.deriveTaskChangeSet({ task, storeRoot, cwd: storeRoot }, deps.changeSet));
|
|
282
|
+
const failures = [];
|
|
283
|
+
const derivedFailure = (changeSet) => {
|
|
284
|
+
if (mergeStateOfChangeSet(changeSet) === 'unknown') {
|
|
285
|
+
failures.push(`the merged-PR lookup failed (${GH_UNREACHABLE})`);
|
|
286
|
+
}
|
|
287
|
+
};
|
|
288
|
+
const lookupFailed = () => failures.length > 0 ? { lookupFailed: [...new Set(failures)].join('; ') } : {};
|
|
289
|
+
if (commits.length === 0) {
|
|
290
|
+
const newest = prs[0];
|
|
291
|
+
if (newest)
|
|
292
|
+
return { state: 'merged', changeSet: null, prRef: prRefOf(newest) };
|
|
293
|
+
const changeSet = await derive();
|
|
294
|
+
derivedFailure(changeSet);
|
|
295
|
+
return {
|
|
296
|
+
state: mergeStateOfChangeSet(changeSet),
|
|
297
|
+
changeSet,
|
|
298
|
+
prRef: changeSetPrRef(changeSet),
|
|
299
|
+
...lookupFailed(),
|
|
300
|
+
};
|
|
301
|
+
}
|
|
302
|
+
// T12965 review M2: the same root `cleo done` reads the change set from.
|
|
303
|
+
const at = deps.executionRoot ?? cs.resolveChangeSetRoot(storeRoot, task.id).root;
|
|
304
|
+
const probes = {
|
|
305
|
+
contains: deps.contains ?? cs.isAncestorCommit,
|
|
306
|
+
equivalent: deps.equivalent ?? cs.hasPatchEquivalent,
|
|
307
|
+
viewPr: deps.changeSet?.viewPr ?? cs.defaultViewPr,
|
|
308
|
+
};
|
|
309
|
+
const carries = async (pr) => {
|
|
310
|
+
const r = await carriesAll(at, pr, commits, probes);
|
|
311
|
+
if (r.incomplete !== null)
|
|
312
|
+
failures.push(r.incomplete);
|
|
313
|
+
return r.carried;
|
|
314
|
+
};
|
|
315
|
+
for (const pr of prs) {
|
|
316
|
+
if (await carries(pr))
|
|
317
|
+
return { state: 'merged', changeSet: null, prRef: prRefOf(pr) };
|
|
318
|
+
}
|
|
319
|
+
const changeSet = await derive();
|
|
320
|
+
derivedFailure(changeSet);
|
|
321
|
+
const derivedRef = changeSetPrRef(changeSet);
|
|
322
|
+
if (derivedRef !== null &&
|
|
323
|
+
changeSet.prNumber !== undefined &&
|
|
324
|
+
(await carries({
|
|
325
|
+
prNumber: changeSet.prNumber,
|
|
326
|
+
...(changeSet.componentPrNumber !== undefined
|
|
327
|
+
? { componentPrNumber: changeSet.componentPrNumber }
|
|
328
|
+
: {}),
|
|
329
|
+
mergeCommitSha: changeSet.mergeCommitSha ?? null,
|
|
330
|
+
}))) {
|
|
331
|
+
return { state: 'merged', changeSet, prRef: derivedRef };
|
|
332
|
+
}
|
|
333
|
+
// T12959 review: a PR GitHub associates with the commits is a candidate
|
|
334
|
+
// only; it is named when it carries them, like every other candidate.
|
|
335
|
+
const github = await githubCarrierCandidates(at, commits, deps.changeSet?.listPrsForCommit ?? cs.defaultListPrsForCommit, async () => {
|
|
336
|
+
const ref = cs.resolveOriginDefault(at);
|
|
337
|
+
if (ref !== null)
|
|
338
|
+
return ref.replace(/^origin\//, '');
|
|
339
|
+
const ask = deps.changeSet?.defaultBranch ??
|
|
340
|
+
(await import('../release/ci-evidence.js')).ghDefaultBranch;
|
|
341
|
+
return ask(at);
|
|
342
|
+
});
|
|
343
|
+
if (github.failed !== null)
|
|
344
|
+
failures.push(github.failed);
|
|
345
|
+
for (const pr of github.prs) {
|
|
346
|
+
if (await carries(pr))
|
|
347
|
+
return { state: 'merged', changeSet, prRef: prRefOf(pr) };
|
|
348
|
+
}
|
|
349
|
+
const isLanded = deps.isLanded ?? cs.isLandedOnOriginDefault;
|
|
350
|
+
if (commits.every((sha) => isLanded(at, sha))) {
|
|
351
|
+
// T12959 review: with a failed lookup the carrier is unknown, not absent.
|
|
352
|
+
if (failures.length > 0)
|
|
353
|
+
return { state: 'merged', changeSet, prRef: null, ...lookupFailed() };
|
|
354
|
+
return {
|
|
355
|
+
state: 'merged',
|
|
356
|
+
changeSet,
|
|
357
|
+
prRef: null,
|
|
358
|
+
unproven: `implementation commit(s) ${shortShas(commits)} reached the default branch, but no merged PR is known to carry them` +
|
|
359
|
+
(derivedRef !== null ? ` (PR #${derivedRef}, which cites ${task.id}, does not)` : ''),
|
|
360
|
+
};
|
|
76
361
|
}
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
362
|
+
return {
|
|
363
|
+
state: failures.length > 0 ? 'unknown' : 'unmerged',
|
|
364
|
+
changeSet,
|
|
365
|
+
prRef: null,
|
|
366
|
+
...lookupFailed(),
|
|
367
|
+
};
|
|
80
368
|
}
|
|
81
369
|
//# sourceMappingURL=affected-scope.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"affected-scope.js","sourceRoot":"","sources":["../../src/tasks/affected-scope.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAQH;;;;;;;GAOG;AACH,MAAM,UAAU,cAAc,CAAC,KAAkC;IAC/D,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAC1B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,CAAC,IAAI,KAAK,UAAU,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CACrE,CAAC;IACF,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,CAAC,KAAK,KAAK,UAAU,CAAC,CAAC;AACjG,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,qBAAqB,CACnC,SAA6E;IAE7E,IAAI,SAAS,CAAC,UAAU;QAAE,OAAO,SAAS,CAAC,UAAU,CAAC;IACtD,IAAI,SAAS,CAAC,MAAM,KAAK,IAAI;QAAE,OAAO,QAAQ,CAAC;IAC/C,OAAO,SAAS,CAAC,iBAAiB,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC;AACvE,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,6BAA6B,CAC3C,KAAkC,EAClC,KAAuB;IAEvB,IAAI,KAAK,KAAK,UAAU,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAChE,OAAO,KAAK,KAAK,QAAQ;QACvB,CAAC,CAAC,6HAA6H;QAC/H,CAAC,CAAC,2OAA2O,CAAC;AAClP,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,iCAAiC,CACrD,IAAU,EACV,SAAiB,EACjB,IAAoB;IAEpB,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,IAAI,EAAE,CAAC;IACpE,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACxC,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,IAAI,EAAE,CAAC;IAC1E,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;QAC7C,OAAO,6BAA6B,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IACxD,CAAC;IACD,MAAM,EAAE,mBAAmB,EAAE,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAC;IAChE,MAAM,SAAS,GAAG,MAAM,mBAAmB,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,IAAI,CAAC,CAAC;IACvF,OAAO,6BAA6B,CAAC,KAAK,EAAE,qBAAqB,CAAC,SAAS,CAAC,CAAC,CAAC;AAChF,CAAC"}
|
|
1
|
+
{"version":3,"file":"affected-scope.js","sourceRoot":"","sources":["../../src/tasks/affected-scope.ts"],"names":[],"mappings":"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"}
|