@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 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,9 @@
1
+ /**
2
+ * Balance Rule Module Index
3
+ *
4
+ * @see TSK-FR-027〜032 - BalanceRuleEngine
5
+ * @see REQ-FR-028〜031 - BalanceRuleEngine
6
+ */
7
+ export * from './types.js';
8
+ export * from './BalanceRuleEngine.js';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -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,9 @@
1
+ /**
2
+ * Balance Rule Module Index
3
+ *
4
+ * @see TSK-FR-027〜032 - BalanceRuleEngine
5
+ * @see REQ-FR-028〜031 - BalanceRuleEngine
6
+ */
7
+ export * from './types.js';
8
+ export * from './BalanceRuleEngine.js';
9
+ //# sourceMappingURL=index.js.map
@@ -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
@@ -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