@telora/daemon 0.24.17 → 0.24.26
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 +12 -3
- package/dist/audit/audit-prompt.d.ts.map +1 -1
- package/dist/audit/audit-prompt.js +15 -0
- package/dist/audit/audit-prompt.js.map +1 -1
- package/dist/ci/candidate-failure-record.d.ts +104 -0
- package/dist/ci/candidate-failure-record.d.ts.map +1 -0
- package/dist/ci/candidate-failure-record.js +135 -0
- package/dist/ci/candidate-failure-record.js.map +1 -0
- package/dist/ci/candidate-ref.d.ts.map +1 -1
- package/dist/ci/candidate-ref.js +10 -3
- package/dist/ci/candidate-ref.js.map +1 -1
- package/dist/ci/ci-status-git.d.ts.map +1 -1
- package/dist/ci/ci-status-git.js +1 -0
- package/dist/ci/ci-status-git.js.map +1 -1
- package/dist/ci/ci-status.d.ts.map +1 -1
- package/dist/ci/ci-status.js +1 -0
- package/dist/ci/ci-status.js.map +1 -1
- package/dist/ci/gate-ref.d.ts +10 -1
- package/dist/ci/gate-ref.d.ts.map +1 -1
- package/dist/ci/gate-ref.js +11 -4
- package/dist/ci/gate-ref.js.map +1 -1
- package/dist/ci/product-ci-repo.d.ts.map +1 -1
- package/dist/ci/product-ci-repo.js +3 -2
- package/dist/ci/product-ci-repo.js.map +1 -1
- package/dist/completion/completion-event/event.d.ts +4 -3
- package/dist/completion/completion-event/event.d.ts.map +1 -1
- package/dist/completion/completion-event/event.js.map +1 -1
- package/dist/completion/review-cycle-budget/review-cycle-cap.d.ts +19 -11
- package/dist/completion/review-cycle-budget/review-cycle-cap.d.ts.map +1 -1
- package/dist/completion/review-cycle-budget/review-cycle-cap.js +36 -36
- package/dist/completion/review-cycle-budget/review-cycle-cap.js.map +1 -1
- package/dist/completion/review-cycle-budget/review-loop-detection.d.ts +101 -0
- package/dist/completion/review-cycle-budget/review-loop-detection.d.ts.map +1 -0
- package/dist/completion/review-cycle-budget/review-loop-detection.js +105 -0
- package/dist/completion/review-cycle-budget/review-loop-detection.js.map +1 -0
- package/dist/completion/review-cycle-budget/spent-budget-release.d.ts +70 -0
- package/dist/completion/review-cycle-budget/spent-budget-release.d.ts.map +1 -0
- package/dist/completion/review-cycle-budget/spent-budget-release.js +98 -0
- package/dist/completion/review-cycle-budget/spent-budget-release.js.map +1 -0
- package/dist/completion/review-exit/review-defect-detector.d.ts +71 -49
- package/dist/completion/review-exit/review-defect-detector.d.ts.map +1 -1
- package/dist/completion/review-exit/review-defect-detector.js +75 -69
- package/dist/completion/review-exit/review-defect-detector.js.map +1 -1
- package/dist/completion/review-exit/review-exit-attribution.d.ts +1 -1
- package/dist/completion/review-exit/review-exit-attribution.js +1 -1
- package/dist/completion/review-exit/review-exit-deps.d.ts +5 -2
- package/dist/completion/review-exit/review-exit-deps.d.ts.map +1 -1
- package/dist/completion/review-exit/review-exit-deps.js +1 -1
- package/dist/completion/review-exit/review-exit-evidence.d.ts +10 -1
- package/dist/completion/review-exit/review-exit-evidence.d.ts.map +1 -1
- package/dist/completion/review-exit/review-exit-evidence.js +17 -14
- package/dist/completion/review-exit/review-exit-evidence.js.map +1 -1
- package/dist/completion/review-exit/review-exit-foreign-findings.d.ts +1 -1
- package/dist/completion/review-exit/review-exit-foreign-findings.d.ts.map +1 -1
- package/dist/completion/review-exit/review-exit-phase.d.ts.map +1 -1
- package/dist/completion/review-exit/review-exit-phase.js +12 -8
- package/dist/completion/review-exit/review-exit-phase.js.map +1 -1
- package/dist/completion/state-cascade/review-next-step.d.ts +12 -3
- package/dist/completion/state-cascade/review-next-step.d.ts.map +1 -1
- package/dist/completion/state-cascade/review-next-step.js +10 -1
- package/dist/completion/state-cascade/review-next-step.js.map +1 -1
- package/dist/completion/state-cascade/standing-approval-convergence.d.ts +1 -1
- package/dist/completion/state-cascade/standing-approval-convergence.d.ts.map +1 -1
- package/dist/completion/state-cascade/standing-approval-convergence.js +10 -4
- package/dist/completion/state-cascade/standing-approval-convergence.js.map +1 -1
- package/dist/completion/state-cascade/state-cascade.d.ts +3 -0
- package/dist/completion/state-cascade/state-cascade.d.ts.map +1 -1
- package/dist/completion/state-cascade/state-cascade.js +16 -1
- package/dist/completion/state-cascade/state-cascade.js.map +1 -1
- package/dist/completion/team-exit/status-advance-phase.d.ts +1 -1
- package/dist/completion/team-exit/status-advance-phase.d.ts.map +1 -1
- package/dist/completion/team-exit/status-advance-phase.js +6 -4
- package/dist/completion/team-exit/status-advance-phase.js.map +1 -1
- package/dist/completion/team-outcome/apply-turn.d.ts.map +1 -1
- package/dist/completion/team-outcome/apply-turn.js +9 -4
- package/dist/completion/team-outcome/apply-turn.js.map +1 -1
- package/dist/completion/team-outcome/decide-turn-entry-rows.d.ts.map +1 -1
- package/dist/completion/team-outcome/decide-turn-entry-rows.js +28 -3
- package/dist/completion/team-outcome/decide-turn-entry-rows.js.map +1 -1
- package/dist/completion/team-outcome/decide.d.ts.map +1 -1
- package/dist/completion/team-outcome/decide.js +1 -0
- package/dist/completion/team-outcome/decide.js.map +1 -1
- package/dist/completion/team-outcome/exit-limits.d.ts +6 -0
- package/dist/completion/team-outcome/exit-limits.d.ts.map +1 -1
- package/dist/completion/team-outcome/exit-limits.js +6 -0
- package/dist/completion/team-outcome/exit-limits.js.map +1 -1
- package/dist/completion/team-outcome/exit-pipeline-state.d.ts +5 -0
- package/dist/completion/team-outcome/exit-pipeline-state.d.ts.map +1 -1
- package/dist/completion/team-outcome/exit-pipeline-state.js.map +1 -1
- package/dist/completion/team-teardown/session-hold-bounds.d.ts +10 -1
- package/dist/completion/team-teardown/session-hold-bounds.d.ts.map +1 -1
- package/dist/completion/team-teardown/session-hold-bounds.js +11 -0
- package/dist/completion/team-teardown/session-hold-bounds.js.map +1 -1
- package/dist/completion/team-teardown/session-hold.d.ts.map +1 -1
- package/dist/completion/team-teardown/session-hold.js +2 -0
- package/dist/completion/team-teardown/session-hold.js.map +1 -1
- package/dist/composition/engine-start-context.d.ts.map +1 -1
- package/dist/composition/engine-start-context.js +9 -1
- package/dist/composition/engine-start-context.js.map +1 -1
- package/dist/composition/execution-merge-context.d.ts +13 -0
- package/dist/composition/execution-merge-context.d.ts.map +1 -1
- package/dist/composition/execution-merge-context.js +76 -3
- package/dist/composition/execution-merge-context.js.map +1 -1
- package/dist/composition/execution-spawn-context.d.ts.map +1 -1
- package/dist/composition/execution-spawn-context.js +2 -0
- package/dist/composition/execution-spawn-context.js.map +1 -1
- package/dist/composition/focus-activity-live-sources.d.ts.map +1 -1
- package/dist/composition/focus-activity-live-sources.js +1 -0
- package/dist/composition/focus-activity-live-sources.js.map +1 -1
- package/dist/composition/judgement-contexts.d.ts.map +1 -1
- package/dist/composition/judgement-contexts.js +8 -2
- package/dist/composition/judgement-contexts.js.map +1 -1
- package/dist/composition/review-exit-context.d.ts.map +1 -1
- package/dist/composition/review-exit-context.js +2 -0
- package/dist/composition/review-exit-context.js.map +1 -1
- package/dist/composition/review-loop-context.d.ts +28 -0
- package/dist/composition/review-loop-context.d.ts.map +1 -0
- package/dist/composition/review-loop-context.js +147 -0
- package/dist/composition/review-loop-context.js.map +1 -0
- package/dist/composition/runtime-heartbeat-context.d.ts +11 -0
- package/dist/composition/runtime-heartbeat-context.d.ts.map +1 -1
- package/dist/composition/runtime-heartbeat-context.js +33 -2
- package/dist/composition/runtime-heartbeat-context.js.map +1 -1
- package/dist/composition/spawn-pass-deps.d.ts.map +1 -1
- package/dist/composition/spawn-pass-deps.js +3 -0
- package/dist/composition/spawn-pass-deps.js.map +1 -1
- package/dist/composition/state-cascade-context.d.ts.map +1 -1
- package/dist/composition/state-cascade-context.js +3 -1
- package/dist/composition/state-cascade-context.js.map +1 -1
- package/dist/composition/team-liveness-phase-sources.d.ts.map +1 -1
- package/dist/composition/team-liveness-phase-sources.js +1 -0
- package/dist/composition/team-liveness-phase-sources.js.map +1 -1
- package/dist/composition/tower-escalation-context.d.ts +12 -0
- package/dist/composition/tower-escalation-context.d.ts.map +1 -0
- package/dist/composition/tower-escalation-context.js +109 -0
- package/dist/composition/tower-escalation-context.js.map +1 -0
- package/dist/composition/verification-context.d.ts.map +1 -1
- package/dist/composition/verification-context.js +34 -4
- package/dist/composition/verification-context.js.map +1 -1
- package/dist/composition/workstation-intervals-context.d.ts +3 -0
- package/dist/composition/workstation-intervals-context.d.ts.map +1 -0
- package/dist/composition/workstation-intervals-context.js +33 -0
- package/dist/composition/workstation-intervals-context.js.map +1 -0
- package/dist/daemon-state/awaiting-slot.d.ts +18 -1
- package/dist/daemon-state/awaiting-slot.d.ts.map +1 -1
- package/dist/daemon-state/awaiting-slot.js +7 -0
- package/dist/daemon-state/awaiting-slot.js.map +1 -1
- package/dist/delivery/delivery-reconciler.d.ts +7 -7
- package/dist/delivery/recorded-concerns.d.ts +63 -28
- package/dist/delivery/recorded-concerns.d.ts.map +1 -1
- package/dist/delivery/recorded-concerns.js +72 -28
- package/dist/delivery/recorded-concerns.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 +1 -1
- package/dist/directive/directive-queue.js.map +1 -1
- package/dist/focus/control-state.d.ts +6 -4
- package/dist/focus/control-state.d.ts.map +1 -1
- package/dist/focus/control-state.js +6 -4
- package/dist/focus/control-state.js.map +1 -1
- package/dist/focus/daemon-contexts-judgement.d.ts +6 -0
- package/dist/focus/daemon-contexts-judgement.d.ts.map +1 -1
- package/dist/focus/daemon-contexts.d.ts +6 -0
- package/dist/focus/daemon-contexts.d.ts.map +1 -1
- package/dist/focus/daemon-contexts.js.map +1 -1
- package/dist/focus/focus-engine.d.ts.map +1 -1
- package/dist/focus/focus-engine.js +3 -1
- 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 +3 -2
- package/dist/focus/focus-executor.js.map +1 -1
- package/dist/focus/focus-loop-registry.d.ts.map +1 -1
- package/dist/focus/focus-loop-registry.js +42 -0
- package/dist/focus/focus-loop-registry.js.map +1 -1
- package/dist/focus/focus-poller-auto-advance.d.ts +4 -2
- package/dist/focus/focus-poller-auto-advance.d.ts.map +1 -1
- package/dist/focus/focus-poller-auto-advance.js +24 -18
- package/dist/focus/focus-poller-auto-advance.js.map +1 -1
- package/dist/focus/focus-poller-spawn.d.ts.map +1 -1
- package/dist/focus/focus-poller-spawn.js +8 -6
- package/dist/focus/focus-poller-spawn.js.map +1 -1
- package/dist/focus/heartbeat-metadata.d.ts +5 -0
- package/dist/focus/heartbeat-metadata.d.ts.map +1 -1
- package/dist/focus/heartbeat-metadata.js +12 -0
- package/dist/focus/heartbeat-metadata.js.map +1 -1
- package/dist/focus/heartbeat.d.ts +9 -2
- package/dist/focus/heartbeat.d.ts.map +1 -1
- package/dist/focus/heartbeat.js +10 -1
- package/dist/focus/heartbeat.js.map +1 -1
- package/dist/focus/host-pressure.d.ts +77 -0
- package/dist/focus/host-pressure.d.ts.map +1 -0
- package/dist/focus/host-pressure.js +83 -0
- package/dist/focus/host-pressure.js.map +1 -0
- package/dist/focus/pending-directive-gates.d.ts +14 -0
- package/dist/focus/pending-directive-gates.d.ts.map +1 -1
- package/dist/focus/pending-directive-gates.js +25 -1
- package/dist/focus/pending-directive-gates.js.map +1 -1
- package/dist/focus/pending-spawn-pass-deps.d.ts +7 -0
- package/dist/focus/pending-spawn-pass-deps.d.ts.map +1 -1
- package/dist/focus/pending-spawn-review-next-step.d.ts +1 -1
- package/dist/focus/pending-spawn-review-next-step.d.ts.map +1 -1
- package/dist/focus/pending-spawn-review-next-step.js +2 -0
- package/dist/focus/pending-spawn-review-next-step.js.map +1 -1
- package/dist/focus/ready-focus-team-work.d.ts +9 -4
- package/dist/focus/ready-focus-team-work.d.ts.map +1 -1
- package/dist/focus/ready-focus-team-work.js +14 -3
- package/dist/focus/ready-focus-team-work.js.map +1 -1
- package/dist/focus/verify-open-issues.d.ts +3 -2
- package/dist/focus/verify-open-issues.d.ts.map +1 -1
- package/dist/focus/verify-open-issues.js +6 -4
- package/dist/focus/verify-open-issues.js.map +1 -1
- package/dist/focus/workstation-intervals.d.ts +83 -0
- package/dist/focus/workstation-intervals.d.ts.map +1 -0
- package/dist/focus/workstation-intervals.js +81 -0
- package/dist/focus/workstation-intervals.js.map +1 -0
- package/dist/focus-stage-lifecycle/wedge-watchdog.d.ts +5 -2
- package/dist/focus-stage-lifecycle/wedge-watchdog.d.ts.map +1 -1
- package/dist/focus-stage-lifecycle/wedge-watchdog.js +2 -2
- package/dist/focus-stage-lifecycle/wedge-watchdog.js.map +1 -1
- package/dist/git/types.js +1 -1
- package/dist/merge/candidate-ci-failures.d.ts +72 -0
- package/dist/merge/candidate-ci-failures.d.ts.map +1 -0
- package/dist/merge/candidate-ci-failures.js +240 -0
- package/dist/merge/candidate-ci-failures.js.map +1 -0
- package/dist/merge/candidate-red-record.d.ts +44 -0
- package/dist/merge/candidate-red-record.d.ts.map +1 -0
- package/dist/merge/candidate-red-record.js +98 -0
- package/dist/merge/candidate-red-record.js.map +1 -0
- package/dist/merge/candidate-rework.d.ts +4 -3
- package/dist/merge/candidate-rework.d.ts.map +1 -1
- package/dist/merge/candidate-rework.js +46 -14
- package/dist/merge/candidate-rework.js.map +1 -1
- package/dist/merge/candidate-tip-attribution.d.ts +135 -0
- package/dist/merge/candidate-tip-attribution.d.ts.map +1 -0
- package/dist/merge/candidate-tip-attribution.js +319 -0
- package/dist/merge/candidate-tip-attribution.js.map +1 -0
- package/dist/merge/completion-merge-driver.d.ts +49 -5
- package/dist/merge/completion-merge-driver.d.ts.map +1 -1
- package/dist/merge/completion-merge-driver.js +56 -2
- package/dist/merge/completion-merge-driver.js.map +1 -1
- package/dist/merge/completion-merge-gate.d.ts +4 -1
- package/dist/merge/completion-merge-gate.d.ts.map +1 -1
- package/dist/merge/completion-merge-gate.js +9 -8
- package/dist/merge/completion-merge-gate.js.map +1 -1
- package/dist/prompt-sections/persona-sections.d.ts.map +1 -1
- package/dist/prompt-sections/persona-sections.js +4 -1
- package/dist/prompt-sections/persona-sections.js.map +1 -1
- package/dist/prompt-sections/qa-author-section.d.ts.map +1 -1
- package/dist/prompt-sections/qa-author-section.js +18 -1
- package/dist/prompt-sections/qa-author-section.js.map +1 -1
- package/dist/prompt-sections/scoping-sections.d.ts +0 -12
- package/dist/prompt-sections/scoping-sections.d.ts.map +1 -1
- package/dist/prompt-sections/scoping-sections.js +16 -2
- package/dist/prompt-sections/scoping-sections.js.map +1 -1
- package/dist/prompts/bounded-universals.d.ts +13 -0
- package/dist/prompts/bounded-universals.d.ts.map +1 -0
- package/dist/prompts/bounded-universals.js +32 -0
- package/dist/prompts/bounded-universals.js.map +1 -0
- package/dist/queries/api-client/shared.d.ts +2 -1
- package/dist/queries/api-client/shared.d.ts.map +1 -1
- package/dist/queries/api-client/shared.js +36 -1
- package/dist/queries/api-client/shared.js.map +1 -1
- package/dist/queries/candidate-ci-reds/candidate-ci-reds.d.ts +35 -0
- package/dist/queries/candidate-ci-reds/candidate-ci-reds.d.ts.map +1 -0
- package/dist/queries/candidate-ci-reds/candidate-ci-reds.js +42 -0
- package/dist/queries/candidate-ci-reds/candidate-ci-reds.js.map +1 -0
- package/dist/queries/candidate-ci-reds/gate-escape-files.d.ts +16 -0
- package/dist/queries/candidate-ci-reds/gate-escape-files.d.ts.map +1 -0
- package/dist/queries/candidate-ci-reds/gate-escape-files.js +51 -0
- package/dist/queries/candidate-ci-reds/gate-escape-files.js.map +1 -0
- package/dist/queries/deliveries/issues.d.ts.map +1 -1
- package/dist/queries/deliveries/issues.js +1 -0
- package/dist/queries/deliveries/issues.js.map +1 -1
- package/dist/queries/escalations/escalation-consumption.d.ts +13 -0
- package/dist/queries/escalations/escalation-consumption.d.ts.map +1 -1
- package/dist/queries/escalations/escalation-consumption.js +12 -2
- package/dist/queries/escalations/escalation-consumption.js.map +1 -1
- package/dist/queries/escalations/tower-escalations.d.ts +82 -0
- package/dist/queries/escalations/tower-escalations.d.ts.map +1 -0
- package/dist/queries/escalations/tower-escalations.js +97 -0
- package/dist/queries/escalations/tower-escalations.js.map +1 -0
- package/dist/queries/focus-review/recorded-concern-ids.d.ts +48 -11
- package/dist/queries/focus-review/recorded-concern-ids.d.ts.map +1 -1
- package/dist/queries/focus-review/recorded-concern-ids.js +42 -12
- package/dist/queries/focus-review/recorded-concern-ids.js.map +1 -1
- package/dist/queries/focus-review/review-criterion-verdicts.d.ts +37 -0
- package/dist/queries/focus-review/review-criterion-verdicts.d.ts.map +1 -0
- package/dist/queries/focus-review/review-criterion-verdicts.js +64 -0
- package/dist/queries/focus-review/review-criterion-verdicts.js.map +1 -0
- package/dist/queries/focus-review/review-finding-facts.d.ts +18 -6
- package/dist/queries/focus-review/review-finding-facts.d.ts.map +1 -1
- package/dist/queries/focus-review/review-finding-facts.js +21 -8
- package/dist/queries/focus-review/review-finding-facts.js.map +1 -1
- package/dist/queries/focuses/ended-arm.d.ts +56 -13
- package/dist/queries/focuses/ended-arm.d.ts.map +1 -1
- package/dist/queries/focuses/ended-arm.js +40 -14
- package/dist/queries/focuses/ended-arm.js.map +1 -1
- package/dist/queries/focuses/focus-criteria-standing.d.ts +12 -0
- package/dist/queries/focuses/focus-criteria-standing.d.ts.map +1 -1
- package/dist/queries/focuses/focus-criteria-standing.js +13 -0
- package/dist/queries/focuses/focus-criteria-standing.js.map +1 -1
- package/dist/queries/focuses/focus-discovery.d.ts +14 -3
- package/dist/queries/focuses/focus-discovery.d.ts.map +1 -1
- package/dist/queries/focuses/focus-discovery.js +2 -19
- package/dist/queries/focuses/focus-discovery.js.map +1 -1
- package/dist/queries/focuses/focuses.d.ts +15 -12
- package/dist/queries/focuses/focuses.d.ts.map +1 -1
- package/dist/queries/focuses/focuses.js +15 -13
- package/dist/queries/focuses/focuses.js.map +1 -1
- package/dist/queries/sessions/daemon-connection.d.ts.map +1 -1
- package/dist/queries/sessions/daemon-connection.js +1 -0
- package/dist/queries/sessions/daemon-connection.js.map +1 -1
- package/dist/queries/sessions/sessions.d.ts.map +1 -1
- package/dist/queries/sessions/sessions.js +2 -1
- package/dist/queries/sessions/sessions.js.map +1 -1
- package/dist/queries/tower-decisions/tower-decisions.d.ts +103 -0
- package/dist/queries/tower-decisions/tower-decisions.d.ts.map +1 -0
- package/dist/queries/tower-decisions/tower-decisions.js +138 -0
- package/dist/queries/tower-decisions/tower-decisions.js.map +1 -0
- package/dist/queries/verification/verification.js +1 -1
- package/dist/queries/wire-schemas/schemas.d.ts +2 -0
- package/dist/queries/wire-schemas/schemas.d.ts.map +1 -1
- package/dist/queries/wire-schemas/schemas.js +8 -2
- package/dist/queries/wire-schemas/schemas.js.map +1 -1
- package/dist/queries/workstation-intervals/workstation-intervals.d.ts +52 -0
- package/dist/queries/workstation-intervals/workstation-intervals.d.ts.map +1 -0
- package/dist/queries/workstation-intervals/workstation-intervals.js +49 -0
- package/dist/queries/workstation-intervals/workstation-intervals.js.map +1 -0
- package/dist/resolvers/escalation-answers.d.ts +31 -0
- package/dist/resolvers/escalation-answers.d.ts.map +1 -1
- package/dist/resolvers/escalation-answers.js +31 -17
- package/dist/resolvers/escalation-answers.js.map +1 -1
- package/dist/resolvers/focus-criteria-standing.d.ts.map +1 -1
- package/dist/resolvers/focus-criteria-standing.js +20 -0
- package/dist/resolvers/focus-criteria-standing.js.map +1 -1
- package/dist/shell/unified-engine-lifecycle.d.ts +11 -1
- package/dist/shell/unified-engine-lifecycle.d.ts.map +1 -1
- package/dist/shell/unified-engine-lifecycle.js +10 -1
- package/dist/shell/unified-engine-lifecycle.js.map +1 -1
- package/dist/shell/unified-shell.d.ts +25 -0
- package/dist/shell/unified-shell.d.ts.map +1 -1
- package/dist/shell/unified-shell.js +26 -80
- package/dist/shell/unified-shell.js.map +1 -1
- package/dist/shell/update-restart.d.ts +47 -0
- package/dist/shell/update-restart.d.ts.map +1 -0
- package/dist/shell/update-restart.js +124 -0
- package/dist/shell/update-restart.js.map +1 -0
- package/dist/spawn/directive-dispatch.d.ts.map +1 -1
- package/dist/spawn/directive-dispatch.js +1 -0
- package/dist/spawn/directive-dispatch.js.map +1 -1
- package/dist/spawn/lead-continuation.d.ts +4 -3
- package/dist/spawn/lead-continuation.d.ts.map +1 -1
- package/dist/spawn/lead-continuation.js.map +1 -1
- package/dist/spawn/live-answer-delivery.d.ts +53 -0
- package/dist/spawn/live-answer-delivery.d.ts.map +1 -0
- package/dist/spawn/live-answer-delivery.js +26 -0
- package/dist/spawn/live-answer-delivery.js.map +1 -0
- package/dist/spawn/routing-decider-spawn.d.ts +64 -2
- package/dist/spawn/routing-decider-spawn.d.ts.map +1 -1
- package/dist/spawn/routing-decider-spawn.js +65 -20
- package/dist/spawn/routing-decider-spawn.js.map +1 -1
- package/dist/spawn/worktree-session.d.ts +7 -5
- package/dist/spawn/worktree-session.d.ts.map +1 -1
- package/dist/spawn/worktree-session.js +11 -7
- package/dist/spawn/worktree-session.js.map +1 -1
- package/dist/supervision/escalation-suppression.js +1 -1
- package/dist/supervision/review-cycle-cap-hold.d.ts +11 -5
- package/dist/supervision/review-cycle-cap-hold.d.ts.map +1 -1
- package/dist/supervision/review-cycle-cap-hold.js +29 -11
- package/dist/supervision/review-cycle-cap-hold.js.map +1 -1
- package/dist/supervision/review-loop-detector.d.ts +48 -0
- package/dist/supervision/review-loop-detector.d.ts.map +1 -0
- package/dist/supervision/review-loop-detector.js +13 -0
- package/dist/supervision/review-loop-detector.js.map +1 -0
- package/dist/supervision/review-loop-hold.d.ts +29 -0
- package/dist/supervision/review-loop-hold.d.ts.map +1 -0
- package/dist/supervision/review-loop-hold.js +99 -0
- package/dist/supervision/review-loop-hold.js.map +1 -0
- package/dist/supervision/stall-detector-config.d.ts +8 -0
- package/dist/supervision/stall-detector-config.d.ts.map +1 -1
- package/dist/supervision/stall-detector-config.js +14 -3
- package/dist/supervision/stall-detector-config.js.map +1 -1
- package/dist/supervision/stop-registry.d.ts +3 -0
- package/dist/supervision/stop-registry.d.ts.map +1 -1
- package/dist/supervision/stop-registry.js +3 -1
- package/dist/supervision/stop-registry.js.map +1 -1
- package/dist/supervision/stop-rows-review-loop.d.ts +35 -0
- package/dist/supervision/stop-rows-review-loop.d.ts.map +1 -0
- package/dist/supervision/stop-rows-review-loop.js +150 -0
- package/dist/supervision/stop-rows-review-loop.js.map +1 -0
- package/dist/supervision/stop-rows-team-session.d.ts +1 -1
- package/dist/supervision/stop-rows-team-session.d.ts.map +1 -1
- package/dist/supervision/stop-rows-team-session.js.map +1 -1
- package/dist/supervision/unreviewed-settle-detector.d.ts +7 -2
- package/dist/supervision/unreviewed-settle-detector.d.ts.map +1 -1
- package/dist/supervision/unreviewed-settle-detector.js +15 -2
- package/dist/supervision/unreviewed-settle-detector.js.map +1 -1
- package/dist/templates/agents-md.d.ts.map +1 -1
- package/dist/templates/agents-md.js +1 -0
- package/dist/templates/agents-md.js.map +1 -1
- package/dist/templates/claude-md.d.ts +1 -1
- package/dist/templates/claude-md.d.ts.map +1 -1
- package/dist/templates/claude-md.js +12 -0
- package/dist/templates/claude-md.js.map +1 -1
- package/dist/testing/fixtures/api-client.js +1 -1
- package/dist/testing/fixtures/completion-judge-stubs.d.ts +7 -2
- package/dist/testing/fixtures/completion-judge-stubs.d.ts.map +1 -1
- package/dist/testing/fixtures/completion-judge-stubs.js +11 -1
- package/dist/testing/fixtures/completion-judge-stubs.js.map +1 -1
- 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 +4 -0
- package/dist/testing/fixtures/pending-spawn-world.d.ts.map +1 -1
- package/dist/testing/fixtures/pending-spawn-world.js +15 -2
- 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.d.ts.map +1 -1
- package/dist/testing/fixtures/review-exit-deps.js +3 -1
- package/dist/testing/fixtures/review-exit-deps.js.map +1 -1
- package/dist/testing/fixtures/review-loop.d.ts +19 -0
- package/dist/testing/fixtures/review-loop.d.ts.map +1 -0
- package/dist/testing/fixtures/review-loop.js +30 -0
- package/dist/testing/fixtures/review-loop.js.map +1 -0
- package/dist/testing/fixtures/shortfall-rework-hold-deps.d.ts.map +1 -1
- package/dist/testing/fixtures/shortfall-rework-hold-deps.js +1 -0
- package/dist/testing/fixtures/shortfall-rework-hold-deps.js.map +1 -1
- package/dist/testing/fixtures/tower-loop.d.ts +28 -0
- package/dist/testing/fixtures/tower-loop.d.ts.map +1 -0
- package/dist/testing/fixtures/tower-loop.js +83 -0
- package/dist/testing/fixtures/tower-loop.js.map +1 -0
- package/dist/testing/fixtures/verification-deps.d.ts +7 -0
- package/dist/testing/fixtures/verification-deps.d.ts.map +1 -1
- package/dist/testing/fixtures/verification-deps.js +17 -1
- package/dist/testing/fixtures/verification-deps.js.map +1 -1
- package/dist/testing/fixtures/vitest-failure-log.d.ts.map +1 -1
- package/dist/testing/fixtures/vitest-failure-log.js +2 -1
- package/dist/testing/fixtures/vitest-failure-log.js.map +1 -1
- package/dist/tower/tower-escalation-gather.d.ts +33 -0
- package/dist/tower/tower-escalation-gather.d.ts.map +1 -0
- package/dist/tower/tower-escalation-gather.js +38 -0
- package/dist/tower/tower-escalation-gather.js.map +1 -0
- package/dist/tower/tower-escalation-prompt.d.ts +62 -0
- package/dist/tower/tower-escalation-prompt.d.ts.map +1 -0
- package/dist/tower/tower-escalation-prompt.js +130 -0
- package/dist/tower/tower-escalation-prompt.js.map +1 -0
- package/dist/tower/tower-escalation-routing.d.ts +49 -0
- package/dist/tower/tower-escalation-routing.d.ts.map +1 -0
- package/dist/tower/tower-escalation-routing.js +53 -0
- package/dist/tower/tower-escalation-routing.js.map +1 -0
- package/dist/tower/tower-escalation-session.d.ts +149 -0
- package/dist/tower/tower-escalation-session.d.ts.map +1 -0
- package/dist/tower/tower-escalation-session.js +238 -0
- package/dist/tower/tower-escalation-session.js.map +1 -0
- package/dist/tower/tower-supervisor-history.d.ts +129 -0
- package/dist/tower/tower-supervisor-history.d.ts.map +1 -0
- package/dist/tower/tower-supervisor-history.js +217 -0
- package/dist/tower/tower-supervisor-history.js.map +1 -0
- package/dist/tower/tower-supervisor-prompt.d.ts +21 -0
- package/dist/tower/tower-supervisor-prompt.d.ts.map +1 -0
- package/dist/tower/tower-supervisor-prompt.js +205 -0
- package/dist/tower/tower-supervisor-prompt.js.map +1 -0
- package/dist/tower/tower-supervisor-session.d.ts +220 -0
- package/dist/tower/tower-supervisor-session.d.ts.map +1 -0
- package/dist/tower/tower-supervisor-session.js +307 -0
- package/dist/tower/tower-supervisor-session.js.map +1 -0
- package/dist/tower/tower-supervisor.d.ts +86 -0
- package/dist/tower/tower-supervisor.d.ts.map +1 -0
- package/dist/tower/tower-supervisor.js +8 -0
- package/dist/tower/tower-supervisor.js.map +1 -0
- package/dist/types/index.js +1 -1
- package/dist/update/auto-update.d.ts +11 -5
- package/dist/update/auto-update.d.ts.map +1 -1
- package/dist/update/auto-update.js +11 -5
- package/dist/update/auto-update.js.map +1 -1
- package/dist/update/restart-contract.d.ts +62 -0
- package/dist/update/restart-contract.d.ts.map +1 -0
- package/dist/update/restart-contract.js +137 -0
- package/dist/update/restart-contract.js.map +1 -0
- package/dist/verify/attribution/verification-baseline-run.d.ts.map +1 -1
- package/dist/verify/attribution/verification-baseline-run.js +1 -0
- package/dist/verify/attribution/verification-baseline-run.js.map +1 -1
- package/dist/verify/ci-gate/ci-gate-dispatch.d.ts +3 -0
- package/dist/verify/ci-gate/ci-gate-dispatch.d.ts.map +1 -1
- package/dist/verify/ci-gate/ci-gate-dispatch.js +31 -9
- package/dist/verify/ci-gate/ci-gate-dispatch.js.map +1 -1
- package/dist/verify/ci-gate/ci-gate-wait-record.d.ts +6 -0
- package/dist/verify/ci-gate/ci-gate-wait-record.d.ts.map +1 -1
- package/dist/verify/ci-gate/ci-gate-wait-record.js +1 -0
- package/dist/verify/ci-gate/ci-gate-wait-record.js.map +1 -1
- package/dist/verify/deterministic-gate/verification-checkout.d.ts +12 -2
- package/dist/verify/deterministic-gate/verification-checkout.d.ts.map +1 -1
- package/dist/verify/deterministic-gate/verification-checkout.js +18 -3
- package/dist/verify/deterministic-gate/verification-checkout.js.map +1 -1
- package/dist/verify/deterministic-gate/verification-deterministic.js +1 -1
- package/dist/verify/deterministic-gate/verification-failure-parser.d.ts +30 -9
- package/dist/verify/deterministic-gate/verification-failure-parser.d.ts.map +1 -1
- package/dist/verify/deterministic-gate/verification-failure-parser.js +52 -8
- package/dist/verify/deterministic-gate/verification-failure-parser.js.map +1 -1
- package/dist/verify/engine/verification-commit-sharing.d.ts.map +1 -1
- package/dist/verify/engine/verification-commit-sharing.js +6 -2
- package/dist/verify/engine/verification-commit-sharing.js.map +1 -1
- package/dist/verify/engine/verification-deps.d.ts +9 -0
- package/dist/verify/engine/verification-deps.d.ts.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 +4 -1
- package/dist/verify/engine/verification-engine.js.map +1 -1
- package/dist/verify/escaped-tests/escaped-pass-store.d.ts +19 -0
- package/dist/verify/escaped-tests/escaped-pass-store.d.ts.map +1 -0
- package/dist/verify/escaped-tests/escaped-pass-store.js +90 -0
- package/dist/verify/escaped-tests/escaped-pass-store.js.map +1 -0
- package/dist/verify/escaped-tests/escaped-test-run.d.ts +39 -0
- package/dist/verify/escaped-tests/escaped-test-run.d.ts.map +1 -0
- package/dist/verify/escaped-tests/escaped-test-run.js +156 -0
- package/dist/verify/escaped-tests/escaped-test-run.js.map +1 -0
- package/dist/verify/escaped-tests/escaped-test-set.d.ts +65 -0
- package/dist/verify/escaped-tests/escaped-test-set.d.ts.map +1 -0
- package/dist/verify/escaped-tests/escaped-test-set.js +95 -0
- package/dist/verify/escaped-tests/escaped-test-set.js.map +1 -0
- package/dist/verify/escaped-tests/escaped-tests-source.d.ts +44 -0
- package/dist/verify/escaped-tests/escaped-tests-source.d.ts.map +1 -0
- package/dist/verify/escaped-tests/escaped-tests-source.js +142 -0
- package/dist/verify/escaped-tests/escaped-tests-source.js.map +1 -0
- package/dist/verify/gate-config/verification-manifest.d.ts +12 -1
- package/dist/verify/gate-config/verification-manifest.d.ts.map +1 -1
- package/dist/verify/gate-config/verification-manifest.js +12 -1
- package/dist/verify/gate-config/verification-manifest.js.map +1 -1
- package/dist/verify/gate-verdicts/commit-verdict-record.js +1 -1
- package/dist/verify/outcome-routing/verification-rework-issue.d.ts +4 -4
- package/dist/verify/outcome-routing/verification-rework-issue.d.ts.map +1 -1
- package/dist/verify/outcome-routing/verification-rework-issue.js +16 -6
- package/dist/verify/outcome-routing/verification-rework-issue.js.map +1 -1
- package/package.json +3 -3
- package/scripts/telora-daemon-wrapper.sh +16 -7
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"product-ci-repo.js","sourceRoot":"","sources":["../../src/ci/product-ci-repo.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAC9F,mEAAmE;AACnE,
|
|
1
|
+
{"version":3,"file":"product-ci-repo.js","sourceRoot":"","sources":["../../src/ci/product-ci-repo.ts"],"names":[],"mappings":"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"}
|
|
@@ -39,9 +39,10 @@ export interface CompletionEventDeps {
|
|
|
39
39
|
getFocusDeliveries: (focusId: string) => Promise<FocusDeliveryInfo[]>;
|
|
40
40
|
getFocusIssues: (focusId: string) => Promise<FocusIssueInfo[]>;
|
|
41
41
|
/**
|
|
42
|
-
* The focus's recorded review concerns (delivery/recorded-concerns.ts
|
|
43
|
-
*
|
|
44
|
-
*
|
|
42
|
+
* The focus's recorded review concerns (delivery/recorded-concerns.ts), read once
|
|
43
|
+
* per turn with the work state: a concern is the human's, so it is neither team
|
|
44
|
+
* work nor listed as work. Unreadable classes keep the turn undecided
|
|
45
|
+
* (decide-turn-entry-rows.ts work-classes-unreadable).
|
|
45
46
|
*/
|
|
46
47
|
readRecordedConcernIds: RecordedConcernReader;
|
|
47
48
|
createEscalation: (params: CreateEscalationParams) => Promise<{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event.d.ts","sourceRoot":"","sources":["../../../src/completion/completion-event/event.ts"],"names":[],"mappings":"AAiBA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,iBAAiB,EAAE,cAAc,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzI,OAAO,KAAK,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACxE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,wCAAwC,CAAC;AACrF,OAAO,KAAK,EACV,6BAA6B,EAC7B,6BAA6B,EAC9B,MAAM,2CAA2C,CAAC;AACnD,OAAO,EAAoB,KAAK,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAKrF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,qCAAqC,CAAC;AAIjF,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,YAAY,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,cAAc,CAAC;IAC1B,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,IAAI,EAAE,YAAY,CAAC;IACnB,cAAc,EAAE,cAAc,CAAC;CAChC;AAED;;;;;GAKG;AACH,MAAM,WAAW,mBAAmB;IAClC,kBAAkB,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC;IACtE,cAAc,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;IAC/D
|
|
1
|
+
{"version":3,"file":"event.d.ts","sourceRoot":"","sources":["../../../src/completion/completion-event/event.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event.js","sourceRoot":"","sources":["../../../src/completion/completion-event/event.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAC9F,oGAAoG;AACpG,8EAA8E;AAC9E,mFAAmF;AACnF,uGAAuG;AACvG,oFAAoF;AACpF,sFAAsF;AACtF,wFAAwF;AACxF,6EAA6E;AAC7E,+DAA+D;AAC/D,uFAAuF;AACvF,0FAA0F;AAC1F,6DAA6D;AAC7D,+EAA+E;AAC/E,8DAA8D;AAC9D,gBAAgB;AAwBhB,OAAO,EAAE,gBAAgB,EAAoB,MAAM,iCAAiC,CAAC;AACrF,OAAO,EAAE,uBAAuB,EAAE,MAAM,wCAAwC,CAAC;AACjF,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"event.js","sourceRoot":"","sources":["../../../src/completion/completion-event/event.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAC9F,oGAAoG;AACpG,8EAA8E;AAC9E,mFAAmF;AACnF,uGAAuG;AACvG,oFAAoF;AACpF,sFAAsF;AACtF,wFAAwF;AACxF,6EAA6E;AAC7E,+DAA+D;AAC/D,uFAAuF;AACvF,0FAA0F;AAC1F,6DAA6D;AAC7D,+EAA+E;AAC/E,8DAA8D;AAC9D,gBAAgB;AAwBhB,OAAO,EAAE,gBAAgB,EAAoB,MAAM,iCAAiC,CAAC;AACrF,OAAO,EAAE,uBAAuB,EAAE,MAAM,wCAAwC,CAAC;AACjF,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AA6MjE;;;;GAIG;AACH,MAAM,UAAU,2BAA2B,CAAC,GAA2B;IACrE,OAAO,gBAAgB,CAAC;QACtB,OAAO,EAAE,eAAe;QACxB,SAAS,EAAE,GAAG,CAAC,SAAS;QACxB,aAAa,EAAE,GAAG,CAAC,cAAc,EAAE,MAAM,EAAE,OAAO,KAAK,IAAI;KAC5D,CAAC,CAAC;AACL,CAAC;AAED,2EAA2E;AAE3E;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,GAA2B,EAC3B,IAAyB;IAEzB,2EAA2E;IAC3E,8EAA8E;IAC9E,mEAAmE;IACnE,oBAAoB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACpC,MAAM,KAAK,GAAG,uBAAuB,CAAC,2BAA2B,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC;IACvF,MAAM,mBAAmB,CAAC,KAAK,EAAE,eAAe,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;AAC/D,CAAC"}
|
|
@@ -32,10 +32,17 @@
|
|
|
32
32
|
* - any other routed cycle increments it. Below the budget nothing else
|
|
33
33
|
* happens, so cycling below it is unchanged.
|
|
34
34
|
* - at the budget: the count is written FIRST (so a failed un-arm still stops
|
|
35
|
-
* by count -- supervision/review-cycle-cap-hold.ts), then the arm is released
|
|
36
|
-
* its reason
|
|
37
|
-
*
|
|
38
|
-
*
|
|
35
|
+
* by count -- supervision/review-cycle-cap-hold.ts), then the arm is released
|
|
36
|
+
* with its reason AND the review window closed in ONE write (unless a
|
|
37
|
+
* delivery awaits its gate verdict, which keeps the window). The count is NOT
|
|
38
|
+
* reset: it is the fail-closed backstop for an un-arm write that did not land,
|
|
39
|
+
* and the arm edge is what clears it.
|
|
40
|
+
* - a release that FAILS closes nothing -- closing the window on its own would
|
|
41
|
+
* fire the DB's lifecycle clear, which would end the arm under a reason that
|
|
42
|
+
* is not this one -- and is handed to the backstop retry
|
|
43
|
+
* (spent-budget-release.ts), which re-attempts it with the same record on
|
|
44
|
+
* every cascade poll until it lands. The role is never left set under a
|
|
45
|
+
* silent cap hold.
|
|
39
46
|
*
|
|
40
47
|
* A DAEMON SHUTDOWN SPENDS NOTHING. A review team killed by a shutdown exits
|
|
41
48
|
* with no inspection evidence, which routes exactly like a bounce -- so without
|
|
@@ -47,7 +54,8 @@
|
|
|
47
54
|
*
|
|
48
55
|
* @module completion/review-cycle-budget/review-cycle-cap
|
|
49
56
|
*/
|
|
50
|
-
import type { setReviewCycleCount
|
|
57
|
+
import type { setReviewCycleCount } from '../../queries/focuses/focuses.js';
|
|
58
|
+
import { type SpentBudgetRelease } from './spent-budget-release.js';
|
|
51
59
|
import type { ReviewFiledFindingSummary } from '../review-exit/review-exit-escalations.js';
|
|
52
60
|
import type { OpenConcernSummary } from '../../queries/focus-review/recorded-concern-ids.js';
|
|
53
61
|
/** The routed review exit's facts the cycle count is decided from. */
|
|
@@ -86,16 +94,16 @@ export declare function reviewCycleConverged(outcome: Pick<ReviewCycleOutcome, '
|
|
|
86
94
|
export interface ReviewCycleCapDeps {
|
|
87
95
|
setReviewCycleCount: typeof setReviewCycleCount;
|
|
88
96
|
resolveReviewCycleCap: () => number;
|
|
89
|
-
clearReviewRequestedAt: typeof clearReviewRequestedAt;
|
|
90
97
|
/**
|
|
91
98
|
* The un-arm writer (queries/focuses/focuses.ts releaseFocusArm), which carries the
|
|
92
|
-
* ended-arm record
|
|
93
|
-
*
|
|
94
|
-
*
|
|
95
|
-
* spawn gate by itself
|
|
99
|
+
* ended-arm record -- and, when asked, the review-window close -- in the SAME
|
|
100
|
+
* edge call as the release. A release that fails does not stop the run -- so
|
|
101
|
+
* the crossing REFUSES to pretend: it logs that the arm was not ended, leaves
|
|
102
|
+
* the count at the budget (which holds every spawn gate by itself) and hands
|
|
103
|
+
* the record to the backstop retry. The composition root binds it
|
|
96
104
|
* (composition/review-exit-context.ts; pinned by review-cycle-churn-meter.test.ts).
|
|
97
105
|
*/
|
|
98
|
-
releaseFocusArm:
|
|
106
|
+
releaseFocusArm: SpentBudgetRelease;
|
|
99
107
|
isShuttingDown: () => boolean;
|
|
100
108
|
}
|
|
101
109
|
/** The focus this exit belongs to. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"review-cycle-cap.d.ts","sourceRoot":"","sources":["../../../src/completion/review-cycle-budget/review-cycle-cap.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"review-cycle-cap.d.ts","sourceRoot":"","sources":["../../../src/completion/review-cycle-budget/review-cycle-cap.ts"],"names":[],"mappings":"AAMA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuDG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AAE5E,OAAO,EAAqC,KAAK,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACvG,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,2CAA2C,CAAC;AAC3F,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oDAAoD,CAAC;AAM7F,sEAAsE;AACtE,MAAM,WAAW,kBAAkB;IACjC;;;;;;;OAOG;IACH,WAAW,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAClC,8CAA8C;IAC9C,YAAY,EAAE,OAAO,CAAC;IACtB,uDAAuD;IACvD,yBAAyB,EAAE,OAAO,CAAC;IACnC,6FAA6F;IAC7F,cAAc,EAAE,OAAO,CAAC;IACxB,oFAAoF;IACpF,oBAAoB,EAAE,yBAAyB,EAAE,CAAC;IAClD;;;;OAIG;IACH,YAAY,CAAC,EAAE,kBAAkB,EAAE,CAAC;CACrC;AAED,kGAAkG;AAClG,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,IAAI,CAAC,kBAAkB,EAAE,cAAc,GAAG,2BAA2B,GAAG,sBAAsB,CAAC,GAAG,OAAO,CAEtJ;AAED;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC,mBAAmB,EAAE,OAAO,mBAAmB,CAAC;IAChD,qBAAqB,EAAE,MAAM,MAAM,CAAC;IACpC;;;;;;;;OAQG;IACH,eAAe,EAAE,kBAAkB,CAAC;IACpC,cAAc,EAAE,MAAM,OAAO,CAAC;CAC/B;AAED,sCAAsC;AACtC,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAqDD;;;;GAIG;AACH,wBAAsB,+BAA+B,CACnD,IAAI,EAAE,kBAAkB,EACxB,GAAG,EAAE,qBAAqB,EAC1B,eAAe,EAAE,MAAM,EACvB,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,IAAI,CAAC,CAgDf"}
|
|
@@ -1,7 +1,10 @@
|
|
|
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/review-cycle-budget/review-cycle-churn-meter.test.ts
|
|
2
|
+
// Pinned by: packages/daemon/src/completion/review-cycle-budget/review-cycle-churn-meter.test.ts,
|
|
3
|
+
// packages/daemon/src/completion/review-cycle-budget/review-loop-detection.test.ts,
|
|
4
|
+
// packages/daemon/src/completion/review-cycle-budget/spent-budget-release.test.ts
|
|
3
5
|
// PINNED-BY-END
|
|
4
6
|
import { ARM_ENDED_REVIEW_BUDGET_SPENT } from '../../queries/focuses/ended-arm.js';
|
|
7
|
+
import { rememberPendingSpentBudgetRelease } from './spent-budget-release.js';
|
|
5
8
|
import { createLogger } from '../../log/daemon-log.js';
|
|
6
9
|
import { stopFires } from '../../supervision/stop-registry.js';
|
|
7
10
|
const log = createLogger({ module: 'focus-executor' });
|
|
@@ -21,28 +24,31 @@ async function writeCycleCount(setCount, ctx, count) {
|
|
|
21
24
|
}
|
|
22
25
|
}
|
|
23
26
|
/**
|
|
24
|
-
* End the armed run: release the role
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
27
|
+
* End the armed run: release the role, record WHY and (unless a gate verdict
|
|
28
|
+
* holds it) close the review window, atomically, in one edge call. Returns
|
|
29
|
+
* whether the write landed. A failure closes nothing and hands the record to
|
|
30
|
+
* the backstop retry (spent-budget-release.ts), which re-attempts it every
|
|
31
|
+
* cascade poll while the count stands at the budget.
|
|
28
32
|
*/
|
|
29
33
|
async function endArmForSpentBudget(release, ctx, args) {
|
|
34
|
+
const record = {
|
|
35
|
+
reason: ARM_ENDED_REVIEW_BUDGET_SPENT,
|
|
36
|
+
detail: {
|
|
37
|
+
reviewCycleCount: args.cycleCount,
|
|
38
|
+
cap: args.cap,
|
|
39
|
+
openBlockingFindings: args.openBlockingFindings.map((f) => ({
|
|
40
|
+
id: f.id, key: f.key, title: f.title, deliveryId: f.deliveryId ?? null,
|
|
41
|
+
})),
|
|
42
|
+
openConcerns: args.openConcerns.map((c) => ({ id: c.id, key: c.key, title: c.title, deliveryId: c.deliveryId })),
|
|
43
|
+
},
|
|
44
|
+
};
|
|
30
45
|
try {
|
|
31
|
-
await release(ctx.focusId, {
|
|
32
|
-
reason: ARM_ENDED_REVIEW_BUDGET_SPENT,
|
|
33
|
-
detail: {
|
|
34
|
-
reviewCycleCount: args.cycleCount,
|
|
35
|
-
cap: args.cap,
|
|
36
|
-
openBlockingFindings: args.openBlockingFindings.map((f) => ({
|
|
37
|
-
id: f.id, key: f.key, title: f.title, deliveryId: f.deliveryId ?? null,
|
|
38
|
-
})),
|
|
39
|
-
openConcerns: args.openConcerns.map((c) => ({ id: c.id, key: c.key, title: c.title, deliveryId: c.deliveryId })),
|
|
40
|
-
},
|
|
41
|
-
});
|
|
46
|
+
await release(ctx.focusId, record, { closeReviewWindow: args.closeReviewWindow });
|
|
42
47
|
return true;
|
|
43
48
|
}
|
|
44
49
|
catch (err) {
|
|
45
50
|
log.warn(`[focus-executor] releaseFocusArm (review budget) failed for "${ctx.focusName}": ${err.message}`);
|
|
51
|
+
rememberPendingSpentBudgetRelease(ctx.focusId, { record, closeReviewWindow: args.closeReviewWindow });
|
|
46
52
|
return false;
|
|
47
53
|
}
|
|
48
54
|
}
|
|
@@ -77,28 +83,22 @@ export async function recordReviewCycleAndMaybeEndArm(deps, ctx, priorCycleCount
|
|
|
77
83
|
await writeCycleCount(deps.setReviewCycleCount, ctx, cycleCount);
|
|
78
84
|
if (!stopFires('review_budget_spent', { reviewCycleCount: cycleCount, cap }))
|
|
79
85
|
return;
|
|
80
|
-
//
|
|
81
|
-
//
|
|
82
|
-
//
|
|
83
|
-
//
|
|
84
|
-
//
|
|
85
|
-
const
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
await deps.clearReviewRequestedAt(ctx.focusId);
|
|
91
|
-
}
|
|
92
|
-
catch (err) {
|
|
93
|
-
log.warn(`[focus-executor] clearReviewRequestedAt (review budget) failed for "${ctx.focusName}": ${err.message}`);
|
|
94
|
-
}
|
|
95
|
-
}
|
|
86
|
+
// ONE write: the arm, its reason and (unless a delivery awaits its gate
|
|
87
|
+
// verdict -- that replay converges without a spawn and needs the window) the
|
|
88
|
+
// window close. Closing the window in a separate write would fire
|
|
89
|
+
// clear_focus_team_on_review_window_close(), which ends the arm under the
|
|
90
|
+
// lifecycle reason instead of this one.
|
|
91
|
+
const closeReviewWindow = !outcome.verdictHeldAny;
|
|
92
|
+
const armEnded = await endArmForSpentBudget(deps.releaseFocusArm, ctx, {
|
|
93
|
+
cycleCount, cap, closeReviewWindow,
|
|
94
|
+
openBlockingFindings: outcome.openBlockingFindings, openConcerns: outcome.openConcerns ?? [],
|
|
95
|
+
});
|
|
96
96
|
log.warn(`[focus-executor] "${ctx.focusName}" spent its review-cycle budget without converging (${cycleCount} >= cap ${cap}): ` +
|
|
97
97
|
(armEnded
|
|
98
98
|
? `the armed run has ENDED -- the focus is un-armed with arm_ended_reason='review_budget_spent' ` +
|
|
99
|
-
`(${outcome.openBlockingFindings.length} open blocking review-filed finding(s), none closed). Only a new arm grants further cycles.`
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
99
|
+
`(${outcome.openBlockingFindings.length} open blocking review-filed finding(s), none closed). Only a new arm grants further cycles.` +
|
|
100
|
+
` Review window ${closeReviewWindow ? 'closed in the same write' : 'left open for a pending gate verdict'}.`
|
|
101
|
+
: `the arm was NOT ended (the release write failed) -- the count stands at the budget, which holds every ` +
|
|
102
|
+
`spawn gate, the review window is left as it was, and the release is re-attempted on every cascade poll until it lands.`));
|
|
103
103
|
}
|
|
104
104
|
//# sourceMappingURL=review-cycle-cap.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"review-cycle-cap.js","sourceRoot":"","sources":["../../../src/completion/review-cycle-budget/review-cycle-cap.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAC9F,
|
|
1
|
+
{"version":3,"file":"review-cycle-cap.js","sourceRoot":"","sources":["../../../src/completion/review-cycle-budget/review-cycle-cap.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The review exit SEES a non-converging review loop and holds it BEFORE the
|
|
3
|
+
* review budget is spent.
|
|
4
|
+
*
|
|
5
|
+
* On every routed exit of a REVIEW session, before the review-cycle budget is
|
|
6
|
+
* recorded (recordReviewLoopThenCycle), the daemon reads the focus's
|
|
7
|
+
* per-criterion verdicts on its most recent reviews under the arm and asks the
|
|
8
|
+
* review_loop_detected stop row (supervision/review-loop-detector.ts) whether
|
|
9
|
+
* one criterion is failing alone, review after review, each review naming a
|
|
10
|
+
* new blocking finding against it. On a loop it:
|
|
11
|
+
* 1. records ONE `loop_detected` decision on the focus (focus_tower_decisions,
|
|
12
|
+
* decided_by_kind 'daemon'), carrying the criterion, the reviews, the
|
|
13
|
+
* blocking findings each named, the cycle count this exit records and the
|
|
14
|
+
* cap -- the durable hold every spawn gate reads
|
|
15
|
+
* (supervision/review-loop-hold.ts);
|
|
16
|
+
* 2. calls the Tower supervisor with it (tower/tower-supervisor.ts), which
|
|
17
|
+
* decides the loop without the operator and resolves it by recording a
|
|
18
|
+
* `loop_resolved` that names it.
|
|
19
|
+
*
|
|
20
|
+
* WHAT IS NOT RE-DETECTED. A focus with an open loop already is held: nothing
|
|
21
|
+
* new is recorded and the supervisor is not called again. Reviews completed
|
|
22
|
+
* before the newest `loop_resolved` are not evidence of a NEW loop -- the
|
|
23
|
+
* supervisor decided on them -- so a loop is detected again only from N reviews
|
|
24
|
+
* after the resolution.
|
|
25
|
+
*
|
|
26
|
+
* A DETECTED LOOP SPENDS NO REVIEW CYCLE. Detection is evaluated FIRST, and an
|
|
27
|
+
* exit that finds the focus held -- the loop it just recorded, or one already
|
|
28
|
+
* standing -- writes no cycle: the review belongs to the loop, which the Tower
|
|
29
|
+
* supervisor decides, so no arm spends its budget on it and no detecting exit
|
|
30
|
+
* can be the one that ends the arm. Every other exit records the cycle exactly
|
|
31
|
+
* as recordReviewCycleAndMaybeEndArm always has, so the budget is still the
|
|
32
|
+
* backstop for churn that is not a loop. The threshold is read at most at the
|
|
33
|
+
* cap (effectiveLoopThreshold): both are configurable, and a threshold at or
|
|
34
|
+
* above the cap would otherwise let the budget end the arm on a pure loop
|
|
35
|
+
* before the loop could be seen. With the defaults (threshold 3, cap 8) a loop
|
|
36
|
+
* is held after two counted cycles.
|
|
37
|
+
*
|
|
38
|
+
* Best-effort: a failed read or write is logged and leaves routing and the
|
|
39
|
+
* budget untouched. A daemon shutdown detects nothing (it is not a review
|
|
40
|
+
* cycle, as the budget reads it); a coding-session exit is not a review.
|
|
41
|
+
*
|
|
42
|
+
* @module completion/review-cycle-budget/review-loop-detection
|
|
43
|
+
*/
|
|
44
|
+
import type { ReviewVerdictRecord } from '../../queries/focus-review/review-criterion-verdicts.js';
|
|
45
|
+
import type { TowerDecision, TowerDecisionInput } from '../../queries/tower-decisions/tower-decisions.js';
|
|
46
|
+
import type { ReviewLoopDetection } from '../../supervision/stop-rows-review-loop.js';
|
|
47
|
+
import type { TowerSupervisor } from '../../tower/tower-supervisor.js';
|
|
48
|
+
import { type ReviewCycleCapContext, type ReviewCycleCapDeps, type ReviewCycleOutcome } from './review-cycle-cap.js';
|
|
49
|
+
/** The collaborators of the detection; production binds them at the composition root. */
|
|
50
|
+
export interface ReviewLoopDetectionDeps {
|
|
51
|
+
/** The focus's verdict-bearing reviews since the arm, newest first, at most `limit`. */
|
|
52
|
+
listReviewCriterionVerdicts: (focusId: string, limit: number) => Promise<ReviewVerdictRecord[]>;
|
|
53
|
+
/** The focus's decisions (newest first) and its open loops. */
|
|
54
|
+
listTowerDecisions: (focusId: string) => Promise<{
|
|
55
|
+
decisions: TowerDecision[];
|
|
56
|
+
openLoopDecisionIds: string[];
|
|
57
|
+
}>;
|
|
58
|
+
recordTowerDecision: (input: TowerDecisionInput) => Promise<{
|
|
59
|
+
decision: TowerDecision;
|
|
60
|
+
created: boolean;
|
|
61
|
+
}>;
|
|
62
|
+
resolveReviewLoopThreshold: () => number;
|
|
63
|
+
towerSupervisor: TowerSupervisor;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Pure: the number of consecutive reviews a loop needs, as the detector reads
|
|
67
|
+
* it -- the configured threshold, never above the cap (a pure loop is then
|
|
68
|
+
* always seen on or before the exit that would spend the budget), never below 2.
|
|
69
|
+
*/
|
|
70
|
+
export declare function effectiveLoopThreshold(threshold: number, cap: number): number;
|
|
71
|
+
/** What the detection did on one exit. */
|
|
72
|
+
export type ReviewLoopDetectionResult = 'not_a_review' | 'already_held' | 'no_loop' | 'held' | 'unreadable';
|
|
73
|
+
/** Pure: the reviews completed after the newest loop_resolved (all of them when none). */
|
|
74
|
+
export declare function reviewsAfterLastResolution(reviewsNewestFirst: readonly ReviewVerdictRecord[], decisions: readonly Pick<TowerDecision, 'kind' | 'createdAt'>[]): ReviewVerdictRecord[];
|
|
75
|
+
/** Pure: the decision a detected loop records. */
|
|
76
|
+
export declare function loopDetectedDecision(focusId: string, loop: ReviewLoopDetection, args: {
|
|
77
|
+
threshold: number;
|
|
78
|
+
reviewCycleCount: number;
|
|
79
|
+
cap: number;
|
|
80
|
+
}): TowerDecisionInput;
|
|
81
|
+
/**
|
|
82
|
+
* Detect a non-converging loop at a review exit and, on one, record it and call
|
|
83
|
+
* the supervisor. Best-effort: never throws.
|
|
84
|
+
*/
|
|
85
|
+
export declare function detectAndHoldReviewLoop(deps: ReviewLoopDetectionDeps, ctx: ReviewCycleCapContext, args: {
|
|
86
|
+
sessionType?: 'coding' | 'review';
|
|
87
|
+
shuttingDown: boolean;
|
|
88
|
+
/** The count the focus stands at (a held exit writes none). */
|
|
89
|
+
reviewCycleCount: number;
|
|
90
|
+
cap: number;
|
|
91
|
+
}): Promise<ReviewLoopDetectionResult>;
|
|
92
|
+
/**
|
|
93
|
+
* The review exit's budget step with the loop detection ahead of it: detect
|
|
94
|
+
* (and hold) a non-converging loop FIRST; an exit that leaves the focus held
|
|
95
|
+
* spends no cycle, and any other exit records the review cycle exactly as
|
|
96
|
+
* recordReviewCycleAndMaybeEndArm always has.
|
|
97
|
+
*/
|
|
98
|
+
export declare function recordReviewLoopThenCycle(deps: ReviewCycleCapDeps & {
|
|
99
|
+
reviewLoop: ReviewLoopDetectionDeps;
|
|
100
|
+
}, ctx: ReviewCycleCapContext, priorCycleCount: number, outcome: ReviewCycleOutcome): Promise<void>;
|
|
101
|
+
//# sourceMappingURL=review-loop-detection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"review-loop-detection.d.ts","sourceRoot":"","sources":["../../../src/completion/review-cycle-budget/review-loop-detection.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yDAAyD,CAAC;AACnG,OAAO,KAAK,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,kDAAkD,CAAC;AAE1G,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4CAA4C,CAAC;AACtF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAEvE,OAAO,EAEL,KAAK,qBAAqB,EAC1B,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACxB,MAAM,uBAAuB,CAAC;AAI/B,yFAAyF;AACzF,MAAM,WAAW,uBAAuB;IACtC,wFAAwF;IACxF,2BAA2B,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAAC;IAChG,+DAA+D;IAC/D,kBAAkB,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC;QAAE,SAAS,EAAE,aAAa,EAAE,CAAC;QAAC,mBAAmB,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;IAChH,mBAAmB,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,OAAO,CAAC;QAAE,QAAQ,EAAE,aAAa,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IAC3G,0BAA0B,EAAE,MAAM,MAAM,CAAC;IACzC,eAAe,EAAE,eAAe,CAAC;CAClC;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAE7E;AAED,0CAA0C;AAC1C,MAAM,MAAM,yBAAyB,GACjC,cAAc,GACd,cAAc,GACd,SAAS,GACT,MAAM,GACN,YAAY,CAAC;AAEjB,0FAA0F;AAC1F,wBAAgB,0BAA0B,CACxC,kBAAkB,EAAE,SAAS,mBAAmB,EAAE,EAClD,SAAS,EAAE,SAAS,IAAI,CAAC,aAAa,EAAE,MAAM,GAAG,WAAW,CAAC,EAAE,GAC9D,mBAAmB,EAAE,CAGvB;AAED,kDAAkD;AAClD,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,mBAAmB,EACzB,IAAI,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,gBAAgB,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GACjE,kBAAkB,CA6BpB;AAED;;;GAGG;AACH,wBAAsB,uBAAuB,CAC3C,IAAI,EAAE,uBAAuB,EAC7B,GAAG,EAAE,qBAAqB,EAC1B,IAAI,EAAE;IACJ,WAAW,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAClC,YAAY,EAAE,OAAO,CAAC;IACtB,+DAA+D;IAC/D,gBAAgB,EAAE,MAAM,CAAC;IACzB,GAAG,EAAE,MAAM,CAAC;CACb,GACA,OAAO,CAAC,yBAAyB,CAAC,CAgCpC;AAED;;;;;GAKG;AACH,wBAAsB,yBAAyB,CAC7C,IAAI,EAAE,kBAAkB,GAAG;IAAE,UAAU,EAAE,uBAAuB,CAAA;CAAE,EAClE,GAAG,EAAE,qBAAqB,EAC1B,eAAe,EAAE,MAAM,EACvB,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,IAAI,CAAC,CAef"}
|
|
@@ -0,0 +1,105 @@
|
|
|
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/review-cycle-budget/review-loop-detection.test.ts
|
|
3
|
+
// PINNED-BY-END
|
|
4
|
+
import { detectNonConvergingReviewLoop } from '../../supervision/review-loop-detector.js';
|
|
5
|
+
import { createLogger } from '../../log/daemon-log.js';
|
|
6
|
+
import { recordReviewCycleAndMaybeEndArm, } from './review-cycle-cap.js';
|
|
7
|
+
const log = createLogger({ module: 'focus-executor' });
|
|
8
|
+
/**
|
|
9
|
+
* Pure: the number of consecutive reviews a loop needs, as the detector reads
|
|
10
|
+
* it -- the configured threshold, never above the cap (a pure loop is then
|
|
11
|
+
* always seen on or before the exit that would spend the budget), never below 2.
|
|
12
|
+
*/
|
|
13
|
+
export function effectiveLoopThreshold(threshold, cap) {
|
|
14
|
+
return Math.max(2, Math.min(Math.floor(threshold), Math.floor(cap)));
|
|
15
|
+
}
|
|
16
|
+
/** Pure: the reviews completed after the newest loop_resolved (all of them when none). */
|
|
17
|
+
export function reviewsAfterLastResolution(reviewsNewestFirst, decisions) {
|
|
18
|
+
const cutoff = Math.max(-Infinity, ...decisions.filter((d) => d.kind === 'loop_resolved').map((d) => Date.parse(d.createdAt)));
|
|
19
|
+
return reviewsNewestFirst.filter((r) => !(Date.parse(r.completedAt) <= cutoff));
|
|
20
|
+
}
|
|
21
|
+
/** Pure: the decision a detected loop records. */
|
|
22
|
+
export function loopDetectedDecision(focusId, loop, args) {
|
|
23
|
+
const findings = loop.rounds.map((r) => r.newBlockingIssueIds.length).reduce((a, b) => a + b, 0);
|
|
24
|
+
return {
|
|
25
|
+
focusId,
|
|
26
|
+
kind: 'loop_detected',
|
|
27
|
+
decidedByKind: 'daemon',
|
|
28
|
+
summary: `Held the review loop on criterion "${loop.criterion}": no further coding or review pass runs until the ` +
|
|
29
|
+
`loop is decided.`,
|
|
30
|
+
rationale: `The criterion was the only one not_met on ${loop.rounds.length} consecutive reviews under this arm ` +
|
|
31
|
+
`(every other criterion met or excused), and each review named a new blocking finding against it ` +
|
|
32
|
+
`(${findings} in all). Fixing one finding has produced the next: the loop is not converging, and ` +
|
|
33
|
+
`deciding why is a judgement for the Tower supervisor, not another review cycle. Held with ` +
|
|
34
|
+
`${args.reviewCycleCount} of a budget of ${args.cap} review cycles spent; the review that showed the loop spends none.`,
|
|
35
|
+
evidence: {
|
|
36
|
+
criterionKey: loop.criterionKey,
|
|
37
|
+
criterion: loop.criterion,
|
|
38
|
+
nodeId: loop.nodeId,
|
|
39
|
+
threshold: args.threshold,
|
|
40
|
+
reviewCycleCount: args.reviewCycleCount,
|
|
41
|
+
cap: args.cap,
|
|
42
|
+
reviews: loop.rounds.map((r) => ({
|
|
43
|
+
reviewId: r.reviewId, completedAt: r.completedAt, blockingIssueIds: r.blockingIssueIds, newBlockingIssueIds: r.newBlockingIssueIds,
|
|
44
|
+
})),
|
|
45
|
+
},
|
|
46
|
+
criterionKey: loop.criterionKey,
|
|
47
|
+
nodeId: loop.nodeId,
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Detect a non-converging loop at a review exit and, on one, record it and call
|
|
52
|
+
* the supervisor. Best-effort: never throws.
|
|
53
|
+
*/
|
|
54
|
+
export async function detectAndHoldReviewLoop(deps, ctx, args) {
|
|
55
|
+
if (args.shuttingDown || (args.sessionType !== undefined && args.sessionType !== 'review'))
|
|
56
|
+
return 'not_a_review';
|
|
57
|
+
try {
|
|
58
|
+
const record = await deps.listTowerDecisions(ctx.focusId);
|
|
59
|
+
if (record.openLoopDecisionIds.length > 0)
|
|
60
|
+
return 'already_held';
|
|
61
|
+
const threshold = effectiveLoopThreshold(deps.resolveReviewLoopThreshold(), args.cap);
|
|
62
|
+
const reviews = reviewsAfterLastResolution(await deps.listReviewCriterionVerdicts(ctx.focusId, threshold), record.decisions);
|
|
63
|
+
const loop = detectNonConvergingReviewLoop(reviews, threshold);
|
|
64
|
+
if (loop === null)
|
|
65
|
+
return 'no_loop';
|
|
66
|
+
const { decision, created } = await deps.recordTowerDecision(loopDetectedDecision(ctx.focusId, loop, { threshold, reviewCycleCount: args.reviewCycleCount, cap: args.cap }));
|
|
67
|
+
log.warn(`[focus-executor] "${ctx.focusName}" review loop does not converge: criterion "${loop.criterion}" failed alone on ` +
|
|
68
|
+
`${loop.rounds.length} consecutive reviews, each naming a new blocking finding. HELD (decision ` +
|
|
69
|
+
`${decision.towerDecisionId.slice(0, 8)}${created ? '' : ', already recorded'}) with ` +
|
|
70
|
+
`${args.reviewCycleCount} of ${args.cap} review cycles spent; the focus stays armed and the Tower supervisor decides it.`);
|
|
71
|
+
if (created) {
|
|
72
|
+
await deps.towerSupervisor.onLoopDetected({
|
|
73
|
+
focusId: ctx.focusId, focusName: ctx.focusName, decision,
|
|
74
|
+
criterionKey: loop.criterionKey, criterion: loop.criterion, nodeId: loop.nodeId,
|
|
75
|
+
rounds: loop.rounds, reviewCycleCount: args.reviewCycleCount, cap: args.cap,
|
|
76
|
+
}).catch((err) => log.warn(`[focus-executor] Tower supervisor failed on the held loop of "${ctx.focusName}": ${err.message} -- the loop stays held.`));
|
|
77
|
+
}
|
|
78
|
+
return 'held';
|
|
79
|
+
}
|
|
80
|
+
catch (err) {
|
|
81
|
+
log.warn(`[focus-executor] review-loop detection skipped for "${ctx.focusName}": ${err.message}`);
|
|
82
|
+
return 'unreadable';
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* The review exit's budget step with the loop detection ahead of it: detect
|
|
87
|
+
* (and hold) a non-converging loop FIRST; an exit that leaves the focus held
|
|
88
|
+
* spends no cycle, and any other exit records the review cycle exactly as
|
|
89
|
+
* recordReviewCycleAndMaybeEndArm always has.
|
|
90
|
+
*/
|
|
91
|
+
export async function recordReviewLoopThenCycle(deps, ctx, priorCycleCount, outcome) {
|
|
92
|
+
const detected = await detectAndHoldReviewLoop(deps.reviewLoop, ctx, {
|
|
93
|
+
...(outcome.sessionType ? { sessionType: outcome.sessionType } : {}),
|
|
94
|
+
shuttingDown: deps.isShuttingDown(),
|
|
95
|
+
reviewCycleCount: priorCycleCount,
|
|
96
|
+
cap: deps.resolveReviewCycleCap(),
|
|
97
|
+
});
|
|
98
|
+
if (detected === 'held' || detected === 'already_held') {
|
|
99
|
+
log.info(`[focus-executor] "${ctx.focusName}" review exit on a held loop -- no review cycle spent; the count stays at ` +
|
|
100
|
+
`${priorCycleCount} and the Tower supervisor decides the loop.`);
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
await recordReviewCycleAndMaybeEndArm(deps, ctx, priorCycleCount, outcome);
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=review-loop-detection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"review-loop-detection.js","sourceRoot":"","sources":["../../../src/completion/review-cycle-budget/review-loop-detection.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The spent-budget release RETRY: a focus whose review_cycle_count stands at
|
|
3
|
+
* TELORA_REVIEW_CYCLE_CAP while its role is still assigned gets its arm
|
|
4
|
+
* released, with arm_ended_reason = 'review_budget_spent', on the next cascade
|
|
5
|
+
* poll -- and on every poll after until the write lands.
|
|
6
|
+
*
|
|
7
|
+
* WHY. The budget crossing (review-cycle-cap.ts) writes the count first and
|
|
8
|
+
* then releases the arm. When the release write fails, the count alone holds
|
|
9
|
+
* every spawn gate (supervision/review-cycle-cap-hold.ts) -- with the role still
|
|
10
|
+
* set and no reason recorded, a hold nobody can read. This pass gives the hold a
|
|
11
|
+
* writer behind it, so the held state is transient by construction. History:
|
|
12
|
+
* docs/daemon/history-team-lifecycle.md (review-cycle-cap.ts).
|
|
13
|
+
*
|
|
14
|
+
* The same condition also arises with no failed write at all -- the cap lowered
|
|
15
|
+
* below a focus's standing count -- and is the same spent budget, so it is
|
|
16
|
+
* released the same way.
|
|
17
|
+
*
|
|
18
|
+
* WHAT IT SENDS. The record the failed crossing composed (remembered in this
|
|
19
|
+
* process, together with whether that crossing meant to close the review
|
|
20
|
+
* window), so the end names the findings the exit counted. With no remembered
|
|
21
|
+
* record (a daemon restart in between, or a lowered cap) it sends the count and
|
|
22
|
+
* the cap with `findingsBasis: 'not_measured'` -- the empty finding lists are an
|
|
23
|
+
* absence, not a reading -- and leaves the review window as it is (nothing
|
|
24
|
+
* read whether a gate verdict needs it).
|
|
25
|
+
*
|
|
26
|
+
* The decision is the stop registry's review_budget_spent row, read through
|
|
27
|
+
* isReviewCycleCapHeld -- but only on a READ count: an unreadable count holds
|
|
28
|
+
* every gate (fail closed) and releases nothing, because ending a run needs the
|
|
29
|
+
* fact, not its absence.
|
|
30
|
+
*
|
|
31
|
+
* @module completion/review-cycle-budget/spent-budget-release
|
|
32
|
+
*/
|
|
33
|
+
import { type EndedArmRecord } from '../../queries/focuses/ended-arm.js';
|
|
34
|
+
/** The release writer the budget path uses (production: queries/focuses/focuses.ts releaseFocusArm). */
|
|
35
|
+
export type SpentBudgetRelease = (focusId: string, endedArm: EndedArmRecord, opts?: {
|
|
36
|
+
closeReviewWindow?: boolean;
|
|
37
|
+
}) => Promise<void>;
|
|
38
|
+
/** A release the crossing composed but could not land. */
|
|
39
|
+
export interface PendingSpentBudgetRelease {
|
|
40
|
+
record: EndedArmRecord;
|
|
41
|
+
closeReviewWindow: boolean;
|
|
42
|
+
}
|
|
43
|
+
/** Remember a release the crossing could not land, for the next cascade poll to retry. */
|
|
44
|
+
export declare function rememberPendingSpentBudgetRelease(focusId: string, pending: PendingSpentBudgetRelease): void;
|
|
45
|
+
/** Test seam: drop every remembered release. */
|
|
46
|
+
export declare function __resetPendingSpentBudgetReleases(): void;
|
|
47
|
+
/** Test/diagnostic read: the release remembered for a focus, if any. */
|
|
48
|
+
export declare function pendingSpentBudgetRelease(focusId: string): PendingSpentBudgetRelease | undefined;
|
|
49
|
+
/** The focus facts the retry decides from (one active-focus row). */
|
|
50
|
+
export interface SpentBudgetReleaseFacts {
|
|
51
|
+
focusId: string;
|
|
52
|
+
focusName: string;
|
|
53
|
+
/** product_focuses.assigned_agent_role_id. */
|
|
54
|
+
assignedAgentRoleId: string | null;
|
|
55
|
+
/** product_focuses.review_cycle_count; null = unread. */
|
|
56
|
+
reviewCycleCount: number | null;
|
|
57
|
+
}
|
|
58
|
+
export interface SpentBudgetReleaseDeps {
|
|
59
|
+
releaseFocusArm: SpentBudgetRelease;
|
|
60
|
+
resolveReviewCycleCap: () => number;
|
|
61
|
+
}
|
|
62
|
+
export type SpentBudgetReleaseOutcome = 'not_armed' | 'not_spent' | 'released' | 'failed';
|
|
63
|
+
/** Pure: the record a retry sends when no crossing record was remembered. */
|
|
64
|
+
export declare function unmeasuredSpentBudgetRecord(reviewCycleCount: number, cap: number): EndedArmRecord;
|
|
65
|
+
/**
|
|
66
|
+
* Release a still-armed focus whose review budget is spent. Never throws: a
|
|
67
|
+
* failed write stays pending and is re-attempted on the next poll.
|
|
68
|
+
*/
|
|
69
|
+
export declare function releaseArmUnderSpentBudget(facts: SpentBudgetReleaseFacts, deps: SpentBudgetReleaseDeps): Promise<SpentBudgetReleaseOutcome>;
|
|
70
|
+
//# sourceMappingURL=spent-budget-release.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spent-budget-release.d.ts","sourceRoot":"","sources":["../../../src/completion/review-cycle-budget/spent-budget-release.ts"],"names":[],"mappings":"AAKA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,OAAO,EAEL,KAAK,cAAc,EACpB,MAAM,oCAAoC,CAAC;AAM5C,wGAAwG;AACxG,MAAM,MAAM,kBAAkB,GAAG,CAC/B,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,cAAc,EACxB,IAAI,CAAC,EAAE;IAAE,iBAAiB,CAAC,EAAE,OAAO,CAAA;CAAE,KACnC,OAAO,CAAC,IAAI,CAAC,CAAC;AAEnB,0DAA0D;AAC1D,MAAM,WAAW,yBAAyB;IACxC,MAAM,EAAE,cAAc,CAAC;IACvB,iBAAiB,EAAE,OAAO,CAAC;CAC5B;AAKD,0FAA0F;AAC1F,wBAAgB,iCAAiC,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,yBAAyB,GAAG,IAAI,CAE3G;AAED,gDAAgD;AAChD,wBAAgB,iCAAiC,IAAI,IAAI,CAExD;AAED,wEAAwE;AACxE,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,MAAM,GAAG,yBAAyB,GAAG,SAAS,CAEhG;AAED,qEAAqE;AACrE,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,8CAA8C;IAC9C,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,yDAAyD;IACzD,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC;AAED,MAAM,WAAW,sBAAsB;IACrC,eAAe,EAAE,kBAAkB,CAAC;IACpC,qBAAqB,EAAE,MAAM,MAAM,CAAC;CACrC;AAED,MAAM,MAAM,yBAAyB,GAAG,WAAW,GAAG,WAAW,GAAG,UAAU,GAAG,QAAQ,CAAC;AAE1F,6EAA6E;AAC7E,wBAAgB,2BAA2B,CAAC,gBAAgB,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,cAAc,CAKjG;AAED;;;GAGG;AACH,wBAAsB,0BAA0B,CAC9C,KAAK,EAAE,uBAAuB,EAC9B,IAAI,EAAE,sBAAsB,GAC3B,OAAO,CAAC,yBAAyB,CAAC,CAiCpC"}
|