@openrig/cli 0.6.7 → 0.6.9
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/README.md +6 -4
- package/daemon/assets/plugins/openrig-core/hooks/scripts/refocus.cjs +41 -2
- package/daemon/assets/plugins/openrig-core/skills/messaging-the-human/SKILL.md +18 -4
- package/daemon/assets/plugins/openrig-core/skills/refocusing/scripts/trace-to-root.py +218 -7
- package/daemon/context-packs/help/manifest.yaml +1 -1
- package/daemon/context-packs/onboarding-width/manifest.yaml +1 -1
- package/daemon/context-packs/onboarding-width/public-what-you-can-do.md +40 -13
- package/daemon/context-packs/reference/getting-started.md +2 -2
- package/daemon/context-packs/reference/instance-layout.md +5 -0
- package/daemon/context-packs/reference/manifest.yaml +1 -1
- package/daemon/context-packs/reference/rig-spec.md +12 -9
- package/daemon/context-packs/reference/whats-new.md +71 -114
- package/daemon/context-packs/skills/agent-operated-software/manifest.yaml +1 -1
- package/daemon/context-packs/skills/agent-operated-workflows/manifest.yaml +1 -1
- package/daemon/context-packs/skills/applying-a-permission-policy/manifest.yaml +1 -1
- package/daemon/context-packs/skills/claude-compaction-restore/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/agent-starters/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/agent-startup-and-context-ingestion/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/cross-host-rig-commands/SKILL.md +1 -0
- 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/messaging-the-human/SKILL.md +18 -4
- package/daemon/context-packs/skills/core/messaging-the-human/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/openrig-architect/SKILL.md +3 -0
- 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-skills/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/openrig-software-factory/manifest.yaml +1 -1
- package/daemon/context-packs/skills/core/openrig-software-factory/references/worked-example.md +15 -14
- 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/delegating-work/manifest.yaml +1 -1
- package/daemon/context-packs/skills/forming-an-openrig-mental-model/manifest.yaml +1 -1
- package/daemon/context-packs/skills/loading-addressable-markdown/manifest.yaml +1 -1
- package/daemon/context-packs/skills/mission-slice-sop/manifest.yaml +1 -1
- package/daemon/context-packs/skills/openrig-operating-model/manifest.yaml +1 -1
- package/daemon/context-packs/skills/openrig-user/manifest.yaml +1 -1
- package/daemon/context-packs/skills/orienting-to-an-inherited-seat/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/manifest.yaml +1 -1
- 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/context-engineering/manifest.yaml +1 -1
- package/daemon/context-packs/skills/process/dogfood/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/verification-before-completion/manifest.yaml +1 -1
- package/daemon/context-packs/skills/queue-handoff/manifest.yaml +1 -1
- package/daemon/context-packs/skills/refocusing/manifest.yaml +1 -1
- package/daemon/context-packs/skills/refocusing/scripts/trace-to-root.py +218 -7
- package/daemon/context-packs/skills/retiring-and-inheriting-a-seat/manifest.yaml +1 -1
- package/daemon/context-packs/skills/seat-continuity-and-handover/manifest.yaml +1 -1
- package/daemon/context-packs/skills/session-compaction-and-restore/manifest.yaml +1 -1
- package/daemon/context-packs/skills/software-for-agents/manifest.yaml +1 -1
- package/daemon/context-packs/world-example/manifest.yaml +1 -1
- package/daemon/context-packs/world-public/manifest.yaml +1 -1
- package/daemon/dist/build-info.js +3 -3
- package/daemon/dist/db/all-migrations.d.ts.map +1 -1
- package/daemon/dist/db/all-migrations.js +2 -0
- package/daemon/dist/db/all-migrations.js.map +1 -1
- package/daemon/dist/db/migrations/098_queue_transitions_qitem_id_order.d.ts +3 -0
- package/daemon/dist/db/migrations/098_queue_transitions_qitem_id_order.d.ts.map +1 -0
- package/daemon/dist/db/migrations/098_queue_transitions_qitem_id_order.js +12 -0
- package/daemon/dist/db/migrations/098_queue_transitions_qitem_id_order.js.map +1 -0
- package/daemon/dist/domain/claude-compaction-enforcer.d.ts +23 -2
- package/daemon/dist/domain/claude-compaction-enforcer.d.ts.map +1 -1
- package/daemon/dist/domain/claude-compaction-enforcer.js +153 -94
- package/daemon/dist/domain/claude-compaction-enforcer.js.map +1 -1
- package/daemon/dist/domain/context-monitor.d.ts +5 -0
- package/daemon/dist/domain/context-monitor.d.ts.map +1 -1
- package/daemon/dist/domain/context-monitor.js +21 -6
- package/daemon/dist/domain/context-monitor.js.map +1 -1
- package/daemon/dist/domain/current-work.d.ts +74 -0
- package/daemon/dist/domain/current-work.d.ts.map +1 -1
- package/daemon/dist/domain/current-work.js +165 -0
- package/daemon/dist/domain/current-work.js.map +1 -1
- package/daemon/dist/domain/gateway/connections-projection.d.ts +2 -0
- package/daemon/dist/domain/gateway/connections-projection.d.ts.map +1 -1
- package/daemon/dist/domain/gateway/connections-projection.js +3 -1
- package/daemon/dist/domain/gateway/connections-projection.js.map +1 -1
- package/daemon/dist/domain/gateway/gateway-subsystem.d.ts +3 -1
- package/daemon/dist/domain/gateway/gateway-subsystem.d.ts.map +1 -1
- package/daemon/dist/domain/gateway/gateway-subsystem.js +3 -1
- package/daemon/dist/domain/gateway/gateway-subsystem.js.map +1 -1
- package/daemon/dist/domain/gateway/slack/inbound.d.ts.map +1 -1
- package/daemon/dist/domain/gateway/slack/inbound.js +1 -0
- package/daemon/dist/domain/gateway/slack/inbound.js.map +1 -1
- package/daemon/dist/domain/gateway/slack/queue-access.d.ts +5 -0
- package/daemon/dist/domain/gateway/slack/queue-access.d.ts.map +1 -1
- package/daemon/dist/domain/gateway/slack/queue-access.js +6 -1
- package/daemon/dist/domain/gateway/slack/queue-access.js.map +1 -1
- package/daemon/dist/domain/gateway/slack/slack-api.d.ts +7 -2
- package/daemon/dist/domain/gateway/slack/slack-api.d.ts.map +1 -1
- package/daemon/dist/domain/gateway/slack/slack-api.js +35 -3
- package/daemon/dist/domain/gateway/slack/slack-api.js.map +1 -1
- package/daemon/dist/domain/gateway/slack/slack-delivery.d.ts +4 -0
- package/daemon/dist/domain/gateway/slack/slack-delivery.d.ts.map +1 -1
- package/daemon/dist/domain/gateway/slack/slack-delivery.js +16 -1
- package/daemon/dist/domain/gateway/slack/slack-delivery.js.map +1 -1
- package/daemon/dist/domain/gateway/slack/slack-subsystem.d.ts +17 -0
- package/daemon/dist/domain/gateway/slack/slack-subsystem.d.ts.map +1 -1
- package/daemon/dist/domain/gateway/slack/slack-subsystem.js +92 -34
- package/daemon/dist/domain/gateway/slack/slack-subsystem.js.map +1 -1
- package/daemon/dist/domain/gateway/slack/socket-inbound.d.ts +37 -0
- package/daemon/dist/domain/gateway/slack/socket-inbound.d.ts.map +1 -1
- package/daemon/dist/domain/gateway/slack/socket-inbound.js +281 -38
- package/daemon/dist/domain/gateway/slack/socket-inbound.js.map +1 -1
- package/daemon/dist/domain/gateway/slack/state-store.d.ts +14 -1
- package/daemon/dist/domain/gateway/slack/state-store.d.ts.map +1 -1
- package/daemon/dist/domain/gateway/slack/state-store.js +16 -0
- package/daemon/dist/domain/gateway/slack/state-store.js.map +1 -1
- package/daemon/dist/domain/human-questions.d.ts +12 -3
- package/daemon/dist/domain/human-questions.d.ts.map +1 -1
- package/daemon/dist/domain/human-questions.js +10 -5
- package/daemon/dist/domain/human-questions.js.map +1 -1
- package/daemon/dist/domain/kernel-boot-tracker.d.ts +20 -1
- package/daemon/dist/domain/kernel-boot-tracker.d.ts.map +1 -1
- package/daemon/dist/domain/kernel-boot-tracker.js +66 -14
- package/daemon/dist/domain/kernel-boot-tracker.js.map +1 -1
- package/daemon/dist/domain/kernel-boot.d.ts +4 -0
- package/daemon/dist/domain/kernel-boot.d.ts.map +1 -1
- package/daemon/dist/domain/kernel-boot.js +26 -1
- package/daemon/dist/domain/kernel-boot.js.map +1 -1
- package/daemon/dist/domain/native-process-lineage.d.ts.map +1 -1
- package/daemon/dist/domain/native-process-lineage.js +44 -9
- package/daemon/dist/domain/native-process-lineage.js.map +1 -1
- package/daemon/dist/domain/profile-resolver.d.ts.map +1 -1
- package/daemon/dist/domain/profile-resolver.js +54 -15
- package/daemon/dist/domain/profile-resolver.js.map +1 -1
- package/daemon/dist/domain/queue-nudge-text.d.ts +4 -0
- package/daemon/dist/domain/queue-nudge-text.d.ts.map +1 -0
- package/daemon/dist/domain/queue-nudge-text.js +35 -0
- package/daemon/dist/domain/queue-nudge-text.js.map +1 -0
- package/daemon/dist/domain/queue-repository.d.ts +17 -0
- package/daemon/dist/domain/queue-repository.d.ts.map +1 -1
- package/daemon/dist/domain/queue-repository.js +58 -7
- package/daemon/dist/domain/queue-repository.js.map +1 -1
- package/daemon/dist/domain/queue-transition-log.d.ts +12 -4
- package/daemon/dist/domain/queue-transition-log.d.ts.map +1 -1
- package/daemon/dist/domain/queue-transition-log.js +24 -0
- package/daemon/dist/domain/queue-transition-log.js.map +1 -1
- package/daemon/dist/domain/restore-orchestrator.d.ts +1 -0
- package/daemon/dist/domain/restore-orchestrator.d.ts.map +1 -1
- package/daemon/dist/domain/restore-orchestrator.js +17 -11
- package/daemon/dist/domain/restore-orchestrator.js.map +1 -1
- package/daemon/dist/domain/rig-teardown.d.ts.map +1 -1
- package/daemon/dist/domain/rig-teardown.js +6 -0
- package/daemon/dist/domain/rig-teardown.js.map +1 -1
- package/daemon/dist/domain/scope/scope-approve.d.ts +21 -0
- package/daemon/dist/domain/scope/scope-approve.d.ts.map +1 -1
- package/daemon/dist/domain/scope/scope-approve.js +48 -4
- package/daemon/dist/domain/scope/scope-approve.js.map +1 -1
- package/daemon/dist/domain/session-transport.d.ts +12 -1
- package/daemon/dist/domain/session-transport.d.ts.map +1 -1
- package/daemon/dist/domain/session-transport.js +33 -7
- package/daemon/dist/domain/session-transport.js.map +1 -1
- package/daemon/dist/domain/skill-catalog.d.ts +11 -0
- package/daemon/dist/domain/skill-catalog.d.ts.map +1 -1
- package/daemon/dist/domain/skill-catalog.js +136 -12
- package/daemon/dist/domain/skill-catalog.js.map +1 -1
- package/daemon/dist/domain/workflow-validator.d.ts.map +1 -1
- package/daemon/dist/domain/workflow-validator.js +22 -1
- package/daemon/dist/domain/workflow-validator.js.map +1 -1
- package/daemon/dist/routes/gateway.d.ts.map +1 -1
- package/daemon/dist/routes/gateway.js +2 -0
- package/daemon/dist/routes/gateway.js.map +1 -1
- package/daemon/dist/routes/kernel-status.js +3 -1
- package/daemon/dist/routes/kernel-status.js.map +1 -1
- package/daemon/dist/routes/queue.d.ts.map +1 -1
- package/daemon/dist/routes/queue.js +17 -2
- package/daemon/dist/routes/queue.js.map +1 -1
- package/daemon/dist/routes/scope-approve.d.ts.map +1 -1
- package/daemon/dist/routes/scope-approve.js +3 -0
- package/daemon/dist/routes/scope-approve.js.map +1 -1
- package/daemon/dist/routes/sessions.js +1 -1
- package/daemon/dist/routes/sessions.js.map +1 -1
- package/daemon/docs/reference/agent-startup-guide.md +1 -1
- package/daemon/docs/reference/bundle-formats.md +1 -1
- package/daemon/docs/reference/getting-started.md +2 -2
- package/daemon/docs/reference/instance-layout.md +5 -0
- package/daemon/docs/reference/publishing-a-rig-bundle.md +4 -2
- package/daemon/docs/reference/refocus-channel.md +33 -0
- package/daemon/docs/reference/rig-spec.md +12 -9
- package/daemon/docs/reference/slack-app-setup.md +18 -1
- package/daemon/docs/reference/topology-naming.md +74 -0
- package/daemon/docs/reference/whats-new.md +71 -114
- package/daemon/specs/agents/shared/skills/core/cross-host-rig-commands/SKILL.md +1 -0
- package/daemon/specs/agents/shared/skills/core/messaging-the-human/SKILL.md +18 -4
- package/daemon/specs/agents/shared/skills/core/openrig-architect/SKILL.md +3 -0
- package/daemon/specs/agents/shared/skills/core/openrig-software-factory/references/worked-example.md +15 -14
- package/dist/build-info.js +3 -3
- package/dist/commands/chatroom.d.ts.map +1 -1
- package/dist/commands/chatroom.js +25 -5
- package/dist/commands/chatroom.js.map +1 -1
- package/dist/commands/context.d.ts.map +1 -1
- package/dist/commands/context.js +8 -0
- package/dist/commands/context.js.map +1 -1
- package/dist/commands/launch.d.ts.map +1 -1
- package/dist/commands/launch.js +114 -8
- package/dist/commands/launch.js.map +1 -1
- package/dist/commands/proof.js +1 -1
- package/dist/commands/proof.js.map +1 -1
- package/dist/commands/queue.d.ts.map +1 -1
- package/dist/commands/queue.js +3 -0
- package/dist/commands/queue.js.map +1 -1
- package/dist/commands/scope.d.ts.map +1 -1
- package/dist/commands/scope.js +11 -2
- package/dist/commands/scope.js.map +1 -1
- package/dist/commands/send.d.ts.map +1 -1
- package/dist/commands/send.js +23 -5
- package/dist/commands/send.js.map +1 -1
- package/dist/commands/skill.d.ts.map +1 -1
- package/dist/commands/skill.js +6 -0
- package/dist/commands/skill.js.map +1 -1
- package/dist/commands/slack.d.ts +17 -0
- package/dist/commands/slack.d.ts.map +1 -1
- package/dist/commands/slack.js +41 -0
- package/dist/commands/slack.js.map +1 -1
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +5 -0
- package/dist/commands/status.js.map +1 -1
- package/dist/cross-host-types.d.ts +1 -1
- package/dist/cross-host-types.d.ts.map +1 -1
- package/dist/launch-plan-guard.d.ts +27 -0
- package/dist/launch-plan-guard.d.ts.map +1 -0
- package/dist/launch-plan-guard.js +73 -0
- package/dist/launch-plan-guard.js.map +1 -0
- package/dist/lib/scope/scope-fs.d.ts +13 -0
- package/dist/lib/scope/scope-fs.d.ts.map +1 -1
- package/dist/lib/scope/scope-fs.js +28 -4
- package/dist/lib/scope/scope-fs.js.map +1 -1
- package/dist/remote-host-ops.d.ts +4 -0
- package/dist/remote-host-ops.d.ts.map +1 -1
- package/dist/remote-host-ops.js +20 -2
- package/dist/remote-host-ops.js.map +1 -1
- package/package.json +2 -2
- package/tui/dist/commands/registry.js +1 -1
- package/tui/dist/connections/connections-model.d.ts +5 -0
- package/tui/dist/connections/connections-model.d.ts.map +1 -1
- package/tui/dist/connections/connections-model.js +16 -1
- package/tui/dist/connections/connections-model.js.map +1 -1
- package/tui/dist/main.js +16 -4
- package/tui/dist/main.js.map +1 -1
- package/tui/dist/render.js +1 -1
- package/tui/dist/scopes/scopes-model.js +4 -4
- package/tui/dist/types.d.ts +1 -1
|
@@ -89,6 +89,39 @@ reports broken links as gaps rather than following pointers.
|
|
|
89
89
|
This automatic hook path is additive to one-shot manual injection through
|
|
90
90
|
`rig send --context`; neither mode substitutes for the other.
|
|
91
91
|
|
|
92
|
+
## The work packet (switched off by default)
|
|
93
|
+
|
|
94
|
+
Set `OPENRIG_REFOCUS_WORK_PACKET=1` in a seat's harness environment so its
|
|
95
|
+
refocus carries the work it is actually doing as text rather than as pointers.
|
|
96
|
+
With the switch on:
|
|
97
|
+
|
|
98
|
+
- The hook asks `rig queue whoami --work-candidates` for labelled evidence.
|
|
99
|
+
That is each in-progress row's own `mission:` tag (a slice tag is optional),
|
|
100
|
+
or for an untagged row the nearest local handoff ancestor's mission, plus
|
|
101
|
+
blocked rows as held work and pending rows as possible next work. The
|
|
102
|
+
strict `currentWork` derivation is unchanged.
|
|
103
|
+
- One direct, resolved tag is shown as the work, labelled with its source so
|
|
104
|
+
the agent can correct a stale tag. Anything less certain lists every
|
|
105
|
+
candidate's one-line intent and asks the agent to name its mission (or to say
|
|
106
|
+
it has no current work), giving the `--work-start` route that then shows
|
|
107
|
+
that mission's intent as text. The project-level chain appears only as
|
|
108
|
+
labelled orientation.
|
|
109
|
+
- A tag that does not resolve on this host is named, never replaced. A
|
|
110
|
+
retargeted handoff or a remote ancestor gives no assumed mission. A mission
|
|
111
|
+
named only in body text is not evidence.
|
|
112
|
+
- The seat's `LEARNED.md` contributes its `MY JOB HERE` and `STANDING DUTIES`
|
|
113
|
+
sections, and notes and each node's `PROGRESS.md` contribute their
|
|
114
|
+
`Current state` section. When a file has
|
|
115
|
+
no such heading, the packet says so and shows a bounded excerpt. No heading
|
|
116
|
+
is required.
|
|
117
|
+
- A notes or `LEARNED.md` file older than
|
|
118
|
+
`OPENRIG_REFOCUS_NOTES_MAX_AGE_DAYS` (default 14) is named with its age, the
|
|
119
|
+
age's source (`updated:` frontmatter, else mtime) and the threshold: a cue
|
|
120
|
+
for judgment, not a staleness verdict.
|
|
121
|
+
|
|
122
|
+
`trace-to-root.py --packet --work-candidates <path|->` renders the same packet
|
|
123
|
+
by hand.
|
|
124
|
+
|
|
92
125
|
## Relation to chain files
|
|
93
126
|
|
|
94
127
|
The chain files are the durable, altitude-addressed home of orientation
|
|
@@ -8,6 +8,9 @@ This is the canonical reference for the pod-aware RigSpec YAML format. Every fie
|
|
|
8
8
|
|
|
9
9
|
---
|
|
10
10
|
|
|
11
|
+
For choosing IDs, see [naming rigs, pods and seats](topology-naming.md). Keep the same
|
|
12
|
+
logical names in edges, startup instructions, workflow targets and runtime presets.
|
|
13
|
+
|
|
11
14
|
## Minimal Valid Example
|
|
12
15
|
|
|
13
16
|
```yaml
|
|
@@ -18,7 +21,7 @@ pods:
|
|
|
18
21
|
- id: dev
|
|
19
22
|
label: Development
|
|
20
23
|
members:
|
|
21
|
-
- id:
|
|
24
|
+
- id: build
|
|
22
25
|
agent_ref: "local:agents/impl"
|
|
23
26
|
profile: default
|
|
24
27
|
runtime: claude-code
|
|
@@ -105,7 +108,7 @@ pods:
|
|
|
105
108
|
required: true
|
|
106
109
|
actions: []
|
|
107
110
|
members:
|
|
108
|
-
- id:
|
|
111
|
+
- id: build
|
|
109
112
|
agent_ref: "local:agents/impl"
|
|
110
113
|
profile: default
|
|
111
114
|
runtime: claude-code
|
|
@@ -131,7 +134,7 @@ pods:
|
|
|
131
134
|
cwd: "."
|
|
132
135
|
edges:
|
|
133
136
|
- kind: delegates_to
|
|
134
|
-
from:
|
|
137
|
+
from: build
|
|
135
138
|
to: qa
|
|
136
139
|
|
|
137
140
|
- id: rev
|
|
@@ -152,13 +155,13 @@ pods:
|
|
|
152
155
|
edges:
|
|
153
156
|
- kind: delegates_to
|
|
154
157
|
from: orch.lead
|
|
155
|
-
to: dev.
|
|
158
|
+
to: dev.build
|
|
156
159
|
- kind: delegates_to
|
|
157
160
|
from: orch.peer
|
|
158
161
|
to: dev.qa
|
|
159
162
|
- kind: can_observe
|
|
160
163
|
from: rev.r1
|
|
161
|
-
to: dev.
|
|
164
|
+
to: dev.build
|
|
162
165
|
- kind: can_observe
|
|
163
166
|
from: rev.r2
|
|
164
167
|
to: dev.qa
|
|
@@ -453,7 +456,7 @@ The canonical session name is derived from the pod ID, member ID, and rig name:
|
|
|
453
456
|
{podId}-{memberId}@{rigName}
|
|
454
457
|
```
|
|
455
458
|
|
|
456
|
-
Example: pod `dev`, member `
|
|
459
|
+
Example: pod `dev`, member `build`, rig `my-team` → session `dev-build@my-team`
|
|
457
460
|
|
|
458
461
|
Pod and member IDs cannot contain `@` because the first `@` separates their portion
|
|
459
462
|
of the session address from the rig name. Rig names may still contain `@`.
|
|
@@ -482,13 +485,13 @@ Edges within a pod use **unqualified member IDs** (just the member `id`, not `po
|
|
|
482
485
|
pods:
|
|
483
486
|
- id: dev
|
|
484
487
|
members:
|
|
485
|
-
- id:
|
|
488
|
+
- id: build
|
|
486
489
|
# ...
|
|
487
490
|
- id: qa
|
|
488
491
|
# ...
|
|
489
492
|
edges:
|
|
490
493
|
- kind: delegates_to
|
|
491
|
-
from:
|
|
494
|
+
from: build # NOT dev.build
|
|
492
495
|
to: qa # NOT dev.qa
|
|
493
496
|
```
|
|
494
497
|
|
|
@@ -502,7 +505,7 @@ Edges between pods use **fully-qualified `pod.member` IDs**:
|
|
|
502
505
|
edges:
|
|
503
506
|
- kind: delegates_to
|
|
504
507
|
from: orch.lead # pod.member format
|
|
505
|
-
to: dev.
|
|
508
|
+
to: dev.build # pod.member format
|
|
506
509
|
```
|
|
507
510
|
|
|
508
511
|
Cross-pod edges must reference different pods. An edge where both `from` and `to` are in the same pod is a validation error — use pod-local edges instead.
|
|
@@ -99,6 +99,16 @@ clicks arrive over the same socket, so no request URL is needed. An app created
|
|
|
99
99
|
manifest has Interactivity off: turn it on under **Interactivity & Shortcuts**, or the buttons
|
|
100
100
|
will do nothing. A typed reply in the thread still answers the decision either way.
|
|
101
101
|
|
|
102
|
+
In the decision's `humanAnswers`, clicked answers remain option-id strings. A whole typed reply
|
|
103
|
+
is stored as `{kind: "typed-reply", text: "…", placement: "first-unanswered", unansweredCount: N}`
|
|
104
|
+
under the first unanswered question. That placement is automatic; it does not mean the person
|
|
105
|
+
selected that question. `N` counts the other question slots still empty in `humanAnswers` after
|
|
106
|
+
that placement. Earlier button answers are preserved; no other questions are filled in.
|
|
107
|
+
Read `text` as the person's words,
|
|
108
|
+
even when it equals an option id. The reply still closes the decision, so `done` is not approval.
|
|
109
|
+
A file-only reply closes the decision without recording a typed answer. If all button answers were
|
|
110
|
+
already recorded, they stay final and the typed reply remains in the correlated reply row.
|
|
111
|
+
|
|
102
112
|
## What the connector does with the tokens
|
|
103
113
|
|
|
104
114
|
The tokens stay in the env file you created. The connector reads them from that file and uses them
|
|
@@ -140,8 +150,12 @@ rig slack channel-map remove pr@my-rig
|
|
|
140
150
|
Without a map, OpenRig records nothing about a post's channel, so if the default channel
|
|
141
151
|
changes while a post is being retried, the retry goes to the new default channel (as it always
|
|
142
152
|
has); that also applies to a post first tried before the map was added.
|
|
153
|
+
- **Rate limits on posts.** When Slack rate-limits a post and asks for a pause of 10 seconds or
|
|
154
|
+
less, OpenRig waits that long and retries the post once. A longer pause, or a second refusal,
|
|
155
|
+
is left to the retry of retained posts.
|
|
143
156
|
- **Replies and new messages.** A reply in an item's thread reaches that item's seat, in any
|
|
144
|
-
channel.
|
|
157
|
+
channel. To answer it in the same thread, the seat sends `rig queue create --human-intent update
|
|
158
|
+
--reply-to <the inbound reply's row>`. A message the human starts (or a reply in a thread OpenRig does not know) goes to
|
|
145
159
|
the connector's inbound destination, whichever channel it is in. Missed-message recovery
|
|
146
160
|
(below) covers the default channel only.
|
|
147
161
|
|
|
@@ -191,6 +205,9 @@ outside this recovery scope; global chronological order is not promised.
|
|
|
191
205
|
snapshot: socket state/generation, last event, recovery interval/state/reason,
|
|
192
206
|
retry time and accepted/dead-lettered recovery counts since the connector last
|
|
193
207
|
started (they reset when it is enabled or disabled, and when the daemon restarts).
|
|
208
|
+
It also reports the durable dead-letter backlog: the retained records for inbound messages,
|
|
209
|
+
reactions and click answers that await retry, counted from both dead-letter files so the number
|
|
210
|
+
survives a restart, and shown as unknown with a reason (and no count) when a file cannot be read.
|
|
194
211
|
Human-readable coverage and pending bounds use ISO timestamps; JSON keeps Slack timestamps.
|
|
195
212
|
The status read calls no Slack API and starts no scan. If the daemon cannot be
|
|
196
213
|
observed, local configuration remains visible and live state is unknown. A
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
# Naming rigs, pods and seats
|
|
2
|
+
|
|
3
|
+
Names tell people and agents what a team does and who does each part. Use the
|
|
4
|
+
team's purpose for the rig, a domain for each pod, and a role for each seat.
|
|
5
|
+
These are authoring conventions, not additional parser restrictions.
|
|
6
|
+
|
|
7
|
+
## What each name means
|
|
8
|
+
|
|
9
|
+
| Level | Meaning | Example |
|
|
10
|
+
| --- | --- | --- |
|
|
11
|
+
| Fleet | A group of OpenRig instances | Your development fleet |
|
|
12
|
+
| Instance | One daemon and its rigs; several instances can share a machine | The instance selected by a registered host route |
|
|
13
|
+
| Rig | A team or project purpose | `starter`, `workshop`, `factory`, or your project's name |
|
|
14
|
+
| Pod | A domain or shared context | `orch`, `dev`, `review`, `research`, `sre` |
|
|
15
|
+
| Seat (member) | A role within that pod | `lead`, `advisor`, `build`, `qa`, `design`, `review` |
|
|
16
|
+
|
|
17
|
+
The logical seat ID is `pod.member`: `dev.build`. Its session address is
|
|
18
|
+
`pod-member@rig`: `dev-build@workshop`. A cross-instance command also selects the
|
|
19
|
+
registered host route; a display label is not a route. Discover actual addresses
|
|
20
|
+
with `rig ps --nodes` and host routes with `rig host list` before sending work.
|
|
21
|
+
|
|
22
|
+
Runtime, model and account belong in configuration. Changing a provider does not
|
|
23
|
+
change the role's name. Keep machine and instance identifiers stable rather than
|
|
24
|
+
renaming them whenever their workload changes.
|
|
25
|
+
|
|
26
|
+
## How the software teams grow
|
|
27
|
+
|
|
28
|
+
| Team | Logical seats |
|
|
29
|
+
| --- | --- |
|
|
30
|
+
| Starter | `dev.build`, `dev.review` |
|
|
31
|
+
| Workshop | `orch.lead`, `dev.build`, `dev.qa`, `dev.review` |
|
|
32
|
+
| Factory | `orch.lead`, `orch.advisor`, `dev.build`, `dev.qa`, `dev.design`, `review.r1`, `review.r2` |
|
|
33
|
+
|
|
34
|
+
Starter and Factory are built-in teams. Workshop is a
|
|
35
|
+
[bundle](https://github.com/mvschwarz/openrig-world/tree/main/rigs/workshop).
|
|
36
|
+
The built-in specs live under `packages/daemon/specs/rigs/launch/` in the product
|
|
37
|
+
source. Runtime presets keep these logical names.
|
|
38
|
+
|
|
39
|
+
Workshop's one code reviewer is `dev.review`; Factory has an independent review
|
|
40
|
+
pod with `review.r1` and `review.r2`. Both are intentional. A small team does not
|
|
41
|
+
need every pod or role from a larger one.
|
|
42
|
+
|
|
43
|
+
## Name a new team
|
|
44
|
+
|
|
45
|
+
Start with the outcome, then group its work by domain. For a team studying a
|
|
46
|
+
dataset, `research.analyst` and `research.synthesizer` describe useful roles.
|
|
47
|
+
For operating a service, `sre.admin` describes the domain and responsibility.
|
|
48
|
+
Use a project-specific rig name when that helps distinguish two teams.
|
|
49
|
+
|
|
50
|
+
Avoid a generic operation such as `check` as the pod name: it does not say whether
|
|
51
|
+
the team owns software quality, research validation or service health. Put the
|
|
52
|
+
role in its domain, such as `dev.qa`. This is a rule for choosing new names, not a
|
|
53
|
+
word blacklist or a demand that all teams share one roster.
|
|
54
|
+
|
|
55
|
+
Use the same IDs in the rig spec, edges, workflow targets, configuration presets,
|
|
56
|
+
startup instructions and terminal views. Validate those references together.
|
|
57
|
+
See [RigSpec](rig-spec.md) and [publishing a bundle](publishing-a-rig-bundle.md).
|
|
58
|
+
|
|
59
|
+
## Existing identities and retained references
|
|
60
|
+
|
|
61
|
+
An existing team's address remains its actual address until it is deliberately
|
|
62
|
+
migrated. Changing a label does not rename a seat or move its conversation, queue
|
|
63
|
+
or work. Preserve those records and verify the new routes when doing a migration;
|
|
64
|
+
do not edit a database or restart a team just to make a display match an example.
|
|
65
|
+
|
|
66
|
+
`first-project` is the compatibility name for Starter; it is not a second team
|
|
67
|
+
template. Existing-name safeguards still apply. See
|
|
68
|
+
[getting started](getting-started.md) before using the alias.
|
|
69
|
+
|
|
70
|
+
The `factory-rsi` bundle is a retained reference with original workflow-bound
|
|
71
|
+
addresses, including `build.implementer` and `check.qa`. It is distinct from the
|
|
72
|
+
current built-in Factory and is not the naming template for a new team. Old
|
|
73
|
+
release notes, pinned bundles, run records and compatibility tests keep the
|
|
74
|
+
identities they describe.
|
|
@@ -1,128 +1,85 @@
|
|
|
1
|
-
# What changed in OpenRig 0.6.
|
|
1
|
+
# What changed in OpenRig 0.6.9
|
|
2
2
|
|
|
3
|
-
This note is for an agent on an install that was just upgraded to 0.6.
|
|
4
|
-
0.6.
|
|
3
|
+
This note is for an agent on an install that was just upgraded to 0.6.9. It lists only what behaves differently from
|
|
4
|
+
0.6.8 and what to do about it. For everything OpenRig can do, read the capability map:
|
|
5
5
|
`rig context get onboarding-width/public-what-you-can-do.md`. Each release replaces this file, so
|
|
6
6
|
`rig context get reference/whats-new.md` describes the installed version once the upgraded daemon is running. Without
|
|
7
7
|
a running daemon, read `$OPENRIG_HOME/reference/whats-new.md`. The daemon refreshes that copy when it starts, so right
|
|
8
8
|
after an upgrade it can still hold the previous version's note.
|
|
9
9
|
|
|
10
|
-
##
|
|
11
|
-
|
|
12
|
-
- **
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
`
|
|
23
|
-
|
|
24
|
-
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
- **
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
- **
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
##
|
|
55
|
-
|
|
56
|
-
-
|
|
57
|
-
the
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
Don't retry the send.
|
|
71
|
-
- **Slack can post to a channel per rig or seat:** `rig slack channel-map list`, `set <match> <channel>` and
|
|
72
|
-
`remove <match>`. After a change, invite the app to each channel, run `rig slack verify`, then `rig slack disable`
|
|
73
|
-
and `rig slack enable` (or restart the daemon). Thread replies still reach the seat in any channel.
|
|
74
|
-
- **A reaction on any part of a Slack ask reaches the seat that asked,** as a task tagged `human-reaction`. Treat it as
|
|
75
|
-
a signal to interpret, not an answer; the ask stays open. An existing app needs the `reactions:read` scope, the
|
|
76
|
-
`reaction_added` event and a reinstall, and `rig slack verify` warns when the scope is missing.
|
|
77
|
-
- **A long Slack ask is posted in parts.** If it still can't be posted, you get a task `<ask id>-undeliverable`, tagged
|
|
78
|
-
`slack-undeliverable`: shorten the ask or link a file for the long part, and send it as a new ask.
|
|
79
|
-
- **Replies sent with "Also send to #channel" now arrive** at the seat that asked, like any other thread reply.
|
|
80
|
-
|
|
81
|
-
## Running teams
|
|
82
|
-
|
|
83
|
-
- **`rig down` prints what each agent seemed to be doing before it stops them,** on one stderr line, or "unknown". It's
|
|
84
|
-
a best-effort snapshot, not a record of what was interrupted. `rig down --host` now exits 2 when the remote teardown
|
|
85
|
-
reports errors.
|
|
86
|
-
- **Before a handover or compaction, write the seat's recap** with
|
|
87
|
-
`rig context recap-write --rig <rig> --seat <seat> --file <draft.md>`, not a file tool, so earlier recaps are kept.
|
|
88
|
-
`rig seat handover <seat>` now works on the same seat again and again; a seat left half-handed-over recovers by
|
|
89
|
-
running it again.
|
|
90
|
-
- **After a managed compaction, read the `refocusing` skill and consume the current topology and work traces
|
|
91
|
-
delivered with the restore.** Don't rerun them just to duplicate the delivery; name a missing trace. For a new trace
|
|
92
|
-
outside that context, use the skill's one-command form. The daemon now installs the skill globally.
|
|
93
|
-
- **The built-in starter and factory leads publish their team's roster** at first start, so `rig roster list` and
|
|
94
|
-
`rig roster find <topic>` know those teams.
|
|
95
|
-
- **Claiming a parked queue item clears its `blocked_on`.** To park it again on the same gate, run
|
|
96
|
-
`rig queue update <id> --state blocked` without `--blocked-on`: it reuses the previous gate. Add the usual wake when
|
|
97
|
-
one is required.
|
|
98
|
-
- **A periodic reminder first fires one interval after you register it,** not immediately.
|
|
99
|
-
- **Workflows:** `rig workflow run` and `rig workflow watch` exit 3 for an aborted instance. When a step that was sent
|
|
100
|
-
back completes again, the steps that depend on it run again too, including ones that had passed.
|
|
101
|
-
- **Sharing teams:** `rig bundle create` and `rig up <link>` name the bundle after `rig.yaml`'s `name`, and
|
|
102
|
-
`rig bundle check` names the file in each finding. Submissions go to `mvschwarz/openrig-registry`. The bundle safety
|
|
103
|
-
check always runs, even with `--skip-version-check --force`.
|
|
104
|
-
- **`rig context add <url> --git` retrieves shallowly by default:** the initial retrieval fetches only the current
|
|
105
|
-
commit, and a server that refuses shallow retrieval falls back to a full clone with a warning. Use
|
|
106
|
-
`rig context source update` for later revisions.
|
|
107
|
-
- **Values that used to fail quietly are refused:** a bad `rig chatroom history --since` (fix the value; the room isn't
|
|
108
|
-
empty) and a `--wake-after` such as `7d` (use hours, for example `168h`).
|
|
109
|
-
- **Pi seats print a `[pi-runner] seat …:` line at start** saying whether a credential was found and, if not, how to
|
|
110
|
-
fix it. A MiniMax model gets `MINIMAX_API_KEY` when that name is in `recovery.provider_auth_env_allowlist`.
|
|
111
|
-
- **`agents.advisor_session` defaults to the kernel's advisor seat.**
|
|
10
|
+
## Slack
|
|
11
|
+
|
|
12
|
+
- **A typed reply to a decision with structured questions is kept.** It's recorded on the row in `humanAnswers` as a
|
|
13
|
+
tagged entry (`kind: "typed-reply"`), placed under the first unanswered question, with the count of questions still
|
|
14
|
+
unanswered. A clicked answer is still the option's ID. Typed text that matches an option's ID is never read as clicking
|
|
15
|
+
it. The decision still closes, and closing doesn't mean approval: read the reply and its placement before acting. The
|
|
16
|
+
`messaging-the-human` skill says how.
|
|
17
|
+
- **`rig slack status` shows the inbound retry backlog:** how many retained records for inbound messages, reactions
|
|
18
|
+
and click answers are waiting to be retried, kept across restarts. This counts records, not distinct messages.
|
|
19
|
+
If the records can't be read, the line says the count is unknown and why; it never reads as an empty backlog.
|
|
20
|
+
- **An alert retried after its row closed isn't posted.** A Slack post that failed is kept and retried when the gateway
|
|
21
|
+
next starts. If the row has left the active states by then, the alert is dropped and the row records
|
|
22
|
+
`slack-owner-notification-dropped … reason=row-not-active`. Alerts for rows still open, decision-resolved notices and
|
|
23
|
+
digests still post. `rig slack enable` says how many earlier undelivered posts wait to be retried.
|
|
24
|
+
- **"Connected" is no longer the only word about the Slack connection.** OpenRig now notices a connection that stays
|
|
25
|
+
open while Slack stops delivering events to it, and replaces it: a new connection opens first, then the old one
|
|
26
|
+
closes. Two signals catch it, each counted only once the connection has shown it: Slack's server pings stopping for
|
|
27
|
+
30 seconds, and two of OpenRig's own posts not coming back as events within a minute. Automatic replacements are at
|
|
28
|
+
most one every 5 minutes; Slack's own refresh requests are exempt.
|
|
29
|
+
- **Read delivery beside the socket state.** `rig slack status` adds a `Delivery:` line (`delivering`, `not yet
|
|
30
|
+
confirmed`, `events missing since …`, `no server pings since …`, or Socket Mode disabled), the last automatic
|
|
31
|
+
reconnect and why, a held-back reconnect and until when, and Slack's connection count when it's more than ours. The
|
|
32
|
+
connections view shows `connected; delivering` or `connected; delivery not yet confirmed`. Report "not yet
|
|
33
|
+
confirmed" as that, never as working.
|
|
34
|
+
|
|
35
|
+
## Sends and waits
|
|
36
|
+
|
|
37
|
+
- **A cross-host send that may have arrived reads as unconfirmed, not failed.** `rig send <session> --host <id>` to an
|
|
38
|
+
http-registered host now has a 30-second request budget, plus any `--wait-for-idle` time. When the answer doesn't come back, or the connection drops after the
|
|
39
|
+
request went out, the send exits 1 with `failedStep: "remote-outcome-unknown"` and "Delivery UNCONFIRMED". **Check the
|
|
40
|
+
target with `rig capture <session> --host <id>` before any resend**; a blind resend can deliver twice. Only a host
|
|
41
|
+
that was never reached reads as unreachable.
|
|
42
|
+
- **`rig chatroom wait` keeps waiting through a slow or restarting daemon.** Poll timeouts, connection refusals, and
|
|
43
|
+
reset or closed connections are retried until your `--timeout`; the first failure in a run prints a line on stderr.
|
|
44
|
+
Other errors, including an error answer from the daemon such as a removed rig, still end the wait. If the last
|
|
45
|
+
recorded poll failure remains unresolved at the deadline, the timeout says new messages may have arrived unseen.
|
|
46
|
+
|
|
47
|
+
## Kernel status
|
|
48
|
+
|
|
49
|
+
- **A kernel that recovered from a failed start reads ready.** When every declared kernel seat reports ready, for
|
|
50
|
+
example after `rig seat continue`, `rig status` says so and adds an indented line naming the earlier failure and
|
|
51
|
+
when it happened. `GET /api/kernel/status` returns that as `last_boot_failure`. The kernel's agent list shows each
|
|
52
|
+
seat once, with its runtime.
|
|
53
|
+
|
|
54
|
+
## Scope approval
|
|
55
|
+
|
|
56
|
+
- **`rig scope <tier> approve --workspace <path>` stamps the work tree you named.** Before, it reported success while
|
|
57
|
+
the stamp landed in the daemon's own work tree. A named workspace with no `missions/` folder is now refused instead
|
|
58
|
+
of falling back to the configured one. The approval record names the root it wrote under.
|
|
59
|
+
|
|
60
|
+
## Claude seats on NixOS
|
|
61
|
+
|
|
62
|
+
- **A Claude Code installed from nixpkgs is recognised as the seat's runtime,** so its seats read `running` and sends
|
|
63
|
+
no longer warn that the runtime couldn't be established. A seat that still carries an attention marker from an
|
|
64
|
+
earlier failed launch keeps it: clear it with `rig seat clear-attention <seat>`.
|
|
65
|
+
|
|
66
|
+
## A correction to the 0.6.8 note
|
|
67
|
+
|
|
68
|
+
- **`rig launch` takes a rig ID, not a rig name.** The 0.6.8 note wrote `rig launch <rig> <seat> --plan`. Read the ID
|
|
69
|
+
from `rig ps --json`; a name gives `rig_not_found`.
|
|
112
70
|
|
|
113
71
|
## What to stop doing
|
|
114
72
|
|
|
115
|
-
- **Stop
|
|
116
|
-
- **Stop
|
|
117
|
-
|
|
118
|
-
- **Stop
|
|
119
|
-
- **Stop retrying a send refused with `target_needs_input`.** Get the question answered instead.
|
|
120
|
-
- **Stop telling people to untick "Also send to #channel" when they answer in Slack.** Those replies now arrive.
|
|
73
|
+
- **Stop resending a cross-host message after a timeout.** Check the target first; the first send may have arrived.
|
|
74
|
+
- **Stop restarting a kernel whose status read `bootstrap_failed` after its seats recovered.** Read `rig status`
|
|
75
|
+
again on 0.6.9; a recovered kernel reads ready.
|
|
76
|
+
- **Stop passing a rig's name to `rig launch`.** Pass its ID.
|
|
121
77
|
|
|
122
|
-
## Known gaps in 0.6.
|
|
78
|
+
## Known gaps in 0.6.9
|
|
123
79
|
|
|
124
|
-
- **
|
|
125
|
-
|
|
80
|
+
- **The latest first-install check used 0.6.8 on a fresh Mac account in Terminal,** with assistance to install the
|
|
81
|
+
candidate. It reached setup, the kernel window and a team plan; team launch and work weren't exercised.
|
|
82
|
+
Linux and Windows first installs remain unchecked in the evidence behind this note.
|
|
126
83
|
- **Only one selected lifecycle-help command has been checked in a live Claude session;** source and parser coverage
|
|
127
84
|
is broader. If a help command still asks, report it.
|
|
128
85
|
- **Codex team seats aren't asked before lifecycle commands yet.**
|
|
@@ -85,6 +85,7 @@ A local success message alone does not establish remote persistence or pickup.
|
|
|
85
85
|
| ssh-unreachable | SSH connection, target and transport diagnostics |
|
|
86
86
|
| permission-gate | The configured SSH or HTTP credentials and target policy |
|
|
87
87
|
| remote-daemon-unreachable | Target listener and actual running daemon identity |
|
|
88
|
+
| remote-outcome-unknown | The request may have arrived (timeout, dropped connection, unreadable reply): check its effect, for a send the target pane, before any retry |
|
|
88
89
|
| remote-command-not-found | Remote CLI installation and executable lookup |
|
|
89
90
|
| remote-command-failed | The remote operation's own status and error |
|
|
90
91
|
|
|
@@ -92,16 +92,30 @@ the human (a pending human decision, or a row parked on the human), since a
|
|
|
92
92
|
reply in that thread would answer the decision. In every such case the
|
|
93
93
|
`--verify` result says `threaded: false` with the reason.
|
|
94
94
|
|
|
95
|
+
To answer a reply the human typed inside one of your threads, `--reply-to` the
|
|
96
|
+
row their reply landed as. The update posts in that thread unless one of the
|
|
97
|
+
cases above applies, and `--verify` reports it the same way. A message the
|
|
98
|
+
human started at the top level of the channel has no thread yet, so the answer
|
|
99
|
+
posts as a new message.
|
|
100
|
+
|
|
95
101
|
A **decision** with a few clear choices can carry `--human-questions-file <path>`:
|
|
96
102
|
a JSON array of 1–4 questions, each
|
|
97
103
|
`{"id", "question", "options": [{"id", "label", "recommended"?}]}` with 2–4
|
|
98
104
|
options (labels up to 75 characters, at most one recommended). Slack shows each
|
|
99
105
|
question as a row of buttons. Each click records that answer on the item, and
|
|
100
106
|
the decision resolves once every question has one. You then receive one reply
|
|
101
|
-
row listing the answers
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
107
|
+
row listing the answers. In `humanAnswers`, clicked answers are option-id strings.
|
|
108
|
+
A whole typed reply is an object:
|
|
109
|
+
`{kind: "typed-reply", text: "…", placement: "first-unanswered", unansweredCount: N}`.
|
|
110
|
+
It is placed automatically under the first unanswered question; the person did
|
|
111
|
+
not select that question. `N` counts the other question slots still empty in
|
|
112
|
+
`humanAnswers` after that placement.
|
|
113
|
+
Earlier button answers stay intact. Read `text` as the person's words, never as
|
|
114
|
+
an option id even if the strings match. The typed reply still closes the decision
|
|
115
|
+
with the other questions unanswered; `done` is not approval. If every button
|
|
116
|
+
answer was already recorded, that final answer set stays intact and the typed
|
|
117
|
+
reply remains in its correlated reply row. Keep the brief complete: the questions
|
|
118
|
+
add buttons, they do not replace the explanation.
|
|
105
119
|
|
|
106
120
|
If an existing agent-owned row must wait for a **decision**, block it on the **new live qitem ID**
|
|
107
121
|
(`rig queue block <work-id> --on <human-qitem-id> ...`), not on the human address.
|
|
@@ -39,6 +39,9 @@ the format you will author. Load the selected paths from public onboarding;
|
|
|
39
39
|
consult additional skills when their triggers apply. A design task does not
|
|
40
40
|
require reading the whole command library.
|
|
41
41
|
|
|
42
|
+
- Read `topology-naming.md` before choosing new identities: rig = purpose, pod =
|
|
43
|
+
domain, member = role. Keep names stable across runtime choices and match every
|
|
44
|
+
edge, preset and workflow target to the declared IDs.
|
|
42
45
|
- Read the relevant sections of `rig-spec.md` and `agent-spec.md` before writing
|
|
43
46
|
those declarations. Consult `agent-startup-guide.md` for startup/loadout work
|
|
44
47
|
and `edge-types.md` when selecting relationships. Resolve the installed
|
package/daemon/specs/agents/shared/skills/core/openrig-software-factory/references/worked-example.md
CHANGED
|
@@ -120,25 +120,26 @@ rig grow --help
|
|
|
120
120
|
|
|
121
121
|
Set `RIG_ID` to the `rigId` for the running `starter`, and `PROJECT_ROOT`
|
|
122
122
|
to the absolute code repository. Verify its existing `dev` pod and choose unused
|
|
123
|
-
member names.
|
|
123
|
+
member names. Here `parser` owns CSV parsing and `cli` owns the command interface.
|
|
124
|
+
When the user has authorized the added capacity and cost, run:
|
|
124
125
|
|
|
125
126
|
```sh
|
|
126
|
-
rig grow "$RIG_ID"
|
|
127
|
+
rig grow "$RIG_ID" parser cli --pod dev --runtime codex --cwd "$PROJECT_ROOT" --json
|
|
127
128
|
rig ps --nodes --rig starter --json
|
|
128
129
|
```
|
|
129
130
|
|
|
130
|
-
For one builder, omit `
|
|
131
|
-
with addresses `dev-
|
|
131
|
+
For one builder, omit `cli`. The expected new logical IDs are `dev.parser` and `dev.cli`,
|
|
132
|
+
with addresses `dev-parser@starter` and `dev-cli@starter`; use the actual
|
|
132
133
|
returned identities. The command adds and launches the named seats.
|
|
133
134
|
|
|
134
135
|
To put those seats in a **new** pod instead, choose this alternative once, with an
|
|
135
|
-
unused pod
|
|
136
|
+
unused domain pod such as `data`; do not run both examples for the same desired capacity:
|
|
136
137
|
|
|
137
138
|
```sh
|
|
138
|
-
rig grow "$RIG_ID"
|
|
139
|
+
rig grow "$RIG_ID" parser cli --new-pod data --runtime codex --cwd "$PROJECT_ROOT" --json
|
|
139
140
|
```
|
|
140
141
|
|
|
141
|
-
That alternative produces `
|
|
142
|
+
That alternative produces `data.parser`/`data.cli` and corresponding `data-...`
|
|
142
143
|
addresses. `--pod` and `--new-pod` are mutually exclusive. With one existing pod,
|
|
143
144
|
`--pod` can be inferred; select it explicitly when the intended target matters.
|
|
144
145
|
The runtime defaults to `claude-code` and cwd defaults to the caller's current
|
|
@@ -153,7 +154,7 @@ agent specs, use the optional Architect path below and `rig expand --help`.
|
|
|
153
154
|
Inspect each node's status/error and native pane. Confirm existing seats and work
|
|
154
155
|
remain present; a created node is not readiness. Partial results can leave nodes
|
|
155
156
|
persisted. After a timeout, reconcile topology before retrying. Fix the reported
|
|
156
|
-
cause, then use `rig launch "$RIG_ID" dev.
|
|
157
|
+
cause, then use `rig launch "$RIG_ID" dev.parser` only for an already-created seat that
|
|
157
158
|
failed to start. That command does not create a missing seat.
|
|
158
159
|
|
|
159
160
|
New seats do not inherit the owner's conversation or task. Record the agreed
|
|
@@ -163,8 +164,8 @@ checks, next owner and stopping condition. Then deliver the context instruction,
|
|
|
163
164
|
for example for the first builder:
|
|
164
165
|
|
|
165
166
|
```sh
|
|
166
|
-
rig send dev-
|
|
167
|
-
rig capture dev-
|
|
167
|
+
rig send dev-parser@starter "Read $PROJECT_ROOT/SPEC.md and the addressed sources in $PROJECT_ROOT/.openrig/factory/TASK-A.md. Run rig whoami --json and rig queue list --owned --json in your own seat; report your identity, scope and any native readiness/permission blocker. Await the bounded queue assignment."
|
|
168
|
+
rig capture dev-parser@starter
|
|
168
169
|
```
|
|
169
170
|
|
|
170
171
|
Read the actual reply and pane; resolve startup/login/permission prompts under the
|
|
@@ -174,7 +175,7 @@ the coordinator creates the distinct agreed task (or hands off an existing owned
|
|
|
174
175
|
task instead of duplicating it):
|
|
175
176
|
|
|
176
177
|
```sh
|
|
177
|
-
rig queue create --destination dev-
|
|
178
|
+
rig queue create --destination dev-parser@starter \
|
|
178
179
|
--body-file "$PROJECT_ROOT/.openrig/factory/TASK-A.md" \
|
|
179
180
|
--summary 'Implement the agreed independent change A' --json
|
|
180
181
|
```
|
|
@@ -191,7 +192,7 @@ working agreement and assigned work, not the seat's name or default agent label.
|
|
|
191
192
|
| Seat in this example | Deliberately agreed responsibility |
|
|
192
193
|
| --- | --- |
|
|
193
194
|
| `dev-build@starter` | Initially implements and coordinates; can become the dedicated orchestrator, selecting outcomes, separating tasks, owning integration and retaining next-work custody. |
|
|
194
|
-
| `dev-
|
|
195
|
+
| `dev-parser@starter`, `dev-cli@starter` | Implement distinct authorized tasks and return exact candidates/evidence. Neither silently edits the other's files or folds both candidates without integration ownership. |
|
|
195
196
|
| `dev-review@starter` | Retains independent judgment under the project's review policy. The implementer does not count its own check as independent review. |
|
|
196
197
|
|
|
197
198
|
This is one progression, not a required four-seat layout. One extra builder may
|
|
@@ -240,8 +241,8 @@ YAML authoring is optional; ordinary growth uses the commands above.
|
|
|
240
241
|
### Remove capacity deliberately
|
|
241
242
|
|
|
242
243
|
When a seat is no longer needed, preserve its work and next owner first.
|
|
243
|
-
`rig remove "$RIG_ID" dev.
|
|
244
|
-
removes the whole optional
|
|
244
|
+
`rig remove "$RIG_ID" dev.parser` removes that seat; `rig shrink "$RIG_ID" data`
|
|
245
|
+
removes the whole optional data pod. These end the affected sessions. Removal
|
|
245
246
|
refuses active work unless you explicitly select a live `--fallback <live-seat>`
|
|
246
247
|
to receive it. Check the exact targets, handoff and returned outcomes; do not use
|
|
247
248
|
fallback to discard an obligation or remove seats merely because they look idle.
|
package/dist/build-info.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
// GENERATED by scripts/build-package.sh — the packaged build-identity stamp.
|
|
2
2
|
export const BUILD_INFO = {
|
|
3
|
-
semver: "0.6.
|
|
4
|
-
commit: "
|
|
3
|
+
semver: "0.6.9",
|
|
4
|
+
commit: "4b48ca21a9bd072aa05a08b3da6d9c0708e093c5",
|
|
5
5
|
dirty: false,
|
|
6
|
-
builtAt: "2026-10-
|
|
6
|
+
builtAt: "2026-10-09T08:59:39Z",
|
|
7
7
|
};
|
|
8
8
|
export function stampFields(info = BUILD_INFO) {
|
|
9
9
|
if (!info.commit) return {};
|