@telora/daemon 0.22.306 → 0.23.0
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 +13 -3
- package/dist/audit/audit-floor-policy.js +1 -1
- package/dist/audit/audit-floor-policy.js.map +1 -1
- package/dist/audit/audit-prompt.d.ts.map +1 -1
- package/dist/audit/audit-prompt.js +21 -14
- package/dist/audit/audit-prompt.js.map +1 -1
- package/dist/completion/completion-event/event.d.ts +7 -0
- 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 +9 -1
- package/dist/completion/review-cycle-budget/review-cycle-cap.d.ts.map +1 -1
- package/dist/completion/review-cycle-budget/review-cycle-cap.js +2 -1
- package/dist/completion/review-cycle-budget/review-cycle-cap.js.map +1 -1
- package/dist/completion/review-exit/review-exit-deps.d.ts +2 -0
- 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 -0
- package/dist/completion/review-exit/review-exit-evidence.d.ts.map +1 -1
- package/dist/completion/review-exit/review-exit-evidence.js +12 -2
- package/dist/completion/review-exit/review-exit-evidence.js.map +1 -1
- package/dist/completion/review-exit/review-exit-falsifiers.d.ts +72 -0
- package/dist/completion/review-exit/review-exit-falsifiers.d.ts.map +1 -0
- package/dist/completion/review-exit/review-exit-falsifiers.js +84 -0
- package/dist/completion/review-exit/review-exit-falsifiers.js.map +1 -0
- package/dist/completion/review-exit/review-exit-phase.d.ts.map +1 -1
- package/dist/completion/review-exit/review-exit-phase.js +10 -8
- package/dist/completion/review-exit/review-exit-phase.js.map +1 -1
- package/dist/completion/state-cascade/review-next-step.d.ts +11 -0
- package/dist/completion/state-cascade/review-next-step.d.ts.map +1 -1
- package/dist/completion/state-cascade/review-next-step.js +6 -3
- package/dist/completion/state-cascade/review-next-step.js.map +1 -1
- package/dist/completion/state-cascade/standing-approval-convergence.d.ts +3 -0
- package/dist/completion/state-cascade/standing-approval-convergence.d.ts.map +1 -1
- package/dist/completion/state-cascade/standing-approval-convergence.js +10 -5
- package/dist/completion/state-cascade/standing-approval-convergence.js.map +1 -1
- package/dist/completion/state-cascade/state-cascade.d.ts +8 -0
- package/dist/completion/state-cascade/state-cascade.d.ts.map +1 -1
- package/dist/completion/state-cascade/state-cascade.js +2 -0
- package/dist/completion/state-cascade/state-cascade.js.map +1 -1
- package/dist/completion/team-exit/status-advance-phase.d.ts +6 -0
- package/dist/completion/team-exit/status-advance-phase.d.ts.map +1 -1
- package/dist/completion/team-exit/status-advance-phase.js +12 -9
- package/dist/completion/team-exit/status-advance-phase.js.map +1 -1
- package/dist/completion/team-exit/team-completion.d.ts.map +1 -1
- package/dist/completion/team-exit/team-completion.js +1 -0
- package/dist/completion/team-exit/team-completion.js.map +1 -1
- package/dist/completion/team-exit/terminated-work-reconcile.d.ts +6 -0
- package/dist/completion/team-exit/terminated-work-reconcile.d.ts.map +1 -1
- package/dist/completion/team-exit/terminated-work-reconcile.js +5 -7
- package/dist/completion/team-exit/terminated-work-reconcile.js.map +1 -1
- package/dist/completion/team-outcome/apply-close.d.ts.map +1 -1
- package/dist/completion/team-outcome/apply-close.js +1 -0
- package/dist/completion/team-outcome/apply-close.js.map +1 -1
- package/dist/completion/team-outcome/apply-turn.d.ts.map +1 -1
- package/dist/completion/team-outcome/apply-turn.js +13 -7
- package/dist/completion/team-outcome/apply-turn.js.map +1 -1
- package/dist/completion/team-outcome/decide-close-rows.d.ts.map +1 -1
- package/dist/completion/team-outcome/decide-close-rows.js +2 -7
- package/dist/completion/team-outcome/decide-close-rows.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 +5 -1
- package/dist/completion/team-outcome/decide-turn-entry-rows.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-outcome/work-facts.d.ts +7 -1
- package/dist/completion/team-outcome/work-facts.d.ts.map +1 -1
- package/dist/completion/team-outcome/work-facts.js +9 -4
- package/dist/completion/team-outcome/work-facts.js.map +1 -1
- package/dist/composition/advance-precheck-context.d.ts.map +1 -1
- package/dist/composition/advance-precheck-context.js +1 -0
- package/dist/composition/advance-precheck-context.js.map +1 -1
- package/dist/composition/completion-event-context.d.ts.map +1 -1
- package/dist/composition/completion-event-context.js +4 -0
- package/dist/composition/completion-event-context.js.map +1 -1
- package/dist/composition/daemon-contexts.js +1 -1
- package/dist/composition/execution-directive-context.d.ts.map +1 -1
- package/dist/composition/execution-directive-context.js +1 -0
- package/dist/composition/execution-directive-context.js.map +1 -1
- package/dist/composition/execution-resolver-context.d.ts.map +1 -1
- package/dist/composition/execution-resolver-context.js +2 -1
- package/dist/composition/execution-resolver-context.js.map +1 -1
- package/dist/composition/execution-spawn-context.d.ts +1 -1
- package/dist/composition/execution-spawn-context.d.ts.map +1 -1
- package/dist/composition/execution-spawn-context.js +6 -3
- package/dist/composition/execution-spawn-context.js.map +1 -1
- package/dist/composition/reopening-falsifier-context.d.ts +9 -0
- package/dist/composition/reopening-falsifier-context.d.ts.map +1 -0
- package/dist/composition/reopening-falsifier-context.js +82 -0
- package/dist/composition/reopening-falsifier-context.js.map +1 -0
- package/dist/composition/review-exit-context.d.ts.map +1 -1
- package/dist/composition/review-exit-context.js +5 -2
- package/dist/composition/review-exit-context.js.map +1 -1
- package/dist/composition/runtime-contexts.d.ts.map +1 -1
- package/dist/composition/runtime-contexts.js +4 -3
- package/dist/composition/runtime-contexts.js.map +1 -1
- package/dist/composition/runtime-delivery-advance-context.d.ts.map +1 -1
- package/dist/composition/runtime-delivery-advance-context.js +4 -0
- package/dist/composition/runtime-delivery-advance-context.js.map +1 -1
- package/dist/composition/runtime-spawn-pass-context.d.ts.map +1 -1
- package/dist/composition/runtime-spawn-pass-context.js +5 -1
- package/dist/composition/runtime-spawn-pass-context.js.map +1 -1
- package/dist/composition/spawn-pass-deps.d.ts.map +1 -1
- package/dist/composition/spawn-pass-deps.js +4 -0
- package/dist/composition/spawn-pass-deps.js.map +1 -1
- package/dist/composition/standing-approval-context.d.ts.map +1 -1
- package/dist/composition/standing-approval-context.js +3 -0
- package/dist/composition/standing-approval-context.js.map +1 -1
- package/dist/composition/state-cascade-context.d.ts.map +1 -1
- package/dist/composition/state-cascade-context.js +7 -2
- package/dist/composition/state-cascade-context.js.map +1 -1
- package/dist/config/live-daemon-config.d.ts.map +1 -1
- package/dist/config/live-daemon-config.js +2 -0
- package/dist/config/live-daemon-config.js.map +1 -1
- package/dist/daemon-state/focus-team-state.js +1 -1
- package/dist/delivery/commit-verdict-hold.d.ts +12 -0
- package/dist/delivery/commit-verdict-hold.d.ts.map +1 -1
- package/dist/delivery/commit-verdict-hold.js +11 -0
- package/dist/delivery/commit-verdict-hold.js.map +1 -1
- package/dist/delivery/delivery-lifecycle.d.ts.map +1 -1
- package/dist/delivery/delivery-lifecycle.js +1 -0
- package/dist/delivery/delivery-lifecycle.js.map +1 -1
- package/dist/delivery/delivery-reconciler-apply.d.ts.map +1 -1
- package/dist/delivery/delivery-reconciler-apply.js +10 -2
- package/dist/delivery/delivery-reconciler-apply.js.map +1 -1
- package/dist/delivery/delivery-reconciler.d.ts +33 -18
- package/dist/delivery/delivery-reconciler.d.ts.map +1 -1
- package/dist/delivery/delivery-reconciler.js +33 -23
- package/dist/delivery/delivery-reconciler.js.map +1 -1
- package/dist/delivery/recorded-concerns.d.ts +57 -0
- package/dist/delivery/recorded-concerns.d.ts.map +1 -0
- package/dist/delivery/recorded-concerns.js +45 -0
- package/dist/delivery/recorded-concerns.js.map +1 -0
- package/dist/directive/directive-queue.d.ts +13 -0
- package/dist/directive/directive-queue.d.ts.map +1 -1
- package/dist/directive/directive-queue.js +19 -1
- package/dist/directive/directive-queue.js.map +1 -1
- package/dist/directive/phase-sync.d.ts +10 -0
- package/dist/directive/phase-sync.d.ts.map +1 -1
- package/dist/directive/phase-sync.js +11 -0
- package/dist/directive/phase-sync.js.map +1 -1
- package/dist/focus/closed-review-window.d.ts +26 -0
- package/dist/focus/closed-review-window.d.ts.map +1 -0
- package/dist/focus/closed-review-window.js +62 -0
- package/dist/focus/closed-review-window.js.map +1 -0
- package/dist/focus/daemon-contexts.js +1 -1
- package/dist/focus/directive-executor.d.ts.map +1 -1
- package/dist/focus/directive-executor.js +3 -8
- package/dist/focus/directive-executor.js.map +1 -1
- package/dist/focus/focus-executor.js +2 -2
- package/dist/focus/focus-executor.js.map +1 -1
- package/dist/focus/focus-poller-auto-advance.d.ts +7 -0
- package/dist/focus/focus-poller-auto-advance.d.ts.map +1 -1
- package/dist/focus/focus-poller-auto-advance.js +8 -6
- 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 +39 -28
- package/dist/focus/focus-poller-spawn.js.map +1 -1
- package/dist/focus/focus-poller-state.d.ts.map +1 -1
- package/dist/focus/focus-poller-state.js +2 -0
- package/dist/focus/focus-poller-state.js.map +1 -1
- package/dist/focus/pending-review-approved-head.d.ts.map +1 -1
- package/dist/focus/pending-review-approved-head.js +2 -0
- package/dist/focus/pending-review-approved-head.js.map +1 -1
- package/dist/focus/pending-spawn-pass-deps.d.ts +3 -0
- package/dist/focus/pending-spawn-pass-deps.d.ts.map +1 -1
- package/dist/focus/pending-spawn-pass-deps.js +1 -0
- package/dist/focus/pending-spawn-pass-deps.js.map +1 -1
- package/dist/focus/pending-spawn-review-next-step.d.ts +3 -0
- package/dist/focus/pending-spawn-review-next-step.d.ts.map +1 -1
- package/dist/focus/pending-spawn-review-next-step.js +3 -0
- package/dist/focus/pending-spawn-review-next-step.js.map +1 -1
- package/dist/focus/ready-focus-team-work.d.ts +8 -0
- package/dist/focus/ready-focus-team-work.d.ts.map +1 -1
- package/dist/focus/ready-focus-team-work.js +5 -1
- package/dist/focus/ready-focus-team-work.js.map +1 -1
- package/dist/focus/stranded-review-reroute.d.ts +32 -1
- package/dist/focus/stranded-review-reroute.d.ts.map +1 -1
- package/dist/focus/stranded-review-reroute.js +50 -1
- package/dist/focus/stranded-review-reroute.js.map +1 -1
- package/dist/focus/verify-open-issues.d.ts +7 -0
- package/dist/focus/verify-open-issues.d.ts.map +1 -1
- package/dist/focus/verify-open-issues.js +8 -4
- package/dist/focus/verify-open-issues.js.map +1 -1
- package/dist/focus-stage-lifecycle/ratify-bar-gate.d.ts.map +1 -1
- package/dist/focus-stage-lifecycle/ratify-bar-gate.js +4 -3
- package/dist/focus-stage-lifecycle/ratify-bar-gate.js.map +1 -1
- package/dist/nexus/intake-prompt-sections.js +3 -3
- package/dist/nexus/intake-prompt-sections.js.map +1 -1
- package/dist/prd/arm-readiness.d.ts +49 -74
- package/dist/prd/arm-readiness.d.ts.map +1 -1
- package/dist/prd/arm-readiness.js +48 -196
- package/dist/prd/arm-readiness.js.map +1 -1
- package/dist/prd/frontier-arming.d.ts.map +1 -1
- package/dist/prd/frontier-arming.js +0 -2
- package/dist/prd/frontier-arming.js.map +1 -1
- package/dist/prd/scoping-prompt.js +3 -3
- package/dist/prd/scoping-prompt.js.map +1 -1
- package/dist/prompt/focus-prompt-builder.d.ts +9 -2
- package/dist/prompt/focus-prompt-builder.d.ts.map +1 -1
- package/dist/prompt/focus-prompt-builder.js +19 -8
- package/dist/prompt/focus-prompt-builder.js.map +1 -1
- package/dist/prompt/team-prompt-base.d.ts.map +1 -1
- package/dist/prompt/team-prompt-base.js +2 -1
- package/dist/prompt/team-prompt-base.js.map +1 -1
- package/dist/prompt-sections/execution-sections.d.ts +7 -1
- package/dist/prompt-sections/execution-sections.d.ts.map +1 -1
- package/dist/prompt-sections/execution-sections.js +41 -22
- package/dist/prompt-sections/execution-sections.js.map +1 -1
- package/dist/prompt-sections/persona-sections.d.ts +6 -0
- package/dist/prompt-sections/persona-sections.d.ts.map +1 -1
- package/dist/prompt-sections/persona-sections.js +27 -1
- package/dist/prompt-sections/persona-sections.js.map +1 -1
- package/dist/prompt-sections/prompt-listing.d.ts +21 -0
- package/dist/prompt-sections/prompt-listing.d.ts.map +1 -1
- package/dist/prompt-sections/prompt-listing.js +35 -0
- package/dist/prompt-sections/prompt-listing.js.map +1 -1
- package/dist/prompt-sections/role-sections.d.ts.map +1 -1
- package/dist/prompt-sections/role-sections.js +9 -6
- package/dist/prompt-sections/role-sections.js.map +1 -1
- package/dist/prompt-sections/shared.d.ts +7 -0
- package/dist/prompt-sections/shared.d.ts.map +1 -1
- package/dist/prompt-sections/shared.js +1 -1
- package/dist/prompt-sections/shared.js.map +1 -1
- 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/focus-review/criterion-reopenings.d.ts +62 -0
- package/dist/queries/focus-review/criterion-reopenings.d.ts.map +1 -0
- package/dist/queries/focus-review/criterion-reopenings.js +67 -0
- package/dist/queries/focus-review/criterion-reopenings.js.map +1 -0
- package/dist/queries/focus-review/recorded-concern-ids.d.ts +47 -0
- package/dist/queries/focus-review/recorded-concern-ids.d.ts.map +1 -0
- package/dist/queries/focus-review/recorded-concern-ids.js +33 -0
- package/dist/queries/focus-review/recorded-concern-ids.js.map +1 -0
- package/dist/queries/focus-review/review-finding-facts.d.ts.map +1 -1
- package/dist/queries/focus-review/review-finding-facts.js +5 -1
- package/dist/queries/focus-review/review-finding-facts.js.map +1 -1
- package/dist/queries/focuses/arm-covered-targets.d.ts +10 -1
- package/dist/queries/focuses/arm-covered-targets.d.ts.map +1 -1
- package/dist/queries/focuses/arm-covered-targets.js +9 -0
- package/dist/queries/focuses/arm-covered-targets.js.map +1 -1
- package/dist/queries/focuses/ended-arm.d.ts +12 -0
- package/dist/queries/focuses/ended-arm.d.ts.map +1 -1
- package/dist/queries/focuses/focus-criteria-standing.d.ts +17 -0
- package/dist/queries/focuses/focus-criteria-standing.d.ts.map +1 -1
- package/dist/queries/focuses/focus-criteria-standing.js +29 -1
- package/dist/queries/focuses/focus-criteria-standing.js.map +1 -1
- package/dist/queries/focuses/focus-discovery.d.ts.map +1 -1
- package/dist/queries/focuses/focus-discovery.js +2 -1
- package/dist/queries/focuses/focus-discovery.js.map +1 -1
- package/dist/queries/verification/verification.js +1 -1
- package/dist/reality/injection-writeback.d.ts +5 -4
- package/dist/reality/injection-writeback.d.ts.map +1 -1
- package/dist/reality/injection-writeback.js +3 -2
- package/dist/reality/injection-writeback.js.map +1 -1
- package/dist/reality/reality-writeback.d.ts +13 -12
- package/dist/reality/reality-writeback.d.ts.map +1 -1
- package/dist/reality/reality-writeback.js +5 -5
- package/dist/reality/reality-writeback.js.map +1 -1
- package/dist/resolvers/assembly-engine.js +1 -1
- package/dist/resolvers/compose/focus-injections-compose.d.ts.map +1 -1
- package/dist/resolvers/compose/focus-injections-compose.js +3 -2
- package/dist/resolvers/compose/focus-injections-compose.js.map +1 -1
- package/dist/resolvers/compose/loop-delivery-index-compose.d.ts +10 -0
- package/dist/resolvers/compose/loop-delivery-index-compose.d.ts.map +1 -1
- package/dist/resolvers/compose/loop-delivery-index-compose.js +15 -3
- package/dist/resolvers/compose/loop-delivery-index-compose.js.map +1 -1
- package/dist/resolvers/delivery-listing.d.ts +7 -0
- package/dist/resolvers/delivery-listing.d.ts.map +1 -1
- package/dist/resolvers/delivery-listing.js +26 -4
- package/dist/resolvers/delivery-listing.js.map +1 -1
- package/dist/resolvers/focus-anchoring-injections.d.ts +0 -24
- package/dist/resolvers/focus-anchoring-injections.d.ts.map +1 -1
- package/dist/resolvers/focus-anchoring-injections.js +38 -28
- package/dist/resolvers/focus-anchoring-injections.js.map +1 -1
- package/dist/resolvers/focus-criteria-standing.d.ts.map +1 -1
- package/dist/resolvers/focus-criteria-standing.js +19 -8
- package/dist/resolvers/focus-criteria-standing.js.map +1 -1
- package/dist/resolvers/loop-delivery-index.d.ts.map +1 -1
- package/dist/resolvers/loop-delivery-index.js +9 -1
- package/dist/resolvers/loop-delivery-index.js.map +1 -1
- package/dist/resolvers/shared/loop.d.ts +17 -0
- package/dist/resolvers/shared/loop.d.ts.map +1 -1
- package/dist/resolvers/shared/loop.js.map +1 -1
- package/dist/security/security-auto-inject.d.ts +19 -5
- package/dist/security/security-auto-inject.d.ts.map +1 -1
- package/dist/security/security-auto-inject.js +21 -6
- package/dist/security/security-auto-inject.js.map +1 -1
- package/dist/session/session-lineage.d.ts +29 -9
- package/dist/session/session-lineage.d.ts.map +1 -1
- package/dist/session/session-lineage.js +33 -8
- package/dist/session/session-lineage.js.map +1 -1
- 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/idle-work-stamp.d.ts +7 -0
- package/dist/spawn/idle-work-stamp.d.ts.map +1 -1
- package/dist/spawn/idle-work-stamp.js +2 -1
- package/dist/spawn/idle-work-stamp.js.map +1 -1
- package/dist/spawn/lead-continuation.d.ts +7 -0
- package/dist/spawn/lead-continuation.d.ts.map +1 -1
- package/dist/spawn/lead-continuation.js +5 -2
- package/dist/spawn/lead-continuation.js.map +1 -1
- package/dist/spawn/loop-llm-client.d.ts +10 -1
- package/dist/spawn/loop-llm-client.d.ts.map +1 -1
- package/dist/spawn/loop-llm-client.js +15 -7
- package/dist/spawn/loop-llm-client.js.map +1 -1
- package/dist/spawn/model-id-guards.d.ts +9 -4
- package/dist/spawn/model-id-guards.d.ts.map +1 -1
- package/dist/spawn/model-id-guards.js +11 -4
- package/dist/spawn/model-id-guards.js.map +1 -1
- package/dist/spawn/prompt-assembly.d.ts +2 -0
- package/dist/spawn/prompt-assembly.d.ts.map +1 -1
- package/dist/spawn/prompt-assembly.js +3 -1
- package/dist/spawn/prompt-assembly.js.map +1 -1
- package/dist/spawn/review-hold-park.d.ts +4 -2
- package/dist/spawn/review-hold-park.d.ts.map +1 -1
- package/dist/spawn/review-hold-park.js +9 -5
- package/dist/spawn/review-hold-park.js.map +1 -1
- package/dist/spawn/worktree-session.d.ts +14 -3
- package/dist/spawn/worktree-session.d.ts.map +1 -1
- package/dist/spawn/worktree-session.js +13 -3
- package/dist/spawn/worktree-session.js.map +1 -1
- package/dist/supervision/spawn-cooldown.js +1 -1
- package/dist/supervision/team-work.d.ts +15 -1
- package/dist/supervision/team-work.d.ts.map +1 -1
- package/dist/supervision/team-work.js +7 -2
- package/dist/supervision/team-work.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/arm-coverage-model.d.ts +13 -0
- package/dist/testing/arm-coverage-model.d.ts.map +1 -1
- package/dist/testing/arm-coverage-model.js +118 -9
- package/dist/testing/arm-coverage-model.js.map +1 -1
- package/dist/testing/fixtures/approved-head-inert-deps.d.ts.map +1 -1
- package/dist/testing/fixtures/approved-head-inert-deps.js +1 -0
- package/dist/testing/fixtures/approved-head-inert-deps.js.map +1 -1
- package/dist/testing/fixtures/completion-event-deps.d.ts +1 -1
- package/dist/testing/fixtures/completion-event-deps.d.ts.map +1 -1
- package/dist/testing/fixtures/completion-event-deps.js +1 -0
- package/dist/testing/fixtures/completion-event-deps.js.map +1 -1
- package/dist/testing/fixtures/index.js +1 -1
- package/dist/testing/fixtures/pending-spawn-world.d.ts.map +1 -1
- package/dist/testing/fixtures/pending-spawn-world.js +3 -0
- package/dist/testing/fixtures/pending-spawn-world.js.map +1 -1
- package/dist/testing/fixtures/process-close-context.d.ts.map +1 -1
- package/dist/testing/fixtures/process-close-context.js +1 -0
- package/dist/testing/fixtures/process-close-context.js.map +1 -1
- package/dist/testing/fixtures/recording-api-client.js +1 -1
- package/dist/testing/fixtures/review-exit-deps.js +1 -1
- package/dist/testing/fixtures/session-wire.d.ts.map +1 -1
- package/dist/testing/fixtures/session-wire.js +2 -1
- package/dist/testing/fixtures/session-wire.js.map +1 -1
- package/dist/types/index.js +1 -1
- package/dist/verify/attribution/verification-baseline-run.d.ts.map +1 -1
- package/dist/verify/attribution/verification-baseline-run.js +2 -1
- package/dist/verify/attribution/verification-baseline-run.js.map +1 -1
- package/dist/verify/effect-reconciliation/recorded-targets.d.ts +14 -0
- package/dist/verify/effect-reconciliation/recorded-targets.d.ts.map +1 -1
- package/dist/verify/effect-reconciliation/recorded-targets.js +20 -0
- package/dist/verify/effect-reconciliation/recorded-targets.js.map +1 -1
- package/dist/verify/effect-reconciliation/verify-restatement.d.ts +15 -1
- package/dist/verify/effect-reconciliation/verify-restatement.d.ts.map +1 -1
- package/dist/verify/effect-reconciliation/verify-restatement.js +93 -59
- package/dist/verify/effect-reconciliation/verify-restatement.js.map +1 -1
- package/dist/verify/engine/reconciliation-step.d.ts.map +1 -1
- package/dist/verify/engine/reconciliation-step.js +4 -1
- package/dist/verify/engine/reconciliation-step.js.map +1 -1
- package/dist/verify/falsifier/falsifier-command.d.ts +37 -0
- package/dist/verify/falsifier/falsifier-command.d.ts.map +1 -0
- package/dist/verify/falsifier/falsifier-command.js +40 -0
- package/dist/verify/falsifier/falsifier-command.js.map +1 -0
- package/dist/verify/falsifier/falsifier-run.d.ts +47 -0
- package/dist/verify/falsifier/falsifier-run.d.ts.map +1 -0
- package/dist/verify/falsifier/falsifier-run.js +117 -0
- package/dist/verify/falsifier/falsifier-run.js.map +1 -0
- package/dist/verify/falsifier/falsifier-verdict.d.ts +52 -0
- package/dist/verify/falsifier/falsifier-verdict.d.ts.map +1 -0
- package/dist/verify/falsifier/falsifier-verdict.js +61 -0
- package/dist/verify/falsifier/falsifier-verdict.js.map +1 -0
- package/dist/verify/shortfalls/pre-judge-rulings.d.ts.map +1 -1
- package/dist/verify/shortfalls/pre-judge-rulings.js +2 -1
- package/dist/verify/shortfalls/pre-judge-rulings.js.map +1 -1
- package/dist/worktree/verify-hold-facts.d.ts +2 -0
- package/dist/worktree/verify-hold-facts.d.ts.map +1 -1
- package/dist/worktree/verify-hold-facts.js +1 -0
- package/dist/worktree/verify-hold-facts.js.map +1 -1
- package/package.json +2 -2
|
@@ -78,10 +78,10 @@ export function hasWorkIssues(issues) {
|
|
|
78
78
|
return filterWorkIssues([...issues]).length > 0;
|
|
79
79
|
}
|
|
80
80
|
/**
|
|
81
|
-
* Whether any work issue is in an OPEN (active) status
|
|
82
|
-
*
|
|
83
|
-
*
|
|
84
|
-
*
|
|
81
|
+
* Whether any work issue is in an OPEN (active) status, deferrable or not.
|
|
82
|
+
* Mirror image of areDeliveryIssuesDone for deliveries that have work. The
|
|
83
|
+
* reconciler itself routes on hasBlockingOpenWork (below), which equals this
|
|
84
|
+
* when no issue is marked deferrable.
|
|
85
85
|
*/
|
|
86
86
|
export function hasOpenWork(issues) {
|
|
87
87
|
return filterWorkIssues([...issues]).some(i => OPEN_ISSUE_STATUSES.has(i.status));
|
|
@@ -92,11 +92,13 @@ export function hasActiveWork(issues) {
|
|
|
92
92
|
}
|
|
93
93
|
/**
|
|
94
94
|
* Whether any work issue is BLOCKING open work: open (To Do / In Progress /
|
|
95
|
-
* Blocked) AND not
|
|
96
|
-
*
|
|
97
|
-
*
|
|
98
|
-
*
|
|
99
|
-
*
|
|
95
|
+
* Blocked) AND not deferrable. This is the reconciler's open-work signal at
|
|
96
|
+
* EVERY stage: queued (all non-deferrable work terminal -> coding), coding and
|
|
97
|
+
* verify_failed (blocking open work re-queues), verify (-> verify_failed) and
|
|
98
|
+
* done (re-open). A delivery whose only open work is deferrable concerns
|
|
99
|
+
* advances instead of re-coding them. With no issue marked `deferrable` this
|
|
100
|
+
* is identical to hasOpenWork (and its negation to areDeliveryIssuesDone), so
|
|
101
|
+
* every non-classifying caller keeps its current behavior.
|
|
100
102
|
*/
|
|
101
103
|
export function hasBlockingOpenWork(issues) {
|
|
102
104
|
return filterWorkIssues([...issues])
|
|
@@ -115,6 +117,14 @@ function result(currentStatus, target, reason) {
|
|
|
115
117
|
/**
|
|
116
118
|
* Compute the single next execution_status for a delivery from its full signal.
|
|
117
119
|
*
|
|
120
|
+
* "Open work" below is BLOCKING open work at every stage (hasBlockingOpenWork):
|
|
121
|
+
* an issue flagged `deferrable` (a recorded concern) is not owed and never
|
|
122
|
+
* holds, re-queues or re-opens a delivery. "All done" means all NON-deferrable
|
|
123
|
+
* work is terminal. A delivery whose only work issues are open deferrable
|
|
124
|
+
* concerns HAS work issues (the empty-delivery scoping gate does not apply) and
|
|
125
|
+
* none of it is owed, so it advances. Unclassified issues are blocking, so for
|
|
126
|
+
* them this table is exactly the pre-classification behaviour.
|
|
127
|
+
*
|
|
118
128
|
* Faithful to the current live writers (Delivery 2 characterization):
|
|
119
129
|
* - queued : has work + all done -> coding (step toward verify);
|
|
120
130
|
* has work + active -> coding (work started);
|
|
@@ -126,8 +136,8 @@ function result(currentStatus, target, reason) {
|
|
|
126
136
|
* all done + uncommitted worktree -> stay coding (git-safety gate);
|
|
127
137
|
* all done + committed + guard blocked -> paused;
|
|
128
138
|
* all done + committed -> verify.
|
|
129
|
-
* - verify :
|
|
130
|
-
*
|
|
139
|
+
* - verify : open work -> verify_failed (deferrable review
|
|
140
|
+
* notes do NOT block -> converge);
|
|
131
141
|
* guard blocked -> paused;
|
|
132
142
|
* verdict gaps_found -> verify_failed (never converge on an
|
|
133
143
|
* unresolved verdict);
|
|
@@ -146,8 +156,8 @@ function result(currentStatus, target, reason) {
|
|
|
146
156
|
*/
|
|
147
157
|
export function reconcileDeliveryStatus(input) {
|
|
148
158
|
const { currentStatus, issues, gitState, guardVerdict, reviewState, discoveryOnly } = input;
|
|
149
|
-
|
|
150
|
-
const
|
|
159
|
+
// Every stage reads BLOCKING open work: a deferrable (recorded-concern) issue is not owed.
|
|
160
|
+
const blockingOpen = hasBlockingOpenWork(issues);
|
|
151
161
|
const hasWork = hasWorkIssues(issues);
|
|
152
162
|
switch (currentStatus) {
|
|
153
163
|
case DELIVERY_STATUS.QUEUED: {
|
|
@@ -159,8 +169,8 @@ export function reconcileDeliveryStatus(input) {
|
|
|
159
169
|
}
|
|
160
170
|
return result(currentStatus, DELIVERY_STATUS.QUEUED, 'no work issues yet (scoping gate holds queued)');
|
|
161
171
|
}
|
|
162
|
-
if (
|
|
163
|
-
return result(currentStatus, DELIVERY_STATUS.CODING, 'queued with all work terminal -> step to coding before advancing');
|
|
172
|
+
if (!blockingOpen) {
|
|
173
|
+
return result(currentStatus, DELIVERY_STATUS.CODING, 'queued with all non-deferrable work terminal -> step to coding before advancing');
|
|
164
174
|
}
|
|
165
175
|
if (hasActiveWork(issues)) {
|
|
166
176
|
return result(currentStatus, DELIVERY_STATUS.CODING, 'work in progress -> coding');
|
|
@@ -168,8 +178,8 @@ export function reconcileDeliveryStatus(input) {
|
|
|
168
178
|
return result(currentStatus, DELIVERY_STATUS.QUEUED, 'work not started -> stay queued');
|
|
169
179
|
}
|
|
170
180
|
case DELIVERY_STATUS.CODING: {
|
|
171
|
-
if (
|
|
172
|
-
return result(currentStatus, DELIVERY_STATUS.QUEUED, 'open work remains -> re-queue');
|
|
181
|
+
if (blockingOpen) {
|
|
182
|
+
return result(currentStatus, DELIVERY_STATUS.QUEUED, 'blocking open work remains -> re-queue');
|
|
173
183
|
}
|
|
174
184
|
// Empty-delivery scoping gate: a delivery with NO work issues must never
|
|
175
185
|
// advance coding -> verify on the vacuous "all issues done" truth
|
|
@@ -198,7 +208,7 @@ export function reconcileDeliveryStatus(input) {
|
|
|
198
208
|
// rather than re-coding -- the notes stay tracked but do not churn the
|
|
199
209
|
// verify gate. Non-classified issues are blocking by default, so this is
|
|
200
210
|
// identical to the raw open-work check for every other caller.
|
|
201
|
-
if (
|
|
211
|
+
if (blockingOpen) {
|
|
202
212
|
return result(currentStatus, DELIVERY_STATUS.VERIFY_FAILED, 'blocking open work on a verify delivery -> verify_failed');
|
|
203
213
|
}
|
|
204
214
|
if (guardVerdict?.blocked) {
|
|
@@ -259,10 +269,10 @@ export function reconcileDeliveryStatus(input) {
|
|
|
259
269
|
return result(currentStatus, DELIVERY_STATUS.VERIFY, 'no open work, awaiting review outcome -> stay verify');
|
|
260
270
|
}
|
|
261
271
|
case DELIVERY_STATUS.VERIFY_FAILED: {
|
|
262
|
-
if (
|
|
263
|
-
return result(currentStatus, DELIVERY_STATUS.QUEUED, 'verify_failed with open work -> re-queue');
|
|
272
|
+
if (blockingOpen) {
|
|
273
|
+
return result(currentStatus, DELIVERY_STATUS.QUEUED, 'verify_failed with blocking open work -> re-queue');
|
|
264
274
|
}
|
|
265
|
-
return result(currentStatus, DELIVERY_STATUS.CODING, 'verify_failed, work done -> coding (re-iterate)');
|
|
275
|
+
return result(currentStatus, DELIVERY_STATUS.CODING, 'verify_failed, non-deferrable work done -> coding (re-iterate)');
|
|
266
276
|
}
|
|
267
277
|
case DELIVERY_STATUS.PAUSED: {
|
|
268
278
|
// A pause is a guard BLOCK on a transition (coding->verify or
|
|
@@ -301,7 +311,7 @@ export function reconcileDeliveryStatus(input) {
|
|
|
301
311
|
// rather than failing whichever sibling happens to be in verify.
|
|
302
312
|
if (reviewState?.outcome === 'gaps_found' &&
|
|
303
313
|
reviewState.gapsAttribution === 'targeted' &&
|
|
304
|
-
|
|
314
|
+
blockingOpen) {
|
|
305
315
|
return result(currentStatus, DELIVERY_STATUS.VERIFY_FAILED, 'gaps_found targets this done delivery with open work -> re-open to verify_failed');
|
|
306
316
|
}
|
|
307
317
|
// Shape B durability: re-open a done delivery that owns an OPEN, BLOCKING,
|
|
@@ -314,7 +324,7 @@ export function reconcileDeliveryStatus(input) {
|
|
|
314
324
|
// guard so a closed gap does not churn a settled delivery, and the
|
|
315
325
|
// review-filed restriction (encoded in the flag) keeps a human-filed
|
|
316
326
|
// backlog item from re-opening it.
|
|
317
|
-
if (reviewState?.reviewFiledBlockingOnDone &&
|
|
327
|
+
if (reviewState?.reviewFiledBlockingOnDone && blockingOpen) {
|
|
318
328
|
return result(currentStatus, DELIVERY_STATUS.VERIFY_FAILED, 'review-filed blocking gap on a done delivery -> re-open to verify_failed (evidence, not verdict)');
|
|
319
329
|
}
|
|
320
330
|
return result(currentStatus, currentStatus, 'done is terminal -> stay');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"delivery-reconciler.js","sourceRoot":"","sources":["../../src/delivery/delivery-reconciler.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAC9F,kGAAkG;AAClG,yFAAyF;AACzF,oEAAoE;AACpE,8DAA8D;AAC9D,qEAAqE;AACrE,wEAAwE;AACxE,4EAA4E;AAC5E,8EAA8E;AAC9E,2FAA2F;AAC3F,mFAAmF;AACnF,wEAAwE;AACxE,gBAAgB;AAEhB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAEH,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AACjF,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"delivery-reconciler.js","sourceRoot":"","sources":["../../src/delivery/delivery-reconciler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Recorded concerns: which of a focus's issues are review findings the review
|
|
3
|
+
* RECORDED as a `concern` (no not_met acceptance criterion names them), so the
|
|
4
|
+
* live delivery writers can tag them `deferrable` for the reconciler.
|
|
5
|
+
*
|
|
6
|
+
* A concern is not owed work: the armed run neither fixes it nor waits on it,
|
|
7
|
+
* and it reaches the human at focus completion untouched. The reconciler reads
|
|
8
|
+
* only BLOCKING open work at every stage (delivery-reconciler.ts
|
|
9
|
+
* hasBlockingOpenWork), so a delivery whose only open work is concerns walks
|
|
10
|
+
* coding -> verify instead of re-queuing.
|
|
11
|
+
*
|
|
12
|
+
* The rule is deliberately NARROWER than the review exit's (review-exit-evidence.ts
|
|
13
|
+
* deferrableIssueIds, which also defers an unrecorded P2/P3): here an issue is
|
|
14
|
+
* deferrable ONLY when it is in the focus's review-filed id set AND its recorded
|
|
15
|
+
* class is `concern`. No recorded fact, or a pre-existing (non-review-filed)
|
|
16
|
+
* issue, counts as open work exactly as before.
|
|
17
|
+
*
|
|
18
|
+
* Fail-closed: a facts read that fails logs a warn and yields the EMPTY set, so
|
|
19
|
+
* every issue counts as work (the pre-classification behaviour). Read once per
|
|
20
|
+
* focus per tick by the caller, never per delivery.
|
|
21
|
+
*
|
|
22
|
+
* @module delivery/recorded-concerns
|
|
23
|
+
*/
|
|
24
|
+
import type { FocusReviewFindingFacts } from '../queries/focus-review/review-finding-facts.js';
|
|
25
|
+
import type { ReconcilerIssue } from './delivery-reconciler.js';
|
|
26
|
+
/** Read a focus's recorded concern ids. Never throws (fail-closed to empty). */
|
|
27
|
+
export type RecordedConcernReader = (focusId: string) => Promise<ReadonlySet<string>>;
|
|
28
|
+
/** No recorded concerns: every open issue counts as work. */
|
|
29
|
+
export declare const NO_RECORDED_CONCERNS: ReadonlySet<string>;
|
|
30
|
+
/**
|
|
31
|
+
* Bind the production reader over the focus review-finding-facts read
|
|
32
|
+
* (queries/focus-review/review-finding-facts.ts getFocusReviewFindingFacts),
|
|
33
|
+
* keeping the recorded concerns (that module's recordedConcernIds -- the same
|
|
34
|
+
* definition the team prompt's listing uses).
|
|
35
|
+
*/
|
|
36
|
+
export declare function makeRecordedConcernReader(readFacts: (focusId: string) => Promise<FocusReviewFindingFacts>): RecordedConcernReader;
|
|
37
|
+
/**
|
|
38
|
+
* Pure: a delivery's open work issues, split into ALL open ones and the OWED
|
|
39
|
+
* ones (open and not a recorded concern -- the reconciler's hasBlockingOpenWork).
|
|
40
|
+
*/
|
|
41
|
+
export declare function splitOpenWork<T extends {
|
|
42
|
+
id: string;
|
|
43
|
+
status: string;
|
|
44
|
+
}>(workIssues: ReadonlyArray<T>, concernIds: ReadonlySet<string>): {
|
|
45
|
+
open: T[];
|
|
46
|
+
owed: T[];
|
|
47
|
+
};
|
|
48
|
+
/**
|
|
49
|
+
* Pure: map a delivery's issues to the reconciler's shape, tagging a recorded
|
|
50
|
+
* concern `deferrable`. Unclassified issues carry no flag (blocking by default).
|
|
51
|
+
*/
|
|
52
|
+
export declare function toReconcilerIssues(issues: ReadonlyArray<{
|
|
53
|
+
id: string;
|
|
54
|
+
status: string;
|
|
55
|
+
issueType: string;
|
|
56
|
+
}>, concernIds: ReadonlySet<string>): ReconcilerIssue[];
|
|
57
|
+
//# sourceMappingURL=recorded-concerns.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recorded-concerns.d.ts","sourceRoot":"","sources":["../../src/delivery/recorded-concerns.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,iDAAiD,CAAC;AAE/F,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAMhE,gFAAgF;AAChF,MAAM,MAAM,qBAAqB,GAAG,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;AAEtF,6DAA6D;AAC7D,eAAO,MAAM,oBAAoB,EAAE,WAAW,CAAC,MAAM,CAAqB,CAAC;AAE3E;;;;;GAKG;AACH,wBAAgB,yBAAyB,CACvC,SAAS,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,uBAAuB,CAAC,GAC/D,qBAAqB,CAYvB;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,CAAC,SAAS;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EACpE,UAAU,EAAE,aAAa,CAAC,CAAC,CAAC,EAC5B,UAAU,EAAE,WAAW,CAAC,MAAM,CAAC,GAC9B;IAAE,IAAI,EAAE,CAAC,EAAE,CAAC;IAAC,IAAI,EAAE,CAAC,EAAE,CAAA;CAAE,CAG1B;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,aAAa,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,EACxE,UAAU,EAAE,WAAW,CAAC,MAAM,CAAC,GAC9B,eAAe,EAAE,CAInB"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
// PINNED-BY-BEGIN (generated by gen:pinned-by -- do not hand-edit; checked by lint:pinned-by)
|
|
2
|
+
// Pinned by: packages/daemon/src/delivery/recorded-concerns.test.ts
|
|
3
|
+
// PINNED-BY-END
|
|
4
|
+
import { recordedConcernIds } from '../queries/focus-review/recorded-concern-ids.js';
|
|
5
|
+
import { OPEN_ISSUE_STATUSES } from '../types/issue-status.js';
|
|
6
|
+
import { createLogger } from '../log/daemon-log.js';
|
|
7
|
+
const log = createLogger({ module: 'recorded-concerns' });
|
|
8
|
+
/** No recorded concerns: every open issue counts as work. */
|
|
9
|
+
export const NO_RECORDED_CONCERNS = new Set();
|
|
10
|
+
/**
|
|
11
|
+
* Bind the production reader over the focus review-finding-facts read
|
|
12
|
+
* (queries/focus-review/review-finding-facts.ts getFocusReviewFindingFacts),
|
|
13
|
+
* keeping the recorded concerns (that module's recordedConcernIds -- the same
|
|
14
|
+
* definition the team prompt's listing uses).
|
|
15
|
+
*/
|
|
16
|
+
export function makeRecordedConcernReader(readFacts) {
|
|
17
|
+
return async (focusId) => {
|
|
18
|
+
try {
|
|
19
|
+
return recordedConcernIds(await readFacts(focusId));
|
|
20
|
+
}
|
|
21
|
+
catch (err) {
|
|
22
|
+
log.warn(`[recorded-concerns] review finding facts unreadable for focus ${focusId} -- ` +
|
|
23
|
+
`every open issue counts as work this tick: ${err.message}`);
|
|
24
|
+
return NO_RECORDED_CONCERNS;
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Pure: a delivery's open work issues, split into ALL open ones and the OWED
|
|
30
|
+
* ones (open and not a recorded concern -- the reconciler's hasBlockingOpenWork).
|
|
31
|
+
*/
|
|
32
|
+
export function splitOpenWork(workIssues, concernIds) {
|
|
33
|
+
const open = workIssues.filter(i => OPEN_ISSUE_STATUSES.has(i.status));
|
|
34
|
+
return { open, owed: open.filter(i => !concernIds.has(i.id)) };
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Pure: map a delivery's issues to the reconciler's shape, tagging a recorded
|
|
38
|
+
* concern `deferrable`. Unclassified issues carry no flag (blocking by default).
|
|
39
|
+
*/
|
|
40
|
+
export function toReconcilerIssues(issues, concernIds) {
|
|
41
|
+
return issues.map((i) => (concernIds.has(i.id)
|
|
42
|
+
? { status: i.status, issueType: i.issueType, deferrable: true }
|
|
43
|
+
: { status: i.status, issueType: i.issueType }));
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=recorded-concerns.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recorded-concerns.js","sourceRoot":"","sources":["../../src/delivery/recorded-concerns.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAC9F,oEAAoE;AACpE,gBAAgB;AA2BhB,OAAO,EAAE,kBAAkB,EAAE,MAAM,iDAAiD,CAAC;AAErF,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEpD,MAAM,GAAG,GAAG,YAAY,CAAC,EAAE,MAAM,EAAE,mBAAmB,EAAE,CAAC,CAAC;AAK1D,6DAA6D;AAC7D,MAAM,CAAC,MAAM,oBAAoB,GAAwB,IAAI,GAAG,EAAU,CAAC;AAE3E;;;;;GAKG;AACH,MAAM,UAAU,yBAAyB,CACvC,SAAgE;IAEhE,OAAO,KAAK,EAAE,OAAO,EAAE,EAAE;QACvB,IAAI,CAAC;YACH,OAAO,kBAAkB,CAAC,MAAM,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;QACtD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,GAAG,CAAC,IAAI,CACN,iEAAiE,OAAO,MAAM;gBAC9E,8CAA+C,GAAa,CAAC,OAAO,EAAE,CACvE,CAAC;YACF,OAAO,oBAAoB,CAAC;QAC9B,CAAC;IACH,CAAC,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAC3B,UAA4B,EAC5B,UAA+B;IAE/B,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IACvE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;AACjE,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAChC,MAAwE,EACxE,UAA+B;IAE/B,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5C,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE;QAChE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;AACrD,CAAC"}
|
|
@@ -153,6 +153,19 @@ export declare function clearPendingSpawnDirective(focusId: string): boolean;
|
|
|
153
153
|
* a second review of the same commit. Returns whether one was dropped.
|
|
154
154
|
*/
|
|
155
155
|
export declare function clearPendingReviewDirective(focusId: string): boolean;
|
|
156
|
+
/**
|
|
157
|
+
* Wrap a review-window close so it also ends the queued REVIEW directive the
|
|
158
|
+
* window justified. A review directive is queued for one window (the reviewing
|
|
159
|
+
* stage needs review_requested_at; the stranded re-fire needs it too), so once the
|
|
160
|
+
* window closes -- a review exit routing its deliveries, the release pass replaying
|
|
161
|
+
* a held exit, a stale-window clear -- that directive has nothing left to review:
|
|
162
|
+
* consumed, it judged the commit the closing review already judged, before any
|
|
163
|
+
* coding team ran (67 same-commit re-reviews after gaps_found, 2026-09-30). The
|
|
164
|
+
* directive is dropped only AFTER the clear lands: a failed clear leaves the window
|
|
165
|
+
* open, and the queued review is still owed. A coding directive stays queued.
|
|
166
|
+
* The composition root binds every window-closing seam through this.
|
|
167
|
+
*/
|
|
168
|
+
export declare function closeReviewWindowWith(clearWindow: (focusId: string) => Promise<void>): (focusId: string) => Promise<void>;
|
|
156
169
|
/**
|
|
157
170
|
* Test-only helper: prime a pending spawn directive without going through
|
|
158
171
|
* executeSpawnDirective. Tests use this to verify consume semantics with
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"directive-queue.d.ts","sourceRoot":"","sources":["../../src/directive/directive-queue.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACvE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAIvE;;;;GAIG;AACH,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB;;;;;;OAMG;IACH,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB;;;;;;OAMG;IACH,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC;;;;;;;OAOG;IACH,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,WAAW,EAAE,QAAQ,GAAG,QAAQ,CAAC;IACjC;;;;;;;OAOG;IACH,OAAO,CAAC,EAAE,aAAa,GAAG,IAAI,CAAC;IAC/B,2DAA2D;IAC3D,OAAO,EAAE,MAAM,CAAC;IAChB,+DAA+D;IAC/D,UAAU,EAAE,iBAAiB,CAAC;IAC9B;;;;;OAKG;IACH,WAAW,EAAE,MAAM,CAAC;IACpB;;;;;;;;OAQG;IACH,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B;;;;;;;;;;;OAWG;IACH,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAChC;AAED;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,oCAA2C,CAAC;AAE/E;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,cAAc,GAAG,MAAM,CAMtE;AAED;sCACsC;AACtC,eAAO,MAAM,qBAAqB,QAAQ,CAAC;AAE3C;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE;IAC7C,IAAI,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,yBAAyB,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,GAAG,SAAS,CAAC;IACpF,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,EAAE,MAAM,CAAC;CACb,GAAG,MAAM,GAAG,wBAAwB,GAAG,SAAS,CAMhD;AAED;;;;;GAKG;AACH,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,MAAM,GAAG,qBAAqB,GAAG,SAAS,CAM/F;AAED;;;;;;;GAOG;AACH,wBAAgB,gCAAgC,CAC9C,OAAO,EAAE,MAAM,EACf,mBAAmB,EAAE,MAAM,GAC1B,OAAO,CAIT;AAED;;;;;;;GAOG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAEnE;AAED;;;;;;GAMG;AACH,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAEpE;AAED;;;;GAIG;AACH,wBAAgB,oCAAoC,CAClD,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,qBAAqB,GAC/B,IAAI,CAEN;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAEjE;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,qBAAqB,GAAG,SAAS,CAE3F;AAED,wBAAgB,uBAAuB,IAAI,MAAM,EAAE,CAElD;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,mCAAmC,CAAC,KAAK,EAAE;IACzD,OAAO,EAAE;QAAE,WAAW,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAC;IAC7C,aAAa,EAAE,MAAM,CAAC;CACvB,GAAG,OAAO,CAEV;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,+BAA+B,CAAC,KAAK,EAAE;IACrD,cAAc,EAAE,OAAO,CAAC;IACxB,uBAAuB,EAAE,OAAO,CAAC;CAClC,GAAG,OAAO,CAGV;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE;IAChD,YAAY,EAAE,OAAO,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;CACf,GAAG,OAAO,CAKV;AAED;;;;;;;;;GASG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAM/D"}
|
|
1
|
+
{"version":3,"file":"directive-queue.d.ts","sourceRoot":"","sources":["../../src/directive/directive-queue.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// PINNED-BY-BEGIN (generated by gen:pinned-by -- do not hand-edit; checked by lint:pinned-by)
|
|
2
|
-
// Pinned by:
|
|
2
|
+
// Pinned by: 44 tests -- run: npm run gen:pinned-by -- --list packages/daemon/src/directive/directive-queue.ts
|
|
3
3
|
// PINNED-BY-END
|
|
4
4
|
/**
|
|
5
5
|
* Directive queue: the pending spawn-directive store + its identity/guard logic.
|
|
@@ -112,6 +112,24 @@ export function clearPendingSpawnDirective(focusId) {
|
|
|
112
112
|
export function clearPendingReviewDirective(focusId) {
|
|
113
113
|
return pendingSpawnDirectives.get(focusId)?.lineage === 'review' && pendingSpawnDirectives.delete(focusId);
|
|
114
114
|
}
|
|
115
|
+
/**
|
|
116
|
+
* Wrap a review-window close so it also ends the queued REVIEW directive the
|
|
117
|
+
* window justified. A review directive is queued for one window (the reviewing
|
|
118
|
+
* stage needs review_requested_at; the stranded re-fire needs it too), so once the
|
|
119
|
+
* window closes -- a review exit routing its deliveries, the release pass replaying
|
|
120
|
+
* a held exit, a stale-window clear -- that directive has nothing left to review:
|
|
121
|
+
* consumed, it judged the commit the closing review already judged, before any
|
|
122
|
+
* coding team ran (67 same-commit re-reviews after gaps_found, 2026-09-30). The
|
|
123
|
+
* directive is dropped only AFTER the clear lands: a failed clear leaves the window
|
|
124
|
+
* open, and the queued review is still owed. A coding directive stays queued.
|
|
125
|
+
* The composition root binds every window-closing seam through this.
|
|
126
|
+
*/
|
|
127
|
+
export function closeReviewWindowWith(clearWindow) {
|
|
128
|
+
return async (focusId) => {
|
|
129
|
+
await clearWindow(focusId);
|
|
130
|
+
clearPendingReviewDirective(focusId);
|
|
131
|
+
};
|
|
132
|
+
}
|
|
115
133
|
/**
|
|
116
134
|
* Test-only helper: prime a pending spawn directive without going through
|
|
117
135
|
* executeSpawnDirective. Tests use this to verify consume semantics with
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"directive-queue.js","sourceRoot":"","sources":["../../src/directive/directive-queue.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"directive-queue.js","sourceRoot":"","sources":["../../src/directive/directive-queue.ts"],"names":[],"mappings":"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"}
|
|
@@ -97,6 +97,15 @@ export declare function resolveFocusStageName(input: {
|
|
|
97
97
|
* the stale window, so this predicate reads false on the next poll -- no review of
|
|
98
98
|
* the unchanged commit runs.
|
|
99
99
|
*
|
|
100
|
+
* A window HELD FOR A GATE VERDICT is never stranded either: a review exit that
|
|
101
|
+
* found gaps (or would approve) while the gate judging its commit has no verdict
|
|
102
|
+
* leaves review_requested_at set on purpose, and the release pass
|
|
103
|
+
* (completion/review-exit-holds/commit-verdict-release.ts) replays that exit when
|
|
104
|
+
* the verdict lands. Re-firing there queued a review that ran on the unchanged
|
|
105
|
+
* commit after the release had already routed the work to coding (67 same-commit
|
|
106
|
+
* re-reviews measured 2026-09-30). The caller reads the hold
|
|
107
|
+
* (focus/stranded-review-reroute.ts strandedReviewAwaitsGateVerdict).
|
|
108
|
+
*
|
|
100
109
|
* Pure and exported for unit testing.
|
|
101
110
|
*/
|
|
102
111
|
export declare function shouldRefireStrandedReview(input: {
|
|
@@ -104,6 +113,7 @@ export declare function shouldRefireStrandedReview(input: {
|
|
|
104
113
|
reviewRequestedAt: string | null;
|
|
105
114
|
hasActiveTeam: boolean;
|
|
106
115
|
operatorStopped?: boolean;
|
|
116
|
+
awaitingGateVerdict?: boolean;
|
|
107
117
|
}): boolean;
|
|
108
118
|
/**
|
|
109
119
|
* Synchronize `product_focuses.current_workflow_stage_id` with the focus's
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"phase-sync.d.ts","sourceRoot":"","sources":["../../src/directive/phase-sync.ts"],"names":[],"mappings":"AA+BA,OAAO,KAAK,EAAE,iCAAiC,EAAE,MAAM,+BAA+B,CAAC;AAEvF,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2CAA2C,CAAC;AACvF,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,8BAA8B,CAAC;AAGnF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4CAA4C,CAAC;AAOtF,uEAAuE;AACvE,eAAO,MAAM,8BAA8B,8BAA8B,CAAC;AAC1E,+EAA+E;AAC/E,eAAO,MAAM,wBAAwB,iCAAiC,CAAC;AAEvE;;;;GAIG;AACH,MAAM,WAAW,0BAA0B;IACzC,iCAAiC,EAAE,OAAO,iCAAiC,CAAC;IAC5E,qBAAqB,EAAE,OAAO,qBAAqB,CAAC;IACpD,8BAA8B,EAAE,OAAO,8BAA8B,CAAC;IACtE,YAAY,EAAE,mBAAmB,CAAC;CACnC;AAED;;;;;;;;;GASG;AACH,wBAAsB,2BAA2B,CAC/C,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,GAAG,SAAS,EAC/B,cAAc,EAAE,MAAM,EACtB,IAAI,EAAE,0BAA0B,GAC/B,OAAO,CAAC,IAAI,CAAC,CAgDf;AAID;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE;IAC3C,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACvC,UAAU,EAAE,KAAK,CAAC;QAAE,eAAe,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC,CAAC;IACtD,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;CAClC,GAAG,MAAM,CAMT;AASD
|
|
1
|
+
{"version":3,"file":"phase-sync.d.ts","sourceRoot":"","sources":["../../src/directive/phase-sync.ts"],"names":[],"mappings":"AA+BA,OAAO,KAAK,EAAE,iCAAiC,EAAE,MAAM,+BAA+B,CAAC;AAEvF,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2CAA2C,CAAC;AACvF,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,8BAA8B,CAAC;AAGnF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4CAA4C,CAAC;AAOtF,uEAAuE;AACvE,eAAO,MAAM,8BAA8B,8BAA8B,CAAC;AAC1E,+EAA+E;AAC/E,eAAO,MAAM,wBAAwB,iCAAiC,CAAC;AAEvE;;;;GAIG;AACH,MAAM,WAAW,0BAA0B;IACzC,iCAAiC,EAAE,OAAO,iCAAiC,CAAC;IAC5E,qBAAqB,EAAE,OAAO,qBAAqB,CAAC;IACpD,8BAA8B,EAAE,OAAO,8BAA8B,CAAC;IACtE,YAAY,EAAE,mBAAmB,CAAC;CACnC;AAED;;;;;;;;;GASG;AACH,wBAAsB,2BAA2B,CAC/C,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,GAAG,SAAS,EAC/B,cAAc,EAAE,MAAM,EACtB,IAAI,EAAE,0BAA0B,GAC/B,OAAO,CAAC,IAAI,CAAC,CAgDf;AAID;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE;IAC3C,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACvC,UAAU,EAAE,KAAK,CAAC;QAAE,eAAe,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC,CAAC;IACtD,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;CAClC,GAAG,MAAM,CAMT;AASD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE;IAChD,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,aAAa,EAAE,OAAO,CAAC;IACvB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B,GAAG,OAAO,CAOV;AAED;;;;;;;;;GASG;AACH,wBAAsB,cAAc,CAAC,KAAK,EAAE;IAC1C,QAAQ,EAAE,MAAM,CAAC;IACjB,yBAAyB,EAAE,MAAM,GAAG,IAAI,CAAC;IACzC,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAmCzB"}
|
|
@@ -158,6 +158,15 @@ const REVIEW_STAGE_NAMES = new Set(['reviewing', 'review']);
|
|
|
158
158
|
* the stale window, so this predicate reads false on the next poll -- no review of
|
|
159
159
|
* the unchanged commit runs.
|
|
160
160
|
*
|
|
161
|
+
* A window HELD FOR A GATE VERDICT is never stranded either: a review exit that
|
|
162
|
+
* found gaps (or would approve) while the gate judging its commit has no verdict
|
|
163
|
+
* leaves review_requested_at set on purpose, and the release pass
|
|
164
|
+
* (completion/review-exit-holds/commit-verdict-release.ts) replays that exit when
|
|
165
|
+
* the verdict lands. Re-firing there queued a review that ran on the unchanged
|
|
166
|
+
* commit after the release had already routed the work to coding (67 same-commit
|
|
167
|
+
* re-reviews measured 2026-09-30). The caller reads the hold
|
|
168
|
+
* (focus/stranded-review-reroute.ts strandedReviewAwaitsGateVerdict).
|
|
169
|
+
*
|
|
161
170
|
* Pure and exported for unit testing.
|
|
162
171
|
*/
|
|
163
172
|
export function shouldRefireStrandedReview(input) {
|
|
@@ -169,6 +178,8 @@ export function shouldRefireStrandedReview(input) {
|
|
|
169
178
|
return false;
|
|
170
179
|
if (input.operatorStopped)
|
|
171
180
|
return false;
|
|
181
|
+
if (input.awaitingGateVerdict)
|
|
182
|
+
return false;
|
|
172
183
|
return true;
|
|
173
184
|
}
|
|
174
185
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"phase-sync.js","sourceRoot":"","sources":["../../src/directive/phase-sync.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"phase-sync.js","sourceRoot":"","sources":["../../src/directive/phase-sync.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The window read of the ready-focus pass: the focus's review_requested_at, or
|
|
3
|
+
* 'absent' when the focus is not in the active set read. Throws when the read fails.
|
|
4
|
+
*/
|
|
5
|
+
export type ReadReviewWindow = (organizationId: string, focus: {
|
|
6
|
+
focus_id: string;
|
|
7
|
+
product_id: string | null;
|
|
8
|
+
}) => Promise<string | null | 'absent'>;
|
|
9
|
+
/** Drop a queued review directive whose window the row shows closed; true when dropped. */
|
|
10
|
+
export declare function dropReviewDirectiveOfClosedWindow(focus: {
|
|
11
|
+
focus_id: string;
|
|
12
|
+
focus_name: string;
|
|
13
|
+
review_requested_at: string | null;
|
|
14
|
+
}): boolean;
|
|
15
|
+
/**
|
|
16
|
+
* The ready-focus pass's window guard, read before its spawn consumes a queued
|
|
17
|
+
* directive. 'spawn': no review directive is queued, its window is open, or it
|
|
18
|
+
* was just discarded (the spawn then runs the focus's coding work). 'withhold':
|
|
19
|
+
* the window could not be read, so this tick does not spawn and the directive stays.
|
|
20
|
+
*/
|
|
21
|
+
export declare function gateReadyReviewDirectiveOnWindow(organizationId: string, focus: {
|
|
22
|
+
focus_id: string;
|
|
23
|
+
focus_name: string;
|
|
24
|
+
product_id: string | null;
|
|
25
|
+
}, readReviewWindow: ReadReviewWindow): Promise<'spawn' | 'withhold'>;
|
|
26
|
+
//# sourceMappingURL=closed-review-window.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"closed-review-window.d.ts","sourceRoot":"","sources":["../../src/focus/closed-review-window.ts"],"names":[],"mappings":"AA+BA;;;GAGG;AACH,MAAM,MAAM,gBAAgB,GAAG,CAC7B,cAAc,EAAE,MAAM,EACtB,KAAK,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,KACnD,OAAO,CAAC,MAAM,GAAG,IAAI,GAAG,QAAQ,CAAC,CAAC;AAEvC,2FAA2F;AAC3F,wBAAgB,iCAAiC,CAC/C,KAAK,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAClF,OAAO,CAQT;AAED;;;;;GAKG;AACH,wBAAsB,gCAAgC,CACpD,cAAc,EAAE,MAAM,EACtB,KAAK,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,EAC1E,gBAAgB,EAAE,gBAAgB,GACjC,OAAO,CAAC,OAAO,GAAG,UAAU,CAAC,CAkB/B"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
// PINNED-BY-BEGIN (generated by gen:pinned-by -- do not hand-edit; checked by lint:pinned-by)
|
|
2
|
+
// Pinned by: packages/daemon/src/focus/gaps-found-hands-to-coding.test.ts
|
|
3
|
+
// PINNED-BY-END
|
|
4
|
+
/**
|
|
5
|
+
* A queued REVIEW directive belongs to the review window it was queued for.
|
|
6
|
+
*
|
|
7
|
+
* Once that window is closed (review_requested_at null on the focus row --
|
|
8
|
+
* routing to coding, a held exit's release, a stale-window clear), the directive
|
|
9
|
+
* is discarded rather than consumed, so the next team for the focus is the coding
|
|
10
|
+
* team the routing asked for, never a second review of the commit the closing
|
|
11
|
+
* review judged. The window-closing seams already drop it
|
|
12
|
+
* (directive/directive-queue.ts closeReviewWindowWith); the guards here catch a
|
|
13
|
+
* close made where no seam saw it (another writer, a stage id not yet re-synced),
|
|
14
|
+
* at BOTH spawn entries that consume a queued directive:
|
|
15
|
+
*
|
|
16
|
+
* - the pending-spawn pass, whose active-focus row carries the window
|
|
17
|
+
* (dropReviewDirectiveOfClosedWindow);
|
|
18
|
+
* - the ready-focus pass, whose ready row does not, so the window is read
|
|
19
|
+
* (gateReadyReviewDirectiveOnWindow). An unreadable window withholds that
|
|
20
|
+
* spawn for the tick with the directive kept: spawning on a guess could hand
|
|
21
|
+
* a closed window's review the commit it already judged.
|
|
22
|
+
*
|
|
23
|
+
* A coding directive is never touched here. Nothing here imports focus-poller-spawn.
|
|
24
|
+
*/
|
|
25
|
+
import { getPendingSpawnDirective, clearPendingSpawnDirective } from '../directive/directive-queue.js';
|
|
26
|
+
import { createLogger } from '../log/daemon-log.js';
|
|
27
|
+
const log = createLogger({ module: 'focus-poller' });
|
|
28
|
+
/** Drop a queued review directive whose window the row shows closed; true when dropped. */
|
|
29
|
+
export function dropReviewDirectiveOfClosedWindow(focus) {
|
|
30
|
+
if (focus.review_requested_at || getPendingSpawnDirective(focus.focus_id)?.lineage !== 'review')
|
|
31
|
+
return false;
|
|
32
|
+
clearPendingSpawnDirective(focus.focus_id);
|
|
33
|
+
log.info(`[focus-poller] Discarding the queued review directive for "${focus.focus_name}" -- the review window it was ` +
|
|
34
|
+
`queued for has closed; the next team spawned for the focus is a coding team, not a re-review of the same commit.`);
|
|
35
|
+
return true;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* The ready-focus pass's window guard, read before its spawn consumes a queued
|
|
39
|
+
* directive. 'spawn': no review directive is queued, its window is open, or it
|
|
40
|
+
* was just discarded (the spawn then runs the focus's coding work). 'withhold':
|
|
41
|
+
* the window could not be read, so this tick does not spawn and the directive stays.
|
|
42
|
+
*/
|
|
43
|
+
export async function gateReadyReviewDirectiveOnWindow(organizationId, focus, readReviewWindow) {
|
|
44
|
+
if (getPendingSpawnDirective(focus.focus_id)?.lineage !== 'review')
|
|
45
|
+
return 'spawn';
|
|
46
|
+
let window;
|
|
47
|
+
try {
|
|
48
|
+
window = await readReviewWindow(organizationId, focus);
|
|
49
|
+
}
|
|
50
|
+
catch (err) {
|
|
51
|
+
window = 'absent';
|
|
52
|
+
log.debug(`[focus-poller] review window unreadable for "${focus.focus_name}": ${err.message}`);
|
|
53
|
+
}
|
|
54
|
+
if (window === 'absent') {
|
|
55
|
+
log.info(`[focus-poller] Withholding the spawn for "${focus.focus_name}" this tick -- a review directive is queued and ` +
|
|
56
|
+
`its review window could not be read; the directive is kept and the next poll re-reads the window.`);
|
|
57
|
+
return 'withhold';
|
|
58
|
+
}
|
|
59
|
+
dropReviewDirectiveOfClosedWindow({ ...focus, review_requested_at: window });
|
|
60
|
+
return 'spawn';
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=closed-review-window.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"closed-review-window.js","sourceRoot":"","sources":["../../src/focus/closed-review-window.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAC9F,0EAA0E;AAC1E,gBAAgB;AAEhB;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,wBAAwB,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AACvG,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEpD,MAAM,GAAG,GAAG,YAAY,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC,CAAC;AAWrD,2FAA2F;AAC3F,MAAM,UAAU,iCAAiC,CAC/C,KAAmF;IAEnF,IAAI,KAAK,CAAC,mBAAmB,IAAI,wBAAwB,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,OAAO,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC9G,0BAA0B,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC3C,GAAG,CAAC,IAAI,CACN,8DAA8D,KAAK,CAAC,UAAU,gCAAgC;QAC9G,kHAAkH,CACnH,CAAC;IACF,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,gCAAgC,CACpD,cAAsB,EACtB,KAA0E,EAC1E,gBAAkC;IAElC,IAAI,wBAAwB,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,OAAO,KAAK,QAAQ;QAAE,OAAO,OAAO,CAAC;IACnF,IAAI,MAAgC,CAAC;IACrC,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,gBAAgB,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;IACzD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,GAAG,QAAQ,CAAC;QAClB,GAAG,CAAC,KAAK,CAAC,gDAAgD,KAAK,CAAC,UAAU,MAAO,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;IAC5G,CAAC;IACD,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;QACxB,GAAG,CAAC,IAAI,CACN,6CAA6C,KAAK,CAAC,UAAU,kDAAkD;YAC/G,mGAAmG,CACpG,CAAC;QACF,OAAO,UAAU,CAAC;IACpB,CAAC;IACD,iCAAiC,CAAC,EAAE,GAAG,KAAK,EAAE,mBAAmB,EAAE,MAAM,EAAE,CAAC,CAAC;IAC7E,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// PINNED-BY-BEGIN (generated by gen:pinned-by -- do not hand-edit; checked by lint:pinned-by)
|
|
2
|
-
// Pinned by:
|
|
2
|
+
// Pinned by: 23 tests -- run: npm run gen:pinned-by -- --list packages/daemon/src/focus/daemon-contexts.ts
|
|
3
3
|
// PINNED-BY-END
|
|
4
4
|
let installed = null;
|
|
5
5
|
/** Install the contexts the engine built. Called once, by FocusEngine.init(). */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"directive-executor.d.ts","sourceRoot":"","sources":["../../src/focus/directive-executor.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAkB,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"directive-executor.d.ts","sourceRoot":"","sources":["../../src/focus/directive-executor.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAkB,MAAM,mBAAmB,CAAC;AA4ItE,wBAAsB,eAAe,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAqNzE"}
|
|
@@ -10,10 +10,10 @@ import { resolveLineageSpec } from '../session/session-lineage.js';
|
|
|
10
10
|
import { focusPipelineModelForPass } from '../config/model-resolution.js';
|
|
11
11
|
import { lastProcessedStages, recordStageEntryOutcome } from '../directive/stage-tracker.js';
|
|
12
12
|
import { computeDirectiveHash, getPendingSpawnDirective, hasPendingSpawnDirective, shouldSuppressRefireForPendingSpawn, shouldLogRefireSuppression, recordRefireSuppression, } from '../directive/directive-queue.js';
|
|
13
|
-
import { fireFocusTransitionTriggers,
|
|
13
|
+
import { fireFocusTransitionTriggers, syncFocusPhase, } from '../directive/phase-sync.js';
|
|
14
14
|
import { executeDirective, resolveDirectiveExecutionMode, isQuietTerminalStage, runDirectiveWithRetry, escalateDirectiveFailure, directiveConsumesStageEntry, } from '../spawn/directive-dispatch.js';
|
|
15
15
|
import { isAgentlessDirective } from '../directive/agentless-directive.js';
|
|
16
|
-
import { boundStrandedReviewRefire } from './stranded-review-reroute.js';
|
|
16
|
+
import { boundStrandedReviewRefire, strandedReviewMayRefire } from './stranded-review-reroute.js';
|
|
17
17
|
import { installedDaemonContexts } from './daemon-contexts.js';
|
|
18
18
|
import { createLogger } from '../log/daemon-log.js';
|
|
19
19
|
const log = createLogger({ module: 'directive-executor' });
|
|
@@ -134,12 +134,7 @@ export async function checkDirectives(config) {
|
|
|
134
134
|
// only proceed if this is genuinely a stranded review stage (re-fire);
|
|
135
135
|
// otherwise leave the edge-trigger skip intact for every other stage.
|
|
136
136
|
if (alreadyProcessed &&
|
|
137
|
-
!
|
|
138
|
-
stageName: stage?.name,
|
|
139
|
-
reviewRequestedAt: focus.review_requested_at,
|
|
140
|
-
hasActiveTeam: getActiveTeams().has(focus.focus_id),
|
|
141
|
-
operatorStopped: !!focus.operator_stopped_at,
|
|
142
|
-
})) {
|
|
137
|
+
!await strandedReviewMayRefire(focus, stage?.name, getActiveTeams().has(focus.focus_id), installedDaemonContexts().strandedReviewReroute)) {
|
|
143
138
|
continue;
|
|
144
139
|
}
|
|
145
140
|
// Bound the re-fire: if an equivalent spawn directive (same
|