@azure-id/orc 1.4.1 → 1.4.2

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": "@azure-id/orc",
3
- "version": "1.4.1",
3
+ "version": "1.4.2",
4
4
  "description": "ORC — an orchestrator skill constellation for Claude Code: intake, planning, scored parallel subagents, code-pattern matching, review, verify, ship, plus a project knowledge-base wiki.",
5
5
  "bin": {
6
6
  "orc": "bin/cli.js"
@@ -205,12 +205,19 @@ them where you want them. One rule decides where a component may go:
205
205
  > A line may hold a component only if every line above it holds at least one.
206
206
 
207
207
  So line 1 must hold something before line 2 can, and line 2 before line 3. Each
208
- line holds at most five components. The panel will not let you make an illegal
208
+ line holds at most six components. The panel will not let you make an illegal
209
209
  move, and it tells you why.
210
210
 
211
211
  Every component can be changed: its words, its colour, its shape, how wide it
212
212
  is, and when it is allowed to disappear.
213
213
 
214
+ **The shape decides what the other settings can do.** Only these shapes print a
215
+ short name in front of the value: `plain`, `label-value`, `bracket`, `angle`,
216
+ `badge`, `pill` and `stack`. A bar, an icon and a bare value have no room for
217
+ one, so the panel switches the Name box off for them and says so. The same is
218
+ true of the number settings: a bar has a width and a colour ramp, and no number
219
+ format at all.
220
+
214
221
  **Three things a terminal cannot do**, said plainly so you do not look for them:
215
222
 
216
223
  | You may want | What you get |
@@ -1147,16 +1147,27 @@ function custom(d, ctx) {
1147
1147
  if (!engine.BINDINGS[b]) return slFallback(orcDir, "statusline-layout-skew");
1148
1148
  }
1149
1149
 
1150
- // Rung 5. The cheap shape guard: at most three lines, at most five
1150
+ // Rung 5. The cheap shape guard: at most three lines, at most `max_per_line`
1151
1151
  // components on any of them, and the dense-prefix rule —
1152
1152
  // A line may hold a component only if every line above it holds at least one.
1153
+ //
1154
+ // THE CAP AND THE COUNTING RULE ARE BOTH THE COMPILER'S (v1.4.2). This held
1155
+ // its own `5` and counted EVERY item op, so it disagreed with the validator
1156
+ // twice: it bounced a legal six-part line, and it bounced a legal five plus
1157
+ // a spacer. Both fell silently back to the shipped lines with the reason
1158
+ // only in a ledger file, which reads exactly like "my sixth part reset the
1159
+ // bar to the default". The cap rides on the lock (already gated on
1160
+ // `orc_version` at rung 3, so a stale copy cannot outlive its build) and
1161
+ // the compiler marks a structural op `s` — this cannot know that on its
1162
+ // own, because a compiled op carries an INSTANCE id and never a type.
1153
1163
  if (!Array.isArray(prog.lines) || prog.lines.length > 3)
1154
1164
  return slFallback(orcDir, "statusline-layout-invalid");
1165
+ const cap = Number(lock.max_per_line) > 0 ? Number(lock.max_per_line) : 6;
1155
1166
  let seenEmpty = false;
1156
1167
  for (const l of prog.lines) {
1157
- const n = (l.ops || []).filter((o) => o.op === "item").length;
1158
- if (n > 5) return slFallback(orcDir, "statusline-layout-invalid");
1159
- if (n === 0) seenEmpty = true;
1168
+ const ops = (l.ops || []).filter((o) => o.op === "item");
1169
+ if (ops.filter((o) => !o.s).length > cap) return slFallback(orcDir, "statusline-layout-invalid");
1170
+ if (ops.length === 0) seenEmpty = true;
1160
1171
  else if (seenEmpty) return slFallback(orcDir, "statusline-layout-invalid");
1161
1172
  }
1162
1173
 
@@ -182,10 +182,13 @@ function render(d, tasks) {
182
182
 
183
183
  // Rung 5. A subagent row is ONE line by construction — Claude Code renders
184
184
  // one row per task — so the board's three-line shape does not apply and the
185
- // cheap guard is simply "one line, at most five things on it".
185
+ // cheap guard is simply "one line, at most `max_per_line` things on it".
186
186
  if (!Array.isArray(prog.lines) || !prog.lines.length) return null;
187
187
  const line = prog.lines[0];
188
- if ((line.ops || []).filter((o) => o.op === "item").length > 5) return null;
188
+ // The same cap, from the same place, counted the same way (v1.4.2). A
189
+ // hardcoded number here is a second idea of how much one line may say.
190
+ const cap = Number(lock && lock.max_per_line) > 0 ? Number(lock.max_per_line) : 6;
191
+ if ((line.ops || []).filter((o) => o.op === "item" && !o.s).length > cap) return null;
189
192
 
190
193
  // Rung 6. One row per task, each rendered with THAT TASK bound.
191
194
  const now = Date.now();