omp-conductor 0.3.20 → 0.3.22

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "omp-conductor",
3
- "version": "0.3.20",
3
+ "version": "0.3.22",
4
4
  "type": "module",
5
5
  "license": "MIT",
6
6
  "description": "A 24/7 dispatcher that takes ready GitHub issues to green, mergeable PRs using omp coding sessions, with tiered escalation first to an orchestrator session and then to a human.",
@@ -121,24 +121,37 @@ any agent is: it is long-lived, it can see everything that merged since the last
121
121
  release, and batching is exactly the judgement a per-issue session cannot make.
122
122
 
123
123
  So frame it as **three** options, in this order, and name the default. Each one
124
- maps to an `authority` answer the wizard asks for directly — the interview
125
- decides *which answer to give*, and `/conductor setup` is what records it. Never
126
- write authority into the brief by hand: the config is what words the brief, and
127
- a hand-edit is a second source that outlives the operator's memory of making it.
124
+ maps to two independent wizard answers:
125
+
126
+ - `authority.release` says **who owns the release decision**;
127
+ - `releasePolicy` is the mechanical tool gate that says whether release-shaped
128
+ commands may run at all.
129
+
130
+ The interview decides both answers, and `/conductor setup` records them. Never
131
+ write either value into the brief or hand-edit `config.json`: config is the
132
+ single source, and the wizard's dry run is where the operator sees the combined
133
+ grant.
128
134
 
129
135
  1. **Humans release.** *(default, and what the package ships)* Work ends at a
130
- green PR. Merging is a separate human action; releasing is a separate human
131
- action after that. Neither a worker nor the orchestrator ever tags, pins,
132
- publishes, or deploys. "This needs releasing" becomes something the
133
- orchestrator *reports*. → `authority: merge=human, release=human`; answer
134
- **no** to both wizard confirms.
135
- 2. **The orchestrator releases up to a named boundary.** Delegating part of the
136
- release to the supervising session, with the stopping line written down.
137
- usually `merge=orchestrator, release=orchestrator`, with the boundary in
138
- the procedure rather than in the grant; `merge=orchestrator, release=human`
139
- when the line falls before the tag.
140
- 3. **The orchestrator releases fully.** → `merge=orchestrator,
141
- release=orchestrator`.
136
+ green PR. Merging is a separate decision; releasing is a separate human
137
+ action. Neither a worker nor the orchestrator tags, pins, publishes, or
138
+ deploys. "This needs releasing" becomes something the orchestrator reports.
139
+ → `authority.release=human`, `releasePolicy=none`; answer **no** to both
140
+ release confirms.
141
+ 2. **The orchestrator releases up to a named boundary.** Delegate release
142
+ authority only when its leg includes the first release action (for example,
143
+ creating a tag or dispatching a release workflow). usually
144
+ `authority.release=orchestrator`, `releasePolicy=operator-brief`, with the
145
+ boundary in the procedure rather than in the grant. If its leg ends before
146
+ that action, use `authority.release=human`, `releasePolicy=none`.
147
+ 3. **The orchestrator releases fully.** →
148
+ `authority.release=orchestrator`, `releasePolicy=operator-brief`.
149
+
150
+ Merge authority is its own confirm in every option. Also say what opening the
151
+ tool gate means: it is project-wide and is passed to worker sessions as well as
152
+ the orchestrator. It does not grant workers release authority — their brief
153
+ still stops them at a green PR — but it removes the mechanical block. Never open
154
+ it until the operator has reviewed the release procedure and stopping boundary.
142
155
 
143
156
  Then ask the question that makes option 2 real:
144
157
 
@@ -443,12 +456,15 @@ PR URL, an issue number, or a named check actually read.* "Should be fine",
443
456
  "looks green" and "probably passing" are not evidence.
444
457
 
445
458
  Know what is *not* up there, though, because operators expect it to be: the
446
- orchestrator's own merge and release authority is **not** a hard boundary. It is
447
- config the two `authority` answers and it defaults to none. What is fixed
448
- above the banner is that a *worker* never merges or releases, and that PRs land
449
- one at a time with a freshness re-check. Delegating a release to the
450
- orchestrator does not touch either of those, so it needs no negotiation with the
451
- shipped half.
459
+ orchestrator's merge and release authority is **not** a hard boundary. It comes
460
+ from the two `authority` answers in config. Release execution has a second,
461
+ independent config control: `releasePolicy=none` mechanically blocks tags,
462
+ publishing, releases, and deploy commands even when
463
+ `authority.release=orchestrator`; `operator-brief` opens that gate for the
464
+ reviewed procedure. What is fixed above the banner is that a *worker* never
465
+ merges or releases, and that PRs land one at a time with a freshness re-check.
466
+ Changing either release control needs no negotiation with the shipped half, but
467
+ both must agree with the procedure below the banner.
452
468
 
453
469
  **Below the banner — rewrite from the interview.**
454
470
 
@@ -552,9 +568,11 @@ label; whether to rename the state labels; routing label prefix; then per repo t
552
568
  routing key, clone URL, default branch and **pre-push gates** (your Step 2
553
569
  proposal, in `cmd @ cwd` form); whether to add another repo; whether to set up
554
570
  **code-graph discovery** and the root its clones live under (Step 8); caps; the
555
- authority confirms; the worker model; the Telegram chat id for tier 2; the
556
- escalation fallback; whether an orchestrator session already runs elsewhere; the
557
- report scope; and finally whether to write `ORCHESTRATOR.md` + `POLICY.md`.
571
+ merge and release authority confirms; the independent **Release tool gate**
572
+ confirm (`none` or `operator-brief`); the worker model; the Telegram chat id for
573
+ tier 2; the escalation fallback; whether an orchestrator session already runs
574
+ elsewhere; the report scope; and finally whether to write `ORCHESTRATOR.md` +
575
+ `POLICY.md`.
558
576
 
559
577
  The end of the wizard is load-bearing:
560
578
 
@@ -565,6 +583,12 @@ The end of the wizard is load-bearing:
565
583
  - **Nothing changes before consent.** Setup creates no label, file, database, or
566
584
  arm marker before the operator agrees. Never answer that consent prompt for
567
585
  the operator.
586
+ - **Review authority and gate together.** If the procedure assigns tags,
587
+ publishing, release creation, or deploy commands to the orchestrator, the dry
588
+ run must show both `release=orchestrator` and
589
+ `releasePolicy=operator-brief`. `release=orchestrator` with
590
+ `releasePolicy=none` assigns the job while mechanically preventing it. A
591
+ human-owned release should normally remain `releasePolicy=none`.
568
592
  - **The host plan is part of consent.** For an external orchestrator, setup names
569
593
  the heartbeat file and both safety gates. It also names the staged systemd
570
594
  unit. An invalid existing heartbeat stops setup before any write.
@@ -151,6 +151,13 @@ actually asked, in one message, from evidence you already hold or go and fetch.
151
151
  Then stop. Do not continue loop narration in the same reply, and do not restate
152
152
  in-progress work unless they asked for it. The loop resumes on the next tick.
153
153
 
154
+ A message may also reach you **mid-tick** (delivery is steering: it arrives
155
+ between two of your tool calls). Treat it as an interrupt, not a new tick:
156
+ answer it immediately with `telegram_send` in one message, then return to the
157
+ duty you were in the middle of and finish it. Never abandon or restart the tick
158
+ because a message arrived, and never batch the answer "for the report" — the
159
+ person is waiting now.
160
+
154
161
  ## Escalation tiers
155
162
 
156
163
  | Tier | Meaning | Handled by |