@productbrain/cli 0.1.0-beta.4906 → 0.1.0-beta.4919

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.
@@ -453,7 +453,7 @@ describe('runCapture --entry-type', () => {
453
453
  if (fn === 'chain.suggestLinksForCapture')
454
454
  return Promise.resolve([]);
455
455
  if (fn === 'chain.createEntry')
456
- return Promise.resolve({ docId: 'doc-4', entryId: 'KEY-1' });
456
+ return Promise.resolve({ docId: 'doc-4', entryId: 'OBJ-1' });
457
457
  return Promise.resolve({});
458
458
  });
459
459
  const writeSpy = vi.spyOn(process.stdout, 'write').mockImplementation(() => true);
@@ -489,7 +489,7 @@ describe('runCapture --entry-type', () => {
489
489
  if (fn === 'chain.suggestLinksForCapture')
490
490
  return Promise.resolve([]);
491
491
  if (fn === 'chain.createEntry')
492
- return Promise.resolve({ docId: 'doc-6', entryId: 'KEY-2' });
492
+ return Promise.resolve({ docId: 'doc-6', entryId: 'OBJ-2' });
493
493
  return Promise.resolve({});
494
494
  });
495
495
  const writeSpy = vi.spyOn(process.stdout, 'write').mockImplementation(() => true);
@@ -13,9 +13,13 @@
13
13
  * entries are re-extracted from the source on every run, so adding, removing,
14
14
  * or re-prefixing a collection upstream fails here until SEED is updated.
15
15
  *
16
- * Carve-out: the CLI's `work-packages BET` legacy alias (BET-230 rename
17
- * backward compat) has no canonical counterpart (the canonical registry maps
18
- * only WP) and is excluded from the comparison.
16
+ * Carve-outs: two CLI-only legacy aliases have no canonical counterpart and are
17
+ * excluded from the comparison
18
+ * - `work-packages BET` (BET-230 rename backward compat; canonical maps only WP).
19
+ * - `objectives → KEY` (P1 review PRRT_kwDORS4ils6cUz6M, WP-686 S6): the canonical
20
+ * registry flipped objectives's idPrefix from KEY to OBJ in place rather than
21
+ * adding a parallel row, but a version-skewed offline CLI against a not-yet-
22
+ * migrated workspace still needs "KEY: ..." capture-prefix routing to work.
19
23
  *
20
24
  * CLI tests run with the repo root as the vitest root; the canonical source is
21
25
  * reached relative to this test file (same pattern as coaching-mirror-drift).
@@ -27,8 +31,11 @@ import { fileURLToPath } from 'node:url';
27
31
  import { SEED } from '../lib/collectionRegistry.js';
28
32
  const __dirname = dirname(fileURLToPath(import.meta.url));
29
33
  const CANONICAL_PATH = join(__dirname, '..', '..', '..', '..', 'convex', 'lib', 'seedClassificationRegistry.ts');
30
- /** The one legacy alias the pin deliberately ignores (no canonical counterpart). */
31
- const CARVE_OUT = { slug: 'work-packages', idPrefix: 'BET' };
34
+ /** The legacy aliases the pin deliberately ignores (no canonical counterpart). */
35
+ const CARVE_OUTS = [
36
+ { slug: 'work-packages', idPrefix: 'BET' },
37
+ { slug: 'objectives', idPrefix: 'KEY' },
38
+ ];
32
39
  /** Extraction rule: each SEED_CLASSIFICATION_REGISTRY entry is a one-line object
33
40
  * declaring `slug: '<s>'` and `idPrefix: '<p>'`. Extract only within the array. */
