@stackbilt/classify 0.1.1
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__/classify.test.d.ts +2 -0
- package/dist/__tests__/classify.test.d.ts.map +1 -0
- package/dist/__tests__/classify.test.js +62 -0
- package/dist/__tests__/classify.test.js.map +1 -0
- package/dist/index.d.ts +27 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +130 -0
- package/dist/index.js.map +1 -0
- package/package.json +34 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"classify.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/classify.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const vitest_1 = require("vitest");
|
|
4
|
+
const index_1 = require("../index");
|
|
5
|
+
(0, vitest_1.describe)('heuristicClassify', () => {
|
|
6
|
+
(0, vitest_1.it)('classifies "readme" as SURFACE', () => {
|
|
7
|
+
const result = (0, index_1.heuristicClassify)('update readme');
|
|
8
|
+
(0, vitest_1.expect)(result.suggestedClass).toBe('SURFACE');
|
|
9
|
+
});
|
|
10
|
+
(0, vitest_1.it)('classifies "typo fix" as SURFACE', () => {
|
|
11
|
+
const result = (0, index_1.heuristicClassify)('fix typo in docs');
|
|
12
|
+
(0, vitest_1.expect)(result.suggestedClass).toBe('SURFACE');
|
|
13
|
+
});
|
|
14
|
+
(0, vitest_1.it)('classifies "OAuth integration" as CROSS_CUTTING', () => {
|
|
15
|
+
const result = (0, index_1.heuristicClassify)('Add OAuth integration for partner API');
|
|
16
|
+
(0, vitest_1.expect)(result.suggestedClass).toBe('CROSS_CUTTING');
|
|
17
|
+
});
|
|
18
|
+
(0, vitest_1.it)('classifies "database migration" as CROSS_CUTTING', () => {
|
|
19
|
+
const result = (0, index_1.heuristicClassify)('database schema migration for users');
|
|
20
|
+
(0, vitest_1.expect)(result.suggestedClass).toBe('CROSS_CUTTING');
|
|
21
|
+
});
|
|
22
|
+
(0, vitest_1.it)('returns HIGH confidence when multiple cross-cutting patterns match', () => {
|
|
23
|
+
const result = (0, index_1.heuristicClassify)('api endpoint schema migration');
|
|
24
|
+
(0, vitest_1.expect)(result.suggestedClass).toBe('CROSS_CUTTING');
|
|
25
|
+
(0, vitest_1.expect)(result.confidence).toBe('HIGH');
|
|
26
|
+
});
|
|
27
|
+
(0, vitest_1.it)('classifies generic subject as LOCAL with LOW confidence', () => {
|
|
28
|
+
const result = (0, index_1.heuristicClassify)('fix button color');
|
|
29
|
+
(0, vitest_1.expect)(result.suggestedClass).toBe('LOCAL');
|
|
30
|
+
(0, vitest_1.expect)(result.confidence).toBe('LOW');
|
|
31
|
+
});
|
|
32
|
+
(0, vitest_1.it)('returns signals for matched patterns', () => {
|
|
33
|
+
const result = (0, index_1.heuristicClassify)('update readme documentation');
|
|
34
|
+
(0, vitest_1.expect)(result.signals.length).toBeGreaterThan(0);
|
|
35
|
+
(0, vitest_1.expect)(result.signals.some(s => s.startsWith('Surface'))).toBe(true);
|
|
36
|
+
});
|
|
37
|
+
(0, vitest_1.it)('returns default signal for LOCAL classification', () => {
|
|
38
|
+
const result = (0, index_1.heuristicClassify)('fix button color');
|
|
39
|
+
(0, vitest_1.expect)(result.signals).toContain('No strong patterns detected - defaulting to LOCAL');
|
|
40
|
+
});
|
|
41
|
+
});
|
|
42
|
+
(0, vitest_1.describe)('determineRecommendation', () => {
|
|
43
|
+
(0, vitest_1.it)('returns REJECT for VIOLATION status', () => {
|
|
44
|
+
(0, vitest_1.expect)((0, index_1.determineRecommendation)('SURFACE', 'VIOLATION', false)).toBe('REJECT');
|
|
45
|
+
});
|
|
46
|
+
(0, vitest_1.it)('returns ESCALATE for NEEDS_REVIEW status', () => {
|
|
47
|
+
(0, vitest_1.expect)((0, index_1.determineRecommendation)('LOCAL', 'NEEDS_REVIEW', false)).toBe('ESCALATE');
|
|
48
|
+
});
|
|
49
|
+
(0, vitest_1.it)('returns ESCALATE for CROSS_CUTTING without mitigations', () => {
|
|
50
|
+
(0, vitest_1.expect)((0, index_1.determineRecommendation)('CROSS_CUTTING', 'CLEAR', false)).toBe('ESCALATE');
|
|
51
|
+
});
|
|
52
|
+
(0, vitest_1.it)('returns APPROVE_WITH_MITIGATIONS for CROSS_CUTTING with mitigations', () => {
|
|
53
|
+
(0, vitest_1.expect)((0, index_1.determineRecommendation)('CROSS_CUTTING', 'CLEAR', true)).toBe('APPROVE_WITH_MITIGATIONS');
|
|
54
|
+
});
|
|
55
|
+
(0, vitest_1.it)('returns APPROVE for SURFACE with CLEAR status', () => {
|
|
56
|
+
(0, vitest_1.expect)((0, index_1.determineRecommendation)('SURFACE', 'CLEAR', false)).toBe('APPROVE');
|
|
57
|
+
});
|
|
58
|
+
(0, vitest_1.it)('returns APPROVE_WITH_MITIGATIONS when mitigations required', () => {
|
|
59
|
+
(0, vitest_1.expect)((0, index_1.determineRecommendation)('LOCAL', 'CLEAR', true)).toBe('APPROVE_WITH_MITIGATIONS');
|
|
60
|
+
});
|
|
61
|
+
});
|
|
62
|
+
//# sourceMappingURL=classify.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"classify.test.js","sourceRoot":"","sources":["../../src/__tests__/classify.test.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Change Classification (Heuristic)
|
|
3
|
+
*
|
|
4
|
+
* Classifies changes as SURFACE/LOCAL/CROSS_CUTTING using pattern matching.
|
|
5
|
+
* No LLM required โ pure heuristics, runs in <5ms.
|
|
6
|
+
*
|
|
7
|
+
* Extracted from Charter Cloud (Operating Charter ยง6.1).
|
|
8
|
+
*/
|
|
9
|
+
import type { ChangeClass, GovernanceStatus, ChangeRecommendation, ChangeClassification } from '@stackbilt/types';
|
|
10
|
+
/**
|
|
11
|
+
* Heuristic classification based on subject content.
|
|
12
|
+
* Returns a suggested classification with confidence and signal list.
|
|
13
|
+
*/
|
|
14
|
+
export declare function heuristicClassify(subject: string): {
|
|
15
|
+
suggestedClass: ChangeClass;
|
|
16
|
+
confidence: 'HIGH' | 'MEDIUM' | 'LOW';
|
|
17
|
+
signals: string[];
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* Determine recommendation based on classification and governance status.
|
|
21
|
+
*/
|
|
22
|
+
export declare function determineRecommendation(changeClass: ChangeClass, governanceStatus: GovernanceStatus, mitigationsRequired: boolean): ChangeRecommendation;
|
|
23
|
+
/**
|
|
24
|
+
* Format a change classification for human-readable display.
|
|
25
|
+
*/
|
|
26
|
+
export declare function formatChangeClassification(classification: ChangeClassification): string;
|
|
27
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EACV,WAAW,EACX,gBAAgB,EAChB,oBAAoB,EACpB,oBAAoB,EACrB,MAAM,kBAAkB,CAAC;AA0B1B;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG;IAClD,cAAc,EAAE,WAAW,CAAC;IAC5B,UAAU,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IACtC,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB,CAuCA;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,WAAW,EAAE,WAAW,EACxB,gBAAgB,EAAE,gBAAgB,EAClC,mBAAmB,EAAE,OAAO,GAC3B,oBAAoB,CAQtB;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,cAAc,EAAE,oBAAoB,GAAG,MAAM,CAgDvF"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Change Classification (Heuristic)
|
|
4
|
+
*
|
|
5
|
+
* Classifies changes as SURFACE/LOCAL/CROSS_CUTTING using pattern matching.
|
|
6
|
+
* No LLM required โ pure heuristics, runs in <5ms.
|
|
7
|
+
*
|
|
8
|
+
* Extracted from Charter Cloud (Operating Charter ยง6.1).
|
|
9
|
+
*/
|
|
10
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
+
exports.heuristicClassify = heuristicClassify;
|
|
12
|
+
exports.determineRecommendation = determineRecommendation;
|
|
13
|
+
exports.formatChangeClassification = formatChangeClassification;
|
|
14
|
+
// ============================================================================
|
|
15
|
+
// Classification Patterns
|
|
16
|
+
// ============================================================================
|
|
17
|
+
const SURFACE_PATTERNS = [
|
|
18
|
+
/\b(readme|doc|comment|typo|spelling|label|text|copy|i18n|localization)\b/i,
|
|
19
|
+
/\b(rename|naming|variable name|constant name)\b/i,
|
|
20
|
+
/\.(md|txt|json)$/i,
|
|
21
|
+
];
|
|
22
|
+
const CROSS_CUTTING_PATTERNS = [
|
|
23
|
+
/\b(schema|migration|data model|database)\b/i,
|
|
24
|
+
/\b(api|endpoint|contract|interface change)\b/i,
|
|
25
|
+
/\b(workflow|orchestration|pipeline|dag)\b/i,
|
|
26
|
+
/\b(integration|third[- ]?party|external)\b/i,
|
|
27
|
+
/\b(infrastructure|deploy|cicd|github action)\b/i,
|
|
28
|
+
/\b(auth|security|permission|rbac|oauth)\b/i,
|
|
29
|
+
/\b(multi[- ]?service|cross[- ]?cutting|system[- ]?wide)\b/i,
|
|
30
|
+
];
|
|
31
|
+
// ============================================================================
|
|
32
|
+
// Public API
|
|
33
|
+
// ============================================================================
|
|
34
|
+
/**
|
|
35
|
+
* Heuristic classification based on subject content.
|
|
36
|
+
* Returns a suggested classification with confidence and signal list.
|
|
37
|
+
*/
|
|
38
|
+
function heuristicClassify(subject) {
|
|
39
|
+
const signals = [];
|
|
40
|
+
for (const pattern of SURFACE_PATTERNS) {
|
|
41
|
+
if (pattern.test(subject)) {
|
|
42
|
+
signals.push(`Surface pattern: ${pattern.source}`);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
for (const pattern of CROSS_CUTTING_PATTERNS) {
|
|
46
|
+
if (pattern.test(subject)) {
|
|
47
|
+
signals.push(`Cross-cutting pattern: ${pattern.source}`);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
const surfaceSignals = signals.filter(s => s.startsWith('Surface'));
|
|
51
|
+
const crossCuttingSignals = signals.filter(s => s.startsWith('Cross-cutting'));
|
|
52
|
+
if (crossCuttingSignals.length > 0) {
|
|
53
|
+
return {
|
|
54
|
+
suggestedClass: 'CROSS_CUTTING',
|
|
55
|
+
confidence: crossCuttingSignals.length >= 2 ? 'HIGH' : 'MEDIUM',
|
|
56
|
+
signals,
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
if (surfaceSignals.length > 0 && crossCuttingSignals.length === 0) {
|
|
60
|
+
return {
|
|
61
|
+
suggestedClass: 'SURFACE',
|
|
62
|
+
confidence: surfaceSignals.length >= 2 ? 'HIGH' : 'MEDIUM',
|
|
63
|
+
signals,
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
return {
|
|
67
|
+
suggestedClass: 'LOCAL',
|
|
68
|
+
confidence: 'LOW',
|
|
69
|
+
signals: ['No strong patterns detected - defaulting to LOCAL'],
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Determine recommendation based on classification and governance status.
|
|
74
|
+
*/
|
|
75
|
+
function determineRecommendation(changeClass, governanceStatus, mitigationsRequired) {
|
|
76
|
+
if (governanceStatus === 'VIOLATION')
|
|
77
|
+
return 'REJECT';
|
|
78
|
+
if (governanceStatus === 'NEEDS_REVIEW')
|
|
79
|
+
return 'ESCALATE';
|
|
80
|
+
if (changeClass === 'CROSS_CUTTING') {
|
|
81
|
+
return mitigationsRequired ? 'APPROVE_WITH_MITIGATIONS' : 'ESCALATE';
|
|
82
|
+
}
|
|
83
|
+
if (mitigationsRequired)
|
|
84
|
+
return 'APPROVE_WITH_MITIGATIONS';
|
|
85
|
+
return 'APPROVE';
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Format a change classification for human-readable display.
|
|
89
|
+
*/
|
|
90
|
+
function formatChangeClassification(classification) {
|
|
91
|
+
const sections = [];
|
|
92
|
+
const classBadge = classification.changeClass === 'CROSS_CUTTING' ? '๐ด'
|
|
93
|
+
: classification.changeClass === 'LOCAL' ? '๐ก'
|
|
94
|
+
: '๐ข';
|
|
95
|
+
sections.push(`## ${classBadge} Change Classification: ${classification.changeClass}`);
|
|
96
|
+
sections.push(`**Subject:** ${classification.subjectSummary}`);
|
|
97
|
+
sections.push(`**Type:** ${classification.subjectType} | **Created:** ${classification.createdAt.split('T')[0]}`);
|
|
98
|
+
if (classification.affectedSystems.length > 0) {
|
|
99
|
+
sections.push(`\n### Affected Systems (${classification.affectedCount})`);
|
|
100
|
+
for (const system of classification.affectedSystems) {
|
|
101
|
+
sections.push(`- ${system}`);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
const statusIcon = classification.governanceStatus === 'CLEAR' ? 'โ
'
|
|
105
|
+
: classification.governanceStatus === 'VIOLATION' ? 'โ'
|
|
106
|
+
: 'โ ๏ธ';
|
|
107
|
+
sections.push(`\n### Governance Status: ${statusIcon} ${classification.governanceStatus}`);
|
|
108
|
+
if (classification.policyViolations.length > 0) {
|
|
109
|
+
sections.push('**Policy Violations:**');
|
|
110
|
+
for (const violation of classification.policyViolations) {
|
|
111
|
+
sections.push(`- ${violation}`);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
const recIcon = classification.recommendation === 'APPROVE' ? 'โ
'
|
|
115
|
+
: classification.recommendation === 'APPROVE_WITH_MITIGATIONS' ? 'โ ๏ธ'
|
|
116
|
+
: classification.recommendation === 'REJECT' ? 'โ'
|
|
117
|
+
: '๐';
|
|
118
|
+
sections.push(`\n### Recommendation: ${recIcon} ${classification.recommendation}`);
|
|
119
|
+
if (classification.rationale) {
|
|
120
|
+
sections.push(`**Rationale:** ${classification.rationale}`);
|
|
121
|
+
}
|
|
122
|
+
if (classification.mitigations.length > 0) {
|
|
123
|
+
sections.push('\n**Required Mitigations:**');
|
|
124
|
+
for (const mitigation of classification.mitigations) {
|
|
125
|
+
sections.push(`- ${mitigation}`);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
return sections.join('\n');
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@stackbilt/classify",
|
|
3
|
+
"version": "0.1.1",
|
|
4
|
+
"description": "Heuristic change classification (SURFACE/LOCAL/CROSS_CUTTING)",
|
|
5
|
+
"main": "./dist/index.js",
|
|
6
|
+
"types": "./dist/index.d.ts",
|
|
7
|
+
"exports": {
|
|
8
|
+
".": {
|
|
9
|
+
"types": "./dist/index.d.ts",
|
|
10
|
+
"default": "./dist/index.js"
|
|
11
|
+
}
|
|
12
|
+
},
|
|
13
|
+
"files": [
|
|
14
|
+
"dist",
|
|
15
|
+
"README.md",
|
|
16
|
+
"LICENSE"
|
|
17
|
+
],
|
|
18
|
+
"engines": {
|
|
19
|
+
"node": ">=18.0.0"
|
|
20
|
+
},
|
|
21
|
+
"repository": {
|
|
22
|
+
"type": "git",
|
|
23
|
+
"url": "https://github.com/Stackbilt-dev/charter.git",
|
|
24
|
+
"directory": "packages/classify"
|
|
25
|
+
},
|
|
26
|
+
"bugs": {
|
|
27
|
+
"url": "https://github.com/Stackbilt-dev/charter/issues"
|
|
28
|
+
},
|
|
29
|
+
"homepage": "https://github.com/Stackbilt-dev/charter#readme",
|
|
30
|
+
"dependencies": {
|
|
31
|
+
"@stackbilt/types": "workspace:*"
|
|
32
|
+
},
|
|
33
|
+
"license": "Apache-2.0"
|
|
34
|
+
}
|