omp-conductor 0.3.11 → 0.3.12

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 CHANGED
@@ -270,45 +270,32 @@ the question, which is the safer way to leave one alone.
270
270
 
271
271
  ### Keeping a brief current
272
272
 
273
- Upgrading the package does not upgrade a brief you are already running, and it is
274
- worth knowing exactly which half of that sentence is true.
273
+ The standing prompt is two layers:
275
274
 
276
- | What | Updates on `omp plugin install`? |
277
- | --- | --- |
278
- | `skills/conductor-onboarding/SKILL.md` | Yes. The session reads it from the installed package. |
279
- | `src/briefs/worker.md` | Yes. It is read per run, so the next worker gets the new text. |
280
- | `src/briefs/orchestrator.md` | Yes, but it is only a *template*: it is read when the wizard renders a brief. |
281
- | Your rendered `ORCHESTRATOR.md` | **No.** It was written once and is yours from then on. |
282
-
283
- That last row is the point. Once the wizard renders your brief, nothing in this
284
- package reads it back or rewrites it, so a later version that ships a new protocol
285
- above the `YOURS TO EDIT` banner is invisible to every fleet already running:
275
+ | Layer | File | Updates how? |
276
+ | --- | --- | --- |
277
+ | Package floor | `src/briefs/orchestrator.md` | Every tick recomposes it into `ORCHESTRATOR.md` from the installed package. `npm install` + restart is enough. |
278
+ | Fleet policy | `POLICY.md` | Yours. Setup writes the scaffold once; the Learning loop edits only this file. |
279
+ | Composed view | `ORCHESTRATOR.md` | Regenerated from floor + `POLICY.md` on each tick (and at setup). Do not hand-amend it for durable policy. |
280
+ | Worker brief | `src/briefs/worker.md` | Read per run from the package. |
281
+ | Onboarding skill | `skills/conductor-onboarding/SKILL.md` | Read from the installed package. |
286
282
 
287
283
  ```bash
288
- omp-conductor brief-upgrade # report only
289
- omp-conductor brief-upgrade --apply # replace the shipped half, keep yours
284
+ omp-conductor brief-upgrade # report overlay / legacy state
285
+ omp-conductor brief-upgrade --migrate # dry-run: bannered ORCHESTRATOR.md POLICY.md
286
+ omp-conductor brief-upgrade --migrate --apply
287
+ omp-conductor brief-upgrade --retrofit # #20: propose YOURS TO EDIT cut on a hand-written brief
288
+ omp-conductor brief-upgrade --retrofit --apply
290
289
  ```
291
290
 
292
- The banner is what makes this safe. Everything above it belongs to the package and
293
- everything below it belongs to you, so an upgrade replaces the first and copies the
294
- second across untouched, keeping the previous file as
295
- `ORCHESTRATOR.md.bak-<timestamp>`. Three cases where it will not write at all:
296
-
297
- - **Your brief has no banner** (hand-written, or predating the split). There is no
298
- way to tell which lines are yours, so it lists the sections the template has and
299
- yours does not, and leaves the file alone. Retitled sections count as present, so
300
- `## Reporting (low noise)` is not reported as a missing `## Reporting`.
301
- - **No config resolved**, so the template still carries its `{{PLACEHOLDER}}`
302
- coordinates. Merging it would write those literals into a live prompt.
303
- - **Nothing changed.** It says so and exits.
291
+ - **Overlay already active** (`POLICY.md` present): protocol updates need no brief-upgrade.
292
+ - **Legacy bannered brief**: `--migrate` lifts the owned half into `POLICY.md` and recomposes, with backups.
293
+ - **Hand-written brief** (no banner): `--retrofit` inserts the banner before the first Releases / Project context / Reporting / Amendments heading; then `--migrate`.
294
+ - **Legacy `--apply`**: still merges a bannered single-file brief when you need the old path.
304
295
 
305
- `--file PATH` checks a brief that is not where the wizard would have put it, which
306
- is the normal case on a dedicated fleet host: the supervising session runs from its
307
- own directory, and that host may never have configured a dispatch daemon.
296
+ `--file PATH` checks a brief that is not where the wizard would have put it.
308
297
 
