@telora/daemon 0.23.48 → 0.23.56
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/build-info.json +2 -2
- package/dist/completion/review-exit/review-census-record.d.ts.map +1 -1
- package/dist/completion/review-exit/review-census-record.js +4 -0
- package/dist/completion/review-exit/review-census-record.js.map +1 -1
- package/dist/completion/review-exit/review-exit-deps.js +1 -1
- package/dist/completion/review-exit/review-exit-phase.js +1 -1
- package/dist/completion/state-cascade/failed-verdict-stranded-filing.d.ts +35 -0
- package/dist/completion/state-cascade/failed-verdict-stranded-filing.d.ts.map +1 -0
- package/dist/completion/state-cascade/failed-verdict-stranded-filing.js +93 -0
- package/dist/completion/state-cascade/failed-verdict-stranded-filing.js.map +1 -0
- package/dist/completion/state-cascade/review-approved-head-gate.d.ts.map +1 -1
- package/dist/completion/state-cascade/review-approved-head-gate.js +3 -0
- package/dist/completion/state-cascade/review-approved-head-gate.js.map +1 -1
- package/dist/completion/state-cascade/review-next-step.d.ts +19 -6
- package/dist/completion/state-cascade/review-next-step.d.ts.map +1 -1
- package/dist/completion/state-cascade/review-next-step.js +6 -2
- package/dist/completion/state-cascade/review-next-step.js.map +1 -1
- package/dist/completion/state-cascade/review-request-gate.d.ts +5 -0
- package/dist/completion/state-cascade/review-request-gate.d.ts.map +1 -1
- package/dist/completion/state-cascade/review-request-gate.js +7 -1
- package/dist/completion/state-cascade/review-request-gate.js.map +1 -1
- package/dist/completion/state-cascade/review-verify-judgment-gate.d.ts +137 -0
- package/dist/completion/state-cascade/review-verify-judgment-gate.d.ts.map +1 -0
- package/dist/completion/state-cascade/review-verify-judgment-gate.js +98 -0
- package/dist/completion/state-cascade/review-verify-judgment-gate.js.map +1 -0
- package/dist/completion/state-cascade/standing-approval-convergence.d.ts +18 -8
- package/dist/completion/state-cascade/standing-approval-convergence.d.ts.map +1 -1
- package/dist/completion/state-cascade/standing-approval-convergence.js +81 -16
- package/dist/completion/state-cascade/standing-approval-convergence.js.map +1 -1
- package/dist/completion/state-cascade/standing-approval-failed-verdict.d.ts +107 -0
- package/dist/completion/state-cascade/standing-approval-failed-verdict.d.ts.map +1 -0
- package/dist/completion/state-cascade/standing-approval-failed-verdict.js +121 -0
- package/dist/completion/state-cascade/standing-approval-failed-verdict.js.map +1 -0
- package/dist/completion/state-cascade/standing-approval-stranded.d.ts +29 -3
- package/dist/completion/state-cascade/standing-approval-stranded.d.ts.map +1 -1
- package/dist/completion/state-cascade/standing-approval-stranded.js +121 -7
- package/dist/completion/state-cascade/standing-approval-stranded.js.map +1 -1
- package/dist/completion/state-cascade/state-cascade.d.ts +14 -0
- package/dist/completion/state-cascade/state-cascade.d.ts.map +1 -1
- package/dist/completion/state-cascade/state-cascade.js +15 -6
- package/dist/completion/state-cascade/state-cascade.js.map +1 -1
- package/dist/completion/team-exit/status-advance-phase.d.ts +7 -0
- package/dist/completion/team-exit/status-advance-phase.d.ts.map +1 -1
- package/dist/completion/team-exit/status-advance-phase.js +26 -17
- package/dist/completion/team-exit/status-advance-phase.js.map +1 -1
- package/dist/composition/advance-precheck-context.d.ts.map +1 -1
- package/dist/composition/advance-precheck-context.js +3 -0
- package/dist/composition/advance-precheck-context.js.map +1 -1
- package/dist/composition/execution-merge-context.d.ts.map +1 -1
- package/dist/composition/execution-merge-context.js +1 -0
- package/dist/composition/execution-merge-context.js.map +1 -1
- package/dist/composition/execution-migrations-context.d.ts.map +1 -1
- package/dist/composition/execution-migrations-context.js +1 -20
- package/dist/composition/execution-migrations-context.js.map +1 -1
- package/dist/composition/runtime-delivery-advance-context.d.ts +12 -3
- package/dist/composition/runtime-delivery-advance-context.d.ts.map +1 -1
- package/dist/composition/runtime-delivery-advance-context.js +36 -4
- package/dist/composition/runtime-delivery-advance-context.js.map +1 -1
- package/dist/composition/standing-approval-context.d.ts.map +1 -1
- package/dist/composition/standing-approval-context.js +4 -0
- package/dist/composition/standing-approval-context.js.map +1 -1
- package/dist/composition/state-cascade-context.d.ts +9 -0
- package/dist/composition/state-cascade-context.d.ts.map +1 -1
- package/dist/composition/state-cascade-context.js +21 -1
- package/dist/composition/state-cascade-context.js.map +1 -1
- package/dist/composition/tower-pass-context.d.ts.map +1 -1
- package/dist/composition/tower-pass-context.js +2 -1
- package/dist/composition/tower-pass-context.js.map +1 -1
- package/dist/composition/verification-context.js +1 -1
- package/dist/composition/verify-feedback-context.d.ts +5 -1
- package/dist/composition/verify-feedback-context.d.ts.map +1 -1
- package/dist/composition/verify-feedback-context.js +8 -3
- package/dist/composition/verify-feedback-context.js.map +1 -1
- package/dist/config/live-daemon-config.js +1 -1
- package/dist/delivery/delivery-lifecycle.d.ts.map +1 -1
- package/dist/delivery/delivery-lifecycle.js +3 -0
- package/dist/delivery/delivery-lifecycle.js.map +1 -1
- package/dist/delivery/operator-hold.d.ts.map +1 -1
- package/dist/delivery/operator-hold.js +2 -0
- package/dist/delivery/operator-hold.js.map +1 -1
- package/dist/delivery/paused-revival.d.ts.map +1 -1
- package/dist/delivery/paused-revival.js +2 -1
- package/dist/delivery/paused-revival.js.map +1 -1
- package/dist/delivery/recorded-concerns.d.ts +5 -2
- package/dist/delivery/recorded-concerns.d.ts.map +1 -1
- package/dist/delivery/recorded-concerns.js +8 -4
- package/dist/delivery/recorded-concerns.js.map +1 -1
- package/dist/directive/directive-queue.js +1 -1
- package/dist/focus/focus-poller-auto-advance.d.ts +15 -0
- package/dist/focus/focus-poller-auto-advance.d.ts.map +1 -1
- package/dist/focus/focus-poller-auto-advance.js +23 -15
- package/dist/focus/focus-poller-auto-advance.js.map +1 -1
- package/dist/focus/focus-poller-spawn.js +1 -1
- package/dist/focus/focus-poller-state.js +1 -1
- package/dist/focus/pending-review-approved-head.d.ts.map +1 -1
- package/dist/focus/pending-review-approved-head.js +7 -3
- package/dist/focus/pending-review-approved-head.js.map +1 -1
- package/dist/focus/pending-spawn-review-next-step.d.ts.map +1 -1
- package/dist/focus/pending-spawn-review-next-step.js +11 -9
- package/dist/focus/pending-spawn-review-next-step.js.map +1 -1
- package/dist/focus/ready-focus-team-work.d.ts.map +1 -1
- package/dist/focus/ready-focus-team-work.js +2 -1
- package/dist/focus/ready-focus-team-work.js.map +1 -1
- package/dist/git/focus-branch-containment.js +2 -2
- package/dist/git/focus-branch-containment.js.map +1 -1
- package/dist/git/index.d.ts.map +1 -1
- package/dist/git/index.js +1 -0
- package/dist/git/index.js.map +1 -1
- package/dist/merge/approval-gate-state.d.ts.map +1 -1
- package/dist/merge/approval-gate-state.js +1 -0
- package/dist/merge/approval-gate-state.js.map +1 -1
- package/dist/merge/completion-merge-driver.d.ts.map +1 -1
- package/dist/merge/completion-merge-driver.js +1 -0
- package/dist/merge/completion-merge-driver.js.map +1 -1
- package/dist/merge/completion-merge-gate.d.ts.map +1 -1
- package/dist/merge/completion-merge-gate.js +1 -0
- package/dist/merge/completion-merge-gate.js.map +1 -1
- package/dist/merge/merge-back-loop.d.ts.map +1 -1
- package/dist/merge/merge-back-loop.js +1 -0
- package/dist/merge/merge-back-loop.js.map +1 -1
- package/dist/prd/index.d.ts.map +1 -1
- package/dist/prd/index.js +2 -1
- package/dist/prd/index.js.map +1 -1
- package/dist/prompt-sections/execution-sections.d.ts +5 -0
- package/dist/prompt-sections/execution-sections.d.ts.map +1 -1
- package/dist/prompt-sections/execution-sections.js +12 -2
- package/dist/prompt-sections/execution-sections.js.map +1 -1
- package/dist/prompt-sections/gate-verdict-section.d.ts.map +1 -1
- package/dist/prompt-sections/gate-verdict-section.js +3 -1
- package/dist/prompt-sections/gate-verdict-section.js.map +1 -1
- package/dist/prompt-sections/persona-sections.d.ts +10 -0
- package/dist/prompt-sections/persona-sections.d.ts.map +1 -1
- package/dist/prompt-sections/persona-sections.js +21 -6
- package/dist/prompt-sections/persona-sections.js.map +1 -1
- package/dist/prompt-sections/prompt-listing.d.ts +33 -0
- package/dist/prompt-sections/prompt-listing.d.ts.map +1 -1
- package/dist/prompt-sections/prompt-listing.js +67 -13
- package/dist/prompt-sections/prompt-listing.js.map +1 -1
- package/dist/prompt-sections/routing-decider-sections.d.ts.map +1 -1
- package/dist/prompt-sections/routing-decider-sections.js +6 -2
- package/dist/prompt-sections/routing-decider-sections.js.map +1 -1
- package/dist/prompt-sections/shared.js +1 -1
- package/dist/prompt-sections/shortfall-gap-lines.d.ts +32 -0
- package/dist/prompt-sections/shortfall-gap-lines.d.ts.map +1 -0
- package/dist/prompt-sections/shortfall-gap-lines.js +58 -0
- package/dist/prompt-sections/shortfall-gap-lines.js.map +1 -0
- package/dist/prompt-sections/shortfall-park-section.d.ts +7 -1
- package/dist/prompt-sections/shortfall-park-section.d.ts.map +1 -1
- package/dist/prompt-sections/shortfall-park-section.js +27 -0
- package/dist/prompt-sections/shortfall-park-section.js.map +1 -1
- package/dist/queries/api-client/shared.js +1 -1
- package/dist/queries/delivery-gate-state/delivery-gate-state.d.ts +43 -16
- package/dist/queries/delivery-gate-state/delivery-gate-state.d.ts.map +1 -1
- package/dist/queries/delivery-gate-state/delivery-gate-state.js +43 -11
- package/dist/queries/delivery-gate-state/delivery-gate-state.js.map +1 -1
- package/dist/queries/delivery-gate-state/shortfall-judgment-record.d.ts +56 -0
- package/dist/queries/delivery-gate-state/shortfall-judgment-record.d.ts.map +1 -0
- package/dist/queries/delivery-gate-state/shortfall-judgment-record.js +123 -0
- package/dist/queries/delivery-gate-state/shortfall-judgment-record.js.map +1 -0
- package/dist/queries/delivery-gate-state/verify-own-holds.d.ts.map +1 -1
- package/dist/queries/delivery-gate-state/verify-own-holds.js +2 -1
- package/dist/queries/delivery-gate-state/verify-own-holds.js.map +1 -1
- package/dist/queries/escalations/cause-key.d.ts +9 -1
- package/dist/queries/escalations/cause-key.d.ts.map +1 -1
- package/dist/queries/escalations/cause-key.js +16 -2
- package/dist/queries/escalations/cause-key.js.map +1 -1
- package/dist/queries/escalations/filing-observation.d.ts.map +1 -1
- package/dist/queries/escalations/filing-observation.js +3 -0
- package/dist/queries/escalations/filing-observation.js.map +1 -1
- package/dist/queries/focus-review/focus-review-approval.d.ts.map +1 -1
- package/dist/queries/focus-review/focus-review-approval.js +3 -0
- package/dist/queries/focus-review/focus-review-approval.js.map +1 -1
- package/dist/queries/prd/prd.d.ts.map +1 -1
- package/dist/queries/prd/prd.js +2 -1
- package/dist/queries/prd/prd.js.map +1 -1
- package/dist/queries/verification/shortfall-rulings.d.ts.map +1 -1
- package/dist/queries/verification/shortfall-rulings.js +3 -1
- package/dist/queries/verification/shortfall-rulings.js.map +1 -1
- package/dist/queries/verification/verification.js +1 -1
- package/dist/session/session-lineage.d.ts.map +1 -1
- package/dist/session/session-lineage.js +1 -0
- package/dist/session/session-lineage.js.map +1 -1
- package/dist/spawn/prompt-assembly.d.ts.map +1 -1
- package/dist/spawn/prompt-assembly.js +13 -1
- package/dist/spawn/prompt-assembly.js.map +1 -1
- package/dist/spawn/review-hold-park.d.ts.map +1 -1
- package/dist/spawn/review-hold-park.js +1 -0
- package/dist/spawn/review-hold-park.js.map +1 -1
- package/dist/supervision/agent-resolvable-promotion.d.ts +3 -2
- package/dist/supervision/agent-resolvable-promotion.d.ts.map +1 -1
- package/dist/supervision/agent-resolvable-promotion.js +3 -2
- package/dist/supervision/agent-resolvable-promotion.js.map +1 -1
- package/dist/supervision/escalation-clearing.d.ts +14 -1
- package/dist/supervision/escalation-clearing.d.ts.map +1 -1
- package/dist/supervision/escalation-clearing.js +28 -1
- package/dist/supervision/escalation-clearing.js.map +1 -1
- package/dist/supervision/escalation-suppression.js +1 -1
- package/dist/supervision/focus-delivery-aggregate-phase.d.ts.map +1 -1
- package/dist/supervision/focus-delivery-aggregate-phase.js +2 -0
- package/dist/supervision/focus-delivery-aggregate-phase.js.map +1 -1
- package/dist/supervision/holds.d.ts.map +1 -1
- package/dist/supervision/holds.js +1 -0
- package/dist/supervision/holds.js.map +1 -1
- package/dist/supervision/null-role-spawn.d.ts.map +1 -1
- package/dist/supervision/null-role-spawn.js +1 -0
- package/dist/supervision/null-role-spawn.js.map +1 -1
- package/dist/supervision/stop-registry.d.ts +1 -0
- package/dist/supervision/stop-registry.d.ts.map +1 -1
- package/dist/supervision/stop-rows-delivery.d.ts +8 -0
- package/dist/supervision/stop-rows-delivery.d.ts.map +1 -1
- package/dist/supervision/stop-rows-delivery.js +31 -4
- package/dist/supervision/stop-rows-delivery.js.map +1 -1
- package/dist/supervision/team-work.d.ts.map +1 -1
- package/dist/supervision/team-work.js +1 -0
- package/dist/supervision/team-work.js.map +1 -1
- package/dist/supervision/verify-gate-stall.d.ts.map +1 -1
- package/dist/supervision/verify-gate-stall.js +1 -0
- package/dist/supervision/verify-gate-stall.js.map +1 -1
- package/dist/testing/fixtures/api-client.js +1 -1
- package/dist/testing/fixtures/completion-judge-stubs.d.ts.map +1 -1
- package/dist/testing/fixtures/completion-judge-stubs.js +1 -0
- package/dist/testing/fixtures/completion-judge-stubs.js.map +1 -1
- package/dist/testing/fixtures/escalation-store.d.ts +35 -0
- package/dist/testing/fixtures/escalation-store.d.ts.map +1 -0
- package/dist/testing/fixtures/escalation-store.js +86 -0
- package/dist/testing/fixtures/escalation-store.js.map +1 -0
- package/dist/testing/fixtures/index.js +1 -1
- package/dist/testing/fixtures/merge-log-capture.d.ts.map +1 -1
- package/dist/testing/fixtures/merge-log-capture.js +1 -0
- package/dist/testing/fixtures/merge-log-capture.js.map +1 -1
- package/dist/testing/fixtures/pending-spawn-world.d.ts.map +1 -1
- package/dist/testing/fixtures/pending-spawn-world.js +1 -0
- package/dist/testing/fixtures/pending-spawn-world.js.map +1 -1
- package/dist/testing/fixtures/recording-api-client.js +1 -1
- package/dist/testing/fixtures/review-exit-deps.js +1 -1
- package/dist/testing/fixtures/shortfall-rework-hold-deps.d.ts +22 -0
- package/dist/testing/fixtures/shortfall-rework-hold-deps.d.ts.map +1 -0
- package/dist/testing/fixtures/shortfall-rework-hold-deps.js +44 -0
- package/dist/testing/fixtures/shortfall-rework-hold-deps.js.map +1 -0
- package/dist/testing/fixtures/verification-feedback-deps.d.ts +7 -2
- package/dist/testing/fixtures/verification-feedback-deps.d.ts.map +1 -1
- package/dist/testing/fixtures/verification-feedback-deps.js +15 -19
- package/dist/testing/fixtures/verification-feedback-deps.js.map +1 -1
- package/dist/types/index.js +1 -1
- package/dist/types/issue-description-budget.d.ts.map +1 -1
- package/dist/types/issue-description-budget.js +1 -0
- package/dist/types/issue-description-budget.js.map +1 -1
- package/dist/types/issue-status.d.ts +17 -0
- package/dist/types/issue-status.d.ts.map +1 -1
- package/dist/types/issue-status.js +23 -1
- package/dist/types/issue-status.js.map +1 -1
- package/dist/verify/effect-reconciliation/pending-injection-stamp.d.ts.map +1 -1
- package/dist/verify/effect-reconciliation/pending-injection-stamp.js +1 -0
- package/dist/verify/effect-reconciliation/pending-injection-stamp.js.map +1 -1
- package/dist/verify/effect-reconciliation/verify-reconciliation.d.ts +18 -3
- package/dist/verify/effect-reconciliation/verify-reconciliation.d.ts.map +1 -1
- package/dist/verify/effect-reconciliation/verify-reconciliation.js +26 -6
- package/dist/verify/effect-reconciliation/verify-reconciliation.js.map +1 -1
- package/dist/verify/effect-reconciliation/verify-restatement.d.ts +8 -0
- package/dist/verify/effect-reconciliation/verify-restatement.d.ts.map +1 -1
- package/dist/verify/effect-reconciliation/verify-restatement.js +5 -2
- package/dist/verify/effect-reconciliation/verify-restatement.js.map +1 -1
- package/dist/verify/engine/verification-commit-sharing.d.ts +6 -0
- package/dist/verify/engine/verification-commit-sharing.d.ts.map +1 -1
- package/dist/verify/engine/verification-commit-sharing.js +34 -1
- package/dist/verify/engine/verification-commit-sharing.js.map +1 -1
- package/dist/verify/engine/verification-deps.js +1 -1
- package/dist/verify/engine/verification-engine.d.ts.map +1 -1
- package/dist/verify/engine/verification-engine.js +12 -3
- package/dist/verify/engine/verification-engine.js.map +1 -1
- package/dist/verify/gate-config/verification-config.js +1 -1
- package/dist/verify/gate-verdicts/commit-verdict-record.js +1 -1
- package/dist/verify/gate-verdicts/explicit-gate-outcome.d.ts.map +1 -1
- package/dist/verify/gate-verdicts/explicit-gate-outcome.js +2 -0
- package/dist/verify/gate-verdicts/explicit-gate-outcome.js.map +1 -1
- package/dist/verify/gate-verdicts/gate-run-registry.js +1 -1
- package/dist/verify/gate-verdicts/own-gate-verdict.d.ts +10 -0
- package/dist/verify/gate-verdicts/own-gate-verdict.d.ts.map +1 -1
- package/dist/verify/gate-verdicts/own-gate-verdict.js +3 -2
- package/dist/verify/gate-verdicts/own-gate-verdict.js.map +1 -1
- package/dist/verify/outcome-routing/shortfall-rework-issue.d.ts +101 -0
- package/dist/verify/outcome-routing/shortfall-rework-issue.d.ts.map +1 -0
- package/dist/verify/outcome-routing/shortfall-rework-issue.js +250 -0
- package/dist/verify/outcome-routing/shortfall-rework-issue.js.map +1 -0
- package/dist/verify/outcome-routing/verification-evidence-unavailable-feedback.d.ts.map +1 -1
- package/dist/verify/outcome-routing/verification-evidence-unavailable-feedback.js +4 -1
- package/dist/verify/outcome-routing/verification-evidence-unavailable-feedback.js.map +1 -1
- package/dist/verify/outcome-routing/verification-feedback.d.ts +38 -7
- package/dist/verify/outcome-routing/verification-feedback.d.ts.map +1 -1
- package/dist/verify/outcome-routing/verification-feedback.js +45 -46
- package/dist/verify/outcome-routing/verification-feedback.js.map +1 -1
- package/dist/verify/outcome-routing/verification-history-reset.d.ts +2 -1
- package/dist/verify/outcome-routing/verification-history-reset.d.ts.map +1 -1
- package/dist/verify/outcome-routing/verification-history-reset.js +5 -2
- package/dist/verify/outcome-routing/verification-history-reset.js.map +1 -1
- package/dist/verify/outcome-routing/verification-model-unavailable-hold.d.ts +2 -1
- package/dist/verify/outcome-routing/verification-model-unavailable-hold.d.ts.map +1 -1
- package/dist/verify/outcome-routing/verification-model-unavailable-hold.js +5 -1
- package/dist/verify/outcome-routing/verification-model-unavailable-hold.js.map +1 -1
- package/dist/verify/outcome-routing/verification-rework-issue.d.ts.map +1 -1
- package/dist/verify/outcome-routing/verification-rework-issue.js +4 -1
- package/dist/verify/outcome-routing/verification-rework-issue.js.map +1 -1
- package/dist/verify/outcome-routing/verification-rework-messages.d.ts +8 -2
- package/dist/verify/outcome-routing/verification-rework-messages.d.ts.map +1 -1
- package/dist/verify/outcome-routing/verification-rework-messages.js +18 -7
- package/dist/verify/outcome-routing/verification-rework-messages.js.map +1 -1
- package/dist/verify/run-selection/default-on-guards.d.ts +15 -0
- package/dist/verify/run-selection/default-on-guards.d.ts.map +1 -1
- package/dist/verify/run-selection/default-on-guards.js +18 -1
- package/dist/verify/run-selection/default-on-guards.js.map +1 -1
- package/dist/verify/run-selection/explicit-rearm.d.ts.map +1 -1
- package/dist/verify/run-selection/explicit-rearm.js +1 -0
- package/dist/verify/run-selection/explicit-rearm.js.map +1 -1
- package/dist/verify/run-selection/pre-review-gate-dispatch.d.ts.map +1 -1
- package/dist/verify/run-selection/pre-review-gate-dispatch.js +15 -6
- package/dist/verify/run-selection/pre-review-gate-dispatch.js.map +1 -1
- package/dist/verify/run-selection/reselection-log-line.d.ts +1 -1
- package/dist/verify/run-selection/reselection-log-line.d.ts.map +1 -1
- package/dist/verify/run-selection/reselection-log-line.js +6 -2
- package/dist/verify/run-selection/reselection-log-line.js.map +1 -1
- package/dist/verify/run-selection/unanswered-dispatch.d.ts +20 -0
- package/dist/verify/run-selection/unanswered-dispatch.d.ts.map +1 -0
- package/dist/verify/run-selection/unanswered-dispatch.js +85 -0
- package/dist/verify/run-selection/unanswered-dispatch.js.map +1 -0
- package/dist/verify/run-selection/verification-default-on.d.ts.map +1 -1
- package/dist/verify/run-selection/verification-default-on.js +2 -1
- package/dist/verify/run-selection/verification-default-on.js.map +1 -1
- package/dist/verify/shortfalls/delivery-commit-set.d.ts.map +1 -1
- package/dist/verify/shortfalls/delivery-commit-set.js +2 -1
- package/dist/verify/shortfalls/delivery-commit-set.js.map +1 -1
- package/dist/verify/shortfalls/latest-shortfall-judgment.d.ts +24 -0
- package/dist/verify/shortfalls/latest-shortfall-judgment.d.ts.map +1 -0
- package/dist/verify/shortfalls/latest-shortfall-judgment.js +94 -0
- package/dist/verify/shortfalls/latest-shortfall-judgment.js.map +1 -0
- package/dist/verify/shortfalls/parked-shortfall-reuse.d.ts.map +1 -1
- package/dist/verify/shortfalls/parked-shortfall-reuse.js +20 -6
- package/dist/verify/shortfalls/parked-shortfall-reuse.js.map +1 -1
- package/dist/verify/shortfalls/shortfall-judgment-log.d.ts +12 -0
- package/dist/verify/shortfalls/shortfall-judgment-log.d.ts.map +1 -0
- package/dist/verify/shortfalls/shortfall-judgment-log.js +56 -0
- package/dist/verify/shortfalls/shortfall-judgment-log.js.map +1 -0
- package/dist/verify/shortfalls/shortfall-park-escalation.d.ts.map +1 -1
- package/dist/verify/shortfalls/shortfall-park-escalation.js +6 -2
- package/dist/verify/shortfalls/shortfall-park-escalation.js.map +1 -1
- package/dist/verify/shortfalls/shortfall-park.d.ts +9 -0
- package/dist/verify/shortfalls/shortfall-park.d.ts.map +1 -1
- package/dist/verify/shortfalls/shortfall-park.js +23 -19
- package/dist/verify/shortfalls/shortfall-park.js.map +1 -1
- package/dist/verify/shortfalls/shortfall-repeat.d.ts +14 -0
- package/dist/verify/shortfalls/shortfall-repeat.d.ts.map +1 -1
- package/dist/verify/shortfalls/shortfall-repeat.js +15 -1
- package/dist/verify/shortfalls/shortfall-repeat.js.map +1 -1
- package/dist/verify/shortfalls/shortfall-rework-hold.d.ts +66 -0
- package/dist/verify/shortfalls/shortfall-rework-hold.d.ts.map +1 -0
- package/dist/verify/shortfalls/shortfall-rework-hold.js +230 -0
- package/dist/verify/shortfalls/shortfall-rework-hold.js.map +1 -0
- package/dist/verify/shortfalls/shortfall-rulings.d.ts +40 -10
- package/dist/verify/shortfalls/shortfall-rulings.d.ts.map +1 -1
- package/dist/verify/shortfalls/shortfall-rulings.js +59 -15
- package/dist/verify/shortfalls/shortfall-rulings.js.map +1 -1
- package/dist/worktree/focus-worktree-state.d.ts.map +1 -1
- package/dist/worktree/focus-worktree-state.js +1 -0
- package/dist/worktree/focus-worktree-state.js.map +1 -1
- package/dist/worktree/provision.d.ts.map +1 -1
- package/dist/worktree/provision.js +1 -0
- package/dist/worktree/provision.js.map +1 -1
- package/dist/worktree/safety.d.ts.map +1 -1
- package/dist/worktree/safety.js +1 -0
- package/dist/worktree/safety.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
// PINNED-BY-BEGIN (generated by gen:pinned-by -- do not hand-edit; checked by lint:pinned-by)
|
|
2
|
+
// Pinned by: packages/daemon/src/completion/state-cascade/standing-approval-failed-verdict.test.ts
|
|
3
|
+
// PINNED-BY-END
|
|
4
|
+
import { filterWorkIssues } from '../../types/issue-status.js';
|
|
5
|
+
import { splitOpenWork } from '../../delivery/recorded-concerns.js';
|
|
6
|
+
import { sameCommit } from '../../queries/focus-review/focus-review-approval.js';
|
|
7
|
+
import { readFailedShortfallJudgment } from '../../verify/shortfalls/latest-shortfall-judgment.js';
|
|
8
|
+
import { rulingRecordedSince } from '../../verify/shortfalls/shortfall-park.js';
|
|
9
|
+
import { createLogger } from '../../log/daemon-log.js';
|
|
10
|
+
const log = createLogger({ module: 'state-cascade' });
|
|
11
|
+
/** deliveryId -> the last state logged for it (one line per delivery per state, not one per poll). */
|
|
12
|
+
const lastNoted = new Map();
|
|
13
|
+
/**
|
|
14
|
+
* The deliveries whose latest verify judgment is a shortfall failure (rule 1 of
|
|
15
|
+
* the module header); every other delivery's logged state is forgotten.
|
|
16
|
+
*/
|
|
17
|
+
export function failedVerdictCandidates(deliveries) {
|
|
18
|
+
const out = [];
|
|
19
|
+
for (const delivery of deliveries) {
|
|
20
|
+
const failed = readFailedShortfallJudgment(delivery);
|
|
21
|
+
if (failed !== null)
|
|
22
|
+
out.push({ delivery, failed });
|
|
23
|
+
else
|
|
24
|
+
lastNoted.delete(delivery.id);
|
|
25
|
+
}
|
|
26
|
+
return out;
|
|
27
|
+
}
|
|
28
|
+
/** The judged commit when it is the approved head (rule 2), else null. Pure. */
|
|
29
|
+
function judgedAtHead(failed, head) {
|
|
30
|
+
const sha = failed.judgment.judgedSha;
|
|
31
|
+
if (sha === undefined || sha === '')
|
|
32
|
+
return null;
|
|
33
|
+
return sameCommit(sha, head.approvedSha) || (head.advanceHead !== null && sameCommit(sha, head.advanceHead)) ? sha : null;
|
|
34
|
+
}
|
|
35
|
+
/** What the streak compares for a failed-verdict decline (module header, THE SIGNATURE). Pure. */
|
|
36
|
+
export function failedVerdictSignature(failed, approvedSha) {
|
|
37
|
+
const nodes = failed.judgment.nodes.map((n) => `${n.nodeId}:${n.unjudged ?? ''}:${n.reason}`).join(';');
|
|
38
|
+
return `failed_verdict|${approvedSha}|${failed.outcome ?? 'unrecorded'}|${failed.judgment.judgedSha ?? ''}|${failed.judgment.heldAt}|${nodes}`;
|
|
39
|
+
}
|
|
40
|
+
/** Forget every logged state (the convergence's test seam calls it). */
|
|
41
|
+
export function forgetFailedVerdictNotes() {
|
|
42
|
+
lastNoted.clear();
|
|
43
|
+
}
|
|
44
|
+
function noteOnce(d, state, line) {
|
|
45
|
+
if (lastNoted.get(d.id) === state)
|
|
46
|
+
return;
|
|
47
|
+
lastNoted.set(d.id, state);
|
|
48
|
+
log.info(line());
|
|
49
|
+
}
|
|
50
|
+
/** Why `d` is not counted this poll (module header, NOT COUNTED), or null when nothing answers for it. */
|
|
51
|
+
async function answeredBy(d, failed, deps, concernIds) {
|
|
52
|
+
if (deps.isGateRunSelected?.(d.id) === true)
|
|
53
|
+
return 'a verify run for it is in flight';
|
|
54
|
+
if (deps.readShortfallRulings) {
|
|
55
|
+
const { fingerprint } = await deps.readShortfallRulings(d.id);
|
|
56
|
+
if (rulingRecordedSince(failed.appliedRulings, fingerprint))
|
|
57
|
+
return 'a ruling verify did not apply is in force; it awaits re-judgement';
|
|
58
|
+
}
|
|
59
|
+
const work = filterWorkIssues(await deps.getDeliveryIssues(d.id));
|
|
60
|
+
if (splitOpenWork(work, await concernIds()).owed.length > 0)
|
|
61
|
+
return 'it owes open work; a coding pass is next';
|
|
62
|
+
return null;
|
|
63
|
+
}
|
|
64
|
+
/** The decline for one counted delivery: its judgment, held at the approved head. */
|
|
65
|
+
function declineOf(d, failed, judgedSha, approvedSha, readFailure) {
|
|
66
|
+
const payload = {
|
|
67
|
+
heldAt: failed.judgment.heldAt, judgedSha, outcome: failed.outcome, nodes: failed.judgment.nodes,
|
|
68
|
+
};
|
|
69
|
+
const ids = failed.judgment.nodes.map((n) => n.nodeId).join(', ');
|
|
70
|
+
if (readFailure !== null) {
|
|
71
|
+
return { deliveryId: d.id, deliveryName: d.name, kind: 'read_failed', reason: `a read failed (${readFailure})`, failed: payload };
|
|
72
|
+
}
|
|
73
|
+
return {
|
|
74
|
+
deliveryId: d.id,
|
|
75
|
+
deliveryName: d.name,
|
|
76
|
+
kind: 'failed_verdict',
|
|
77
|
+
reason: `verify's latest judgment of ${approvedSha.slice(0, 12)} is a failure on node(s) ${ids}`,
|
|
78
|
+
signature: failedVerdictSignature(failed, approvedSha),
|
|
79
|
+
failed: payload,
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Examine each failed-verdict candidate at the approved head and return the
|
|
84
|
+
* declines to count (module header). `readConcernIds` is called at most once.
|
|
85
|
+
* Never throws: a read that fails is a `read_failed` decline.
|
|
86
|
+
*/
|
|
87
|
+
export async function examineFailedVerdicts(focus, candidates, head, deps, readConcernIds) {
|
|
88
|
+
let concerns;
|
|
89
|
+
const concernIds = () => (concerns ??= readConcernIds());
|
|
90
|
+
const declines = [];
|
|
91
|
+
for (const { delivery: d, failed } of candidates) {
|
|
92
|
+
const judgedSha = judgedAtHead(failed, head);
|
|
93
|
+
if (judgedSha === null) {
|
|
94
|
+
lastNoted.delete(d.id);
|
|
95
|
+
continue;
|
|
96
|
+
}
|
|
97
|
+
let answered;
|
|
98
|
+
try {
|
|
99
|
+
answered = await answeredBy(d, failed, deps, concernIds);
|
|
100
|
+
}
|
|
101
|
+
catch (err) {
|
|
102
|
+
const decline = declineOf(d, failed, judgedSha, head.approvedSha, err.message);
|
|
103
|
+
noteOnce(d, decline.reason, () => `[state-cascade] Delivery "${d.name}" on "${focus.focusName}" failed verify at the approved head ` +
|
|
104
|
+
`${head.approvedSha.slice(0, 12)} and could not be examined this poll: ${decline.reason}. Left in verify; re-read next poll.`);
|
|
105
|
+
declines.push(decline);
|
|
106
|
+
continue;
|
|
107
|
+
}
|
|
108
|
+
if (answered !== null) {
|
|
109
|
+
noteOnce(d, `answered:${answered}`, () => `[state-cascade] Delivery "${d.name}" on "${focus.focusName}" failed verify at the ` +
|
|
110
|
+
`approved head ${head.approvedSha.slice(0, 12)}; not stranded: ${answered}.`);
|
|
111
|
+
continue;
|
|
112
|
+
}
|
|
113
|
+
const decline = declineOf(d, failed, judgedSha, head.approvedSha, null);
|
|
114
|
+
noteOnce(d, decline.signature ?? decline.reason, () => `[state-cascade] Delivery "${d.name}" on "${focus.focusName}": ${decline.reason}, ` +
|
|
115
|
+
'and nothing re-judges it -- no verify run, no park, no ruling since that judgment, no owed work. Left in verify; ' +
|
|
116
|
+
'filed as stranded if it stands for the stranded poll count. A shortfall ruling on those nodes, or a new delivery commit, moves it.');
|
|
117
|
+
declines.push(decline);
|
|
118
|
+
}
|
|
119
|
+
return declines;
|
|
120
|
+
}
|
|
121
|
+
//# sourceMappingURL=standing-approval-failed-verdict.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"standing-approval-failed-verdict.js","sourceRoot":"","sources":["../../../src/completion/state-cascade/standing-approval-failed-verdict.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { FileEscalationIdempotentParams, FileEscalationIdempotentResult } from '../../supervision/escalation-suppression.js';
|
|
2
|
+
import { type StrandedFailedJudgment } from './failed-verdict-stranded-filing.js';
|
|
2
3
|
/** Consecutive passes with the identical decline before the delivery is filed, and between asks after (~2.5 min at the 30s poll). */
|
|
3
4
|
export declare const STANDING_APPROVAL_STRANDED_POLLS = 5;
|
|
4
5
|
/** The filing's escalation_kind (see the module header for why this existing kind). */
|
|
@@ -6,13 +7,17 @@ export declare const STANDING_APPROVAL_STRANDED_KIND = "verify_gate_unclearable"
|
|
|
6
7
|
/** metadata.diagnosis of the filing (its cause namespace). */
|
|
7
8
|
export declare const STANDING_APPROVAL_STRANDED_DIAGNOSIS = "standing_approval_unconverged";
|
|
8
9
|
/** Why a pass declined a delivery: the class decides whether it is ever filed. */
|
|
9
|
-
export type StandingApprovalDeclineKind = 'census' | 'reconciler' | 'operator_hold' | 'external_hold' | 'shortfall_hold' | 'verdict' | 'read_failed';
|
|
10
|
+
export type StandingApprovalDeclineKind = 'census' | 'reconciler' | 'operator_hold' | 'external_hold' | 'shortfall_hold' | 'verdict' | 'read_failed' | 'failed_verdict';
|
|
10
11
|
/** One decline a pass made. */
|
|
11
12
|
export interface StandingApprovalDecline {
|
|
12
13
|
deliveryId: string;
|
|
13
14
|
deliveryName: string;
|
|
14
15
|
kind: StandingApprovalDeclineKind;
|
|
15
16
|
reason: string;
|
|
17
|
+
/** What the identical-poll streak compares; the reason when absent. */
|
|
18
|
+
signature?: string;
|
|
19
|
+
/** The failed verify judgment that holds it (a failed-verdict decline, or a failed one the pass could not examine). */
|
|
20
|
+
failed?: StrandedFailedJudgment;
|
|
16
21
|
}
|
|
17
22
|
/** The focus the filing is anchored under. */
|
|
18
23
|
export interface StrandedFocus {
|
|
@@ -23,11 +28,19 @@ export interface StrandedFocus {
|
|
|
23
28
|
}
|
|
24
29
|
/** The idempotent filer (supervision/escalation-suppression.ts fileEscalationIdempotent in production). */
|
|
25
30
|
export type StrandedEscalationFiler = (params: FileEscalationIdempotentParams) => Promise<FileEscalationIdempotentResult>;
|
|
26
|
-
/**
|
|
31
|
+
/**
|
|
32
|
+
* Resolves the open rows carrying any of `causeKeys` on the focus and retires the
|
|
33
|
+
* keys where they were absorbed as symptoms; returns the count resolved
|
|
34
|
+
* (supervision/escalation-clearing.ts resolveOpenEscalationsOfCause in production).
|
|
35
|
+
*/
|
|
36
|
+
export type StrandedEscalationResolver = (focusId: string, causeKeys: readonly string[], notes: string) => Promise<number>;
|
|
37
|
+
/** Test seam: forget every streak and every ask. */
|
|
27
38
|
export declare function __resetStandingApprovalStrandedForTests(): void;
|
|
28
39
|
/** The cause key: one filing per delivery per approved commit. Pure. */
|
|
29
40
|
export declare function strandedCauseKey(deliveryId: string, approvedSha: string): string;
|
|
30
|
-
/**
|
|
41
|
+
/** Every stranded cause key a delivery can carry at an approved commit: the passed and the failed-verdict filing. Pure. */
|
|
42
|
+
export declare function strandedCauseKeys(deliveryId: string, approvedSha: string): string[];
|
|
43
|
+
/** The filing for one stranded delivery: the failed-verdict variant when a failed judgment holds it. Pure. */
|
|
31
44
|
export declare function buildStrandedEscalation(focus: StrandedFocus, decline: StandingApprovalDecline, approvedSha: string, polls: number): FileEscalationIdempotentParams;
|
|
32
45
|
/**
|
|
33
46
|
* Record one pass's declines and ask the idempotent gate to file each delivery
|
|
@@ -36,4 +49,17 @@ export declare function buildStrandedEscalation(focus: StrandedFocus, decline: S
|
|
|
36
49
|
* at: one not declined this pass loses its streak. Never throws.
|
|
37
50
|
*/
|
|
38
51
|
export declare function reportStandingApprovalDeclines(focus: StrandedFocus, approvedSha: string | null, seen: readonly string[], declines: readonly StandingApprovalDecline[], file: StrandedEscalationFiler | undefined): Promise<string[]>;
|
|
52
|
+
/** The delivery fields the close half reads. */
|
|
53
|
+
export interface StrandedDeliveryState {
|
|
54
|
+
id: string;
|
|
55
|
+
name: string;
|
|
56
|
+
executionStatus: string | null;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* The close half (module header): resolve the open stranded rows of every
|
|
60
|
+
* delivery whose stranding ended -- `converged` by this pass at `approvedSha`, or
|
|
61
|
+
* one the gate was asked about that now sits outside verify. A resolve that
|
|
62
|
+
* fails is retried on the next pass. Returns the count resolved. Never throws.
|
|
63
|
+
*/
|
|
64
|
+
export declare function resolveClearedStrands(focus: StrandedFocus, deliveries: readonly StrandedDeliveryState[], converged: readonly string[], approvedSha: string | null, resolve: StrandedEscalationResolver | undefined): Promise<number>;
|
|
39
65
|
//# sourceMappingURL=standing-approval-stranded.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standing-approval-stranded.d.ts","sourceRoot":"","sources":["../../../src/completion/state-cascade/standing-approval-stranded.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"standing-approval-stranded.d.ts","sourceRoot":"","sources":["../../../src/completion/state-cascade/standing-approval-stranded.ts"],"names":[],"mappings":"AA0EA,OAAO,KAAK,EACV,8BAA8B,EAC9B,8BAA8B,EAC/B,MAAM,6CAA6C,CAAC;AAMrD,OAAO,EAAgC,KAAK,sBAAsB,EAAE,MAAM,qCAAqC,CAAC;AAKhH,qIAAqI;AACrI,eAAO,MAAM,gCAAgC,IAAI,CAAC;AAElD,uFAAuF;AACvF,eAAO,MAAM,+BAA+B,4BAA4B,CAAC;AAEzE,8DAA8D;AAC9D,eAAO,MAAM,oCAAoC,kCAAmC,CAAC;AAErF,kFAAkF;AAClF,MAAM,MAAM,2BAA2B,GACnC,QAAQ,GAAG,YAAY,GAAG,eAAe,GAAG,eAAe,GAAG,gBAAgB,GAAG,SAAS,GAAG,aAAa,GAAG,gBAAgB,CAAC;AAKlI,+BAA+B;AAC/B,MAAM,WAAW,uBAAuB;IACtC,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,2BAA2B,CAAC;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,uEAAuE;IACvE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uHAAuH;IACvH,MAAM,CAAC,EAAE,sBAAsB,CAAC;CACjC;AAED,8CAA8C;AAC9C,MAAM,WAAW,aAAa;IAC5B,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,2GAA2G;AAC3G,MAAM,MAAM,uBAAuB,GAAG,CAAC,MAAM,EAAE,8BAA8B,KAAK,OAAO,CAAC,8BAA8B,CAAC,CAAC;AAE1H;;;;GAIG;AACH,MAAM,MAAM,0BAA0B,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;AAU3H,oDAAoD;AACpD,wBAAgB,uCAAuC,IAAI,IAAI,CAG9D;AAED,wEAAwE;AACxE,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAEhF;AAED,2HAA2H;AAC3H,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,CAEnF;AAyCD,8GAA8G;AAC9G,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,aAAa,EACpB,OAAO,EAAE,uBAAuB,EAChC,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,GACZ,8BAA8B,CAsChC;AAED;;;;;GAKG;AACH,wBAAsB,8BAA8B,CAClD,KAAK,EAAE,aAAa,EACpB,WAAW,EAAE,MAAM,GAAG,IAAI,EAC1B,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,QAAQ,EAAE,SAAS,uBAAuB,EAAE,EAC5C,IAAI,EAAE,uBAAuB,GAAG,SAAS,GACxC,OAAO,CAAC,MAAM,EAAE,CAAC,CAyBnB;AAED,gDAAgD;AAChD,MAAM,WAAW,qBAAqB;IACpC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC;AAUD;;;;;GAKG;AACH,wBAAsB,qBAAqB,CACzC,KAAK,EAAE,aAAa,EACpB,UAAU,EAAE,SAAS,qBAAqB,EAAE,EAC5C,SAAS,EAAE,SAAS,MAAM,EAAE,EAC5B,WAAW,EAAE,MAAM,GAAG,IAAI,EAC1B,OAAO,EAAE,0BAA0B,GAAG,SAAS,GAC9C,OAAO,CAAC,MAAM,CAAC,CA2BjB"}
|
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
// PINNED-BY-BEGIN (generated by gen:pinned-by -- do not hand-edit; checked by lint:pinned-by)
|
|
2
|
-
// Pinned by: packages/daemon/src/completion/state-cascade/standing-approval-
|
|
2
|
+
// Pinned by: packages/daemon/src/completion/state-cascade/standing-approval-failed-verdict.test.ts,
|
|
3
|
+
// packages/daemon/src/completion/state-cascade/standing-approval-stranded.test.ts,
|
|
4
|
+
// packages/daemon/src/integration/approved-head-hold-release-no-directive-regression.test.ts,
|
|
5
|
+
// packages/daemon/src/integration/failed-verdict-ruling-rejudge-regression.test.ts,
|
|
6
|
+
// packages/daemon/src/supervision/agent-resolvable-promotion-sweep.test.ts
|
|
3
7
|
// PINNED-BY-END
|
|
4
8
|
/**
|
|
5
9
|
* A delivery the standing-approval convergence keeps declining for the SAME reason
|
|
@@ -35,6 +39,25 @@
|
|
|
35
39
|
* again. A delivery that converges, stops being a candidate, or changes reason
|
|
36
40
|
* starts its count over.
|
|
37
41
|
*
|
|
42
|
+
* A FAILED VERDICT is reported here too
|
|
43
|
+
* (completion/state-cascade/standing-approval-failed-verdict.ts): a verify
|
|
44
|
+
* delivery whose latest verify judgment of the approved commit is a failure, with
|
|
45
|
+
* nothing re-judging it, is declined as `failed_verdict` on every poll, counted by
|
|
46
|
+
* the same streak and filed after the same STANDING_APPROVAL_STRANDED_POLLS. Its
|
|
47
|
+
* streak is keyed on the decline's `signature` (the head, the row's outcome and
|
|
48
|
+
* the judgment), not its prose; its filing names every held node and the act that
|
|
49
|
+
* moves it (completion/state-cascade/failed-verdict-stranded-filing.ts) under the
|
|
50
|
+
* same cause family with its own subject (standingApprovalFailedVerdictCauseKey).
|
|
51
|
+
*
|
|
52
|
+
* THE CLOSE HALF. A delivery whose stranding ended -- the pass converged it to
|
|
53
|
+
* done, or a delivery the gate was asked about has left verify -- has its open
|
|
54
|
+
* stranded rows (either variant, for that approved commit) resolved auto_swept,
|
|
55
|
+
* and the keys retired where they were absorbed as symptoms
|
|
56
|
+
* (resolveClearedStrands; production: supervision/escalation-clearing.ts
|
|
57
|
+
* resolveOpenEscalationsOfCause). A convergence asks every time (a restart cannot
|
|
58
|
+
* hide a row from it); leaving verify is known only for a delivery this process
|
|
59
|
+
* asked the gate about. Best-effort, like the filing.
|
|
60
|
+
*
|
|
38
61
|
* Two declines are never filed: an operator hold (the open hold IS the human
|
|
39
62
|
* signal) and an external hold (a declared wait on another product's request,
|
|
40
63
|
* which clears itself). The kind is verify_gate_unclearable, whose self-report
|
|
@@ -46,8 +69,9 @@
|
|
|
46
69
|
*
|
|
47
70
|
* @module completion/state-cascade/standing-approval-stranded
|
|
48
71
|
*/
|
|
49
|
-
import { ESCALATION_DISPOSITIONS, ESCALATION_REASONS } from '@telora/daemon-core';
|
|
50
|
-
import { STANDING_APPROVAL_STRANDED_CAUSE, standingApprovalStrandedCauseKey } from '../../queries/escalations/cause-key.js';
|
|
72
|
+
import { DELIVERY_STATUS, ESCALATION_DISPOSITIONS, ESCALATION_REASONS } from '@telora/daemon-core';
|
|
73
|
+
import { STANDING_APPROVAL_STRANDED_CAUSE, standingApprovalFailedVerdictCauseKey, standingApprovalStrandedCauseKey, } from '../../queries/escalations/cause-key.js';
|
|
74
|
+
import { buildFailedVerdictFilingText } from './failed-verdict-stranded-filing.js';
|
|
51
75
|
import { createLogger } from '../../log/daemon-log.js';
|
|
52
76
|
const log = createLogger({ module: 'state-cascade' });
|
|
53
77
|
/** Consecutive passes with the identical decline before the delivery is filed, and between asks after (~2.5 min at the 30s poll). */
|
|
@@ -60,16 +84,57 @@ export const STANDING_APPROVAL_STRANDED_DIAGNOSIS = STANDING_APPROVAL_STRANDED_C
|
|
|
60
84
|
const NEVER_FILED = new Set(['operator_hold', 'external_hold']);
|
|
61
85
|
/** Per-delivery streak of the identical decline since it began, or since the gate was last asked. */
|
|
62
86
|
const streaks = new Map();
|
|
63
|
-
/**
|
|
87
|
+
/** Delivery id -> the approved commit the gate was last asked to file it at (the close half's memory). */
|
|
88
|
+
const asked = new Map();
|
|
89
|
+
/** Test seam: forget every streak and every ask. */
|
|
64
90
|
export function __resetStandingApprovalStrandedForTests() {
|
|
65
91
|
streaks.clear();
|
|
92
|
+
asked.clear();
|
|
66
93
|
}
|
|
67
94
|
/** The cause key: one filing per delivery per approved commit. Pure. */
|
|
68
95
|
export function strandedCauseKey(deliveryId, approvedSha) {
|
|
69
96
|
return standingApprovalStrandedCauseKey(deliveryId, approvedSha);
|
|
70
97
|
}
|
|
71
|
-
/**
|
|
98
|
+
/** Every stranded cause key a delivery can carry at an approved commit: the passed and the failed-verdict filing. Pure. */
|
|
99
|
+
export function strandedCauseKeys(deliveryId, approvedSha) {
|
|
100
|
+
return [standingApprovalStrandedCauseKey(deliveryId, approvedSha), standingApprovalFailedVerdictCauseKey(deliveryId, approvedSha)];
|
|
101
|
+
}
|
|
102
|
+
/** The filing for a delivery held by a failed verify verdict at the approved commit (module header). Pure. */
|
|
103
|
+
function buildFailedVerdictStrandedEscalation(focus, decline, failed, approvedSha, polls) {
|
|
104
|
+
const text = buildFailedVerdictFilingText({
|
|
105
|
+
focusName: focus.focusName, deliveryName: decline.deliveryName, approvedSha, polls,
|
|
106
|
+
reason: decline.reason, examined: decline.kind === 'failed_verdict', failed,
|
|
107
|
+
});
|
|
108
|
+
return {
|
|
109
|
+
causeKey: standingApprovalFailedVerdictCauseKey(decline.deliveryId, approvedSha),
|
|
110
|
+
organizationId: focus.organizationId,
|
|
111
|
+
sessionId: '',
|
|
112
|
+
issueId: null,
|
|
113
|
+
reasonType: ESCALATION_REASONS.ERROR_ENCOUNTERED,
|
|
114
|
+
disposition: ESCALATION_DISPOSITIONS.NEEDS_OPERATOR,
|
|
115
|
+
humanAct: { kind: 'unreachable_capability', act: text.act },
|
|
116
|
+
anchor: { deliveryId: decline.deliveryId, focusId: focus.focusId },
|
|
117
|
+
productId: focus.productId,
|
|
118
|
+
escalationKind: STANDING_APPROVAL_STRANDED_KIND,
|
|
119
|
+
description: text.description,
|
|
120
|
+
whatWasTried: text.whatWasTried,
|
|
121
|
+
helpNeeded: text.act,
|
|
122
|
+
metadata: {
|
|
123
|
+
cause: STANDING_APPROVAL_STRANDED_KIND,
|
|
124
|
+
diagnosis: STANDING_APPROVAL_STRANDED_DIAGNOSIS,
|
|
125
|
+
deliveryName: decline.deliveryName,
|
|
126
|
+
approvedSha,
|
|
127
|
+
declineKind: decline.kind,
|
|
128
|
+
reason: decline.reason,
|
|
129
|
+
consecutivePolls: polls,
|
|
130
|
+
...text.metadata,
|
|
131
|
+
},
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
/** The filing for one stranded delivery: the failed-verdict variant when a failed judgment holds it. Pure. */
|
|
72
135
|
export function buildStrandedEscalation(focus, decline, approvedSha, polls) {
|
|
136
|
+
if (decline.failed)
|
|
137
|
+
return buildFailedVerdictStrandedEscalation(focus, decline, decline.failed, approvedSha, polls);
|
|
73
138
|
const sha = approvedSha.slice(0, 12);
|
|
74
139
|
const act = `Decide delivery "${decline.deliveryName}" on focus "${focus.focusName}": it passed verify at ${sha}, the ` +
|
|
75
140
|
`commit the focus's standing approval judged, but cannot converge to done because ${decline.reason}. Clear ` +
|
|
@@ -117,15 +182,17 @@ export async function reportStandingApprovalDeclines(focus, approvedSha, seen, d
|
|
|
117
182
|
streaks.delete(id);
|
|
118
183
|
const filed = [];
|
|
119
184
|
for (const d of declines) {
|
|
185
|
+
const signature = d.signature ?? d.reason;
|
|
120
186
|
const prior = streaks.get(d.deliveryId);
|
|
121
|
-
const streak = {
|
|
187
|
+
const streak = { signature, count: prior?.signature === signature ? prior.count + 1 : 1 };
|
|
122
188
|
streaks.set(d.deliveryId, streak);
|
|
123
189
|
if (streak.count < STANDING_APPROVAL_STRANDED_POLLS || NEVER_FILED.has(d.kind))
|
|
124
190
|
continue;
|
|
125
191
|
if (approvedSha === null || file === undefined)
|
|
126
192
|
continue;
|
|
127
193
|
// Asked now; the next ask is STANDING_APPROVAL_STRANDED_POLLS passes on. The open row suppresses it, a resolved one does not.
|
|
128
|
-
streaks.set(d.deliveryId, {
|
|
194
|
+
streaks.set(d.deliveryId, { signature, count: 0 });
|
|
195
|
+
asked.set(d.deliveryId, approvedSha);
|
|
129
196
|
try {
|
|
130
197
|
const result = await file(buildStrandedEscalation(focus, d, approvedSha, streak.count));
|
|
131
198
|
if (result.filed) {
|
|
@@ -139,4 +206,51 @@ export async function reportStandingApprovalDeclines(focus, approvedSha, seen, d
|
|
|
139
206
|
}
|
|
140
207
|
return filed;
|
|
141
208
|
}
|
|
209
|
+
/** Why a delivery's stranding ended, for the resolution note. Pure. */
|
|
210
|
+
function endedNote(d, convergedHere, approvedSha) {
|
|
211
|
+
const name = d ? `"${d.name}"` : 'the delivery';
|
|
212
|
+
return convergedHere
|
|
213
|
+
? `Auto-resolved by the daemon: delivery ${name} converged to done on the standing approval at ${approvedSha.slice(0, 12)}; it is no longer stranded.`
|
|
214
|
+
: `Auto-resolved by the daemon: delivery ${name} left verify (now ${d?.executionStatus ?? 'unknown'}); it is no longer stranded at the approved head ${approvedSha.slice(0, 12)}.`;
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* The close half (module header): resolve the open stranded rows of every
|
|
218
|
+
* delivery whose stranding ended -- `converged` by this pass at `approvedSha`, or
|
|
219
|
+
* one the gate was asked about that now sits outside verify. A resolve that
|
|
220
|
+
* fails is retried on the next pass. Returns the count resolved. Never throws.
|
|
221
|
+
*/
|
|
222
|
+
export async function resolveClearedStrands(focus, deliveries, converged, approvedSha, resolve) {
|
|
223
|
+
if (resolve === undefined)
|
|
224
|
+
return 0;
|
|
225
|
+
// Delivery id -> every approved commit its stranding may have been filed at.
|
|
226
|
+
const ended = new Map();
|
|
227
|
+
const end = (id, sha) => { ended.set(id, (ended.get(id) ?? new Set()).add(sha)); };
|
|
228
|
+
if (approvedSha !== null)
|
|
229
|
+
for (const id of converged)
|
|
230
|
+
end(id, approvedSha);
|
|
231
|
+
for (const d of deliveries) {
|
|
232
|
+
const sha = asked.get(d.id);
|
|
233
|
+
if (sha !== undefined && (d.executionStatus !== DELIVERY_STATUS.VERIFY || converged.includes(d.id)))
|
|
234
|
+
end(d.id, sha);
|
|
235
|
+
}
|
|
236
|
+
let resolved = 0;
|
|
237
|
+
for (const [id, shas] of ended) {
|
|
238
|
+
const sha = asked.get(id);
|
|
239
|
+
asked.delete(id);
|
|
240
|
+
const d = deliveries.find((x) => x.id === id);
|
|
241
|
+
const keys = [...shas].flatMap((at) => strandedCauseKeys(id, at));
|
|
242
|
+
const at = approvedSha !== null && converged.includes(id) ? approvedSha : [...shas][0] ?? '';
|
|
243
|
+
try {
|
|
244
|
+
const n = await resolve(focus.focusId, keys, endedNote(d, converged.includes(id), at));
|
|
245
|
+
resolved += n;
|
|
246
|
+
if (n > 0)
|
|
247
|
+
log.info(`[state-cascade] Delivery "${d?.name ?? id}" on "${focus.focusName}" is no longer stranded; resolved its ${n} stranded escalation(s).`);
|
|
248
|
+
}
|
|
249
|
+
catch (err) {
|
|
250
|
+
asked.set(id, sha ?? at);
|
|
251
|
+
log.warn(`[state-cascade] failed to resolve the stranded-delivery escalation for "${d?.name ?? id}" (retried next poll): ${err.message}`);
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
return resolved;
|
|
255
|
+
}
|
|
142
256
|
//# sourceMappingURL=standing-approval-stranded.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standing-approval-stranded.js","sourceRoot":"","sources":["../../../src/completion/state-cascade/standing-approval-stranded.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAC9F,
|
|
1
|
+
{"version":3,"file":"standing-approval-stranded.js","sourceRoot":"","sources":["../../../src/completion/state-cascade/standing-approval-stranded.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,6 +15,7 @@ import { type StandingApprovalDeps } from './standing-approval-convergence.js';
|
|
|
15
15
|
import { type RecordedConcernReader } from '../../delivery/recorded-concerns.js';
|
|
16
16
|
import { type BranchAheadRead, type CompletionMergePendingDeps } from '../../merge/completion-merge-pending.js';
|
|
17
17
|
import { type FocusHeadGateVerdict, type ReviewRequestGateDeps } from './review-request-gate.js';
|
|
18
|
+
import { type FocusHeadVerifyJudgment, type ReviewVerifyJudgmentDeps } from './review-verify-judgment-gate.js';
|
|
18
19
|
/** Injectable dependencies for cascade functions (testing). */
|
|
19
20
|
export interface CascadeDeps {
|
|
20
21
|
getFocusDeliveries: (focusId: string) => Promise<FocusDeliveryInfo[]>;
|
|
@@ -96,6 +97,17 @@ export interface CascadeDeps {
|
|
|
96
97
|
* object omitting it behaves as before (no gate).
|
|
97
98
|
*/
|
|
98
99
|
readHeadGateVerdict?: (focusId: string, verifyDeliveries: readonly FocusDeliveryInfo[]) => Promise<FocusHeadGateVerdict>;
|
|
100
|
+
/**
|
|
101
|
+
* Whether verify has FINISHED judging the focus HEAD across its verify deliveries
|
|
102
|
+
* (completion/state-cascade/review-verify-judgment-gate.ts): no verify run in
|
|
103
|
+
* flight for any of them, and a verify outcome recorded for that HEAD -- effect
|
|
104
|
+
* reconciliation included -- for each one verify judges. checkAutoReview reads it
|
|
105
|
+
* after the gate verdict, whose record is written before the reconciliation, and
|
|
106
|
+
* opens the window only on `judged`; a recorded failure routes rework instead.
|
|
107
|
+
* Fails CLOSED. Wired per focus by runFocusCascadePass; a partial test deps
|
|
108
|
+
* object omitting it behaves as before (the gate verdict alone decides).
|
|
109
|
+
*/
|
|
110
|
+
readVerifyJudgment?: (focusId: string, verifyDeliveries: readonly FocusDeliveryInfo[]) => Promise<FocusHeadVerifyJudgment>;
|
|
99
111
|
}
|
|
100
112
|
/**
|
|
101
113
|
* Every collaborator of one cascade pass (runCascadeChecks), bound once at the
|
|
@@ -122,6 +134,8 @@ export interface StateCascadeContext {
|
|
|
122
134
|
reviewCycleCapHold: ReviewCycleCapHoldDeps;
|
|
123
135
|
/** The gate verdict reads the review request waits on (completion/state-cascade/review-request-gate.ts). */
|
|
124
136
|
reviewRequestGate: ReviewRequestGateDeps;
|
|
137
|
+
/** The verify-outcome reads the review request waits on after the gate verdict (completion/state-cascade/review-verify-judgment-gate.ts). */
|
|
138
|
+
reviewVerifyJudgment: ReviewVerifyJudgmentDeps;
|
|
125
139
|
/** The pending completion merge that holds the arm through it (merge/completion-merge-pending.ts). */
|
|
126
140
|
completionMergePending: CompletionMergePendingDeps & {
|
|
127
141
|
readBranchAhead: (repoPath: string, branchName: string, integrationBranch: string) => BranchAheadRead;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state-cascade.d.ts","sourceRoot":"","sources":["../../../src/completion/state-cascade/state-cascade.ts"],"names":[],"mappings":"AAoCA,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACzE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0CAA0C,CAAC;AAEjF,OAAO,EAEL,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACxB,MAAM,6BAA6B,CAAC;AAErC,OAAO,EAAqC,KAAK,2BAA2B,EAAE,MAAM,qDAAqD,CAAC;AAC1I,OAAO,EAA8C,KAAK,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC7G,OAAO,EAGL,KAAK,gBAAgB,EACrB,KAAK,mBAAmB,EACzB,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAGL,KAAK,6BAA6B,EAClC,KAAK,oBAAoB,EAC1B,MAAM,iDAAiD,CAAC;AACzD,OAAO,EAAuB,KAAK,oBAAoB,EAAE,MAAM,yCAAyC,CAAC;AACzG,OAAO,EAAmC,KAAK,sBAAsB,EAAE,MAAM,2CAA2C,CAAC;AACzH,OAAO,EAA6B,KAAK,sBAAsB,EAAE,MAAM,4CAA4C,CAAC;AACpH,OAAO,EAGL,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACxB,MAAM,+CAA+C,CAAC;AACvD,OAAO,EAGL,KAAK,kBAAkB,EACvB,KAAK,0BAA0B,EAChC,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAA8B,KAAK,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAC3G,OAAO,EAAwB,KAAK,qBAAqB,EAAE,MAAM,qCAAqC,CAAC;AAEvG,OAAO,EAIL,KAAK,eAAe,EACpB,KAAK,0BAA0B,EAChC,MAAM,yCAAyC,CAAC;AACjD,OAAO,EAAsD,KAAK,oBAAoB,EAAE,KAAK,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"state-cascade.d.ts","sourceRoot":"","sources":["../../../src/completion/state-cascade/state-cascade.ts"],"names":[],"mappings":"AAoCA,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACzE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0CAA0C,CAAC;AAEjF,OAAO,EAEL,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACxB,MAAM,6BAA6B,CAAC;AAErC,OAAO,EAAqC,KAAK,2BAA2B,EAAE,MAAM,qDAAqD,CAAC;AAC1I,OAAO,EAA8C,KAAK,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC7G,OAAO,EAGL,KAAK,gBAAgB,EACrB,KAAK,mBAAmB,EACzB,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAGL,KAAK,6BAA6B,EAClC,KAAK,oBAAoB,EAC1B,MAAM,iDAAiD,CAAC;AACzD,OAAO,EAAuB,KAAK,oBAAoB,EAAE,MAAM,yCAAyC,CAAC;AACzG,OAAO,EAAmC,KAAK,sBAAsB,EAAE,MAAM,2CAA2C,CAAC;AACzH,OAAO,EAA6B,KAAK,sBAAsB,EAAE,MAAM,4CAA4C,CAAC;AACpH,OAAO,EAGL,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACxB,MAAM,+CAA+C,CAAC;AACvD,OAAO,EAGL,KAAK,kBAAkB,EACvB,KAAK,0BAA0B,EAChC,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAA8B,KAAK,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAC3G,OAAO,EAAwB,KAAK,qBAAqB,EAAE,MAAM,qCAAqC,CAAC;AAEvG,OAAO,EAIL,KAAK,eAAe,EACpB,KAAK,0BAA0B,EAChC,MAAM,yCAAyC,CAAC;AACjD,OAAO,EAAsD,KAAK,oBAAoB,EAAE,KAAK,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACrJ,OAAO,EAIL,KAAK,uBAAuB,EAC5B,KAAK,wBAAwB,EAC9B,MAAM,kCAAkC,CAAC;AAM1C,+DAA+D;AAC/D,MAAM,WAAW,WAAW;IAC1B,kBAAkB,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC;IACtE,8GAA8G;IAC9G,oBAAoB,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,sBAAsB,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACjH,sBAAsB,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3D;;;;;;;;;OASG;IACH,qBAAqB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC;IACrD;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACtE;;;;;;;;;;;;OAYG;IACH,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACnE;;;;;;;OAOG;IACH,oBAAoB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC7D;;;;;OAKG;IACH,sBAAsB,CAAC,EAAE,qBAAqB,CAAC;IAC/C;;;;;;;OAOG;IACH,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,SAAS,mBAAmB,EAAE,CAAC,CAAC;IAC9E;;;;;;;;OAQG;IACH,sBAAsB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAC1E;;;;;;;OAOG;IACH,mBAAmB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,SAAS,iBAAiB,EAAE,KAAK,OAAO,CAAC,oBAAoB,CAAC,CAAC;IACzH;;;;;;;;;OASG;IACH,kBAAkB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,SAAS,iBAAiB,EAAE,KAAK,OAAO,CAAC,uBAAuB,CAAC,CAAC;CAC5H;AAED;;;;;GAKG;AACH,MAAM,WAAW,mBAAmB;IAClC,qFAAqF;IACrF,OAAO,EAAE,WAAW,CAAC;IACrB,gBAAgB,EAAE,OAAO,gBAAgB,CAAC;IAC1C,kBAAkB,EAAE,0BAA0B,CAAC;IAC/C,WAAW,EAAE,eAAe,CAAC;IAC7B,kHAAkH;IAClH,gBAAgB,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,sBAAsB,EAAE,MAAM,OAAO,CAAC,kBAAkB,CAAC,KAAK,oBAAoB,CAAC;IAC1I,WAAW,EAAE,eAAe,CAAC;IAC7B,eAAe,EAAE,mBAAmB,CAAC;IACrC,YAAY,EAAE,gBAAgB,CAAC;IAC/B,gBAAgB,EAAE,oBAAoB,CAAC;IACvC,yBAAyB,EAAE,6BAA6B,CAAC;IACzD,gBAAgB,EAAE,oBAAoB,CAAC;IACvC,kBAAkB,EAAE,sBAAsB,CAAC;IAC3C,4FAA4F;IAC5F,kBAAkB,EAAE,sBAAsB,CAAC;IAC3C,4GAA4G;IAC5G,iBAAiB,EAAE,qBAAqB,CAAC;IACzC,6IAA6I;IAC7I,oBAAoB,EAAE,wBAAwB,CAAC;IAC/C,sGAAsG;IACtG,sBAAsB,EAAE,0BAA0B,GAAG;QACnD,eAAe,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,KAAK,eAAe,CAAC;KACvG,CAAC;CACH;AAED,sHAAsH;AACtH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,EAAE,sBAAsB,CAAC,EAAE,MAAM,EAAE,eAAe,GAAG,WAAW,CAAC,sBAAsB,CAAC,CAMzJ;AAED,qGAAqG;AACrG,wBAAsB,oCAAoC,CACxD,KAAK,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,EAC/D,UAAU,EAAE,iBAAiB,EAAE,EAC/B,MAAM,EAAE,eAAe,EACvB,GAAG,EAAE,IAAI,CAAC,mBAAmB,EAAE,wBAAwB,CAAC,GACvD,OAAO,CAAC,IAAI,CAAC,CAQf;AAkED;;;;;;;;;;GAUG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAExE;AAcD;;;GAGG;AACH,wBAAgB,iCAAiC,IAAI,IAAI,CAMxD;AA+HD;;;;;;;;;;GAUG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,2BAA2B,EAClC,cAAc,EAAE,cAAc,GAAG,IAAI,EACrC,iBAAiB,EAAE,MAAM,GAAG,IAAI,EAChC,UAAU,EAAE,iBAAiB,EAAE,EAC/B,IAAI,EAAE,WAAW,GAChB,OAAO,CAAC,IAAI,CAAC,CAIf;AAsGD;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,2BAA2B,EAClC,iBAAiB,EAAE,MAAM,GAAG,IAAI,EAChC,UAAU,EAAE,iBAAiB,EAAE,EAC/B,kBAAkB,EAAE,MAAM,GAAG,IAAI,EACjC,IAAI,EAAE,WAAW,GAChB,OAAO,CAAC,IAAI,CAAC,CAsEf;AAgLD;;;;GAIG;AACH,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAwBpG"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// PINNED-BY-BEGIN (generated by gen:pinned-by -- do not hand-edit; checked by lint:pinned-by)
|
|
2
|
-
// Pinned by:
|
|
2
|
+
// Pinned by: 27 tests -- run: npm run gen:pinned-by -- --list packages/daemon/src/completion/state-cascade/state-cascade.ts
|
|
3
3
|
// PINNED-BY-END
|
|
4
4
|
/**
|
|
5
5
|
* Deterministic state cascade engine.
|
|
@@ -49,6 +49,7 @@ import { NO_RECORDED_CONCERNS } from '../../delivery/recorded-concerns.js';
|
|
|
49
49
|
import { createLogger } from '../../log/daemon-log.js';
|
|
50
50
|
import { completionMergePendingFor, noteCompletionMergePendingWritten, reconcileCompletionMergePending, } from '../../merge/completion-merge-pending.js';
|
|
51
51
|
import { readFocusHeadGateVerdict, verdictOpensReviewWindow } from './review-request-gate.js';
|
|
52
|
+
import { declinesReviewBeforeVerifyJudged, readFocusHeadVerifyJudgment, __resetReviewVerifyJudgmentGateForTests, } from './review-verify-judgment-gate.js';
|
|
52
53
|
import { recordPreReviewRunNotOwed } from '../../daemon-state/pre-review-run-not-owed.js';
|
|
53
54
|
const log = createLogger({ module: 'state-cascade' });
|
|
54
55
|
/** The window-open write for this pass: it marks the completion merge pending unless git proves the branch merged. */
|
|
@@ -163,6 +164,7 @@ export function __resetReviewSignaturesForTesting() {
|
|
|
163
164
|
settledSweptFocuses.clear();
|
|
164
165
|
parkedFocusesLogged.clear();
|
|
165
166
|
gateDeclineLogged.clear();
|
|
167
|
+
__resetReviewVerifyJudgmentGateForTests();
|
|
166
168
|
}
|
|
167
169
|
/**
|
|
168
170
|
* When a focus reaches the verifying phase and auto-review is enabled
|
|
@@ -243,12 +245,14 @@ function declinesReviewWindowOnIssues(focusId, next) {
|
|
|
243
245
|
}
|
|
244
246
|
return false;
|
|
245
247
|
}
|
|
246
|
-
function logParkedFocusOnce(focusId,
|
|
248
|
+
function logParkedFocusOnce(focusId, parkedIds, verifyCount) {
|
|
247
249
|
if (parkedFocusesLogged.has(focusId))
|
|
248
250
|
return;
|
|
249
251
|
parkedFocusesLogged.add(focusId);
|
|
250
|
-
|
|
251
|
-
|
|
252
|
+
const which = parkedIds.length === verifyCount ? `all ${verifyCount}` : `${parkedIds.length} of ${verifyCount}`;
|
|
253
|
+
log.info(`[state-cascade] Not opening a review window on focus ${focusId}: ${which} verify delivery(ies) are parked on a ` +
|
|
254
|
+
`repeating verify shortfall (${parkedIds.join(', ')}) -- a review would approve the head a parked one failed, so ` +
|
|
255
|
+
`neither review nor coding is next until a ruling or a new delivery commit releases the park (its escalation names it).`);
|
|
252
256
|
}
|
|
253
257
|
/** A head-verdict reader that reads at most once per pass: the review request and the record share one answer. */
|
|
254
258
|
function readHeadVerdictOnce(read) {
|
|
@@ -319,9 +323,10 @@ async function decideAutoReview(focusId, phase, pipelineConfig, reviewRequestedA
|
|
|
319
323
|
});
|
|
320
324
|
if (next.step === 'not_converged')
|
|
321
325
|
return;
|
|
322
|
-
//
|
|
326
|
+
// A verify delivery is parked on a repeating shortfall and no unparked one owes work: no review window (it would
|
|
327
|
+
// approve the head the parked one failed), no skip record -- verify re-judgement on a ruling or a new commit is next.
|
|
323
328
|
if (next.step === 'parked') {
|
|
324
|
-
logParkedFocusOnce(focusId, next.verifyDeliveries.length);
|
|
329
|
+
logParkedFocusOnce(focusId, next.parkedDeliveries.map((d) => d.id), next.verifyDeliveries.length);
|
|
325
330
|
return;
|
|
326
331
|
}
|
|
327
332
|
parkedFocusesLogged.delete(focusId);
|
|
@@ -362,6 +367,9 @@ async function decideAutoReview(focusId, phase, pipelineConfig, reviewRequestedA
|
|
|
362
367
|
// The full gate runs once per focus HEAD, before review: the window opens only on its passing verdict.
|
|
363
368
|
if (await declinesReviewWithoutPassingVerdict(focusId, verifyDeliveries, deps.readHeadGateVerdict))
|
|
364
369
|
return;
|
|
370
|
+
// That verdict is recorded before verify reconciles the effects: the window waits for verify to FINISH judging HEAD.
|
|
371
|
+
if (await declinesReviewBeforeVerifyJudged(focusId, verifyDeliveries, deps.readVerifyJudgment))
|
|
372
|
+
return;
|
|
365
373
|
try {
|
|
366
374
|
await deps.setReviewRequestedAt(focusId, new Date().toISOString());
|
|
367
375
|
lastReviewSignature.set(focusId, signature);
|
|
@@ -502,6 +510,7 @@ async function runFocusCascadePass(pc, focus, ctx) {
|
|
|
502
510
|
readReviewHeadApproval: readHeadApproval,
|
|
503
511
|
readBreakerHold: () => readBreakerHold({ focusId: focus.focus_id, branchName: focus.branch_name, repoPath: pc.repoPath }, ctx.breakerHold),
|
|
504
512
|
readHeadGateVerdict: (focusId, verifyDeliveries) => readFocusHeadGateVerdict(ctx.reviewRequestGate, { productId: pc.productId, focusId, focusReadOnly: focus.read_only }, verifyDeliveries),
|
|
513
|
+
readVerifyJudgment: (focusId, verifyDeliveries) => readFocusHeadVerifyJudgment(ctx.reviewVerifyJudgment, { productId: pc.productId, focusId, focusReadOnly: focus.read_only }, verifyDeliveries),
|
|
505
514
|
});
|
|
506
515
|
// A verify delivery released at the approved head closes on that approval, not on a second review of the same commit.
|
|
507
516
|
await convergeOnStandingApproval({ organizationId: pc.organizationId, productId: pc.productId, focusId: focus.focus_id, focusName: focus.focus_name, readOnly: focus.read_only }, deliveries, ctx.standingApproval(pc.productId, focus.focus_id, readHeadApproval));
|