@linzumi/cli 1.0.131 → 1.0.133

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": "@linzumi/cli",
3
- "version": "1.0.131",
3
+ "version": "1.0.133",
4
4
  "description": "Linzumi CLI \u2014 point a Codex agent at the real code on your laptop, with your team watching and steering from shared threads.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -28,16 +28,18 @@ import { build } from 'esbuild';
28
28
 
29
29
  const packageRoot = dirname(dirname(fileURLToPath(import.meta.url)));
30
30
 
31
+ // PARITY SCOPE (owner ruling 2026-07-18, failover becomes a user-decision
32
+ // capability): the compared surface is the SHARED F2 recovery engine only.
33
+ // The TS-only frozen failover rung (flag-OFF forever, superseded) is
34
+ // excluded: no failover constants, no failover flag case, no failover
35
+ // decide input/grant, no commitFailover op, no per-entry failover
36
+ // sub-object, and the rung vocabulary is filtered to the shared members -
37
+ // the ReScript commander has no automatic failover surface to compare.
31
38
  const driverSource = `
32
39
  import {
33
40
  appendFateLadderEntry,
34
- commitFateLadderFailoverOutcome,
35
41
  commitFateLadderHoldDispatch,
36
42
  createFateLadderRun,
37
- crossHarnessFailoverDetail,
38
- crossHarnessFailoverEnabled,
39
- crossHarnessFailoverReason,
40
- crossHarnessFailoverRungSlot,
41
43
  decideFateLadderStep,
42
44
  defaultFateLadderBudgets,
43
45
  fateLadderBudgets,
@@ -71,22 +73,6 @@ function runJson(run) {
71
73
  atMs: entry.atMs,
72
74
  detail: entry.detail === undefined ? null : entry.detail,
73
75
  resetAtMs: entry.resetAtMs === undefined ? null : entry.resetAtMs,
74
- failover:
75
- entry.failover === undefined
76
- ? null
77
- : {
78
- sourceHarness: entry.failover.sourceHarness,
79
- targetHarness: entry.failover.targetHarness,
80
- model: entry.failover.model === undefined ? null : entry.failover.model,
81
- transpiledItemCount:
82
- entry.failover.transpiledItemCount === undefined
83
- ? null
84
- : entry.failover.transpiledItemCount,
85
- redactedReasoningCount:
86
- entry.failover.redactedReasoningCount === undefined
87
- ? null
88
- : entry.failover.redactedReasoningCount,
89
- },
90
76
  })),
91
77
  };
92
78
  }
@@ -152,17 +138,8 @@ function runScheduleCase(caseInput) {
152
138
  inPlaceResume: op.grants?.inPlaceResume === true,
153
139
  redispatch: op.grants?.redispatch === true,
154
140
  workerRebuild: op.grants?.workerRebuild === true,
155
- crossHarnessFailover: op.grants?.crossHarnessFailover === true,
156
141
  },
157
142
  rateLimitResetAtMs: op.resetAtMs ?? undefined,
158
- failover:
159
- op.failover === undefined || op.failover === null
160
- ? undefined
161
- : {
162
- sourceHarness: op.failover.sourceHarness,
163
- targetHarness: op.failover.targetHarness,
164
- model: op.failover.model ?? undefined,
165
- },
166
143
  });
167
144
  if (decision.kind !== 'stand') {
168
145
  current = decision.run;
@@ -175,24 +152,6 @@ function runScheduleCase(caseInput) {
175
152
  current = commitFateLadderHoldDispatch(current, op.nowMs);
176
153
  steps.push({ run: runJson(current) });
177
154
  }
178
- } else if (op.op === 'commitFailover') {
179
- if (current === undefined) {
180
- steps.push({ skipped: true });
181
- } else {
182
- current = commitFateLadderFailoverOutcome(current, {
183
- outcome: op.outcome,
184
- atMs: op.nowMs,
185
- failover: {
186
- sourceHarness: op.failover.sourceHarness,
187
- targetHarness: op.failover.targetHarness,
188
- model: op.failover.model ?? undefined,
189
- transpiledItemCount: op.failover.transpiledItemCount ?? undefined,
190
- redactedReasoningCount: op.failover.redactedReasoningCount ?? undefined,
191
- },
192
- detail: op.detail ?? undefined,
193
- });
194
- steps.push({ run: runJson(current) });
195
- }
196
155
  } else if (op.op === 'append') {
197
156
  if (current === undefined) {
198
157
  steps.push({ skipped: true });
@@ -227,7 +186,13 @@ function runCase(input) {
227
186
  switch (input.kind) {
228
187
  case 'constants':
229
188
  return {
230
- fateLadderRungs,
189
+ // The shared recovery vocabulary only: the TS-only frozen
190
+ // cross_harness_failover member is excluded by name (2026-07-18
191
+ // ruling) - the ReScript engine's fateLadderRungs is the filtered
192
+ // array by construction.
193
+ fateLadderRungs: fateLadderRungs.filter(
194
+ (rung) => rung !== 'cross_harness_failover'
195
+ ),
231
196
  inPlaceResumeMaxAttempts,
232
197
  fateLadderPolicies,
233
198
  defaultFateLadderBudgets,
@@ -235,25 +200,7 @@ function runCase(input) {
235
200
  redispatchAfterLocalFailureReason,
236
201
  workerRebuildRetryReason,
237
202
  rateLimitHoldReasonPrefix,
238
- crossHarnessFailoverRungSlot,
239
- crossHarnessFailoverReason,
240
- crossHarnessFailoverDetailSamples: [
241
- crossHarnessFailoverDetail({
242
- sourceHarness: 'codex',
243
- targetHarness: 'claude_code',
244
- model: 'parity-model-slug',
245
- transpiledItemCount: 12,
246
- redactedReasoningCount: 3,
247
- }),
248
- crossHarnessFailoverDetail({
249
- sourceHarness: 'codex',
250
- targetHarness: 'claude_code',
251
- model: undefined,
252
- }),
253
- ],
254
203
  };
255
- case 'failoverFlag':
256
- return crossHarnessFailoverEnabled(input.env ?? {});
257
204
  case 'budgets':
258
205
  return fateLadderBudgets(input.env ?? {});
259
206
  case 'holdReason':