@indigoai-us/hq-cloud 6.5.0 → 6.7.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.
Files changed (52) hide show
  1. package/dist/bin/sync-runner.d.ts +4 -35
  2. package/dist/bin/sync-runner.d.ts.map +1 -1
  3. package/dist/bin/sync-runner.js +14 -104
  4. package/dist/bin/sync-runner.js.map +1 -1
  5. package/dist/bin/sync-runner.test.js +19 -0
  6. package/dist/bin/sync-runner.test.js.map +1 -1
  7. package/dist/cli/sync-scope.test.js +67 -0
  8. package/dist/cli/sync-scope.test.js.map +1 -1
  9. package/dist/cli/sync.d.ts +19 -0
  10. package/dist/cli/sync.d.ts.map +1 -1
  11. package/dist/cli/sync.js +62 -19
  12. package/dist/cli/sync.js.map +1 -1
  13. package/dist/cognito-auth.d.ts +27 -0
  14. package/dist/cognito-auth.d.ts.map +1 -1
  15. package/dist/cognito-auth.js +97 -0
  16. package/dist/cognito-auth.js.map +1 -1
  17. package/dist/index.d.ts +6 -4
  18. package/dist/index.d.ts.map +1 -1
  19. package/dist/index.js +8 -2
  20. package/dist/index.js.map +1 -1
  21. package/dist/machine-auth.test.d.ts +14 -0
  22. package/dist/machine-auth.test.d.ts.map +1 -0
  23. package/dist/machine-auth.test.js +216 -0
  24. package/dist/machine-auth.test.js.map +1 -0
  25. package/dist/s3.d.ts.map +1 -1
  26. package/dist/s3.js +15 -5
  27. package/dist/s3.js.map +1 -1
  28. package/dist/s3.test.js +71 -2
  29. package/dist/s3.test.js.map +1 -1
  30. package/dist/scope-shrink.d.ts +70 -7
  31. package/dist/scope-shrink.d.ts.map +1 -1
  32. package/dist/scope-shrink.js +102 -23
  33. package/dist/scope-shrink.js.map +1 -1
  34. package/dist/scope-shrink.test.js +63 -0
  35. package/dist/scope-shrink.test.js.map +1 -1
  36. package/dist/sync/pull-scope.d.ts +50 -0
  37. package/dist/sync/pull-scope.d.ts.map +1 -0
  38. package/dist/sync/pull-scope.js +129 -0
  39. package/dist/sync/pull-scope.js.map +1 -0
  40. package/package.json +2 -2
  41. package/src/bin/sync-runner.test.ts +23 -0
  42. package/src/bin/sync-runner.ts +19 -116
  43. package/src/cli/sync-scope.test.ts +84 -0
  44. package/src/cli/sync.ts +90 -17
  45. package/src/cognito-auth.ts +159 -0
  46. package/src/index.ts +21 -1
  47. package/src/machine-auth.test.ts +279 -0
  48. package/src/s3.test.ts +91 -1
  49. package/src/s3.ts +15 -5
  50. package/src/scope-shrink.test.ts +71 -0
  51. package/src/scope-shrink.ts +164 -20
  52. package/src/sync/pull-scope.ts +161 -0
@@ -144,10 +144,31 @@ function classifyOrphan(relPath, entry, hqRoot) {
144
144
  }
145
145
  return { path: relPath, entry, clean: true };
146
146
  }
