@indigoai-us/hq-cloud 6.14.36 → 6.14.37

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": "@indigoai-us/hq-cloud",
3
- "version": "6.14.36",
3
+ "version": "6.14.37",
4
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",
@@ -183,15 +183,20 @@ export async function executeCompanyFanout(options: {
183
183
  ...(event.errorCode ? { errorCode: event.errorCode } : {}),
184
184
  });
185
185
  } else if (event.type === "skip-junk-key-spelling") {
186
- // Deliberate skip: forwarded for visibility, NEVER pushed into
187
- // errors[] (policy hq-sync-deliberate-skip-not-fatal-error-exit2 —
188
- // a benign recurring skip must not gate exit 2 / Sentry alerts).
189
186
  options.emit({
190
187
  type: "skip-junk-key-spelling",
191
188
  company: companyLabel,
192
189
  path: event.path,
193
190
  journaledKey: event.journaledKey,
194
191
  });
192
+ } else if (event.type === "not-shipped") {
193
+ options.emit({
194
+ type: "not-shipped",
195
+ company: companyLabel,
196
+ reason: event.reason,
197
+ count: event.count,
198
+ samplePaths: event.samplePaths,
199
+ });
195
200
  }
196
201
  };
197
202
 
@@ -208,6 +213,8 @@ export async function executeCompanyFanout(options: {
208
213
  filesExcludedByPolicy: 0,
209
214
  filesExcludedByScope: 0,
210
215
  filesExcludedByIgnore: 0,
216
+ unreachablePaths: [],
217
+ linkedSubtreesNotShipped: [],
211
218
  conflictPaths: [],
212
219
  aborted: false,
213
220
  };
@@ -288,6 +295,15 @@ export async function executeCompanyFanout(options: {
288
295
  skipUnchanged: true,
289
296
  propagateDeletes: true,
290
297
  propagateDeletePolicy: options.resolveDeletePolicy(),
298
+ // `pushPaths` are INTERNAL walk roots (the company folder / the
299
+ // personal-vault dirs), never user input, so an unreachable entry
300
+ // here is a benign race — a directory removed between the scan and
301
+ // the push — and must not fail an unattended background sync. Record
302
+ // + report it (`not-shipped` event, `ShareResult.unreachablePaths`)
303
+ // and carry on. The interactive `hq sync push <path>` keeps the
304
+ // default "error" policy, which is where a user-typed path that
305
+ // silently ships nothing is a real bug (feedback_a51cb63d ask #2).
306
+ unreachablePathPolicy: "warn",
291
307
  onEvent: tagAndEmit,
292
308
  ...(options.uploadAuthor ? { author: options.uploadAuthor } : {}),
293
309
  ...(target.personalMode !== undefined
@@ -157,6 +157,8 @@ function defaultShareResult(overrides: Partial<ShareResult> = {}): ShareResult {
157
157
  filesExcludedByPolicy: 0,
158
158
  filesExcludedByScope: 0,
159
159
  filesExcludedByIgnore: 0,
160
+ unreachablePaths: [],
161
+ linkedSubtreesNotShipped: [],
160
162
  conflictPaths: [],
161
163
  aborted: false,
162
164
  ...overrides,
@@ -402,6 +402,10 @@ export type RunnerEvent =
402
402
  Extract<SyncProgressEvent, { type: "skip-junk-key-spelling" }>,
403
403
  "type"
404
404
  >)
405
+ | ({ type: "not-shipped"; company: string } & Omit<
406
+ Extract<SyncProgressEvent, { type: "not-shipped" }>,
407
+ "type"
408
+ >)
405
409
  | ({
406
410
  type: "complete";
407
411
  company: string;