omp-conductor 0.15.8 → 0.15.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.
Files changed (2) hide show
  1. package/package.json +1 -1
  2. package/src/setup.ts +17 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "omp-conductor",
3
- "version": "0.15.8",
3
+ "version": "0.15.9",
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.",
package/src/setup.ts CHANGED
@@ -146,6 +146,12 @@ export interface SetupAnswers {
146
146
  * pinned one.
147
147
  */
148
148
  workerModel?: string;
149
+ /**
150
+ * Routable-candidate count below which the tick prompt says to groom. The
151
+ * wizard never asks for it — it is hand-edited — so it exists here only to
152
+ * survive an amend of some other area (#369).
153
+ */
154
+ groomBelow?: number;
149
155
  telegramChatId?: string;
150
156
  /** Forum topic for tier-2 Telegram pages; absent keeps flat-chat 0.13 behaviour. */
151
157
  telegramTopicId?: number;
@@ -743,9 +749,16 @@ export function buildProject(a: SetupAnswers): ProjectConfig {
743
749
  // `planUsage` is the one cap that is not a number, and the wizard does not
744
750
  // ask for it: naming a provider allowance window means reading
745
751
  // `omp usage --json` on the fleet host first, so it stays a documented
746
- // hand-edited key (#110). Skipped here to keep this numeric loop honest.
752
+ // hand-edited key (#110). Skipped here to keep this numeric loop honest,
753
+ // and carried below instead — an unrelated amend that deleted the weekly
754
+ // allowance guard would be exactly the silent loss #369 is about.
747
755
  if (key !== "planUsage" && typeof value === "number") caps[key] = value;
748
756
  }
757
+ // `null` is a spelling in its own right — "no allowance guard" — so both it
758
+ // and a configured window survive an amend unchanged.
759
+ if (a.caps.planUsage !== undefined) {
760
+ caps.planUsage = a.caps.planUsage === null ? null : { ...a.caps.planUsage };
761
+ }
749
762
 
750
763
  return {
751
764
  name: a.projectName,
@@ -757,6 +770,8 @@ export function buildProject(a: SetupAnswers): ProjectConfig {
757
770
  ...(a.workerModel !== undefined && a.workerModel.trim().length > 0
758
771
  ? { workerModel: a.workerModel.trim() }
759
772
  : {}),
773
+ // A documented hand-edited key, so an unrelated amend must not delete it.
774
+ ...(a.groomBelow === undefined ? {} : { groomBelow: a.groomBelow }),
760
775
  escalation,
761
776
  authority: { ...a.authority },
762
777
  // Written out in full, never as the legacy string: the file then says which
@@ -957,6 +972,7 @@ export function answersFromProject(p: ProjectConfig): SetupAnswers {
957
972
  // Set only when present, never as an explicit `undefined`: an absent key is
958
973
  // what keeps the rewritten config identical to the one that was read.
959
974
  if (p.workerModel !== undefined) answers.workerModel = p.workerModel;
975
+ if (p.groomBelow !== undefined) answers.groomBelow = p.groomBelow;
960
976
  if (p.escalation.telegramChatId !== undefined) answers.telegramChatId = p.escalation.telegramChatId;
961
977
  if (p.escalation.telegramTopicId !== undefined) answers.telegramTopicId = p.escalation.telegramTopicId;
962
978
  if (p.recoveryMerges !== undefined) {