147
+ /** Followable next-step advice for a blocked scope shrink, per entry point. */
148
+ function scopeShrinkAdvice(ctx) {
149
+ switch (ctx) {
150
+ case "cli":
151
+ return ("Re-run with `--force-scope-shrink` to disown them now (dirty files " +
152
+ "are KEPT on disk, only un-tracked from sync), or run " +
153
+ "`hq sync narrow --apply` to migrate with a confirmation prompt.");
154
+ case "runner":
155
+ return ("The menubar sync cannot take this flag — open a terminal and run " +
156
+ "`hq sync narrow --apply` to migrate this membership (you confirm the " +
157
+ "file list), or `hq sync now --force-scope-shrink` once to proceed " +
158
+ "(dirty files are KEPT on disk, only un-tracked).");
159
+ default:
160
+ return ("Run `hq sync narrow --apply` to migrate with confirmation, or pass " +
161
+ "`forceScopeShrink` (dirty files are kept on disk, only un-tracked).");
162
+ }
163
+ }
147
164
  /**
148
165
  * Structured error thrown when the engine refuses to proceed because a scope
149
166
  * shrink would orphan dirty files. The CLI catches this and renders the
150
167
  * operator-facing message; the engine never prints directly.
168
+ *
169
+ * `adviceContext` makes the message FOLLOWABLE from each entry point — the old
170
+ * fixed "pass --force-scope-shrink" line was impossible to act on from the
171
+ * menubar runner, which rejects that flag (DEV-1768 fix #2).
151
172
  */