34
41
  function extractCanonicalProjection(source) {
@@ -44,15 +51,18 @@ function extractCanonicalProjection(source) {
44
51
  return entries;
45
52
  }
46
53
  describe('collectionRegistry SEED content pin (WP-480 S2)', () => {
47
- it('SEED (minus the BET legacy-alias carve-out) matches the canonical {slug, idPrefix} projection', () => {
54
+ it('SEED (minus the legacy-alias carve-outs) matches the canonical {slug, idPrefix} projection', () => {
48
55
  const canonical = extractCanonicalProjection(readFileSync(CANONICAL_PATH, 'utf-8'));
49
56
  expect(canonical.length).toBeGreaterThanOrEqual(30);
50
57
  const project = (rows) => rows.map((r) => `${r.slug} → ${r.idPrefix}`).sort();
51
- const seedWithoutCarveOut = SEED.filter((r) => !(r.slug === CARVE_OUT.slug && r.idPrefix === CARVE_OUT.idPrefix));
52
- expect(project(seedWithoutCarveOut)).toEqual(project(canonical));
58
+ const isCarveOut = (r) => CARVE_OUTS.some((c) => r.slug === c.slug && r.idPrefix === c.idPrefix);
59
+ const seedWithoutCarveOuts = SEED.filter((r) => !isCarveOut(r));
60
+ expect(project(seedWithoutCarveOuts)).toEqual(project(canonical));
53
61
  });
54
- it('the carve-out alias itself is still present in SEED (it is load-bearing for BET-* ids)', () => {
55
- expect(SEED.some((r) => r.slug === CARVE_OUT.slug && r.idPrefix === CARVE_OUT.idPrefix)).toBe(true);
62
+ it('every carve-out alias is still present in SEED (each is load-bearing for its own prefix)', () => {
63
+ for (const carveOut of CARVE_OUTS) {
64
+ expect(SEED.some((r) => r.slug === carveOut.slug && r.idPrefix === carveOut.idPrefix), `expected SEED to still carry the ${carveOut.slug} → ${carveOut.idPrefix} legacy-alias row`).toBe(true);
65
+ }
56
66
  });
57
67
  });
58
68
  //# sourceMappingURL=collection-registry-seed-drift.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"collection-registry-seed-drift.test.js","sourceRoot":"","sources":["../../src/__tests__/collection-registry-seed-drift.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,MAAM,8BAA8B,CAAC;AAEpD,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1D,MAAM,cAAc,GAAG,IAAI,CACzB,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,+BAA+B,CACpF,CAAC;AAEF,oFAAoF;AACpF,MAAM,SAAS,GAAG,EAAE,IAAI,EAAE,eAAe,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;AAE7D;oFACoF;AACpF,SAAS,0BAA0B,CAAC,MAAc;IAChD,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAC7B,wDAAwD,CACzD,CAAC;IACF,MAAM,CAAC,UAAU,EAAE,yEAAyE,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;IAC7G,MAAM,IAAI,GAAG,UAAW,CAAC,CAAC,CAAC,CAAC;IAC5B,MAAM,OAAO,GAA8C,EAAE,CAAC;IAC9D,MAAM,OAAO,GAAG,sDAAsD,CAAC;IACvE,IAAI,CAAC,CAAC;IACN,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QACzC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC/C,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,QAAQ,CAAC,iDAAiD,EAAE,GAAG,EAAE;IAC/D,EAAE,CAAC,+FAA+F,EAAE,GAAG,EAAE;QACvG,MAAM,SAAS,GAAG,0BAA0B,CAAC,YAAY,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC,CAAC;QACpF,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,sBAAsB,CAAC,EAAE,CAAC,CAAC;QAEpD,MAAM,OAAO,GAAG,CAAC,IAAgD,EAAE,EAAE,CACnE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAEtD,MAAM,mBAAmB,GAAG,IAAI,CAAC,MAAM,CACrC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI,IAAI,CAAC,CAAC,QAAQ,KAAK,SAAS,CAAC,QAAQ,CAAC,CACzE,CAAC;QAEF,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;IACnE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wFAAwF,EAAE,GAAG,EAAE;QAChG,MAAM,CACJ,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI,IAAI,CAAC,CAAC,QAAQ,KAAK,SAAS,CAAC,QAAQ,CAAC,CACjF,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACf,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"collection-registry-seed-drift.test.js","sourceRoot":"","sources":["../../src/__tests__/collection-registry-seed-drift.test.ts"],"names":[],"mappings":"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"}
@@ -298,7 +298,7 @@ describe('runHandshake — preview/apply/dryRun invariants (WP-332 S1)', () => {
298
298
  expect(capturedReport()?.filesWritten).toEqual([]);
299
299
  expect(capturedReport()?.filesSkipped?.some((f) => f.reason === 'preview-only (materialize: observe)')).toBe(true);
300
300
  });
301
- it('apply + govern authority writes files and invokes materializeSetup (KEY-24 complement to observe)', async () => {
301
+ it('apply + govern authority writes files and invokes materializeSetup (OBJ-24 complement to observe)', async () => {
302
302
  vi.mocked(readManifestStatus).mockReturnValue({
303
303
  mode: 'govern',
304
304
  surfaces: ['.cursor'],
@@ -53,7 +53,7 @@ async function recordInvocationBestEffort(state) {
53
53
  // resolver output (PbSetupStateOutput.surfaceCapability) — read it directly
54
54
  // rather than string-grepping reasonForPhase strings the producer never
55
55
  // emits. The pre-fix `inferSurfaceCapability` always returned 'cli' for
56
- // chat-only users, silently breaking KEY-32 dual-threshold telemetry.
56
+ // chat-only users, silently breaking OBJ-32 dual-threshold telemetry.
57
57
  const surfaceCapability = state.surfaceCapability;
58
58
  try {
59
59
  await kernelCall('setup.recordSetupInvocation', { surfaceCapability });
@@ -61,7 +61,7 @@ async function recordInvocationBestEffort(state) {
61
61
  catch (err) {
62
62
  // Best-effort — invocation receipt is telemetry, never block the state
63
63
  // read. WP-431 S3 review (Boy Scout #1): log to stderr so a silent failure
64
- // doesn't strand KEY-32 dual-threshold attribution.
64
+ // doesn't strand OBJ-32 dual-threshold attribution.
65
65
  const message = err instanceof Error ? err.message : String(err);
66
66
  process.stderr.write(`[pb setup] invocation attribution failed: ${message}\n`);
67
67
  }
@@ -26,9 +26,18 @@ export interface CollectionMeta {
26
26
  * unreachable. It therefore only needs day-zero accuracy, and is content-pinned
27
27
  * against the canonical day-zero seed truth —
28
28
  * `convex/lib/seedClassificationRegistry.ts` on the {slug, idPrefix} projection
29
- * (see src/__tests__/collection-registry-seed-drift.test.ts). One carve-out:
30
- * the `work-packages BET` legacy alias below has no canonical counterpart
31
- * (the canonical registry maps only WP) and is excluded from the pin.
29
+ * (see src/__tests__/collection-registry-seed-drift.test.ts). Two carve-outs
30
+ * have no canonical counterpart and are excluded from the pin:
31
+ * - `work-packages → BET` (BET-230 rename backward compat; canonical maps only WP).
32
+ * - `objectives → KEY` (P1 review PRRT_kwDORS4ils6cUz6M, WP-686 S6): the canonical
33
+ * registry flipped `objectives`'s idPrefix from KEY to OBJ in place (S5, TASK-91)
34
+ * rather than adding a parallel row, so there is no canonical KEY entry to pin
35
+ * against — but a version-skewed CLI running OFFLINE (this SEED's only use case)
36
+ * against a workspace whose live `collections.idPrefix` is still KEY (prod's own
37
+ * id-rewrite is a deferred, founder-run operation per
38
+ * docs/migration-deferrals/wp686_key_to_obj_prefix_rewrite.md — it has not
39
+ * necessarily run yet) still needs `pb capture "KEY: ..."` to route to
40
+ * `objectives`, same reasoning as the BET alias above.
32
41
  */
33
42
  export declare const SEED: CollectionMeta[];
34
43
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"collectionRegistry.d.ts","sourceRoot":"","sources":["../../src/lib/collectionRegistry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAC;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED;;;;;;;;;;GAUG;AACH,eAAO,MAAM,IAAI,EAAE,cAAc,EAgChC,CAAC;AAgBF;;;;GAIG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC,CAiBhE;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAO7E;AAED;;;;;GAKG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAWhE"}
1
+ {"version":3,"file":"collectionRegistry.d.ts","sourceRoot":"","sources":["../../src/lib/collectionRegistry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAC;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,IAAI,EAAE,cAAc,EAiChC,CAAC;AAgBF;;;;GAIG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC,CAiBhE;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAO7E;AAED;;;;;GAKG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAWhE"}
@@ -18,9 +18,18 @@ import { kernelCall } from './client.js';
18
18
  * unreachable. It therefore only needs day-zero accuracy, and is content-pinned
19
19
  * against the canonical day-zero seed truth —
20
20
  * `convex/lib/seedClassificationRegistry.ts` on the {slug, idPrefix} projection
21
- * (see src/__tests__/collection-registry-seed-drift.test.ts). One carve-out:
22
- * the `work-packages BET` legacy alias below has no canonical counterpart
23
- * (the canonical registry maps only WP) and is excluded from the pin.
21
+ * (see src/__tests__/collection-registry-seed-drift.test.ts). Two carve-outs
22
+ * have no canonical counterpart and are excluded from the pin:
23
+ * - `work-packages → BET` (BET-230 rename backward compat; canonical maps only WP).
24
+ * - `objectives → KEY` (P1 review PRRT_kwDORS4ils6cUz6M, WP-686 S6): the canonical
25
+ * registry flipped `objectives`'s idPrefix from KEY to OBJ in place (S5, TASK-91)
26
+ * rather than adding a parallel row, so there is no canonical KEY entry to pin
27
+ * against — but a version-skewed CLI running OFFLINE (this SEED's only use case)
28
+ * against a workspace whose live `collections.idPrefix` is still KEY (prod's own
29
+ * id-rewrite is a deferred, founder-run operation per
30
+ * docs/migration-deferrals/wp686_key_to_obj_prefix_rewrite.md — it has not
31
+ * necessarily run yet) still needs `pb capture "KEY: ..."` to route to
32
+ * `objectives`, same reasoning as the BET alias above.
24
33
  */
25
34
  export const SEED = [
26
35
  { slug: 'principles', idPrefix: 'PRI' },
@@ -48,7 +57,8 @@ export const SEED = [
48
57
  { slug: 'work-packages', idPrefix: 'WP' },
49
58
  { slug: 'work-packages', idPrefix: 'BET' }, // legacy alias — BET-230 rename backward compat
50
59
  { slug: 'audiences', idPrefix: 'AUD' },
51
- { slug: 'objectives', idPrefix: 'KEY' }, // WP-686 S3 (TASK-89): slug renamed from 'key-results'; S5 adds the 'OBJ' row, this becomes the legacy alias
60
+ { slug: 'objectives', idPrefix: 'OBJ' }, // WP-686 S3 (TASK-89) slug rename + S5 (TASK-91) idPrefix flip in place; old KEY-<n> ENTRY ids resolve via entryIdAliases regardless
61
+ { slug: 'objectives', idPrefix: 'KEY' }, // legacy alias — P1 review PRRT_kwDORS4ils6cUz6M (WP-686 S6): keeps "KEY: ..." capture-prefix routing working for a version-skewed offline CLI against a not-yet-migrated (e.g. prod, pre-SW-3) workspace
52
62
  { slug: 'questions', idPrefix: 'QUE' },
53
63
  { slug: 'products', idPrefix: 'PROD' },
54
64
  { slug: 'opportunities', idPrefix: 'OPP' },
@@ -1 +1 @@
1
- {"version":3,"file":"collectionRegistry.js","sourceRoot":"","sources":["../../src/lib/collectionRegistry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAYzC;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,IAAI,GAAqB;IACpC,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,KAAK,EAAE;IACvC,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,KAAK,EAAE;IACtC,EAAE,IAAI,EAAE,gBAAgB,EAAE,QAAQ,EAAE,IAAI,EAAE;IAC1C,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,EAAE;IACrC,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,EAAE;IACrC,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,EAAE;IACrC,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE;IACtC,EAAE,IAAI,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,EAAE;IAC1C,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,KAAK,EAAE;IACtC,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,EAAE;IACrC,EAAE,IAAI,EAAE,gBAAgB,EAAE,QAAQ,EAAE,IAAI,EAAE;IAC1C,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE;IACjC,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,EAAE;IACrC,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE;IACnC,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE;IAClC,EAAE,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE;IACxC,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE;IACvC,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,EAAE;IACrC,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE;IACnC,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,KAAK,EAAE;IACvC,EAAE,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,IAAI,EAAE;IACvC,EAAE,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE;IACxC,EAAE,IAAI,EAAE,eAAe,EAAE,QAAQ,EAAE,IAAI,EAAE;IACzC,EAAE,IAAI,EAAE,eAAe,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,gDAAgD;IAC5F,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,KAAK,EAAE;IACtC,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,6GAA6G;IACtJ,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,KAAK,EAAE;IACtC,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE;IACtC,EAAE,IAAI,EAAE,eAAe,EAAE,QAAQ,EAAE,KAAK,EAAE;IAC1C,EAAE,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE;IACxC,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE;CACnC,CAAC;AAEF;;;GAGG;AACH,MAAM,sBAAsB,GAAG,IAAI,GAAG,CAAC;IACrC,UAAU;IACV,WAAW;IACX,UAAU;IACV,WAAW;IACX,gBAAgB;CACjB,CAAC,CAAC;AAEH,IAAI,MAAM,GAA4B,IAAI,CAAC;AAE3C;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc;IAClC,IAAI,MAAM,KAAK,IAAI;QAAE,OAAO,MAAM,CAAC;IACnC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,UAAU,CAQ1B,uBAAuB,CAAC,CAAC;QAC9B,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;IACtE,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,GAAG,IAAI,CAAC;IAChB,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB;IACzC,MAAM,IAAI,GAAG,MAAM,cAAc,EAAE,CAAC;IACpC,MAAM,GAAG,GAA2B,EAAE,CAAC;IACvC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,GAAG,CAAC,QAAQ;YAAE,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC;IACjD,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB;IACvC,MAAM,IAAI,GAAG,MAAM,cAAc,EAAE,CAAC;IACpC,8EAA8E;IAC9E,6EAA6E;IAC7E,8DAA8D;IAC9D,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,mBAAmB,KAAK,SAAS,CAAC,CAAC;IAC3E,IAAI,YAAY,EAAE,CAAC;QACjB,OAAO,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACjF,CAAC;IACD,uDAAuD;IACvD,OAAO,sBAAsB,CAAC;AAChC,CAAC"}
1
+ {"version":3,"file":"collectionRegistry.js","sourceRoot":"","sources":["../../src/lib/collectionRegistry.ts"],"names":[],"mappings":"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"}
@@ -211,7 +211,7 @@ async function showGovernanceProof(vision) {
211
211
  // items above use).
212
212
  // `renderMode` is the telemetry-attribution axis, not a formatting hint (convex/
213
213
  // agentKnowledge/orientView.ts / convex/http.ts): 'json' means "agent-surface machine
214
- // payload" and feeds the KEY-51 scoreboard denominator via governanceRenderedJson.
214
+ // payload" and feeds the OBJ-51 scoreboard denominator via governanceRenderedJson.
215
215
  // This onboarding fallback is a genuinely interactive, human-facing CLI flow (styled
216
216
  // stdout text, `ask()` prompts) — 'json' here would mislabel it as agent traffic and
217
217
  // contaminate that metric. 'pretty' is documented as exactly "interactive human TTY"
@@ -153,7 +153,7 @@ describe('Phase 3 coach loop — cross-model trace harness (TEN-1962)', () => {
153
153
  expect(outcome.state).toBe('wizard-fallback');
154
154
  expect(outcome.turnsUsed).toBe(2);
155
155
  // Convergence to a deterministic outcome (criteria-met OR wizard) within
156
- // the 3-turn budget defends KEY-32 generalisation across surfaces.
156
+ // the 3-turn budget defends OBJ-32 generalisation across surfaces.
157
157
  expect(outcome.turnsUsed).toBeLessThanOrEqual(3);
158
158
  });
159
159
  it('Scenario D — marketing copy answer (non-engineering domain, criteria still met)', () => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@productbrain/cli",
3
- "version": "0.1.0-beta.4906",
3
+ "version": "0.1.0-beta.4919",
4
4
  "description": "Product Brain — Chain knowledge and write-back CLI",
5
5
  "type": "module",
6
6
  "bin": {