@indigoai-us/hq-cli 5.13.0 → 5.14.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,89 @@
2
2
 
3
3
  ## [Unreleased]
4
4
 
5
+ ## [5.14.0] — 2026-05-14
6
+
7
+ ### Changed
8
+
9
+ - **`hq sync now` and `hq sync push --all` no longer delete vault files
10
+ this machine never owned.** `propagateDeletes: true` in the underlying
11
+ `share()` engine now defaults to `propagateDeletePolicy: "owned-only"`
12
+ — only journal entries with `direction: "up"` (paths this machine
13
+ previously uploaded) are eligible for remote `DeleteObject`. This
14
+ closes two reproducer-grade failure modes:
15
+ - A behind machine running `sync now` for the first time would erase
16
+ peer uploads from the vault because its push-then-pull ordering
17
+ interpreted "local missing → propagate delete" before the pull leg
18
+ fetched the new content.
19
+ - A machine with stricter local ignore rules (older HQ layout,
20
+ custom `.hqignore`) would erase paths that lived in the vault but
21
+ were filtered out of its local walk — the next push concluded the
22
+ user had deleted them.
23
+
24
+ Path-scoped pushes (`hq sync push <path>...`) are unaffected — they
25
+ never opted into `propagateDeletes` to begin with. Set
26
+ `propagateDeletePolicy: "all"` via the `share()` library API to opt
27
+ back into the legacy any-direction behaviour; there is no CLI flag
28
+ for that today.
29
+
30
+ ### Fixed
31
+
32
+ - **`hq --version` and the update-check banner now read from
33
+ `package.json` at runtime instead of a hardcoded literal.** Two stale
34
+ literals (`src/index.ts` → `5.12.4`, `src/cli-version.ts` →
35
+ `5.12.1`) had been drifting across the 5.12.x and 5.13.x releases.
36
+ They're now sourced from the same place the npm tarball is, so they
37
+ stay accurate by construction.
38
+
39
+ - **Filter-symmetry guard on `propagateDeletes`.** `computeDeletePlan`
40
+ now intersects the journal-based delete candidates with the same
41
+ `createIgnoreFilter(hqRoot)` predicate the pull leg uses. Paths the
42
+ current ignore filter would reject are never delete-propagated, even
43
+ if they appear in the journal. Pairs with the `direction` guard
44
+ above: a path is delete-eligible only when (a) the journal records
45
+ us as its uploader AND (b) the ignore filter accepts it AND (c) the
46
+ local file is missing.
47
+
48
+ ### Added (developer-facing)
49
+
50
+ - **`ShareOptions.propagateDeletePolicy: "owned-only" | "all"`** on
51
+ the `share()` library export. Defaults to `"owned-only"` whenever
52
+ `propagateDeletes: true`. The `sync-runner` (Tauri menubar) and
53
+ `hq sync now` / `hq sync push --all` (CLI) all inherit the safer
54
+ default automatically.
55
+
56
+ - **Cross-package pre-publish smoke test
57
+ (`.github/workflows/publish.yml`).** Between hq-cloud and hq-cli
58
+ publishes, the workflow installs each consumer in an isolated tmpdir
59
+ — using the workspace tarball when the consumer's package.json
60
+ version is new, or fetching `name@version` from npm when it is
61
+ already published — and boots the binary with `--version`. The boot
62
+ exercises the full module-load graph; transitive `@indigoai-us/*`
63
+ resolution goes through the npm registry (matching what a customer
64
+ install would see). Catches the v5.13.0 failure mode — a consumer
65
+ imports a producer symbol that the published producer doesn't yet
66
+ export — before the broken package reaches consumers.
67
+ Notably the smoke runs for already-published consumers too: a
68
+ producer bump earlier in the same workflow can retroactively break
69
+ consumers via caret-range transitive resolution, so the consumer's
70
+ bytes being immutable does NOT mean its runtime behaviour is locked.
71
+ Bypass: set repo variable `WORKFLOW_ALLOW_BROKEN_PUBLISH=1`
72
+ (audited via the workflow log).
73
+
74
+ ## [5.13.1] — 2026-05-14
75
+
76
+ ### Fixed
77
+
78
+ - **Republish hq-cli alongside `@indigoai-us/hq-cloud@5.16.0` to ship the
79
+ `computePersonalVaultPaths` helper.** `5.13.0` imported the new helper
80
+ from hq-cloud, but the publish workflow's idempotent skip-if-already-on-npm
81
+ gate suppressed the hq-cloud republish (its `package.json` still said
82
+ 5.15.0). The runtime resolution of `^5.1.0` then pulled the older
83
+ hq-cloud, and every `hq` invocation crashed with `SyntaxError: ... does
84
+ not provide an export named 'computePersonalVaultPaths'`. 5.13.1 carries
85
+ no source delta; it bumps the version so the workflow republishes and
86
+ forces hq-cloud@5.16.0 to ship alongside.
87
+
5
88
  ## [5.13.0] — 2026-05-14