152
173
  export class ScopeShrinkBlockedError extends Error {
153
174
  companyUid;
@@ -155,16 +176,18 @@ export class ScopeShrinkBlockedError extends Error {
155
176
  toMode;
156
177
  dirty;
157
178
  clean;
179
+ adviceContext;
158
180
  code = "SCOPE_SHRINK_BLOCKED";
159
- constructor(companyUid, fromMode, toMode, dirty, clean) {
181
+ constructor(companyUid, fromMode, toMode, dirty, clean, adviceContext = "engine") {
160
182
  super(`Sync scope shrank for ${companyUid} (${fromMode} → ${toMode}); ` +
161
- `${dirty.length} dirty file(s) outside the new scope would be ` +
162
- `pruned from the journal. Resolve or pass --force-scope-shrink.`);
183
+ `${dirty.length} locally-modified file(s) outside the new scope ` +
184
+ `would be un-tracked from sync. ${scopeShrinkAdvice(adviceContext)}`);
163
185
  this.companyUid = companyUid;
164
186
  this.fromMode = fromMode;
165
187
  this.toMode = toMode;
166
188
  this.dirty = dirty;
167
189
  this.clean = clean;
190
+ this.adviceContext = adviceContext;
168
191
  this.name = "ScopeShrinkBlockedError";
169
192
  }
170
193
  }
@@ -183,53 +206,109 @@ export class ScopeShrinkLargePruneError extends Error {
183
206
  toMode;
184
207
  cleanCount;
185
208
  cap;
209
+ adviceContext;
186
210
  code = "SCOPE_SHRINK_LARGE_PRUNE";
187
- constructor(companyUid, toMode, cleanCount, cap) {
188
- super(`Refusing to auto-prune ${cleanCount} local file(s) for ${companyUid} ` +
211
+ constructor(companyUid, toMode, cleanCount, cap, adviceContext = "engine") {
212
+ super(`Refusing to auto-move ${cleanCount} local file(s) for ${companyUid} ` +
189
213
  `(${toMode} scope) in one sync — exceeds the safety cap of ${cap}. ` +
190
- `Run \`hq sync narrow --apply\` to migrate with confirmation, raise ` +
191
- `HQ_SYNC_MAX_AUTO_PRUNE, or pass --force-scope-shrink.`);
214
+ `Raise HQ_SYNC_MAX_AUTO_PRUNE, or ${scopeShrinkAdvice(adviceContext)}`);
192
215
  this.companyUid = companyUid;
193
216
  this.toMode = toMode;
194
217
  this.cleanCount = cleanCount;
195
218
  this.cap = cap;
219
+ this.adviceContext = adviceContext;
196
220
  this.name = "ScopeShrinkLargePruneError";
197
221
  }
198
222
  }
199
223
  /**
200
- * Apply a scope-shrink plan: delete clean orphans on disk + tombstone their
201
- * journal entries. With `forceScopeShrink: true`, dirty orphans are
202
- * preserved on disk but their journal entries are also tombstoned.
224
+ * Move a clean orphan from the working tree into the quarantine tree,
225
+ * preserving its relative path. Same-device `rename` first (cheap, atomic);
226
+ * cross-device falls back to copy+unlink. A missing source is a no-op (the
227
+ * user already removed it — harmless). Returns true iff the file was relocated
228
+ * (or was already absent), false only on an unexpected error the caller should
229
+ * surface.
230
+ */
231
+ function quarantineOrphan(srcAbs, destAbs) {
232
+ fs.mkdirSync(path.dirname(destAbs), { recursive: true });
233
+ try {
234
+ fs.renameSync(srcAbs, destAbs);
235
+ }
236
+ catch (err) {
237
+ const code = err.code;
238
+ if (code === "ENOENT")
239
+ return; // source already gone — nothing to move
240
+ if (code === "EXDEV") {
241
+ // Cross-device move: copy then unlink. cpSync handles files + symlinks.
242
+ fs.cpSync(srcAbs, destAbs, { recursive: true, verbatimSymlinks: true });
243
+ fs.rmSync(srcAbs, { recursive: true, force: true });
244
+ return;
245
+ }
246
+ throw err;
247
+ }
248
+ }
249
+ /**
250
+ * Apply a scope-shrink plan: dispose of clean orphans (delete OR quarantine)
251
+ * + tombstone their journal entries. With `forceScopeShrink: true`, dirty
252
+ * orphans are PRESERVED on disk and only their journal entries are tombstoned
253
+ * (so they stop being re-flagged on every pull — the idempotent recovery seam).
203
254
  *
204
- * Returns counts for the audit log row (`scope_shrink_blocked` /
205
- * `scope_shrink_forced`).
255
+ * Returns counts AND named paths so the caller can report exactly what moved /
256
+ * was un-tracked — never a silent purge (DEV-1768 fix #3).
206
257
  */
207
258
  export function applyScopeShrink(input) {
208
259
  const { journal, plan, hqRoot, forceScopeShrink } = input;
209
260
  const reason = input.reason ?? "scope_shrink";
261
+ // Quarantine only when explicitly asked AND a destination is provided;
262
+ // otherwise fall back to delete so we always make progress.
263
+ const quarantining = input.cleanDisposition === "quarantine" && !!input.quarantineRoot;
210
264
  let cleanRemoved = 0;
265
+ let cleanQuarantined = 0;
211
266
  let dirtyTombstoned = 0;
267
+ const removedPaths = [];
268
+ const quarantinedPaths = [];
269
+ const dirtyKeptPaths = [];
212
270
  for (const orphan of plan.clean) {
213
271
  const absPath = path.join(hqRoot, orphan.path);
214
- try {
215
- fs.unlinkSync(absPath);
272
+ if (quarantining) {
273
+ const destAbs = path.join(input.quarantineRoot, orphan.path);
274
+ quarantineOrphan(absPath, destAbs);
275
+ tombstoneEntry(journal, orphan.path, reason);
276
+ cleanQuarantined++;
277
+ quarantinedPaths.push(orphan.path);
216
278
  }
217
- catch (err) {
218
- const code = err.code;
219
- if (code !== "ENOENT")
220
- throw err; // missing-on-disk is fine; anything else escalates
279
+ else {
280
+ try {
281
+ fs.unlinkSync(absPath);
282
+ }
283
+ catch (err) {
284
+ const code = err.code;
285
+ if (code !== "ENOENT")
286
+ throw err; // missing-on-disk is fine; anything else escalates
287
+ }
288
+ tombstoneEntry(journal, orphan.path, reason);
289
+ cleanRemoved++;
290
+ removedPaths.push(orphan.path);
221
291
  }
222
- tombstoneEntry(journal, orphan.path, reason);
223
- cleanRemoved++;
224
292
  }
225
293
  if (forceScopeShrink) {
226
294
  for (const orphan of plan.dirty) {
227
- // Do NOT delete the file — that's the entire point of the `--force`
228
- // contract: keep dirty content on disk, prune only the journal entry.
295
+ // Do NOT delete the file — keep dirty content on disk, prune only the
296
+ // journal entry so it stops being re-flagged as an orphan on each pull.
229
297
  tombstoneEntry(journal, orphan.path, reason);
230
298
  dirtyTombstoned++;
299
+ dirtyKeptPaths.push(orphan.path);
231
300
  }
232
301
  }
233
- return { cleanRemoved, dirtyTombstoned };
302
+ return {
303
+ cleanRemoved,
304
+ cleanQuarantined,
305
+ dirtyTombstoned,
306
+ removedPaths,
307
+ quarantinedPaths,
308
+ dirtyKeptPaths,
309
+ ...(quarantining && quarantinedPaths.length > 0
310
+ ? { quarantineRoot: input.quarantineRoot }
311
+ : {}),
312
+ };
234
313
  }
235
314
  //# sourceMappingURL=scope-shrink.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"scope-shrink.js","sourceRoot":"","sources":["../src/scope-shrink.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scope-shrink.js","sourceRoot":"","sources":["../src/scope-shrink.ts"],"names":[],"mappings":"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"}
@@ -438,6 +438,49 @@ describe("applyScopeShrink", () => {
438
438
  });
439
439
  expect(journal.files["companies/indigo/scratch/clean.md"]?.removedReason).toBe("narrow_apply");
440
440
  });
441
+ // DEV-1768 fix #3: clean orphans are MOVED to quarantine (recoverable),
442
+ // not unlinked, when `cleanDisposition: "quarantine"`.
443
+ it("quarantines clean orphans (moves, not deletes) and reports named paths", () => {
444
+ const rel = "companies/indigo/scratch/clean.md";
445
+ const abs = path.join(hqRoot, rel);
446
+ fs.mkdirSync(path.dirname(abs), { recursive: true });
447
+ fs.writeFileSync(abs, "clean");
448
+ const past = Date.now() - 60_000;
449
+ fs.utimesSync(abs, past / 1000, past / 1000);
450
+ const quarantineRoot = path.join(hqRoot, ".hq", "scope-quarantine", "indigo");
451
+ const journal = {
452
+ ...emptyJournal(),
453
+ files: {
454
+ [rel]: { hash: sha256("clean"), size: 5, syncedAt: new Date().toISOString(), direction: "down" },
455
+ },
456
+ };
457
+ const plan = buildScopeShrinkPlan({
458
+ journal,
459
+ hqRoot,
460
+ lastPrefixSet: ["companies/indigo/"],
461
+ currentPrefixSet: ["companies/indigo/meetings/"],
462
+ });
463
+ const result = applyScopeShrink({
464
+ journal,
465
+ plan,
466
+ hqRoot,
467
+ forceScopeShrink: false,
468
+ cleanDisposition: "quarantine",
469
+ quarantineRoot,
470
+ });
471
+ expect(result.cleanQuarantined).toBe(1);
472
+ expect(result.cleanRemoved).toBe(0);
473
+ expect(result.quarantinedPaths).toEqual([rel]);
474
+ expect(result.removedPaths).toEqual([]);
475
+ expect(result.quarantineRoot).toBe(quarantineRoot);
476
+ // Moved, not deleted: gone from the working tree, present + intact in quarantine.
477
+ expect(fs.existsSync(abs)).toBe(false);
478
+ const quarantined = path.join(quarantineRoot, rel);
479
+ expect(fs.existsSync(quarantined)).toBe(true);
480
+ expect(fs.readFileSync(quarantined, "utf-8")).toBe("clean");
481
+ // Journal entry tombstoned so it stops being re-flagged (idempotent).
482
+ expect(journal.files[rel]?.removedAt).toBeTruthy();
483
+ });
441
484
  });
