@musubix/policy 3.4.5 → 3.7.3
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/LICENSE +21 -0
- package/dist/balance/BalanceRuleEngine.d.ts +100 -0
- package/dist/balance/BalanceRuleEngine.d.ts.map +1 -0
- package/dist/balance/BalanceRuleEngine.js +241 -0
- package/dist/balance/BalanceRuleEngine.js.map +1 -0
- package/dist/balance/index.d.ts +9 -0
- package/dist/balance/index.d.ts.map +1 -0
- package/dist/balance/index.js +9 -0
- package/dist/balance/index.js.map +1 -0
- package/dist/balance/types.d.ts +109 -0
- package/dist/balance/types.d.ts.map +1 -0
- package/dist/balance/types.js +90 -0
- package/dist/balance/types.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/non-negotiables/NonNegotiablesEngine.d.ts +109 -0
- package/dist/non-negotiables/NonNegotiablesEngine.d.ts.map +1 -0
- package/dist/non-negotiables/NonNegotiablesEngine.js +162 -0
- package/dist/non-negotiables/NonNegotiablesEngine.js.map +1 -0
- package/dist/non-negotiables/index.d.ts +9 -0
- package/dist/non-negotiables/index.d.ts.map +1 -0
- package/dist/non-negotiables/index.js +9 -0
- package/dist/non-negotiables/index.js.map +1 -0
- package/dist/non-negotiables/types.d.ts +141 -0
- package/dist/non-negotiables/types.d.ts.map +1 -0
- package/dist/non-negotiables/types.js +129 -0
- package/dist/non-negotiables/types.js.map +1 -0
- package/package.json +9 -9
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 nahisaho
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BalanceRuleEngine Entity
|
|
3
|
+
*
|
|
4
|
+
* Implements the 90/10 rule for change balance validation.
|
|
5
|
+
* Ensures that counted changes (real functionality) maintain a high ratio.
|
|
6
|
+
*
|
|
7
|
+
* @see TSK-FR-028〜032 - BalanceRuleEngine
|
|
8
|
+
* @see REQ-FR-001〜003 - BalanceRuleEngine
|
|
9
|
+
* @trace DES-MUSUBIX-FR-001 DES-POLICY-001
|
|
10
|
+
*/
|
|
11
|
+
import { type BalanceChange, type BalanceChangeType, type BalanceMetrics, type BalanceEvaluationResult, type BalanceConfig } from './types.js';
|
|
12
|
+
/**
|
|
13
|
+
* BalanceRuleEngine Interface
|
|
14
|
+
*/
|
|
15
|
+
export interface IBalanceRuleEngine {
|
|
16
|
+
/** Evaluate the current balance of changes */
|
|
17
|
+
evaluateBalance(): Promise<BalanceEvaluationResult>;
|
|
18
|
+
/** Get current statistics */
|
|
19
|
+
getStats(): Promise<BalanceMetrics>;
|
|
20
|
+
/** Generate a detailed balance report */
|
|
21
|
+
getBalanceReport(): Promise<string>;
|
|
22
|
+
/** Add a change record */
|
|
23
|
+
addChange(change: BalanceChange): void;
|
|
24
|
+
/** Remove a change record */
|
|
25
|
+
removeChange(changeId: string): void;
|
|
26
|
+
/** Get all changes */
|
|
27
|
+
getChanges(): readonly BalanceChange[];
|
|
28
|
+
/** Clear all changes */
|
|
29
|
+
clear(): void;
|
|
30
|
+
/** Infer change type from file path */
|
|
31
|
+
inferChangeType(filePath: string): BalanceChangeType;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* BalanceRuleEngine Implementation
|
|
35
|
+
*
|
|
36
|
+
* Tracks and evaluates the balance between counted and non-counted changes
|
|
37
|
+
* to ensure productivity metrics stay healthy.
|
|
38
|
+
*
|
|
39
|
+
* @example
|
|
40
|
+
* ```typescript
|
|
41
|
+
* const engine = createBalanceRuleEngine();
|
|
42
|
+
*
|
|
43
|
+
* // Add changes
|
|
44
|
+
* engine.addChange(createBalanceChange({ type: 'feature', file: 'src/app.ts', linesAdded: 100, linesRemoved: 0 }));
|
|
45
|
+
* engine.addChange(createBalanceChange({ type: 'config', file: 'tsconfig.json', linesAdded: 5, linesRemoved: 0 }));
|
|
46
|
+
*
|
|
47
|
+
* // Evaluate balance
|
|
48
|
+
* const result = await engine.evaluateBalance();
|
|
49
|
+
* if (!result.passed) {
|
|
50
|
+
* console.log('Balance warning:', result.message);
|
|
51
|
+
* }
|
|
52
|
+
* ```
|
|
53
|
+
*/
|
|
54
|
+
export declare class BalanceRuleEngine implements IBalanceRuleEngine {
|
|
55
|
+
private readonly config;
|
|
56
|
+
private changes;
|
|
57
|
+
constructor(config?: BalanceConfig);
|
|
58
|
+
/**
|
|
59
|
+
* Evaluate the current balance of changes
|
|
60
|
+
*/
|
|
61
|
+
evaluateBalance(): Promise<BalanceEvaluationResult>;
|
|
62
|
+
/**
|
|
63
|
+
* Get current statistics
|
|
64
|
+
*/
|
|
65
|
+
getStats(): Promise<BalanceMetrics>;
|
|
66
|
+
/**
|
|
67
|
+
* Generate a detailed balance report
|
|
68
|
+
*/
|
|
69
|
+
getBalanceReport(): Promise<string>;
|
|
70
|
+
/**
|
|
71
|
+
* Add a change record
|
|
72
|
+
*/
|
|
73
|
+
addChange(change: BalanceChange): void;
|
|
74
|
+
/**
|
|
75
|
+
* Remove a change record
|
|
76
|
+
*/
|
|
77
|
+
removeChange(changeId: string): void;
|
|
78
|
+
/**
|
|
79
|
+
* Get all changes
|
|
80
|
+
*/
|
|
81
|
+
getChanges(): readonly BalanceChange[];
|
|
82
|
+
/**
|
|
83
|
+
* Clear all changes
|
|
84
|
+
*/
|
|
85
|
+
clear(): void;
|
|
86
|
+
/**
|
|
87
|
+
* Infer change type from file path
|
|
88
|
+
*/
|
|
89
|
+
inferChangeType(filePath: string): BalanceChangeType;
|
|
90
|
+
private groupChangesByType;
|
|
91
|
+
private generateRecommendations;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Create a BalanceRuleEngine instance
|
|
95
|
+
*
|
|
96
|
+
* @param config - Optional configuration
|
|
97
|
+
* @returns IBalanceRuleEngine instance
|
|
98
|
+
*/
|
|
99
|
+
export declare function createBalanceRuleEngine(config?: BalanceConfig): IBalanceRuleEngine;
|
|
100
|
+
//# sourceMappingURL=BalanceRuleEngine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BalanceRuleEngine.d.ts","sourceRoot":"","sources":["../../src/balance/BalanceRuleEngine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,iBAAiB,EACtB,KAAK,cAAc,EACnB,KAAK,uBAAuB,EAC5B,KAAK,aAAa,EAInB,MAAM,YAAY,CAAC;AAEpB;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,8CAA8C;IAC9C,eAAe,IAAI,OAAO,CAAC,uBAAuB,CAAC,CAAC;IAEpD,6BAA6B;IAC7B,QAAQ,IAAI,OAAO,CAAC,cAAc,CAAC,CAAC;IAEpC,yCAAyC;IACzC,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAEpC,0BAA0B;IAC1B,SAAS,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAAC;IAEvC,6BAA6B;IAC7B,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IAErC,sBAAsB;IACtB,UAAU,IAAI,SAAS,aAAa,EAAE,CAAC;IAEvC,wBAAwB;IACxB,KAAK,IAAI,IAAI,CAAC;IAEd,uCAAuC;IACvC,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,iBAAiB,CAAC;CACtD;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,iBAAkB,YAAW,kBAAkB;IAC1D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgB;IACvC,OAAO,CAAC,OAAO,CAAyC;gBAE5C,MAAM,CAAC,EAAE,aAAa;IAIlC;;OAEG;IACG,eAAe,IAAI,OAAO,CAAC,uBAAuB,CAAC;IAgCzD;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,cAAc,CAAC;IAqCzC;;OAEG;IACG,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC;IA4BzC;;OAEG;IACH,SAAS,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI;IAItC;;OAEG;IACH,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAIpC;;OAEG;IACH,UAAU,IAAI,SAAS,aAAa,EAAE;IAItC;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;OAEG;IACH,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,iBAAiB;IAqEpD,OAAO,CAAC,kBAAkB;IAY1B,OAAO,CAAC,uBAAuB;CAchC;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,CAAC,EAAE,aAAa,GAAG,kBAAkB,CAElF"}
|
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BalanceRuleEngine Entity
|
|
3
|
+
*
|
|
4
|
+
* Implements the 90/10 rule for change balance validation.
|
|
5
|
+
* Ensures that counted changes (real functionality) maintain a high ratio.
|
|
6
|
+
*
|
|
7
|
+
* @see TSK-FR-028〜032 - BalanceRuleEngine
|
|
8
|
+
* @see REQ-FR-001〜003 - BalanceRuleEngine
|
|
9
|
+
* @trace DES-MUSUBIX-FR-001 DES-POLICY-001
|
|
10
|
+
*/
|
|
11
|
+
import { getTotalLines, isCounted, DEFAULT_BALANCE_CONFIG, } from './types.js';
|
|
12
|
+
/**
|
|
13
|
+
* BalanceRuleEngine Implementation
|
|
14
|
+
*
|
|
15
|
+
* Tracks and evaluates the balance between counted and non-counted changes
|
|
16
|
+
* to ensure productivity metrics stay healthy.
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* ```typescript
|
|
20
|
+
* const engine = createBalanceRuleEngine();
|
|
21
|
+
*
|
|
22
|
+
* // Add changes
|
|
23
|
+
* engine.addChange(createBalanceChange({ type: 'feature', file: 'src/app.ts', linesAdded: 100, linesRemoved: 0 }));
|
|
24
|
+
* engine.addChange(createBalanceChange({ type: 'config', file: 'tsconfig.json', linesAdded: 5, linesRemoved: 0 }));
|
|
25
|
+
*
|
|
26
|
+
* // Evaluate balance
|
|
27
|
+
* const result = await engine.evaluateBalance();
|
|
28
|
+
* if (!result.passed) {
|
|
29
|
+
* console.log('Balance warning:', result.message);
|
|
30
|
+
* }
|
|
31
|
+
* ```
|
|
32
|
+
*/
|
|
33
|
+
export class BalanceRuleEngine {
|
|
34
|
+
config;
|
|
35
|
+
changes = new Map();
|
|
36
|
+
constructor(config) {
|
|
37
|
+
this.config = config ?? DEFAULT_BALANCE_CONFIG;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Evaluate the current balance of changes
|
|
41
|
+
*/
|
|
42
|
+
async evaluateBalance() {
|
|
43
|
+
const metrics = await this.getStats();
|
|
44
|
+
if (metrics.totalChanges === 0) {
|
|
45
|
+
return {
|
|
46
|
+
passed: true,
|
|
47
|
+
message: 'No changes to evaluate',
|
|
48
|
+
severity: 'info',
|
|
49
|
+
metrics,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
const recommendations = this.generateRecommendations(metrics);
|
|
53
|
+
if (metrics.exceedsThreshold) {
|
|
54
|
+
return {
|
|
55
|
+
passed: false,
|
|
56
|
+
message: `Balance warning: ${(metrics.ratio * 100).toFixed(1)}% non-counted changes exceeds ${(this.config.maxNonCountedRatio * 100).toFixed(0)}% threshold`,
|
|
57
|
+
severity: this.config.exceedSeverity,
|
|
58
|
+
metrics,
|
|
59
|
+
recommendations,
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
return {
|
|
63
|
+
passed: true,
|
|
64
|
+
message: `Balance OK: ${(metrics.ratio * 100).toFixed(1)}% non-counted changes (threshold: ${(this.config.maxNonCountedRatio * 100).toFixed(0)}%)`,
|
|
65
|
+
severity: 'info',
|
|
66
|
+
metrics,
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Get current statistics
|
|
71
|
+
*/
|
|
72
|
+
async getStats() {
|
|
73
|
+
let countedChanges = 0;
|
|
74
|
+
let nonCountedChanges = 0;
|
|
75
|
+
let countedLines = 0;
|
|
76
|
+
let nonCountedLines = 0;
|
|
77
|
+
for (const change of this.changes.values()) {
|
|
78
|
+
const lines = getTotalLines(change);
|
|
79
|
+
if (isCounted(change.type)) {
|
|
80
|
+
countedChanges++;
|
|
81
|
+
// Apply type weight from config
|
|
82
|
+
const weight = this.config.typeWeights[change.type];
|
|
83
|
+
countedLines += lines * weight;
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
nonCountedChanges++;
|
|
87
|
+
nonCountedLines += lines;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
const totalChanges = countedChanges + nonCountedChanges;
|
|
91
|
+
const totalLines = countedLines + nonCountedLines;
|
|
92
|
+
const ratio = totalLines > 0 ? nonCountedLines / totalLines : 0;
|
|
93
|
+
return {
|
|
94
|
+
countedChanges,
|
|
95
|
+
nonCountedChanges,
|
|
96
|
+
totalChanges,
|
|
97
|
+
countedLines: Math.round(countedLines),
|
|
98
|
+
nonCountedLines,
|
|
99
|
+
totalLines: Math.round(totalLines),
|
|
100
|
+
ratio,
|
|
101
|
+
exceedsThreshold: ratio > this.config.maxNonCountedRatio,
|
|
102
|
+
threshold: this.config.maxNonCountedRatio,
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Generate a detailed balance report
|
|
107
|
+
*/
|
|
108
|
+
async getBalanceReport() {
|
|
109
|
+
const metrics = await this.getStats();
|
|
110
|
+
const lines = [];
|
|
111
|
+
lines.push('# Balance Report');
|
|
112
|
+
lines.push('');
|
|
113
|
+
lines.push('## Summary');
|
|
114
|
+
lines.push(`- **Total Changes**: ${metrics.totalChanges}`);
|
|
115
|
+
lines.push(`- **Counted Changes**: ${metrics.countedChanges} (${metrics.countedLines} lines)`);
|
|
116
|
+
lines.push(`- **Non-counted Changes**: ${metrics.nonCountedChanges} (${metrics.nonCountedLines} lines)`);
|
|
117
|
+
lines.push(`- **Balance Ratio**: ${(metrics.ratio * 100).toFixed(1)}% non-counted`);
|
|
118
|
+
lines.push(`- **Threshold**: ${(metrics.threshold * 100).toFixed(0)}%`);
|
|
119
|
+
lines.push(`- **Status**: ${metrics.exceedsThreshold ? '⚠️ Exceeds Threshold' : '✅ Within Threshold'}`);
|
|
120
|
+
lines.push('');
|
|
121
|
+
if (this.changes.size > 0) {
|
|
122
|
+
lines.push('## Changes by Type');
|
|
123
|
+
const byType = this.groupChangesByType();
|
|
124
|
+
for (const [type, changes] of byType.entries()) {
|
|
125
|
+
const totalLines = changes.reduce((sum, c) => sum + getTotalLines(c), 0);
|
|
126
|
+
const category = isCounted(type) ? 'counted' : 'non-counted';
|
|
127
|
+
lines.push(`- **${type}** (${category}): ${changes.length} changes, ${totalLines} lines`);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
return lines.join('\n');
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Add a change record
|
|
134
|
+
*/
|
|
135
|
+
addChange(change) {
|
|
136
|
+
this.changes.set(change.id, change);
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Remove a change record
|
|
140
|
+
*/
|
|
141
|
+
removeChange(changeId) {
|
|
142
|
+
this.changes.delete(changeId);
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Get all changes
|
|
146
|
+
*/
|
|
147
|
+
getChanges() {
|
|
148
|
+
return Object.freeze([...this.changes.values()]);
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Clear all changes
|
|
152
|
+
*/
|
|
153
|
+
clear() {
|
|
154
|
+
this.changes.clear();
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Infer change type from file path
|
|
158
|
+
*/
|
|
159
|
+
inferChangeType(filePath) {
|
|
160
|
+
const lower = filePath.toLowerCase();
|
|
161
|
+
// Test files
|
|
162
|
+
if (lower.includes('.test.') ||
|
|
163
|
+
lower.includes('.spec.') ||
|
|
164
|
+
lower.includes('__tests__') ||
|
|
165
|
+
lower.includes('__mocks__')) {
|
|
166
|
+
return 'test';
|
|
167
|
+
}
|
|
168
|
+
// CI/CD
|
|
169
|
+
if (lower.includes('.github/') ||
|
|
170
|
+
lower.includes('.gitlab-ci') ||
|
|
171
|
+
lower.includes('azure-pipelines') ||
|
|
172
|
+
lower.includes('jenkinsfile')) {
|
|
173
|
+
return 'ci';
|
|
174
|
+
}
|
|
175
|
+
// Documentation
|
|
176
|
+
if (lower.endsWith('.md') ||
|
|
177
|
+
lower.includes('/docs/') ||
|
|
178
|
+
lower.endsWith('.rst') ||
|
|
179
|
+
lower.endsWith('.txt')) {
|
|
180
|
+
return 'docs';
|
|
181
|
+
}
|
|
182
|
+
// Configuration
|
|
183
|
+
if (lower.endsWith('.json') ||
|
|
184
|
+
lower.endsWith('.yml') ||
|
|
185
|
+
lower.endsWith('.yaml') ||
|
|
186
|
+
lower.endsWith('.toml') ||
|
|
187
|
+
lower.includes('config') ||
|
|
188
|
+
lower.startsWith('.') ||
|
|
189
|
+
lower.includes('rc.') ||
|
|
190
|
+
lower.includes('.config.')) {
|
|
191
|
+
return 'config';
|
|
192
|
+
}
|
|
193
|
+
// Build/Packaging
|
|
194
|
+
if (lower.includes('dockerfile') ||
|
|
195
|
+
lower.includes('makefile') ||
|
|
196
|
+
lower.includes('package.json') ||
|
|
197
|
+
lower.includes('package-lock.json') ||
|
|
198
|
+
lower.includes('pnpm-lock.yaml') ||
|
|
199
|
+
lower.includes('yarn.lock') ||
|
|
200
|
+
lower.includes('tsconfig') ||
|
|
201
|
+
lower.includes('webpack') ||
|
|
202
|
+
lower.includes('rollup') ||
|
|
203
|
+
lower.includes('vite.config')) {
|
|
204
|
+
return 'build';
|
|
205
|
+
}
|
|
206
|
+
// Default to feature for source files
|
|
207
|
+
return 'feature';
|
|
208
|
+
}
|
|
209
|
+
// Private helpers
|
|
210
|
+
groupChangesByType() {
|
|
211
|
+
const byType = new Map();
|
|
212
|
+
for (const change of this.changes.values()) {
|
|
213
|
+
const existing = byType.get(change.type) ?? [];
|
|
214
|
+
existing.push(change);
|
|
215
|
+
byType.set(change.type, existing);
|
|
216
|
+
}
|
|
217
|
+
return byType;
|
|
218
|
+
}
|
|
219
|
+
generateRecommendations(metrics) {
|
|
220
|
+
const recommendations = [];
|
|
221
|
+
if (metrics.exceedsThreshold) {
|
|
222
|
+
if (metrics.nonCountedLines > metrics.countedLines * 0.2) {
|
|
223
|
+
recommendations.push('Consider batching configuration changes separately from feature work');
|
|
224
|
+
}
|
|
225
|
+
if (metrics.countedChanges === 0) {
|
|
226
|
+
recommendations.push('No counted changes detected. Ensure feature/bugfix work is included');
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
return Object.freeze(recommendations);
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* Create a BalanceRuleEngine instance
|
|
234
|
+
*
|
|
235
|
+
* @param config - Optional configuration
|
|
236
|
+
* @returns IBalanceRuleEngine instance
|
|
237
|
+
*/
|
|
238
|
+
export function createBalanceRuleEngine(config) {
|
|
239
|
+
return new BalanceRuleEngine(config);
|
|
240
|
+
}
|
|
241
|
+
//# sourceMappingURL=BalanceRuleEngine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BalanceRuleEngine.js","sourceRoot":"","sources":["../../src/balance/BalanceRuleEngine.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/balance/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,wBAAwB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/balance/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,wBAAwB,CAAC"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BalanceRule Value Objects
|
|
3
|
+
*
|
|
4
|
+
* Defines balance rules for the 90/10 rule validation.
|
|
5
|
+
* Ensures that counted changes (real functionality) maintain a high ratio.
|
|
6
|
+
*
|
|
7
|
+
* @see TSK-FR-028 - BalanceRuleEngine型定義
|
|
8
|
+
* @see REQ-FR-001〜003 - BalanceRuleEngine
|
|
9
|
+
* @trace DES-MUSUBIX-FR-001 DES-POLICY-001
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* Change category classification
|
|
13
|
+
* - counted: Real functionality that counts toward productivity
|
|
14
|
+
* - non-counted: Support/infrastructure that doesn't count
|
|
15
|
+
*/
|
|
16
|
+
export type ChangeCategory = 'counted' | 'non-counted';
|
|
17
|
+
/**
|
|
18
|
+
* Change type for balance calculation
|
|
19
|
+
*/
|
|
20
|
+
export type BalanceChangeType = 'feature' | 'bugfix' | 'test' | 'refactor' | 'config' | 'build' | 'ci' | 'docs' | 'style' | 'chore';
|
|
21
|
+
/**
|
|
22
|
+
* Balance change record
|
|
23
|
+
*/
|
|
24
|
+
export interface BalanceChange {
|
|
25
|
+
readonly id: string;
|
|
26
|
+
readonly type: BalanceChangeType;
|
|
27
|
+
readonly category: ChangeCategory;
|
|
28
|
+
readonly file: string;
|
|
29
|
+
readonly linesAdded: number;
|
|
30
|
+
readonly linesRemoved: number;
|
|
31
|
+
readonly timestamp: number;
|
|
32
|
+
readonly description?: string;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Balance metrics
|
|
36
|
+
*/
|
|
37
|
+
export interface BalanceMetrics {
|
|
38
|
+
readonly countedChanges: number;
|
|
39
|
+
readonly nonCountedChanges: number;
|
|
40
|
+
readonly totalChanges: number;
|
|
41
|
+
readonly countedLines: number;
|
|
42
|
+
readonly nonCountedLines: number;
|
|
43
|
+
readonly totalLines: number;
|
|
44
|
+
readonly ratio: number;
|
|
45
|
+
readonly exceedsThreshold: boolean;
|
|
46
|
+
readonly threshold: number;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Balance rule evaluation result
|
|
50
|
+
*/
|
|
51
|
+
export interface BalanceEvaluationResult {
|
|
52
|
+
readonly passed: boolean;
|
|
53
|
+
readonly message: string;
|
|
54
|
+
readonly severity: 'info' | 'warning' | 'error';
|
|
55
|
+
readonly metrics: BalanceMetrics;
|
|
56
|
+
readonly recommendations?: readonly string[];
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Balance configuration
|
|
60
|
+
*/
|
|
61
|
+
export interface BalanceConfig {
|
|
62
|
+
/** Maximum allowed ratio of non-counted changes (0-1) */
|
|
63
|
+
readonly maxNonCountedRatio: number;
|
|
64
|
+
/** Severity when threshold exceeded */
|
|
65
|
+
readonly exceedSeverity: 'warning' | 'error';
|
|
66
|
+
/** Weights for different change types */
|
|
67
|
+
readonly typeWeights: Readonly<Record<BalanceChangeType, number>>;
|
|
68
|
+
/** Whether to include test code in counted */
|
|
69
|
+
readonly countTests: boolean;
|
|
70
|
+
/** Test code weight (0-1) */
|
|
71
|
+
readonly testWeight: number;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Default balance configuration
|
|
75
|
+
* 90/10 rule: At least 90% counted changes, max 10% non-counted
|
|
76
|
+
*/
|
|
77
|
+
export declare const DEFAULT_BALANCE_CONFIG: BalanceConfig;
|
|
78
|
+
/**
|
|
79
|
+
* Mapping of change types to categories
|
|
80
|
+
*/
|
|
81
|
+
export declare const CHANGE_TYPE_CATEGORIES: Readonly<Record<BalanceChangeType, ChangeCategory>>;
|
|
82
|
+
/**
|
|
83
|
+
* Get category for a change type
|
|
84
|
+
*/
|
|
85
|
+
export declare function getChangeCategory(type: BalanceChangeType): ChangeCategory;
|
|
86
|
+
/**
|
|
87
|
+
* Check if a change type is counted
|
|
88
|
+
*/
|
|
89
|
+
export declare function isCounted(type: BalanceChangeType): boolean;
|
|
90
|
+
/**
|
|
91
|
+
* Create a balance change record
|
|
92
|
+
*/
|
|
93
|
+
export declare function createBalanceChange(params: {
|
|
94
|
+
id?: string;
|
|
95
|
+
type: BalanceChangeType;
|
|
96
|
+
file: string;
|
|
97
|
+
linesAdded: number;
|
|
98
|
+
linesRemoved: number;
|
|
99
|
+
description?: string;
|
|
100
|
+
}): BalanceChange;
|
|
101
|
+
/**
|
|
102
|
+
* Calculate total lines for a change
|
|
103
|
+
*/
|
|
104
|
+
export declare function getTotalLines(change: BalanceChange): number;
|
|
105
|
+
/**
|
|
106
|
+
* Calculate weighted lines for a change
|
|
107
|
+
*/
|
|
108
|
+
export declare function getWeightedLines(change: BalanceChange, config?: BalanceConfig): number;
|
|
109
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/balance/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BalanceRule Value Objects
|
|
3
|
+
*
|
|
4
|
+
* Defines balance rules for the 90/10 rule validation.
|
|
5
|
+
* Ensures that counted changes (real functionality) maintain a high ratio.
|
|
6
|
+
*
|
|
7
|
+
* @see TSK-FR-028 - BalanceRuleEngine型定義
|
|
8
|
+
* @see REQ-FR-001〜003 - BalanceRuleEngine
|
|
9
|
+
* @trace DES-MUSUBIX-FR-001 DES-POLICY-001
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* Default balance configuration
|
|
13
|
+
* 90/10 rule: At least 90% counted changes, max 10% non-counted
|
|
14
|
+
*/
|
|
15
|
+
export const DEFAULT_BALANCE_CONFIG = Object.freeze({
|
|
16
|
+
maxNonCountedRatio: 0.1, // 10%
|
|
17
|
+
exceedSeverity: 'warning',
|
|
18
|
+
typeWeights: Object.freeze({
|
|
19
|
+
feature: 1.0,
|
|
20
|
+
bugfix: 1.0,
|
|
21
|
+
test: 0.5, // Tests count at 50%
|
|
22
|
+
refactor: 0.8, // Refactoring counts at 80%
|
|
23
|
+
config: 0,
|
|
24
|
+
build: 0,
|
|
25
|
+
ci: 0,
|
|
26
|
+
docs: 0,
|
|
27
|
+
style: 0,
|
|
28
|
+
chore: 0,
|
|
29
|
+
}),
|
|
30
|
+
countTests: true,
|
|
31
|
+
testWeight: 0.5,
|
|
32
|
+
});
|
|
33
|
+
/**
|
|
34
|
+
* Mapping of change types to categories
|
|
35
|
+
*/
|
|
36
|
+
export const CHANGE_TYPE_CATEGORIES = Object.freeze({
|
|
37
|
+
feature: 'counted',
|
|
38
|
+
bugfix: 'counted',
|
|
39
|
+
test: 'counted',
|
|
40
|
+
refactor: 'counted',
|
|
41
|
+
config: 'non-counted',
|
|
42
|
+
build: 'non-counted',
|
|
43
|
+
ci: 'non-counted',
|
|
44
|
+
docs: 'non-counted',
|
|
45
|
+
style: 'non-counted',
|
|
46
|
+
chore: 'non-counted',
|
|
47
|
+
});
|
|
48
|
+
/**
|
|
49
|
+
* Get category for a change type
|
|
50
|
+
*/
|
|
51
|
+
export function getChangeCategory(type) {
|
|
52
|
+
return CHANGE_TYPE_CATEGORIES[type];
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Check if a change type is counted
|
|
56
|
+
*/
|
|
57
|
+
export function isCounted(type) {
|
|
58
|
+
return getChangeCategory(type) === 'counted';
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Create a balance change record
|
|
62
|
+
*/
|
|
63
|
+
export function createBalanceChange(params) {
|
|
64
|
+
const id = params.id ?? `CHG-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
|
|
65
|
+
return Object.freeze({
|
|
66
|
+
id,
|
|
67
|
+
type: params.type,
|
|
68
|
+
category: getChangeCategory(params.type),
|
|
69
|
+
file: params.file,
|
|
70
|
+
linesAdded: params.linesAdded,
|
|
71
|
+
linesRemoved: params.linesRemoved,
|
|
72
|
+
timestamp: Date.now(),
|
|
73
|
+
description: params.description,
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Calculate total lines for a change
|
|
78
|
+
*/
|
|
79
|
+
export function getTotalLines(change) {
|
|
80
|
+
return change.linesAdded + change.linesRemoved;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Calculate weighted lines for a change
|
|
84
|
+
*/
|
|
85
|
+
export function getWeightedLines(change, config = DEFAULT_BALANCE_CONFIG) {
|
|
86
|
+
const totalLines = getTotalLines(change);
|
|
87
|
+
const weight = config.typeWeights[change.type];
|
|
88
|
+
return totalLines * weight;
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/balance/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAgFH;;;GAGG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAkB,MAAM,CAAC,MAAM,CAAC;IACjE,kBAAkB,EAAE,GAAG,EAAE,MAAM;IAC/B,cAAc,EAAE,SAAS;IACzB,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC;QACzB,OAAO,EAAE,GAAG;QACZ,MAAM,EAAE,GAAG;QACX,IAAI,EAAE,GAAG,EAAM,qBAAqB;QACpC,QAAQ,EAAE,GAAG,EAAE,4BAA4B;QAC3C,MAAM,EAAE,CAAC;QACT,KAAK,EAAE,CAAC;QACR,EAAE,EAAE,CAAC;QACL,IAAI,EAAE,CAAC;QACP,KAAK,EAAE,CAAC;QACR,KAAK,EAAE,CAAC;KACT,CAAC;IACF,UAAU,EAAE,IAAI;IAChB,UAAU,EAAE,GAAG;CAChB,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAwD,MAAM,CAAC,MAAM,CAAC;IACvG,OAAO,EAAE,SAAS;IAClB,MAAM,EAAE,SAAS;IACjB,IAAI,EAAE,SAAS;IACf,QAAQ,EAAE,SAAS;IACnB,MAAM,EAAE,aAAa;IACrB,KAAK,EAAE,aAAa;IACpB,EAAE,EAAE,aAAa;IACjB,IAAI,EAAE,aAAa;IACnB,KAAK,EAAE,aAAa;IACpB,KAAK,EAAE,aAAa;CACrB,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAuB;IACvD,OAAO,sBAAsB,CAAC,IAAI,CAAC,CAAC;AACtC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,IAAuB;IAC/C,OAAO,iBAAiB,CAAC,IAAI,CAAC,KAAK,SAAS,CAAC;AAC/C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAOnC;IACC,MAAM,EAAE,GAAG,MAAM,CAAC,EAAE,IAAI,OAAO,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;IAEtF,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,EAAE;QACF,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,QAAQ,EAAE,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC;QACxC,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;QACrB,WAAW,EAAE,MAAM,CAAC,WAAW;KAChC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,MAAqB;IACjD,OAAO,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,YAAY,CAAC;AACjD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAC9B,MAAqB,EACrB,SAAwB,sBAAsB;IAE9C,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IACzC,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC/C,OAAO,UAAU,GAAG,MAAM,CAAC;AAC7B,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -140,4 +140,6 @@ export declare class PolicyEngine implements IPolicyEngine {
|
|
|
140
140
|
* Constitution policies implementing the 9 Articles
|
|
141
141
|
*/
|
|
142
142
|
export declare const constitutionPolicies: Policy[];
|
|
143
|
+
export * from './non-negotiables/index.js';
|
|
144
|
+
export * from './balance/index.js';
|
|
143
145
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -421,4 +421,8 @@ export const constitutionPolicies = [
|
|
|
421
421
|
},
|
|
422
422
|
},
|
|
423
423
|
];
|
|
424
|
+
// FastRender Non-negotiables (v3.6.0)
|
|
425
|
+
export * from './non-negotiables/index.js';
|
|
426
|
+
// FastRender Balance Rules (v3.6.0)
|
|
427
|
+
export * from './balance/index.js';
|
|
424
428
|
//# sourceMappingURL=index.js.map
|