@telora/daemon 0.22.131 → 0.22.136
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 +6 -3
- package/dist/audit/audit-hooks.d.ts +6 -2
- package/dist/audit/audit-hooks.d.ts.map +1 -1
- package/dist/audit/audit-hooks.js +12 -5
- package/dist/audit/audit-hooks.js.map +1 -1
- package/dist/audit/audit-phase.js +1 -1
- package/dist/audit/audit-phase.js.map +1 -1
- package/dist/backends/index.d.ts.map +1 -1
- package/dist/backends/index.js +1 -0
- package/dist/backends/index.js.map +1 -1
- package/dist/completion/completion-phase-registry.d.ts +4 -0
- package/dist/completion/completion-phase-registry.d.ts.map +1 -1
- package/dist/completion/completion-phase-registry.js +63 -18
- package/dist/completion/completion-phase-registry.js.map +1 -1
- package/dist/completion/exit-classification.d.ts.map +1 -1
- package/dist/completion/exit-classification.js +1 -0
- package/dist/completion/exit-classification.js.map +1 -1
- package/dist/completion/review-approved-head-gate.d.ts +53 -0
- package/dist/completion/review-approved-head-gate.d.ts.map +1 -0
- package/dist/completion/review-approved-head-gate.js +124 -0
- package/dist/completion/review-approved-head-gate.js.map +1 -0
- package/dist/completion/review-census-record.d.ts +52 -0
- package/dist/completion/review-census-record.d.ts.map +1 -0
- package/dist/completion/review-census-record.js +145 -0
- package/dist/completion/review-census-record.js.map +1 -0
- package/dist/completion/review-exit-deps.d.ts +5 -1
- package/dist/completion/review-exit-deps.d.ts.map +1 -1
- package/dist/completion/review-exit-deps.js +7 -2
- package/dist/completion/review-exit-deps.js.map +1 -1
- package/dist/completion/review-exit-phase.d.ts.map +1 -1
- package/dist/completion/review-exit-phase.js +29 -16
- package/dist/completion/review-exit-phase.js.map +1 -1
- package/dist/completion/review-exit-progress.d.ts +8 -0
- package/dist/completion/review-exit-progress.d.ts.map +1 -1
- package/dist/completion/review-exit-progress.js +14 -0
- package/dist/completion/review-exit-progress.js.map +1 -1
- package/dist/completion/review-exit-shortfall-park.d.ts +14 -0
- package/dist/completion/review-exit-shortfall-park.d.ts.map +1 -0
- package/dist/completion/review-exit-shortfall-park.js +52 -0
- package/dist/completion/review-exit-shortfall-park.js.map +1 -0
- package/dist/completion/review-exit-shortfall.js +1 -1
- package/dist/completion/review-exit-shortfall.js.map +1 -1
- package/dist/completion/review-exit-verdict-gate.d.ts +58 -0
- package/dist/completion/review-exit-verdict-gate.d.ts.map +1 -1
- package/dist/completion/review-exit-verdict-gate.js +68 -8
- package/dist/completion/review-exit-verdict-gate.js.map +1 -1
- package/dist/completion/review-next-step.d.ts +15 -3
- package/dist/completion/review-next-step.d.ts.map +1 -1
- package/dist/completion/review-next-step.js +7 -2
- package/dist/completion/review-next-step.js.map +1 -1
- package/dist/completion/standing-approval-convergence.d.ts +68 -0
- package/dist/completion/standing-approval-convergence.d.ts.map +1 -0
- package/dist/completion/standing-approval-convergence.js +230 -0
- package/dist/completion/standing-approval-convergence.js.map +1 -0
- package/dist/completion/standing-approval-deps.d.ts +5 -0
- package/dist/completion/standing-approval-deps.d.ts.map +1 -0
- package/dist/completion/standing-approval-deps.js +37 -0
- package/dist/completion/standing-approval-deps.js.map +1 -0
- package/dist/completion/state-cascade.d.ts +11 -0
- package/dist/completion/state-cascade.d.ts.map +1 -1
- package/dist/completion/state-cascade.js +40 -1
- package/dist/completion/state-cascade.js.map +1 -1
- package/dist/completion/team-lifecycle.d.ts +14 -2
- package/dist/completion/team-lifecycle.d.ts.map +1 -1
- package/dist/completion/team-lifecycle.js +36 -36
- package/dist/completion/team-lifecycle.js.map +1 -1
- package/dist/completion/terminated-work-reconcile.d.ts +3 -1
- package/dist/completion/terminated-work-reconcile.d.ts.map +1 -1
- package/dist/completion/terminated-work-reconcile.js +24 -11
- package/dist/completion/terminated-work-reconcile.js.map +1 -1
- package/dist/delivery/delivery-advance-block.d.ts +6 -0
- package/dist/delivery/delivery-advance-block.d.ts.map +1 -1
- package/dist/delivery/delivery-advance-block.js +29 -3
- package/dist/delivery/delivery-advance-block.js.map +1 -1
- package/dist/delivery/delivery-reconciler.d.ts.map +1 -1
- package/dist/delivery/delivery-reconciler.js +4 -1
- package/dist/delivery/delivery-reconciler.js.map +1 -1
- package/dist/delivery/operator-hold.d.ts.map +1 -1
- package/dist/delivery/operator-hold.js +3 -1
- package/dist/delivery/operator-hold.js.map +1 -1
- package/dist/directive/directive-executor.d.ts.map +1 -1
- package/dist/directive/directive-executor.js +6 -0
- package/dist/directive/directive-executor.js.map +1 -1
- package/dist/directive/directive-queue.d.ts +8 -0
- package/dist/directive/directive-queue.d.ts.map +1 -1
- package/dist/directive/directive-queue.js +20 -0
- package/dist/directive/directive-queue.js.map +1 -1
- package/dist/directive/phase-sync.d.ts +5 -0
- package/dist/directive/phase-sync.d.ts.map +1 -1
- package/dist/directive/phase-sync.js +11 -1
- package/dist/directive/phase-sync.js.map +1 -1
- package/dist/directive/stranded-review-reroute.d.ts +37 -0
- package/dist/directive/stranded-review-reroute.d.ts.map +1 -0
- package/dist/directive/stranded-review-reroute.js +150 -0
- package/dist/directive/stranded-review-reroute.js.map +1 -0
- package/dist/focus/focus-engine.d.ts.map +1 -1
- package/dist/focus/focus-engine.js +15 -3
- package/dist/focus/focus-engine.js.map +1 -1
- package/dist/focus/focus-executor.d.ts.map +1 -1
- package/dist/focus/focus-executor.js +9 -65
- package/dist/focus/focus-executor.js.map +1 -1
- package/dist/focus/focus-lifecycle.d.ts +12 -0
- package/dist/focus/focus-lifecycle.d.ts.map +1 -1
- package/dist/focus/focus-lifecycle.js +66 -37
- package/dist/focus/focus-lifecycle.js.map +1 -1
- package/dist/focus/focus-phase.d.ts.map +1 -1
- package/dist/focus/focus-phase.js +6 -0
- package/dist/focus/focus-phase.js.map +1 -1
- package/dist/focus/focus-spawn-decision.d.ts.map +1 -1
- package/dist/focus/focus-spawn-decision.js +1 -0
- package/dist/focus/focus-spawn-decision.js.map +1 -1
- package/dist/focus/focus-team-state.d.ts +10 -0
- package/dist/focus/focus-team-state.d.ts.map +1 -1
- package/dist/focus/focus-team-state.js +19 -1
- package/dist/focus/focus-team-state.js.map +1 -1
- package/dist/focus/listener-auto-advance.d.ts.map +1 -1
- package/dist/focus/listener-auto-advance.js +1 -0
- package/dist/focus/listener-auto-advance.js.map +1 -1
- package/dist/focus/listener-spawn.d.ts +10 -0
- package/dist/focus/listener-spawn.d.ts.map +1 -1
- package/dist/focus/listener-spawn.js +46 -4
- package/dist/focus/listener-spawn.js.map +1 -1
- package/dist/focus/listener-state.d.ts.map +1 -1
- package/dist/focus/listener-state.js +11 -1
- package/dist/focus/listener-state.js.map +1 -1
- package/dist/focus/listener.d.ts +42 -0
- package/dist/focus/listener.d.ts.map +1 -1
- package/dist/focus/listener.js +62 -33
- package/dist/focus/listener.js.map +1 -1
- package/dist/focus/pending-review-approved-head.d.ts +41 -0
- package/dist/focus/pending-review-approved-head.d.ts.map +1 -0
- package/dist/focus/pending-review-approved-head.js +198 -0
- package/dist/focus/pending-review-approved-head.js.map +1 -0
- package/dist/focus/pending-spawn-pass-deps.d.ts +5 -0
- package/dist/focus/pending-spawn-pass-deps.d.ts.map +1 -1
- package/dist/focus/pending-spawn-pass-deps.js +2 -1
- package/dist/focus/pending-spawn-pass-deps.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 +26 -4
- package/dist/focus/pending-spawn-review-next-step.js.map +1 -1
- package/dist/focus/review-spawn-coverage.d.ts +87 -0
- package/dist/focus/review-spawn-coverage.d.ts.map +1 -0
- package/dist/focus/review-spawn-coverage.js +104 -0
- package/dist/focus/review-spawn-coverage.js.map +1 -0
- package/dist/focus/session-health.d.ts +5 -2
- package/dist/focus/session-health.d.ts.map +1 -1
- package/dist/focus/session-health.js +2 -1
- package/dist/focus/session-health.js.map +1 -1
- package/dist/focus/session-process-reap.d.ts +50 -0
- package/dist/focus/session-process-reap.d.ts.map +1 -0
- package/dist/focus/session-process-reap.js +77 -0
- package/dist/focus/session-process-reap.js.map +1 -0
- package/dist/focus/unchanged-reviewed-head.d.ts +40 -0
- package/dist/focus/unchanged-reviewed-head.d.ts.map +1 -0
- package/dist/focus/unchanged-reviewed-head.js +84 -0
- package/dist/focus/unchanged-reviewed-head.js.map +1 -0
- package/dist/focus/verify-open-issues.d.ts +4 -19
- package/dist/focus/verify-open-issues.d.ts.map +1 -1
- package/dist/focus/verify-open-issues.js +83 -41
- package/dist/focus/verify-open-issues.js.map +1 -1
- package/dist/git/focus-integration-sync.d.ts +61 -0
- package/dist/git/focus-integration-sync.d.ts.map +1 -0
- package/dist/git/focus-integration-sync.js +73 -0
- package/dist/git/focus-integration-sync.js.map +1 -0
- package/dist/git/focus-own-delta.d.ts +38 -0
- package/dist/git/focus-own-delta.d.ts.map +1 -0
- package/dist/git/focus-own-delta.js +193 -0
- package/dist/git/focus-own-delta.js.map +1 -0
- package/dist/git/index.d.ts +2 -0
- package/dist/git/index.d.ts.map +1 -1
- package/dist/git/index.js +4 -0
- package/dist/git/index.js.map +1 -1
- package/dist/git/merge.d.ts.map +1 -1
- package/dist/git/merge.js +11 -1
- package/dist/git/merge.js.map +1 -1
- package/dist/git/resolution-restore.d.ts +66 -0
- package/dist/git/resolution-restore.d.ts.map +1 -0
- package/dist/git/resolution-restore.js +331 -0
- package/dist/git/resolution-restore.js.map +1 -0
- package/dist/loops/engine.d.ts.map +1 -1
- package/dist/loops/engine.js.map +1 -1
- package/dist/merge/abandoned-merge-recovery.d.ts +72 -0
- package/dist/merge/abandoned-merge-recovery.d.ts.map +1 -0
- package/dist/merge/abandoned-merge-recovery.js +117 -0
- package/dist/merge/abandoned-merge-recovery.js.map +1 -0
- package/dist/merge/focus-merge.d.ts +19 -0
- package/dist/merge/focus-merge.d.ts.map +1 -1
- package/dist/merge/focus-merge.js +136 -99
- package/dist/merge/focus-merge.js.map +1 -1
- package/dist/merge/merge-back-activity.d.ts +11 -0
- package/dist/merge/merge-back-activity.d.ts.map +1 -0
- package/dist/merge/merge-back-activity.js +57 -0
- package/dist/merge/merge-back-activity.js.map +1 -0
- package/dist/merge/merge-back-conflict.d.ts +119 -0
- package/dist/merge/merge-back-conflict.d.ts.map +1 -0
- package/dist/merge/merge-back-conflict.js +178 -0
- package/dist/merge/merge-back-conflict.js.map +1 -0
- package/dist/merge/merge-back-followup.d.ts +109 -0
- package/dist/merge/merge-back-followup.d.ts.map +1 -0
- package/dist/merge/merge-back-followup.js +316 -0
- package/dist/merge/merge-back-followup.js.map +1 -0
- package/dist/merge/merge-back-loop.d.ts +2 -0
- package/dist/merge/merge-back-loop.d.ts.map +1 -1
- package/dist/merge/merge-back-loop.js +14 -15
- package/dist/merge/merge-back-loop.js.map +1 -1
- package/dist/merge/merge-conflict-escalation.d.ts +12 -0
- package/dist/merge/merge-conflict-escalation.d.ts.map +1 -1
- package/dist/merge/merge-conflict-escalation.js +37 -2
- package/dist/merge/merge-conflict-escalation.js.map +1 -1
- package/dist/merge/merge-gate-coverage.d.ts.map +1 -1
- package/dist/merge/merge-gate-coverage.js +1 -0
- package/dist/merge/merge-gate-coverage.js.map +1 -1
- package/dist/prompt/prompt-listing.d.ts +5 -0
- package/dist/prompt/prompt-listing.d.ts.map +1 -1
- package/dist/prompt/prompt-listing.js +35 -0
- package/dist/prompt/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 +2 -0
- package/dist/prompt-sections/routing-decider-sections.js.map +1 -1
- package/dist/prompt-sections/shortfall-park-section.d.ts +43 -0
- package/dist/prompt-sections/shortfall-park-section.d.ts.map +1 -0
- package/dist/prompt-sections/shortfall-park-section.js +36 -0
- package/dist/prompt-sections/shortfall-park-section.js.map +1 -0
- package/dist/queries/agent-resolvable-promotion.d.ts +16 -2
- package/dist/queries/agent-resolvable-promotion.d.ts.map +1 -1
- package/dist/queries/agent-resolvable-promotion.js +30 -3
- package/dist/queries/agent-resolvable-promotion.js.map +1 -1
- package/dist/queries/cause-key.d.ts +17 -22
- package/dist/queries/cause-key.d.ts.map +1 -1
- package/dist/queries/cause-key.js +50 -1
- package/dist/queries/cause-key.js.map +1 -1
- package/dist/queries/commit-attributions.d.ts +18 -0
- package/dist/queries/commit-attributions.d.ts.map +1 -0
- package/dist/queries/commit-attributions.js +39 -0
- package/dist/queries/commit-attributions.js.map +1 -0
- package/dist/queries/deliveries.d.ts.map +1 -1
- package/dist/queries/deliveries.js +3 -1
- package/dist/queries/deliveries.js.map +1 -1
- package/dist/queries/delivery-gate-state.d.ts +21 -5
- package/dist/queries/delivery-gate-state.d.ts.map +1 -1
- package/dist/queries/delivery-gate-state.js +35 -9
- package/dist/queries/delivery-gate-state.js.map +1 -1
- package/dist/queries/escalation-consumption.d.ts.map +1 -1
- package/dist/queries/escalation-consumption.js +2 -1
- package/dist/queries/escalation-consumption.js.map +1 -1
- package/dist/queries/escalation-field-bounds.d.ts +48 -0
- package/dist/queries/escalation-field-bounds.d.ts.map +1 -0
- package/dist/queries/escalation-field-bounds.js +83 -0
- package/dist/queries/escalation-field-bounds.js.map +1 -0
- package/dist/queries/escalation-refusal.d.ts +88 -0
- package/dist/queries/escalation-refusal.d.ts.map +1 -0
- package/dist/queries/escalation-refusal.js +217 -0
- package/dist/queries/escalation-refusal.js.map +1 -0
- package/dist/queries/escalation-suppression.d.ts +6 -0
- package/dist/queries/escalation-suppression.d.ts.map +1 -1
- package/dist/queries/escalation-suppression.js +4 -13
- package/dist/queries/escalation-suppression.js.map +1 -1
- package/dist/queries/escalations.d.ts +5 -13
- package/dist/queries/escalations.d.ts.map +1 -1
- package/dist/queries/escalations.js +25 -30
- package/dist/queries/escalations.js.map +1 -1
- package/dist/queries/filing-observation.d.ts.map +1 -1
- package/dist/queries/filing-observation.js +3 -1
- package/dist/queries/filing-observation.js.map +1 -1
- package/dist/queries/focus-review-approval.d.ts +2 -0
- package/dist/queries/focus-review-approval.d.ts.map +1 -1
- package/dist/queries/focus-review-approval.js +7 -2
- package/dist/queries/focus-review-approval.js.map +1 -1
- package/dist/queries/focuses.d.ts.map +1 -1
- package/dist/queries/focuses.js +2 -1
- package/dist/queries/focuses.js.map +1 -1
- package/dist/queries/incident-correlation.d.ts.map +1 -1
- package/dist/queries/incident-correlation.js +4 -1
- package/dist/queries/incident-correlation.js.map +1 -1
- package/dist/queries/misattributed-commits-record.d.ts +26 -0
- package/dist/queries/misattributed-commits-record.d.ts.map +1 -0
- package/dist/queries/misattributed-commits-record.js +5 -0
- package/dist/queries/misattributed-commits-record.js.map +1 -0
- package/dist/queries/reality-tree.d.ts.map +1 -1
- package/dist/queries/reality-tree.js +2 -1
- package/dist/queries/reality-tree.js.map +1 -1
- package/dist/queries/schemas.d.ts +3 -0
- package/dist/queries/schemas.d.ts.map +1 -1
- package/dist/queries/schemas.js +1 -0
- package/dist/queries/schemas.js.map +1 -1
- package/dist/queries/shared.js +1 -1
- package/dist/queries/shortfall-park-record.d.ts +48 -0
- package/dist/queries/shortfall-park-record.d.ts.map +1 -0
- package/dist/queries/shortfall-park-record.js +31 -0
- package/dist/queries/shortfall-park-record.js.map +1 -0
- package/dist/queries/shortfall-rulings.d.ts +71 -0
- package/dist/queries/shortfall-rulings.d.ts.map +1 -0
- package/dist/queries/shortfall-rulings.js +53 -0
- package/dist/queries/shortfall-rulings.js.map +1 -0
- package/dist/queries/verification.d.ts +20 -1
- package/dist/queries/verification.d.ts.map +1 -1
- package/dist/queries/verification.js +48 -8
- package/dist/queries/verification.js.map +1 -1
- package/dist/resolvers/index.d.ts +2 -2
- package/dist/resolvers/index.d.ts.map +1 -1
- package/dist/resolvers/index.js +1 -1
- package/dist/resolvers/index.js.map +1 -1
- package/dist/resolvers/shared/delivery-trailer.d.ts +99 -0
- package/dist/resolvers/shared/delivery-trailer.d.ts.map +1 -0
- package/dist/resolvers/shared/delivery-trailer.js +103 -0
- package/dist/resolvers/shared/delivery-trailer.js.map +1 -0
- package/dist/resolvers/shared/git-diff.d.ts +11 -84
- package/dist/resolvers/shared/git-diff.d.ts.map +1 -1
- package/dist/resolvers/shared/git-diff.js +17 -84
- package/dist/resolvers/shared/git-diff.js.map +1 -1
- package/dist/resolvers/shared/review-window-commits.d.ts.map +1 -1
- package/dist/resolvers/shared/review-window-commits.js +1 -0
- package/dist/resolvers/shared/review-window-commits.js.map +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/shell/config.d.ts +2 -1
- package/dist/shell/config.d.ts.map +1 -1
- package/dist/shell/config.js +21 -4
- package/dist/shell/config.js.map +1 -1
- package/dist/shell/crash-recovery.d.ts +3 -7
- package/dist/shell/crash-recovery.d.ts.map +1 -1
- package/dist/shell/crash-recovery.js +28 -31
- package/dist/shell/crash-recovery.js.map +1 -1
- package/dist/shell/orphan-capture.d.ts +42 -0
- package/dist/shell/orphan-capture.d.ts.map +1 -0
- package/dist/shell/orphan-capture.js +53 -0
- package/dist/shell/orphan-capture.js.map +1 -0
- package/dist/shell/worker-pidfile.d.ts +22 -4
- package/dist/shell/worker-pidfile.d.ts.map +1 -1
- package/dist/shell/worker-pidfile.js +51 -13
- package/dist/shell/worker-pidfile.js.map +1 -1
- package/dist/spawn/helpers.d.ts +3 -0
- package/dist/spawn/helpers.d.ts.map +1 -1
- package/dist/spawn/helpers.js +28 -9
- package/dist/spawn/helpers.js.map +1 -1
- package/dist/spawn/lead-launch.d.ts +34 -0
- package/dist/spawn/lead-launch.d.ts.map +1 -0
- package/dist/spawn/lead-launch.js +34 -0
- package/dist/spawn/lead-launch.js.map +1 -0
- package/dist/spawn/lead-process-ownership.d.ts +91 -0
- package/dist/spawn/lead-process-ownership.d.ts.map +1 -0
- package/dist/spawn/lead-process-ownership.js +120 -0
- package/dist/spawn/lead-process-ownership.js.map +1 -0
- package/dist/spawn/lifecycle.d.ts +43 -3
- package/dist/spawn/lifecycle.d.ts.map +1 -1
- package/dist/spawn/lifecycle.js +75 -44
- package/dist/spawn/lifecycle.js.map +1 -1
- package/dist/spawn/liveness.d.ts.map +1 -1
- package/dist/spawn/liveness.js +5 -1
- package/dist/spawn/liveness.js.map +1 -1
- package/dist/spawn/one-shot-process-ownership.d.ts +48 -0
- package/dist/spawn/one-shot-process-ownership.d.ts.map +1 -0
- package/dist/spawn/one-shot-process-ownership.js +44 -0
- package/dist/spawn/one-shot-process-ownership.js.map +1 -0
- package/dist/spawn/process-group-kill.d.ts +79 -0
- package/dist/spawn/process-group-kill.d.ts.map +1 -0
- package/dist/spawn/process-group-kill.js +210 -0
- package/dist/spawn/process-group-kill.js.map +1 -0
- package/dist/spawn/process-spawn.d.ts +18 -1
- package/dist/spawn/process-spawn.d.ts.map +1 -1
- package/dist/spawn/process-spawn.js +51 -20
- package/dist/spawn/process-spawn.js.map +1 -1
- package/dist/spawn/resolution-budget.d.ts +38 -0
- package/dist/spawn/resolution-budget.d.ts.map +1 -0
- package/dist/spawn/resolution-budget.js +87 -0
- package/dist/spawn/resolution-budget.js.map +1 -0
- package/dist/spawn/review-hold-park.d.ts.map +1 -1
- package/dist/spawn/review-hold-park.js +37 -5
- package/dist/spawn/review-hold-park.js.map +1 -1
- package/dist/spawn/spawn-cooldown.d.ts.map +1 -1
- package/dist/spawn/spawn-cooldown.js +9 -0
- package/dist/spawn/spawn-cooldown.js.map +1 -1
- package/dist/spawn/untracked-lead-sweep.d.ts +29 -0
- package/dist/spawn/untracked-lead-sweep.d.ts.map +1 -0
- package/dist/spawn/untracked-lead-sweep.js +100 -0
- package/dist/spawn/untracked-lead-sweep.js.map +1 -0
- package/dist/spawn/worker-registry.d.ts.map +1 -1
- package/dist/spawn/worker-registry.js +4 -1
- package/dist/spawn/worker-registry.js.map +1 -1
- package/dist/spawn/worktree-session.d.ts.map +1 -1
- package/dist/spawn/worktree-session.js +8 -6
- package/dist/spawn/worktree-session.js.map +1 -1
- package/dist/testing/fixtures/exit-capture-verify.d.ts +41 -0
- package/dist/testing/fixtures/exit-capture-verify.d.ts.map +1 -0
- package/dist/testing/fixtures/exit-capture-verify.js +152 -0
- package/dist/testing/fixtures/exit-capture-verify.js.map +1 -0
- package/dist/testing/fixtures/index.js +1 -1
- package/dist/testing/fixtures/pending-spawn-world.d.ts +7 -0
- package/dist/testing/fixtures/pending-spawn-world.d.ts.map +1 -1
- package/dist/testing/fixtures/pending-spawn-world.js +21 -1
- package/dist/testing/fixtures/pending-spawn-world.js.map +1 -1
- package/dist/testing/fixtures/stubborn-lead-process.d.ts +22 -0
- package/dist/testing/fixtures/stubborn-lead-process.d.ts.map +1 -0
- package/dist/testing/fixtures/stubborn-lead-process.js +68 -0
- package/dist/testing/fixtures/stubborn-lead-process.js.map +1 -0
- package/dist/types/config.d.ts +13 -0
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/focus.d.ts +7 -0
- package/dist/types/focus.d.ts.map +1 -1
- package/dist/types/index.js +1 -1
- package/dist/verify/commit-verdict-record.d.ts +13 -3
- package/dist/verify/commit-verdict-record.d.ts.map +1 -1
- package/dist/verify/commit-verdict-record.js +45 -25
- package/dist/verify/commit-verdict-record.js.map +1 -1
- package/dist/verify/credit-rearm.d.ts +18 -0
- package/dist/verify/credit-rearm.d.ts.map +1 -0
- package/dist/verify/credit-rearm.js +69 -0
- package/dist/verify/credit-rearm.js.map +1 -0
- package/dist/verify/delivery-commit-set.d.ts +10 -0
- package/dist/verify/delivery-commit-set.d.ts.map +1 -0
- package/dist/verify/delivery-commit-set.js +82 -0
- package/dist/verify/delivery-commit-set.js.map +1 -0
- package/dist/verify/explicit-rearm.d.ts.map +1 -1
- package/dist/verify/explicit-rearm.js +2 -0
- package/dist/verify/explicit-rearm.js.map +1 -1
- package/dist/verify/failure-signature.d.ts.map +1 -1
- package/dist/verify/failure-signature.js +1 -0
- package/dist/verify/failure-signature.js.map +1 -1
- package/dist/verify/gate-run-registry.d.ts.map +1 -1
- package/dist/verify/gate-run-registry.js +3 -0
- package/dist/verify/gate-run-registry.js.map +1 -1
- package/dist/verify/injection-stamp.d.ts +29 -0
- package/dist/verify/injection-stamp.d.ts.map +1 -0
- package/dist/verify/injection-stamp.js +139 -0
- package/dist/verify/injection-stamp.js.map +1 -0
- package/dist/verify/misattributed-commits-read.d.ts +31 -0
- package/dist/verify/misattributed-commits-read.d.ts.map +1 -0
- package/dist/verify/misattributed-commits-read.js +47 -0
- package/dist/verify/misattributed-commits-read.js.map +1 -0
- package/dist/verify/misattributed-commits.d.ts +52 -0
- package/dist/verify/misattributed-commits.d.ts.map +1 -0
- package/dist/verify/misattributed-commits.js +148 -0
- package/dist/verify/misattributed-commits.js.map +1 -0
- package/dist/verify/no-own-delta-verdict.d.ts +47 -0
- package/dist/verify/no-own-delta-verdict.d.ts.map +1 -0
- package/dist/verify/no-own-delta-verdict.js +74 -0
- package/dist/verify/no-own-delta-verdict.js.map +1 -0
- package/dist/verify/shortfall-park-escalation.d.ts +41 -0
- package/dist/verify/shortfall-park-escalation.d.ts.map +1 -0
- package/dist/verify/shortfall-park-escalation.js +177 -0
- package/dist/verify/shortfall-park-escalation.js.map +1 -0
- package/dist/verify/shortfall-park.d.ts +109 -0
- package/dist/verify/shortfall-park.d.ts.map +1 -0
- package/dist/verify/shortfall-park.js +208 -0
- package/dist/verify/shortfall-park.js.map +1 -0
- package/dist/verify/shortfall-repeat.d.ts +47 -16
- package/dist/verify/shortfall-repeat.d.ts.map +1 -1
- package/dist/verify/shortfall-repeat.js +77 -23
- package/dist/verify/shortfall-repeat.js.map +1 -1
- package/dist/verify/shortfall-rulings.d.ts +106 -0
- package/dist/verify/shortfall-rulings.d.ts.map +1 -0
- package/dist/verify/shortfall-rulings.js +118 -0
- package/dist/verify/shortfall-rulings.js.map +1 -0
- package/dist/verify/stall-detectors.d.ts.map +1 -1
- package/dist/verify/stall-detectors.js +10 -4
- package/dist/verify/stall-detectors.js.map +1 -1
- package/dist/verify/verification-attribution-base.d.ts +26 -0
- package/dist/verify/verification-attribution-base.d.ts.map +1 -0
- package/dist/verify/verification-attribution-base.js +127 -0
- package/dist/verify/verification-attribution-base.js.map +1 -0
- package/dist/verify/verification-attribution-deps.d.ts +32 -0
- package/dist/verify/verification-attribution-deps.d.ts.map +1 -0
- package/dist/verify/verification-attribution-deps.js +209 -0
- package/dist/verify/verification-attribution-deps.js.map +1 -0
- package/dist/verify/verification-baseline.d.ts +10 -0
- package/dist/verify/verification-baseline.d.ts.map +1 -1
- package/dist/verify/verification-baseline.js +35 -13
- package/dist/verify/verification-baseline.js.map +1 -1
- package/dist/verify/verification-commit-sharing.d.ts.map +1 -1
- package/dist/verify/verification-commit-sharing.js +30 -8
- package/dist/verify/verification-commit-sharing.js.map +1 -1
- package/dist/verify/verification-config.d.ts.map +1 -1
- package/dist/verify/verification-config.js +2 -0
- package/dist/verify/verification-config.js.map +1 -1
- package/dist/verify/verification-default-on.d.ts +3 -0
- package/dist/verify/verification-default-on.d.ts.map +1 -1
- package/dist/verify/verification-default-on.js +9 -1
- package/dist/verify/verification-default-on.js.map +1 -1
- package/dist/verify/verification-deps-default.d.ts.map +1 -1
- package/dist/verify/verification-deps-default.js +61 -120
- package/dist/verify/verification-deps-default.js.map +1 -1
- package/dist/verify/verification-deps.d.ts +26 -4
- package/dist/verify/verification-deps.d.ts.map +1 -1
- package/dist/verify/verification-deterministic.d.ts +15 -0
- package/dist/verify/verification-deterministic.d.ts.map +1 -1
- package/dist/verify/verification-deterministic.js +1 -12
- package/dist/verify/verification-deterministic.js.map +1 -1
- package/dist/verify/verification-engine.d.ts +9 -6
- package/dist/verify/verification-engine.d.ts.map +1 -1
- package/dist/verify/verification-engine.js +43 -62
- package/dist/verify/verification-engine.js.map +1 -1
- package/dist/verify/verification-evidence-unavailable-feedback.d.ts +2 -1
- package/dist/verify/verification-evidence-unavailable-feedback.d.ts.map +1 -1
- package/dist/verify/verification-evidence-unavailable-feedback.js +20 -1
- package/dist/verify/verification-evidence-unavailable-feedback.js.map +1 -1
- package/dist/verify/verification-failure-parser.d.ts +93 -3
- package/dist/verify/verification-failure-parser.d.ts.map +1 -1
- package/dist/verify/verification-failure-parser.js +172 -3
- package/dist/verify/verification-failure-parser.js.map +1 -1
- package/dist/verify/verification-feedback.d.ts +60 -43
- package/dist/verify/verification-feedback.d.ts.map +1 -1
- package/dist/verify/verification-feedback.js +115 -120
- package/dist/verify/verification-feedback.js.map +1 -1
- package/dist/verify/verification-history-reset.d.ts +2 -1
- package/dist/verify/verification-history-reset.d.ts.map +1 -1
- package/dist/verify/verification-history-reset.js +4 -2
- package/dist/verify/verification-history-reset.js.map +1 -1
- package/dist/verify/verification-rework-issue.d.ts +87 -0
- package/dist/verify/verification-rework-issue.d.ts.map +1 -0
- package/dist/verify/verification-rework-issue.js +212 -0
- package/dist/verify/verification-rework-issue.js.map +1 -0
- package/dist/verify/verification-rework-messages.d.ts.map +1 -1
- package/dist/verify/verification-rework-messages.js +10 -0
- package/dist/verify/verification-rework-messages.js.map +1 -1
- package/dist/verify/verify-gate-stall.d.ts +2 -0
- package/dist/verify/verify-gate-stall.d.ts.map +1 -1
- package/dist/verify/verify-gate-stall.js +35 -9
- package/dist/verify/verify-gate-stall.js.map +1 -1
- package/dist/verify/verify-restatement.d.ts.map +1 -1
- package/dist/verify/verify-restatement.js +9 -2
- package/dist/verify/verify-restatement.js.map +1 -1
- package/dist/worktree/capture-attribution-read.d.ts +47 -0
- package/dist/worktree/capture-attribution-read.d.ts.map +1 -0
- package/dist/worktree/capture-attribution-read.js +98 -0
- package/dist/worktree/capture-attribution-read.js.map +1 -0
- package/dist/worktree/capture-attribution.d.ts +26 -0
- package/dist/worktree/capture-attribution.d.ts.map +1 -0
- package/dist/worktree/capture-attribution.js +111 -0
- package/dist/worktree/capture-attribution.js.map +1 -0
- package/dist/worktree/index.d.ts.map +1 -1
- package/dist/worktree/index.js +2 -1
- package/dist/worktree/index.js.map +1 -1
- package/dist/worktree/provision.d.ts.map +1 -1
- package/dist/worktree/provision.js +23 -6
- package/dist/worktree/provision.js.map +1 -1
- package/dist/worktree/safety.d.ts +14 -4
- package/dist/worktree/safety.d.ts.map +1 -1
- package/dist/worktree/safety.js +37 -7
- package/dist/worktree/safety.js.map +1 -1
- package/dist/worktree/scratch-guard.d.ts +53 -2
- package/dist/worktree/scratch-guard.d.ts.map +1 -1
- package/dist/worktree/scratch-guard.js +115 -30
- package/dist/worktree/scratch-guard.js.map +1 -1
- package/dist/worktree/unmerged-capture-escalation.d.ts +52 -0
- package/dist/worktree/unmerged-capture-escalation.d.ts.map +1 -0
- package/dist/worktree/unmerged-capture-escalation.js +64 -0
- package/dist/worktree/unmerged-capture-escalation.js.map +1 -0
- package/package.json +2 -2
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
// PINNED-BY-BEGIN (generated by gen:pinned-by -- do not hand-edit; checked by lint:pinned-by)
|
|
2
|
+
// Pinned by: packages/daemon/src/integration/failed-verdict-review-exit-respawn-regression.test.ts,
|
|
3
|
+
// packages/daemon/src/integration/failed-verdict-review-loop-regression.test.ts,
|
|
4
|
+
// packages/daemon/src/integration/verify-failure-rework-route.test.ts,
|
|
5
|
+
// packages/daemon/src/verify/verification-feedback.test.ts,
|
|
6
|
+
// packages/daemon/src/verify/verification-rework-issue.test.ts,
|
|
7
|
+
// packages/daemon/src/verify/verify-evidence-unavailable.test.ts
|
|
8
|
+
// PINNED-BY-END
|
|
9
|
+
/**
|
|
10
|
+
* A deterministic gate failure the re-work cycle could not otherwise act on files
|
|
11
|
+
* the work that fixes it.
|
|
12
|
+
*
|
|
13
|
+
* Failure feedback routes a failed delivery verify -> verify_failed, carrying the
|
|
14
|
+
* failing tests in gate_state -- but gate_state is not work. A delivery whose
|
|
15
|
+
* issues are all Done (review filed nothing) then steps verify_failed -> queued ->
|
|
16
|
+
* coding -> verify with no open Task/Bug for any coding pass to pick up, lands
|
|
17
|
+
* back in verify at the unchanged failed commit (which the HEAD re-verify guard
|
|
18
|
+
* will not re-run), and waits there for an operator (Tinker Tailor, 2026-09-17:
|
|
19
|
+
* ten no-op review passes, nothing fixed the red).
|
|
20
|
+
*
|
|
21
|
+
* So the failure itself becomes the issue: ONE Bug on the delivery naming the
|
|
22
|
+
* failing tests -- or, when the gate could not parse them, the parse failure and
|
|
23
|
+
* where the log is -- so the re-work re-entry has real open work and the next
|
|
24
|
+
* spawned actor is a coding pass holding the failure. Filed only when the
|
|
25
|
+
* delivery has no open work issue of its own (a review-filed Bug already routes
|
|
26
|
+
* the fix), and at most once per (delivery, failed commit): the Bug's title
|
|
27
|
+
* carries the commit, and a Bug already filed for that commit -- open or closed --
|
|
28
|
+
* is never filed again, so a repeat feedback for one commit adds nothing and the
|
|
29
|
+
* verify_failed iteration cap stays the bound. A run that judged no known commit
|
|
30
|
+
* dedupes on open work alone.
|
|
31
|
+
*
|
|
32
|
+
* Best-effort, then retried: a read or create failure is logged and files nothing
|
|
33
|
+
* -- it must never block the verify_failed route it rides with -- and leaves the
|
|
34
|
+
* filing OWED. A delivery back in verify at that same failed commit (the HEAD
|
|
35
|
+
* re-verify guard holds it there, and its durable failedAtSha survives the
|
|
36
|
+
* re-work walk and a restart) is retried by the default-on scan through
|
|
37
|
+
* retryOwedReworkIssue at most once per REWORK_RETRY_INTERVAL_MS, from the
|
|
38
|
+
* commit's recorded verdict, until a filing lands or finds one already filed;
|
|
39
|
+
* the Bug is open work, so the live open-work pass routes it on to coding.
|
|
40
|
+
*
|
|
41
|
+
* @module verify/verification-rework-issue
|
|
42
|
+
*/
|
|
43
|
+
import { DELIVERY_STATUS } from '@telora/daemon-core';
|
|
44
|
+
import { createIssue, getDeliveryIssues } from '../queries/issues.js';
|
|
45
|
+
import { getFocusDeliveries } from '../queries/focuses.js';
|
|
46
|
+
import { readCommitVerdict } from './commit-verdict-record.js';
|
|
47
|
+
import { readVerificationHistory } from '../queries/delivery-gate-state.js';
|
|
48
|
+
import { OPEN_ISSUE_STATUSES, CONTEXT_GROUP_TYPE } from '../shell/constants.js';
|
|
49
|
+
import { createLogger } from '../shell/log.js';
|
|
50
|
+
const log = createLogger({ module: 'verification' });
|
|
51
|
+
/** Title prefix of a rework Bug; the failed commit follows it. */
|
|
52
|
+
export const REWORK_ISSUE_TITLE_PREFIX = 'Verify gate failed at';
|
|
53
|
+
/** How many failing tests the Bug description lists before pointing at the log. */
|
|
54
|
+
const MAX_LISTED_TESTS = 30;
|
|
55
|
+
export const defaultReworkIssueDeps = () => ({ getDeliveryIssues, createIssue });
|
|
56
|
+
/** The rework Bug's title for a failed commit. Pure. */
|
|
57
|
+
export function reworkIssueTitle(failure) {
|
|
58
|
+
const at = failure.sha ? failure.sha.slice(0, 12) : 'an unrecorded commit';
|
|
59
|
+
const what = failure.failingTests.length > 0
|
|
60
|
+
? `fix ${failure.failingTests.length} failing test(s)`
|
|
61
|
+
: failure.parseFailure
|
|
62
|
+
? 'failing tests could not be parsed -- read the log'
|
|
63
|
+
: failure.failedStage ? `fix stage "${failure.failedStage}"` : 'fix the failing check';
|
|
64
|
+
return `${REWORK_ISSUE_TITLE_PREFIX} ${at}: ${what}`;
|
|
65
|
+
}
|
|
66
|
+
/** The rework Bug's description. Pure. */
|
|
67
|
+
export function reworkIssueDescription(failure) {
|
|
68
|
+
const lines = [
|
|
69
|
+
`The deterministic verify gate failed${failure.sha ? ` on commit ${failure.sha}` : ''} and no open issue on this ` +
|
|
70
|
+
'delivery carried the fix, so the daemon filed this one. Fix the failure, commit, and move this issue to Done -- ' +
|
|
71
|
+
'the daemon re-verifies the new commit (do not replay the gate by hand).',
|
|
72
|
+
'',
|
|
73
|
+
`Exit code: ${failure.exitCode ?? '(unknown)'}`,
|
|
74
|
+
`Full log: ${failure.logPath ?? '(not captured -- see the daemon verification log directory)'}`,
|
|
75
|
+
];
|
|
76
|
+
if (failure.failedStage)
|
|
77
|
+
lines.push(`Failed stage: ${failure.failedStage}`);
|
|
78
|
+
if (failure.failingTests.length > 0) {
|
|
79
|
+
lines.push('', `Failing tests (${failure.failingTests.length}):`);
|
|
80
|
+
for (const t of failure.failingTests.slice(0, MAX_LISTED_TESTS))
|
|
81
|
+
lines.push(`- ${t}`);
|
|
82
|
+
if (failure.failingTests.length > MAX_LISTED_TESTS)
|
|
83
|
+
lines.push(`- ... and ${failure.failingTests.length - MAX_LISTED_TESTS} more (see the full log)`);
|
|
84
|
+
}
|
|
85
|
+
else if (failure.parseFailure) {
|
|
86
|
+
const reported = failure.parseFailure.reportedFailures;
|
|
87
|
+
lines.push('', 'PARSE FAILURE: the run exited non-zero but the gate parsed no failing test from its log' +
|
|
88
|
+
(reported !== null ? ` (the runner itself reports ${reported} failing)` : '') + '. Read the full log to find what failed.');
|
|
89
|
+
}
|
|
90
|
+
return lines.join('\n');
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* File the rework Bug for a failed deterministic run when the delivery has no open
|
|
94
|
+
* work issue and none was filed for this commit (module header). Never throws.
|
|
95
|
+
*/
|
|
96
|
+
export async function fileVerificationReworkIssue(deliveryId, failure, deps = defaultReworkIssueDeps()) {
|
|
97
|
+
let issues;
|
|
98
|
+
try {
|
|
99
|
+
issues = await deps.getDeliveryIssues(deliveryId);
|
|
100
|
+
}
|
|
101
|
+
catch (err) {
|
|
102
|
+
log.warn(`[verification] rework issue: issues read failed for delivery ${deliveryId}:`, err.message);
|
|
103
|
+
return { filed: false, reason: 'read_failed' };
|
|
104
|
+
}
|
|
105
|
+
const work = issues.filter((i) => i.issueType !== CONTEXT_GROUP_TYPE);
|
|
106
|
+
if (work.some((i) => OPEN_ISSUE_STATUSES.has(i.status)))
|
|
107
|
+
return { filed: false, reason: 'open_work' };
|
|
108
|
+
const commitPrefix = failure.sha ? `${REWORK_ISSUE_TITLE_PREFIX} ${failure.sha.slice(0, 12)}:` : null;
|
|
109
|
+
if (commitPrefix && work.some((i) => i.title.startsWith(commitPrefix))) {
|
|
110
|
+
filedAt.set(deliveryId, failure.sha);
|
|
111
|
+
return { filed: false, reason: 'already_filed' };
|
|
112
|
+
}
|
|
113
|
+
const title = reworkIssueTitle(failure);
|
|
114
|
+
try {
|
|
115
|
+
const issueId = await deps.createIssue(deliveryId, title, reworkIssueDescription(failure), 'Bug', 'P0');
|
|
116
|
+
if (failure.sha)
|
|
117
|
+
filedAt.set(deliveryId, failure.sha);
|
|
118
|
+
log.info(`[verification] filed rework Bug "${title}" on delivery ${deliveryId} (issue ${issueId}) -- the failure had no open issue to fix it`);
|
|
119
|
+
return { filed: true, issueId };
|
|
120
|
+
}
|
|
121
|
+
catch (err) {
|
|
122
|
+
log.warn(`[verification] rework issue: create failed for delivery ${deliveryId}:`, err.message);
|
|
123
|
+
return { filed: false, reason: 'create_failed' };
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
/** deliveryId -> the failed commit whose rework Bug is known filed (nothing owed there). */
|
|
127
|
+
const filedAt = new Map();
|
|
128
|
+
/** `${deliveryId}@${sha}` -> when an owed filing was last attempted (ms). */
|
|
129
|
+
const lastRetryAt = new Map();
|
|
130
|
+
/** Minimum spacing of owed-filing retries for one (delivery, failed commit). */
|
|
131
|
+
export const REWORK_RETRY_INTERVAL_MS = 60_000;
|
|
132
|
+
/** Test seam: forget every filed / retried commit. */
|
|
133
|
+
export function __resetReworkIssueLedgerForTests() {
|
|
134
|
+
filedAt.clear();
|
|
135
|
+
lastRetryAt.clear();
|
|
136
|
+
}
|
|
137
|
+
export const defaultReworkRetryDeps = () => ({
|
|
138
|
+
...defaultReworkIssueDeps(),
|
|
139
|
+
readCommitVerdict: (productId, focusId, sha) => readCommitVerdict(productId, focusId, sha),
|
|
140
|
+
now: Date.now,
|
|
141
|
+
});
|
|
142
|
+
/**
|
|
143
|
+
* Retry the rework filing for a delivery sitting in verify at the commit its
|
|
144
|
+
* gate last FAILED on (durable failedAtSha == focus HEAD), unless a Bug for that
|
|
145
|
+
* commit is known filed or the last attempt is within REWORK_RETRY_INTERVAL_MS
|
|
146
|
+
* (module header). The failure is described from the commit's recorded verdict,
|
|
147
|
+
* or by its commit alone when none is readable. Returns the outcome, or null when
|
|
148
|
+
* nothing was attempted. Never throws.
|
|
149
|
+
*/
|
|
150
|
+
export async function retryOwedReworkIssue(delivery, at, deps = defaultReworkRetryDeps()) {
|
|
151
|
+
try {
|
|
152
|
+
const sha = readVerificationHistory(delivery.gateState).failedAtSha;
|
|
153
|
+
if (sha === undefined || filedAt.get(delivery.id) === sha || at.readHead() !== sha)
|
|
154
|
+
return null;
|
|
155
|
+
const key = `${delivery.id}@${sha}`;
|
|
156
|
+
const now = deps.now();
|
|
157
|
+
const last = lastRetryAt.get(key);
|
|
158
|
+
if (last !== undefined && now - last < REWORK_RETRY_INTERVAL_MS)
|
|
159
|
+
return null;
|
|
160
|
+
lastRetryAt.set(key, now);
|
|
161
|
+
const verdict = deps.readCommitVerdict(at.productId, at.focusId, sha);
|
|
162
|
+
const recorded = verdict?.outcome === 'failed' ? verdict : null;
|
|
163
|
+
return await fileVerificationReworkIssue(delivery.id, {
|
|
164
|
+
sha,
|
|
165
|
+
failingTests: recorded?.newFailures ?? [],
|
|
166
|
+
parseFailure: recorded?.parseFailure,
|
|
167
|
+
failedStage: recorded?.failedStage,
|
|
168
|
+
exitCode: recorded?.exitCode ?? null,
|
|
169
|
+
logPath: recorded?.logPath ?? null,
|
|
170
|
+
}, deps);
|
|
171
|
+
}
|
|
172
|
+
catch (err) {
|
|
173
|
+
log.warn(`[verification] rework issue: owed filing retry failed for delivery ${delivery.id}:`, err.message);
|
|
174
|
+
return null;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
export const defaultFailedVerdictReworkDeps = () => ({ ...defaultReworkIssueDeps(), getFocusDeliveries });
|
|
178
|
+
/**
|
|
179
|
+
* A FAILED gate verdict standing at a focus head that draws no further review (a
|
|
180
|
+
* declined review of an unchanged range, a stranded re-fire at its bound): file the
|
|
181
|
+
* rework Bug on every verify delivery of the focus, so the live open-work pass
|
|
182
|
+
* routes each to verify_failed and a coding pass fixes the failure. Deduped per
|
|
183
|
+
* commit and skipped beside open work exactly as the feedback filing is. Returns
|
|
184
|
+
* how many Bugs were filed. Never throws.
|
|
185
|
+
*/
|
|
186
|
+
export async function fileReworkForFailedVerdict(focusId, verdict, deps = defaultFailedVerdictReworkDeps()) {
|
|
187
|
+
if (verdict.outcome !== 'failed')
|
|
188
|
+
return 0;
|
|
189
|
+
let deliveries;
|
|
190
|
+
try {
|
|
191
|
+
deliveries = await deps.getFocusDeliveries(focusId);
|
|
192
|
+
}
|
|
193
|
+
catch (err) {
|
|
194
|
+
log.warn(`[verification] rework issue: deliveries unreadable for focus ${focusId} -- none filed this poll:`, err.message);
|
|
195
|
+
return 0;
|
|
196
|
+
}
|
|
197
|
+
let filed = 0;
|
|
198
|
+
for (const d of deliveries.filter((x) => x.executionStatus === DELIVERY_STATUS.VERIFY)) {
|
|
199
|
+
const out = await fileVerificationReworkIssue(d.id, {
|
|
200
|
+
sha: verdict.sha,
|
|
201
|
+
failingTests: verdict.newFailures ?? [],
|
|
202
|
+
parseFailure: verdict.parseFailure,
|
|
203
|
+
failedStage: verdict.failedStage,
|
|
204
|
+
exitCode: verdict.exitCode,
|
|
205
|
+
logPath: verdict.logPath ?? null,
|
|
206
|
+
}, deps);
|
|
207
|
+
if (out.filed)
|
|
208
|
+
filed += 1;
|
|
209
|
+
}
|
|
210
|
+
return filed;
|
|
211
|
+
}
|
|
212
|
+
//# sourceMappingURL=verification-rework-issue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verification-rework-issue.js","sourceRoot":"","sources":["../../src/verify/verification-rework-issue.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verification-rework-messages.d.ts","sourceRoot":"","sources":["../../src/verify/verification-rework-messages.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EACV,6BAA6B,EAC7B,yBAAyB,EAC1B,MAAM,mCAAmC,CAAC;
|
|
1
|
+
{"version":3,"file":"verification-rework-messages.d.ts","sourceRoot":"","sources":["../../src/verify/verification-rework-messages.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EACV,6BAA6B,EAC7B,yBAAyB,EAC1B,MAAM,mCAAmC,CAAC;AAS3C,iGAAiG;AACjG,wBAAgB,yBAAyB,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,yBAAyB,GAAG,MAAM,CA+BzG;AAED,sGAAsG;AACtG,wBAAgB,2BAA2B,CACzC,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,6BAA6B,GACpC,MAAM,CAuBR"}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
// Pinned by: packages/daemon/src/verify/verification-feedback.test.ts
|
|
3
3
|
// PINNED-BY-END
|
|
4
4
|
import { buildGateVerdictLines, HELD_BY_SHORTFALL } from '../prompt-sections/gate-verdict-section.js';
|
|
5
|
+
import { renderMisattributedCommitLines } from './misattributed-commits.js';
|
|
5
6
|
/** The verdict block followed by a blank line, or nothing when there is no verdict. */
|
|
6
7
|
function verdictBlock(lines) {
|
|
7
8
|
return lines.length > 0 ? [...lines, ''] : [];
|
|
@@ -23,6 +24,12 @@ export function buildFailureInjectMessage(deliveryName, detail) {
|
|
|
23
24
|
lines.push(`- ... and ${detail.failingTests.length - 50} more (see full log)`);
|
|
24
25
|
}
|
|
25
26
|
}
|
|
27
|
+
else if (detail.parseFailure) {
|
|
28
|
+
const reported = detail.parseFailure.reportedFailures;
|
|
29
|
+
lines.push('', `PARSE FAILURE: the run exited non-zero but the gate parsed no failing test from its log` +
|
|
30
|
+
(reported !== null ? ` (the runner itself reports ${reported} failing)` : '') +
|
|
31
|
+
' -- read the full log to find what failed.');
|
|
32
|
+
}
|
|
26
33
|
else {
|
|
27
34
|
lines.push('', 'Failing tests could not be parsed from the run output -- read the full log.');
|
|
28
35
|
}
|
|
@@ -47,6 +54,9 @@ export function buildShortfallInjectMessage(deliveryName, detail) {
|
|
|
47
54
|
if (s.diffCitation)
|
|
48
55
|
lines.push(` diff citation: ${s.diffCitation}`);
|
|
49
56
|
}
|
|
57
|
+
const misattributed = renderMisattributedCommitLines(detail.misattributed);
|
|
58
|
+
if (misattributed.length > 0)
|
|
59
|
+
lines.push('', ...misattributed);
|
|
50
60
|
return lines.join('\n');
|
|
51
61
|
}
|
|
52
62
|
//# sourceMappingURL=verification-rework-messages.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verification-rework-messages.js","sourceRoot":"","sources":["../../src/verify/verification-rework-messages.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAC9F,sEAAsE;AACtE,gBAAgB;AAoBhB,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,4CAA4C,CAAC;
|
|
1
|
+
{"version":3,"file":"verification-rework-messages.js","sourceRoot":"","sources":["../../src/verify/verification-rework-messages.ts"],"names":[],"mappings":"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"}
|
|
@@ -38,6 +38,8 @@ import type { FocusDeliveryInfo } from '../types/index.js';
|
|
|
38
38
|
*/
|
|
39
39
|
export declare const VERIFY_GATE_STALL_REPEAT_THRESHOLD = 3;
|
|
40
40
|
type StallSubject = Pick<FocusDeliveryInfo, 'executionStatus' | 'iterationCount' | 'gateState'>;
|
|
41
|
+
/** Longest failure signature the body renders; the full signature stays in the escalation metadata. */
|
|
42
|
+
export declare const STALL_SIGNATURE_RENDER_MAX = 400;
|
|
41
43
|
/**
|
|
42
44
|
* True when `gateState.blocking` carries at least one guard verdict -- i.e. a
|
|
43
45
|
* guard is ACTUALLY rejecting the work right now.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verify-gate-stall.d.ts","sourceRoot":"","sources":["../../src/verify/verify-gate-stall.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"verify-gate-stall.d.ts","sourceRoot":"","sources":["../../src/verify/verify-gate-stall.ts"],"names":[],"mappings":"AAOA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAM3D;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,kCAAkC,IAAI,CAAC;AAEpD,KAAK,YAAY,GAAG,IAAI,CAAC,iBAAiB,EAAE,iBAAiB,GAAG,gBAAgB,GAAG,WAAW,CAAC,CAAC;AAEhG,uGAAuG;AACvG,eAAO,MAAM,0BAA0B,MAAM,CAAC;AAuD9C;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,OAAO,GAAG,OAAO,CAIhE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAInF;AAED,MAAM,MAAM,uBAAuB,GAC/B;IAAE,OAAO,EAAE,KAAK,CAAA;CAAE,GAClB;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,oBAAoB,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GACzG;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,eAAe,CAAC;IAAC,cAAc,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC;AAEnF,MAAM,MAAM,eAAe,GAAG,OAAO,CAAC,uBAAuB,EAAE;IAAE,OAAO,EAAE,IAAI,CAAA;CAAE,CAAC,CAAC;AAElF;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,YAAY,EACtB,GAAG,EAAE,MAAM,EACX,eAAe,GAAE,MAA2C,GAC3D,uBAAuB,CAYzB;AAED,MAAM,WAAW,6BAA6B;IAC5C,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,0CAA0C;IAC1C,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;GASG;AACH,wBAAgB,8BAA8B,CAC5C,KAAK,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,EAC7C,QAAQ,EAAE,IAAI,CAAC,iBAAiB,EAAE,IAAI,GAAG,MAAM,GAAG,iBAAiB,GAAG,gBAAgB,GAAG,WAAW,CAAC,EACrG,KAAK,EAAE,eAAe,GACrB,6BAA6B,CA+D/B"}
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
// PINNED-BY-BEGIN (generated by gen:pinned-by -- do not hand-edit; checked by lint:pinned-by)
|
|
2
2
|
// Pinned by: packages/daemon/src/focus/listener-auto-advance-guard-measure.test.ts,
|
|
3
|
+
// packages/daemon/src/integration/shortfall-park-incident-regression.test.ts,
|
|
3
4
|
// packages/daemon/src/integration/verification-history-round-trip.test.ts,
|
|
4
5
|
// packages/daemon/src/verify/stall-detectors.test.ts
|
|
5
6
|
// PINNED-BY-END
|
|
6
7
|
import { isStatusTerminal } from '../workflow/stage-classifier.js';
|
|
7
8
|
import { readRecordedSignatureRun } from './failure-signature.js';
|
|
8
9
|
import { formatTimeoutAppliedLine, readTimeoutFault } from './verification-timeout-fault.js';
|
|
10
|
+
import { ESCALATION_DESCRIPTION_MAX } from '../queries/escalation-field-bounds.js';
|
|
9
11
|
/**
|
|
10
12
|
* Consecutive rejections carrying ONE failure signature that mark the verify gate
|
|
11
13
|
* as stalled rather than converging.
|
|
@@ -20,6 +22,8 @@ import { formatTimeoutAppliedLine, readTimeoutFault } from './verification-timeo
|
|
|
20
22
|
* operators need to tune it live. Overridable per call for tests.
|
|
21
23
|
*/
|
|
22
24
|
export const VERIFY_GATE_STALL_REPEAT_THRESHOLD = 3;
|
|
25
|
+
/** Longest failure signature the body renders; the full signature stays in the escalation metadata. */
|
|
26
|
+
export const STALL_SIGNATURE_RENDER_MAX = 400;
|
|
23
27
|
/** Render gate_state compactly for the escalation body. */
|
|
24
28
|
function formatGateState(gateState) {
|
|
25
29
|
if (gateState == null)
|
|
@@ -31,6 +35,30 @@ function formatGateState(gateState) {
|
|
|
31
35
|
return '(unserializable)';
|
|
32
36
|
}
|
|
33
37
|
}
|
|
38
|
+
/**
|
|
39
|
+
* Fit a volatile rendering (a signature, the gate_state JSON) into `room`
|
|
40
|
+
* characters, saying in-line that it was shortened and where the full value is.
|
|
41
|
+
* Gate state grows with the product's test suite (failing-test lists, shortfall
|
|
42
|
+
* reasons), so an unbounded body outgrows the server's escalation field limit and
|
|
43
|
+
* the filing is refused -- the stall then raises no signal at all. Pure.
|
|
44
|
+
*/
|
|
45
|
+
function fitRendered(rendered, room, what, fullAt) {
|
|
46
|
+
if (rendered.length <= room)
|
|
47
|
+
return rendered;
|
|
48
|
+
const note = ` ... [${what} shortened from ${rendered.length} characters to fit the escalation limit; the full ${what} is in ${fullAt}]`;
|
|
49
|
+
return `${rendered.slice(0, Math.max(0, room - note.length))}${note}`;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Compose `before` + the gate_state line + `after`, fitting the gate_state
|
|
53
|
+
* rendering into whatever the escalation description limit leaves, so the facts
|
|
54
|
+
* (focus, delivery, cause) and the detail pointer that follows always survive.
|
|
55
|
+
*/
|
|
56
|
+
function withFittedGateState(before, gateState, after) {
|
|
57
|
+
const label = '**gate_state:** ';
|
|
58
|
+
const room = ESCALATION_DESCRIPTION_MAX - before.length - label.length - after.length;
|
|
59
|
+
const fitted = fitRendered(formatGateState(gateState), room, 'gate_state', "this escalation's metadata (gateState) and on the delivery row");
|
|
60
|
+
return `${before}${label}${fitted}${after}`;
|
|
61
|
+
}
|
|
34
62
|
/**
|
|
35
63
|
* The names of the guards currently in `gate_state.blocking`. Empty when the gate
|
|
36
64
|
* carries no live guard verdict. Used to make the escalation body assert only what
|
|
@@ -136,23 +164,22 @@ export function buildVerifyGateStallEscalation(focus, delivery, stall) {
|
|
|
136
164
|
`**iteration_count:** ${iterationCount}\n`;
|
|
137
165
|
const timeoutLine = formatTimeoutAppliedLine(readTimeoutFault(delivery.gateState));
|
|
138
166
|
const timeoutFact = timeoutLine ? `${timeoutLine}\n` : '';
|
|
139
|
-
const
|
|
140
|
-
`Inspect the gate_state / last failing condition above (gate_state.verification.logPath ` +
|
|
167
|
+
const pointer = `\n\nInspect the gate_state / last failing condition above (gate_state.verification.logPath ` +
|
|
141
168
|
`holds the full run log). See docs/runbook-verify-gate.md.`;
|
|
142
169
|
const helpNeeded = `Read the failing condition (gate_state.verification.logPath) and fix the defect on the ` +
|
|
143
170
|
`focus branch -- the prior re-work did not change what fails. If the gate itself must be ` +
|
|
144
171
|
`relaxed, or the delivery cannot pass and must be cancelled, that is an authority act: ` +
|
|
145
172
|
`escalate naming it.`;
|
|
146
173
|
if (stall.basis === 'repeated_signature') {
|
|
174
|
+
const signature = fitRendered(stall.signature, STALL_SIGNATURE_RENDER_MAX, 'failure signature', "this escalation's metadata (failureSignature)");
|
|
147
175
|
return {
|
|
148
|
-
description: `Delivery "${delivery.name}" failed the verify gate with the SAME failure signature on ` +
|
|
176
|
+
description: withFittedGateState(`Delivery "${delivery.name}" failed the verify gate with the SAME failure signature on ` +
|
|
149
177
|
`${stall.consecutive} consecutive re-code cycles (threshold ${stall.threshold}): ` +
|
|
150
|
-
`${
|
|
178
|
+
`${signature}. ${guardClause} The re-work between those cycles did not change ` +
|
|
151
179
|
`what fails, so another automatic cycle is unlikely to clear it.\n\n` +
|
|
152
180
|
facts +
|
|
153
181
|
timeoutFact +
|
|
154
|
-
`**failure signature:** ${
|
|
155
|
-
footer,
|
|
182
|
+
`**failure signature:** ${signature} (${stall.consecutive} consecutive)\n`, delivery.gateState, pointer),
|
|
156
183
|
whatWasTried: `The delivery was re-queued for re-work after each rejection; its last ${stall.consecutive} ` +
|
|
157
184
|
`verify runs failed with an identical failure signature (timings, line counts, paths and ` +
|
|
158
185
|
`other volatile detail normalized away).`,
|
|
@@ -161,14 +188,13 @@ export function buildVerifyGateStallEscalation(focus, delivery, stall) {
|
|
|
161
188
|
};
|
|
162
189
|
}
|
|
163
190
|
return {
|
|
164
|
-
description: `Delivery "${delivery.name}" has been through ${iterationCount} verify_failed re-code cycles ` +
|
|
191
|
+
description: withFittedGateState(`Delivery "${delivery.name}" has been through ${iterationCount} verify_failed re-code cycles ` +
|
|
165
192
|
`(cap ${stall.cap}) without clearing the verify gate. ${guardClause} No failure signature is ` +
|
|
166
193
|
`recorded for its latest rejection (a legacy gate_state, a non-deterministic hold, or an ` +
|
|
167
194
|
`unparseable verification log), so this stall is inferred from the cycle count alone -- the ` +
|
|
168
195
|
`delivery may still be converging through different failures.\n\n` +
|
|
169
196
|
facts +
|
|
170
|
-
timeoutFact
|
|
171
|
-
footer,
|
|
197
|
+
timeoutFact, delivery.gateState, pointer),
|
|
172
198
|
whatWasTried: `The delivery re-entered verify_failed ${iterationCount} times; each verify pass was ` +
|
|
173
199
|
`rejected by the gate and re-queued.`,
|
|
174
200
|
helpNeeded,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verify-gate-stall.js","sourceRoot":"","sources":["../../src/verify/verify-gate-stall.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAC9F,oFAAoF;AACpF,6EAA6E;AAC7E,uDAAuD;AACvD,gBAAgB;AA4BhB,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,wBAAwB,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;
|
|
1
|
+
{"version":3,"file":"verify-gate-stall.js","sourceRoot":"","sources":["../../src/verify/verify-gate-stall.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verify-restatement.d.ts","sourceRoot":"","sources":["../../src/verify/verify-restatement.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"verify-restatement.d.ts","sourceRoot":"","sources":["../../src/verify/verify-restatement.ts"],"names":[],"mappings":"AA8CA,OAAO,EAGL,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EAErB,KAAK,cAAc,EACpB,MAAM,4BAA4B,CAAC;AASpC,YAAY,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAEjE;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,2DAA2D;IAC3D,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,OAAO,GAAG,uBAAuB,CAAC;IAClD,2DAA2D;IAC3D,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;;;;;OAMG;IACH,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,uFAAuF;AACvF,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,+DAA+D;IAC/D,iBAAiB,EAAE,MAAM,CAAC;IAC1B,2DAA2D;IAC3D,iBAAiB,EAAE,MAAM,CAAC;IAC1B,4CAA4C;IAC5C,MAAM,EAAE,MAAM,CAAC;IACf;;;;;;;;;;OAUG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,sBAAsB;IACrC,kEAAkE;IAClE,YAAY,EAAE,iBAAiB,EAAE,CAAC;IAClC,gEAAgE;IAChE,UAAU,EAAE,eAAe,EAAE,CAAC;IAC9B;;;;;;;;;;;;;;OAcG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B;;;;;;OAMG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,MAAM,WAAW,GAAG,CACxB,MAAM,EAAE,eAAe,EACvB,IAAI,CAAC,EAAE,gBAAgB,KACpB,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAEhC,MAAM,WAAW,4BAA4B;IAC3C,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;IAC9E,oGAAoG;IACpG,SAAS,CAAC,EAAE,WAAW,CAAC;CACzB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,wBAAsB,wBAAwB,CAC5C,eAAe,EAAE,MAAM,EACvB,OAAO,EAAE,MAAM,GAAG,IAAI,EACtB,QAAQ,EAAE,cAAc,EACxB,IAAI,GAAE,4BAAiC,EACvC,kBAAkB,UAAQ,GACzB,OAAO,CAAC,sBAAsB,CAAC,CA6GjC"}
|
|
@@ -1,8 +1,15 @@
|
|
|
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/integration/
|
|
2
|
+
// Pinned by: packages/daemon/src/integration/shortfall-park-incident-regression.test.ts,
|
|
3
|
+
// packages/daemon/src/integration/shortfall-ruling-disposes-proposals-regression.test.ts,
|
|
4
|
+
// packages/daemon/src/integration/shortfall-ruling-release.test.ts,
|
|
5
|
+
// packages/daemon/src/integration/verification-history-round-trip.test.ts,
|
|
6
|
+
// packages/daemon/src/verify/misattributed-hold.test.ts,
|
|
3
7
|
// packages/daemon/src/verify/shortfall-inward-proposal.test.ts,
|
|
4
|
-
// packages/daemon/src/verify/shortfall-
|
|
8
|
+
// packages/daemon/src/verify/shortfall-park-escalation.test.ts,
|
|
9
|
+
// packages/daemon/src/verify/shortfall-park.test.ts, packages/daemon/src/verify/shortfall-repeat.test.ts,
|
|
5
10
|
// packages/daemon/src/verify/shortfall-routing.test.ts,
|
|
11
|
+
// packages/daemon/src/verify/shortfall-rulings.test.ts,
|
|
12
|
+
// packages/daemon/src/verify/verification-engine-rulings.test.ts,
|
|
6
13
|
// packages/daemon/src/verify/verification-feedback.test.ts,
|
|
7
14
|
// packages/daemon/src/verify/verify-restatement.test.ts
|
|
8
15
|
// PINNED-BY-END
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verify-restatement.js","sourceRoot":"","sources":["../../src/verify/verify-restatement.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAC9F,
|
|
1
|
+
{"version":3,"file":"verify-restatement.js","sourceRoot":"","sources":["../../src/verify/verify-restatement.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Read the focus's deliveries and issues that capture attribution resolves
|
|
3
|
+
* against (worktree/capture-attribution.ts).
|
|
4
|
+
*
|
|
5
|
+
* The result is explicit about a failed read: `unreadable` is never "the focus
|
|
6
|
+
* has no deliveries". A capture whose read failed stamps the unattributed-capture
|
|
7
|
+
* marker (delivery work, delivery unknown), never the housekeeping sentinel.
|
|
8
|
+
* The read is bounded by a timeout so a capture on the shutdown drain path
|
|
9
|
+
* cannot hang on the API.
|
|
10
|
+
*/
|
|
11
|
+
import { type CaptureAttributionDelivery } from './capture-attribution.js';
|
|
12
|
+
import type { CommitAttribution } from './scratch-guard.js';
|
|
13
|
+
/** The issue fields the read needs (a subset of the daemon's FocusIssueInfo). */
|
|
14
|
+
export interface CaptureAttributionIssueRow {
|
|
15
|
+
deliveryId: string;
|
|
16
|
+
issueType: string;
|
|
17
|
+
status: string;
|
|
18
|
+
relevantFiles: string | null;
|
|
19
|
+
completionArtifacts?: unknown;
|
|
20
|
+
}
|
|
21
|
+
export type CaptureAttributionInput = {
|
|
22
|
+
state: 'found';
|
|
23
|
+
deliveries: CaptureAttributionDelivery[];
|
|
24
|
+
} | {
|
|
25
|
+
state: 'unreadable';
|
|
26
|
+
reason: string;
|
|
27
|
+
};
|
|
28
|
+
export interface CaptureAttributionReadDeps {
|
|
29
|
+
getFocusIssues: (focusId: string) => Promise<CaptureAttributionIssueRow[]>;
|
|
30
|
+
timeoutMs: number;
|
|
31
|
+
}
|
|
32
|
+
/** Default bound on the read; a capture then falls back to unattributed. */
|
|
33
|
+
export declare const CAPTURE_ATTRIBUTION_READ_TIMEOUT_MS = 10000;
|
|
34
|
+
/** The repo-relative files and tests an issue's completionArtifacts JSONB names. */
|
|
35
|
+
export declare function completionFilesOf(raw: unknown): string[];
|
|
36
|
+
/** Pure: group issue rows into the resolver's per-delivery input, in first-seen order. */
|
|
37
|
+
export declare function groupIssuesByDelivery(rows: readonly CaptureAttributionIssueRow[]): CaptureAttributionDelivery[];
|
|
38
|
+
/** Read the resolver input for a focus; `unreadable` on an API failure or timeout. */
|
|
39
|
+
export declare function readCaptureAttributionInput(focusId: string, deps?: Partial<CaptureAttributionReadDeps>): Promise<CaptureAttributionInput>;
|
|
40
|
+
/**
|
|
41
|
+
* The commit attribution a capture applies for this input: the resolver's plan
|
|
42
|
+
* with delivery groups stamped by delivery id and the residue (paths no delivery
|
|
43
|
+
* or more than one delivery covers) stamped `unattributed`. No input, or an unreadable one, stamps every path `unattributed` -- a capture of
|
|
44
|
+
* agent work is never stamped as housekeeping.
|
|
45
|
+
*/
|
|
46
|
+
export declare function captureCommitAttribution(input?: CaptureAttributionInput): CommitAttribution;
|
|
47
|
+
//# sourceMappingURL=capture-attribution-read.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capture-attribution-read.d.ts","sourceRoot":"","sources":["../../src/worktree/capture-attribution-read.ts"],"names":[],"mappings":"AAMA;;;;;;;;;GASG;AAEH,OAAO,EAEL,KAAK,0BAA0B,EAEhC,MAAM,0BAA0B,CAAC;AAElC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAK5D,iFAAiF;AACjF,MAAM,WAAW,0BAA0B;IACzC,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED,MAAM,MAAM,uBAAuB,GAC/B;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,UAAU,EAAE,0BAA0B,EAAE,CAAA;CAAE,GAC5D;IAAE,KAAK,EAAE,YAAY,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAE5C,MAAM,WAAW,0BAA0B;IACzC,cAAc,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,0BAA0B,EAAE,CAAC,CAAC;IAC3E,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,4EAA4E;AAC5E,eAAO,MAAM,mCAAmC,QAAS,CAAC;AAE1D,oFAAoF;AACpF,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,EAAE,CAUxD;AAED,0FAA0F;AAC1F,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,SAAS,0BAA0B,EAAE,GAAG,0BAA0B,EAAE,CAa/G;AASD,sFAAsF;AACtF,wBAAsB,2BAA2B,CAC/C,OAAO,EAAE,MAAM,EACf,IAAI,GAAE,OAAO,CAAC,0BAA0B,CAAM,GAC7C,OAAO,CAAC,uBAAuB,CAAC,CAoBlC;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,CAAC,EAAE,uBAAuB,GAAG,iBAAiB,CAU3F"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
// PINNED-BY-BEGIN (generated by gen:pinned-by -- do not hand-edit; checked by lint:pinned-by)
|
|
2
|
+
// Pinned by: packages/daemon/src/shell/safety-capture-entry-points.test.ts,
|
|
3
|
+
// packages/daemon/src/worktree/capture-attribution-commit.test.ts,
|
|
4
|
+
// packages/daemon/src/worktree/capture-attribution-read.test.ts
|
|
5
|
+
// PINNED-BY-END
|
|
6
|
+
/**
|
|
7
|
+
* Read the focus's deliveries and issues that capture attribution resolves
|
|
8
|
+
* against (worktree/capture-attribution.ts).
|
|
9
|
+
*
|
|
10
|
+
* The result is explicit about a failed read: `unreadable` is never "the focus
|
|
11
|
+
* has no deliveries". A capture whose read failed stamps the unattributed-capture
|
|
12
|
+
* marker (delivery work, delivery unknown), never the housekeeping sentinel.
|
|
13
|
+
* The read is bounded by a timeout so a capture on the shutdown drain path
|
|
14
|
+
* cannot hang on the API.
|
|
15
|
+
*/
|
|
16
|
+
import { resolveCaptureAttribution, } from './capture-attribution.js';
|
|
17
|
+
import { UNATTRIBUTED_CAPTURE_SENTINEL } from '../resolvers/shared/delivery-trailer.js';
|
|
18
|
+
import { createLogger } from '../shell/log.js';
|
|
19
|
+
const log = createLogger({ module: 'worktree' });
|
|
20
|
+
/** Default bound on the read; a capture then falls back to unattributed. */
|
|
21
|
+
export const CAPTURE_ATTRIBUTION_READ_TIMEOUT_MS = 10_000;
|
|
22
|
+
/** The repo-relative files and tests an issue's completionArtifacts JSONB names. */
|
|
23
|
+
export function completionFilesOf(raw) {
|
|
24
|
+
if (raw === null || typeof raw !== 'object')
|
|
25
|
+
return [];
|
|
26
|
+
const out = [];
|
|
27
|
+
for (const key of ['files', 'tests']) {
|
|
28
|
+
const val = raw[key];
|
|
29
|
+
if (Array.isArray(val)) {
|
|
30
|
+
for (const entry of val)
|
|
31
|
+
if (typeof entry === 'string' && entry.trim() !== '')
|
|
32
|
+
out.push(entry.trim());
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return out;
|
|
36
|
+
}
|
|
37
|
+
/** Pure: group issue rows into the resolver's per-delivery input, in first-seen order. */
|
|
38
|
+
export function groupIssuesByDelivery(rows) {
|
|
39
|
+
const byDelivery = new Map();
|
|
40
|
+
for (const row of rows) {
|
|
41
|
+
const issues = byDelivery.get(row.deliveryId) ?? [];
|
|
42
|
+
issues.push({
|
|
43
|
+
issueType: row.issueType,
|
|
44
|
+
status: row.status,
|
|
45
|
+
relevantFiles: row.relevantFiles,
|
|
46
|
+
completionFiles: completionFilesOf(row.completionArtifacts),
|
|
47
|
+
});
|
|
48
|
+
byDelivery.set(row.deliveryId, issues);
|
|
49
|
+
}
|
|
50
|
+
return [...byDelivery].map(([deliveryId, issues]) => ({ deliveryId, issues }));
|
|
51
|
+
}
|
|
52
|
+
async function defaultGetFocusIssues(focusId) {
|
|
53
|
+
// Loaded lazily: a test that registers mock.module and imports a capture call
|
|
54
|
+
// site must not also load the API chain (packages/daemon/CLAUDE.md mock-loader note).
|
|
55
|
+
const { getFocusIssues } = await import('../queries/focuses.js');
|
|
56
|
+
return getFocusIssues(focusId);
|
|
57
|
+
}
|
|
58
|
+
/** Read the resolver input for a focus; `unreadable` on an API failure or timeout. */
|
|
59
|
+
export async function readCaptureAttributionInput(focusId, deps = {}) {
|
|
60
|
+
const getFocusIssues = deps.getFocusIssues ?? defaultGetFocusIssues;
|
|
61
|
+
const timeoutMs = deps.timeoutMs ?? CAPTURE_ATTRIBUTION_READ_TIMEOUT_MS;
|
|
62
|
+
let timer;
|
|
63
|
+
const timeout = new Promise((_, reject) => {
|
|
64
|
+
timer = setTimeout(() => reject(new Error(`timed out after ${timeoutMs}ms`)), timeoutMs);
|
|
65
|
+
});
|
|
66
|
+
try {
|
|
67
|
+
const rows = await Promise.race([getFocusIssues(focusId), timeout]);
|
|
68
|
+
return { state: 'found', deliveries: groupIssuesByDelivery(rows) };
|
|
69
|
+
}
|
|
70
|
+
catch (err) {
|
|
71
|
+
const reason = err instanceof Error ? err.message : String(err);
|
|
72
|
+
log.warn(`Capture attribution could not be read for focus ${focusId} (${reason}); ` +
|
|
73
|
+
`captured work will be committed as unattributed delivery work.`);
|
|
74
|
+
return { state: 'unreadable', reason };
|
|
75
|
+
}
|
|
76
|
+
finally {
|
|
77
|
+
if (timer !== undefined)
|
|
78
|
+
clearTimeout(timer);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* The commit attribution a capture applies for this input: the resolver's plan
|
|
83
|
+
* with delivery groups stamped by delivery id and the residue (paths no delivery
|
|
84
|
+
* or more than one delivery covers) stamped `unattributed`. No input, or an unreadable one, stamps every path `unattributed` -- a capture of
|
|
85
|
+
* agent work is never stamped as housekeeping.
|
|
86
|
+
*/
|
|
87
|
+
export function captureCommitAttribution(input) {
|
|
88
|
+
return (paths) => {
|
|
89
|
+
if (!input || input.state === 'unreadable') {
|
|
90
|
+
return [{ trailerValue: UNATTRIBUTED_CAPTURE_SENTINEL, paths }];
|
|
91
|
+
}
|
|
92
|
+
return resolveCaptureAttribution(paths, input.deliveries).map((group) => ({
|
|
93
|
+
trailerValue: group.deliveryId ?? UNATTRIBUTED_CAPTURE_SENTINEL,
|
|
94
|
+
paths: group.paths,
|
|
95
|
+
}));
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=capture-attribution-read.js.map
|