@stackbilt/cli 0.1.9 → 0.1.11
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/README.md +39 -21
- package/dist/commands/audit.d.ts.map +1 -1
- package/dist/commands/audit.js +88 -4
- package/dist/commands/audit.js.map +1 -1
- package/dist/commands/init.d.ts +6 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +192 -42
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/setup.d.ts.map +1 -1
- package/dist/commands/setup.js +122 -2
- package/dist/commands/setup.js.map +1 -1
- package/dist/commands/validate.d.ts.map +1 -1
- package/dist/commands/validate.js +73 -6
- package/dist/commands/validate.js.map +1 -1
- package/dist/commands/why.d.ts +1 -0
- package/dist/commands/why.d.ts.map +1 -0
- package/dist/commands/why.js +39 -3
- package/dist/commands/why.js.map +1 -0
- package/dist/config.d.ts +12 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +40 -2
- package/dist/config.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -5
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -4,16 +4,28 @@ CLI entry point for Charter Kit -- a local-first governance toolkit for software
|
|
|
4
4
|
|
|
5
5
|
> **This is the only package most users need.** One install gives you the full Charter Kit toolkit.
|
|
6
6
|
|
|
7
|
-
## Install
|
|
8
|
-
|
|
9
|
-
```bash
|
|
10
|
-
npm install -
|
|
11
|
-
```
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
7
|
+
## Install (Recommended)
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
npm install --save-dev @stackbilt/cli
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
Use with `npx` in each repository:
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
npx charter
|
|
17
|
+
npx charter setup --ci github
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
Global install is optional if you want `charter` available system-wide:
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
npm install -g @stackbilt/cli
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
This pulls in all Charter Kit packages automatically. Use `charter setup` inside each repo to scaffold governance baseline files.
|
|
27
|
+
|
|
28
|
+
For CI pipelines, install as a dev dependency:
|
|
17
29
|
|
|
18
30
|
```bash
|
|
19
31
|
npm install --save-dev @stackbilt/cli
|
|
@@ -89,14 +101,16 @@ Explains the adoption case in plain terms (problem, what Charter enforces, expec
|
|
|
89
101
|
|
|
90
102
|
Bootstrap `.charter/` with config, patterns, and policies. Optionally generates a GitHub Actions workflow.
|
|
91
103
|
This is the command that applies Charter governance into a repository.
|
|
104
|
+
|
|
105
|
+
```bash
|
|
106
|
+
charter setup --ci github --yes
|
|
107
|
+
charter setup --detect-only
|
|
108
|
+
charter setup --preset frontend
|
|
109
|
+
```
|
|
92
110
|
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
### `charter init`
|
|
98
|
-
|
|
99
|
-
Scaffold `.charter/` config templates only.
|
|
111
|
+
### `charter init`
|
|
112
|
+
|
|
113
|
+
Scaffold `.charter/` config templates only. Supports `--preset worker|frontend|backend|fullstack`.
|
|
100
114
|
|
|
101
115
|
### `charter doctor`
|
|
102
116
|
|
|
@@ -118,9 +132,9 @@ Scan files against blessed-stack patterns in `.charter/patterns/*.json`.
|
|
|
118
132
|
charter drift --path ./src --ci
|
|
119
133
|
```
|
|
120
134
|
|
|
121
|
-
### `charter audit`
|
|
122
|
-
|
|
123
|
-
Generate a governance audit report covering trailers, risk, and
|
|
135
|
+
### `charter audit`
|
|
136
|
+
|
|
137
|
+
Generate a governance audit report covering trailers, risk, drift, and policy-section coverage quality.
|
|
124
138
|
|
|
125
139
|
### `charter classify`
|
|
126
140
|
|
|
@@ -137,7 +151,11 @@ charter classify "update button color"
|
|
|
137
151
|
| `--config <path>` | Path to `.charter/` directory | `.charter/` |
|
|
138
152
|
| `--format <mode>` | Output: `text` or `json` | `text` |
|
|
139
153
|
| `--ci` | CI mode: exit non-zero on WARN or FAIL | off |
|
|
140
|
-
| `--yes` | Auto-accept safe setup overwrites | off |
|
|
154
|
+
| `--yes` | Auto-accept safe setup overwrites | off |
|
|
155
|
+
|
|
156
|
+
Setup-only options:
|
|
157
|
+
- `--preset <worker|frontend|backend|fullstack>`: override auto-detected preset
|
|
158
|
+
- `--detect-only`: print stack detection result and selected preset without writing files
|
|
141
159
|
|
|
142
160
|
## Exit Codes
|
|
143
161
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../../src/commands/audit.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../../src/commands/audit.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAoD3C,wBAAsB,YAAY,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAiBvE"}
|
package/dist/commands/audit.js
CHANGED
|
@@ -42,6 +42,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
42
42
|
exports.auditCommand = auditCommand;
|
|
43
43
|
const node_child_process_1 = require("node:child_process");
|
|
44
44
|
const fs = __importStar(require("node:fs"));
|
|
45
|
+
const path = __importStar(require("node:path"));
|
|
45
46
|
const index_1 = require("../index");
|
|
46
47
|
const config_1 = require("../config");
|
|
47
48
|
const git_1 = require("@stackbilt/git");
|
|
@@ -49,7 +50,7 @@ const git_2 = require("@stackbilt/git");
|
|
|
49
50
|
async function auditCommand(options) {
|
|
50
51
|
const config = (0, config_1.loadConfig)(options.configPath);
|
|
51
52
|
const patterns = (0, config_1.loadPatterns)(options.configPath);
|
|
52
|
-
const report = generateAuditReport(config.project, options.configPath, patterns);
|
|
53
|
+
const report = generateAuditReport(config, config.project, options.configPath, patterns);
|
|
53
54
|
if (options.format === 'json') {
|
|
54
55
|
console.log(JSON.stringify(report, null, 2));
|
|
55
56
|
}
|
|
@@ -61,7 +62,7 @@ async function auditCommand(options) {
|
|
|
61
62
|
}
|
|
62
63
|
return index_1.EXIT_CODE.SUCCESS;
|
|
63
64
|
}
|
|
64
|
-
function generateAuditReport(projectName, configPath, patterns) {
|
|
65
|
+
function generateAuditReport(config, projectName, configPath, patterns) {
|
|
65
66
|
const commits = getRecentCommits(50);
|
|
66
67
|
const parsed = (0, git_1.parseAllTrailers)(commits);
|
|
67
68
|
const linkedCommits = new Set();
|
|
@@ -87,10 +88,16 @@ function generateAuditReport(projectName, configPath, patterns) {
|
|
|
87
88
|
const policyFiles = fs.existsSync(policiesDir)
|
|
88
89
|
? fs.readdirSync(policiesDir).filter((f) => f.endsWith('.md'))
|
|
89
90
|
: [];
|
|
91
|
+
const policyCoverage = evaluatePolicyCoverage(config, policiesDir, policyFiles);
|
|
90
92
|
const trailerScore = Math.min(100, coveragePercent * 1.5);
|
|
91
93
|
const patternScore = Math.min(100, activePatterns.length * 20);
|
|
92
|
-
const policyScore =
|
|
94
|
+
const policyScore = policyCoverage.coveragePercent;
|
|
93
95
|
const overall = Math.round((trailerScore * 0.5) + (patternScore * 0.3) + (policyScore * 0.2));
|
|
96
|
+
const scoreInputs = {
|
|
97
|
+
coveragePercent,
|
|
98
|
+
activePatterns: activePatterns.length,
|
|
99
|
+
missingSections: policyCoverage.missingSections,
|
|
100
|
+
};
|
|
94
101
|
return {
|
|
95
102
|
project: projectName,
|
|
96
103
|
generatedAt: new Date().toISOString(),
|
|
@@ -110,6 +117,9 @@ function generateAuditReport(projectName, configPath, patterns) {
|
|
|
110
117
|
},
|
|
111
118
|
policies: {
|
|
112
119
|
files: policyFiles,
|
|
120
|
+
coveragePercent: policyCoverage.coveragePercent,
|
|
121
|
+
matchedSections: policyCoverage.matchedSections,
|
|
122
|
+
missingSections: policyCoverage.missingSections,
|
|
113
123
|
},
|
|
114
124
|
score: {
|
|
115
125
|
overall,
|
|
@@ -118,6 +128,12 @@ function generateAuditReport(projectName, configPath, patterns) {
|
|
|
118
128
|
patternDefinitions: Math.round(patternScore),
|
|
119
129
|
policyDocumentation: Math.round(policyScore),
|
|
120
130
|
},
|
|
131
|
+
criteria: {
|
|
132
|
+
trailerCoverage: 'coverage_percent * 1.5 (max 100). 67%+ coverage earns full points.',
|
|
133
|
+
patternDefinitions: 'active_pattern_count * 20 (max 100). 5+ active patterns earns full points.',
|
|
134
|
+
policyDocumentation: 'policy section coverage percent from config.audit.policyCoverage.requiredSections (max 100).',
|
|
135
|
+
},
|
|
136
|
+
recommendations: getRecommendations(scoreInputs),
|
|
121
137
|
},
|
|
122
138
|
};
|
|
123
139
|
}
|
|
@@ -142,6 +158,8 @@ function printReport(report) {
|
|
|
142
158
|
console.log('');
|
|
143
159
|
console.log(' Policy Documentation');
|
|
144
160
|
console.log(` Policy files: ${report.policies.files.length}`);
|
|
161
|
+
console.log(` Coverage: ${report.policies.coveragePercent}%`);
|
|
162
|
+
console.log(` Missing sections: ${report.policies.missingSections.length}`);
|
|
145
163
|
for (const file of report.policies.files) {
|
|
146
164
|
console.log(` - ${file}`);
|
|
147
165
|
}
|
|
@@ -151,6 +169,16 @@ function printReport(report) {
|
|
|
151
169
|
console.log(` Pattern definitions: ${report.score.breakdown.patternDefinitions}/100 (30% weight)`);
|
|
152
170
|
console.log(` Policy documentation: ${report.score.breakdown.policyDocumentation}/100 (20% weight)`);
|
|
153
171
|
console.log('');
|
|
172
|
+
console.log(' Scoring Criteria');
|
|
173
|
+
console.log(` - Trailer coverage: ${report.score.criteria.trailerCoverage}`);
|
|
174
|
+
console.log(` - Pattern definitions: ${report.score.criteria.patternDefinitions}`);
|
|
175
|
+
console.log(` - Policy documentation: ${report.score.criteria.policyDocumentation}`);
|
|
176
|
+
console.log('');
|
|
177
|
+
console.log(' Actionable Next Steps');
|
|
178
|
+
for (const rec of report.score.recommendations) {
|
|
179
|
+
console.log(` - ${rec}`);
|
|
180
|
+
}
|
|
181
|
+
console.log('');
|
|
154
182
|
}
|
|
155
183
|
function getRecentCommits(count) {
|
|
156
184
|
try {
|
|
@@ -193,6 +221,62 @@ function runGit(args) {
|
|
|
193
221
|
return (0, node_child_process_1.execFileSync)('git', args, {
|
|
194
222
|
encoding: 'utf-8',
|
|
195
223
|
maxBuffer: 10 * 1024 * 1024,
|
|
224
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
196
225
|
});
|
|
197
226
|
}
|
|
198
|
-
|
|
227
|
+
function getRecommendations(inputs) {
|
|
228
|
+
const recommendations = [];
|
|
229
|
+
const missingCoverage = Math.max(0, 67 - inputs.coveragePercent);
|
|
230
|
+
if (missingCoverage > 0) {
|
|
231
|
+
recommendations.push(`Increase governance trailer coverage by ${missingCoverage}% to reach full trailer score (add Governed-By/Resolves-Request trailers).`);
|
|
232
|
+
}
|
|
233
|
+
else {
|
|
234
|
+
recommendations.push('Trailer coverage is at full-score threshold.');
|
|
235
|
+
}
|
|
236
|
+
const missingPatterns = Math.max(0, 5 - inputs.activePatterns);
|
|
237
|
+
if (missingPatterns > 0) {
|
|
238
|
+
recommendations.push(`Add ${missingPatterns} active pattern(s) in .charter/patterns/*.json to reach full pattern score (target: 5 active patterns).`);
|
|
239
|
+
}
|
|
240
|
+
else {
|
|
241
|
+
recommendations.push('Pattern definitions are at full-score threshold.');
|
|
242
|
+
}
|
|
243
|
+
if (inputs.missingSections.length > 0) {
|
|
244
|
+
recommendations.push(`Add missing policy coverage sections: ${inputs.missingSections.join(', ')}.`);
|
|
245
|
+
}
|
|
246
|
+
else {
|
|
247
|
+
recommendations.push('Policy documentation coverage is at full-score threshold.');
|
|
248
|
+
}
|
|
249
|
+
return recommendations;
|
|
250
|
+
}
|
|
251
|
+
function evaluatePolicyCoverage(config, policiesDir, policyFiles) {
|
|
252
|
+
const required = config.audit.policyCoverage.requiredSections || [];
|
|
253
|
+
if (!config.audit.policyCoverage.enabled || required.length === 0) {
|
|
254
|
+
return {
|
|
255
|
+
coveragePercent: 100,
|
|
256
|
+
matchedSections: [],
|
|
257
|
+
missingSections: [],
|
|
258
|
+
};
|
|
259
|
+
}
|
|
260
|
+
const normalizedContent = policyFiles
|
|
261
|
+
.map((f) => fs.readFileSync(path.join(policiesDir, f), 'utf-8'))
|
|
262
|
+
.join('\n')
|
|
263
|
+
.toLowerCase();
|
|
264
|
+
const matchedSections = [];
|
|
265
|
+
const missingSections = [];
|
|
266
|
+
for (const section of required) {
|
|
267
|
+
const matches = section.match?.some((token) => normalizedContent.includes(token.toLowerCase())) || false;
|
|
268
|
+
if (matches) {
|
|
269
|
+
matchedSections.push(section.title);
|
|
270
|
+
}
|
|
271
|
+
else {
|
|
272
|
+
missingSections.push(section.title);
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
const coveragePercent = Math.round((matchedSections.length / required.length) * 100);
|
|
276
|
+
return {
|
|
277
|
+
coveragePercent,
|
|
278
|
+
matchedSections,
|
|
279
|
+
missingSections,
|
|
280
|
+
};
|
|
281
|
+
}
|
|
282
|
+
//# sourceMappingURL=audit.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audit.js","sourceRoot":"","sources":["../../src/commands/audit.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"audit.js","sourceRoot":"","sources":["../../src/commands/audit.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/init.d.ts
CHANGED
|
@@ -4,12 +4,17 @@
|
|
|
4
4
|
* Scaffolds the .charter/ directory with default config and example patterns.
|
|
5
5
|
*/
|
|
6
6
|
import type { CLIOptions } from '../index';
|
|
7
|
+
export type StackPreset = 'worker' | 'frontend' | 'backend' | 'fullstack';
|
|
7
8
|
interface InitResult {
|
|
8
9
|
created: boolean;
|
|
9
10
|
configPath: string;
|
|
10
11
|
files: string[];
|
|
11
12
|
}
|
|
13
|
+
interface InitializeOptions {
|
|
14
|
+
projectName?: string;
|
|
15
|
+
preset?: StackPreset;
|
|
16
|
+
}
|
|
12
17
|
export declare function initCommand(options: CLIOptions, args?: string[]): Promise<number>;
|
|
13
|
-
export declare function initializeCharter(configDir: string, force: boolean): InitResult;
|
|
18
|
+
export declare function initializeCharter(configDir: string, force: boolean, initOptions?: InitializeOptions): InitResult;
|
|
14
19
|
export {};
|
|
15
20
|
//# sourceMappingURL=init.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAI3C,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,UAAU,GAAG,SAAS,GAAG,WAAW,CAAC;AAsL1E,UAAU,UAAU;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,UAAU,iBAAiB;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED,wBAAsB,WAAW,CAAC,OAAO,EAAE,UAAU,EAAE,IAAI,GAAE,MAAM,EAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CA8B3F;AAED,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,GAAE,iBAAsB,GAAG,UAAU,CAsCpH"}
|
package/dist/commands/init.js
CHANGED
|
@@ -44,30 +44,188 @@ const fs = __importStar(require("node:fs"));
|
|
|
44
44
|
const path = __importStar(require("node:path"));
|
|
45
45
|
const index_1 = require("../index");
|
|
46
46
|
const config_1 = require("../config");
|
|
47
|
-
const
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
47
|
+
const PATTERN_TEMPLATES = {
|
|
48
|
+
worker: [
|
|
49
|
+
{
|
|
50
|
+
name: 'Edge Compute',
|
|
51
|
+
category: 'COMPUTE',
|
|
52
|
+
blessed_solution: 'Cloudflare Workers for edge compute',
|
|
53
|
+
rationale: 'Low-latency runtime close to users',
|
|
54
|
+
anti_patterns: 'Avoid express/fastify for new edge services',
|
|
55
|
+
status: 'ACTIVE',
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
name: 'Edge Data',
|
|
59
|
+
category: 'DATA',
|
|
60
|
+
blessed_solution: 'Cloudflare D1 for transactional edge data',
|
|
61
|
+
rationale: 'Co-located data with worker runtime',
|
|
62
|
+
anti_patterns: 'Avoid direct pg/mysql clients in edge handlers',
|
|
63
|
+
status: 'ACTIVE',
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
name: 'Queue Processing',
|
|
67
|
+
category: 'ASYNC',
|
|
68
|
+
blessed_solution: 'Cloudflare Queues for asynchronous workloads',
|
|
69
|
+
rationale: 'Durable retries for non-request work',
|
|
70
|
+
anti_patterns: 'Avoid long-running synchronous request chains',
|
|
71
|
+
status: 'ACTIVE',
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
name: 'Edge Security',
|
|
75
|
+
category: 'SECURITY',
|
|
76
|
+
blessed_solution: 'Token-based auth with scoped service bindings',
|
|
77
|
+
rationale: 'Limits blast radius across edge services',
|
|
78
|
+
anti_patterns: 'Avoid shared hardcoded secrets across handlers',
|
|
79
|
+
status: 'ACTIVE',
|
|
80
|
+
},
|
|
81
|
+
],
|
|
82
|
+
frontend: [
|
|
83
|
+
{
|
|
84
|
+
name: 'Frontend Runtime',
|
|
85
|
+
category: 'COMPUTE',
|
|
86
|
+
blessed_solution: 'React/Vite or Next.js for UI runtime',
|
|
87
|
+
rationale: 'Stable frontend delivery and ecosystem support',
|
|
88
|
+
anti_patterns: 'Avoid ad-hoc SPA bootstraps without build pipeline',
|
|
89
|
+
status: 'ACTIVE',
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
name: 'State Management',
|
|
93
|
+
category: 'INTEGRATION',
|
|
94
|
+
blessed_solution: 'Centralized client state (Zustand/Redux)',
|
|
95
|
+
rationale: 'Predictable UI state transitions',
|
|
96
|
+
anti_patterns: 'Avoid deeply nested ad-hoc local state trees',
|
|
97
|
+
status: 'ACTIVE',
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
name: 'API Contract Layer',
|
|
101
|
+
category: 'INTEGRATION',
|
|
102
|
+
blessed_solution: 'Typed API client boundary module',
|
|
103
|
+
rationale: 'Prevents request shape drift across pages',
|
|
104
|
+
anti_patterns: 'Avoid raw fetch calls scattered across components',
|
|
105
|
+
status: 'ACTIVE',
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
name: 'Frontend Security',
|
|
109
|
+
category: 'SECURITY',
|
|
110
|
+
blessed_solution: 'HTTP-only session + CSRF-aware mutation flows',
|
|
111
|
+
rationale: 'Mitigates token leakage and unsafe writes',
|
|
112
|
+
anti_patterns: 'Avoid storing auth tokens in localStorage',
|
|
113
|
+
status: 'ACTIVE',
|
|
114
|
+
},
|
|
115
|
+
],
|
|
116
|
+
backend: [
|
|
117
|
+
{
|
|
118
|
+
name: 'Service Runtime',
|
|
119
|
+
category: 'COMPUTE',
|
|
120
|
+
blessed_solution: 'Node service runtime with typed request boundaries',
|
|
121
|
+
rationale: 'Operationally stable API execution model',
|
|
122
|
+
anti_patterns: 'Avoid implicit any/unknown request payload parsing',
|
|
123
|
+
status: 'ACTIVE',
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
name: 'Data Access Layer',
|
|
127
|
+
category: 'DATA',
|
|
128
|
+
blessed_solution: 'Repository/service abstraction around DB operations',
|
|
129
|
+
rationale: 'Centralizes schema and migration safety',
|
|
130
|
+
anti_patterns: 'Avoid direct SQL calls spread across handlers',
|
|
131
|
+
status: 'ACTIVE',
|
|
132
|
+
},
|
|
133
|
+
{
|
|
134
|
+
name: 'Async Jobs',
|
|
135
|
+
category: 'ASYNC',
|
|
136
|
+
blessed_solution: 'Queue-backed workers for retries and background work',
|
|
137
|
+
rationale: 'Improves resilience of non-critical tasks',
|
|
138
|
+
anti_patterns: 'Avoid blocking API requests on batch/background tasks',
|
|
139
|
+
status: 'ACTIVE',
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
name: 'API Security',
|
|
143
|
+
category: 'SECURITY',
|
|
144
|
+
blessed_solution: 'Scoped auth middleware and service-level authorization',
|
|
145
|
+
rationale: 'Consistent access control across endpoints',
|
|
146
|
+
anti_patterns: 'Avoid route-specific ad-hoc authorization logic',
|
|
147
|
+
status: 'ACTIVE',
|
|
148
|
+
},
|
|
149
|
+
],
|
|
150
|
+
fullstack: [
|
|
151
|
+
{
|
|
152
|
+
name: 'App Runtime Split',
|
|
153
|
+
category: 'COMPUTE',
|
|
154
|
+
blessed_solution: 'Frontend app plus API service/edge runtime split',
|
|
155
|
+
rationale: 'Clear ownership between UI and backend concerns',
|
|
156
|
+
anti_patterns: 'Avoid coupling frontend state logic directly to DB models',
|
|
157
|
+
status: 'ACTIVE',
|
|
158
|
+
},
|
|
159
|
+
{
|
|
160
|
+
name: 'Primary Data Store',
|
|
161
|
+
category: 'DATA',
|
|
162
|
+
blessed_solution: 'Single primary transactional data layer with migrations',
|
|
163
|
+
rationale: 'Consistent source of truth for read/write paths',
|
|
164
|
+
anti_patterns: 'Avoid duplicating write sources across multiple stores',
|
|
165
|
+
status: 'ACTIVE',
|
|
166
|
+
},
|
|
167
|
+
{
|
|
168
|
+
name: 'API Integration Boundary',
|
|
169
|
+
category: 'INTEGRATION',
|
|
170
|
+
blessed_solution: 'Typed API client/server contracts',
|
|
171
|
+
rationale: 'Reduces interface drift between frontend and backend',
|
|
172
|
+
anti_patterns: 'Avoid undocumented cross-layer payload assumptions',
|
|
173
|
+
status: 'ACTIVE',
|
|
174
|
+
},
|
|
175
|
+
{
|
|
176
|
+
name: 'Background Processing',
|
|
177
|
+
category: 'ASYNC',
|
|
178
|
+
blessed_solution: 'Queue/job model for notifications and batch workflows',
|
|
179
|
+
rationale: 'Protects user-facing latency from long-running tasks',
|
|
180
|
+
anti_patterns: 'Avoid synchronous execution of retry-prone integrations',
|
|
181
|
+
status: 'ACTIVE',
|
|
182
|
+
},
|
|
183
|
+
{
|
|
184
|
+
name: 'Security Baseline',
|
|
185
|
+
category: 'SECURITY',
|
|
186
|
+
blessed_solution: 'Centralized authn/authz and secret management policy',
|
|
187
|
+
rationale: 'Consistent controls across frontend/backend surfaces',
|
|
188
|
+
anti_patterns: 'Avoid mixed auth patterns across services and clients',
|
|
189
|
+
status: 'ACTIVE',
|
|
190
|
+
},
|
|
191
|
+
],
|
|
192
|
+
};
|
|
193
|
+
const DEFAULT_POLICY_CONTENT = `# Governance Policy
|
|
194
|
+
|
|
195
|
+
## Commit Trailers
|
|
196
|
+
|
|
197
|
+
High-risk commits (migrations, handlers, services) should include:
|
|
198
|
+
|
|
199
|
+
\`\`\`
|
|
200
|
+
Governed-By: <ADR-ID or ledger entry reference>
|
|
201
|
+
Resolves-Request: <governance request ID>
|
|
202
|
+
\`\`\`
|
|
203
|
+
|
|
204
|
+
## Change Classification
|
|
205
|
+
|
|
206
|
+
Changes are classified as:
|
|
207
|
+
- **SURFACE**: Docs, comments, naming - no code logic
|
|
208
|
+
- **LOCAL**: Single service, contained impact
|
|
209
|
+
- **CROSS_CUTTING**: Multiple services, data model, API contracts
|
|
210
|
+
|
|
211
|
+
## Exception Path
|
|
212
|
+
|
|
213
|
+
Use documented exception requests when policy cannot be applied directly.
|
|
214
|
+
Capture waiver reason, approver, and expiration.
|
|
215
|
+
|
|
216
|
+
## Escalation & Approval
|
|
217
|
+
|
|
218
|
+
Cross-cutting changes require architectural review before merge.
|
|
219
|
+
Escalate ambiguous or high-risk decisions for explicit approval.
|
|
220
|
+
`;
|
|
65
221
|
const GITIGNORE_CONTENT = `# Charter local state
|
|
66
222
|
.cache/
|
|
67
223
|
`;
|
|
68
224
|
async function initCommand(options, args = []) {
|
|
69
225
|
const force = options.yes || args.includes('--force');
|
|
70
|
-
const
|
|
226
|
+
const presetFlag = getFlag(args, '--preset');
|
|
227
|
+
const preset = isValidPreset(presetFlag) ? presetFlag : undefined;
|
|
228
|
+
const result = initializeCharter(options.configPath, force, { preset });
|
|
71
229
|
if (options.format === 'json') {
|
|
72
230
|
console.log(JSON.stringify(result, null, 2));
|
|
73
231
|
return index_1.EXIT_CODE.SUCCESS;
|
|
@@ -90,7 +248,7 @@ async function initCommand(options, args = []) {
|
|
|
90
248
|
console.log(' 3. Run: charter validate');
|
|
91
249
|
return index_1.EXIT_CODE.SUCCESS;
|
|
92
250
|
}
|
|
93
|
-
function initializeCharter(configDir, force) {
|
|
251
|
+
function initializeCharter(configDir, force, initOptions = {}) {
|
|
94
252
|
const configFile = path.join(configDir, 'config.json');
|
|
95
253
|
const exists = fs.existsSync(configFile);
|
|
96
254
|
if (exists && !force) {
|
|
@@ -104,28 +262,10 @@ function initializeCharter(configDir, force) {
|
|
|
104
262
|
for (const dir of dirs) {
|
|
105
263
|
fs.mkdirSync(dir, { recursive: true });
|
|
106
264
|
}
|
|
107
|
-
|
|
108
|
-
fs.writeFileSync(
|
|
109
|
-
fs.writeFileSync(path.join(configDir, '
|
|
110
|
-
|
|
111
|
-
## Commit Trailers
|
|
112
|
-
|
|
113
|
-
High-risk commits (migrations, handlers, services) should include:
|
|
114
|
-
|
|
115
|
-
\`\`\`
|
|
116
|
-
Governed-By: <ADR-ID or ledger entry reference>
|
|
117
|
-
Resolves-Request: <governance request ID>
|
|
118
|
-
\`\`\`
|
|
119
|
-
|
|
120
|
-
## Change Classification
|
|
121
|
-
|
|
122
|
-
Changes are classified as:
|
|
123
|
-
- **SURFACE**: Docs, comments, naming - no code logic
|
|
124
|
-
- **LOCAL**: Single service, contained impact
|
|
125
|
-
- **CROSS_CUTTING**: Multiple services, data model, API contracts
|
|
126
|
-
|
|
127
|
-
Cross-cutting changes require architectural review before merge.
|
|
128
|
-
`);
|
|
265
|
+
const selectedPreset = initOptions.preset || 'fullstack';
|
|
266
|
+
fs.writeFileSync(configFile, (0, config_1.getDefaultConfigJSON)(initOptions.projectName) + '\n');
|
|
267
|
+
fs.writeFileSync(path.join(configDir, 'patterns', 'blessed-stack.json'), JSON.stringify(PATTERN_TEMPLATES[selectedPreset], null, 2) + '\n');
|
|
268
|
+
fs.writeFileSync(path.join(configDir, 'policies', 'governance.md'), DEFAULT_POLICY_CONTENT);
|
|
129
269
|
fs.writeFileSync(path.join(configDir, '.gitignore'), GITIGNORE_CONTENT);
|
|
130
270
|
return {
|
|
131
271
|
created: true,
|
|
@@ -138,4 +278,14 @@ Cross-cutting changes require architectural review before merge.
|
|
|
138
278
|
],
|
|
139
279
|
};
|
|
140
280
|
}
|
|
281
|
+
function isValidPreset(value) {
|
|
282
|
+
return value === 'worker' || value === 'frontend' || value === 'backend' || value === 'fullstack';
|
|
283
|
+
}
|
|
284
|
+
function getFlag(args, flag) {
|
|
285
|
+
const idx = args.indexOf(flag);
|
|
286
|
+
if (idx !== -1 && idx + 1 < args.length) {
|
|
287
|
+
return args[idx + 1];
|
|
288
|
+
}
|
|
289
|
+
return undefined;
|
|
290
|
+
}
|
|
141
291
|
//# sourceMappingURL=init.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAgE3C,wBAAsB,YAAY,CAAC,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CA+FvF"}
|
package/dist/commands/setup.js
CHANGED
|
@@ -83,13 +83,51 @@ jobs:
|
|
|
83
83
|
`;
|
|
84
84
|
async function setupCommand(options, args) {
|
|
85
85
|
const ciMode = getFlag(args, '--ci');
|
|
86
|
+
const presetFlag = getFlag(args, '--preset');
|
|
87
|
+
const detectOnly = args.includes('--detect-only');
|
|
86
88
|
if (ciMode && ciMode !== 'github') {
|
|
87
89
|
throw new index_1.CLIError(`Unsupported CI target: ${ciMode}. Supported: github`);
|
|
88
90
|
}
|
|
89
|
-
|
|
91
|
+
if (presetFlag && !isValidPreset(presetFlag)) {
|
|
92
|
+
throw new index_1.CLIError(`Invalid --preset value: ${presetFlag}. Use worker|frontend|backend|fullstack.`);
|
|
93
|
+
}
|
|
94
|
+
const detection = detectStack();
|
|
95
|
+
const selectedPreset = isValidPreset(presetFlag) ? presetFlag : detection.suggestedPreset;
|
|
96
|
+
const inferenceMode = presetFlag
|
|
97
|
+
? 'preset-override'
|
|
98
|
+
: detection.confidence === 'LOW'
|
|
99
|
+
? 'fallback-conservative'
|
|
100
|
+
: 'auto';
|
|
101
|
+
if (detectOnly) {
|
|
102
|
+
if (options.format === 'json') {
|
|
103
|
+
console.log(JSON.stringify({
|
|
104
|
+
detected: detection,
|
|
105
|
+
selectedPreset,
|
|
106
|
+
inferenceMode,
|
|
107
|
+
}, null, 2));
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
console.log('');
|
|
111
|
+
console.log(' Stack detection result');
|
|
112
|
+
console.log(` Runtime: ${detection.runtime.join(', ') || 'none detected'}`);
|
|
113
|
+
console.log(` Frameworks: ${detection.frameworks.join(', ') || 'none detected'}`);
|
|
114
|
+
console.log(` State: ${detection.state.join(', ') || 'none detected'}`);
|
|
115
|
+
console.log(` Confidence: ${detection.confidence}`);
|
|
116
|
+
console.log(` Selected preset: ${selectedPreset} (${inferenceMode})`);
|
|
117
|
+
console.log('');
|
|
118
|
+
}
|
|
119
|
+
return index_2.EXIT_CODE.SUCCESS;
|
|
120
|
+
}
|
|
121
|
+
const initResult = (0, init_1.initializeCharter)(options.configPath, options.yes || args.includes('--force'), {
|
|
122
|
+
preset: selectedPreset,
|
|
123
|
+
projectName: inferProjectName(),
|
|
124
|
+
});
|
|
90
125
|
const result = {
|
|
91
126
|
configPath: options.configPath,
|
|
92
127
|
initialized: initResult.created,
|
|
128
|
+
detected: detection,
|
|
129
|
+
selectedPreset,
|
|
130
|
+
inferenceMode,
|
|
93
131
|
workflow: {
|
|
94
132
|
mode: ciMode === 'github' ? 'github' : 'none',
|
|
95
133
|
},
|
|
@@ -110,6 +148,8 @@ async function setupCommand(options, args) {
|
|
|
110
148
|
console.log(' Governance guardrails are now active for this repo.');
|
|
111
149
|
console.log(` Baseline path: ${result.configPath}`);
|
|
112
150
|
console.log(` Baseline created: ${result.initialized ? 'yes' : 'already present'}`);
|
|
151
|
+
console.log(` Stack preset: ${result.selectedPreset} (${result.inferenceMode})`);
|
|
152
|
+
console.log(` Detection confidence: ${result.detected.confidence}`);
|
|
113
153
|
if (result.workflow.mode === 'github') {
|
|
114
154
|
console.log(` CI policy gate: ${result.workflow.created ? 'enabled' : 'already present'} (${result.workflow.path})`);
|
|
115
155
|
}
|
|
@@ -125,6 +165,83 @@ async function setupCommand(options, args) {
|
|
|
125
165
|
console.log(' 3. charter audit --format text');
|
|
126
166
|
return index_2.EXIT_CODE.SUCCESS;
|
|
127
167
|
}
|
|
168
|
+
function detectStack() {
|
|
169
|
+
const pkg = loadPackageJson();
|
|
170
|
+
if (!pkg) {
|
|
171
|
+
return {
|
|
172
|
+
runtime: [],
|
|
173
|
+
frameworks: [],
|
|
174
|
+
state: [],
|
|
175
|
+
confidence: 'LOW',
|
|
176
|
+
suggestedPreset: 'fullstack',
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
const depNames = new Set([
|
|
180
|
+
...Object.keys(pkg.dependencies || {}),
|
|
181
|
+
...Object.keys(pkg.devDependencies || {}),
|
|
182
|
+
]);
|
|
183
|
+
const frameworks = [];
|
|
184
|
+
const runtime = [];
|
|
185
|
+
const state = [];
|
|
186
|
+
if (hasAny(depNames, ['next', 'react', 'vite', 'vue', '@angular/core', 'svelte'])) {
|
|
187
|
+
frameworks.push(...pick(depNames, ['next', 'react', 'vite', 'vue', '@angular/core', 'svelte']));
|
|
188
|
+
}
|
|
189
|
+
if (hasAny(depNames, ['express', 'fastify', 'nestjs', '@nestjs/core', 'koa', 'hono'])) {
|
|
190
|
+
frameworks.push(...pick(depNames, ['express', 'fastify', 'nestjs', '@nestjs/core', 'koa', 'hono']));
|
|
191
|
+
}
|
|
192
|
+
if (hasAny(depNames, ['wrangler', '@cloudflare/workers-types'])) {
|
|
193
|
+
runtime.push('edge-worker');
|
|
194
|
+
}
|
|
195
|
+
if (pkg.engines?.node || hasAny(depNames, ['typescript', 'ts-node', 'express', 'fastify', 'next'])) {
|
|
196
|
+
runtime.push('node');
|
|
197
|
+
}
|
|
198
|
+
if (hasAny(depNames, ['zustand', 'redux', '@reduxjs/toolkit', 'mobx', 'xstate'])) {
|
|
199
|
+
state.push(...pick(depNames, ['zustand', 'redux', '@reduxjs/toolkit', 'mobx', 'xstate']));
|
|
200
|
+
}
|
|
201
|
+
const hasFrontend = hasAny(depNames, ['next', 'react', 'vite', 'vue', '@angular/core', 'svelte']);
|
|
202
|
+
const hasBackend = hasAny(depNames, ['express', 'fastify', 'nestjs', '@nestjs/core', 'koa', 'hono']);
|
|
203
|
+
const hasWorker = hasAny(depNames, ['wrangler', '@cloudflare/workers-types']);
|
|
204
|
+
if (hasWorker && !hasFrontend && !hasBackend) {
|
|
205
|
+
return { runtime, frameworks, state, confidence: 'HIGH', suggestedPreset: 'worker' };
|
|
206
|
+
}
|
|
207
|
+
if (hasFrontend && hasBackend) {
|
|
208
|
+
return { runtime, frameworks, state, confidence: 'HIGH', suggestedPreset: 'fullstack' };
|
|
209
|
+
}
|
|
210
|
+
if (hasFrontend) {
|
|
211
|
+
return { runtime, frameworks, state, confidence: 'HIGH', suggestedPreset: 'frontend' };
|
|
212
|
+
}
|
|
213
|
+
if (hasBackend) {
|
|
214
|
+
return { runtime, frameworks, state, confidence: 'HIGH', suggestedPreset: 'backend' };
|
|
215
|
+
}
|
|
216
|
+
if (runtime.length > 0 || state.length > 0) {
|
|
217
|
+
return { runtime, frameworks, state, confidence: 'MEDIUM', suggestedPreset: 'fullstack' };
|
|
218
|
+
}
|
|
219
|
+
return { runtime, frameworks, state, confidence: 'LOW', suggestedPreset: 'fullstack' };
|
|
220
|
+
}
|
|
221
|
+
function loadPackageJson() {
|
|
222
|
+
const packageJsonPath = path.resolve('package.json');
|
|
223
|
+
if (!fs.existsSync(packageJsonPath))
|
|
224
|
+
return null;
|
|
225
|
+
try {
|
|
226
|
+
return JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));
|
|
227
|
+
}
|
|
228
|
+
catch {
|
|
229
|
+
return null;
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
function inferProjectName() {
|
|
233
|
+
const pkg = loadPackageJson();
|
|
234
|
+
if (pkg?.name && pkg.name.trim().length > 0) {
|
|
235
|
+
return pkg.name.trim();
|
|
236
|
+
}
|
|
237
|
+
return path.basename(process.cwd());
|
|
238
|
+
}
|
|
239
|
+
function hasAny(set, candidates) {
|
|
240
|
+
return candidates.some((c) => set.has(c));
|
|
241
|
+
}
|
|
242
|
+
function pick(set, candidates) {
|
|
243
|
+
return candidates.filter((c) => set.has(c));
|
|
244
|
+
}
|
|
128
245
|
function writeFileIfMissing(targetPath, content, force) {
|
|
129
246
|
const absolute = path.resolve(targetPath);
|
|
130
247
|
const exists = fs.existsSync(absolute);
|
|
@@ -142,4 +259,7 @@ function getFlag(args, flag) {
|
|
|
142
259
|
}
|
|
143
260
|
return undefined;
|
|
144
261
|
}
|
|
145
|
-
|
|
262
|
+
function isValidPreset(value) {
|
|
263
|
+
return value === 'worker' || value === 'frontend' || value === 'backend' || value === 'fullstack';
|
|
264
|
+
}
|
|
265
|
+
//# sourceMappingURL=setup.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoEH,oCA+FC;AAjKD,4CAA8B;AAC9B,gDAAkC;AAElC,oCAAoC;AACpC,oCAAqC;AACrC,iCAA6D;AAE7D,MAAM,eAAe,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoCvB,CAAC;AAuBK,KAAK,UAAU,YAAY,CAAC,OAAmB,EAAE,IAAc;IACpE,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACrC,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAC7C,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;IAElD,IAAI,MAAM,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;QAClC,MAAM,IAAI,gBAAQ,CAAC,0BAA0B,MAAM,qBAAqB,CAAC,CAAC;IAC5E,CAAC;IAED,IAAI,UAAU,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE,CAAC;QAC7C,MAAM,IAAI,gBAAQ,CAAC,2BAA2B,UAAU,0CAA0C,CAAC,CAAC;IACtG,CAAC;IAED,MAAM,SAAS,GAAG,WAAW,EAAE,CAAC;IAChC,MAAM,cAAc,GAAgB,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC;IACvG,MAAM,aAAa,GAAG,UAAU;QAC9B,CAAC,CAAC,iBAAiB;QACnB,CAAC,CAAC,SAAS,CAAC,UAAU,KAAK,KAAK;YAC9B,CAAC,CAAC,uBAAuB;YACzB,CAAC,CAAC,MAAM,CAAC;IAEb,IAAI,UAAU,EAAE,CAAC;QACf,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YAC9B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;gBACzB,QAAQ,EAAE,SAAS;gBACnB,cAAc;gBACd,aAAa;aACd,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QACf,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;YACxC,OAAO,CAAC,GAAG,CAAC,cAAc,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,eAAe,EAAE,CAAC,CAAC;YAC7E,OAAO,CAAC,GAAG,CAAC,iBAAiB,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,eAAe,EAAE,CAAC,CAAC;YACnF,OAAO,CAAC,GAAG,CAAC,YAAY,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,eAAe,EAAE,CAAC,CAAC;YACzE,OAAO,CAAC,GAAG,CAAC,iBAAiB,SAAS,CAAC,UAAU,EAAE,CAAC,CAAC;YACrD,OAAO,CAAC,GAAG,CAAC,sBAAsB,cAAc,KAAK,aAAa,GAAG,CAAC,CAAC;YACvE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAClB,CAAC;QACD,OAAO,iBAAS,CAAC,OAAO,CAAC;IAC3B,CAAC;IAED,MAAM,UAAU,GAAG,IAAA,wBAAiB,EAAC,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE;QAChG,MAAM,EAAE,cAAc;QACtB,WAAW,EAAE,gBAAgB,EAAE;KAChC,CAAC,CAAC;IAEH,MAAM,MAAM,GAAgB;QAC1B,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,WAAW,EAAE,UAAU,CAAC,OAAO;QAC/B,QAAQ,EAAE,SAAS;QACnB,cAAc;QACd,aAAa;QACb,QAAQ,EAAE;YACR,IAAI,EAAE,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM;SAC9C;KACF,CAAC;IAEF,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;QACxB,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,EAAE,wBAAwB,CAAC,CAAC;QACjF,MAAM,OAAO,GAAG,kBAAkB,CAAC,YAAY,EAAE,eAAe,EAAE,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;QAE3G,MAAM,CAAC,QAAQ,GAAG;YAChB,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,YAAY;YAClB,OAAO;SACR,CAAC;IACJ,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;QAC9B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC7C,OAAO,iBAAS,CAAC,OAAO,CAAC;IAC3B,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,uDAAuD,CAAC,CAAC;IACrE,OAAO,CAAC,GAAG,CAAC,oBAAoB,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;IACrD,OAAO,CAAC,GAAG,CAAC,uBAAuB,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,iBAAiB,EAAE,CAAC,CAAC;IACrF,OAAO,CAAC,GAAG,CAAC,mBAAmB,MAAM,CAAC,cAAc,KAAK,MAAM,CAAC,aAAa,GAAG,CAAC,CAAC;IAClF,OAAO,CAAC,GAAG,CAAC,2BAA2B,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;IAErE,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtC,OAAO,CAAC,GAAG,CAAC,qBAAqB,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,iBAAiB,KAAK,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,CAAC;IACxH,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;IAClD,OAAO,CAAC,GAAG,CAAC,oEAAoE,CAAC,CAAC;IAClF,OAAO,CAAC,GAAG,CAAC,kDAAkD,CAAC,CAAC;IAChE,OAAO,CAAC,GAAG,CAAC,yDAAyD,CAAC,CAAC;IACvE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IAC1B,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC;IACrD,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;IAClD,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;IAElD,OAAO,iBAAS,CAAC,OAAO,CAAC;AAC3B,CAAC;AAED,SAAS,WAAW;IAClB,MAAM,GAAG,GAAG,eAAe,EAAE,CAAC;IAC9B,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO;YACL,OAAO,EAAE,EAAE;YACX,UAAU,EAAE,EAAE;YACd,KAAK,EAAE,EAAE;YACT,UAAU,EAAE,KAAK;YACjB,eAAe,EAAE,WAAW;SAC7B,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAS;QAC/B,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,IAAI,EAAE,CAAC;QACtC,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,eAAe,IAAI,EAAE,CAAC;KAC1C,CAAC,CAAC;IAEH,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC;QAClF,UAAU,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;IAClG,CAAC;IACD,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC;QACtF,UAAU,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;IACtG,CAAC;IACD,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC,UAAU,EAAE,2BAA2B,CAAC,CAAC,EAAE,CAAC;QAChE,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC9B,CAAC;IACD,IAAI,GAAG,CAAC,OAAO,EAAE,IAAI,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC;QACnG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACvB,CAAC;IACD,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC,SAAS,EAAE,OAAO,EAAE,kBAAkB,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC;QACjF,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,SAAS,EAAE,OAAO,EAAE,kBAAkB,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC5F,CAAC;IAED,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,EAAE,QAAQ,CAAC,CAAC,CAAC;IAClG,MAAM,UAAU,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;IACrG,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC,UAAU,EAAE,2BAA2B,CAAC,CAAC,CAAC;IAE9E,IAAI,SAAS,IAAI,CAAC,WAAW,IAAI,CAAC,UAAU,EAAE,CAAC;QAC7C,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,eAAe,EAAE,QAAQ,EAAE,CAAC;IACvF,CAAC;IACD,IAAI,WAAW,IAAI,UAAU,EAAE,CAAC;QAC9B,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,eAAe,EAAE,WAAW,EAAE,CAAC;IAC1F,CAAC;IACD,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,eAAe,EAAE,UAAU,EAAE,CAAC;IACzF,CAAC;IACD,IAAI,UAAU,EAAE,CAAC;QACf,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,eAAe,EAAE,SAAS,EAAE,CAAC;IACxF,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3C,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,eAAe,EAAE,WAAW,EAAE,CAAC;IAC5F,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,CAAC;AACzF,CAAC;AAED,SAAS,eAAe;IAMtB,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IACrD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC;QAAE,OAAO,IAAI,CAAC;IACjD,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC,CAAC;IAC/D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB;IACvB,MAAM,GAAG,GAAG,eAAe,EAAE,CAAC;IAC9B,IAAI,GAAG,EAAE,IAAI,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5C,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IACzB,CAAC;IACD,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;AACtC,CAAC;AAED,SAAS,MAAM,CAAC,GAAgB,EAAE,UAAoB;IACpD,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5C,CAAC;AAED,SAAS,IAAI,CAAC,GAAgB,EAAE,UAAoB;IAClD,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9C,CAAC;AAED,SAAS,kBAAkB,CAAC,UAAkB,EAAE,OAAe,EAAE,KAAc;IAC7E,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAC1C,MAAM,MAAM,GAAG,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IAEvC,IAAI,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;QACrB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1D,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACpC,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,OAAO,CAAC,IAAc,EAAE,IAAY;IAC3C,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,GAAG,KAAK,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QACxC,OAAO,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;IACvB,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,aAAa,CAAC,KAAyB;IAC9C,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,UAAU,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,WAAW,CAAC;AACpG,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/commands/validate.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/commands/validate.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAqB3C,wBAAsB,eAAe,CAAC,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAqD1F"}
|
|
@@ -14,8 +14,32 @@ const git_1 = require("@stackbilt/git");
|
|
|
14
14
|
const git_2 = require("@stackbilt/git");
|
|
15
15
|
async function validateCommand(options, args) {
|
|
16
16
|
const config = (0, config_1.loadConfig)(options.configPath);
|
|
17
|
+
if (!hasCommits()) {
|
|
18
|
+
if (options.format === 'json') {
|
|
19
|
+
console.log(JSON.stringify({ status: 'PASS', summary: 'No commits to validate.' }, null, 2));
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
console.log(' No commits to validate.');
|
|
23
|
+
}
|
|
24
|
+
return index_1.EXIT_CODE.SUCCESS;
|
|
25
|
+
}
|
|
17
26
|
const range = getCommitRange(args);
|
|
18
|
-
const
|
|
27
|
+
const commitLoad = getGitCommits(range);
|
|
28
|
+
if (commitLoad.error) {
|
|
29
|
+
if (options.format === 'json') {
|
|
30
|
+
console.log(JSON.stringify({
|
|
31
|
+
status: 'ERROR',
|
|
32
|
+
summary: 'Failed to read git commits for validation.',
|
|
33
|
+
details: commitLoad.error,
|
|
34
|
+
}, null, 2));
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
console.log(' [fail] Failed to read git commits for validation.');
|
|
38
|
+
console.log(` ${commitLoad.error}`);
|
|
39
|
+
}
|
|
40
|
+
return index_1.EXIT_CODE.RUNTIME_ERROR;
|
|
41
|
+
}
|
|
42
|
+
const commits = commitLoad.commits;
|
|
19
43
|
if (commits.length === 0) {
|
|
20
44
|
if (options.format === 'json') {
|
|
21
45
|
console.log(JSON.stringify({ status: 'PASS', summary: 'No commits to validate.' }, null, 2));
|
|
@@ -123,6 +147,7 @@ function getCommitRange(args) {
|
|
|
123
147
|
if (rangeIdx !== -1 && rangeIdx + 1 < args.length) {
|
|
124
148
|
return args[rangeIdx + 1];
|
|
125
149
|
}
|
|
150
|
+
const recentRange = getRecentCommitRange();
|
|
126
151
|
try {
|
|
127
152
|
const currentBranch = runGit(['rev-parse', 'HEAD']).trim();
|
|
128
153
|
let baseBranch = '';
|
|
@@ -133,12 +158,12 @@ function getCommitRange(args) {
|
|
|
133
158
|
baseBranch = runGit(['rev-parse', '--verify', 'master']).trim();
|
|
134
159
|
}
|
|
135
160
|
if (!baseBranch || baseBranch === currentBranch) {
|
|
136
|
-
return
|
|
161
|
+
return recentRange;
|
|
137
162
|
}
|
|
138
163
|
return `${baseBranch}..HEAD`;
|
|
139
164
|
}
|
|
140
165
|
catch {
|
|
141
|
-
return
|
|
166
|
+
return recentRange;
|
|
142
167
|
}
|
|
143
168
|
}
|
|
144
169
|
function getGitCommits(range) {
|
|
@@ -165,16 +190,58 @@ function getGitCommits(range) {
|
|
|
165
190
|
}
|
|
166
191
|
if (current)
|
|
167
192
|
commits.push(current);
|
|
168
|
-
return commits;
|
|
193
|
+
return { commits };
|
|
194
|
+
}
|
|
195
|
+
catch (error) {
|
|
196
|
+
return {
|
|
197
|
+
commits: [],
|
|
198
|
+
error: getGitErrorMessage(error),
|
|
199
|
+
};
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
function hasCommits() {
|
|
203
|
+
try {
|
|
204
|
+
runGit(['rev-parse', '--verify', 'HEAD']);
|
|
205
|
+
return true;
|
|
169
206
|
}
|
|
170
207
|
catch {
|
|
171
|
-
return
|
|
208
|
+
return false;
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
function getRecentCommitRange() {
|
|
212
|
+
try {
|
|
213
|
+
const count = Number.parseInt(runGit(['rev-list', '--count', 'HEAD']).trim(), 10);
|
|
214
|
+
if (!Number.isFinite(count) || count <= 1) {
|
|
215
|
+
return 'HEAD';
|
|
216
|
+
}
|
|
217
|
+
const span = Math.min(5, count - 1);
|
|
218
|
+
return `HEAD~${span}..HEAD`;
|
|
219
|
+
}
|
|
220
|
+
catch {
|
|
221
|
+
return 'HEAD';
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
function getGitErrorMessage(error) {
|
|
225
|
+
const fallback = 'Unknown git error.';
|
|
226
|
+
if (!(error instanceof Error))
|
|
227
|
+
return fallback;
|
|
228
|
+
const execError = error;
|
|
229
|
+
if (execError.stderr) {
|
|
230
|
+
const stderr = execError.stderr.toString().trim();
|
|
231
|
+
if (stderr.length > 0) {
|
|
232
|
+
return stderr;
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
if (execError.message) {
|
|
236
|
+
return execError.message.trim();
|
|
172
237
|
}
|
|
238
|
+
return fallback;
|
|
173
239
|
}
|
|
174
240
|
function runGit(args) {
|
|
175
241
|
return (0, node_child_process_1.execFileSync)('git', args, {
|
|
176
242
|
encoding: 'utf-8',
|
|
177
243
|
maxBuffer: 10 * 1024 * 1024,
|
|
244
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
178
245
|
});
|
|
179
246
|
}
|
|
180
|
-
//# sourceMappingURL=validate.js.map
|
|
247
|
+
//# sourceMappingURL=validate.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/commands/validate.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;
|
|
1
|
+
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/commands/validate.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/why.d.ts
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"why.d.ts","sourceRoot":"","sources":["../../src/commands/why.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAc3C,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CA4B5E;AAED,wBAAsB,UAAU,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAuCrE"}
|
package/dist/commands/why.js
CHANGED
|
@@ -1,10 +1,43 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
2
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
36
|
exports.quickstartCommand = quickstartCommand;
|
|
4
37
|
exports.whyCommand = whyCommand;
|
|
5
38
|
const node_child_process_1 = require("node:child_process");
|
|
6
|
-
const fs = require("node:fs");
|
|
7
|
-
const path = require("node:path");
|
|
39
|
+
const fs = __importStar(require("node:fs"));
|
|
40
|
+
const path = __importStar(require("node:path"));
|
|
8
41
|
const index_1 = require("../index");
|
|
9
42
|
const git_1 = require("@stackbilt/git");
|
|
10
43
|
async function quickstartCommand(options) {
|
|
@@ -144,7 +177,9 @@ function getRecentCommits(count) {
|
|
|
144
177
|
};
|
|
145
178
|
}
|
|
146
179
|
else if (line.trim() && current) {
|
|
147
|
-
current.files_changed
|
|
180
|
+
if (current.files_changed) {
|
|
181
|
+
current.files_changed.push(line.trim());
|
|
182
|
+
}
|
|
148
183
|
}
|
|
149
184
|
}
|
|
150
185
|
if (current)
|
|
@@ -166,3 +201,4 @@ function hasCommits() {
|
|
|
166
201
|
return false;
|
|
167
202
|
}
|
|
168
203
|
}
|
|
204
|
+
//# sourceMappingURL=why.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"why.js","sourceRoot":"","sources":["../../src/commands/why.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
CHANGED
|
@@ -41,6 +41,17 @@ export interface CharterConfig {
|
|
|
41
41
|
/** Post PR comments (requires GitHub token) */
|
|
42
42
|
postComments: boolean;
|
|
43
43
|
};
|
|
44
|
+
/** Audit scoring behavior */
|
|
45
|
+
audit: {
|
|
46
|
+
policyCoverage: {
|
|
47
|
+
enabled: boolean;
|
|
48
|
+
requiredSections: Array<{
|
|
49
|
+
id: string;
|
|
50
|
+
title: string;
|
|
51
|
+
match: string[];
|
|
52
|
+
}>;
|
|
53
|
+
};
|
|
54
|
+
};
|
|
44
55
|
}
|
|
45
56
|
declare const DEFAULT_CONFIG: CharterConfig;
|
|
46
57
|
/**
|
|
@@ -55,6 +66,6 @@ export declare function loadPatterns(configPath: string): Pattern[];
|
|
|
55
66
|
/**
|
|
56
67
|
* Get the default config as JSON string (for init command).
|
|
57
68
|
*/
|
|
58
|
-
export declare function getDefaultConfigJSON(): string;
|
|
69
|
+
export declare function getDefaultConfigJSON(projectName?: string): string;
|
|
59
70
|
export { DEFAULT_CONFIG };
|
|
60
71
|
//# sourceMappingURL=config.d.ts.map
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAMhD,MAAM,WAAW,aAAa;IAC5B,mBAAmB;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,+BAA+B;IAC/B,OAAO,EAAE,MAAM,CAAC;IAEhB,8BAA8B;IAC9B,GAAG,EAAE;QACH,wDAAwD;QACxD,eAAe,EAAE,OAAO,CAAC;QACzB,qEAAqE;QACrE,gBAAgB,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;KAC7C,CAAC;IAEF,8BAA8B;IAC9B,KAAK,EAAE;QACL,4BAA4B;QAC5B,OAAO,EAAE,OAAO,CAAC;QACjB,4CAA4C;QAC5C,QAAQ,EAAE,MAAM,CAAC;QACjB,oCAAoC;QACpC,OAAO,EAAE,MAAM,EAAE,CAAC;QAClB,oCAAoC;QACpC,OAAO,EAAE,MAAM,EAAE,CAAC;KACnB,CAAC;IAEF,0BAA0B;IAC1B,UAAU,EAAE;QACV,oDAAoD;QACpD,kBAAkB,EAAE,QAAQ,GAAG,MAAM,GAAG,YAAY,CAAC;KACtD,CAAC;IAEF,kBAAkB;IAClB,EAAE,EAAE;QACF,mDAAmD;QACnD,UAAU,EAAE,OAAO,CAAC;QACpB,+CAA+C;QAC/C,YAAY,EAAE,OAAO,CAAC;KACvB,CAAC;CACH;AAED,QAAA,MAAM,cAAc,EAAE,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAMhD,MAAM,WAAW,aAAa;IAC5B,mBAAmB;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,+BAA+B;IAC/B,OAAO,EAAE,MAAM,CAAC;IAEhB,8BAA8B;IAC9B,GAAG,EAAE;QACH,wDAAwD;QACxD,eAAe,EAAE,OAAO,CAAC;QACzB,qEAAqE;QACrE,gBAAgB,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;KAC7C,CAAC;IAEF,8BAA8B;IAC9B,KAAK,EAAE;QACL,4BAA4B;QAC5B,OAAO,EAAE,OAAO,CAAC;QACjB,4CAA4C;QAC5C,QAAQ,EAAE,MAAM,CAAC;QACjB,oCAAoC;QACpC,OAAO,EAAE,MAAM,EAAE,CAAC;QAClB,oCAAoC;QACpC,OAAO,EAAE,MAAM,EAAE,CAAC;KACnB,CAAC;IAEF,0BAA0B;IAC1B,UAAU,EAAE;QACV,oDAAoD;QACpD,kBAAkB,EAAE,QAAQ,GAAG,MAAM,GAAG,YAAY,CAAC;KACtD,CAAC;IAEF,kBAAkB;IAClB,EAAE,EAAE;QACF,mDAAmD;QACnD,UAAU,EAAE,OAAO,CAAC;QACpB,+CAA+C;QAC/C,YAAY,EAAE,OAAO,CAAC;KACvB,CAAC;IAEF,6BAA6B;IAC7B,KAAK,EAAE;QACL,cAAc,EAAE;YACd,OAAO,EAAE,OAAO,CAAC;YACjB,gBAAgB,EAAE,KAAK,CAAC;gBACtB,EAAE,EAAE,MAAM,CAAC;gBACX,KAAK,EAAE,MAAM,CAAC;gBACd,KAAK,EAAE,MAAM,EAAE,CAAC;aACjB,CAAC,CAAC;SACJ,CAAC;KACH,CAAC;CACH;AAED,QAAA,MAAM,cAAc,EAAE,aA+CrB,CAAC;AAMF;;;GAGG;AACH,wBAAgB,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,aAAa,CA8B5D;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,EAAE,CAsC1D;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAMjE;AAED,OAAO,EAAE,cAAc,EAAE,CAAC"}
|
package/dist/config.js
CHANGED
|
@@ -66,6 +66,33 @@ const DEFAULT_CONFIG = {
|
|
|
66
66
|
failOnWarn: false,
|
|
67
67
|
postComments: false,
|
|
68
68
|
},
|
|
69
|
+
audit: {
|
|
70
|
+
policyCoverage: {
|
|
71
|
+
enabled: true,
|
|
72
|
+
requiredSections: [
|
|
73
|
+
{
|
|
74
|
+
id: 'commit_trailers',
|
|
75
|
+
title: 'Commit Trailers',
|
|
76
|
+
match: ['commit trailers', 'governed-by', 'resolves-request'],
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
id: 'change_classification',
|
|
80
|
+
title: 'Change Classification',
|
|
81
|
+
match: ['change classification', 'surface', 'local', 'cross_cutting'],
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
id: 'exception_path',
|
|
85
|
+
title: 'Exception Path',
|
|
86
|
+
match: ['exception', 'waiver', 'override'],
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
id: 'escalation_approval',
|
|
90
|
+
title: 'Escalation & Approval',
|
|
91
|
+
match: ['escalation', 'approval', 'architectural review'],
|
|
92
|
+
},
|
|
93
|
+
],
|
|
94
|
+
},
|
|
95
|
+
},
|
|
69
96
|
};
|
|
70
97
|
exports.DEFAULT_CONFIG = DEFAULT_CONFIG;
|
|
71
98
|
// ============================================================================
|
|
@@ -91,6 +118,13 @@ function loadConfig(configPath) {
|
|
|
91
118
|
drift: { ...DEFAULT_CONFIG.drift, ...parsed.drift },
|
|
92
119
|
validation: { ...DEFAULT_CONFIG.validation, ...parsed.validation },
|
|
93
120
|
ci: { ...DEFAULT_CONFIG.ci, ...parsed.ci },
|
|
121
|
+
audit: {
|
|
122
|
+
policyCoverage: {
|
|
123
|
+
...DEFAULT_CONFIG.audit.policyCoverage,
|
|
124
|
+
...(parsed.audit?.policyCoverage || {}),
|
|
125
|
+
requiredSections: parsed.audit?.policyCoverage?.requiredSections || DEFAULT_CONFIG.audit.policyCoverage.requiredSections,
|
|
126
|
+
},
|
|
127
|
+
},
|
|
94
128
|
};
|
|
95
129
|
}
|
|
96
130
|
catch (err) {
|
|
@@ -139,7 +173,11 @@ function loadPatterns(configPath) {
|
|
|
139
173
|
/**
|
|
140
174
|
* Get the default config as JSON string (for init command).
|
|
141
175
|
*/
|
|
142
|
-
function getDefaultConfigJSON() {
|
|
143
|
-
|
|
176
|
+
function getDefaultConfigJSON(projectName) {
|
|
177
|
+
const config = {
|
|
178
|
+
...DEFAULT_CONFIG,
|
|
179
|
+
project: projectName || DEFAULT_CONFIG.project,
|
|
180
|
+
};
|
|
181
|
+
return JSON.stringify(config, null, 2);
|
|
144
182
|
}
|
|
145
183
|
//# sourceMappingURL=config.js.map
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAyCH,eAAO,MAAM,SAAS;;;;CAIZ,CAAC;AAEX,qBAAa,QAAS,SAAQ,KAAK;aAGf,QAAQ,EAAE,MAAM;gBADhC,OAAO,EAAE,MAAM,EACC,QAAQ,GAAE,MAAgC;CAK7D;AAED,MAAM,WAAW,UAAU;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,MAAM,EAAE,OAAO,CAAC;IAChB,GAAG,EAAE,OAAO,CAAC;CACd;AAED,wBAAsB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAkDzD"}
|
package/dist/index.js
CHANGED
|
@@ -5,6 +5,9 @@
|
|
|
5
5
|
* Config-driven governance checks that run locally and in CI.
|
|
6
6
|
* Zero cloud dependency - works fully offline.
|
|
7
7
|
*/
|
|
8
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
9
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
10
|
+
};
|
|
8
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
12
|
exports.CLIError = exports.EXIT_CODE = void 0;
|
|
10
13
|
exports.run = run;
|
|
@@ -16,15 +19,17 @@ const audit_1 = require("./commands/audit");
|
|
|
16
19
|
const drift_1 = require("./commands/drift");
|
|
17
20
|
const classify_1 = require("./commands/classify");
|
|
18
21
|
const why_1 = require("./commands/why");
|
|
19
|
-
const package_json_1 = require("../package.json");
|
|
20
|
-
const CLI_VERSION = package_json_1.version;
|
|
22
|
+
const package_json_1 = __importDefault(require("../package.json"));
|
|
23
|
+
const CLI_VERSION = package_json_1.default.version;
|
|
21
24
|
const HELP = `
|
|
22
25
|
charter - repo-level governance toolkit
|
|
23
26
|
|
|
24
27
|
Usage:
|
|
25
28
|
charter Show immediate governance value + risk snapshot
|
|
26
|
-
charter setup [--ci github]
|
|
27
|
-
|
|
29
|
+
charter setup [--ci github] [--preset <worker|frontend|backend|fullstack>] [--detect-only]
|
|
30
|
+
Bootstrap .charter/ and optional CI workflow
|
|
31
|
+
charter init [--preset <worker|frontend|backend|fullstack>]
|
|
32
|
+
Scaffold .charter/ config directory
|
|
28
33
|
charter validate Validate git commits for governance trailers
|
|
29
34
|
charter audit Generate governance audit report
|
|
30
35
|
charter drift [--path <dir>] Scan files for pattern drift
|
|
@@ -39,6 +44,8 @@ Options:
|
|
|
39
44
|
--format <type> Output format: text, json (default: text)
|
|
40
45
|
--ci CI mode: exit non-zero on WARN or FAIL
|
|
41
46
|
--yes Auto-accept safe setup overwrites
|
|
47
|
+
--preset <name> Stack preset: worker, frontend, backend, fullstack
|
|
48
|
+
--detect-only Setup only: print detected stack/preset and exit
|
|
42
49
|
`;
|
|
43
50
|
exports.EXIT_CODE = {
|
|
44
51
|
SUCCESS: 0,
|
|
@@ -106,4 +113,4 @@ function getFlag(args, flag) {
|
|
|
106
113
|
}
|
|
107
114
|
return undefined;
|
|
108
115
|
}
|
|
109
|
-
//# sourceMappingURL=index.js.map
|
|
116
|
+
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;GAKG
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|