309
- A brief with the **Learning loop** section has a second route. The session running
310
- from it can propose the missing sections itself, as a diff, for you to approve with
311
- a yes over Telegram, which is the same protocol it uses for any other amendment.
298
+ The **Learning loop** proposes diffs against `POLICY.md` for you to approve over Telegram.
312
299
 
313
300
  ## Quick start
314
301
 
@@ -1101,7 +1088,7 @@ omp-conductor daemon [--once] [--port N] [--project NAME]
1101
1088
  omp-conductor pause
1102
1089
  omp-conductor resume
1103
1090
  omp-conductor graph-setup [--project NAME] [--write]
1104
- omp-conductor brief-upgrade [--apply] [--file PATH] [--project NAME]
1091
+ omp-conductor brief-upgrade [--migrate|--retrofit] [--apply] [--file PATH] [--project NAME]
1105
1092
  omp-conductor help
1106
1093
  ```
1107
1094
 
@@ -1121,8 +1108,10 @@ omp-conductor help
1121
1108
  | `resume` | Allow claiming again. |
1122
1109
  | `graph-setup` | Print how to set up the code-graph indexes workers query instead of grepping: a `git clone` for every index-only clone that does not exist yet, the one-shot index command per repo, and a `cbm-reindex.service` + `cbm-reindex.timer` pair generated from the project's own repos and branches. Reads only, so it is safe on a host where you are not root. Exits `1` when no repo in the project has [`graphProject`](#configuration) set, because the fix is a wizard answer rather than a flag. See [Code-graph discovery](#code-graph-discovery). |
1123
1110
  | `--write` | Only for `graph-setup`. Writes the refresh script into the state directory and the two units into `/etc/systemd/system`, then prints the exact `systemctl daemon-reload && systemctl enable --now cbm-reindex.timer` to run. It never runs `systemctl` itself and never enables anything: that needs root, and a package that enables system timers behind your back is one you cannot audit by reading its output. |
1124
- | `brief-upgrade` | Compare a project's `ORCHESTRATOR.md` against the brief this version of the package ships. Reports by default; see [Keeping a brief current](#keeping-a-brief-current). |
1125
- | `--apply` | Only for `brief-upgrade`. Replaces the half above the `YOURS TO EDIT` banner and keeps everything below it, backing the previous file up first. Ignored when the brief cannot be split or the template is unrendered. |
1111
+ | `brief-upgrade` | Inspect the package-floor + `POLICY.md` overlay. Reports by default; see [Keeping a brief current](#keeping-a-brief-current). |
1112
+ | `--migrate` | Only for `brief-upgrade`. Lift a bannered `ORCHESTRATOR.md` owned half into `POLICY.md` and recompose. Dry-run unless `--apply`. |
1113
+ | `--retrofit` | Only for `brief-upgrade`. Propose (or with `--apply`, write) a `YOURS TO EDIT` banner before the first owned-topic heading on a hand-written brief. |
1114
+ | `--apply` | Only for `brief-upgrade`. Confirms `--migrate` / `--retrofit`, or legacy single-file merge above the banner. |
1126
1115
  | `--file PATH` | Only for `brief-upgrade`. Check a brief that is not where the wizard would have put it, on a host that may have no config at all. |
1127
1116
  | `help`, `--help`, `-h` | Print usage. An unknown or missing verb prints it too, and exits `2`. |
1128
1117
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "omp-conductor",
3
- "version": "0.3.11",
3
+ "version": "0.3.12",
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.",
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: conductor-onboarding
3
- description: Interview-driven onboarding for omp-conductor. Use when the user wants to set up conductor, onboard a new fleet or project, configure the fleet, asks for conductor setup help, asks what belongs in ORCHESTRATOR.md, or wants an agent's release and merge authority scoped and written down. Interviews the operator on release policy, escalation taste and reporting scope, reads each routing repo's CI to propose the real pre-push gates, learns the product and roadmap the fleet will groom, scaffolds the release procedure from the repo's own release workflows rather than from the operator's memory, tailors ORCHESTRATOR.md from the shipped template, verifies the worker brief's assumptions against the actual repos, finishes through the deterministic /conductor setup wizard, then builds the code-graph indexes workers query instead of grepping.
3
+ description: Interview-driven onboarding for omp-conductor. Use when the user wants to set up conductor, onboard a new fleet or project, configure the fleet, asks for conductor setup help, asks what belongs in POLICY.md / ORCHESTRATOR.md, or wants an agent's release and merge authority scoped and written down. Interviews the operator on release policy, escalation taste and reporting scope, reads each routing repo's CI to propose the real pre-push gates, learns the product and roadmap the fleet will groom, scaffolds the release procedure from the repo's own release workflows rather than from the operator's memory, tailors POLICY.md (and the composed ORCHESTRATOR.md view) from the shipped templates, verifies the worker brief's assumptions against the actual repos, finishes through the deterministic /conductor setup wizard, then builds the code-graph indexes workers query instead of grepping.
4
4
  ---
5
5
 
6
6
  # Onboarding a conductor fleet
@@ -51,8 +51,9 @@ cat ~/.omp/conductor/config.json # honours $OMP_CONDUCTOR_HOME
51
51
  - **`gh` missing `repo` or `project`?** Say so now. The wizard warns at the
52
52
  confirm, but a token that cannot label issues means every claim fails, and it
53
53
  is cheaper to fix before the interview than after.
54
- - **An `ORCHESTRATOR.md` already exists** at `<workspaceRoot>/ORCHESTRATOR.md`
55
- (default `~/.omp/conductor/worktrees/ORCHESTRATOR.md`)? Read it. It is the
54
+ - **A `POLICY.md` or `ORCHESTRATOR.md` already exists** under `<workspaceRoot>/`
55
+ (default `~/.omp/conductor/worktrees/`)? Read `POLICY.md` first when present —
56
+ that is the editable fleet policy. Otherwise read `ORCHESTRATOR.md`. It is the
56
57
  operator's accumulated policy, and it outranks the shipped template. Your job
57
58
  becomes amending it, and you must warn that a wizard re-run offers to overwrite
58
59
  it.
@@ -228,7 +229,7 @@ Two honesty notes to pass on:
228
229
  - **Neither scope is an outbound filter.** Nothing inspects the orchestrator's
229
230
  messages and drops the ones the scope did not ask for. It is a constraint handed
230
231
  to the model each turn, not a gate it is held to.
231
- - **Changing the scope later does not rewrite an existing `ORCHESTRATOR.md`.** The
232
+ - **Changing the scope later does not rewrite an existing `POLICY.md`.** The
232
233
  tick line changes; the brief does not. Whoever changes it must edit the brief's
233
234
  Reporting section too, or the session is carrying two versions of the policy.
234
235
 
@@ -553,7 +554,7 @@ proposal, in `cmd @ cwd` form); whether to add another repo; whether to set up
553
554
  **code-graph discovery** and the root its clones live under (Step 8); caps; the
554
555
  authority confirms; the worker model; the Telegram chat id for tier 2; the
555
556
  escalation fallback; whether an orchestrator session already runs elsewhere; the
556
- report scope; and finally whether to write `ORCHESTRATOR.md`.
557
+ report scope; and finally whether to write `ORCHESTRATOR.md` + `POLICY.md`.
557
558
 
558
559
  Two things about the end of it that you must not smooth over:
559
560
 
@@ -567,7 +568,7 @@ Two things about the end of it that you must not smooth over:
567
568
  no state database, no arm. If they decline, the machine is untouched. Never
568
569
  answer that confirm on their behalf.
569
570
 
570
- Say yes to writing `ORCHESTRATOR.md`, then **immediately apply the edits you
571
+ Say yes to writing `ORCHESTRATOR.md` + `POLICY.md`, then **immediately apply the edits you
571
572
  drafted in Steps 3, 4 and 5** to the file it wrote, and tell them the path. Note
572
573
  the trap for later: a future `/conductor setup` re-run offers to overwrite that
573
574
  file, and accepting loses every tailored word. Their brief is now a file worth