@indigoai-us/hq-cloud 6.14.8 → 6.14.9

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 (47) hide show
  1. package/dist/bin/sync-runner-company.d.ts.map +1 -1
  2. package/dist/bin/sync-runner-company.js +8 -0
  3. package/dist/bin/sync-runner-company.js.map +1 -1
  4. package/dist/bin/sync-runner-planning.d.ts +1 -1
  5. package/dist/bin/sync-runner-planning.d.ts.map +1 -1
  6. package/dist/bin/sync-runner-planning.js +15 -1
  7. package/dist/bin/sync-runner-planning.js.map +1 -1
  8. package/dist/bin/sync-runner.d.ts +12 -0
  9. package/dist/bin/sync-runner.d.ts.map +1 -1
  10. package/dist/bin/sync-runner.js +26 -0
  11. package/dist/bin/sync-runner.js.map +1 -1
  12. package/dist/bin/sync-runner.test.js +68 -1
  13. package/dist/bin/sync-runner.test.js.map +1 -1
  14. package/dist/cli/sync-scope.test.js +3 -1
  15. package/dist/cli/sync-scope.test.js.map +1 -1
  16. package/dist/cli/sync.d.ts +6 -6
  17. package/dist/cli/sync.d.ts.map +1 -1
  18. package/dist/cli/sync.js +38 -41
  19. package/dist/cli/sync.js.map +1 -1
  20. package/dist/cli/sync.test.js +51 -2
  21. package/dist/cli/sync.test.js.map +1 -1
  22. package/dist/manifest-reconcile.d.ts +27 -0
  23. package/dist/manifest-reconcile.d.ts.map +1 -0
  24. package/dist/manifest-reconcile.js +120 -0
  25. package/dist/manifest-reconcile.js.map +1 -0
  26. package/dist/manifest-reconcile.test.d.ts +2 -0
  27. package/dist/manifest-reconcile.test.d.ts.map +1 -0
  28. package/dist/manifest-reconcile.test.js +97 -0
  29. package/dist/manifest-reconcile.test.js.map +1 -0
  30. package/dist/s3.d.ts +12 -1
  31. package/dist/s3.d.ts.map +1 -1
  32. package/dist/s3.js +51 -18
  33. package/dist/s3.js.map +1 -1
  34. package/dist/s3.test.js +12 -1
  35. package/dist/s3.test.js.map +1 -1
  36. package/package.json +1 -1
  37. package/src/bin/sync-runner-company.ts +7 -0
  38. package/src/bin/sync-runner-planning.ts +16 -2
  39. package/src/bin/sync-runner.test.ts +82 -1
  40. package/src/bin/sync-runner.ts +43 -0
  41. package/src/cli/sync-scope.test.ts +3 -1
  42. package/src/cli/sync.test.ts +59 -2
  43. package/src/cli/sync.ts +53 -53
  44. package/src/manifest-reconcile.test.ts +107 -0
  45. package/src/manifest-reconcile.ts +160 -0
  46. package/src/s3.test.ts +18 -0
  47. package/src/s3.ts +64 -30
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Reconcile successfully pulled cloud companies into the local manifest.
3
+ *
4
+ * The personal-vault leg also carries `companies/manifest.yaml`, so this runs
5
+ * only after the complete fanout has settled. That makes the locally
6
+ * materialized cloud companies authoritative for their own manifest entries
7
+ * without discarding entries the personal vault already had.
8
+ */
9
+ import type { EntityInfo } from "./vault-client.js";
10
+ export interface ManifestReconcileTarget {
11
+ uid: string;
12
+ slug: string;
13
+ personalMode?: boolean;
14
+ }
15
+ export interface ManifestReconcileOptions {
16
+ hqRoot: string;
17
+ targets: readonly ManifestReconcileTarget[];
18
+ completedCompanySlugs: ReadonlySet<string>;
19
+ getEntity: (uid: string) => Promise<EntityInfo>;
20
+ }
21
+ /**
22
+ * Atomically merge live, successfully pulled company targets into
23
+ * `companies/manifest.yaml`. Targets that are personal, incomplete, deleted,
24
+ * no longer resolvable, or not materialized on disk are intentionally ignored.
25
+ */
26
+ export declare function reconcileCompanyManifest(options: ManifestReconcileOptions): Promise<void>;
27
+ //# sourceMappingURL=manifest-reconcile.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest-reconcile.d.ts","sourceRoot":"","sources":["../src/manifest-reconcile.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAOH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEpD,MAAM,WAAW,uBAAuB;IACtC,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,SAAS,uBAAuB,EAAE,CAAC;IAC5C,qBAAqB,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC3C,SAAS,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;CACjD;AA6DD;;;;GAIG;AACH,wBAAsB,wBAAwB,CAC5C,OAAO,EAAE,wBAAwB,GAChC,OAAO,CAAC,IAAI,CAAC,CAgEf"}
@@ -0,0 +1,120 @@
1
+ /**
2
+ * Reconcile successfully pulled cloud companies into the local manifest.
3
+ *
4
+ * The personal-vault leg also carries `companies/manifest.yaml`, so this runs
5
+ * only after the complete fanout has settled. That makes the locally
6
+ * materialized cloud companies authoritative for their own manifest entries
7
+ * without discarding entries the personal vault already had.
8
+ */
9
+ import { randomUUID } from "node:crypto";
10
+ import * as fs from "node:fs";
11
+ import * as path from "node:path";
12
+ import yaml from "js-yaml";
13
+ function isRecord(value) {
14
+ return value !== null && typeof value === "object" && !Array.isArray(value);
15
+ }
16
+ function isLiveCompany(entity, uid) {
17
+ return (entity.uid === uid &&
18
+ entity.type === "company" &&
19
+ entity.status === "active" &&
20
+ typeof entity.name === "string" &&
21
+ entity.name.length > 0 &&
22
+ typeof entity.bucketName === "string" &&
23
+ entity.bucketName.length > 0);
24
+ }
25
+ function hasCompanyDirectory(companiesDir, slug) {
26
+ const resolvedCompaniesDir = path.resolve(companiesDir);
27
+ const companyDir = path.resolve(resolvedCompaniesDir, slug);
28
+ if (path.dirname(companyDir) !== resolvedCompaniesDir)
29
+ return false;
30
+ try {
31
+ return fs.statSync(companyDir).isDirectory();
32
+ }
33
+ catch {
34
+ return false;
35
+ }
36
+ }
37
+ function loadManifest(manifestPath) {
38
+ try {
39
+ const raw = fs.readFileSync(manifestPath, "utf8");
40
+ const parsed = yaml.load(raw);
41
+ return isRecord(parsed) ? parsed : null;
42
+ }
43
+ catch (err) {
44
+ if (err.code === "ENOENT")
45
+ return {};
46
+ return null;
47
+ }
48
+ }
49
+ function writeManifestAtomically(manifestPath, document) {
50
+ const temporaryPath = path.join(path.dirname(manifestPath), `.manifest-${process.pid}-${randomUUID()}.yaml`);
51
+ fs.writeFileSync(temporaryPath, yaml.dump(document, { lineWidth: -1 }), "utf8");
52
+ fs.renameSync(temporaryPath, manifestPath);
53
+ }
54
+ /**
55
+ * Atomically merge live, successfully pulled company targets into
56
+ * `companies/manifest.yaml`. Targets that are personal, incomplete, deleted,
57
+ * no longer resolvable, or not materialized on disk are intentionally ignored.
58
+ */
59
+ export async function reconcileCompanyManifest(options) {
60
+ const companiesDir = path.join(options.hqRoot, "companies");
61
+ const candidates = [];
62
+ for (const target of options.targets) {
63
+ if (target.personalMode === true ||
64
+ !options.completedCompanySlugs.has(target.slug) ||
65
+ !hasCompanyDirectory(companiesDir, target.slug)) {
66
+ continue;
67
+ }
68
+ try {
69
+ const entity = await options.getEntity(target.uid);
70
+ if (isLiveCompany(entity, target.uid)) {
71
+ candidates.push({ slug: target.slug, entity });
72
+ }
73
+ }
74
+ catch {
75
+ // The target is not presently a live, resolvable company. Never mint a
76
+ // manifest entry from stale fanout data.
77
+ }
78
+ }
79
+ if (candidates.length === 0)
80
+ return;
81
+ const manifestPath = path.join(companiesDir, "manifest.yaml");
82
+ const document = loadManifest(manifestPath);
83
+ if (!document)
84
+ return;
85
+ let companies;
86
+ if (document.companies === undefined) {
87
+ companies = {};
88
+ document.companies = companies;
89
+ }
90
+ else if (isRecord(document.companies)) {
91
+ companies = document.companies;
92
+ }
93
+ else {
94
+ // A malformed `companies` key is user state; refusing to replace it is
95
+ // safer than losing a manifest that cannot be interpreted unambiguously.
96
+ return;
97
+ }
98
+ let changed = false;
99
+ for (const { slug, entity } of candidates) {
100
+ const existing = companies[slug];
101
+ if (existing !== undefined && !isRecord(existing))
102
+ continue;
103
+ const entry = existing ?? {};
104
+ if (entry.name === entity.name &&
105
+ entry.cloud_uid === entity.uid &&
106
+ entry.bucket_name === entity.bucketName) {
107
+ continue;
108
+ }
109
+ companies[slug] = {
110
+ ...entry,
111
+ name: entity.name,
112
+ cloud_uid: entity.uid,
113
+ bucket_name: entity.bucketName,
114
+ };
115
+ changed = true;
116
+ }
117
+ if (changed)
118
+ writeManifestAtomically(manifestPath, document);
119
+ }
120
+ //# sourceMappingURL=manifest-reconcile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest-reconcile.js","sourceRoot":"","sources":["../src/manifest-reconcile.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=manifest-reconcile.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest-reconcile.test.d.ts","sourceRoot":"","sources":["../src/manifest-reconcile.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,97 @@
1
+ import { afterEach, describe, expect, it } from "vitest";
2
+ import * as fs from "node:fs";
3
+ import * as os from "node:os";
4
+ import * as path from "node:path";
5
+ import yaml from "js-yaml";
6
+ import { reconcileCompanyManifest } from "./manifest-reconcile.js";
7
+ let hqRoot;
8
+ afterEach(() => {
9
+ if (hqRoot) {
10
+ fs.rmSync(hqRoot, { recursive: true, force: true });
11
+ hqRoot = undefined;
12
+ }
13
+ });
14
+ describe("reconcileCompanyManifest", () => {
15
+ it("atomically restores one successful cloud entry after the personal leg without replacing existing manifest state", async () => {
16
+ hqRoot = fs.mkdtempSync(path.join(os.tmpdir(), "hq-manifest-reconcile-"));
17
+ const companiesDir = path.join(hqRoot, "companies");
18
+ fs.mkdirSync(path.join(companiesDir, "acme"), { recursive: true });
19
+ fs.mkdirSync(path.join(companiesDir, "failed"), { recursive: true });
20
+ fs.mkdirSync(path.join(companiesDir, "deleted"), { recursive: true });
21
+ // This is the older manifest the personal-vault leg pulled after the
22
+ // cloud-company legs completed. The final merge must retain this state and
23
+ // add only the live, successful cloud target.
24
+ const manifestPath = path.join(companiesDir, "manifest.yaml");
25
+ fs.writeFileSync(manifestPath, `version: 3\nsettings:\n keep: true\ncompanies:\n local-only:\n name: Local Only\n repos:\n - repos/local\n preserved:\n name: Keep Me\n cloud_uid: cmp_preserved\n`);
26
+ const entities = {
27
+ cmp_acme: {
28
+ uid: "cmp_acme",
29
+ slug: "acme",
30
+ type: "company",
31
+ status: "active",
32
+ name: "Acme Inc",
33
+ bucketName: "hq-vault-cmp-acme",
34
+ createdAt: "2026-01-01T00:00:00Z",
35
+ },
36
+ cmp_failed: {
37
+ uid: "cmp_failed",
38
+ slug: "failed",
39
+ type: "company",
40
+ status: "active",
41
+ name: "Failed Corp",
42
+ bucketName: "hq-vault-cmp-failed",
43
+ createdAt: "2026-01-01T00:00:00Z",
44
+ },
45
+ cmp_deleted: {
46
+ uid: "cmp_deleted",
47
+ slug: "deleted",
48
+ type: "company",
49
+ status: "deleted",
50
+ name: "Deleted Corp",
51
+ bucketName: "hq-vault-cmp-deleted",
52
+ createdAt: "2026-01-01T00:00:00Z",
53
+ },
54
+ };
55
+ const options = {
56
+ hqRoot,
57
+ targets: [
58
+ { uid: "cmp_acme", slug: "acme" },
59
+ { uid: "cmp_failed", slug: "failed" },
60
+ { uid: "cmp_deleted", slug: "deleted" },
61
+ { uid: "cmp_missing-directory", slug: "missing-directory" },
62
+ { uid: "prs_me", slug: "personal", personalMode: true },
63
+ ],
64
+ completedCompanySlugs: new Set(["acme", "deleted", "missing-directory", "personal"]),
65
+ getEntity: async (uid) => {
66
+ const entity = entities[uid];
67
+ if (!entity)
68
+ throw new Error("entity not found");
69
+ return entity;
70
+ },
71
+ };
72
+ await reconcileCompanyManifest(options);
73
+ const firstWrite = fs.readFileSync(manifestPath, "utf8");
74
+ await reconcileCompanyManifest(options);
75
+ expect(fs.readFileSync(manifestPath, "utf8")).toBe(firstWrite);
76
+ expect(yaml.load(firstWrite)).toEqual({
77
+ version: 3,
78
+ settings: { keep: true },
79
+ companies: {
80
+ "local-only": {
81
+ name: "Local Only",
82
+ repos: ["repos/local"],
83
+ },
84
+ preserved: {
85
+ name: "Keep Me",
86
+ cloud_uid: "cmp_preserved",
87
+ },
88
+ acme: {
89
+ name: "Acme Inc",
90
+ cloud_uid: "cmp_acme",
91
+ bucket_name: "hq-vault-cmp-acme",
92
+ },
93
+ },
94
+ });
95
+ });
96
+ });
97
+ //# sourceMappingURL=manifest-reconcile.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest-reconcile.test.js","sourceRoot":"","sources":["../src/manifest-reconcile.test.ts"],"names":[],"mappings":"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"}
package/dist/s3.d.ts CHANGED
@@ -224,7 +224,18 @@ export declare function primeUploads(ctx: EntityContext, items: UploadPrimeItem[
224
224
  * point, and they call this so a backslash key can never be stored again.
225
225
  */
226
226
  export declare function toPosixKey(key: string): string;
227
- export declare function validateVaultUploadKey(key: string, scope: "company" | "personal"): void;
227
+ export type VaultKeyScope = "company" | "personal";
228
+ export interface VaultKeyValidationIssue {
229
+ code: string;
230
+ message: string;
231
+ }
232
+ /**
233
+ * Classify a vault key with the same rules as {@link validateVaultUploadKey}
234
+ * without throwing. Callers that enumerate remote objects can use this before
235
+ * presigning so permanently-invalid legacy keys remain benign skips.
236
+ */
237
+ export declare function classifyVaultKey(key: string, scope: VaultKeyScope): VaultKeyValidationIssue | null;
238
+ export declare function validateVaultUploadKey(key: string, scope: VaultKeyScope): void;
228
239
  export declare function uploadFile(ctx: EntityContext, localPath: string, key: string, author?: UploadAuthor, precondition?: PutPrecondition): Promise<{
229
240
  etag: string;
230
241
  }>;
package/dist/s3.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"s3.d.ts","sourceRoot":"","sources":["../src/s3.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"s3.d.ts","sourceRoot":"","sources":["../src/s3.ts"],"names":[],"mappings":"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"}
package/dist/s3.js CHANGED
@@ -464,47 +464,80 @@ export function toPosixKey(key) {
464
464
  * (`cmp_*` → "company", otherwise "personal").
465
465
  *
466
466
  * Errors carry the same `code` values the server throws so telemetry and
467
- * operator messaging line up across client and server.
467
+ * operator messaging line up across client and server. Pull planning also
468
+ * uses the non-throwing classifier below to keep poison keys away from the
469
+ * presign transport.
468
470
  */
469
471
  // Matching control chars is the whole point — block NUL/0x00–0x1F/0x7F in keys
470
472
  // (they can smuggle past path checks or corrupt HTTP headers on the signed URL).
471
473
  // eslint-disable-next-line no-control-regex
472
474
  const KEY_CONTROL_CHARS = /[\x00-\x1F\x7F]/;
473
- export function validateVaultUploadKey(key, scope) {
474
- const fail = (message, code) => {
475
- throw Object.assign(new Error(message), { code });
476
- };
475
+ /**
476
+ * Classify a vault key with the same rules as {@link validateVaultUploadKey}
477
+ * without throwing. Callers that enumerate remote objects can use this before
478
+ * presigning so permanently-invalid legacy keys remain benign skips.
479
+ */
480
+ export function classifyVaultKey(key, scope) {
477
481
  if (key.length === 0) {
478
- fail("Invalid key: must not be empty", "INVALID_KEY_EMPTY");
482
+ return {
483
+ code: "INVALID_KEY_EMPTY",
484
+ message: "Invalid key: must not be empty",
485
+ };
479
486
  }
480
487
  if (key.startsWith("/")) {
481
- fail("Invalid key: leading '/' not allowed", "INVALID_KEY_LEADING_SLASH");
488
+ return {
489
+ code: "INVALID_KEY_LEADING_SLASH",
490
+ message: "Invalid key: leading '/' not allowed",
491
+ };
482
492
  }
483
493
  if (key.endsWith("/")) {
484
- fail("Invalid key: trailing '/' (folder marker, not an object)", "INVALID_KEY_TRAILING_SLASH");
494
+ return {
495
+ code: "INVALID_KEY_TRAILING_SLASH",
496
+ message: "Invalid key: trailing '/' (folder marker, not an object)",
497
+ };
485
498
  }
486
499
  if (scope === "company" && key.startsWith("companies/")) {
487
- fail("Invalid key: vault keys are bucket-relative and the vault is already " +
488
- "company-scoped — do not prefix with 'companies/<slug>/'. This " +
489
- "usually means a stale doubled local tree " +
490
- "(companies/<slug>/companies/<slug>/…); remove the inner copy.", "INVALID_KEY_COMPANIES_SCOPED");
500
+ return {
501
+ code: "INVALID_KEY_COMPANIES_SCOPED",
502
+ message: "Invalid key: vault keys are bucket-relative and the vault is already " +
503
+ "company-scoped — do not prefix with 'companies/<slug>/'. This " +
504
+ "usually means a stale doubled local tree " +
505
+ "(companies/<slug>/companies/<slug>/…); remove the inner copy.",
506
+ };
491
507
  }
492
508
  if (KEY_CONTROL_CHARS.test(key)) {
493
- fail("Invalid key: contains control characters", "INVALID_KEY_CONTROL_CHARS");
509
+ return {
510
+ code: "INVALID_KEY_CONTROL_CHARS",
511
+ message: "Invalid key: contains control characters",
512
+ };
494
513
  }
495
514
  if (key.includes("\\")) {
496
- // Unreachable after toPosixKey normalization at the upload boundary, but
497
- // kept so the validator mirrors the server rule set 1:1 for other callers.
498
- fail("Invalid key: backslash separators are not allowed — vault keys are POSIX ('/')", "INVALID_KEY_BACKSLASH");
515
+ return {
516
+ code: "INVALID_KEY_BACKSLASH",
517
+ message: "Invalid key: backslash separators are not allowed — vault keys are POSIX ('/')",
518
+ };
499
519
  }
500
520
  if (key.includes("//")) {
501
- fail("Invalid key: consecutive slashes not allowed", "INVALID_KEY_DOUBLE_SLASH");
521
+ return {
522
+ code: "INVALID_KEY_DOUBLE_SLASH",
523
+ message: "Invalid key: consecutive slashes not allowed",
524
+ };
502
525
  }
503
526
  for (const segment of key.split("/")) {
504
527
  if (segment === "." || segment === "..") {
505
- fail("Invalid key: '.' and '..' path components are not allowed", "INVALID_KEY_DOT_COMPONENT");
528
+ return {
529
+ code: "INVALID_KEY_DOT_COMPONENT",
530
+ message: "Invalid key: '.' and '..' path components are not allowed",
531
+ };
506
532
  }
507
533
  }
534
+ return null;
535
+ }
536
+ export function validateVaultUploadKey(key, scope) {
537
+ const issue = classifyVaultKey(key, scope);
538
+ if (issue !== null) {
539
+ throw Object.assign(new Error(issue.message), { code: issue.code });
540
+ }
508
541
  }
509
542
  /** Scope for {@link validateVaultUploadKey}, derived from the entity uid. */
510
543
  function uploadScopeFor(ctx) {
package/dist/s3.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"s3.js","sourceRoot":"","sources":["../src/s3.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"s3.js","sourceRoot":"","sources":["../src/s3.ts"],"names":[],"mappings":"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"}
package/dist/s3.test.js CHANGED
@@ -89,7 +89,7 @@ vi.mock("@aws-sdk/client-s3", () => {
89
89
  DeleteObjectCommand,
90
90
  };
91
91
  });
92
- import { uploadFile, uploadSymlink, toPosixKey, primeUploads, downloadFile, listRemoteFiles, SYMLINK_BODY_PREFIX, SYMLINK_MARKER_META_VALUE, encodeSymlinkMetadataValue, decodeSymlinkMetadataValue, FILE_MTIME_META_KEY, FILE_BTIME_META_KEY, validateVaultUploadKey, } from "./s3.js";
92
+ import { uploadFile, uploadSymlink, toPosixKey, primeUploads, downloadFile, listRemoteFiles, SYMLINK_BODY_PREFIX, SYMLINK_MARKER_META_VALUE, encodeSymlinkMetadataValue, decodeSymlinkMetadataValue, FILE_MTIME_META_KEY, FILE_BTIME_META_KEY, classifyVaultKey, validateVaultUploadKey, } from "./s3.js";
93
93
  import { setObjectIOFactory, presignObjectIOFactory, } from "./object-io.js";
94
94
  function makeCtx() {
95
95
  return {
@@ -1234,6 +1234,17 @@ describe("validateVaultUploadKey — direct-S3 key poisoning guard (incident 202
1234
1234
  expect(() => validateVaultUploadKey(key, "company")).toThrowError(expect.objectContaining({ code }));
1235
1235
  expect(() => validateVaultUploadKey(key, "personal")).toThrowError(expect.objectContaining({ code }));
1236
1236
  });
1237
+ it.each([
1238
+ [
1239
+ "companies/indigo/knowledge/x.md",
1240
+ "company",
1241
+ "INVALID_KEY_COMPANIES_SCOPED",
1242
+ ],
1243
+ ["bad\x00key.md", "personal", "INVALID_KEY_CONTROL_CHARS"],
1244
+ ["docs/good.md", "personal", null],
1245
+ ])("classifyVaultKey reports the validator outcome without throwing: %j", (key, scope, code) => {
1246
+ expect(classifyVaultKey(key, scope)).toEqual(code === null ? null : expect.objectContaining({ code }));
1247
+ });
1237
1248
  it("uploadFile refuses to PUT a companies/-prefixed key into a company (cmp_) vault — no S3 command is sent", async () => {
1238
1249
  await expect(uploadFile(makeCtx(), tmpFile, "companies/indigo/knowledge/x.md")).rejects.toMatchObject({ code: "INVALID_KEY_COMPANIES_SCOPED" });
1239
1250
  expect(sentCommands.length).toBe(0);