@productbrain/cli 0.1.0-beta.2286 → 0.1.0-beta.2309
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/commands/orient.d.ts.map +1 -1
- package/dist/commands/orient.js +11 -0
- package/dist/commands/orient.js.map +1 -1
- package/dist/commands/promote.d.ts.map +1 -1
- package/dist/commands/promote.js +15 -0
- package/dist/commands/promote.js.map +1 -1
- package/dist/generators/chain-classifier.d.ts +13 -12
- package/dist/generators/chain-classifier.d.ts.map +1 -1
- package/dist/generators/chain-classifier.js +13 -126
- package/dist/generators/chain-classifier.js.map +1 -1
- package/dist/generators/chain-rules.d.ts.map +1 -1
- package/dist/generators/chain-rules.js +107 -3
- package/dist/generators/chain-rules.js.map +1 -1
- package/dist/generators/chain-rules.test.js +237 -0
- package/dist/generators/chain-rules.test.js.map +1 -1
- package/package.json +2 -1
- package/dist/generators/chain-classifier.test.d.ts +0 -2
- package/dist/generators/chain-classifier.test.d.ts.map +0 -1
- package/dist/generators/chain-classifier.test.js +0 -371
- package/dist/generators/chain-classifier.test.js.map +0 -1
|
@@ -1,371 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* chain-classifier — unit tests.
|
|
3
|
-
* BET-286 Slice 1: relation-aware governance function classifier.
|
|
4
|
-
*/
|
|
5
|
-
import { describe, expect, it } from 'vitest';
|
|
6
|
-
import { classifyGovernance, } from './chain-classifier.js';
|
|
7
|
-
// ── Helpers ────────────────────────────────────────────────────────────
|
|
8
|
-
function makeEntry(overrides) {
|
|
9
|
-
return {
|
|
10
|
-
status: 'committed',
|
|
11
|
-
verificationStatus: null,
|
|
12
|
-
data: null,
|
|
13
|
-
relations: [],
|
|
14
|
-
...overrides,
|
|
15
|
-
};
|
|
16
|
-
}
|
|
17
|
-
function makeRelation(overrides) {
|
|
18
|
-
return {
|
|
19
|
-
direction: 'outgoing',
|
|
20
|
-
otherEntryId: null,
|
|
21
|
-
otherName: 'other entry',
|
|
22
|
-
otherCollectionSlug: null,
|
|
23
|
-
...overrides,
|
|
24
|
-
};
|
|
25
|
-
}
|
|
26
|
-
const COLLECTIONS = [
|
|
27
|
-
{
|
|
28
|
-
slug: 'standards',
|
|
29
|
-
name: 'Standards',
|
|
30
|
-
governanceRole: 'binding',
|
|
31
|
-
defaultCanonicalKey: 'standard',
|
|
32
|
-
governanceFunction: 'constraint',
|
|
33
|
-
classificationSignals: ['quality', 'test', 'gate'],
|
|
34
|
-
usageGuidance: 'Rules and standards that constrain behavior and must be followed.',
|
|
35
|
-
},
|
|
36
|
-
{
|
|
37
|
-
slug: 'business-rules',
|
|
38
|
-
name: 'Business Rules',
|
|
39
|
-
governanceRole: 'binding',
|
|
40
|
-
defaultCanonicalKey: 'business-rule',
|
|
41
|
-
governanceFunction: 'constraint',
|
|
42
|
-
classificationSignals: ['auth', 'security'],
|
|
43
|
-
usageGuidance: 'Operational rules that constrain product behavior and govern workflows.',
|
|
44
|
-
},
|
|
45
|
-
{
|
|
46
|
-
slug: 'architecture',
|
|
47
|
-
name: 'Architecture',
|
|
48
|
-
governanceRole: 'binding',
|
|
49
|
-
defaultCanonicalKey: 'architecture_note',
|
|
50
|
-
governanceFunction: 'boundary',
|
|
51
|
-
usageGuidance: 'Architecture notes that define system boundaries, interfaces, domains, and layers.',
|
|
52
|
-
},
|
|
53
|
-
{
|
|
54
|
-
slug: 'decisions',
|
|
55
|
-
name: 'Decisions',
|
|
56
|
-
governanceRole: 'binding',
|
|
57
|
-
defaultCanonicalKey: 'decision',
|
|
58
|
-
governanceFunction: 'convention',
|
|
59
|
-
classificationSignals: ['deployment'],
|
|
60
|
-
usageGuidance: 'Decisions record choices, practices, and conventions.',
|
|
61
|
-
},
|
|
62
|
-
{
|
|
63
|
-
slug: 'patterns',
|
|
64
|
-
name: 'Patterns',
|
|
65
|
-
governanceRole: 'binding',
|
|
66
|
-
defaultCanonicalKey: 'pattern',
|
|
67
|
-
governanceFunction: 'convention',
|
|
68
|
-
usageGuidance: 'Reusable patterns and conventions.',
|
|
69
|
-
},
|
|
70
|
-
{
|
|
71
|
-
slug: 'policies',
|
|
72
|
-
name: 'Policies',
|
|
73
|
-
governanceRole: 'binding',
|
|
74
|
-
defaultCanonicalKey: 'policy',
|
|
75
|
-
governanceFunction: 'policy',
|
|
76
|
-
usageGuidance: 'Policies for access, permissions, auth, and security.',
|
|
77
|
-
},
|
|
78
|
-
{
|
|
79
|
-
slug: 'flows',
|
|
80
|
-
name: 'Flows',
|
|
81
|
-
governanceRole: 'binding',
|
|
82
|
-
defaultCanonicalKey: 'flow',
|
|
83
|
-
governanceFunction: 'workflow',
|
|
84
|
-
usageGuidance: 'Workflow and process lifecycle definitions.',
|
|
85
|
-
},
|
|
86
|
-
{
|
|
87
|
-
slug: 'glossary',
|
|
88
|
-
name: 'Glossary',
|
|
89
|
-
governanceRole: 'reference',
|
|
90
|
-
defaultCanonicalKey: 'glossary_term',
|
|
91
|
-
governanceFunction: 'unclassified',
|
|
92
|
-
usageGuidance: 'Reference definitions.',
|
|
93
|
-
},
|
|
94
|
-
{
|
|
95
|
-
slug: 'compliance-gates',
|
|
96
|
-
name: 'Compliance Gates',
|
|
97
|
-
governanceRole: 'binding',
|
|
98
|
-
defaultCanonicalKey: 'quality_gate',
|
|
99
|
-
governanceFunction: 'quality-gate',
|
|
100
|
-
classificationSignals: ['coverage', 'verification'],
|
|
101
|
-
usageGuidance: 'Quality gates and verification checks.',
|
|
102
|
-
},
|
|
103
|
-
];
|
|
104
|
-
// ── Test cases ─────────────────────────────────────────────────────────
|
|
105
|
-
describe('classifyGovernance — collection signal', () => {
|
|
106
|
-
it('STD entry with constrains relation → constraint with high confidence (>=0.6)', () => {
|
|
107
|
-
const entry = makeEntry({
|
|
108
|
-
entryId: 'STD-1',
|
|
109
|
-
name: 'Trunk-based development standard',
|
|
110
|
-
collectionSlug: 'standards',
|
|
111
|
-
relations: [makeRelation({ type: 'constrains', otherCollectionSlug: 'bets' })],
|
|
112
|
-
});
|
|
113
|
-
const results = classifyGovernance([entry], COLLECTIONS);
|
|
114
|
-
expect(results).toHaveLength(1);
|
|
115
|
-
expect(results[0].governanceFunction).toBe('constraint');
|
|
116
|
-
expect(results[0].confidence).toBeGreaterThanOrEqual(0.6);
|
|
117
|
-
});
|
|
118
|
-
it('ARCH entry → boundary with medium confidence (>=0.4)', () => {
|
|
119
|
-
const entry = makeEntry({
|
|
120
|
-
entryId: 'ARCH-1',
|
|
121
|
-
name: 'Seven system domains',
|
|
122
|
-
collectionSlug: 'architecture',
|
|
123
|
-
});
|
|
124
|
-
const results = classifyGovernance([entry], COLLECTIONS);
|
|
125
|
-
expect(results).toHaveLength(1);
|
|
126
|
-
expect(results[0].governanceFunction).toBe('boundary');
|
|
127
|
-
expect(results[0].confidence).toBeGreaterThanOrEqual(0.4);
|
|
128
|
-
});
|
|
129
|
-
it('DEC entry with deployment in name → convention with boosted confidence', () => {
|
|
130
|
-
const entry = makeEntry({
|
|
131
|
-
entryId: 'DEC-1',
|
|
132
|
-
name: 'deployment ordering for Convex and Railway',
|
|
133
|
-
collectionSlug: 'decisions',
|
|
134
|
-
});
|
|
135
|
-
const noNameEntry = makeEntry({
|
|
136
|
-
entryId: 'DEC-2',
|
|
137
|
-
name: 'some decision',
|
|
138
|
-
collectionSlug: 'decisions',
|
|
139
|
-
});
|
|
140
|
-
const withName = classifyGovernance([entry], COLLECTIONS);
|
|
141
|
-
const withoutName = classifyGovernance([noNameEntry], COLLECTIONS);
|
|
142
|
-
expect(withName[0].governanceFunction).toBe('convention');
|
|
143
|
-
expect(withName[0].confidence).toBeGreaterThan(withoutName[0].confidence);
|
|
144
|
-
});
|
|
145
|
-
it('FLOW entry → workflow', () => {
|
|
146
|
-
const entry = makeEntry({
|
|
147
|
-
entryId: 'FLOW-1',
|
|
148
|
-
name: 'Feature flag lifecycle flow',
|
|
149
|
-
collectionSlug: 'flows',
|
|
150
|
-
});
|
|
151
|
-
const results = classifyGovernance([entry], COLLECTIONS);
|
|
152
|
-
expect(results).toHaveLength(1);
|
|
153
|
-
expect(results[0].governanceFunction).toBe('workflow');
|
|
154
|
-
});
|
|
155
|
-
it('POL entry with governs relation → policy with high confidence', () => {
|
|
156
|
-
const entry = makeEntry({
|
|
157
|
-
entryId: 'POL-1',
|
|
158
|
-
name: 'Access control policy',
|
|
159
|
-
collectionSlug: 'policies',
|
|
160
|
-
relations: [makeRelation({ type: 'governs', otherCollectionSlug: 'bets' })],
|
|
161
|
-
});
|
|
162
|
-
const results = classifyGovernance([entry], COLLECTIONS);
|
|
163
|
-
expect(results).toHaveLength(1);
|
|
164
|
-
expect(results[0].governanceFunction).toBe('policy');
|
|
165
|
-
expect(results[0].confidence).toBeGreaterThanOrEqual(0.6);
|
|
166
|
-
});
|
|
167
|
-
it('custom quality-gate collection → quality-gate from explicit metadata', () => {
|
|
168
|
-
const entry = makeEntry({
|
|
169
|
-
entryId: 'QG-2',
|
|
170
|
-
name: 'Test coverage quality gate for all slices',
|
|
171
|
-
collectionSlug: 'compliance-gates',
|
|
172
|
-
});
|
|
173
|
-
const results = classifyGovernance([entry], COLLECTIONS);
|
|
174
|
-
expect(results).toHaveLength(1);
|
|
175
|
-
expect(results[0].governanceFunction).toBe('quality-gate');
|
|
176
|
-
expect(results[0].confidence).toBeGreaterThanOrEqual(0.5);
|
|
177
|
-
});
|
|
178
|
-
});
|
|
179
|
-
describe('classifyGovernance — null entryId safety', () => {
|
|
180
|
-
it('entry with null entryId is excluded from output', () => {
|
|
181
|
-
const entry = makeEntry({
|
|
182
|
-
entryId: null,
|
|
183
|
-
name: 'Draft entry without ID',
|
|
184
|
-
collectionSlug: 'standards',
|
|
185
|
-
});
|
|
186
|
-
const results = classifyGovernance([entry], COLLECTIONS);
|
|
187
|
-
expect(results).toHaveLength(0);
|
|
188
|
-
});
|
|
189
|
-
});
|
|
190
|
-
describe('classifyGovernance — empty input', () => {
|
|
191
|
-
it('empty input → empty output', () => {
|
|
192
|
-
const results = classifyGovernance([], COLLECTIONS);
|
|
193
|
-
expect(results).toHaveLength(0);
|
|
194
|
-
});
|
|
195
|
-
});
|
|
196
|
-
describe('classifyGovernance — unclassified', () => {
|
|
197
|
-
it('glossary entry → unclassified regardless of signals', () => {
|
|
198
|
-
const entry = makeEntry({
|
|
199
|
-
entryId: 'GLO-1',
|
|
200
|
-
name: 'Trunk-based development',
|
|
201
|
-
collectionSlug: 'glossary',
|
|
202
|
-
relations: [makeRelation({ type: 'constrains' })],
|
|
203
|
-
});
|
|
204
|
-
const results = classifyGovernance([entry], COLLECTIONS);
|
|
205
|
-
expect(results).toHaveLength(1);
|
|
206
|
-
expect(results[0].governanceFunction).toBe('unclassified');
|
|
207
|
-
expect(results[0].confidence).toBe(0);
|
|
208
|
-
});
|
|
209
|
-
});
|
|
210
|
-
describe('classifyGovernance — multiple signal matches', () => {
|
|
211
|
-
it('entry with multiple signals → highest confidence function wins', () => {
|
|
212
|
-
// BR entry with both constrains AND governs relations.
|
|
213
|
-
// constrains boosts 'constraint', governs boosts 'policy'.
|
|
214
|
-
// business-rules base maps to 'constraint', so constraint should win.
|
|
215
|
-
const entry = makeEntry({
|
|
216
|
-
entryId: 'BR-1',
|
|
217
|
-
name: 'Entry creation must use createEntry gate',
|
|
218
|
-
collectionSlug: 'business-rules',
|
|
219
|
-
relations: [
|
|
220
|
-
makeRelation({ type: 'constrains' }),
|
|
221
|
-
makeRelation({ type: 'constrains' }),
|
|
222
|
-
makeRelation({ type: 'governs' }),
|
|
223
|
-
],
|
|
224
|
-
});
|
|
225
|
-
const results = classifyGovernance([entry], COLLECTIONS);
|
|
226
|
-
expect(results).toHaveLength(1);
|
|
227
|
-
// Both constraint and policy are plausible; the function with the highest score wins.
|
|
228
|
-
// With 2x constrains boosts, constraint should dominate.
|
|
229
|
-
expect(results[0].governanceFunction).toBe('constraint');
|
|
230
|
-
expect(results[0].confidence).toBeGreaterThanOrEqual(0.6);
|
|
231
|
-
});
|
|
232
|
-
});
|
|
233
|
-
describe('classifyGovernance — passthrough fields', () => {
|
|
234
|
-
it('passes data and relations through to result', () => {
|
|
235
|
-
const data = { someField: 'someValue' };
|
|
236
|
-
const relation = makeRelation({ type: 'constrains' });
|
|
237
|
-
const entry = makeEntry({
|
|
238
|
-
entryId: 'STD-99',
|
|
239
|
-
name: 'Some standard',
|
|
240
|
-
collectionSlug: 'standards',
|
|
241
|
-
data,
|
|
242
|
-
relations: [relation],
|
|
243
|
-
});
|
|
244
|
-
const results = classifyGovernance([entry], COLLECTIONS);
|
|
245
|
-
expect(results[0].data).toBe(data);
|
|
246
|
-
expect(results[0].relations).toEqual([relation]);
|
|
247
|
-
});
|
|
248
|
-
it('returns entryId, name, and collectionSlug unchanged', () => {
|
|
249
|
-
const entry = makeEntry({
|
|
250
|
-
entryId: 'ARCH-42',
|
|
251
|
-
name: 'My architecture entry',
|
|
252
|
-
collectionSlug: 'architecture',
|
|
253
|
-
});
|
|
254
|
-
const results = classifyGovernance([entry], COLLECTIONS);
|
|
255
|
-
expect(results[0].entryId).toBe('ARCH-42');
|
|
256
|
-
expect(results[0].name).toBe('My architecture entry');
|
|
257
|
-
expect(results[0].collectionSlug).toBe('architecture');
|
|
258
|
-
});
|
|
259
|
-
});
|
|
260
|
-
describe('classifyGovernance — name signal boosts', () => {
|
|
261
|
-
it('workspace collection signals boost that collection metadata function', () => {
|
|
262
|
-
const withKeyword = makeEntry({
|
|
263
|
-
entryId: 'BR-2',
|
|
264
|
-
name: 'Auth security check before MCP tool execution',
|
|
265
|
-
collectionSlug: 'business-rules',
|
|
266
|
-
});
|
|
267
|
-
const withoutKeyword = makeEntry({
|
|
268
|
-
entryId: 'BR-3',
|
|
269
|
-
name: 'Some business rule',
|
|
270
|
-
collectionSlug: 'business-rules',
|
|
271
|
-
});
|
|
272
|
-
const [withResult] = classifyGovernance([withKeyword], COLLECTIONS);
|
|
273
|
-
const [withoutResult] = classifyGovernance([withoutKeyword], COLLECTIONS);
|
|
274
|
-
expect(withResult.governanceFunction).toBe('constraint');
|
|
275
|
-
expect(withResult.confidence).toBeGreaterThan(withoutResult.confidence);
|
|
276
|
-
expect(withoutResult.governanceFunction).toBe('constraint');
|
|
277
|
-
});
|
|
278
|
-
it('matchedSignals contains human-readable explanations', () => {
|
|
279
|
-
const entry = makeEntry({
|
|
280
|
-
entryId: 'STD-5',
|
|
281
|
-
name: 'Quality gate for test coverage',
|
|
282
|
-
collectionSlug: 'standards',
|
|
283
|
-
relations: [makeRelation({ type: 'constrains' })],
|
|
284
|
-
});
|
|
285
|
-
const [result] = classifyGovernance([entry], COLLECTIONS);
|
|
286
|
-
expect(result.matchedSignals.length).toBeGreaterThan(0);
|
|
287
|
-
expect(result.matchedSignals.some((s) => s.includes('standards'))).toBe(true);
|
|
288
|
-
});
|
|
289
|
-
});
|
|
290
|
-
describe('classifyGovernance — mixed null/non-null entryIds', () => {
|
|
291
|
-
it('only entries with non-null entryIds are returned', () => {
|
|
292
|
-
const entries = [
|
|
293
|
-
makeEntry({ entryId: 'STD-1', name: 'Valid standard', collectionSlug: 'standards' }),
|
|
294
|
-
makeEntry({ entryId: null, name: 'Draft entry', collectionSlug: 'standards' }),
|
|
295
|
-
makeEntry({ entryId: 'ARCH-2', name: 'Architecture entry', collectionSlug: 'architecture' }),
|
|
296
|
-
];
|
|
297
|
-
const results = classifyGovernance(entries, COLLECTIONS);
|
|
298
|
-
expect(results).toHaveLength(2);
|
|
299
|
-
expect(results.map((r) => r.entryId)).toEqual(['STD-1', 'ARCH-2']);
|
|
300
|
-
});
|
|
301
|
-
});
|
|
302
|
-
describe('classifyGovernance — patterns collection', () => {
|
|
303
|
-
it('PAT entry → convention', () => {
|
|
304
|
-
const entry = makeEntry({
|
|
305
|
-
entryId: 'PAT-1',
|
|
306
|
-
name: 'Additive wrapping pattern for feature flags',
|
|
307
|
-
collectionSlug: 'patterns',
|
|
308
|
-
});
|
|
309
|
-
const results = classifyGovernance([entry], COLLECTIONS);
|
|
310
|
-
expect(results[0].governanceFunction).toBe('convention');
|
|
311
|
-
});
|
|
312
|
-
});
|
|
313
|
-
describe('classifyGovernance — informed_by ARCH relation boosts boundary', () => {
|
|
314
|
-
it('DEC informed_by an architecture entry → keeps own convention; one informed_by edge boosts but does not override the entry base', () => {
|
|
315
|
-
// A single informed_by→boundary edge must REFINE, not OVERRIDE, the entry's
|
|
316
|
-
// own collection signal. The boost is RELATION_BOOST (0.2), never a full
|
|
317
|
-
// base, so the entry's own convention base (0.45) still wins.
|
|
318
|
-
const entry = makeEntry({
|
|
319
|
-
entryId: 'DEC-5',
|
|
320
|
-
name: 'Domain boundaries for the seven layers',
|
|
321
|
-
collectionSlug: 'decisions',
|
|
322
|
-
relations: [
|
|
323
|
-
makeRelation({
|
|
324
|
-
type: 'informed_by',
|
|
325
|
-
direction: 'outgoing',
|
|
326
|
-
otherCollectionSlug: 'architecture',
|
|
327
|
-
otherName: 'Seven system domains',
|
|
328
|
-
otherEntryId: 'ARCH-26',
|
|
329
|
-
}),
|
|
330
|
-
],
|
|
331
|
-
});
|
|
332
|
-
const results = classifyGovernance([entry], COLLECTIONS);
|
|
333
|
-
expect(results[0].governanceFunction).toBe('convention');
|
|
334
|
-
});
|
|
335
|
-
it('informed_by→boundary still lifts an entry with no own collection base to boundary', () => {
|
|
336
|
-
// Guard: the boost must remain a real signal. An entry whose own collection
|
|
337
|
-
// carries no governanceFunction (no base) classifies to boundary purely from
|
|
338
|
-
// the informed_by→architecture edge.
|
|
339
|
-
const entry = makeEntry({
|
|
340
|
-
entryId: 'X-1',
|
|
341
|
-
name: 'Some cross-cutting note',
|
|
342
|
-
collectionSlug: 'uncatalogued-collection',
|
|
343
|
-
relations: [
|
|
344
|
-
makeRelation({
|
|
345
|
-
type: 'informed_by',
|
|
346
|
-
direction: 'outgoing',
|
|
347
|
-
otherCollectionSlug: 'architecture',
|
|
348
|
-
otherName: 'Seven system domains',
|
|
349
|
-
otherEntryId: 'ARCH-26',
|
|
350
|
-
}),
|
|
351
|
-
],
|
|
352
|
-
});
|
|
353
|
-
const results = classifyGovernance([entry], COLLECTIONS);
|
|
354
|
-
expect(results[0].governanceFunction).toBe('boundary');
|
|
355
|
-
});
|
|
356
|
-
it('custom slugs classify from governanceFunction metadata, not PB slug names', () => {
|
|
357
|
-
const collections = [
|
|
358
|
-
{ slug: 'working-agreements', governanceRole: 'binding', governanceFunction: 'constraint' },
|
|
359
|
-
{ slug: 'system-shape', governanceRole: 'binding', governanceFunction: 'boundary' },
|
|
360
|
-
];
|
|
361
|
-
const results = classifyGovernance([
|
|
362
|
-
makeEntry({ entryId: 'WA-1', name: 'Team agreement', collectionSlug: 'working-agreements' }),
|
|
363
|
-
makeEntry({ entryId: 'SYS-1', name: 'System boundary', collectionSlug: 'system-shape' }),
|
|
364
|
-
], collections);
|
|
365
|
-
expect(results.map((r) => [r.collectionSlug, r.governanceFunction])).toEqual([
|
|
366
|
-
['working-agreements', 'constraint'],
|
|
367
|
-
['system-shape', 'boundary'],
|
|
368
|
-
]);
|
|
369
|
-
});
|
|
370
|
-
});
|
|
371
|
-
//# sourceMappingURL=chain-classifier.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"chain-classifier.test.js","sourceRoot":"","sources":["../../src/generators/chain-classifier.test.ts"],"names":[],"mappings":"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"}
|