@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
package/dist/commands/scope.js
CHANGED
|
@@ -7,18 +7,18 @@
|
|
|
7
7
|
// mission/slice frontmatter per §1 of that convention.
|
|
8
8
|
import fs from "node:fs";
|
|
9
9
|
import path from "node:path";
|
|
10
|
-
import { execFileSync } from "node:child_process";
|
|
11
10
|
import { Command } from "commander";
|
|
12
11
|
import { DaemonClient } from "../client.js";
|
|
13
12
|
import { attestationLineage } from "../lib/scope/attestation-lineage.js";
|
|
14
13
|
import { getDaemonStatus, getDaemonUrl, statusGuardMessage } from "../daemon-lifecycle.js";
|
|
15
14
|
import { realDeps } from "./daemon.js";
|
|
16
15
|
import { CLOSE_REASONS, MISSION_TEMPLATE_KINDS, SLICE_TEMPLATE_KINDS, STAGE_VALUES, ScopeCliError, } from "../lib/scope/types.js";
|
|
17
|
-
import { DEFAULT_PROJECT_PREFIX, inferMissionDotId, isMissionDotId, nextEscapeBandOrdinal, sliceIdFromMission, } from "../lib/scope/dot-id.js";
|
|
18
|
-
import { ensureMissionId, ensureMissionIdPersisted, findMission, resolveNodeFile, findSlice,
|
|
19
|
-
import {
|
|
16
|
+
import { DEFAULT_PROJECT_PREFIX, inferMissionDotId, isMissionDotId, isSliceDotId, nextEscapeBandOrdinal, sliceIdFromMission, } from "../lib/scope/dot-id.js";
|
|
17
|
+
import { buildMissionDependencyGraph, ensureMissionId, ensureMissionIdPersisted, findMission, resolveNodeFile, findSlice, listMissions, listSlices, moveSlice, nextSliceNN, pad2, readFrontmatter, resolveMissionsRoot, splitFrontmatter, todayDateISO, updateFrontmatter, } from "../lib/scope/scope-fs.js";
|
|
18
|
+
import { renderCapabilityDeltaTemplate, renderNotesTemplate, renderMissionProgressTemplate, renderMissionTemplate, renderSliceProofTemplate, renderSliceProgressTemplate, renderSliceTemplate, titleFromSlug, } from "../lib/scope/templates.js";
|
|
20
19
|
import { addProgressRow, DEFAULT_PROGRESS_SECTION, parseStatus, PROGRESS_STATUSES, setProgressRow, } from "../lib/scope/progress-edit.js";
|
|
21
20
|
import { deriveScopeTrust } from "../lib/scope/trust.js";
|
|
21
|
+
import { capabilityDeltaExpiryFindings } from "../lib/scope/capability-delta.js";
|
|
22
22
|
function makeStdout() {
|
|
23
23
|
return { write: (text) => process.stdout.write(text) };
|
|
24
24
|
}
|
|
@@ -192,11 +192,13 @@ function buildSliceShowCommand() {
|
|
|
192
192
|
// ---------------------------------------------------------------------
|
|
193
193
|
function buildSliceCreateCommand() {
|
|
194
194
|
return new Command("create")
|
|
195
|
-
.description("Create a new slice
|
|
195
|
+
.description("Create a new slice with SPEC.md, PROGRESS.md, PROOF.md, and proof/. Conventions SSOT: docs/reference/sdlc-conventions.md (installed: $OPENRIG_HOME/reference/sdlc-conventions.md).")
|
|
196
196
|
.argument("<mission>", "Mission name")
|
|
197
197
|
.argument("<slug>", "Short slug (becomes the folder name's suffix)")
|
|
198
198
|
.option("--template <kind>", `Template: ${SLICE_TEMPLATE_KINDS.join(" | ")}`, "placeholder")
|
|
199
199
|
.option("--title <text>", "Display title (defaults to titlecased slug)")
|
|
200
|
+
.option("--intent <text>", "Authored intent stored in SPEC.md frontmatter (defaults to title)")
|
|
201
|
+
.option("--depends-on <dot-id...>", "Advisory build-order dependencies on sibling slice dot-IDs")
|
|
200
202
|
.option("--readme-only", "Write progress_rail: readme-only in README frontmatter instead of scaffolding PROGRESS.md")
|
|
201
203
|
.option("--json", "Machine-readable output")
|
|
202
204
|
.action(async (missionName, rawSlug, opts, command) => {
|
|
@@ -238,6 +240,17 @@ function buildSliceCreateCommand() {
|
|
|
238
240
|
}
|
|
239
241
|
const id = sliceIdFromMission(missionId, nn);
|
|
240
242
|
const title = opts.title ?? titleFromSlug(slug);
|
|
243
|
+
const intent = opts.intent ?? title;
|
|
244
|
+
const dependsOn = Array.isArray(opts.dependsOn) ? [...new Set(opts.dependsOn)] : [];
|
|
245
|
+
for (const dependency of dependsOn) {
|
|
246
|
+
if (!isSliceDotId(dependency) || !dependency.startsWith(`${missionId}.`)) {
|
|
247
|
+
throw new ScopeCliError({
|
|
248
|
+
fact: `Dependency "${dependency}" is not a sibling slice dot-ID under ${missionId}.`,
|
|
249
|
+
consequence: "Slice not created.",
|
|
250
|
+
action: `Use a sibling ID shaped like ${missionId}.<n>, or omit --depends-on.`,
|
|
251
|
+
});
|
|
252
|
+
}
|
|
253
|
+
}
|
|
241
254
|
const createdDate = todayDateISO();
|
|
242
255
|
const body = renderSliceTemplate(kind, {
|
|
243
256
|
id,
|
|
@@ -246,20 +259,10 @@ function buildSliceCreateCommand() {
|
|
|
246
259
|
mission: mission.name,
|
|
247
260
|
title,
|
|
248
261
|
created_date: createdDate,
|
|
262
|
+
intent,
|
|
263
|
+
depends_on: dependsOn,
|
|
249
264
|
});
|
|
250
265
|
const proofBody = renderSliceProofTemplate({ id, title });
|
|
251
|
-
// OPR.0.4.4.23 — every template kind also scaffolds the
|
|
252
|
-
// IMPLEMENTATION-PRD skeleton (convention sections + elastic-middle
|
|
253
|
-
// note): the PRD is what the Living Notes UI's proof-contract join
|
|
254
|
-
// reads, so a slice without one doesn't project its DELIVERED pairing.
|
|
255
|
-
const prdBody = renderImplementationPrdTemplate({
|
|
256
|
-
id,
|
|
257
|
-
slice_number: pad2(nn),
|
|
258
|
-
slug,
|
|
259
|
-
mission: mission.name,
|
|
260
|
-
title,
|
|
261
|
-
created_date: createdDate,
|
|
262
|
-
});
|
|
263
266
|
fs.mkdirSync(sliceAbs, { recursive: true });
|
|
264
267
|
fs.mkdirSync(path.join(sliceAbs, "proof"), { recursive: true });
|
|
265
268
|
// New scaffolds author SPEC.md; existing README-backed nodes are never rewritten.
|
|
@@ -275,7 +278,6 @@ function buildSliceCreateCommand() {
|
|
|
275
278
|
fs.writeFileSync(progressPath, renderSliceProgressTemplate(title), "utf8");
|
|
276
279
|
}
|
|
277
280
|
fs.writeFileSync(path.join(sliceAbs, "PROOF.md"), proofBody, "utf8");
|
|
278
|
-
fs.writeFileSync(path.join(sliceAbs, "IMPLEMENTATION-PRD.md"), prdBody, "utf8");
|
|
279
281
|
const payload = {
|
|
280
282
|
ok: true,
|
|
281
283
|
slice: {
|
|
@@ -474,7 +476,7 @@ function buildSliceMoveCommand() {
|
|
|
474
476
|
// ---------------------------------------------------------------------
|
|
475
477
|
function buildMissionLsCommand() {
|
|
476
478
|
return new Command("ls")
|
|
477
|
-
.description("List missions (top-level folders with README.md)")
|
|
479
|
+
.description("List missions (top-level folders with SPEC.md or a legacy README.md)")
|
|
478
480
|
.option("--json", "Machine-readable output")
|
|
479
481
|
.action(async (opts, command) => {
|
|
480
482
|
const out = makeStdout();
|
|
@@ -540,7 +542,7 @@ function buildMissionShowCommand() {
|
|
|
540
542
|
out.write(` closed slices: ${mission.closedSliceCount}\n`);
|
|
541
543
|
out.write(` path: ${mission.absPath}\n`);
|
|
542
544
|
if (readme) {
|
|
543
|
-
out.write(
|
|
545
|
+
out.write(`\n--- ${path.basename(mission.readmePath)} ---\n`);
|
|
544
546
|
out.write(readme);
|
|
545
547
|
if (!readme.endsWith("\n"))
|
|
546
548
|
out.write("\n");
|
|
@@ -559,7 +561,10 @@ function buildMissionCreateCommand() {
|
|
|
559
561
|
.option("--template <kind>", `Template: ${MISSION_TEMPLATE_KINDS.join(" | ")} (auto when name matches release-X.Y.Z)`, "")
|
|
560
562
|
.option("--id <dot-id>", "Explicit dot-ID. Overrides name-pattern inference.")
|
|
561
563
|
.option("--title <text>", "Display title (defaults to titlecased name)")
|
|
562
|
-
.option("--
|
|
564
|
+
.option("--intent <text>", "Authored intent stored in SPEC.md frontmatter (defaults to title)")
|
|
565
|
+
.option("--depends-on <dot-id...>", "Advisory build-order dependencies on sibling mission dot-IDs")
|
|
566
|
+
.option("--no-notes", "Skip NOTES.md scaffolding")
|
|
567
|
+
.option("--no-mission-notes", "Deprecated alias for --no-notes")
|
|
563
568
|
.option("--json", "Machine-readable output")
|
|
564
569
|
.action(async (rawName, opts, command) => {
|
|
565
570
|
const out = makeStdout();
|
|
@@ -619,15 +624,22 @@ function buildMissionCreateCommand() {
|
|
|
619
624
|
const ordinal = nextEscapeBandOrdinal(peers.map((p) => p.id));
|
|
620
625
|
id = inferMissionDotId(name, ordinal);
|
|
621
626
|
}
|
|
622
|
-
// Resolve titles + render templates
|
|
623
|
-
// effects
|
|
624
|
-
//
|
|
625
|
-
// OPENRIG_MISSION_NOTES_TEMPLATE_PATH used to throw AFTER
|
|
626
|
-
// mkdirSync + README write, leaking a half-created mission dir
|
|
627
|
-
// that future `mission create <same-name>` would reject as
|
|
628
|
-
// already-existing). Rendering MISSION_NOTES first means a
|
|
629
|
-
// stale env-var fails before any disk mutation.
|
|
627
|
+
// Resolve titles + render templates before any filesystem side
|
|
628
|
+
// effects. A stale current or legacy notes-template override must
|
|
629
|
+
// fail before mkdir, or it leaks a half-created mission directory.
|
|
630
630
|
const title = opts.title ?? titleFromSlug(name.replace(/^release-/, ""));
|
|
631
|
+
const intent = opts.intent ?? title;
|
|
632
|
+
const dependsOn = Array.isArray(opts.dependsOn) ? [...new Set(opts.dependsOn)] : [];
|
|
633
|
+
const project = id.split(".")[0];
|
|
634
|
+
for (const dependency of dependsOn) {
|
|
635
|
+
if (!isMissionDotId(dependency) || dependency.split(".")[0] !== project) {
|
|
636
|
+
throw new ScopeCliError({
|
|
637
|
+
fact: `Dependency "${dependency}" is not a sibling mission dot-ID in project ${project}.`,
|
|
638
|
+
consequence: "Mission not created.",
|
|
639
|
+
action: `Use a mission ID shaped like ${project}.<version>, or omit --depends-on.`,
|
|
640
|
+
});
|
|
641
|
+
}
|
|
642
|
+
}
|
|
631
643
|
const releaseVersion = isReleaseName ? name.replace(/^release-/, "") : "";
|
|
632
644
|
const readmeBody = renderMissionTemplate(templateKind, {
|
|
633
645
|
id,
|
|
@@ -636,18 +648,30 @@ function buildMissionCreateCommand() {
|
|
|
636
648
|
title,
|
|
637
649
|
created_date: todayDateISO(),
|
|
638
650
|
release_version: releaseVersion,
|
|
651
|
+
intent,
|
|
652
|
+
depends_on: dependsOn,
|
|
639
653
|
});
|
|
640
|
-
let
|
|
641
|
-
if (opts.missionNotes !== false) {
|
|
642
|
-
|
|
654
|
+
let notesRendered = null;
|
|
655
|
+
if (opts.notes !== false && opts.missionNotes !== false) {
|
|
656
|
+
notesRendered = renderNotesTemplate({
|
|
643
657
|
mission_id: id,
|
|
644
658
|
mission_name: title,
|
|
645
659
|
created_date: todayDateISO(),
|
|
646
660
|
});
|
|
647
|
-
missionNotesRendered = { rendered: r.rendered, resolvedFrom: r.resolvedFrom };
|
|
648
661
|
}
|
|
649
662
|
const progressBody = renderMissionProgressTemplate(title);
|
|
650
|
-
const
|
|
663
|
+
const capabilityDeltaBody = isReleaseName
|
|
664
|
+
? renderCapabilityDeltaTemplate({
|
|
665
|
+
id,
|
|
666
|
+
slug: name,
|
|
667
|
+
mission: name,
|
|
668
|
+
title,
|
|
669
|
+
created_date: todayDateISO(),
|
|
670
|
+
release_version: releaseVersion,
|
|
671
|
+
intent,
|
|
672
|
+
depends_on: dependsOn,
|
|
673
|
+
})
|
|
674
|
+
: null;
|
|
651
675
|
// All renders succeeded — safe to touch the filesystem.
|
|
652
676
|
fs.mkdirSync(absPath, { recursive: true });
|
|
653
677
|
fs.mkdirSync(path.join(absPath, "slices"), { recursive: true });
|
|
@@ -656,14 +680,16 @@ function buildMissionCreateCommand() {
|
|
|
656
680
|
fs.writeFileSync(readmePath, readmeBody, "utf8");
|
|
657
681
|
const progressPath = path.join(absPath, "PROGRESS.md");
|
|
658
682
|
fs.writeFileSync(progressPath, progressBody, "utf8");
|
|
659
|
-
const
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
683
|
+
const capabilityDeltaPath = capabilityDeltaBody
|
|
684
|
+
? path.join(absPath, `CAPABILITY-DELTA-v${releaseVersion}.md`)
|
|
685
|
+
: null;
|
|
686
|
+
if (capabilityDeltaPath && capabilityDeltaBody) {
|
|
687
|
+
fs.writeFileSync(capabilityDeltaPath, capabilityDeltaBody, "utf8");
|
|
688
|
+
}
|
|
689
|
+
let notesPath = null;
|
|
690
|
+
if (notesRendered) {
|
|
691
|
+
notesPath = path.join(absPath, "NOTES.md");
|
|
692
|
+
fs.writeFileSync(notesPath, notesRendered.rendered, "utf8");
|
|
667
693
|
}
|
|
668
694
|
const humanLines = [
|
|
669
695
|
`Created mission ${name}`,
|
|
@@ -671,8 +697,13 @@ function buildMissionCreateCommand() {
|
|
|
671
697
|
` template: ${templateKind}`,
|
|
672
698
|
` path: ${absPath}`,
|
|
673
699
|
];
|
|
674
|
-
if (
|
|
675
|
-
humanLines.push(`
|
|
700
|
+
if (notesPath) {
|
|
701
|
+
humanLines.push(` notes: ${notesPath} (template: ${notesRendered?.resolvedFrom})`);
|
|
702
|
+
}
|
|
703
|
+
if (capabilityDeltaPath)
|
|
704
|
+
humanLines.push(` capability delta: ${capabilityDeltaPath}`);
|
|
705
|
+
if (notesRendered?.resolvedFrom === "legacy-env") {
|
|
706
|
+
humanLines.push(" advisory: OPENRIG_MISSION_NOTES_TEMPLATE_PATH is deprecated; use OPENRIG_NOTES_TEMPLATE_PATH");
|
|
676
707
|
}
|
|
677
708
|
emit(out, {
|
|
678
709
|
ok: true,
|
|
@@ -682,9 +713,12 @@ function buildMissionCreateCommand() {
|
|
|
682
713
|
template: templateKind,
|
|
683
714
|
path: absPath,
|
|
684
715
|
readmePath,
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
716
|
+
notesPath,
|
|
717
|
+
capabilityDeltaPath,
|
|
718
|
+
notesResolvedFrom: notesRendered?.resolvedFrom ?? null,
|
|
719
|
+
advisories: notesRendered?.resolvedFrom === "legacy-env"
|
|
720
|
+
? ["OPENRIG_MISSION_NOTES_TEMPLATE_PATH is deprecated; use OPENRIG_NOTES_TEMPLATE_PATH"]
|
|
721
|
+
: [],
|
|
688
722
|
},
|
|
689
723
|
}, json, humanLines);
|
|
690
724
|
}
|
|
@@ -693,38 +727,34 @@ function buildMissionCreateCommand() {
|
|
|
693
727
|
}
|
|
694
728
|
});
|
|
695
729
|
}
|
|
730
|
+
function buildMissionGraphCommand() {
|
|
731
|
+
return new Command("graph")
|
|
732
|
+
.description("Show advisory sibling build-order edges and the current ready set")
|
|
733
|
+
.argument("<mission>", "Mission name")
|
|
734
|
+
.option("--json", "Machine-readable output")
|
|
735
|
+
.action(async (missionName, opts, command) => {
|
|
736
|
+
const out = makeStdout();
|
|
737
|
+
const json = Boolean(opts.json);
|
|
738
|
+
try {
|
|
739
|
+
const missionsRoot = resolveMissionsRoot({ override: getOpts(command).workspace });
|
|
740
|
+
const graph = buildMissionDependencyGraph(findMission(missionsRoot, missionName));
|
|
741
|
+
emit(out, { ok: true, graph }, json, [
|
|
742
|
+
`Ready: ${graph.ready.join(", ") || "(none)"}`,
|
|
743
|
+
...graph.waiting.map((row) => `Waiting: ${row.id} on ${row.on.join(", ")}`),
|
|
744
|
+
...graph.advisories.map((row) => `Advisory: ${row.id}${row.dependency ? ` -> ${row.dependency}` : ""}: ${row.message}`),
|
|
745
|
+
]);
|
|
746
|
+
}
|
|
747
|
+
catch (err) {
|
|
748
|
+
fail(err, json, out);
|
|
749
|
+
}
|
|
750
|
+
});
|
|
751
|
+
}
|
|
696
752
|
// ---------------------------------------------------------------------
|
|
697
753
|
// Audit (B2 — read-only scope audit)
|
|
698
754
|
// ---------------------------------------------------------------------
|
|
699
|
-
/**
|
|
700
|
-
* Files changed by the most recent commit (revision basis: HEAD), returned as
|
|
701
|
-
* ABSOLUTE resolved paths. Returns null when there is NO git context — the dir
|
|
702
|
-
* is not inside a repo, HEAD does not resolve (e.g. a fresh repo with no
|
|
703
|
-
* commits), or the git command fails. Callers then leave the
|
|
704
|
-
* committed-without-PROGRESS classifier inputs UNDEFINED, so the check stays
|
|
705
|
-
* inert: no false-green (we never assume "PROGRESS untouched" without evidence)
|
|
706
|
-
* and no false-positive (we never fire when we cannot see the commit).
|
|
707
|
-
*/
|
|
708
|
-
function gitHeadTouchedAbsPaths(dir) {
|
|
709
|
-
const topLevel = gitTopLevel(dir);
|
|
710
|
-
if (!topLevel)
|
|
711
|
-
return null;
|
|
712
|
-
try {
|
|
713
|
-
const out = execFileSync("git", ["-C", topLevel, "show", "--name-only", "--pretty=format:", "HEAD"], { encoding: "utf8", stdio: ["ignore", "pipe", "ignore"] });
|
|
714
|
-
const abs = out
|
|
715
|
-
.split(/\r?\n/)
|
|
716
|
-
.map((line) => line.trim())
|
|
717
|
-
.filter((line) => line.length > 0)
|
|
718
|
-
.map((rel) => path.resolve(topLevel, rel));
|
|
719
|
-
return new Set(abs);
|
|
720
|
-
}
|
|
721
|
-
catch {
|
|
722
|
-
return null;
|
|
723
|
-
}
|
|
724
|
-
}
|
|
725
755
|
function buildAuditCommand() {
|
|
726
756
|
return new Command("audit")
|
|
727
|
-
.description("Read-only scope audit: flag
|
|
757
|
+
.description("Read-only scope audit: flag scope findings and show the advisory dependency graph")
|
|
728
758
|
.requiredOption("--mission <name>", "Mission to audit")
|
|
729
759
|
.option("--json", "Machine-readable JSON output")
|
|
730
760
|
.action(async (opts, command) => {
|
|
@@ -740,11 +770,23 @@ function buildAuditCommand() {
|
|
|
740
770
|
}
|
|
741
771
|
const missionReadme = resolveNodeFile(missionDir) ?? path.join(missionDir, "SPEC.md");
|
|
742
772
|
const missionProgress = path.join(missionDir, "PROGRESS.md");
|
|
743
|
-
const
|
|
744
|
-
const
|
|
773
|
+
const missionNotesCurrent = path.join(missionDir, "NOTES.md");
|
|
774
|
+
const missionNotesLegacy = path.join(missionDir, "MISSION_NOTES.md");
|
|
775
|
+
const missionNotesExists = fs.existsSync(missionNotesCurrent) || fs.existsSync(missionNotesLegacy);
|
|
745
776
|
const missionReadmeExists = fs.existsSync(missionReadme);
|
|
746
777
|
const missionProgressExists = fs.existsSync(missionProgress);
|
|
747
|
-
const
|
|
778
|
+
const auditMission = missionReadmeExists
|
|
779
|
+
? findMission(missionsRoot, missionName)
|
|
780
|
+
: {
|
|
781
|
+
name: missionName,
|
|
782
|
+
absPath: missionDir,
|
|
783
|
+
readmePath: null,
|
|
784
|
+
frontmatter: {},
|
|
785
|
+
id: null,
|
|
786
|
+
activeSliceCount: 0,
|
|
787
|
+
closedSliceCount: 0,
|
|
788
|
+
};
|
|
789
|
+
const graph = buildMissionDependencyGraph(auditMission);
|
|
748
790
|
let missionResult;
|
|
749
791
|
if (!missionReadmeExists && missionProgressExists) {
|
|
750
792
|
missionResult = {
|
|
@@ -753,8 +795,8 @@ function buildAuditCommand() {
|
|
|
753
795
|
kind: "orphan_progress",
|
|
754
796
|
severity: "high",
|
|
755
797
|
path: missionDir,
|
|
756
|
-
message: `PROGRESS.md exists but no README.md (orphan progress rail, no backing scope item)`,
|
|
757
|
-
remediation: `Add
|
|
798
|
+
message: `PROGRESS.md exists but no SPEC.md or legacy README.md (orphan progress rail, no backing scope item)`,
|
|
799
|
+
remediation: `Add SPEC.md with frontmatter id, or remove the orphan PROGRESS.md`,
|
|
758
800
|
}],
|
|
759
801
|
frontmatterError: null,
|
|
760
802
|
};
|
|
@@ -771,22 +813,16 @@ function buildAuditCommand() {
|
|
|
771
813
|
readmeOnlyMarker: false,
|
|
772
814
|
isActiveRelease: true,
|
|
773
815
|
level: "mission",
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
missionBriefContent: missionBriefExists ? fs.readFileSync(missionBrief, "utf-8") : null,
|
|
777
|
-
missionNotesExists: fs.existsSync(missionNotes),
|
|
778
|
-
missionNotesPath: missionNotes,
|
|
816
|
+
missionNotesExists,
|
|
817
|
+
missionNotesPath: missionNotesCurrent,
|
|
779
818
|
});
|
|
780
819
|
}
|
|
781
820
|
const missionShadow = shadowedNodeFileFinding(missionDir, "mission");
|
|
782
821
|
if (missionShadow)
|
|
783
822
|
missionResult.findings.push(missionShadow);
|
|
823
|
+
missionResult.findings.push(...capabilityDeltaExpiryFindings(missionDir));
|
|
784
824
|
const slicesDir = path.join(missionDir, "slices");
|
|
785
825
|
const dogfoodEvidenceRoot = defaultDogfoodEvidenceRoot(missionsRoot);
|
|
786
|
-
// Git-derived input for the committed-without-PROGRESS check (CLI-only).
|
|
787
|
-
// Revision basis = the most recent commit (HEAD). null when git context
|
|
788
|
-
// is unavailable → the check is left inert per-slice below.
|
|
789
|
-
const headTouched = gitHeadTouchedAbsPaths(missionDir);
|
|
790
826
|
const sliceResults = [];
|
|
791
827
|
if (fs.existsSync(slicesDir)) {
|
|
792
828
|
for (const entry of fs.readdirSync(slicesDir)) {
|
|
@@ -807,8 +843,8 @@ function buildAuditCommand() {
|
|
|
807
843
|
kind: "orphan_progress",
|
|
808
844
|
severity: "high",
|
|
809
845
|
path: sliceDir,
|
|
810
|
-
message: `PROGRESS.md exists but no README.md (orphan progress rail, no backing scope item)`,
|
|
811
|
-
remediation: `Add
|
|
846
|
+
message: `PROGRESS.md exists but no SPEC.md or legacy README.md (orphan progress rail, no backing scope item)`,
|
|
847
|
+
remediation: `Add SPEC.md with frontmatter id, or remove the orphan PROGRESS.md`,
|
|
812
848
|
}],
|
|
813
849
|
frontmatterError: null,
|
|
814
850
|
},
|
|
@@ -831,23 +867,6 @@ function buildAuditCommand() {
|
|
|
831
867
|
const sliceReadmeContent = fs.readFileSync(sliceReadme, "utf-8");
|
|
832
868
|
const sliceFm = extractFrontmatterRaw(sliceReadmeContent);
|
|
833
869
|
const readmeOnlyMarker = sliceFm !== null && /^progress_rail\s*:\s*readme-only/m.test(sliceFm);
|
|
834
|
-
// committed-without-PROGRESS inputs (CLI-only; inert when git is
|
|
835
|
-
// unavailable — leave both undefined so the check does not fire).
|
|
836
|
-
// Normalize to realpath so a symlinked workspace (e.g. macOS
|
|
837
|
-
// /var → /private/var) still matches git's realpath'd output.
|
|
838
|
-
let sliceTouchedByRecentCommit;
|
|
839
|
-
let progressTouchedByRecentCommit;
|
|
840
|
-
if (headTouched) {
|
|
841
|
-
let realSliceDir = sliceDir;
|
|
842
|
-
try {
|
|
843
|
-
realSliceDir = fs.realpathSync(sliceDir);
|
|
844
|
-
}
|
|
845
|
-
catch { /* keep sliceDir */ }
|
|
846
|
-
const slicePrefix = realSliceDir.endsWith(path.sep) ? realSliceDir : realSliceDir + path.sep;
|
|
847
|
-
const realSliceProgress = path.join(realSliceDir, "PROGRESS.md");
|
|
848
|
-
sliceTouchedByRecentCommit = [...headTouched].some((p) => p === realSliceDir || p.startsWith(slicePrefix));
|
|
849
|
-
progressTouchedByRecentCommit = headTouched.has(realSliceProgress);
|
|
850
|
-
}
|
|
851
870
|
const sliceResult = classifyScopeItem({
|
|
852
871
|
id: null,
|
|
853
872
|
path: sliceDir,
|
|
@@ -862,12 +881,11 @@ function buildAuditCommand() {
|
|
|
862
881
|
proofDirPath: proofDir,
|
|
863
882
|
proofDirHasEntries: directoryHasEntries(proofDir),
|
|
864
883
|
hasProofPacket: hasProofPacketForSlice(dogfoodEvidenceRoot, entry),
|
|
865
|
-
sliceTouchedByRecentCommit,
|
|
866
|
-
progressTouchedByRecentCommit,
|
|
867
884
|
// OPR.0.4.4.19 FR-10 backstop inputs.
|
|
868
885
|
proofArtifacts: listProofArtifactsForAudit(proofDir),
|
|
869
886
|
implementationPrdExists: fs.existsSync(path.join(sliceDir, "IMPLEMENTATION-PRD.md")),
|
|
870
887
|
// OPR.0.4.4.23 convention-section advisory inputs.
|
|
888
|
+
nodeFileName: path.basename(sliceReadme),
|
|
871
889
|
readmeContent: sliceReadmeContent,
|
|
872
890
|
implementationPrdContent: fs.existsSync(path.join(sliceDir, "IMPLEMENTATION-PRD.md"))
|
|
873
891
|
? fs.readFileSync(path.join(sliceDir, "IMPLEMENTATION-PRD.md"), "utf-8")
|
|
@@ -907,6 +925,7 @@ function buildAuditCommand() {
|
|
|
907
925
|
// OPR.0.5.0.18 — amendment lineage (present only when re-stamped).
|
|
908
926
|
...(s.attestations ? { attestations: s.attestations } : {}),
|
|
909
927
|
})),
|
|
928
|
+
graph,
|
|
910
929
|
totalFindings: allFindings.length,
|
|
911
930
|
}, null, 2));
|
|
912
931
|
out.write("\n");
|
|
@@ -916,7 +935,14 @@ function buildAuditCommand() {
|
|
|
916
935
|
}
|
|
917
936
|
out.write(`Scope audit: ${missionName}\n`);
|
|
918
937
|
out.write(`Mission rail: ${missionResult.railStatus}\n`);
|
|
919
|
-
out.write(`Slices: ${sliceResults.length} total\n
|
|
938
|
+
out.write(`Slices: ${sliceResults.length} total\n`);
|
|
939
|
+
out.write(`Ready: ${graph.ready.join(", ") || "(none)"}\n`);
|
|
940
|
+
for (const row of graph.waiting)
|
|
941
|
+
out.write(`Waiting: ${row.id} on ${row.on.join(", ")}\n`);
|
|
942
|
+
for (const row of graph.advisories) {
|
|
943
|
+
out.write(`Advisory: ${row.id}${row.dependency ? ` -> ${row.dependency}` : ""}: ${row.message}\n`);
|
|
944
|
+
}
|
|
945
|
+
out.write("\n");
|
|
920
946
|
// OPR.0.5.0.18 — amendment lineage: a re-stamped slice shows the
|
|
921
947
|
// CURRENT attestation + prior-count (the append-only audit rows
|
|
922
948
|
// reconstruct the full history; this is the at-a-glance surface).
|
|
@@ -1228,9 +1254,9 @@ function buildSliceStageCommand() {
|
|
|
1228
1254
|
const slice = findSlice(missionsRoot, slicePath, opts.mission ?? null);
|
|
1229
1255
|
if (!slice.readmePath) {
|
|
1230
1256
|
throw new ScopeCliError({
|
|
1231
|
-
fact: `Slice ${slice.name} has no README.md.`,
|
|
1232
|
-
consequence: "Stage is a frontmatter field
|
|
1233
|
-
action: "Create the slice
|
|
1257
|
+
fact: `Slice ${slice.name} has no SPEC.md or legacy README.md.`,
|
|
1258
|
+
consequence: "Stage is a work-node frontmatter field; nothing to write.",
|
|
1259
|
+
action: "Create the slice with `rig scope slice create` before setting its stage.",
|
|
1234
1260
|
});
|
|
1235
1261
|
}
|
|
1236
1262
|
applyStage(slice.readmePath, stage, opts.successor);
|
|
@@ -1262,9 +1288,9 @@ function buildMissionStageCommand() {
|
|
|
1262
1288
|
const mission = findMission(missionsRoot, missionName);
|
|
1263
1289
|
if (!mission.readmePath) {
|
|
1264
1290
|
throw new ScopeCliError({
|
|
1265
|
-
fact: `Mission ${mission.name} has no README.md.`,
|
|
1266
|
-
consequence: "Stage is a frontmatter field
|
|
1267
|
-
action: "Create the mission
|
|
1291
|
+
fact: `Mission ${mission.name} has no SPEC.md or legacy README.md.`,
|
|
1292
|
+
consequence: "Stage is a work-node frontmatter field; nothing to write.",
|
|
1293
|
+
action: "Create the mission with `rig scope mission create` before setting its stage.",
|
|
1268
1294
|
});
|
|
1269
1295
|
}
|
|
1270
1296
|
applyStage(mission.readmePath, stage, opts.successor);
|
|
@@ -1296,9 +1322,9 @@ function buildSliceVerifiedCommand() {
|
|
|
1296
1322
|
const slice = findSlice(missionsRoot, slicePath, opts.mission ?? null);
|
|
1297
1323
|
if (!slice.readmePath) {
|
|
1298
1324
|
throw new ScopeCliError({
|
|
1299
|
-
fact: `Slice ${slice.name} has no README.md.`,
|
|
1300
|
-
consequence: "verified is a frontmatter field
|
|
1301
|
-
action: "Create the slice
|
|
1325
|
+
fact: `Slice ${slice.name} has no SPEC.md or legacy README.md.`,
|
|
1326
|
+
consequence: "verified is a work-node frontmatter field; nothing to write.",
|
|
1327
|
+
action: "Create the slice with `rig scope slice create` before stamping verified.",
|
|
1302
1328
|
});
|
|
1303
1329
|
}
|
|
1304
1330
|
const verified = `${todayDateISO()} against ${source}`;
|
|
@@ -1327,9 +1353,9 @@ function buildMissionVerifiedCommand() {
|
|
|
1327
1353
|
const mission = findMission(missionsRoot, missionName);
|
|
1328
1354
|
if (!mission.readmePath) {
|
|
1329
1355
|
throw new ScopeCliError({
|
|
1330
|
-
fact: `Mission ${mission.name} has no README.md.`,
|
|
1331
|
-
consequence: "verified is a frontmatter field
|
|
1332
|
-
action: "Create the mission
|
|
1356
|
+
fact: `Mission ${mission.name} has no SPEC.md or legacy README.md.`,
|
|
1357
|
+
consequence: "verified is a work-node frontmatter field; nothing to write.",
|
|
1358
|
+
action: "Create the mission with `rig scope mission create` before stamping verified.",
|
|
1333
1359
|
});
|
|
1334
1360
|
}
|
|
1335
1361
|
const verified = `${todayDateISO()} against ${source}`;
|
|
@@ -1359,16 +1385,34 @@ function mapLegacyStatusToStage(status) {
|
|
|
1359
1385
|
return "provisional";
|
|
1360
1386
|
return "wip";
|
|
1361
1387
|
}
|
|
1362
|
-
/**
|
|
1363
|
-
*
|
|
1364
|
-
*
|
|
1365
|
-
|
|
1388
|
+
/** Preserve a malformed value before repair replaces it with the conformant
|
|
1389
|
+
* representation. A pre-existing preservation key means a prior repair has
|
|
1390
|
+
* already recorded a different original; refusing is the only lossless move. */
|
|
1391
|
+
function preserveMalformedFrontmatterValue(frontmatter, updates, key) {
|
|
1392
|
+
if (!Object.prototype.hasOwnProperty.call(frontmatter, key))
|
|
1393
|
+
return;
|
|
1394
|
+
const preservedKey = `repair-original-${key.replaceAll("_", "-")}`;
|
|
1395
|
+
if (Object.prototype.hasOwnProperty.call(frontmatter, preservedKey)) {
|
|
1396
|
+
throw new ScopeCliError({
|
|
1397
|
+
fact: `${key} is malformed and ${preservedKey} already exists.`,
|
|
1398
|
+
consequence: "Repair refused rather than overwrite either authored value.",
|
|
1399
|
+
action: `Resolve ${key} manually and retain ${preservedKey} as the prior-value record, then re-run repair.`,
|
|
1400
|
+
});
|
|
1401
|
+
}
|
|
1402
|
+
updates[preservedKey] = frontmatter[key];
|
|
1403
|
+
}
|
|
1404
|
+
/** Idempotently conform a scope README's mandatory frontmatter. Adds absent
|
|
1405
|
+
* fields and replaces malformed ones only after preserving their values under
|
|
1406
|
+
* repair-original-* keys. A valid id/stage/verified is never touched.
|
|
1407
|
+
* `mintId` is called only when `id` is absent or malformed (it may persist a
|
|
1408
|
+
* parent id per §1 lazy adoption). */
|
|
1366
1409
|
function conformReadmeFrontmatter(readmePath, mintId) {
|
|
1367
1410
|
const fm = readFrontmatter(readmePath);
|
|
1368
1411
|
const updates = {};
|
|
1369
1412
|
let idAdded = null;
|
|
1370
|
-
const hasId = typeof fm.id === "string" && fm.id.length > 0;
|
|
1413
|
+
const hasId = typeof fm.id === "string" && fm.id.trim().length > 0;
|
|
1371
1414
|
if (!hasId) {
|
|
1415
|
+
preserveMalformedFrontmatterValue(fm, updates, "id");
|
|
1372
1416
|
const minted = mintId();
|
|
1373
1417
|
if (minted) {
|
|
1374
1418
|
idAdded = minted;
|
|
@@ -1376,12 +1420,16 @@ function conformReadmeFrontmatter(readmePath, mintId) {
|
|
|
1376
1420
|
}
|
|
1377
1421
|
}
|
|
1378
1422
|
let stageAdded = null;
|
|
1379
|
-
|
|
1423
|
+
const hasStage = typeof fm.stage === "string" && STAGE_VALUES.includes(fm.stage);
|
|
1424
|
+
if (!hasStage) {
|
|
1425
|
+
preserveMalformedFrontmatterValue(fm, updates, "stage");
|
|
1380
1426
|
stageAdded = mapLegacyStatusToStage(fm.status);
|
|
1381
1427
|
updates.stage = stageAdded;
|
|
1382
1428
|
}
|
|
1383
1429
|
let verifiedAdded = null;
|
|
1384
|
-
|
|
1430
|
+
const hasVerified = typeof fm.verified === "string" && fm.verified.trim().length > 0;
|
|
1431
|
+
if (!hasVerified) {
|
|
1432
|
+
preserveMalformedFrontmatterValue(fm, updates, "verified");
|
|
1385
1433
|
verifiedAdded = `${todayDateISO()} against backfill (rig scope repair)`;
|
|
1386
1434
|
updates.verified = verifiedAdded;
|
|
1387
1435
|
}
|
|
@@ -1424,11 +1472,16 @@ function buildSliceRepairCommand() {
|
|
|
1424
1472
|
const json = Boolean(opts.json);
|
|
1425
1473
|
try {
|
|
1426
1474
|
const missionsRoot = resolveMissionsRoot({ override: getOpts(command).workspace });
|
|
1427
|
-
const
|
|
1475
|
+
const legacySlice = findSlice(missionsRoot, slicePath, opts.mission ?? null);
|
|
1476
|
+
const specPath = ensureCurrentSpec(legacySlice.absPath, legacySlice.readmePath, legacySlice.name);
|
|
1477
|
+
const slice = findSlice(missionsRoot, legacySlice.absPath, opts.mission ?? null);
|
|
1428
1478
|
const result = backfillScopeProgress(slice.absPath, "slice");
|
|
1429
|
-
const frontmatter =
|
|
1430
|
-
? conformReadmeFrontmatter(
|
|
1479
|
+
const frontmatter = specPath
|
|
1480
|
+
? conformReadmeFrontmatter(specPath, mintSliceIdClosure(slice, missionsRoot))
|
|
1431
1481
|
: { idAdded: null, stageAdded: null, verifiedAdded: null, changed: false };
|
|
1482
|
+
if (specPath)
|
|
1483
|
+
ensureConventionFrontmatter(specPath, slice.name);
|
|
1484
|
+
ensureSliceProofSurface(slice.absPath, readFrontmatter(specPath ?? "").id, slice.name);
|
|
1432
1485
|
emit(out, { ok: true, result, frontmatter }, json, [
|
|
1433
1486
|
`${result.created ? "Backfilled" : "Skipped"} ${slice.name}: ${result.reason}`,
|
|
1434
1487
|
...(result.path ? [` path: ${result.path}`] : []),
|
|
@@ -1450,6 +1503,8 @@ function buildMissionRepairCommand() {
|
|
|
1450
1503
|
const json = Boolean(opts.json);
|
|
1451
1504
|
try {
|
|
1452
1505
|
const missionsRoot = resolveMissionsRoot({ override: getOpts(command).workspace });
|
|
1506
|
+
const legacyMission = findMission(missionsRoot, missionName);
|
|
1507
|
+
const missionSpec = ensureCurrentSpec(legacyMission.absPath, legacyMission.readmePath, legacyMission.name);
|
|
1453
1508
|
const mission = findMission(missionsRoot, missionName);
|
|
1454
1509
|
const results = [];
|
|
1455
1510
|
results.push(backfillScopeProgress(mission.absPath, "mission"));
|
|
@@ -1465,15 +1520,21 @@ function buildMissionRepairCommand() {
|
|
|
1465
1520
|
// the mission id), then each slice (child ids derive from the now-
|
|
1466
1521
|
// persisted parent id).
|
|
1467
1522
|
const conformed = [];
|
|
1468
|
-
if (
|
|
1469
|
-
const fm = conformReadmeFrontmatter(
|
|
1523
|
+
if (missionSpec) {
|
|
1524
|
+
const fm = conformReadmeFrontmatter(missionSpec, () => ensureMissionId(mission, missionsRoot));
|
|
1525
|
+
ensureConventionFrontmatter(missionSpec, mission.name);
|
|
1470
1526
|
conformed.push({ scope: "mission", name: mission.name, frontmatter: fm });
|
|
1471
1527
|
}
|
|
1472
1528
|
const freshMission = findMission(missionsRoot, mission.name);
|
|
1529
|
+
ensureMissionNotesSurface(freshMission.absPath, freshMission);
|
|
1473
1530
|
for (const slice of listSlices(freshMission, "all")) {
|
|
1474
|
-
|
|
1531
|
+
const specPath = ensureCurrentSpec(slice.absPath, slice.readmePath, slice.name);
|
|
1532
|
+
if (!specPath)
|
|
1475
1533
|
continue;
|
|
1476
|
-
const fm = conformReadmeFrontmatter(
|
|
1534
|
+
const fm = conformReadmeFrontmatter(specPath, mintSliceIdClosure(slice, missionsRoot));
|
|
1535
|
+
ensureConventionFrontmatter(specPath, slice.name);
|
|
1536
|
+
backfillScopeProgress(slice.absPath, "slice");
|
|
1537
|
+
ensureSliceProofSurface(slice.absPath, readFrontmatter(specPath).id, slice.name);
|
|
1477
1538
|
conformed.push({ scope: "slice", name: slice.name, frontmatter: fm });
|
|
1478
1539
|
}
|
|
1479
1540
|
const created = results.filter((r) => r.created);
|
|
@@ -1489,6 +1550,63 @@ function buildMissionRepairCommand() {
|
|
|
1489
1550
|
}
|
|
1490
1551
|
});
|
|
1491
1552
|
}
|
|
1553
|
+
/** Add the current authored node beside a legacy README without touching the
|
|
1554
|
+
* legacy file. Existing SPEC bytes stay in place. */
|
|
1555
|
+
function ensureCurrentSpec(dir, nodePath, fallbackName) {
|
|
1556
|
+
const specPath = path.join(dir, "SPEC.md");
|
|
1557
|
+
if (fs.existsSync(specPath))
|
|
1558
|
+
return specPath;
|
|
1559
|
+
if (!nodePath || !fs.existsSync(nodePath))
|
|
1560
|
+
return null;
|
|
1561
|
+
fs.copyFileSync(nodePath, specPath);
|
|
1562
|
+
ensureConventionFrontmatter(specPath, fallbackName);
|
|
1563
|
+
return specPath;
|
|
1564
|
+
}
|
|
1565
|
+
function ensureConventionFrontmatter(specPath, fallbackName) {
|
|
1566
|
+
const content = fs.readFileSync(specPath, "utf8");
|
|
1567
|
+
const { frontmatter, body } = splitFrontmatter(content);
|
|
1568
|
+
const h2Intent = /^## Intent\s*\n+([\s\S]*?)(?=\n## |$)/m.exec(body)?.[1]?.trim();
|
|
1569
|
+
const h1 = /^#\s+(.+)$/m.exec(body)?.[1]?.trim();
|
|
1570
|
+
const updates = {};
|
|
1571
|
+
if (!(typeof frontmatter.intent === "string" && frontmatter.intent.trim().length > 0)) {
|
|
1572
|
+
preserveMalformedFrontmatterValue(frontmatter, updates, "intent");
|
|
1573
|
+
updates.intent = h2Intent && !/^\[.*\]$/.test(h2Intent)
|
|
1574
|
+
? h2Intent
|
|
1575
|
+
: h1 ?? titleFromSlug(fallbackName.replace(/^\d+-/, ""));
|
|
1576
|
+
}
|
|
1577
|
+
if (!Array.isArray(frontmatter.depends_on)) {
|
|
1578
|
+
preserveMalformedFrontmatterValue(frontmatter, updates, "depends_on");
|
|
1579
|
+
updates.depends_on = [];
|
|
1580
|
+
}
|
|
1581
|
+
if (Object.keys(updates).length > 0)
|
|
1582
|
+
updateFrontmatter(specPath, updates);
|
|
1583
|
+
}
|
|
1584
|
+
function ensureMissionNotesSurface(dir, mission) {
|
|
1585
|
+
const notesPath = path.join(dir, "NOTES.md");
|
|
1586
|
+
if (fs.existsSync(notesPath))
|
|
1587
|
+
return;
|
|
1588
|
+
const legacyPath = path.join(dir, "MISSION_NOTES.md");
|
|
1589
|
+
if (fs.existsSync(legacyPath)) {
|
|
1590
|
+
fs.copyFileSync(legacyPath, notesPath);
|
|
1591
|
+
return;
|
|
1592
|
+
}
|
|
1593
|
+
const rendered = renderNotesTemplate({
|
|
1594
|
+
mission_id: mission.id ?? mission.name,
|
|
1595
|
+
mission_name: typeof mission.frontmatter.intent === "string" ? mission.frontmatter.intent : mission.name,
|
|
1596
|
+
created_date: todayDateISO(),
|
|
1597
|
+
});
|
|
1598
|
+
fs.writeFileSync(notesPath, rendered.rendered, "utf8");
|
|
1599
|
+
}
|
|
1600
|
+
function ensureSliceProofSurface(dir, rawId, fallbackName) {
|
|
1601
|
+
fs.mkdirSync(path.join(dir, "proof"), { recursive: true });
|
|
1602
|
+
const proofPath = path.join(dir, "PROOF.md");
|
|
1603
|
+
if (fs.existsSync(proofPath))
|
|
1604
|
+
return;
|
|
1605
|
+
fs.writeFileSync(proofPath, renderSliceProofTemplate({
|
|
1606
|
+
id: typeof rawId === "string" ? rawId : fallbackName,
|
|
1607
|
+
title: titleFromSlug(fallbackName.replace(/^\d+-/, "")),
|
|
1608
|
+
}), "utf8");
|
|
1609
|
+
}
|
|
1492
1610
|
// ---------------------------------------------------------------------
|
|
1493
1611
|
// Approve (OPR.0.4.4.19 FR-9)
|
|
1494
1612
|
// ---------------------------------------------------------------------
|
|
@@ -1663,6 +1781,7 @@ export function scopeCommand() {
|
|
|
1663
1781
|
mission.addCommand(buildMissionLsCommand());
|
|
1664
1782
|
mission.addCommand(buildMissionShowCommand());
|
|
1665
1783
|
mission.addCommand(buildMissionCreateCommand());
|
|
1784
|
+
mission.addCommand(buildMissionGraphCommand());
|
|
1666
1785
|
mission.addCommand(buildMissionProgressCommand());
|
|
1667
1786
|
mission.addCommand(buildMissionRepairCommand());
|
|
1668
1787
|
mission.addCommand(buildMissionStageCommand());
|