6
89
 
7
90
  ### Added
@@ -1,2 +1,2 @@
1
- export declare const CLI_VERSION = "5.12.1";
1
+ export declare const CLI_VERSION: string;
2
2
  //# sourceMappingURL=cli-version.d.ts.map
@@ -1,5 +1,11 @@
1
1
 
2
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="f65738b2-fa67-5b68-a0c8-c73fba12c6c5")}catch(e){}}();
3
- export const CLI_VERSION = "5.12.1";
2
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="9d613278-0268-5da9-a6d0-f1b4f15d405a")}catch(e){}}();
3
+ import { readFileSync } from "node:fs";
4
+ import { fileURLToPath } from "node:url";
5
+ import path from "node:path";
6
+ const here = path.dirname(fileURLToPath(import.meta.url));
7
+ const pkgPath = path.resolve(here, "..", "package.json");
8
+ const pkg = JSON.parse(readFileSync(pkgPath, "utf-8"));
9
+ export const CLI_VERSION = pkg.version;
4
10
  //# sourceMappingURL=cli-version.js.map
5
- //# debugId=f65738b2-fa67-5b68-a0c8-c73fba12c6c5
11
+ //# debugId=9d613278-0268-5da9-a6d0-f1b4f15d405a
package/dist/index.js CHANGED
@@ -3,7 +3,7 @@
3
3
  * HQ CLI - Module management, package management, and cloud sync for HQ
4
4
  */
5
5
 
6
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="56a9367e-c800-55df-9c55-44274965648e")}catch(e){}}();
6
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="9cc0bf93-9c18-53aa-addd-954425115886")}catch(e){}}();
7
7
  import { Command } from "commander";
8
8
  import { initSentry, Sentry } from "./sentry.js";
9
9
  import { registerAddCommand } from "./commands/add.js";
@@ -31,6 +31,7 @@ import { registerMembersCommand } from "./commands/members.js";
31
31
  import { registerFeedbackCommand } from "./commands/feedback.js";
32
32
  import { sanitizeArgv } from "./utils/feedback-diagnostics.js";
33
33
  import { maybeWarnNewVersion, refreshVersionCache, } from "./utils/version-check.js";
34
+ import { CLI_VERSION } from "./cli-version.js";
34
35
  // Swallow EPIPE when a downstream reader (e.g. `source <(…)`, `| head`) closes the pipe early.
35
36
  const onPipeError = (err) => {
36
37
  if (err.code === "EPIPE") {
@@ -46,7 +47,7 @@ const program = new Command();
46
47
  program
47
48
  .name("hq")
48
49
  .description("HQ management CLI — modules, packages, and cloud sync")
49
- .version("5.12.4");
50
+ .version(CLI_VERSION);
50
51
  // Module management subcommand group
51
52
  const modulesCmd = program
52
53
  .command("modules")
@@ -119,4 +120,4 @@ registerFeedbackCommand(program);
119
120
  }
120
121
  })();
121
122
  //# sourceMappingURL=index.js.map
122
- //# debugId=56a9367e-c800-55df-9c55-44274965648e
123
+ //# debugId=9cc0bf93-9c18-53aa-addd-954425115886
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@indigoai-us/hq-cli",
3
- "version": "5.13.0",
3
+ "version": "5.14.0",
4
4
  "description": "HQ by Indigo management CLI — modules and cloud sync",
5
5
  "main": "dist/index.js",
6
6
  "bin": {
@@ -1 +1,9 @@
1
- export const CLI_VERSION = "5.12.1";
1
+ import { readFileSync } from "node:fs";
2
+ import { fileURLToPath } from "node:url";
3
+ import path from "node:path";
4
+
5
+ const here = path.dirname(fileURLToPath(import.meta.url));
6
+ const pkgPath = path.resolve(here, "..", "package.json");
7
+ const pkg = JSON.parse(readFileSync(pkgPath, "utf-8")) as { version: string };
8
+
9
+ export const CLI_VERSION: string = pkg.version;
package/src/index.ts CHANGED
@@ -34,6 +34,7 @@ import {
34
34
  maybeWarnNewVersion,
35
35
  refreshVersionCache,
36
36
  } from "./utils/version-check.js";
37
+ import { CLI_VERSION } from "./cli-version.js";
37
38
 
38
39
  // Swallow EPIPE when a downstream reader (e.g. `source <(…)`, `| head`) closes the pipe early.
39
40
  const onPipeError = (err: NodeJS.ErrnoException): void => {
@@ -53,7 +54,7 @@ const program = new Command();
53
54
  program
54
55
  .name("hq")
55
56
  .description("HQ management CLI — modules, packages, and cloud sync")
56
- .version("5.12.4");
57
+ .version(CLI_VERSION);
57
58
 
58
59
  // Module management subcommand group
59
60
  const modulesCmd = program