@indigoai-us/hq-cli 5.217.0 → 5.218.0

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/CHANGELOG.md CHANGED
@@ -2,6 +2,14 @@
2
2
 
3
3
  ## [Unreleased]
4
4
 
5
+ ## [5.218.0] — 2026-09-26
6
+
7
+ ### Fixed
8
+
9
+ - The reconcile summary now lists opted-in lanes it could not resume and why.
10
+ Stderr provides reason-specific guidance and recommends reapplying opt-in only
11
+ when that can help.
12
+
5
13
  ## [5.217.0] — 2026-09-26
6
14
 
7
15
  ### Fixed
@@ -9,6 +9,7 @@ import { type LivenessDeps } from "./liveness.js";
9
9
  import { type EnvelopeRepairSpawnInput, type SpawnLaneDeps } from "./spawn.js";
10
10
  import { type ThrottleDeps } from "./throttle.js";
11
11
  import { readLanesRegistryFlag } from "./registry-flag.js";
12
+ import { type KeepAliveBlockedReason } from "./keep-alive.js";
12
13
  import type { LaneRecord, LivenessState, QueuedReason, QuestionRecord, SeniorRef } from "./types.js";
13
14
  import { type LaneMesh } from "./mesh-events.js";
14
15
  /** Spec §9: unanswered at the current hop for 60 minutes → one hop. */
@@ -49,6 +50,10 @@ export interface ReconcileSummary {
49
50
  dead_host: ReconcileChange[];
50
51
  heartbeats: string[];
51
52
  skipped: ReconcileSkip[];
53
+ keep_alive_blocked: Array<{
54
+ id: string;
55
+ reason: KeepAliveBlockedReason;
56
+ }>;
52
57
  errors: Array<{
53
58
  message: string;
54
59
  code?: string;
@@ -66,6 +66,7 @@ function emptySummary(dryRun) {
66
66
  dead_host: [],
67
67
  heartbeats: [],
68
68
  skipped: [],
69
+ keep_alive_blocked: [],
69
70
  errors: [],
70
71
  heartbeat_at: null,
71
72
  };
@@ -1417,12 +1418,38 @@ function recordKeepAliveEvent(hqRoot, laneId, summary, event) {
1417
1418
  });
1418
1419
  }
1419
1420
  }
1421
+ function keepAliveSkipGuidance(laneId, reason) {
1422
+ switch (reason) {
1423
+ case "missing_opt_in_time":
1424
+ return `if appropriate, run hq lanes keep-alive ${laneId} --on`;
1425
+ case "not_opted_in":
1426
+ return "explicit opt-in is required before keep-alive can resume this lane";
1427
+ case "envelope_before_opt_in":
1428
+ return `the latest envelope predates opt-in; review the lane with hq lanes show ${laneId}`;
1429
+ case "interruption_before_opt_in":
1430
+ return `the interruption predates opt-in; review the lane with hq lanes show ${laneId}`;
1431
+ case "missing_interruption_time":
1432
+ return "the interruption time is unavailable; inspect the watcher classification before resuming";
1433
+ case "retired":
1434
+ return "the lane is retired; resolve its retired status before resuming";
1435
+ case "superseded":
1436
+ return "a newer lead exists for this project; continue on that lane";
1437
+ case "retired_list_invalid":
1438
+ return "the retired lane list is invalid; repair workspace/lane-briefs/juniors.json before retrying";
1439
+ case "terminal_state":
1440
+ return `the lane is in a terminal state; review it with hq lanes show ${laneId} before starting replacement work`;
1441
+ }
1442
+ }
1420
1443
  function recordKeepAliveSkip(hqRoot, lane, reason, summary, deps, detail) {
1421
1444
  summary.skipped.push({
1422
1445
  kind: "lane",
1423
1446
  id: lane.lane_id,
1424
1447
  why: `keep_alive_${reason}${detail ? `: ${detail}` : ""}`,
1425
1448
  });
1449
+ if (lane.keep_alive === true) {
1450
+ summary.keep_alive_blocked.push({ id: lane.lane_id, reason });
1451
+ process.stderr.write(`hq lanes reconcile: keep-alive blocked for lane ${lane.lane_id} (${reason}); ${keepAliveSkipGuidance(lane.lane_id, reason)}\n`);
1452
+ }
1426
1453
  if (deps.dryRun || lane.keep_alive_blocked_reason === reason)
1427
1454
  return;
1428
1455
  try {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@indigoai-us/hq-cli",
3
- "version": "5.217.0",
3
+ "version": "5.218.0",
4
4
  "description": "HQ by Indigo management CLI — modules and cloud sync",
5
5
  "main": "dist/index.js",
6
6
  "bin": {