@productbrain/cli 0.1.0-beta.4906 → 0.1.0-beta.4923
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/dist/__tests__/capture.test.js +2 -2
- package/dist/__tests__/collection-registry-seed-drift.test.js +20 -10
- package/dist/__tests__/collection-registry-seed-drift.test.js.map +1 -1
- package/dist/__tests__/handshake-preview.test.js +1 -1
- package/dist/commands/setup.js +2 -2
- package/dist/lib/collectionRegistry.d.ts +12 -3
- package/dist/lib/collectionRegistry.d.ts.map +1 -1
- package/dist/lib/collectionRegistry.js +14 -4
- package/dist/lib/collectionRegistry.js.map +1 -1
- package/dist/lib/onboarding-path-b.js +1 -1
- package/dist/setup/__tests__/coach-traces.test.js +1 -1
- package/package.json +1 -1
|
@@ -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: '
|
|
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: '
|
|
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-
|
|
17
|
-
*
|
|
18
|
-
*
|
|
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
|
|
31
|
-
const
|
|
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
|
|
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
|
|
52
|
-
|
|
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('
|
|
55
|
-
|
|
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
|
|
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 (
|
|
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'],
|
package/dist/commands/setup.js
CHANGED
|
@@ -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
|
|
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
|
|
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).
|
|
30
|
-
*
|
|
31
|
-
* (
|
|
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
|
|
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).
|
|
22
|
-
*
|
|
23
|
-
* (
|
|
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: '
|
|
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
|
|
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
|
|
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
|
|
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)', () => {
|