@openrig/cli 0.5.3 → 0.5.5
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/daemon/assets/guidance/openrig-start.md +7 -0
- package/daemon/assets/onboarding/01-world-and-purpose.md +52 -0
- package/daemon/assets/onboarding/02-self-and-competent-action.md +57 -0
- package/daemon/assets/plugins/openrig-core/.claude-plugin/plugin.json +1 -1
- package/daemon/assets/plugins/openrig-core/.codex-plugin/plugin.json +1 -1
- package/daemon/assets/plugins/openrig-core/README.md +5 -2
- package/daemon/assets/plugins/openrig-core/hooks/claude.json +3 -12
- package/daemon/assets/plugins/openrig-core/hooks/codex.json +5 -12
- package/daemon/assets/plugins/openrig-core/hooks/scripts/refocus.cjs +196 -106
- package/daemon/assets/plugins/openrig-core/skills/mission-slice-sop/SKILL.md +18 -23
- package/daemon/assets/plugins/openrig-core/skills/openrig-operating-model/CHANGELOG.md +92 -0
- package/daemon/assets/plugins/openrig-core/skills/openrig-operating-model/REVISION-GUIDE.md +34 -0
- package/daemon/assets/plugins/openrig-core/skills/openrig-operating-model/ROADMAP.md +23 -0
- package/daemon/assets/plugins/openrig-core/skills/openrig-operating-model/ROLLOUT.md +234 -0
- package/daemon/assets/plugins/openrig-core/skills/openrig-operating-model/SKILL.md +404 -0
- package/daemon/assets/plugins/openrig-core/skills/openrig-operating-model/scripts/compose.py +653 -0
- package/daemon/assets/plugins/openrig-core/skills/openrig-operating-model/scripts/scaffold.sh +34 -0
- package/daemon/assets/plugins/openrig-core/skills/openrig-operating-model/scripts/trace-due.sh +32 -0
- package/daemon/assets/plugins/openrig-core/skills/openrig-operating-model/scripts/trace-stamp.sh +5 -0
- package/daemon/assets/plugins/openrig-core/skills/openrig-operating-model/scripts/trunk-diff.sh +18 -0
- package/daemon/assets/plugins/openrig-core/skills/openrig-operating-model/templates/LEARNED.md +40 -0
- package/daemon/assets/plugins/openrig-core/skills/openrig-operating-model/templates/NOTES.md +9 -0
- package/daemon/assets/plugins/openrig-core/skills/openrig-operating-model/templates/PLAYBOOK.md +5 -0
- package/daemon/assets/plugins/openrig-core/skills/openrig-operating-model/templates/SOP.md +24 -0
- package/daemon/assets/plugins/openrig-core/skills/openrig-operating-model/templates/SPEC.md +54 -0
- package/daemon/assets/plugins/openrig-core/skills/openrig-skills/SKILL.md +5 -0
- package/daemon/assets/plugins/openrig-core/skills/refocusing/SKILL.md +31 -0
- package/daemon/assets/plugins/openrig-core/skills/refocusing/references/refocus.md +22 -0
- package/daemon/assets/plugins/openrig-core/skills/refocusing/scripts/trace-to-root.py +221 -0
- package/daemon/assets/plugins/openrig-core/skills/retiring-and-inheriting-a-seat/SKILL.md +3 -3
- package/daemon/assets/plugins/openrig-core/skills/software-for-agents/SKILL.md +4 -9
- package/daemon/context-packs/onboarding-width/manifest.yaml +11 -0
- package/daemon/context-packs/{world/install/reference-material.md → onboarding-width/public-reference-material.md} +4 -26
- package/daemon/context-packs/{world/install/what-you-can-do.md → onboarding-width/public-what-you-can-do.md} +13 -9
- package/daemon/context-packs/skills/core/agent-starters/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/agent-startup-and-context-ingestion/SKILL.md +1 -1
- package/daemon/context-packs/skills/core/agent-startup-and-context-ingestion/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/attention-queue/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/cross-host-rig-commands/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/human-in-the-loop/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/openrig-architect/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/openrig-cmux/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/openrig-herdr/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/openrig-upgrade/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/rig-bundles-and-shareable-artifacts/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/rig-lifecycle/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/session-source-fork/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/specification-system/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/topology-mutation-and-seat-management/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/watchdog/manifest.yaml +1 -1
- package/daemon/context-packs/skills/pm/backlog-capture/manifest.yaml +1 -1
- package/daemon/context-packs/skills/pm/context-builder/manifest.yaml +1 -1
- package/daemon/context-packs/skills/pm/exec-summary/manifest.yaml +1 -1
- package/daemon/context-packs/skills/pm/office-hours/manifest.yaml +1 -1
- package/daemon/context-packs/skills/pm/plan-review/manifest.yaml +1 -1
- package/daemon/context-packs/skills/pm/requirements-writer/SKILL.md +21 -15
- package/daemon/context-packs/skills/pm/requirements-writer/manifest.yaml +3 -3
- package/daemon/context-packs/skills/pm/ui-mockup/manifest.yaml +1 -1
- package/daemon/context-packs/skills/pods/development-team/manifest.yaml +1 -1
- package/daemon/context-packs/skills/pods/orchestration-team/manifest.yaml +1 -1
- package/daemon/context-packs/skills/pods/oversight-team/manifest.yaml +1 -1
- package/daemon/context-packs/skills/pods/review-team/manifest.yaml +1 -1
- package/daemon/context-packs/skills/process/agent-browser/manifest.yaml +1 -1
- package/daemon/context-packs/skills/process/brainstorming/manifest.yaml +1 -1
- package/daemon/context-packs/skills/process/context-engineering/manifest.yaml +1 -1
- package/daemon/context-packs/skills/process/dogfood/manifest.yaml +1 -1
- package/daemon/context-packs/skills/process/executing-plans/manifest.yaml +1 -1
- package/daemon/context-packs/skills/process/frontend-design/manifest.yaml +1 -1
- package/daemon/context-packs/skills/process/systematic-debugging/manifest.yaml +1 -1
- package/daemon/context-packs/skills/process/test-driven-development/manifest.yaml +1 -1
- package/daemon/context-packs/skills/process/using-superpowers/manifest.yaml +1 -1
- package/daemon/context-packs/skills/process/verification-before-completion/manifest.yaml +1 -1
- package/daemon/context-packs/skills/process/writing-plans/manifest.yaml +1 -1
- package/daemon/context-packs/world-example/manifest.yaml +8 -0
- package/daemon/context-packs/world-example/your-world.md +37 -0
- package/daemon/dist/adapters/claude-code-adapter.d.ts +15 -0
- package/daemon/dist/adapters/claude-code-adapter.d.ts.map +1 -1
- package/daemon/dist/adapters/claude-code-adapter.js +57 -0
- package/daemon/dist/adapters/claude-code-adapter.js.map +1 -1
- package/daemon/dist/adapters/tmux.d.ts +31 -0
- package/daemon/dist/adapters/tmux.d.ts.map +1 -1
- package/daemon/dist/adapters/tmux.js +31 -11
- package/daemon/dist/adapters/tmux.js.map +1 -1
- package/daemon/dist/build-info.js +3 -3
- package/daemon/dist/daemon-db-path.d.ts.map +1 -1
- package/daemon/dist/daemon-db-path.js +50 -2
- package/daemon/dist/daemon-db-path.js.map +1 -1
- package/daemon/dist/db/all-migrations.d.ts.map +1 -1
- package/daemon/dist/db/all-migrations.js +4 -0
- package/daemon/dist/db/all-migrations.js.map +1 -1
- package/daemon/dist/db/migrations/072_thread_seat_map.d.ts +3 -0
- package/daemon/dist/db/migrations/072_thread_seat_map.d.ts.map +1 -0
- package/daemon/dist/db/migrations/072_thread_seat_map.js +22 -0
- package/daemon/dist/db/migrations/072_thread_seat_map.js.map +1 -0
- package/daemon/dist/db/migrations/073_queue_transition_wakes.d.ts +3 -0
- package/daemon/dist/db/migrations/073_queue_transition_wakes.d.ts.map +1 -0
- package/daemon/dist/db/migrations/073_queue_transition_wakes.js +21 -0
- package/daemon/dist/db/migrations/073_queue_transition_wakes.js.map +1 -0
- package/daemon/dist/domain/activity-taxonomy.d.ts +112 -0
- package/daemon/dist/domain/activity-taxonomy.d.ts.map +1 -0
- package/daemon/dist/domain/activity-taxonomy.js +99 -0
- package/daemon/dist/domain/activity-taxonomy.js.map +1 -0
- package/daemon/dist/domain/bind-plan.d.ts +19 -0
- package/daemon/dist/domain/bind-plan.d.ts.map +1 -0
- package/daemon/dist/domain/bind-plan.js +25 -0
- package/daemon/dist/domain/bind-plan.js.map +1 -0
- package/daemon/dist/domain/event-bus.d.ts +6 -0
- package/daemon/dist/domain/event-bus.d.ts.map +1 -1
- package/daemon/dist/domain/event-bus.js +15 -5
- package/daemon/dist/domain/event-bus.js.map +1 -1
- package/daemon/dist/domain/gateway/gateway-process-main.d.ts.map +1 -1
- package/daemon/dist/domain/gateway/gateway-process-main.js +9 -0
- package/daemon/dist/domain/gateway/gateway-process-main.js.map +1 -1
- package/daemon/dist/domain/gateway/gateway-process.d.ts.map +1 -1
- package/daemon/dist/domain/gateway/gateway-process.js +9 -0
- package/daemon/dist/domain/gateway/gateway-process.js.map +1 -1
- package/daemon/dist/domain/gateway/gateway-subsystem.d.ts +80 -0
- package/daemon/dist/domain/gateway/gateway-subsystem.d.ts.map +1 -0
- package/daemon/dist/domain/gateway/gateway-subsystem.js +149 -0
- package/daemon/dist/domain/gateway/gateway-subsystem.js.map +1 -0
- package/daemon/dist/domain/gateway/human-registry.d.ts +109 -0
- package/daemon/dist/domain/gateway/human-registry.d.ts.map +1 -1
- package/daemon/dist/domain/gateway/human-registry.js +250 -0
- package/daemon/dist/domain/gateway/human-registry.js.map +1 -1
- package/{dist → daemon/dist/domain/gateway}/slack/config.d.ts +8 -5
- package/daemon/dist/domain/gateway/slack/config.d.ts.map +1 -0
- package/{dist → daemon/dist/domain/gateway}/slack/config.js +8 -6
- package/daemon/dist/domain/gateway/slack/config.js.map +1 -0
- package/{dist → daemon/dist/domain/gateway}/slack/inbound-admission.d.ts +1 -1
- package/daemon/dist/domain/gateway/slack/inbound-admission.d.ts.map +1 -0
- package/daemon/dist/domain/gateway/slack/inbound-admission.js.map +1 -0
- package/{dist → daemon/dist/domain/gateway}/slack/inbound.d.ts +14 -3
- package/daemon/dist/domain/gateway/slack/inbound.d.ts.map +1 -0
- package/{dist → daemon/dist/domain/gateway}/slack/inbound.js +6 -5
- package/daemon/dist/domain/gateway/slack/inbound.js.map +1 -0
- package/daemon/dist/domain/gateway/slack/message.d.ts +80 -0
- package/daemon/dist/domain/gateway/slack/message.d.ts.map +1 -0
- package/daemon/dist/domain/gateway/slack/message.js +164 -0
- package/daemon/dist/domain/gateway/slack/message.js.map +1 -0
- package/daemon/dist/domain/gateway/slack/outbound-driver.d.ts +54 -0
- package/daemon/dist/domain/gateway/slack/outbound-driver.d.ts.map +1 -0
- package/daemon/dist/domain/gateway/slack/outbound-driver.js +96 -0
- package/daemon/dist/domain/gateway/slack/outbound-driver.js.map +1 -0
- package/daemon/dist/domain/gateway/slack/queue-access.d.ts +53 -0
- package/daemon/dist/domain/gateway/slack/queue-access.d.ts.map +1 -0
- package/daemon/dist/domain/gateway/slack/queue-access.js +72 -0
- package/daemon/dist/domain/gateway/slack/queue-access.js.map +1 -0
- package/daemon/dist/domain/gateway/slack/secrets.d.ts.map +1 -0
- package/daemon/dist/domain/gateway/slack/secrets.js.map +1 -0
- package/daemon/dist/domain/gateway/slack/slack-api.d.ts +106 -0
- package/daemon/dist/domain/gateway/slack/slack-api.d.ts.map +1 -0
- package/daemon/dist/domain/gateway/slack/slack-api.js +198 -0
- package/daemon/dist/domain/gateway/slack/slack-api.js.map +1 -0
- package/daemon/dist/domain/gateway/slack/slack-delivery.d.ts +47 -0
- package/daemon/dist/domain/gateway/slack/slack-delivery.d.ts.map +1 -0
- package/daemon/dist/domain/gateway/slack/slack-delivery.js +147 -0
- package/daemon/dist/domain/gateway/slack/slack-delivery.js.map +1 -0
- package/daemon/dist/domain/gateway/slack/slack-subsystem.d.ts +21 -0
- package/daemon/dist/domain/gateway/slack/slack-subsystem.d.ts.map +1 -0
- package/daemon/dist/domain/gateway/slack/slack-subsystem.js +198 -0
- package/daemon/dist/domain/gateway/slack/slack-subsystem.js.map +1 -0
- package/daemon/dist/domain/gateway/slack/socket-inbound.d.ts +30 -0
- package/daemon/dist/domain/gateway/slack/socket-inbound.d.ts.map +1 -0
- package/daemon/dist/domain/gateway/slack/socket-inbound.js +99 -0
- package/daemon/dist/domain/gateway/slack/socket-inbound.js.map +1 -0
- package/daemon/dist/domain/gateway/slack/state-store.d.ts.map +1 -0
- package/daemon/dist/domain/gateway/slack/state-store.js.map +1 -0
- package/daemon/dist/domain/gateway/slack/thread-routing.d.ts +17 -0
- package/daemon/dist/domain/gateway/slack/thread-routing.d.ts.map +1 -0
- package/daemon/dist/domain/gateway/slack/thread-routing.js +35 -0
- package/daemon/dist/domain/gateway/slack/thread-routing.js.map +1 -0
- package/daemon/dist/domain/gateway/slack/thread-seat-map.d.ts +56 -0
- package/daemon/dist/domain/gateway/slack/thread-seat-map.d.ts.map +1 -0
- package/daemon/dist/domain/gateway/slack/thread-seat-map.js +103 -0
- package/daemon/dist/domain/gateway/slack/thread-seat-map.js.map +1 -0
- package/daemon/dist/domain/gateway/spawn-gateway.d.ts.map +1 -1
- package/daemon/dist/domain/gateway/spawn-gateway.js +9 -0
- package/daemon/dist/domain/gateway/spawn-gateway.js.map +1 -1
- package/daemon/dist/domain/gateway/transport.d.ts.map +1 -1
- package/daemon/dist/domain/gateway/transport.js +9 -0
- package/daemon/dist/domain/gateway/transport.js.map +1 -1
- package/daemon/dist/domain/node-inventory.d.ts.map +1 -1
- package/daemon/dist/domain/node-inventory.js +20 -0
- package/daemon/dist/domain/node-inventory.js.map +1 -1
- package/daemon/dist/domain/parked-query.d.ts +81 -0
- package/daemon/dist/domain/parked-query.d.ts.map +1 -0
- package/daemon/dist/domain/parked-query.js +126 -0
- package/daemon/dist/domain/parked-query.js.map +1 -0
- package/daemon/dist/domain/plugin-discovery-service.d.ts +16 -0
- package/daemon/dist/domain/plugin-discovery-service.d.ts.map +1 -1
- package/daemon/dist/domain/plugin-discovery-service.js +175 -1
- package/daemon/dist/domain/plugin-discovery-service.js.map +1 -1
- package/daemon/dist/domain/plugin-vendor-service.d.ts +9 -5
- package/daemon/dist/domain/plugin-vendor-service.d.ts.map +1 -1
- package/daemon/dist/domain/plugin-vendor-service.js +101 -12
- package/daemon/dist/domain/plugin-vendor-service.js.map +1 -1
- package/daemon/dist/domain/queue-pickup.d.ts +38 -0
- package/daemon/dist/domain/queue-pickup.d.ts.map +1 -0
- package/daemon/dist/domain/queue-pickup.js +67 -0
- package/daemon/dist/domain/queue-pickup.js.map +1 -0
- package/daemon/dist/domain/queue-repository.d.ts +41 -11
- package/daemon/dist/domain/queue-repository.d.ts.map +1 -1
- package/daemon/dist/domain/queue-repository.js +316 -36
- package/daemon/dist/domain/queue-repository.js.map +1 -1
- package/daemon/dist/domain/queue-stuck-sweep.d.ts +77 -0
- package/daemon/dist/domain/queue-stuck-sweep.d.ts.map +1 -0
- package/daemon/dist/domain/queue-stuck-sweep.js +348 -0
- package/daemon/dist/domain/queue-stuck-sweep.js.map +1 -0
- package/daemon/dist/domain/queue-wake-ladder.d.ts +96 -0
- package/daemon/dist/domain/queue-wake-ladder.d.ts.map +1 -0
- package/daemon/dist/domain/queue-wake-ladder.js +533 -0
- package/daemon/dist/domain/queue-wake-ladder.js.map +1 -0
- package/daemon/dist/domain/queue-wake-repository.d.ts +37 -0
- package/daemon/dist/domain/queue-wake-repository.d.ts.map +1 -0
- package/daemon/dist/domain/queue-wake-repository.js +80 -0
- package/daemon/dist/domain/queue-wake-repository.js.map +1 -0
- package/daemon/dist/domain/rebuild-priming-chain.d.ts +28 -0
- package/daemon/dist/domain/rebuild-priming-chain.d.ts.map +1 -0
- package/daemon/dist/domain/rebuild-priming-chain.js +71 -0
- package/daemon/dist/domain/rebuild-priming-chain.js.map +1 -0
- package/daemon/dist/domain/reconciler.d.ts.map +1 -1
- package/daemon/dist/domain/reconciler.js +6 -1
- package/daemon/dist/domain/reconciler.js.map +1 -1
- package/daemon/dist/domain/review/compose.d.ts +3 -1
- package/daemon/dist/domain/review/compose.d.ts.map +1 -1
- package/daemon/dist/domain/review/compose.js +14 -8
- package/daemon/dist/domain/review/compose.js.map +1 -1
- package/daemon/dist/domain/review/gather.d.ts.map +1 -1
- package/daemon/dist/domain/review/gather.js +3 -1
- package/daemon/dist/domain/review/gather.js.map +1 -1
- package/daemon/dist/domain/rig-repository.d.ts +4 -0
- package/daemon/dist/domain/rig-repository.d.ts.map +1 -1
- package/daemon/dist/domain/rig-repository.js +9 -0
- package/daemon/dist/domain/rig-repository.js.map +1 -1
- package/daemon/dist/domain/rigspec-instantiator.d.ts +12 -0
- package/daemon/dist/domain/rigspec-instantiator.d.ts.map +1 -1
- package/daemon/dist/domain/rigspec-instantiator.js +50 -0
- package/daemon/dist/domain/rigspec-instantiator.js.map +1 -1
- package/daemon/dist/domain/running-name-guard.d.ts +52 -0
- package/daemon/dist/domain/running-name-guard.d.ts.map +1 -0
- package/daemon/dist/domain/running-name-guard.js +34 -0
- package/daemon/dist/domain/running-name-guard.js.map +1 -0
- package/daemon/dist/domain/scope/plan-lock-artifacts.d.ts +6 -5
- package/daemon/dist/domain/scope/plan-lock-artifacts.d.ts.map +1 -1
- package/daemon/dist/domain/scope/plan-lock-artifacts.js +23 -20
- package/daemon/dist/domain/scope/plan-lock-artifacts.js.map +1 -1
- package/daemon/dist/domain/scope/scaffold-placeholder.d.ts +4 -5
- package/daemon/dist/domain/scope/scaffold-placeholder.d.ts.map +1 -1
- package/daemon/dist/domain/scope/scaffold-placeholder.js +6 -7
- package/daemon/dist/domain/scope/scaffold-placeholder.js.map +1 -1
- package/daemon/dist/domain/scope/scope-approve.d.ts +1 -1
- package/daemon/dist/domain/scope/scope-approve.d.ts.map +1 -1
- package/daemon/dist/domain/scope/scope-approve.js +5 -4
- package/daemon/dist/domain/scope/scope-approve.js.map +1 -1
- package/daemon/dist/domain/scope/scope-audit.d.ts +42 -3
- package/daemon/dist/domain/scope/scope-audit.d.ts.map +1 -1
- package/daemon/dist/domain/scope/scope-audit.js +78 -93
- package/daemon/dist/domain/scope/scope-audit.js.map +1 -1
- package/daemon/dist/domain/scope/scope-view-projection.d.ts.map +1 -1
- package/daemon/dist/domain/scope/scope-view-projection.js +7 -2
- package/daemon/dist/domain/scope/scope-view-projection.js.map +1 -1
- package/daemon/dist/domain/seat-activity-service.d.ts +91 -0
- package/daemon/dist/domain/seat-activity-service.d.ts.map +1 -1
- package/daemon/dist/domain/seat-activity-service.js +416 -1
- package/daemon/dist/domain/seat-activity-service.js.map +1 -1
- package/daemon/dist/domain/seat-handover-planner.d.ts +14 -0
- package/daemon/dist/domain/seat-handover-planner.d.ts.map +1 -1
- package/daemon/dist/domain/seat-handover-planner.js +14 -1
- package/daemon/dist/domain/seat-handover-planner.js.map +1 -1
- package/daemon/dist/domain/seat-handover-service.d.ts +54 -1
- package/daemon/dist/domain/seat-handover-service.d.ts.map +1 -1
- package/daemon/dist/domain/seat-handover-service.js +162 -19
- package/daemon/dist/domain/seat-handover-service.js.map +1 -1
- package/daemon/dist/domain/seat-lifecycle-service.d.ts +97 -0
- package/daemon/dist/domain/seat-lifecycle-service.d.ts.map +1 -0
- package/daemon/dist/domain/seat-lifecycle-service.js +312 -0
- package/daemon/dist/domain/seat-lifecycle-service.js.map +1 -0
- package/daemon/dist/domain/session-transport.d.ts +8 -5
- package/daemon/dist/domain/session-transport.d.ts.map +1 -1
- package/daemon/dist/domain/session-transport.js +40 -18
- package/daemon/dist/domain/session-transport.js.map +1 -1
- package/daemon/dist/domain/successor-session-launcher.d.ts +6 -1
- package/daemon/dist/domain/successor-session-launcher.d.ts.map +1 -1
- package/daemon/dist/domain/successor-session-launcher.js +3 -3
- package/daemon/dist/domain/successor-session-launcher.js.map +1 -1
- package/daemon/dist/domain/types.d.ts +69 -0
- package/daemon/dist/domain/types.d.ts.map +1 -1
- package/daemon/dist/domain/types.js.map +1 -1
- package/daemon/dist/domain/user-settings/settings-store.d.ts +1 -1
- package/daemon/dist/domain/user-settings/settings-store.d.ts.map +1 -1
- package/daemon/dist/domain/user-settings/settings-store.js +48 -0
- package/daemon/dist/domain/user-settings/settings-store.js.map +1 -1
- package/daemon/dist/domain/view-projector.d.ts +1 -1
- package/daemon/dist/domain/view-projector.d.ts.map +1 -1
- package/daemon/dist/domain/view-projector.js +41 -2
- package/daemon/dist/domain/view-projector.js.map +1 -1
- package/daemon/dist/domain/watchdog-policy-engine.d.ts +7 -0
- package/daemon/dist/domain/watchdog-policy-engine.d.ts.map +1 -1
- package/daemon/dist/domain/watchdog-policy-engine.js +3 -0
- package/daemon/dist/domain/watchdog-policy-engine.js.map +1 -1
- package/daemon/dist/domain/workspace/default-workspace-scaffold.d.ts +4 -3
- package/daemon/dist/domain/workspace/default-workspace-scaffold.d.ts.map +1 -1
- package/daemon/dist/domain/workspace/default-workspace-scaffold.js +56 -196
- package/daemon/dist/domain/workspace/default-workspace-scaffold.js.map +1 -1
- package/daemon/dist/domain/workspace/getting-started-narrative.js +1 -1
- package/daemon/dist/domain/workspace/getting-started-narrative.js.map +1 -1
- package/daemon/dist/domain/workspace/workspace-doctor.d.ts +8 -11
- package/daemon/dist/domain/workspace/workspace-doctor.d.ts.map +1 -1
- package/daemon/dist/domain/workspace/workspace-doctor.js +23 -25
- package/daemon/dist/domain/workspace/workspace-doctor.js.map +1 -1
- package/daemon/dist/gateway-slack-surface.d.ts +4 -0
- package/daemon/dist/gateway-slack-surface.d.ts.map +1 -0
- package/daemon/dist/gateway-slack-surface.js +8 -0
- package/daemon/dist/gateway-slack-surface.js.map +1 -0
- package/daemon/dist/index.d.ts +29 -0
- package/daemon/dist/index.d.ts.map +1 -1
- package/daemon/dist/index.js +99 -4
- package/daemon/dist/index.js.map +1 -1
- package/daemon/dist/lib/pane-envelope.d.ts +1 -1
- package/daemon/dist/lib/pane-envelope.d.ts.map +1 -1
- package/daemon/dist/lib/pane-envelope.js +8 -14
- package/daemon/dist/lib/pane-envelope.js.map +1 -1
- package/daemon/dist/routes/activity.d.ts +13 -0
- package/daemon/dist/routes/activity.d.ts.map +1 -1
- package/daemon/dist/routes/activity.js +186 -0
- package/daemon/dist/routes/activity.js.map +1 -1
- package/daemon/dist/routes/config.js +2 -2
- package/daemon/dist/routes/config.js.map +1 -1
- package/daemon/dist/routes/gateway.d.ts +3 -0
- package/daemon/dist/routes/gateway.d.ts.map +1 -0
- package/daemon/dist/routes/gateway.js +46 -0
- package/daemon/dist/routes/gateway.js.map +1 -0
- package/daemon/dist/routes/health-summary.d.ts.map +1 -1
- package/daemon/dist/routes/health-summary.js +8 -0
- package/daemon/dist/routes/health-summary.js.map +1 -1
- package/daemon/dist/routes/queue.d.ts.map +1 -1
- package/daemon/dist/routes/queue.js +32 -25
- package/daemon/dist/routes/queue.js.map +1 -1
- package/daemon/dist/routes/rigspec.js +20 -6
- package/daemon/dist/routes/rigspec.js.map +1 -1
- package/daemon/dist/routes/scope-audit.d.ts.map +1 -1
- package/daemon/dist/routes/scope-audit.js +72 -13
- package/daemon/dist/routes/scope-audit.js.map +1 -1
- package/daemon/dist/routes/seat.d.ts.map +1 -1
- package/daemon/dist/routes/seat.js +73 -0
- package/daemon/dist/routes/seat.js.map +1 -1
- package/daemon/dist/routes/transport.d.ts.map +1 -1
- package/daemon/dist/routes/transport.js +40 -36
- package/daemon/dist/routes/transport.js.map +1 -1
- package/daemon/dist/routes/up.js +21 -2
- package/daemon/dist/routes/up.js.map +1 -1
- package/daemon/dist/server.d.ts +17 -0
- package/daemon/dist/server.d.ts.map +1 -1
- package/daemon/dist/server.js +25 -4
- package/daemon/dist/server.js.map +1 -1
- package/daemon/dist/startup.d.ts +4 -0
- package/daemon/dist/startup.d.ts.map +1 -1
- package/daemon/dist/startup.js +33 -0
- package/daemon/dist/startup.js.map +1 -1
- package/daemon/docs/reference/agent-state-taxonomy.md +106 -0
- package/daemon/docs/reference/project-workspace.md +22 -14
- package/daemon/docs/reference/refocus-channel.md +27 -14
- package/daemon/docs/reference/sdlc-conventions.md +24 -13
- package/daemon/specs/agents/shared/skills/core/agent-startup-and-context-ingestion/SKILL.md +1 -1
- package/daemon/specs/agents/shared/skills/pm/requirements-writer/SKILL.md +21 -15
- package/daemon/specs/rigs/launch/kernel/agents/advisor/lead/guidance/role.md +1 -1
- package/dist/build-info.js +3 -3
- package/dist/cli-error.js +1 -1
- package/dist/cli-error.js.map +1 -1
- package/dist/commands/broadcast.js +6 -0
- package/dist/commands/broadcast.js.map +1 -1
- package/dist/commands/config-init-workspace.d.ts.map +1 -1
- package/dist/commands/config-init-workspace.js +32 -57
- package/dist/commands/config-init-workspace.js.map +1 -1
- package/dist/commands/config.d.ts.map +1 -1
- package/dist/commands/config.js +5 -0
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/context.d.ts.map +1 -1
- package/dist/commands/context.js +13 -3
- package/dist/commands/context.js.map +1 -1
- package/dist/commands/daemon.d.ts.map +1 -1
- package/dist/commands/daemon.js +36 -5
- package/dist/commands/daemon.js.map +1 -1
- package/dist/commands/gateway.d.ts +19 -1
- package/dist/commands/gateway.d.ts.map +1 -1
- package/dist/commands/gateway.js +157 -33
- package/dist/commands/gateway.js.map +1 -1
- package/dist/commands/import.d.ts.map +1 -1
- package/dist/commands/import.js +10 -0
- package/dist/commands/import.js.map +1 -1
- package/dist/commands/parked.d.ts +3 -0
- package/dist/commands/parked.d.ts.map +1 -0
- package/dist/commands/parked.js +83 -0
- package/dist/commands/parked.js.map +1 -0
- package/dist/commands/proof.d.ts +2 -1
- package/dist/commands/proof.d.ts.map +1 -1
- package/dist/commands/proof.js +8 -8
- package/dist/commands/proof.js.map +1 -1
- package/dist/commands/ps.d.ts +10 -0
- package/dist/commands/ps.d.ts.map +1 -1
- package/dist/commands/ps.js +14 -3
- package/dist/commands/ps.js.map +1 -1
- package/dist/commands/queue.d.ts.map +1 -1
- package/dist/commands/queue.js +67 -16
- package/dist/commands/queue.js.map +1 -1
- package/dist/commands/scope.d.ts.map +1 -1
- package/dist/commands/scope.js +255 -136
- package/dist/commands/scope.js.map +1 -1
- package/dist/commands/seat.d.ts.map +1 -1
- package/dist/commands/seat.js +128 -10
- package/dist/commands/seat.js.map +1 -1
- package/dist/commands/send.d.ts +1 -1
- package/dist/commands/send.d.ts.map +1 -1
- package/dist/commands/send.js +237 -34
- package/dist/commands/send.js.map +1 -1
- package/dist/commands/slack.d.ts +14 -28
- package/dist/commands/slack.d.ts.map +1 -1
- package/dist/commands/slack.js +73 -187
- package/dist/commands/slack.js.map +1 -1
- package/dist/commands/start.d.ts +3 -0
- package/dist/commands/start.d.ts.map +1 -1
- package/dist/commands/start.js +12 -5
- package/dist/commands/start.js.map +1 -1
- package/dist/commands/up.d.ts.map +1 -1
- package/dist/commands/up.js +19 -4
- package/dist/commands/up.js.map +1 -1
- package/dist/commands/view.d.ts +4 -2
- package/dist/commands/view.d.ts.map +1 -1
- package/dist/commands/view.js +1 -1
- package/dist/commands/view.js.map +1 -1
- package/dist/commands/walk.d.ts +1 -1
- package/dist/commands/walk.d.ts.map +1 -1
- package/dist/commands/walk.js +20 -10
- package/dist/commands/walk.js.map +1 -1
- package/dist/commands/watchdog.d.ts.map +1 -1
- package/dist/commands/watchdog.js +2 -1
- package/dist/commands/watchdog.js.map +1 -1
- package/dist/commands/workspace.js +1 -1
- package/dist/config-store.d.ts +15 -1
- package/dist/config-store.d.ts.map +1 -1
- package/dist/config-store.js +60 -0
- package/dist/config-store.js.map +1 -1
- package/dist/cross-host-target.d.ts.map +1 -1
- package/dist/cross-host-target.js +5 -4
- package/dist/cross-host-target.js.map +1 -1
- package/dist/daemon-lifecycle.d.ts +45 -3
- package/dist/daemon-lifecycle.d.ts.map +1 -1
- package/dist/daemon-lifecycle.js +126 -0
- package/dist/daemon-lifecycle.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/lib/scope/capability-delta.d.ts +9 -0
- package/dist/lib/scope/capability-delta.d.ts.map +1 -0
- package/dist/lib/scope/capability-delta.js +73 -0
- package/dist/lib/scope/capability-delta.js.map +1 -0
- package/dist/lib/scope/scaffold-placeholder.d.ts +4 -5
- package/dist/lib/scope/scaffold-placeholder.d.ts.map +1 -1
- package/dist/lib/scope/scaffold-placeholder.js +6 -7
- package/dist/lib/scope/scaffold-placeholder.js.map +1 -1
- package/dist/lib/scope/scope-audit.d.ts +42 -3
- package/dist/lib/scope/scope-audit.d.ts.map +1 -1
- package/dist/lib/scope/scope-audit.js +78 -93
- package/dist/lib/scope/scope-audit.js.map +1 -1
- package/dist/lib/scope/scope-fs.d.ts +18 -14
- package/dist/lib/scope/scope-fs.d.ts.map +1 -1
- package/dist/lib/scope/scope-fs.js +60 -29
- package/dist/lib/scope/scope-fs.js.map +1 -1
- package/dist/lib/scope/templates.d.ts +17 -17
- package/dist/lib/scope/templates.d.ts.map +1 -1
- package/dist/lib/scope/templates.js +35 -39
- package/dist/lib/scope/templates.js.map +1 -1
- package/dist/lib/scope-templates/backlog-deprecation.md +3 -1
- package/dist/lib/scope-templates/backlog-tech-debt.md +3 -1
- package/dist/lib/scope-templates/bug-fix.md +3 -1
- package/dist/lib/scope-templates/capability-delta.md +60 -0
- package/dist/lib/scope-templates/mission-placeholder.md +9 -40
- package/dist/lib/scope-templates/mission-progress.md +5 -6
- package/dist/lib/scope-templates/mission-release.md +9 -40
- package/dist/lib/scope-templates/notes.md +14 -0
- package/dist/lib/scope-templates/placeholder.md +3 -1
- package/dist/lib/scope-templates/proof.md +1 -1
- package/dist/lib/scope-templates/release-feature.md +3 -1
- package/dist/lib/scope-templates/research.md +3 -1
- package/dist/lib/scope-templates/slice-progress.md +4 -5
- package/node_modules/@openrig/daemon/dist/adapters/claude-code-adapter.d.ts +15 -0
- package/node_modules/@openrig/daemon/dist/adapters/claude-code-adapter.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/adapters/claude-code-adapter.js +57 -0
- package/node_modules/@openrig/daemon/dist/adapters/claude-code-adapter.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/adapters/tmux.d.ts +31 -0
- package/node_modules/@openrig/daemon/dist/adapters/tmux.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/adapters/tmux.js +31 -11
- package/node_modules/@openrig/daemon/dist/adapters/tmux.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/build-info.js +3 -3
- package/node_modules/@openrig/daemon/dist/daemon-db-path.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/daemon-db-path.js +50 -2
- package/node_modules/@openrig/daemon/dist/daemon-db-path.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/db/all-migrations.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/db/all-migrations.js +4 -0
- package/node_modules/@openrig/daemon/dist/db/all-migrations.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/db/migrations/072_thread_seat_map.d.ts +3 -0
- package/node_modules/@openrig/daemon/dist/db/migrations/072_thread_seat_map.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/db/migrations/072_thread_seat_map.js +22 -0
- package/node_modules/@openrig/daemon/dist/db/migrations/072_thread_seat_map.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/db/migrations/073_queue_transition_wakes.d.ts +3 -0
- package/node_modules/@openrig/daemon/dist/db/migrations/073_queue_transition_wakes.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/db/migrations/073_queue_transition_wakes.js +21 -0
- package/node_modules/@openrig/daemon/dist/db/migrations/073_queue_transition_wakes.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/activity-taxonomy.d.ts +112 -0
- package/node_modules/@openrig/daemon/dist/domain/activity-taxonomy.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/activity-taxonomy.js +99 -0
- package/node_modules/@openrig/daemon/dist/domain/activity-taxonomy.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/bind-plan.d.ts +19 -0
- package/node_modules/@openrig/daemon/dist/domain/bind-plan.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/bind-plan.js +25 -0
- package/node_modules/@openrig/daemon/dist/domain/bind-plan.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/event-bus.d.ts +6 -0
- package/node_modules/@openrig/daemon/dist/domain/event-bus.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/event-bus.js +15 -5
- package/node_modules/@openrig/daemon/dist/domain/event-bus.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/gateway/gateway-process-main.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/gateway/gateway-process-main.js +9 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/gateway-process-main.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/gateway/gateway-process.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/gateway/gateway-process.js +9 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/gateway-process.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/gateway/gateway-subsystem.d.ts +80 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/gateway-subsystem.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/gateway-subsystem.js +149 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/gateway-subsystem.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/human-registry.d.ts +109 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/human-registry.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/gateway/human-registry.js +250 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/human-registry.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/config.d.ts +44 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/config.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/config.js +62 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/config.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/inbound-admission.d.ts +8 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/inbound-admission.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/inbound-admission.js +20 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/inbound-admission.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/inbound.d.ts +113 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/inbound.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/inbound.js +146 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/inbound.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/message.d.ts +80 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/message.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/message.js +164 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/message.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/outbound-driver.d.ts +54 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/outbound-driver.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/outbound-driver.js +96 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/outbound-driver.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/queue-access.d.ts +53 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/queue-access.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/queue-access.js +72 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/queue-access.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/secrets.d.ts +21 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/secrets.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/secrets.js +73 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/secrets.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/slack-api.d.ts +106 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/slack-api.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/slack-api.js +198 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/slack-api.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/slack-delivery.d.ts +47 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/slack-delivery.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/slack-delivery.js +147 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/slack-delivery.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/slack-subsystem.d.ts +21 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/slack-subsystem.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/slack-subsystem.js +198 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/slack-subsystem.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/socket-inbound.d.ts +30 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/socket-inbound.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/socket-inbound.js +99 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/socket-inbound.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/state-store.d.ts +62 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/state-store.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/state-store.js +132 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/state-store.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/thread-routing.d.ts +17 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/thread-routing.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/thread-routing.js +35 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/thread-routing.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/thread-seat-map.d.ts +56 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/thread-seat-map.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/thread-seat-map.js +103 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/slack/thread-seat-map.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/spawn-gateway.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/gateway/spawn-gateway.js +9 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/spawn-gateway.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/gateway/transport.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/gateway/transport.js +9 -0
- package/node_modules/@openrig/daemon/dist/domain/gateway/transport.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/node-inventory.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/node-inventory.js +20 -0
- package/node_modules/@openrig/daemon/dist/domain/node-inventory.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/parked-query.d.ts +81 -0
- package/node_modules/@openrig/daemon/dist/domain/parked-query.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/parked-query.js +126 -0
- package/node_modules/@openrig/daemon/dist/domain/parked-query.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/plugin-discovery-service.d.ts +16 -0
- package/node_modules/@openrig/daemon/dist/domain/plugin-discovery-service.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/plugin-discovery-service.js +175 -1
- package/node_modules/@openrig/daemon/dist/domain/plugin-discovery-service.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/plugin-vendor-service.d.ts +9 -5
- package/node_modules/@openrig/daemon/dist/domain/plugin-vendor-service.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/plugin-vendor-service.js +101 -12
- package/node_modules/@openrig/daemon/dist/domain/plugin-vendor-service.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/queue-pickup.d.ts +38 -0
- package/node_modules/@openrig/daemon/dist/domain/queue-pickup.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/queue-pickup.js +67 -0
- package/node_modules/@openrig/daemon/dist/domain/queue-pickup.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/queue-repository.d.ts +41 -11
- package/node_modules/@openrig/daemon/dist/domain/queue-repository.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/queue-repository.js +316 -36
- package/node_modules/@openrig/daemon/dist/domain/queue-repository.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/queue-stuck-sweep.d.ts +77 -0
- package/node_modules/@openrig/daemon/dist/domain/queue-stuck-sweep.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/queue-stuck-sweep.js +348 -0
- package/node_modules/@openrig/daemon/dist/domain/queue-stuck-sweep.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/queue-wake-ladder.d.ts +96 -0
- package/node_modules/@openrig/daemon/dist/domain/queue-wake-ladder.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/queue-wake-ladder.js +533 -0
- package/node_modules/@openrig/daemon/dist/domain/queue-wake-ladder.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/queue-wake-repository.d.ts +37 -0
- package/node_modules/@openrig/daemon/dist/domain/queue-wake-repository.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/queue-wake-repository.js +80 -0
- package/node_modules/@openrig/daemon/dist/domain/queue-wake-repository.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/rebuild-priming-chain.d.ts +28 -0
- package/node_modules/@openrig/daemon/dist/domain/rebuild-priming-chain.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/rebuild-priming-chain.js +71 -0
- package/node_modules/@openrig/daemon/dist/domain/rebuild-priming-chain.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/reconciler.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/reconciler.js +6 -1
- package/node_modules/@openrig/daemon/dist/domain/reconciler.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/review/compose.d.ts +3 -1
- package/node_modules/@openrig/daemon/dist/domain/review/compose.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/review/compose.js +14 -8
- package/node_modules/@openrig/daemon/dist/domain/review/compose.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/review/gather.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/review/gather.js +3 -1
- package/node_modules/@openrig/daemon/dist/domain/review/gather.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/rig-repository.d.ts +4 -0
- package/node_modules/@openrig/daemon/dist/domain/rig-repository.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/rig-repository.js +9 -0
- package/node_modules/@openrig/daemon/dist/domain/rig-repository.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/rigspec-instantiator.d.ts +12 -0
- package/node_modules/@openrig/daemon/dist/domain/rigspec-instantiator.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/rigspec-instantiator.js +50 -0
- package/node_modules/@openrig/daemon/dist/domain/rigspec-instantiator.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/running-name-guard.d.ts +52 -0
- package/node_modules/@openrig/daemon/dist/domain/running-name-guard.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/running-name-guard.js +34 -0
- package/node_modules/@openrig/daemon/dist/domain/running-name-guard.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/scope/plan-lock-artifacts.d.ts +6 -5
- package/node_modules/@openrig/daemon/dist/domain/scope/plan-lock-artifacts.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/scope/plan-lock-artifacts.js +23 -20
- package/node_modules/@openrig/daemon/dist/domain/scope/plan-lock-artifacts.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/scope/scaffold-placeholder.d.ts +4 -5
- package/node_modules/@openrig/daemon/dist/domain/scope/scaffold-placeholder.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/scope/scaffold-placeholder.js +6 -7
- package/node_modules/@openrig/daemon/dist/domain/scope/scaffold-placeholder.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/scope/scope-approve.d.ts +1 -1
- package/node_modules/@openrig/daemon/dist/domain/scope/scope-approve.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/scope/scope-approve.js +5 -4
- package/node_modules/@openrig/daemon/dist/domain/scope/scope-approve.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/scope/scope-audit.d.ts +42 -3
- package/node_modules/@openrig/daemon/dist/domain/scope/scope-audit.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/scope/scope-audit.js +78 -93
- package/node_modules/@openrig/daemon/dist/domain/scope/scope-audit.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/scope/scope-view-projection.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/scope/scope-view-projection.js +7 -2
- package/node_modules/@openrig/daemon/dist/domain/scope/scope-view-projection.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/seat-activity-service.d.ts +91 -0
- package/node_modules/@openrig/daemon/dist/domain/seat-activity-service.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/seat-activity-service.js +416 -1
- package/node_modules/@openrig/daemon/dist/domain/seat-activity-service.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/seat-handover-planner.d.ts +14 -0
- package/node_modules/@openrig/daemon/dist/domain/seat-handover-planner.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/seat-handover-planner.js +14 -1
- package/node_modules/@openrig/daemon/dist/domain/seat-handover-planner.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/seat-handover-service.d.ts +54 -1
- package/node_modules/@openrig/daemon/dist/domain/seat-handover-service.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/seat-handover-service.js +162 -19
- package/node_modules/@openrig/daemon/dist/domain/seat-handover-service.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/seat-lifecycle-service.d.ts +97 -0
- package/node_modules/@openrig/daemon/dist/domain/seat-lifecycle-service.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/seat-lifecycle-service.js +312 -0
- package/node_modules/@openrig/daemon/dist/domain/seat-lifecycle-service.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/domain/session-transport.d.ts +8 -5
- package/node_modules/@openrig/daemon/dist/domain/session-transport.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/session-transport.js +40 -18
- package/node_modules/@openrig/daemon/dist/domain/session-transport.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/successor-session-launcher.d.ts +6 -1
- package/node_modules/@openrig/daemon/dist/domain/successor-session-launcher.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/successor-session-launcher.js +3 -3
- package/node_modules/@openrig/daemon/dist/domain/successor-session-launcher.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/types.d.ts +69 -0
- package/node_modules/@openrig/daemon/dist/domain/types.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/types.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/user-settings/settings-store.d.ts +1 -1
- package/node_modules/@openrig/daemon/dist/domain/user-settings/settings-store.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/user-settings/settings-store.js +48 -0
- package/node_modules/@openrig/daemon/dist/domain/user-settings/settings-store.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/view-projector.d.ts +1 -1
- package/node_modules/@openrig/daemon/dist/domain/view-projector.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/view-projector.js +41 -2
- package/node_modules/@openrig/daemon/dist/domain/view-projector.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/watchdog-policy-engine.d.ts +7 -0
- package/node_modules/@openrig/daemon/dist/domain/watchdog-policy-engine.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/watchdog-policy-engine.js +3 -0
- package/node_modules/@openrig/daemon/dist/domain/watchdog-policy-engine.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/workspace/default-workspace-scaffold.d.ts +4 -3
- package/node_modules/@openrig/daemon/dist/domain/workspace/default-workspace-scaffold.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/workspace/default-workspace-scaffold.js +56 -196
- package/node_modules/@openrig/daemon/dist/domain/workspace/default-workspace-scaffold.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/workspace/getting-started-narrative.js +1 -1
- package/node_modules/@openrig/daemon/dist/domain/workspace/getting-started-narrative.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/workspace/workspace-doctor.d.ts +8 -11
- package/node_modules/@openrig/daemon/dist/domain/workspace/workspace-doctor.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/domain/workspace/workspace-doctor.js +23 -25
- package/node_modules/@openrig/daemon/dist/domain/workspace/workspace-doctor.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/gateway-slack-surface.d.ts +4 -0
- package/node_modules/@openrig/daemon/dist/gateway-slack-surface.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/gateway-slack-surface.js +8 -0
- package/node_modules/@openrig/daemon/dist/gateway-slack-surface.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/index.d.ts +29 -0
- package/node_modules/@openrig/daemon/dist/index.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/index.js +99 -4
- package/node_modules/@openrig/daemon/dist/index.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/lib/pane-envelope.d.ts +1 -1
- package/node_modules/@openrig/daemon/dist/lib/pane-envelope.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/lib/pane-envelope.js +8 -14
- package/node_modules/@openrig/daemon/dist/lib/pane-envelope.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/activity.d.ts +13 -0
- package/node_modules/@openrig/daemon/dist/routes/activity.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/activity.js +186 -0
- package/node_modules/@openrig/daemon/dist/routes/activity.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/config.js +2 -2
- package/node_modules/@openrig/daemon/dist/routes/config.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/gateway.d.ts +3 -0
- package/node_modules/@openrig/daemon/dist/routes/gateway.d.ts.map +1 -0
- package/node_modules/@openrig/daemon/dist/routes/gateway.js +46 -0
- package/node_modules/@openrig/daemon/dist/routes/gateway.js.map +1 -0
- package/node_modules/@openrig/daemon/dist/routes/health-summary.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/health-summary.js +8 -0
- package/node_modules/@openrig/daemon/dist/routes/health-summary.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/queue.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/queue.js +32 -25
- package/node_modules/@openrig/daemon/dist/routes/queue.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/rigspec.js +20 -6
- package/node_modules/@openrig/daemon/dist/routes/rigspec.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/scope-audit.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/scope-audit.js +72 -13
- package/node_modules/@openrig/daemon/dist/routes/scope-audit.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/seat.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/seat.js +73 -0
- package/node_modules/@openrig/daemon/dist/routes/seat.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/transport.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/transport.js +40 -36
- package/node_modules/@openrig/daemon/dist/routes/transport.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/routes/up.js +21 -2
- package/node_modules/@openrig/daemon/dist/routes/up.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/server.d.ts +17 -0
- package/node_modules/@openrig/daemon/dist/server.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/server.js +25 -4
- package/node_modules/@openrig/daemon/dist/server.js.map +1 -1
- package/node_modules/@openrig/daemon/dist/startup.d.ts +4 -0
- package/node_modules/@openrig/daemon/dist/startup.d.ts.map +1 -1
- package/node_modules/@openrig/daemon/dist/startup.js +33 -0
- package/node_modules/@openrig/daemon/dist/startup.js.map +1 -1
- package/node_modules/@openrig/daemon/package.json +5 -1
- package/package.json +1 -1
- package/tui/dist/daemon-client.d.ts +5 -0
- package/tui/dist/daemon-client.d.ts.map +1 -1
- package/tui/dist/daemon-client.js +17 -0
- package/tui/dist/daemon-client.js.map +1 -1
- package/tui/dist/hydrate.d.ts.map +1 -1
- package/tui/dist/hydrate.js +12 -4
- package/tui/dist/hydrate.js.map +1 -1
- package/tui/dist/live-events.d.ts +21 -0
- package/tui/dist/live-events.d.ts.map +1 -0
- package/tui/dist/live-events.js +88 -0
- package/tui/dist/live-events.js.map +1 -0
- package/tui/dist/live.js +1 -1
- package/tui/dist/main.js +27 -8
- package/tui/dist/main.js.map +1 -1
- package/tui/dist/refresh.d.ts +10 -1
- package/tui/dist/refresh.d.ts.map +1 -1
- package/tui/dist/refresh.js +22 -2
- package/tui/dist/refresh.js.map +1 -1
- package/daemon/context-packs/world/install/01-world-from-primitives.md +0 -97
- package/daemon/context-packs/world/install/02-permission-self-sleep.md +0 -141
- package/daemon/context-packs/world/install/03-what-this-is-for.md +0 -86
- package/daemon/context-packs/world/install/04-ontology.md +0 -790
- package/daemon/context-packs/world/install/05-harness-power-use.md +0 -355
- package/daemon/context-packs/world/install/06-a-competent-turn.md +0 -225
- package/daemon/context-packs/world/install/manifest.yaml +0 -125
- package/dist/lib/scope-templates/mission-brief.md +0 -20
- package/dist/lib/scope-templates/mission-notes.md +0 -102
- package/dist/slack/config.d.ts.map +0 -1
- package/dist/slack/config.js.map +0 -1
- package/dist/slack/connector-server.d.ts +0 -31
- package/dist/slack/connector-server.d.ts.map +0 -1
- package/dist/slack/connector-server.js +0 -108
- package/dist/slack/connector-server.js.map +0 -1
- package/dist/slack/inbound-admission.d.ts.map +0 -1
- package/dist/slack/inbound-admission.js.map +0 -1
- package/dist/slack/inbound.d.ts.map +0 -1
- package/dist/slack/inbound.js.map +0 -1
- package/dist/slack/message.d.ts +0 -39
- package/dist/slack/message.d.ts.map +0 -1
- package/dist/slack/message.js +0 -88
- package/dist/slack/message.js.map +0 -1
- package/dist/slack/outbound.d.ts +0 -39
- package/dist/slack/outbound.d.ts.map +0 -1
- package/dist/slack/outbound.js +0 -63
- package/dist/slack/outbound.js.map +0 -1
- package/dist/slack/queue-bridge.d.ts +0 -61
- package/dist/slack/queue-bridge.d.ts.map +0 -1
- package/dist/slack/queue-bridge.js +0 -114
- package/dist/slack/queue-bridge.js.map +0 -1
- package/dist/slack/secrets.d.ts.map +0 -1
- package/dist/slack/secrets.js.map +0 -1
- package/dist/slack/slack-api.d.ts +0 -49
- package/dist/slack/slack-api.d.ts.map +0 -1
- package/dist/slack/slack-api.js +0 -110
- package/dist/slack/slack-api.js.map +0 -1
- package/dist/slack/slack-delivery.d.ts +0 -14
- package/dist/slack/slack-delivery.d.ts.map +0 -1
- package/dist/slack/slack-delivery.js +0 -28
- package/dist/slack/slack-delivery.js.map +0 -1
- package/dist/slack/state-store.d.ts.map +0 -1
- package/dist/slack/state-store.js.map +0 -1
- /package/{dist → daemon/dist/domain/gateway}/slack/inbound-admission.js +0 -0
- /package/{dist → daemon/dist/domain/gateway}/slack/secrets.d.ts +0 -0
- /package/{dist → daemon/dist/domain/gateway}/slack/secrets.js +0 -0
- /package/{dist → daemon/dist/domain/gateway}/slack/state-store.d.ts +0 -0
- /package/{dist → daemon/dist/domain/gateway}/slack/state-store.js +0 -0
|
@@ -3,11 +3,14 @@ import { loadHumanRegistry } from "./gateway/human-registry.js";
|
|
|
3
3
|
import { resolveExternal } from "./gateway/external-admission.js";
|
|
4
4
|
import { QueueTransitionLog } from "./queue-transition-log.js";
|
|
5
5
|
import { WAKE_INTENT_PREFIX } from "./outbox-handler.js";
|
|
6
|
+
import { derivePickup } from "./queue-pickup.js";
|
|
6
7
|
import { wrapPaneEnvelope } from "../lib/pane-envelope.js";
|
|
7
8
|
import { getSelfHostId } from "./hosts/fanout-contract.js";
|
|
8
9
|
import { parseSessionName } from "./session-name.js";
|
|
9
10
|
import { computeClosureRequiredAt, validateClosure, } from "./hot-potato-enforcer.js";
|
|
10
11
|
import { isHumanSeatSession, validateHumanPark, validateHumanRoute } from "./human-route-enforcer.js";
|
|
12
|
+
import { QueueWakeRepository } from "./queue-wake-repository.js";
|
|
13
|
+
import { WatchdogJobsRepository } from "./watchdog-jobs-repository.js";
|
|
11
14
|
export const QUEUE_STATES = [
|
|
12
15
|
"pending",
|
|
13
16
|
"in-progress",
|
|
@@ -37,6 +40,8 @@ export const ACTIVE_QUEUE_STATES = ["pending", "in-progress", "blocked"];
|
|
|
37
40
|
export function isBlockerLive(state) {
|
|
38
41
|
return ACTIVE_QUEUE_STATES.includes(state);
|
|
39
42
|
}
|
|
43
|
+
const AUTO_UNPARK_WAKE_TAG = "queue:auto-unpark:blocker";
|
|
44
|
+
const AUTO_UNPARK_BLOCKER_TAG_PREFIX = "queue:auto-unpark:blocker-ref:";
|
|
40
45
|
/** 0.5.1-53 Atom 1a — typed non-qitem gate blocker prefixes. A park may be gated on a fold / auth /
|
|
41
46
|
* external condition that is NOT a qitem and NOT a human seat; these prefixes make such a gate a
|
|
42
47
|
* first-class, compact-visible, downstream-classifiable blocker (the ruling detail rides a transition). */
|
|
@@ -267,6 +272,8 @@ export class QueueRepository {
|
|
|
267
272
|
* fallback real code rather than a promise in a comment). */
|
|
268
273
|
outbox;
|
|
269
274
|
resolveOccupantGeneration;
|
|
275
|
+
wakeRepo;
|
|
276
|
+
watchdogJobsRepo;
|
|
270
277
|
/** PL-007 Workspace Primitive — true when migration 038 has applied the
|
|
271
278
|
* queue_items.target_repo column. Older test fixtures that bypass the
|
|
272
279
|
* canonical migration list don't have the column; INSERTs degrade to
|
|
@@ -284,6 +291,7 @@ export class QueueRepository {
|
|
|
284
291
|
this.db = db;
|
|
285
292
|
this.eventBus = eventBus;
|
|
286
293
|
this.transitionLog = new QueueTransitionLog(db);
|
|
294
|
+
this.wakeRepo = new QueueWakeRepository(db);
|
|
287
295
|
this.validateRig = opts?.validateRig ?? (() => true);
|
|
288
296
|
this.transport = opts?.transport;
|
|
289
297
|
this.workflowFrontierPredicate = opts?.workflowFrontierPredicate;
|
|
@@ -308,6 +316,11 @@ export class QueueRepository {
|
|
|
308
316
|
// checks cannot drift.
|
|
309
317
|
db.function("is_human_seat_session", { deterministic: true }, (value) => isHumanSeatSession(value) ? 1 : 0);
|
|
310
318
|
}
|
|
319
|
+
/** Startup attaches the generation-aware shared repository. Isolated domain
|
|
320
|
+
* fixtures fall back to a repository on this same SQLite connection. */
|
|
321
|
+
attachWatchdogJobsRepository(repo) {
|
|
322
|
+
this.watchdogJobsRepo = repo;
|
|
323
|
+
}
|
|
311
324
|
/**
|
|
312
325
|
* Attach the wake-path transport AFTER construction. Used by daemon
|
|
313
326
|
* startup, where SessionTransport is constructed later in the dep graph
|
|
@@ -358,24 +371,50 @@ export class QueueRepository {
|
|
|
358
371
|
// defect only when a wake WAS intended.
|
|
359
372
|
if (nudge === false)
|
|
360
373
|
return;
|
|
374
|
+
this.recordWakeIntent({
|
|
375
|
+
outboxId: `${WAKE_INTENT_PREFIX}${successorQitemId}`,
|
|
376
|
+
auditPointer: successorQitemId,
|
|
377
|
+
fromSession,
|
|
378
|
+
toSession,
|
|
379
|
+
identityProvenance,
|
|
380
|
+
bareBody: `Queue handoff: ${successorQitemId} - check your queue.`,
|
|
381
|
+
});
|
|
382
|
+
}
|
|
383
|
+
recordWakeIntent(input) {
|
|
361
384
|
if (!this.outbox)
|
|
362
|
-
return;
|
|
363
|
-
// MF4:
|
|
364
|
-
//
|
|
365
|
-
// intent body. Delivery (immediate or crash-recovery) replays this exact text,
|
|
366
|
-
// so a recovery after a tenure swap can never relabel the wake with the CURRENT
|
|
367
|
-
// occupant's generation — it carries the generation that actually emitted it.
|
|
368
|
-
const bareBody = `Queue handoff: ${successorQitemId} - check your queue.`;
|
|
385
|
+
return null;
|
|
386
|
+
// MF4: freeze the emitting envelope at stage time. Delivery and crash
|
|
387
|
+
// recovery replay these exact bytes without re-resolving the occupant.
|
|
369
388
|
const stampISO = new Date().toISOString();
|
|
370
|
-
const genUuid = this.resolveOccupantGeneration?.(fromSession) ?? undefined;
|
|
371
|
-
const frozenEnvelope = wrapPaneEnvelope(fromSession, toSession, bareBody,
|
|
389
|
+
const genUuid = this.resolveOccupantGeneration?.(input.fromSession) ?? undefined;
|
|
390
|
+
const frozenEnvelope = wrapPaneEnvelope(input.fromSession, input.toSession, input.bareBody, { stampISO, genUuid });
|
|
372
391
|
this.outbox.record({
|
|
373
|
-
outboxId:
|
|
374
|
-
senderSession: fromSession,
|
|
375
|
-
destinationSession: toSession,
|
|
392
|
+
outboxId: input.outboxId,
|
|
393
|
+
senderSession: input.fromSession,
|
|
394
|
+
destinationSession: input.toSession,
|
|
376
395
|
body: frozenEnvelope,
|
|
377
|
-
|
|
378
|
-
|
|
396
|
+
tags: input.tags,
|
|
397
|
+
auditPointer: input.auditPointer,
|
|
398
|
+
identityProvenance: input.identityProvenance,
|
|
399
|
+
});
|
|
400
|
+
return input.outboxId;
|
|
401
|
+
}
|
|
402
|
+
stageAutoUnparkWakeIntent(input) {
|
|
403
|
+
return this.recordWakeIntent({
|
|
404
|
+
outboxId: `${WAKE_INTENT_PREFIX}blocker-${input.resumeTransitionId}`,
|
|
405
|
+
auditPointer: input.qitemId,
|
|
406
|
+
fromSession: input.fromSession,
|
|
407
|
+
toSession: input.destinationSession,
|
|
408
|
+
identityProvenance: input.identityProvenance,
|
|
409
|
+
bareBody: `Blocker ${input.blockerQitemId} resolved; parked qitem ${input.qitemId} is pending. Resume the recorded continuation and update the row.`,
|
|
410
|
+
tags: [AUTO_UNPARK_WAKE_TAG, `${AUTO_UNPARK_BLOCKER_TAG_PREFIX}${input.blockerQitemId}`],
|
|
411
|
+
});
|
|
412
|
+
}
|
|
413
|
+
deliverWakeIntentAfterCommit(outboxId) {
|
|
414
|
+
queueMicrotask(() => {
|
|
415
|
+
void this.deliverWakeIntent(outboxId).catch((err) => {
|
|
416
|
+
console.error(`Auto-unpark wake delivery failed for ${outboxId}:`, err);
|
|
417
|
+
});
|
|
379
418
|
});
|
|
380
419
|
}
|
|
381
420
|
/**
|
|
@@ -448,9 +487,45 @@ export class QueueRepository {
|
|
|
448
487
|
const qitemId = intent.auditPointer ?? outboxId;
|
|
449
488
|
// MF4: send the FROZEN envelope stored on the intent verbatim (no re-resolution).
|
|
450
489
|
const outcome = await this.performWakeSend(qitemId, intent.destinationSession, intent.senderSession, undefined, intent.body);
|
|
451
|
-
this.recordNudgeAttempt(qitemId, outcome.nudgeResult);
|
|
452
490
|
const finalState = outcome.classified === "verified" ? "delivered" : outcome.classified;
|
|
453
|
-
|
|
491
|
+
const blockerRef = intent.tags?.includes(AUTO_UNPARK_WAKE_TAG)
|
|
492
|
+
? intent.tags
|
|
493
|
+
.find((tag) => tag.startsWith(AUTO_UNPARK_BLOCKER_TAG_PREFIX))
|
|
494
|
+
?.slice(AUTO_UNPARK_BLOCKER_TAG_PREFIX.length)
|
|
495
|
+
: undefined;
|
|
496
|
+
const wakeEvent = this.db.transaction(() => {
|
|
497
|
+
this.recordNudgeAttempt(qitemId, outcome.nudgeResult);
|
|
498
|
+
this.outbox.finalizeDelivery(outboxId, finalState);
|
|
499
|
+
if (!blockerRef)
|
|
500
|
+
return null;
|
|
501
|
+
const item = this.getByIdOrThrow(qitemId);
|
|
502
|
+
const transition = this.transitionLog.append({
|
|
503
|
+
qitemId,
|
|
504
|
+
state: item.state,
|
|
505
|
+
actorSession: "queue@system",
|
|
506
|
+
transitionNote: `blocker ${blockerRef} wake attempted; delivery=${outcome.nudgeResult}`,
|
|
507
|
+
});
|
|
508
|
+
this.wakeRepo.record({
|
|
509
|
+
transitionId: transition.transitionId,
|
|
510
|
+
qitemId,
|
|
511
|
+
phase: "fired",
|
|
512
|
+
kind: "blocker",
|
|
513
|
+
ref: blockerRef,
|
|
514
|
+
deliveryStatus: outcome.nudgeResult,
|
|
515
|
+
});
|
|
516
|
+
return this.eventBus.persistWithinTransaction({
|
|
517
|
+
type: "queue.updated",
|
|
518
|
+
qitemId,
|
|
519
|
+
fromState: item.state,
|
|
520
|
+
toState: item.state,
|
|
521
|
+
closureReason: null,
|
|
522
|
+
closureTarget: null,
|
|
523
|
+
actorSession: "queue@system",
|
|
524
|
+
summary: item.summary ?? null,
|
|
525
|
+
});
|
|
526
|
+
})();
|
|
527
|
+
if (wakeEvent)
|
|
528
|
+
this.eventBus.notifySubscribers(wakeEvent);
|
|
454
529
|
return finalState;
|
|
455
530
|
}
|
|
456
531
|
/**
|
|
@@ -597,6 +672,23 @@ export class QueueRepository {
|
|
|
597
672
|
* delivered nor demoted to failed.
|
|
598
673
|
*/
|
|
599
674
|
async performWakeSend(qitemId, destinationSession, sourceSession, bodyOverride, prebuiltText) {
|
|
675
|
+
// DEFECT FIX qitem-20260827065907-b9ae334c (S1-class, 3 live specimens): a virtual
|
|
676
|
+
// @external destination has NO pane — the queue row ITSELF is the gateway
|
|
677
|
+
// subsystem's input (the Slack connector polls human-destined rows and its own
|
|
678
|
+
// ledger is the delivery record). Falling through to tmux here recorded
|
|
679
|
+
// "failed: … tmux reports no session" while the founder verifiably received the
|
|
680
|
+
// message, and that failed: literal poisoned the undelivered surface. So: the
|
|
681
|
+
// wake for this class is GATEWAY-OWNED — tmux is never consulted, and the
|
|
682
|
+
// recorded wording claims exactly what was (and was not) checked. Classified
|
|
683
|
+
// indeterminate (landed with the owning subsystem; render unconfirmable here) —
|
|
684
|
+
// never verified, never failed. Human-CLASS seats with real panes
|
|
685
|
+
// (human-*@kernel) are NOT this class and keep tmux transport.
|
|
686
|
+
if (parseSessionName(destinationSession).kind === "external") {
|
|
687
|
+
return {
|
|
688
|
+
classified: "indeterminate",
|
|
689
|
+
nudgeResult: `gateway-owned: '${destinationSession}' is a virtual @external destination — delivery rides the gateway subsystem (Slack connector), whose own ledger is the delivery record; tmux was not consulted (it can never hold this address class)`,
|
|
690
|
+
};
|
|
691
|
+
}
|
|
600
692
|
const stampISO = new Date().toISOString();
|
|
601
693
|
let text;
|
|
602
694
|
if (prebuiltText !== undefined) {
|
|
@@ -617,7 +709,7 @@ export class QueueRepository {
|
|
|
617
709
|
const genUuid = sourceSession
|
|
618
710
|
? (this.resolveOccupantGeneration?.(sourceSession) ?? undefined)
|
|
619
711
|
: undefined;
|
|
620
|
-
text = wrapPaneEnvelope(sourceSession, destinationSession, bareBody,
|
|
712
|
+
text = wrapPaneEnvelope(sourceSession, destinationSession, bareBody, { stampISO, genUuid });
|
|
621
713
|
}
|
|
622
714
|
try {
|
|
623
715
|
const res = await this.transport.send(destinationSession, text, { verify: true, stampISO });
|
|
@@ -653,10 +745,11 @@ export class QueueRepository {
|
|
|
653
745
|
}
|
|
654
746
|
}
|
|
655
747
|
async create(input) {
|
|
656
|
-
// 51-09 incr 4
|
|
657
|
-
//
|
|
658
|
-
//
|
|
659
|
-
|
|
748
|
+
// FOUNDER ROOT INVARIANT (2026-08-27, supersedes 51-09 incr 4 / ruling cb19867f Q2):
|
|
749
|
+
// a LOCAL write stores the bare transport identity — no self-host suffix inside one
|
|
750
|
+
// instance. Host identity is added only at the cross-host forwarding boundary
|
|
751
|
+
// (routes/queue.ts stamp-at-FORWARD), and a genuine origin triple arriving from a
|
|
752
|
+
// forward is stored verbatim (never re-stamped, never stripped).
|
|
660
753
|
if (!this.validateRig(input.destinationSession)) {
|
|
661
754
|
throw new QueueRepositoryError("unknown_destination_rig", `destination_session ${input.destinationSession} references an unknown rig`, destinationRefusalTeaching(input.destinationSession));
|
|
662
755
|
}
|
|
@@ -1273,8 +1366,9 @@ export class QueueRepository {
|
|
|
1273
1366
|
*/
|
|
1274
1367
|
update(input) {
|
|
1275
1368
|
const txn = this.db.transaction(() => this.updateInTransactionalContext(input));
|
|
1276
|
-
const
|
|
1277
|
-
|
|
1369
|
+
const result = txn();
|
|
1370
|
+
for (const event of result.persistedEvents)
|
|
1371
|
+
this.eventBus.notifySubscribers(event);
|
|
1278
1372
|
return this.getByIdOrThrow(input.qitemId);
|
|
1279
1373
|
}
|
|
1280
1374
|
/**
|
|
@@ -1298,8 +1392,8 @@ export class QueueRepository {
|
|
|
1298
1392
|
* therefore applies to workflow projection unchanged.
|
|
1299
1393
|
*/
|
|
1300
1394
|
updateWithinTransaction(input) {
|
|
1301
|
-
const
|
|
1302
|
-
return { qitemId: input.qitemId,
|
|
1395
|
+
const result = this.updateInTransactionalContext(input);
|
|
1396
|
+
return { qitemId: input.qitemId, ...result };
|
|
1303
1397
|
}
|
|
1304
1398
|
/**
|
|
1305
1399
|
* Internal: closure validation + UPDATE + transition log + emit
|
|
@@ -1312,9 +1406,69 @@ export class QueueRepository {
|
|
|
1312
1406
|
if (!qitem) {
|
|
1313
1407
|
throw new QueueRepositoryError("qitem_not_found", `qitem ${input.qitemId} not found`);
|
|
1314
1408
|
}
|
|
1409
|
+
const hasNote = typeof input.transitionNote === "string" && input.transitionNote.trim().length > 0;
|
|
1410
|
+
const isGuardedTerminal = ["done", "canceled", "handed-off"].includes(qitem.state);
|
|
1411
|
+
const isStatePreservingAppend = input.state === undefined || (isGuardedTerminal && input.state === qitem.state);
|
|
1412
|
+
if (isStatePreservingAppend) {
|
|
1413
|
+
if (input.state === undefined && !hasNote) {
|
|
1414
|
+
throw new QueueRepositoryError("state_or_note_required", "queue update requires --state or a non-empty --note; nothing was written");
|
|
1415
|
+
}
|
|
1416
|
+
const disallowed = input.reopen === true
|
|
1417
|
+
|| input.closureReason != null
|
|
1418
|
+
|| input.closureTarget != null
|
|
1419
|
+
|| input.handedOffTo != null
|
|
1420
|
+
|| input.blockedOn != null
|
|
1421
|
+
|| input.wakeWatchdogId != null
|
|
1422
|
+
|| input.wakeAfterSeconds != null
|
|
1423
|
+
|| input.summary != null
|
|
1424
|
+
|| input.evidenceRef != null;
|
|
1425
|
+
if (disallowed) {
|
|
1426
|
+
throw new QueueRepositoryError("note_append_fields_not_admitted", "a state-preserving note append accepts only --note (and an optional same --state); state-write fields were supplied, so nothing was written");
|
|
1427
|
+
}
|
|
1428
|
+
this.transitionLog.append({
|
|
1429
|
+
qitemId: input.qitemId,
|
|
1430
|
+
state: qitem.state,
|
|
1431
|
+
actorSession: input.actorSession,
|
|
1432
|
+
transitionNote: input.transitionNote,
|
|
1433
|
+
identityProvenance: input.identityProvenance ?? null,
|
|
1434
|
+
});
|
|
1435
|
+
const persistedEvent = this.eventBus.persistWithinTransaction({
|
|
1436
|
+
type: "queue.updated",
|
|
1437
|
+
qitemId: input.qitemId,
|
|
1438
|
+
fromState: qitem.state,
|
|
1439
|
+
toState: qitem.state,
|
|
1440
|
+
closureReason: null,
|
|
1441
|
+
closureTarget: null,
|
|
1442
|
+
actorSession: input.actorSession,
|
|
1443
|
+
summary: qitem.summary ?? null,
|
|
1444
|
+
});
|
|
1445
|
+
return { persistedEvent, persistedEvents: [persistedEvent] };
|
|
1446
|
+
}
|
|
1315
1447
|
if (!isQueueState(input.state)) {
|
|
1316
1448
|
throw new QueueRepositoryError("invalid_state", `state=${input.state} not valid; valid: ${QUEUE_STATES.join(", ")}`);
|
|
1317
1449
|
}
|
|
1450
|
+
if ((input.wakeWatchdogId != null || input.wakeAfterSeconds != null) && input.state !== "blocked") {
|
|
1451
|
+
throw new QueueRepositoryError("wake_not_admitted", "a park wake persists only with state=blocked; park the row or drop the wake option");
|
|
1452
|
+
}
|
|
1453
|
+
if (input.wakeWatchdogId != null && input.wakeAfterSeconds != null) {
|
|
1454
|
+
throw new QueueRepositoryError("wake_ambiguous", "choose one explicit park wake: an existing watchdog id or an atomic timer");
|
|
1455
|
+
}
|
|
1456
|
+
if (input.wakeAfterSeconds != null && (!Number.isInteger(input.wakeAfterSeconds) || input.wakeAfterSeconds <= 0)) {
|
|
1457
|
+
throw new QueueRepositoryError("wake_after_invalid", `wakeAfterSeconds must be a positive integer (got ${input.wakeAfterSeconds})`);
|
|
1458
|
+
}
|
|
1459
|
+
const isReopen = isGuardedTerminal && input.state !== qitem.state;
|
|
1460
|
+
if (isReopen && !input.reopen) {
|
|
1461
|
+
throw new QueueRepositoryError("terminal_reopen_requires_ack", `qitem ${input.qitemId} is currently '${qitem.state}'; state='${input.state}' would reopen a terminal row. Re-run deliberately with --reopen --note <reason>.`, { currentState: qitem.state, requestedState: input.state });
|
|
1462
|
+
}
|
|
1463
|
+
if (isReopen && !isBlockerLive(input.state)) {
|
|
1464
|
+
throw new QueueRepositoryError("terminal_reopen_target_invalid", `qitem ${input.qitemId} is currently '${qitem.state}'; --reopen requires an active target state (pending, in-progress, or blocked), not '${input.state}'.`, { currentState: qitem.state, requestedState: input.state });
|
|
1465
|
+
}
|
|
1466
|
+
if (isReopen && !hasNote) {
|
|
1467
|
+
throw new QueueRepositoryError("reopen_note_required", `qitem ${input.qitemId} is currently '${qitem.state}'; deliberate reopen requires --note <reason> so the repair is auditable.`, { currentState: qitem.state, requestedState: input.state });
|
|
1468
|
+
}
|
|
1469
|
+
if (input.reopen && !isReopen) {
|
|
1470
|
+
throw new QueueRepositoryError("reopen_not_applicable", `--reopen applies only when moving a terminal row to an active state; qitem ${input.qitemId} is currently '${qitem.state}'.`, { currentState: qitem.state, requestedState: input.state });
|
|
1471
|
+
}
|
|
1318
1472
|
const validation = validateClosure({
|
|
1319
1473
|
state: input.state,
|
|
1320
1474
|
closureReason: input.closureReason ?? null,
|
|
@@ -1403,16 +1557,19 @@ export class QueueRepository {
|
|
|
1403
1557
|
if (effectiveBlockedOn.startsWith("qitem-")) {
|
|
1404
1558
|
const blocker = this.getById(effectiveBlockedOn);
|
|
1405
1559
|
if (!blocker) {
|
|
1406
|
-
throw new QueueRepositoryError("blocker_not_found", `blocked_on names a qitem that does not exist: ${effectiveBlockedOn}. A park must name a real, live blocker — a nonexistent blocker can never complete, so the row could never unpark.`,
|
|
1560
|
+
throw new QueueRepositoryError("blocker_not_found", `blocked_on names a qitem that does not exist: ${effectiveBlockedOn}. A park must name a real, live blocker — a nonexistent blocker can never complete, so the row could never unpark.`,
|
|
1561
|
+
// F1 (error-honesty): the rejected value is named rejectedBlocker — an error payload
|
|
1562
|
+
// never carries the success-shaped blockedOn field (the field-filtered-misread class).
|
|
1563
|
+
{ rejectedBlocker: effectiveBlockedOn });
|
|
1407
1564
|
}
|
|
1408
1565
|
if (!isBlockerLive(blocker.state)) {
|
|
1409
|
-
throw new QueueRepositoryError("blocker_not_live", `blocked_on names a resolved qitem: ${effectiveBlockedOn} is '${blocker.state}'. A park must name a LIVE blocker — parking on a completed/closed row is a dead-blocker park that never self-clears.`, {
|
|
1566
|
+
throw new QueueRepositoryError("blocker_not_live", `blocked_on names a resolved qitem: ${effectiveBlockedOn} is '${blocker.state}'. A park must name a LIVE blocker — parking on a completed/closed row is a dead-blocker park that never self-clears.`, { rejectedBlocker: effectiveBlockedOn, blockerState: blocker.state });
|
|
1410
1567
|
}
|
|
1411
1568
|
}
|
|
1412
1569
|
else {
|
|
1413
1570
|
const typedPrefix = typedGateBlockerPrefix(effectiveBlockedOn);
|
|
1414
1571
|
if (typedPrefix && !isTypedGateBlocker(effectiveBlockedOn)) {
|
|
1415
|
-
throw new QueueRepositoryError("blocker_malformed", `blocked_on '${effectiveBlockedOn}' is a bare '${typedPrefix}' prefix with no gate body. A typed gate blocker must name its gate (e.g. fold:one-home+attestation).`, {
|
|
1572
|
+
throw new QueueRepositoryError("blocker_malformed", `blocked_on '${effectiveBlockedOn}' is a bare '${typedPrefix}' prefix with no gate body. A typed gate blocker must name its gate (e.g. fold:one-home+attestation).`, { rejectedBlocker: effectiveBlockedOn });
|
|
1416
1573
|
}
|
|
1417
1574
|
}
|
|
1418
1575
|
}
|
|
@@ -1432,6 +1589,37 @@ export class QueueRepository {
|
|
|
1432
1589
|
});
|
|
1433
1590
|
}
|
|
1434
1591
|
}
|
|
1592
|
+
let parkWake = null;
|
|
1593
|
+
const jobsRepo = this.watchdogJobsRepo ?? new WatchdogJobsRepository(this.db);
|
|
1594
|
+
if (input.wakeWatchdogId != null) {
|
|
1595
|
+
const job = jobsRepo.getById(input.wakeWatchdogId);
|
|
1596
|
+
if (!job || job.state !== "active") {
|
|
1597
|
+
throw new QueueRepositoryError("wake_watchdog_not_live", `watchdog ${input.wakeWatchdogId} is not an active job; attach a live watchdog or arm an atomic timer`, { wakeWatchdogId: input.wakeWatchdogId });
|
|
1598
|
+
}
|
|
1599
|
+
if (job.targetSession !== qitem.destinationSession) {
|
|
1600
|
+
throw new QueueRepositoryError("wake_watchdog_target_mismatch", `watchdog ${job.jobId} targets ${job.targetSession}, not parked owner ${qitem.destinationSession}`, { wakeWatchdogId: job.jobId, targetSession: job.targetSession, destinationSession: qitem.destinationSession });
|
|
1601
|
+
}
|
|
1602
|
+
parkWake = { kind: "watchdog", ref: job.jobId };
|
|
1603
|
+
}
|
|
1604
|
+
else if (input.wakeAfterSeconds != null) {
|
|
1605
|
+
const job = jobsRepo.register({
|
|
1606
|
+
policy: "periodic-reminder",
|
|
1607
|
+
specYaml: [
|
|
1608
|
+
"policy: periodic-reminder",
|
|
1609
|
+
"target:",
|
|
1610
|
+
` session: ${JSON.stringify(qitem.destinationSession)}`,
|
|
1611
|
+
`message: ${JSON.stringify(`Wake timer fired for parked qitem ${qitem.qitemId}. Resume the recorded continuation and update the row.`)}`,
|
|
1612
|
+
"",
|
|
1613
|
+
].join("\n"),
|
|
1614
|
+
targetSession: qitem.destinationSession,
|
|
1615
|
+
intervalSeconds: input.wakeAfterSeconds,
|
|
1616
|
+
registeredBySession: input.actorSession,
|
|
1617
|
+
});
|
|
1618
|
+
parkWake = { kind: "timer", ref: job.jobId };
|
|
1619
|
+
}
|
|
1620
|
+
else if (input.state === "blocked" && effectiveBlockedOn?.startsWith("qitem-")) {
|
|
1621
|
+
parkWake = { kind: "blocker", ref: effectiveBlockedOn };
|
|
1622
|
+
}
|
|
1435
1623
|
const ts = new Date().toISOString();
|
|
1436
1624
|
const fromState = qitem.state;
|
|
1437
1625
|
// 0.5.1-53 Atom 1b(i) — clear-on-exit. blocked_on is set EXPLICITLY, not COALESCE'd:
|
|
@@ -1457,35 +1645,56 @@ export class QueueRepository {
|
|
|
1457
1645
|
this.persistSummary(input.qitemId, input.summary ?? null);
|
|
1458
1646
|
this.persistEvidenceRef(input.qitemId, input.evidenceRef ?? null);
|
|
1459
1647
|
}
|
|
1460
|
-
this.transitionLog.append({
|
|
1648
|
+
const transition = this.transitionLog.append({
|
|
1461
1649
|
qitemId: input.qitemId,
|
|
1462
1650
|
state: input.state,
|
|
1463
1651
|
actorSession: input.actorSession,
|
|
1464
|
-
transitionNote: input.transitionNote,
|
|
1652
|
+
transitionNote: isReopen ? `reopen acknowledged: ${input.transitionNote}` : input.transitionNote,
|
|
1465
1653
|
closureReason: validation.closureReason ?? undefined,
|
|
1466
1654
|
closureTarget: validation.closureTarget ?? undefined,
|
|
1467
1655
|
identityProvenance: input.identityProvenance ?? null, // P21 §4 era-stamp
|
|
1468
1656
|
});
|
|
1657
|
+
if (parkWake) {
|
|
1658
|
+
this.wakeRepo.record({
|
|
1659
|
+
transitionId: transition.transitionId,
|
|
1660
|
+
qitemId: input.qitemId,
|
|
1661
|
+
phase: "armed",
|
|
1662
|
+
kind: parkWake.kind,
|
|
1663
|
+
ref: parkWake.ref,
|
|
1664
|
+
deliveryStatus: null,
|
|
1665
|
+
});
|
|
1666
|
+
}
|
|
1469
1667
|
// 0.5.1-53 Atom 1b(iii) — propagate-completion. blocked_on PROMISES "A waits until B completes";
|
|
1470
1668
|
// that promise never fired on this runtime (rows sat blocked on done/canceled blockers for days).
|
|
1471
1669
|
// When THIS qitem reaches a terminal state, auto-unpark every row parked on it (blocked_on = this,
|
|
1472
1670
|
// state='blocked') to pending, clear its (now-resolved) blocker, log the transition, and emit an
|
|
1473
1671
|
// event so watchers/sweeps see the unblock without a fetch.
|
|
1672
|
+
const dependentEvents = [];
|
|
1474
1673
|
if (!isBlockerLive(input.state)) {
|
|
1475
1674
|
const blockedRows = this.db
|
|
1476
|
-
.prepare("SELECT qitem_id FROM queue_items WHERE blocked_on = ? AND state = 'blocked'")
|
|
1675
|
+
.prepare("SELECT qitem_id, destination_session FROM queue_items WHERE blocked_on = ? AND state = 'blocked'")
|
|
1477
1676
|
.all(input.qitemId);
|
|
1478
1677
|
for (const r of blockedRows) {
|
|
1479
1678
|
this.db
|
|
1480
1679
|
.prepare("UPDATE queue_items SET state = 'pending', blocked_on = NULL, ts_updated = ? WHERE qitem_id = ?")
|
|
1481
1680
|
.run(ts, r.qitem_id);
|
|
1482
|
-
this.transitionLog.append({
|
|
1681
|
+
const resumeTransition = this.transitionLog.append({
|
|
1483
1682
|
qitemId: r.qitem_id,
|
|
1484
1683
|
state: "pending",
|
|
1485
1684
|
actorSession: input.actorSession,
|
|
1486
1685
|
transitionNote: `auto-unparked: blocker ${input.qitemId} reached terminal state '${input.state}'`,
|
|
1487
1686
|
});
|
|
1488
|
-
this.
|
|
1687
|
+
const wakeIntentId = this.stageAutoUnparkWakeIntent({
|
|
1688
|
+
qitemId: r.qitem_id,
|
|
1689
|
+
destinationSession: r.destination_session,
|
|
1690
|
+
fromSession: input.actorSession,
|
|
1691
|
+
identityProvenance: input.identityProvenance ?? null,
|
|
1692
|
+
blockerQitemId: input.qitemId,
|
|
1693
|
+
resumeTransitionId: resumeTransition.transitionId,
|
|
1694
|
+
});
|
|
1695
|
+
if (wakeIntentId)
|
|
1696
|
+
this.deliverWakeIntentAfterCommit(wakeIntentId);
|
|
1697
|
+
const dependentEvent = this.eventBus.persistWithinTransaction({
|
|
1489
1698
|
type: "queue.updated",
|
|
1490
1699
|
qitemId: r.qitem_id,
|
|
1491
1700
|
fromState: "blocked",
|
|
@@ -1493,11 +1702,13 @@ export class QueueRepository {
|
|
|
1493
1702
|
closureReason: null,
|
|
1494
1703
|
closureTarget: null,
|
|
1495
1704
|
actorSession: input.actorSession,
|
|
1496
|
-
summary: null,
|
|
1705
|
+
summary: this.getById(r.qitem_id)?.summary ?? null,
|
|
1497
1706
|
});
|
|
1707
|
+
this.eventBus.registerPersistedWithinActiveEnvelope(dependentEvent);
|
|
1708
|
+
dependentEvents.push(dependentEvent);
|
|
1498
1709
|
}
|
|
1499
1710
|
}
|
|
1500
|
-
|
|
1711
|
+
const persistedEvent = this.eventBus.persistWithinTransaction({
|
|
1501
1712
|
type: "queue.updated",
|
|
1502
1713
|
qitemId: input.qitemId,
|
|
1503
1714
|
fromState,
|
|
@@ -1509,6 +1720,52 @@ export class QueueRepository {
|
|
|
1509
1720
|
// (park-time summary included) so surfaces refresh without a fetch.
|
|
1510
1721
|
summary: effectiveSummary ?? null,
|
|
1511
1722
|
});
|
|
1723
|
+
return { persistedEvent, persistedEvents: [...dependentEvents, persistedEvent] };
|
|
1724
|
+
}
|
|
1725
|
+
getParkWakeStatus(qitemId) {
|
|
1726
|
+
return this.wakeRepo.getStatus(qitemId);
|
|
1727
|
+
}
|
|
1728
|
+
listTransitions(qitemId) {
|
|
1729
|
+
return this.transitionLog.listForQitem(qitemId).map((transition) => {
|
|
1730
|
+
const wake = this.wakeRepo.getForTransition(transition.transitionId);
|
|
1731
|
+
return wake ? { ...transition, wake } : transition;
|
|
1732
|
+
});
|
|
1733
|
+
}
|
|
1734
|
+
/** Called by the watchdog engine after the delivery attempt is durably
|
|
1735
|
+
* audited. The queue transition records that attempt independently of
|
|
1736
|
+
* whether the HELD row's owner consumed it. */
|
|
1737
|
+
recordWatchdogWakeAttempt(jobId, deliveryStatus) {
|
|
1738
|
+
const targets = this.wakeRepo.findBlockedQitemsByWatchdog(jobId);
|
|
1739
|
+
if (targets.length === 0)
|
|
1740
|
+
return;
|
|
1741
|
+
const events = this.db.transaction(() => targets.map(({ qitemId, kind }) => {
|
|
1742
|
+
const transition = this.transitionLog.append({
|
|
1743
|
+
qitemId,
|
|
1744
|
+
state: "blocked",
|
|
1745
|
+
actorSession: "watchdog@system",
|
|
1746
|
+
transitionNote: `park wake fired: watchdog ${jobId}; delivery=${deliveryStatus}; awaiting owner consumption`,
|
|
1747
|
+
});
|
|
1748
|
+
this.wakeRepo.record({
|
|
1749
|
+
transitionId: transition.transitionId,
|
|
1750
|
+
qitemId,
|
|
1751
|
+
phase: "fired",
|
|
1752
|
+
kind,
|
|
1753
|
+
ref: jobId,
|
|
1754
|
+
deliveryStatus,
|
|
1755
|
+
});
|
|
1756
|
+
return this.eventBus.persistWithinTransaction({
|
|
1757
|
+
type: "queue.updated",
|
|
1758
|
+
qitemId,
|
|
1759
|
+
fromState: "blocked",
|
|
1760
|
+
toState: "blocked",
|
|
1761
|
+
closureReason: null,
|
|
1762
|
+
closureTarget: null,
|
|
1763
|
+
actorSession: "watchdog@system",
|
|
1764
|
+
summary: this.getById(qitemId)?.summary ?? null,
|
|
1765
|
+
});
|
|
1766
|
+
}))();
|
|
1767
|
+
for (const event of events)
|
|
1768
|
+
this.eventBus.notifySubscribers(event);
|
|
1512
1769
|
}
|
|
1513
1770
|
getById(qitemId) {
|
|
1514
1771
|
const row = this.db
|
|
@@ -1833,8 +2090,31 @@ export class QueueRepository {
|
|
|
1833
2090
|
txn();
|
|
1834
2091
|
return rows.length;
|
|
1835
2092
|
}
|
|
2093
|
+
/** S04 — substantive post-claim motion: transitions strictly after the claim, excluding the
|
|
2094
|
+
* claim's own 'claimed' transition. Lazily prepared; indexed on qitem_id. */
|
|
2095
|
+
postClaimMotionStmt;
|
|
2096
|
+
postClaimMotionCount(qitemId, claimedAt) {
|
|
2097
|
+
this.postClaimMotionStmt ??= this.db.prepare("SELECT COUNT(*) AS n FROM queue_transitions WHERE qitem_id = ? AND ts > ? AND transition_note IS NOT 'claimed'");
|
|
2098
|
+
try {
|
|
2099
|
+
return this.postClaimMotionStmt.get(qitemId, claimedAt).n;
|
|
2100
|
+
}
|
|
2101
|
+
catch {
|
|
2102
|
+
return 0; // minimal fixture DBs without the transitions table: degrade, never throw
|
|
2103
|
+
}
|
|
2104
|
+
}
|
|
1836
2105
|
rowToItem(row) {
|
|
2106
|
+
// S04 — derive the pickup receipt at the ONE shared projection point (list/show/overdue
|
|
2107
|
+
// all flow through here), so the park-vs-strand question is answered by the row face.
|
|
2108
|
+
const pickup = derivePickup({
|
|
2109
|
+
state: row.state,
|
|
2110
|
+
claimedAt: row.claimed_at,
|
|
2111
|
+
lastHeartbeat: row.last_heartbeat,
|
|
2112
|
+
postClaimMotionCount: row.claimed_at && row.state !== "blocked"
|
|
2113
|
+
? this.postClaimMotionCount(row.qitem_id, row.claimed_at)
|
|
2114
|
+
: 0,
|
|
2115
|
+
});
|
|
1837
2116
|
return {
|
|
2117
|
+
pickup,
|
|
1838
2118
|
qitemId: row.qitem_id,
|
|
1839
2119
|
tsCreated: row.ts_created,
|
|
1840
2120
|
tsUpdated: row.ts_updated,
|
|
@@ -1871,6 +2151,6 @@ export class QueueRepository {
|
|
|
1871
2151
|
}
|
|
1872
2152
|
}
|
|
1873
2153
|
function isQueueState(value) {
|
|
1874
|
-
return QUEUE_STATES.includes(value);
|
|
2154
|
+
return typeof value === "string" && QUEUE_STATES.includes(value);
|
|
1875
2155
|
}
|
|
1876
2156
|
//# sourceMappingURL=queue-repository.js.map
|