442
485
  describe("ScopeShrinkBlockedError", () => {
443
486
  it("carries from/to syncMode + dirty/clean orphan lists for the CLI", () => {
@@ -460,5 +503,25 @@ describe("ScopeShrinkBlockedError", () => {
460
503
  expect(err.dirty).toHaveLength(1);
461
504
  expect(err.name).toBe("ScopeShrinkBlockedError");
462
505
  });
506
+ // DEV-1768 fix #2: advice must be FOLLOWABLE from the entry point that throws.
507
+ // The old message always said "pass --force-scope-shrink", which the menubar
508
+ // runner cannot accept.
509
+ const mk = (ctx) => new ScopeShrinkBlockedError("cmp_x", "all", "shared", [], [], ctx);
510
+ it("runner-context advice points at a terminal command, NOT an impossible flag", () => {
511
+ const msg = mk("runner").message;
512
+ // The followable path from the menubar is a terminal command.
513
+ expect(msg).toContain("hq sync narrow --apply");
514
+ // It must NOT imply the flag is acceptable to the menubar itself.
515
+ expect(msg).toContain("menubar sync cannot take this flag");
516
+ });
517
+ it("cli-context advice offers the flag the CLI actually accepts", () => {
518
+ const msg = mk("cli").message;
519
+ expect(msg).toContain("--force-scope-shrink");
520
+ expect(msg).toContain("hq sync narrow --apply");
521
+ });
522
+ it("defaults to the engine/library advice when no context is given", () => {
523
+ expect(mk().adviceContext).toBe("engine");
524
+ expect(mk().message).toContain("hq sync narrow --apply");
525
+ });
463
526
  });
464
527
  //# sourceMappingURL=scope-shrink.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"scope-shrink.test.js","sourceRoot":"","sources":["../src/scope-shrink.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scope-shrink.test.js","sourceRoot":"","sources":["../src/scope-shrink.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ import type { ExplicitGrant, MembershipSyncConfig, SyncMode } from "../vault-client.js";
2
+ /**
3
+ * Minimal structural surface `resolvePullScope` needs. Both the runner's
4
+ * `VaultClientSurface` and hq-cli's concrete `VaultClient` satisfy it, so
5
+ * either can be passed without an adapter.
6
+ */
7
+ export interface PullScopeClient {
8
+ listMyMemberships(): Promise<Array<{
9
+ companyUid: string;
10
+ membershipKey: string;
11
+ }>>;
12
+ getMembershipSyncConfig?: (membershipId: string) => Promise<MembershipSyncConfig>;
13
+ listMyExplicitGrants?: (companyUid: string) => Promise<ExplicitGrant[]>;
14
+ }
15
+ /**
16
+ * Effective download scope for one company leg (US-005). Resolved per company
17
+ * just before its pull, then handed to `sync()` as `{ syncMode, prefixSet }`.
18
+ */
19
+ export interface PullScope {
20
+ syncMode: SyncMode;
21
+ /** Coalesced company-relative prefixes; omitted/undefined for `all`. */
22
+ prefixSet?: string[];
23
+ }
24
+ /**
25
+ * Resolve the effective download scope for a company target.
26
+ *
27
+ * - `all` → no prefix set; full-bucket pull (legacy behavior).
28
+ * - `shared` → coalesced caller explicit grants (company-relative paths,
29
+ * same namespace as `RemoteFile.key`).
30
+ * - `custom` → coalesced `customPaths` from the sync-config row.
31
+ *
32
+ * DEGRADE-TO-`all` CONTRACT: any failure (missing client method, membership
33
+ * not found, network error, grant fetch error) returns `{ syncMode: "all" }`.
34
+ * A transient failure must NEVER silently narrow scope — that would prune the
35
+ * local tree. A genuinely-empty grant list (the method exists and returns `[]`)
36
+ * is a real "nothing shared with me" and IS allowed to narrow.
37
+ */
38
+ export declare function resolvePullScope(client: PullScopeClient, companyUid: string, slug: string, hqRoot?: string): Promise<PullScope>;
39
+ /**
40
+ * Read the per-machine pin set (`<hqRoot>/.hq/pins.json`) and return the
41
+ * company-relative pinned prefixes for `slug`. These are prefixes the user
42
+ * materialized on demand via `hq files get` that must survive a scoped pull.
43
+ *
44
+ * Tolerant by construction: a missing, unreadable, or malformed file yields
45
+ * `[]` (no pins) — pins only ever widen scope, so "no pins" is the safe
46
+ * default. Empty-string entries are dropped (an everything-pin is meaningless
47
+ * here; `all` mode already covers that case).
48
+ */
49
+ export declare function readPinnedPrefixes(hqRoot: string, slug: string): string[];
50
+ //# sourceMappingURL=pull-scope.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pull-scope.d.ts","sourceRoot":"","sources":["../../src/sync/pull-scope.ts"],"names":[],"mappings":"AAwBA,OAAO,KAAK,EACV,aAAa,EACb,oBAAoB,EACpB,QAAQ,EACT,MAAM,oBAAoB,CAAC;AAE5B;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,iBAAiB,IAAI,OAAO,CAC1B,KAAK,CAAC;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE,CAAC,CACrD,CAAC;IACF,uBAAuB,CAAC,EAAE,CACxB,YAAY,EAAE,MAAM,KACjB,OAAO,CAAC,oBAAoB,CAAC,CAAC;IACnC,oBAAoB,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;CACzE;AAED;;;GAGG;AACH,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,QAAQ,CAAC;IACnB,wEAAwE;IACxE,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,eAAe,EACvB,UAAU,EAAE,MAAM,EAGlB,IAAI,EAAE,MAAM,EAGZ,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,SAAS,CAAC,CAwDpB;AAED;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAczE"}
@@ -0,0 +1,129 @@
1
+ /**
2
+ * Effective per-company PULL scope resolution (US-005), shared between
3
+ * `hq-sync-runner` (the menubar's background sync) and `hq sync pull|now`
4
+ * (the hq-cli foreground sync).
5
+ *
6
+ * BACKGROUND — why this lives in one place. The runner historically owned
7
+ * this resolver while hq-cli's pull paths resolved the membership's sync-mode
8
+ * only to drive the narrow-hint banner and then called `sync()` WITHOUT a
9
+ * `syncMode`/`prefixSet`. That meant every hq-cli pull silently ran
10
+ * `syncMode: "all"` and stamped an `all`-mode `PullRecord` (prefixSet `[""]`)
11
+ * — even for a membership whose real mode is `shared`/`custom`. For an owner
12
+ * (whose STS is wide by role-bypass) that journals the WHOLE company. The next
13
+ * menubar runner sync then resolves the REAL narrowed scope, scope-shrinks
14
+ * against the seeded `[""]`, and — if any out-of-scope file was edited locally
15
+ * — throws `ScopeShrinkBlockedError(all → shared)` and exits 2 on every
16
+ * subsequent run: a permanent wedge (DEV-1768 / feedback_f7663e92).
17
+ *
18
+ * The two surfaces drifting apart is exactly what caused the wedge, so the
19
+ * resolver is defined ONCE here and consumed by both. Any future change to how
20
+ * scope is derived now lands for the runner and the CLI in lockstep.
21
+ */
22
+ import * as fs from "fs";
23
+ import * as path from "path";
24
+ import { coalescePrefixes, grantPathToPrefix } from "../prefix-coalesce.js";
25
+ /**
26
+ * Resolve the effective download scope for a company target.
27
+ *
28
+ * - `all` → no prefix set; full-bucket pull (legacy behavior).
29
+ * - `shared` → coalesced caller explicit grants (company-relative paths,
30
+ * same namespace as `RemoteFile.key`).
31
+ * - `custom` → coalesced `customPaths` from the sync-config row.
32
+ *
33
+ * DEGRADE-TO-`all` CONTRACT: any failure (missing client method, membership
34
+ * not found, network error, grant fetch error) returns `{ syncMode: "all" }`.
35
+ * A transient failure must NEVER silently narrow scope — that would prune the
36
+ * local tree. A genuinely-empty grant list (the method exists and returns `[]`)
37
+ * is a real "nothing shared with me" and IS allowed to narrow.
38
+ */
39
+ export async function resolvePullScope(client, companyUid,
40
+ // Company slug — required to normalize grant paths (which may be anchored
41
+ // at `companies/<slug>/` or `<slug>/`) into the company-relative namespace.
42
+ slug,
43
+ // Local HQ root — used to read the per-machine pin set (`.hq/pins.json`).
44
+ // When omitted, pins are simply not unioned (no behavior change).
45
+ hqRoot) {
46
+ if (!client.getMembershipSyncConfig)
47
+ return { syncMode: "all" };
48
+ try {
49
+ const memberships = await client.listMyMemberships();
50
+ const m = memberships.find((x) => x.companyUid === companyUid);
51
+ if (!m)
52
+ return { syncMode: "all" };
53
+ const cfg = await client.getMembershipSyncConfig(m.membershipKey);
54
+ if (cfg.syncMode === "all")
55
+ return { syncMode: "all" };
56
+ // Pins are company-relative prefixes a user explicitly materialized via
57
+ // `hq files get`. They're unioned into the scope so a scoped pull keeps
58
+ // them instead of pruning them as out-of-scope orphans. Pins only WIDEN
59
+ // scope, never narrow — and `all` mode (handled above) ignores them since
60
+ // it pulls everything anyway.
61
+ const pinPrefixes = hqRoot ? readPinnedPrefixes(hqRoot, slug) : [];
62
+ if (cfg.syncMode === "custom") {
63
+ const customPrefixes = (cfg.customPaths ?? []).map((p) => grantPathToPrefix(p, slug));
64
+ // A bare-everything entry ("" — e.g. a `*` path) collapses under
65
+ // `coalescePrefixes` (which drops empties) to "nothing", which would
66
+ // prune the whole tree. An everything-scope is semantically `all`.
67
+ if (customPrefixes.some((p) => p === ""))
68
+ return { syncMode: "all" };
69
+ return {
70
+ syncMode: "custom",
71
+ prefixSet: coalescePrefixes([...customPrefixes, ...pinPrefixes]),
72
+ };
73
+ }
74
+ // shared: scope to the caller's explicit grants. Real grant paths are
75
+ // inconsistent — full (`companies/<slug>/x/*`), slug-anchored
76
+ // (`<slug>/x/*`), company-relative (`x/*`), bare globs (`*`), and exact
77
+ // files all coexist in production — so each is normalized via
78
+ // `grantPathToPrefix` into a company-relative, startsWith-friendly prefix
79
+ // (the namespace the engine's `RemoteFile.key`s live in) before coalescing.
80
+ //
81
+ // SAFETY: if the client can't fetch grants, we must NOT fall through to an
82
+ // empty `shared` scope — that would tell the engine "nothing is in scope"
83
+ // and scope-shrink would prune every clean local file. Degrade to `all`
84
+ // instead. A genuinely-empty grant list (the method exists and returns
85
+ // []) is a real "nothing shared with me" and is allowed to narrow.
86
+ if (!client.listMyExplicitGrants)
87
+ return { syncMode: "all" };
88
+ const grants = await client.listMyExplicitGrants(companyUid);
89
+ const sharedPrefixes = grants.map((g) => grantPathToPrefix(g.path, slug));
90
+ // A wildcard grant (`*`) normalizes to "" = everything. Since
91
+ // `coalescePrefixes` drops empties (collapsing "everything" to "nothing"),
92
+ // treat any such grant as full-access `all` rather than risk pruning.
93
+ if (sharedPrefixes.some((p) => p === ""))
94
+ return { syncMode: "all" };
95
+ return {
96
+ syncMode: "shared",
97
+ prefixSet: coalescePrefixes([...sharedPrefixes, ...pinPrefixes]),
98
+ };
99
+ }
100
+ catch {
101
+ // Degrade to `all` — never prune on a resolution failure.
102
+ return { syncMode: "all" };
103
+ }
104
+ }
105
+ /**
106
+ * Read the per-machine pin set (`<hqRoot>/.hq/pins.json`) and return the
107
+ * company-relative pinned prefixes for `slug`. These are prefixes the user
108
+ * materialized on demand via `hq files get` that must survive a scoped pull.
109
+ *
110
+ * Tolerant by construction: a missing, unreadable, or malformed file yields
111
+ * `[]` (no pins) — pins only ever widen scope, so "no pins" is the safe
112
+ * default. Empty-string entries are dropped (an everything-pin is meaningless
113
+ * here; `all` mode already covers that case).
114
+ */
115
+ export function readPinnedPrefixes(hqRoot, slug) {
116
+ try {
117
+ const raw = fs.readFileSync(path.join(hqRoot, ".hq", "pins.json"), "utf-8");
118
+ const parsed = JSON.parse(raw);
119
+ const list = parsed?.pins?.[slug];
120
+ if (Array.isArray(list)) {
121
+ return list.filter((p) => typeof p === "string" && p.length > 0);
122
+ }
123
+ }
124
+ catch {
125
+ /* missing / unreadable / malformed → no pins */
126
+ }
127
+ return [];
128
+ }
129
+ //# sourceMappingURL=pull-scope.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pull-scope.js","sourceRoot":"","sources":["../../src/sync/pull-scope.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@indigoai-us/hq-cloud",
3
- "version": "6.5.0",
4
- "description": "HQ by Indigo cloud sync engine \u2014 bidirectional S3 sync for mobile access",
3
+ "version": "6.7.0",
4
+ "description": "HQ by Indigo cloud sync engine bidirectional S3 sync for mobile access",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
7
7
  "bin": {
@@ -1286,6 +1286,29 @@ describe("per-company fanout", () => {
1286
1286
  expect(opts.hqRoot).toBe("/tmp/fake-hq");
1287
1287
  });
1288
1288
 
1289
+ // DEV-1768 fix #1/#2: the runner's pull leg MUST request the non-throwing,
1290
+ // self-healing scope-shrink policy — the menubar can act on no interactive
1291
+ // flag, so a thrown ScopeShrinkBlockedError there means a permanent exit-2
1292
+ // wedge.
1293
+ it("pull leg forwards scopeShrinkPolicy: 'auto-recover' to sync()", async () => {
1294
+ const syncSpy = vi.fn().mockResolvedValue(defaultSyncResult());
1295
+ const deps = makeDeps({
1296
+ createVaultClient: () =>
1297
+ makeVaultStub({
1298
+ memberships: [{ companyUid: "cmp_a" }],
1299
+ entityGet: (uid: string) =>
1300
+ Promise.resolve({ uid, slug: "acme" } as unknown as EntityInfo),
1301
+ }),
1302
+ sync: syncSpy,
1303
+ });
1304
+
1305
+ const code = await runRunner(["--companies", "--hq-root", "/tmp/fake-hq"], deps);
1306
+ expect(code).toBe(0);
1307
+ expect(syncSpy).toHaveBeenCalledTimes(1);
1308
+ const opts = syncSpy.mock.calls[0][0] as SyncOptions;
1309
+ expect(opts.scopeShrinkPolicy).toBe("auto-recover");
1310
+ });
1311
+
1289
1312
  it("continues the fanout when one company's sync throws", async () => {
1290
1313
  const slugs: Record<string, string> = { cmp_a: "acme", cmp_b: "beta" };
1291
1314
  const deps = makeDeps({