cortex-tms 3.1.0 → 4.0.0
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 +248 -442
- package/dist/cli.js +26 -6
- package/dist/cli.js.map +1 -1
- package/dist/commands/archive.d.ts +5 -0
- package/dist/commands/archive.d.ts.map +1 -0
- package/dist/commands/archive.js +83 -0
- package/dist/commands/archive.js.map +1 -0
- package/dist/commands/auto-tier.d.ts.map +1 -1
- package/dist/commands/auto-tier.js +132 -58
- package/dist/commands/auto-tier.js.map +1 -1
- package/dist/commands/dashboard.d.ts +3 -0
- package/dist/commands/dashboard.d.ts.map +1 -0
- package/dist/commands/dashboard.js +20 -0
- package/dist/commands/dashboard.js.map +1 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +23 -27
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/migrate.d.ts.map +1 -1
- package/dist/commands/migrate.js +26 -7
- package/dist/commands/migrate.js.map +1 -1
- package/dist/commands/prompt.d.ts.map +1 -1
- package/dist/commands/prompt.js +2 -0
- package/dist/commands/prompt.js.map +1 -1
- package/dist/commands/review.d.ts.map +1 -1
- package/dist/commands/review.js +44 -26
- package/dist/commands/review.js.map +1 -1
- package/dist/commands/status.d.ts +1 -0
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +4 -98
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/tutorial.js +54 -3
- package/dist/commands/tutorial.js.map +1 -1
- package/dist/commands/validate.d.ts.map +1 -1
- package/dist/commands/validate.js +10 -3
- package/dist/commands/validate.js.map +1 -1
- package/dist/types/cli.d.ts +8 -0
- package/dist/types/cli.d.ts.map +1 -1
- package/dist/ui/components/Dashboard.d.ts +11 -0
- package/dist/ui/components/Dashboard.d.ts.map +1 -0
- package/dist/ui/components/Dashboard.js +63 -0
- package/dist/ui/components/Dashboard.js.map +1 -0
- package/dist/ui/components/dashboard/ContextReductionCard.d.ts +9 -0
- package/dist/ui/components/dashboard/ContextReductionCard.d.ts.map +1 -0
- package/dist/ui/components/dashboard/ContextReductionCard.js +38 -0
- package/dist/ui/components/dashboard/ContextReductionCard.js.map +1 -0
- package/dist/ui/components/dashboard/CostSavingsCard.d.ts +10 -0
- package/dist/ui/components/dashboard/CostSavingsCard.d.ts.map +1 -0
- package/dist/ui/components/dashboard/CostSavingsCard.js +45 -0
- package/dist/ui/components/dashboard/CostSavingsCard.js.map +1 -0
- package/dist/ui/components/dashboard/FileDistributionCard.d.ts +10 -0
- package/dist/ui/components/dashboard/FileDistributionCard.d.ts.map +1 -0
- package/dist/ui/components/dashboard/FileDistributionCard.js +51 -0
- package/dist/ui/components/dashboard/FileDistributionCard.js.map +1 -0
- package/dist/ui/components/dashboard/FileSizeHealthCard.d.ts +15 -0
- package/dist/ui/components/dashboard/FileSizeHealthCard.d.ts.map +1 -0
- package/dist/ui/components/dashboard/FileSizeHealthCard.js +48 -0
- package/dist/ui/components/dashboard/FileSizeHealthCard.js.map +1 -0
- package/dist/ui/components/dashboard/Footer.d.ts +3 -0
- package/dist/ui/components/dashboard/Footer.d.ts.map +1 -0
- package/dist/ui/components/dashboard/Footer.js +13 -0
- package/dist/ui/components/dashboard/Footer.js.map +1 -0
- package/dist/ui/components/dashboard/GovernanceHealthCard.d.ts +10 -0
- package/dist/ui/components/dashboard/GovernanceHealthCard.d.ts.map +1 -0
- package/dist/ui/components/dashboard/GovernanceHealthCard.js +43 -0
- package/dist/ui/components/dashboard/GovernanceHealthCard.js.map +1 -0
- package/dist/ui/components/dashboard/GuardianStatusCard.d.ts +10 -0
- package/dist/ui/components/dashboard/GuardianStatusCard.d.ts.map +1 -0
- package/dist/ui/components/dashboard/GuardianStatusCard.js +58 -0
- package/dist/ui/components/dashboard/GuardianStatusCard.js.map +1 -0
- package/dist/ui/components/dashboard/Header.d.ts +7 -0
- package/dist/ui/components/dashboard/Header.d.ts.map +1 -0
- package/dist/ui/components/dashboard/Header.js +21 -0
- package/dist/ui/components/dashboard/Header.js.map +1 -0
- package/dist/ui/components/dashboard/HotFilesCard.d.ts +8 -0
- package/dist/ui/components/dashboard/HotFilesCard.d.ts.map +1 -0
- package/dist/ui/components/dashboard/HotFilesCard.js +28 -0
- package/dist/ui/components/dashboard/HotFilesCard.js.map +1 -0
- package/dist/ui/components/dashboard/NotConfiguredCard.d.ts +10 -0
- package/dist/ui/components/dashboard/NotConfiguredCard.d.ts.map +1 -0
- package/dist/ui/components/dashboard/NotConfiguredCard.js +13 -0
- package/dist/ui/components/dashboard/NotConfiguredCard.js.map +1 -0
- package/dist/ui/components/dashboard/SprintProgressCard.d.ts +11 -0
- package/dist/ui/components/dashboard/SprintProgressCard.d.ts.map +1 -0
- package/dist/ui/components/dashboard/SprintProgressCard.js +33 -0
- package/dist/ui/components/dashboard/SprintProgressCard.js.map +1 -0
- package/dist/ui/components/dashboard/StalenessCard.d.ts +10 -0
- package/dist/ui/components/dashboard/StalenessCard.d.ts.map +1 -0
- package/dist/ui/components/dashboard/StalenessCard.js +43 -0
- package/dist/ui/components/dashboard/StalenessCard.js.map +1 -0
- package/dist/ui/components/dashboard/TabBar.d.ts +8 -0
- package/dist/ui/components/dashboard/TabBar.d.ts.map +1 -0
- package/dist/ui/components/dashboard/TabBar.js +16 -0
- package/dist/ui/components/dashboard/TabBar.js.map +1 -0
- package/dist/ui/components/dashboard/ValidationCard.d.ts +10 -0
- package/dist/ui/components/dashboard/ValidationCard.d.ts.map +1 -0
- package/dist/ui/components/dashboard/ValidationCard.js +62 -0
- package/dist/ui/components/dashboard/ValidationCard.js.map +1 -0
- package/dist/ui/components/dashboard/ViewContainer.d.ts +14 -0
- package/dist/ui/components/dashboard/ViewContainer.d.ts.map +1 -0
- package/dist/ui/components/dashboard/ViewContainer.js +53 -0
- package/dist/ui/components/dashboard/ViewContainer.js.map +1 -0
- package/dist/ui/components/dashboard/index.d.ts +14 -0
- package/dist/ui/components/dashboard/index.d.ts.map +1 -0
- package/dist/ui/components/dashboard/index.js +14 -0
- package/dist/ui/components/dashboard/index.js.map +1 -0
- package/dist/ui/index.d.ts +5 -0
- package/dist/ui/index.d.ts.map +1 -0
- package/dist/ui/index.js +46 -0
- package/dist/ui/index.js.map +1 -0
- package/dist/utils/errors.d.ts +20 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +54 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/git-history.d.ts.map +1 -1
- package/dist/utils/git-history.js +7 -3
- package/dist/utils/git-history.js.map +1 -1
- package/dist/utils/git-staleness.d.ts +13 -0
- package/dist/utils/git-staleness.d.ts.map +1 -0
- package/dist/utils/git-staleness.js +129 -0
- package/dist/utils/git-staleness.js.map +1 -0
- package/dist/utils/llm-client.d.ts.map +1 -1
- package/dist/utils/llm-client.js +5 -2
- package/dist/utils/llm-client.js.map +1 -1
- package/dist/utils/sanitize.d.ts +4 -0
- package/dist/utils/sanitize.d.ts.map +1 -0
- package/dist/utils/sanitize.js +44 -0
- package/dist/utils/sanitize.js.map +1 -0
- package/dist/utils/stats-collector.d.ts +62 -0
- package/dist/utils/stats-collector.d.ts.map +1 -0
- package/dist/utils/stats-collector.js +253 -0
- package/dist/utils/stats-collector.js.map +1 -0
- package/dist/utils/templates.d.ts.map +1 -1
- package/dist/utils/templates.js +11 -1
- package/dist/utils/templates.js.map +1 -1
- package/dist/utils/validation.d.ts +159 -0
- package/dist/utils/validation.d.ts.map +1 -0
- package/dist/utils/validation.js +172 -0
- package/dist/utils/validation.js.map +1 -0
- package/dist/utils/validator.d.ts.map +1 -1
- package/dist/utils/validator.js +66 -1
- package/dist/utils/validator.js.map +1 -1
- package/package.json +10 -3
- package/templates/CLAUDE.md +1 -1
- package/templates/FUTURE-ENHANCEMENTS.md +1 -1
- package/templates/NEXT-TASKS.md +1 -1
- package/templates/PROMPTS.md +1 -1
- package/templates/README.md +1 -1
- package/templates/docs/archive/v1.0-CHANGELOG.md +1 -1
- package/templates/docs/core/ARCHITECTURE.md +1 -1
- package/templates/docs/core/DECISIONS.md +1 -1
- package/templates/docs/core/DOMAIN-LOGIC.md +1 -1
- package/templates/docs/core/GLOSSARY.md +1 -1
- package/templates/docs/core/PATTERNS.md +1 -1
- package/templates/docs/core/SCHEMA.md +1 -1
- package/templates/docs/core/TROUBLESHOOTING.md +1 -1
- package/dist/__tests__/init.test.d.ts +0 -2
- package/dist/__tests__/init.test.d.ts.map +0 -1
- package/dist/__tests__/init.test.js +0 -173
- package/dist/__tests__/init.test.js.map +0 -1
- package/dist/__tests__/release.test.d.ts +0 -2
- package/dist/__tests__/release.test.d.ts.map +0 -1
- package/dist/__tests__/release.test.js +0 -484
- package/dist/__tests__/release.test.js.map +0 -1
- package/dist/__tests__/utils/temp-dir.d.ts +0 -6
- package/dist/__tests__/utils/temp-dir.d.ts.map +0 -1
- package/dist/__tests__/utils/temp-dir.js +0 -34
- package/dist/__tests__/utils/temp-dir.js.map +0 -1
- package/dist/__tests__/validate.test.d.ts +0 -2
- package/dist/__tests__/validate.test.d.ts.map +0 -1
- package/dist/__tests__/validate.test.js +0 -209
- package/dist/__tests__/validate.test.js.map +0 -1
|
@@ -1,209 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect, beforeEach, afterEach } from 'vitest';
|
|
2
|
-
import { join } from 'path';
|
|
3
|
-
import { writeFile, mkdir } from 'fs/promises';
|
|
4
|
-
import { createTempDir, cleanupTempDir, } from './utils/temp-dir.js';
|
|
5
|
-
import { validateProject, validateFileSizes, validateMandatoryFiles, DEFAULT_LINE_LIMITS, } from '../utils/validator.js';
|
|
6
|
-
import { saveConfig, createConfigFromScope } from '../utils/config.js';
|
|
7
|
-
async function createMinimalProject(dir) {
|
|
8
|
-
await writeFile(join(dir, 'NEXT-TASKS.md'), '# NEXT: Upcoming Tasks\n');
|
|
9
|
-
await writeFile(join(dir, 'CLAUDE.md'), '# Agent Workflow\n');
|
|
10
|
-
await mkdir(join(dir, '.github'), { recursive: true });
|
|
11
|
-
await writeFile(join(dir, '.github/copilot-instructions.md'), '# Instructions\n');
|
|
12
|
-
const config = createConfigFromScope('standard', 'test-project');
|
|
13
|
-
await saveConfig(dir, config);
|
|
14
|
-
}
|
|
15
|
-
async function createFileWithLines(dir, filename, lineCount) {
|
|
16
|
-
const content = Array(lineCount)
|
|
17
|
-
.fill('Line content here')
|
|
18
|
-
.join('\n');
|
|
19
|
-
const filePath = join(dir, filename);
|
|
20
|
-
const dirPath = filePath.substring(0, filePath.lastIndexOf('/'));
|
|
21
|
-
if (dirPath !== dir) {
|
|
22
|
-
await mkdir(dirPath, { recursive: true });
|
|
23
|
-
}
|
|
24
|
-
await writeFile(filePath, content);
|
|
25
|
-
}
|
|
26
|
-
describe('Validate Command - .cortexrc Integration', () => {
|
|
27
|
-
let tempDir;
|
|
28
|
-
beforeEach(async () => {
|
|
29
|
-
tempDir = await createTempDir();
|
|
30
|
-
await createMinimalProject(tempDir);
|
|
31
|
-
});
|
|
32
|
-
afterEach(async () => {
|
|
33
|
-
await cleanupTempDir(tempDir);
|
|
34
|
-
});
|
|
35
|
-
it('should use default line limits when no .cortexrc exists', async () => {
|
|
36
|
-
await createFileWithLines(tempDir, 'NEXT-TASKS.md', 250);
|
|
37
|
-
const result = await validateProject(tempDir);
|
|
38
|
-
const fileSizeCheck = result.checks.find((c) => c.name === 'File Size: NEXT-TASKS.md');
|
|
39
|
-
expect(fileSizeCheck).toBeDefined();
|
|
40
|
-
expect(fileSizeCheck?.passed).toBe(false);
|
|
41
|
-
expect(fileSizeCheck?.details).toContain('250');
|
|
42
|
-
expect(fileSizeCheck?.details).toContain('200');
|
|
43
|
-
});
|
|
44
|
-
it('should use scope-based limits from .cortexrc', async () => {
|
|
45
|
-
const config = createConfigFromScope('nano', 'test-project');
|
|
46
|
-
await saveConfig(tempDir, config);
|
|
47
|
-
await createFileWithLines(tempDir, 'NEXT-TASKS.md', 150);
|
|
48
|
-
const result = await validateProject(tempDir);
|
|
49
|
-
const fileSizeCheck = result.checks.find((c) => c.name === 'File Size: NEXT-TASKS.md');
|
|
50
|
-
expect(fileSizeCheck?.passed).toBe(false);
|
|
51
|
-
expect(fileSizeCheck?.details).toContain('150');
|
|
52
|
-
expect(fileSizeCheck?.details).toContain('100');
|
|
53
|
-
});
|
|
54
|
-
it('should allow larger limits for enterprise scope', async () => {
|
|
55
|
-
const config = createConfigFromScope('enterprise', 'test-project');
|
|
56
|
-
await saveConfig(tempDir, config);
|
|
57
|
-
await createFileWithLines(tempDir, 'NEXT-TASKS.md', 250);
|
|
58
|
-
const result = await validateProject(tempDir);
|
|
59
|
-
const fileSizeCheck = result.checks.find((c) => c.name === 'File Size: NEXT-TASKS.md');
|
|
60
|
-
expect(fileSizeCheck?.passed).toBe(true);
|
|
61
|
-
expect(fileSizeCheck?.details).toContain('250');
|
|
62
|
-
expect(fileSizeCheck?.details).toContain('300');
|
|
63
|
-
});
|
|
64
|
-
it('should respect custom line limit overrides in .cortexrc', async () => {
|
|
65
|
-
const config = createConfigFromScope('standard', 'test-project');
|
|
66
|
-
config.limits = {
|
|
67
|
-
'NEXT-TASKS.md': 500,
|
|
68
|
-
};
|
|
69
|
-
await saveConfig(tempDir, config);
|
|
70
|
-
await createFileWithLines(tempDir, 'NEXT-TASKS.md', 450);
|
|
71
|
-
const result = await validateProject(tempDir);
|
|
72
|
-
const fileSizeCheck = result.checks.find((c) => c.name === 'File Size: NEXT-TASKS.md');
|
|
73
|
-
expect(fileSizeCheck?.passed).toBe(true);
|
|
74
|
-
expect(fileSizeCheck?.details).toContain('450');
|
|
75
|
-
expect(fileSizeCheck?.details).toContain('500');
|
|
76
|
-
});
|
|
77
|
-
});
|
|
78
|
-
describe('Validate Command - Ignore Files', () => {
|
|
79
|
-
let tempDir;
|
|
80
|
-
beforeEach(async () => {
|
|
81
|
-
tempDir = await createTempDir();
|
|
82
|
-
await createMinimalProject(tempDir);
|
|
83
|
-
});
|
|
84
|
-
afterEach(async () => {
|
|
85
|
-
await cleanupTempDir(tempDir);
|
|
86
|
-
});
|
|
87
|
-
it('should detect placeholders by default', async () => {
|
|
88
|
-
await writeFile(join(tempDir, 'NEXT-TASKS.md'), '# Project: [Project Name]\n');
|
|
89
|
-
const result = await validateProject(tempDir);
|
|
90
|
-
const placeholderCheck = result.checks.find((c) => c.name === 'Placeholders: NEXT-TASKS.md');
|
|
91
|
-
expect(placeholderCheck?.passed).toBe(false);
|
|
92
|
-
expect(placeholderCheck?.message).toContain('unreplaced placeholders');
|
|
93
|
-
});
|
|
94
|
-
it('should ignore files specified in .cortexrc validation.ignoreFiles', async () => {
|
|
95
|
-
const config = createConfigFromScope('standard', 'test-project');
|
|
96
|
-
config.validation = {
|
|
97
|
-
ignoreFiles: ['NEXT-TASKS.md'],
|
|
98
|
-
ignorePatterns: [],
|
|
99
|
-
};
|
|
100
|
-
await saveConfig(tempDir, config);
|
|
101
|
-
await writeFile(join(tempDir, 'NEXT-TASKS.md'), '# Project: [Project Name]\n');
|
|
102
|
-
const result = await validateProject(tempDir);
|
|
103
|
-
const placeholderCheck = result.checks.find((c) => c.name === 'Placeholders: NEXT-TASKS.md');
|
|
104
|
-
expect(placeholderCheck).toBeUndefined();
|
|
105
|
-
});
|
|
106
|
-
it('should still check non-ignored files', async () => {
|
|
107
|
-
const config = createConfigFromScope('standard', 'test-project');
|
|
108
|
-
config.validation = {
|
|
109
|
-
ignoreFiles: ['NEXT-TASKS.md'],
|
|
110
|
-
ignorePatterns: [],
|
|
111
|
-
};
|
|
112
|
-
await saveConfig(tempDir, config);
|
|
113
|
-
await writeFile(join(tempDir, 'CLAUDE.md'), '# Agent for [Project Name]\n');
|
|
114
|
-
const result = await validateProject(tempDir);
|
|
115
|
-
const claudeCheck = result.checks.find((c) => c.name === 'Placeholders: CLAUDE.md');
|
|
116
|
-
expect(claudeCheck?.passed).toBe(false);
|
|
117
|
-
expect(claudeCheck?.message).toContain('unreplaced placeholders');
|
|
118
|
-
});
|
|
119
|
-
});
|
|
120
|
-
describe('Validate Command - Mandatory Files', () => {
|
|
121
|
-
let tempDir;
|
|
122
|
-
beforeEach(async () => {
|
|
123
|
-
tempDir = await createTempDir();
|
|
124
|
-
});
|
|
125
|
-
afterEach(async () => {
|
|
126
|
-
await cleanupTempDir(tempDir);
|
|
127
|
-
});
|
|
128
|
-
it('should fail when mandatory files are missing', async () => {
|
|
129
|
-
const checks = validateMandatoryFiles(tempDir);
|
|
130
|
-
const nextTasksCheck = checks.find((c) => c.file === 'NEXT-TASKS.md');
|
|
131
|
-
const claudeCheck = checks.find((c) => c.file === 'CLAUDE.md');
|
|
132
|
-
expect(nextTasksCheck?.passed).toBe(false);
|
|
133
|
-
expect(nextTasksCheck?.level).toBe('error');
|
|
134
|
-
expect(claudeCheck?.passed).toBe(false);
|
|
135
|
-
expect(claudeCheck?.level).toBe('error');
|
|
136
|
-
});
|
|
137
|
-
it('should pass when all mandatory files exist', async () => {
|
|
138
|
-
await createMinimalProject(tempDir);
|
|
139
|
-
const checks = validateMandatoryFiles(tempDir);
|
|
140
|
-
const allPassed = checks.every((c) => c.passed);
|
|
141
|
-
expect(allPassed).toBe(true);
|
|
142
|
-
});
|
|
143
|
-
});
|
|
144
|
-
describe('Validate Command - File Size Limits', () => {
|
|
145
|
-
let tempDir;
|
|
146
|
-
beforeEach(async () => {
|
|
147
|
-
tempDir = await createTempDir();
|
|
148
|
-
});
|
|
149
|
-
afterEach(async () => {
|
|
150
|
-
await cleanupTempDir(tempDir);
|
|
151
|
-
});
|
|
152
|
-
it('should pass when file is within limit', async () => {
|
|
153
|
-
await createFileWithLines(tempDir, 'NEXT-TASKS.md', 100);
|
|
154
|
-
const checks = await validateFileSizes(tempDir, DEFAULT_LINE_LIMITS);
|
|
155
|
-
const nextTasksCheck = checks.find((c) => c.file === 'NEXT-TASKS.md');
|
|
156
|
-
expect(nextTasksCheck?.passed).toBe(true);
|
|
157
|
-
expect(nextTasksCheck?.details).toContain('100/200');
|
|
158
|
-
});
|
|
159
|
-
it('should fail when file exceeds limit', async () => {
|
|
160
|
-
await createFileWithLines(tempDir, 'NEXT-TASKS.md', 300);
|
|
161
|
-
const checks = await validateFileSizes(tempDir, DEFAULT_LINE_LIMITS);
|
|
162
|
-
const nextTasksCheck = checks.find((c) => c.file === 'NEXT-TASKS.md');
|
|
163
|
-
expect(nextTasksCheck?.passed).toBe(false);
|
|
164
|
-
expect(nextTasksCheck?.level).toBe('warning');
|
|
165
|
-
expect(nextTasksCheck?.details).toContain('Overage: 100');
|
|
166
|
-
});
|
|
167
|
-
it('should skip files that do not exist', async () => {
|
|
168
|
-
const checks = await validateFileSizes(tempDir, DEFAULT_LINE_LIMITS);
|
|
169
|
-
expect(checks.length).toBe(0);
|
|
170
|
-
});
|
|
171
|
-
});
|
|
172
|
-
describe('Validate Command - Strict Mode', () => {
|
|
173
|
-
let tempDir;
|
|
174
|
-
beforeEach(async () => {
|
|
175
|
-
tempDir = await createTempDir();
|
|
176
|
-
});
|
|
177
|
-
afterEach(async () => {
|
|
178
|
-
await cleanupTempDir(tempDir);
|
|
179
|
-
});
|
|
180
|
-
it('should pass in normal mode with warnings', async () => {
|
|
181
|
-
await createMinimalProject(tempDir);
|
|
182
|
-
await createFileWithLines(tempDir, 'NEXT-TASKS.md', 250);
|
|
183
|
-
const result = await validateProject(tempDir, { strict: false });
|
|
184
|
-
expect(result.passed).toBe(true);
|
|
185
|
-
expect(result.summary.warnings).toBeGreaterThan(0);
|
|
186
|
-
});
|
|
187
|
-
it('should fail in strict mode with warnings', async () => {
|
|
188
|
-
await createMinimalProject(tempDir);
|
|
189
|
-
await createFileWithLines(tempDir, 'NEXT-TASKS.md', 250);
|
|
190
|
-
const result = await validateProject(tempDir, { strict: true });
|
|
191
|
-
expect(result.passed).toBe(false);
|
|
192
|
-
expect(result.summary.warnings).toBeGreaterThan(0);
|
|
193
|
-
});
|
|
194
|
-
it('should fail in both modes with errors', async () => {
|
|
195
|
-
await writeFile(join(tempDir, 'NEXT-TASKS.md'), '# NEXT: Upcoming Tasks\n');
|
|
196
|
-
await mkdir(join(tempDir, '.github'), { recursive: true });
|
|
197
|
-
await writeFile(join(tempDir, '.github/copilot-instructions.md'), '# Instructions\n');
|
|
198
|
-
const normalResult = await validateProject(tempDir, { strict: false });
|
|
199
|
-
const strictResult = await validateProject(tempDir, { strict: true });
|
|
200
|
-
const claudeCheck = normalResult.checks.find((c) => c.file === 'CLAUDE.md');
|
|
201
|
-
expect(claudeCheck).toBeDefined();
|
|
202
|
-
expect(claudeCheck?.passed).toBe(false);
|
|
203
|
-
expect(claudeCheck?.level).toBe('error');
|
|
204
|
-
expect(normalResult.summary.errors).toBeGreaterThan(0);
|
|
205
|
-
expect(normalResult.passed).toBe(false);
|
|
206
|
-
expect(strictResult.passed).toBe(false);
|
|
207
|
-
});
|
|
208
|
-
});
|
|
209
|
-
//# sourceMappingURL=validate.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"validate.test.js","sourceRoot":"","sources":["../../src/__tests__/validate.test.ts"],"names":[],"mappings":"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"}
|