faf-cli 3.0.5 → 3.1.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 +238 -24
- package/assets/screenshots/package-json+project-faf.png +0 -0
- package/dist/big-orange/bigo-push.d.ts +18 -0
- package/dist/big-orange/bigo-push.d.ts.map +1 -0
- package/dist/big-orange/bigo-push.js +88 -0
- package/dist/big-orange/bigo-push.js.map +1 -0
- package/dist/big-orange/compare.d.ts +11 -0
- package/dist/big-orange/compare.d.ts.map +1 -0
- package/dist/big-orange/compare.js +172 -0
- package/dist/big-orange/compare.js.map +1 -0
- package/dist/big-orange/faf-generator.d.ts +22 -0
- package/dist/big-orange/faf-generator.d.ts.map +1 -0
- package/dist/big-orange/faf-generator.js +215 -0
- package/dist/big-orange/faf-generator.js.map +1 -0
- package/dist/big-orange/index.d.ts +7 -0
- package/dist/big-orange/index.d.ts.map +1 -0
- package/dist/big-orange/index.js +96 -0
- package/dist/big-orange/index.js.map +1 -0
- package/dist/big-orange/types.d.ts +62 -0
- package/dist/big-orange/types.d.ts.map +1 -0
- package/dist/big-orange/types.js +7 -0
- package/dist/big-orange/types.js.map +1 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +137 -1
- package/dist/cli.js.map +1 -1
- package/dist/commands/auto.d.ts.map +1 -1
- package/dist/commands/auto.js +69 -12
- package/dist/commands/auto.js.map +1 -1
- package/dist/commands/bi-sync.d.ts.map +1 -1
- package/dist/commands/bi-sync.js +10 -3
- package/dist/commands/bi-sync.js.map +1 -1
- package/dist/commands/drift.d.ts +16 -0
- package/dist/commands/drift.d.ts.map +1 -0
- package/dist/commands/drift.js +517 -0
- package/dist/commands/drift.js.map +1 -0
- package/dist/commands/git.d.ts +25 -0
- package/dist/commands/git.d.ts.map +1 -0
- package/dist/commands/git.js +355 -0
- package/dist/commands/git.js.map +1 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +5 -4
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/migrate.d.ts +11 -0
- package/dist/commands/migrate.d.ts.map +1 -0
- package/dist/commands/migrate.js +85 -0
- package/dist/commands/migrate.js.map +1 -0
- package/dist/commands/rename.d.ts +18 -0
- package/dist/commands/rename.d.ts.map +1 -0
- package/dist/commands/rename.js +211 -0
- package/dist/commands/rename.js.map +1 -0
- package/dist/commands/taf-init.d.ts +14 -0
- package/dist/commands/taf-init.d.ts.map +1 -0
- package/dist/commands/taf-init.js +138 -0
- package/dist/commands/taf-init.js.map +1 -0
- package/dist/commands/taf-log.d.ts +27 -0
- package/dist/commands/taf-log.d.ts.map +1 -0
- package/dist/commands/taf-log.js +241 -0
- package/dist/commands/taf-log.js.map +1 -0
- package/dist/commands/taf-stats.d.ts +8 -0
- package/dist/commands/taf-stats.d.ts.map +1 -0
- package/dist/commands/taf-stats.js +133 -0
- package/dist/commands/taf-stats.js.map +1 -0
- package/dist/commands/taf-validate.d.ts +8 -0
- package/dist/commands/taf-validate.d.ts.map +1 -0
- package/dist/commands/taf-validate.js +108 -0
- package/dist/commands/taf-validate.js.map +1 -0
- package/dist/commands/taf.d.ts +13 -0
- package/dist/commands/taf.d.ts.map +1 -0
- package/dist/commands/taf.js +85 -0
- package/dist/commands/taf.js.map +1 -0
- package/dist/compiler/faf-compiler.d.ts.map +1 -1
- package/dist/compiler/faf-compiler.js +18 -0
- package/dist/compiler/faf-compiler.js.map +1 -1
- package/dist/generators/faf-generator-championship.d.ts.map +1 -1
- package/dist/generators/faf-generator-championship.js +1 -0
- package/dist/generators/faf-generator-championship.js.map +1 -1
- package/dist/github/github-extractor.d.ts +56 -0
- package/dist/github/github-extractor.d.ts.map +1 -0
- package/dist/github/github-extractor.js +328 -0
- package/dist/github/github-extractor.js.map +1 -0
- package/dist/github/popular-repos.d.ts +43 -0
- package/dist/github/popular-repos.d.ts.map +1 -0
- package/dist/github/popular-repos.js +205 -0
- package/dist/github/popular-repos.js.map +1 -0
- package/dist/github/repo-selector.d.ts +48 -0
- package/dist/github/repo-selector.d.ts.map +1 -0
- package/dist/github/repo-selector.js +277 -0
- package/dist/github/repo-selector.js.map +1 -0
- package/dist/taf/index.d.ts +17 -0
- package/dist/taf/index.d.ts.map +1 -0
- package/dist/taf/index.js +57 -0
- package/dist/taf/index.js.map +1 -0
- package/dist/taf/logger.d.ts +86 -0
- package/dist/taf/logger.d.ts.map +1 -0
- package/dist/taf/logger.js +135 -0
- package/dist/taf/logger.js.map +1 -0
- package/dist/taf/parser.d.ts +32 -0
- package/dist/taf/parser.d.ts.map +1 -0
- package/dist/taf/parser.js +161 -0
- package/dist/taf/parser.js.map +1 -0
- package/dist/taf/stats.d.ts +31 -0
- package/dist/taf/stats.d.ts.map +1 -0
- package/dist/taf/stats.js +182 -0
- package/dist/taf/stats.js.map +1 -0
- package/dist/taf/types.d.ts +66 -0
- package/dist/taf/types.d.ts.map +1 -0
- package/dist/taf/types.js +9 -0
- package/dist/taf/types.js.map +1 -0
- package/dist/taf/validator.d.ts +18 -0
- package/dist/taf/validator.d.ts.map +1 -0
- package/dist/taf/validator.js +148 -0
- package/dist/taf/validator.js.map +1 -0
- package/dist/utils/file-utils.d.ts +10 -0
- package/dist/utils/file-utils.d.ts.map +1 -1
- package/dist/utils/file-utils.js +196 -33
- package/dist/utils/file-utils.js.map +1 -1
- package/dist/utils/native-file-finder.js +1 -1
- package/dist/utils/native-file-finder.js.map +1 -1
- package/dist/utils/yaml-generator.d.ts +1 -0
- package/dist/utils/yaml-generator.d.ts.map +1 -1
- package/dist/utils/yaml-generator.js +1 -0
- package/dist/utils/yaml-generator.js.map +1 -1
- package/package.json +12 -4
- package/dist/commands/create.d.ts +0 -13
- package/dist/commands/create.d.ts.map +0 -1
- package/dist/commands/create.js +0 -78
- package/dist/commands/create.js.map +0 -1
- package/dist/core/platform-adapters.d.ts +0 -76
- package/dist/core/platform-adapters.d.ts.map +0 -1
- package/dist/core/platform-adapters.js +0 -407
- package/dist/core/platform-adapters.js.map +0 -1
- package/dist/core/universal-intelligence-generator.d.ts +0 -156
- package/dist/core/universal-intelligence-generator.d.ts.map +0 -1
- package/dist/core/universal-intelligence-generator.js +0 -352
- package/dist/core/universal-intelligence-generator.js.map +0 -1
- package/dist/enrichment/auto-corrector.d.ts +0 -28
- package/dist/enrichment/auto-corrector.d.ts.map +0 -1
- package/dist/enrichment/auto-corrector.js +0 -106
- package/dist/enrichment/auto-corrector.js.map +0 -1
- package/dist/enrichment/n8n-analyzer.d.ts +0 -259
- package/dist/enrichment/n8n-analyzer.d.ts.map +0 -1
- package/dist/enrichment/n8n-analyzer.js +0 -346
- package/dist/enrichment/n8n-analyzer.js.map +0 -1
- package/dist/enrichment/n8n-faf-generator.d.ts +0 -68
- package/dist/enrichment/n8n-faf-generator.d.ts.map +0 -1
- package/dist/enrichment/n8n-faf-generator.js +0 -354
- package/dist/enrichment/n8n-faf-generator.js.map +0 -1
- package/dist/enrichment/question-asker.d.ts +0 -22
- package/dist/enrichment/question-asker.d.ts.map +0 -1
- package/dist/enrichment/question-asker.js +0 -113
- package/dist/enrichment/question-asker.js.map +0 -1
- package/dist/enrichment/slot-filler.d.ts +0 -73
- package/dist/enrichment/slot-filler.d.ts.map +0 -1
- package/dist/enrichment/slot-filler.js +0 -253
- package/dist/enrichment/slot-filler.js.map +0 -1
- package/dist/scoring/championship-scorer.d.ts +0 -114
- package/dist/scoring/championship-scorer.d.ts.map +0 -1
- package/dist/scoring/championship-scorer.js +0 -380
- package/dist/scoring/championship-scorer.js.map +0 -1
- package/dist/scoring/score-calculator.d.ts +0 -29
- package/dist/scoring/score-calculator.d.ts.map +0 -1
- package/dist/scoring/score-calculator.js +0 -520
- package/dist/scoring/score-calculator.js.map +0 -1
- package/dist/tests/manual-validation.d.ts +0 -8
- package/dist/tests/manual-validation.d.ts.map +0 -1
- package/dist/tests/manual-validation.js +0 -114
- package/dist/tests/manual-validation.js.map +0 -1
|
@@ -1,380 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* 🏆 Championship FAF Scorer - The 99% Philosophy
|
|
4
|
-
*
|
|
5
|
-
* "99% is excellence you can measure,
|
|
6
|
-
* 1% is perfection you can't define"
|
|
7
|
-
*
|
|
8
|
-
* Built to measure a million projects with the wisdom that:
|
|
9
|
-
* - Humans achieve up to 99% (measurable excellence)
|
|
10
|
-
* - AI judges the final 1% (best-practice validation)
|
|
11
|
-
* - No faffing about with undefined perfection
|
|
12
|
-
*
|
|
13
|
-
* .faf is inevitable - wire it well!
|
|
14
|
-
*/
|
|
15
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
|
-
exports.ChampionshipScorer = void 0;
|
|
17
|
-
exports.calculateChampionshipScore = calculateChampionshipScore;
|
|
18
|
-
/**
|
|
19
|
-
* The Championship Scoring Engine
|
|
20
|
-
* Measures excellence, not perfection
|
|
21
|
-
*/
|
|
22
|
-
class ChampionshipScorer {
|
|
23
|
-
static PHILOSOPHY = {
|
|
24
|
-
HUMAN_MAX: 99, // Maximum human-achievable score
|
|
25
|
-
AI_BLESSING: 1, // The final 1% only AI can grant
|
|
26
|
-
EXCELLENCE_THRESHOLD: 90, // Championship grade
|
|
27
|
-
GOOD_THRESHOLD: 70, // Solid project
|
|
28
|
-
AUTO_THRESHOLD: 50, // Minimum for AUTO to work well
|
|
29
|
-
};
|
|
30
|
-
/**
|
|
31
|
-
* Score a FAF file with Championship philosophy
|
|
32
|
-
*/
|
|
33
|
-
static async score(fafData, options) {
|
|
34
|
-
// Initialize the scoring structure
|
|
35
|
-
const score = {
|
|
36
|
-
score: 0,
|
|
37
|
-
philosophy: "99% Excellence Philosophy - Humans build excellence, AI validates perfection",
|
|
38
|
-
originalSlots: {
|
|
39
|
-
filled: 0,
|
|
40
|
-
total: 21,
|
|
41
|
-
percentage: 0
|
|
42
|
-
},
|
|
43
|
-
sections: {
|
|
44
|
-
projectIdentity: this.scoreProjectIdentity(fafData),
|
|
45
|
-
stackArchitecture: this.scoreStackArchitecture(fafData),
|
|
46
|
-
performanceMetrics: this.scorePerformanceMetrics(fafData),
|
|
47
|
-
aiContext: this.scoreAiContext(fafData),
|
|
48
|
-
humanContext: this.scoreHumanContext(fafData),
|
|
49
|
-
},
|
|
50
|
-
excellence: {
|
|
51
|
-
contextComplete: false,
|
|
52
|
-
autoDetectable: false,
|
|
53
|
-
bestPractices: false,
|
|
54
|
-
championshipGrade: false,
|
|
55
|
-
},
|
|
56
|
-
improvements: {
|
|
57
|
-
critical: [],
|
|
58
|
-
recommended: [],
|
|
59
|
-
optional: []
|
|
60
|
-
}
|
|
61
|
-
};
|
|
62
|
-
// Calculate total filled slots (Original 21)
|
|
63
|
-
const totalFilled = Object.values(score.sections)
|
|
64
|
-
.reduce((sum, section) => sum + section.filled, 0);
|
|
65
|
-
score.originalSlots.filled = totalFilled;
|
|
66
|
-
score.originalSlots.percentage = Math.round((totalFilled / 21) * 100);
|
|
67
|
-
// Calculate the human-achievable score (max 99%)
|
|
68
|
-
let humanScore = Math.min(99, score.originalSlots.percentage);
|
|
69
|
-
// Apply quality modifiers (can reduce but not exceed 99)
|
|
70
|
-
humanScore = this.applyQualityModifiers(humanScore, fafData, score);
|
|
71
|
-
// Set the score (max 99 for humans)
|
|
72
|
-
score.score = Math.min(99, humanScore);
|
|
73
|
-
// Evaluate excellence indicators
|
|
74
|
-
score.excellence.contextComplete = totalFilled === 21;
|
|
75
|
-
score.excellence.autoDetectable = score.score >= this.PHILOSOPHY.AUTO_THRESHOLD;
|
|
76
|
-
score.excellence.championshipGrade = score.score >= this.PHILOSOPHY.EXCELLENCE_THRESHOLD;
|
|
77
|
-
score.excellence.bestPractices = this.checkBestPractices(fafData);
|
|
78
|
-
// Generate improvements based on score
|
|
79
|
-
this.generateImprovements(score, fafData);
|
|
80
|
-
// The Final 1% - Only if requested and score is 99
|
|
81
|
-
if (options?.requestAiValidation && score.score === 99) {
|
|
82
|
-
score.aiValidation = await this.requestAiValidation(fafData);
|
|
83
|
-
if (score.aiValidation?.bestPracticeScore === 1) {
|
|
84
|
-
score.score = 100; // The only way to achieve 100%
|
|
85
|
-
score.philosophy = "100% Achieved - AI-validated championship perfection!";
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
return score;
|
|
89
|
-
}
|
|
90
|
-
/**
|
|
91
|
-
* Score Project Identity (3 slots)
|
|
92
|
-
*/
|
|
93
|
-
static scoreProjectIdentity(fafData) {
|
|
94
|
-
const section = {
|
|
95
|
-
name: 'Project Identity',
|
|
96
|
-
filled: 0,
|
|
97
|
-
total: 3,
|
|
98
|
-
percentage: 0,
|
|
99
|
-
missing: []
|
|
100
|
-
};
|
|
101
|
-
// Check the 3 identity slots
|
|
102
|
-
if (fafData.project?.name)
|
|
103
|
-
section.filled++;
|
|
104
|
-
else
|
|
105
|
-
section.missing.push('project.name');
|
|
106
|
-
if (fafData.project?.goal)
|
|
107
|
-
section.filled++;
|
|
108
|
-
else
|
|
109
|
-
section.missing.push('project.goal');
|
|
110
|
-
if (fafData.project?.main_language &&
|
|
111
|
-
fafData.project.main_language !== 'Unknown')
|
|
112
|
-
section.filled++;
|
|
113
|
-
else
|
|
114
|
-
section.missing.push('project.main_language');
|
|
115
|
-
section.percentage = Math.round((section.filled / section.total) * 100);
|
|
116
|
-
return section;
|
|
117
|
-
}
|
|
118
|
-
/**
|
|
119
|
-
* Score Stack Architecture (6 slots from Original 21)
|
|
120
|
-
*/
|
|
121
|
-
static scoreStackArchitecture(fafData) {
|
|
122
|
-
const section = {
|
|
123
|
-
name: 'Stack Architecture',
|
|
124
|
-
filled: 0,
|
|
125
|
-
total: 6,
|
|
126
|
-
percentage: 0,
|
|
127
|
-
missing: []
|
|
128
|
-
};
|
|
129
|
-
// The Original 6 stack slots (not the extended 12+)
|
|
130
|
-
const original6 = ['frontend', 'backend', 'runtime', 'build', 'package_manager', 'api_type'];
|
|
131
|
-
original6.forEach(field => {
|
|
132
|
-
if (fafData.stack?.[field] &&
|
|
133
|
-
fafData.stack[field] !== 'None' &&
|
|
134
|
-
fafData.stack[field] !== 'Unknown') {
|
|
135
|
-
section.filled++;
|
|
136
|
-
}
|
|
137
|
-
else {
|
|
138
|
-
section.missing.push(`stack.${field}`);
|
|
139
|
-
}
|
|
140
|
-
});
|
|
141
|
-
section.percentage = Math.round((section.filled / section.total) * 100);
|
|
142
|
-
return section;
|
|
143
|
-
}
|
|
144
|
-
/**
|
|
145
|
-
* Score Performance Metrics (3 slots)
|
|
146
|
-
*/
|
|
147
|
-
static scorePerformanceMetrics(fafData) {
|
|
148
|
-
const section = {
|
|
149
|
-
name: 'Performance Metrics',
|
|
150
|
-
filled: 0,
|
|
151
|
-
total: 3,
|
|
152
|
-
percentage: 0,
|
|
153
|
-
missing: []
|
|
154
|
-
};
|
|
155
|
-
if (fafData.scores?.foundation > 0)
|
|
156
|
-
section.filled++;
|
|
157
|
-
else
|
|
158
|
-
section.missing.push('scores.foundation');
|
|
159
|
-
if (fafData.scores?.architecture > 0)
|
|
160
|
-
section.filled++;
|
|
161
|
-
else
|
|
162
|
-
section.missing.push('scores.architecture');
|
|
163
|
-
if (fafData.scores?.deployment > 0)
|
|
164
|
-
section.filled++;
|
|
165
|
-
else
|
|
166
|
-
section.missing.push('scores.deployment');
|
|
167
|
-
section.percentage = Math.round((section.filled / section.total) * 100);
|
|
168
|
-
return section;
|
|
169
|
-
}
|
|
170
|
-
/**
|
|
171
|
-
* Score AI Context (3 slots)
|
|
172
|
-
*/
|
|
173
|
-
static scoreAiContext(fafData) {
|
|
174
|
-
const section = {
|
|
175
|
-
name: 'AI Context',
|
|
176
|
-
filled: 0,
|
|
177
|
-
total: 3,
|
|
178
|
-
percentage: 0,
|
|
179
|
-
missing: []
|
|
180
|
-
};
|
|
181
|
-
if (fafData.ai?.context_file)
|
|
182
|
-
section.filled++;
|
|
183
|
-
else
|
|
184
|
-
section.missing.push('ai.context_file');
|
|
185
|
-
if (fafData.preferences?.quality_bar)
|
|
186
|
-
section.filled++;
|
|
187
|
-
else
|
|
188
|
-
section.missing.push('preferences.quality_bar');
|
|
189
|
-
if (fafData.state?.phase)
|
|
190
|
-
section.filled++;
|
|
191
|
-
else
|
|
192
|
-
section.missing.push('state.phase');
|
|
193
|
-
section.percentage = Math.round((section.filled / section.total) * 100);
|
|
194
|
-
return section;
|
|
195
|
-
}
|
|
196
|
-
/**
|
|
197
|
-
* Score Human Context (The 6 W's)
|
|
198
|
-
*/
|
|
199
|
-
static scoreHumanContext(fafData) {
|
|
200
|
-
const section = {
|
|
201
|
-
name: 'Human Context (6 Ws)',
|
|
202
|
-
filled: 0,
|
|
203
|
-
total: 6,
|
|
204
|
-
percentage: 0,
|
|
205
|
-
missing: []
|
|
206
|
-
};
|
|
207
|
-
const sixWs = ['who', 'what', 'why', 'where', 'when', 'how'];
|
|
208
|
-
sixWs.forEach(w => {
|
|
209
|
-
const value = fafData.human_context?.[w];
|
|
210
|
-
if (value && value !== 'Not specified' &&
|
|
211
|
-
(typeof value === 'string' || typeof value === 'object')) {
|
|
212
|
-
section.filled++;
|
|
213
|
-
}
|
|
214
|
-
else {
|
|
215
|
-
section.missing.push(`human_context.${w} (${w.toUpperCase()})`);
|
|
216
|
-
}
|
|
217
|
-
});
|
|
218
|
-
section.percentage = Math.round((section.filled / section.total) * 100);
|
|
219
|
-
return section;
|
|
220
|
-
}
|
|
221
|
-
/**
|
|
222
|
-
* Apply quality modifiers that can reduce score
|
|
223
|
-
*/
|
|
224
|
-
static applyQualityModifiers(baseScore, fafData, score) {
|
|
225
|
-
let modifiedScore = baseScore;
|
|
226
|
-
// Penalty for stale timestamp (over 30 days old)
|
|
227
|
-
if (fafData.generated || fafData.project?.generated) {
|
|
228
|
-
const generated = new Date(fafData.generated || fafData.project?.generated);
|
|
229
|
-
const daysSinceGenerated = (Date.now() - generated.getTime()) / (1000 * 60 * 60 * 24);
|
|
230
|
-
if (daysSinceGenerated > 30) {
|
|
231
|
-
modifiedScore -= 5;
|
|
232
|
-
score.improvements.recommended.push('Update .faf file (over 30 days old)');
|
|
233
|
-
}
|
|
234
|
-
}
|
|
235
|
-
// Penalty for no AI instructions (important for AI context)
|
|
236
|
-
if (!fafData.ai_instructions && modifiedScore > 70) {
|
|
237
|
-
modifiedScore -= 3;
|
|
238
|
-
score.improvements.recommended.push('Add ai_instructions for better AI collaboration');
|
|
239
|
-
}
|
|
240
|
-
// Bonus for having TURBO-CAT discovery data
|
|
241
|
-
if (fafData.turbo_cat?.discovered_formats?.length > 50) {
|
|
242
|
-
modifiedScore = Math.min(99, modifiedScore + 2);
|
|
243
|
-
}
|
|
244
|
-
return Math.max(0, modifiedScore);
|
|
245
|
-
}
|
|
246
|
-
/**
|
|
247
|
-
* Check if project follows best practices
|
|
248
|
-
*/
|
|
249
|
-
static checkBestPractices(fafData) {
|
|
250
|
-
const practices = [
|
|
251
|
-
fafData.preferences?.quality_bar === 'zero_errors',
|
|
252
|
-
fafData.preferences?.testing === 'required',
|
|
253
|
-
fafData.state?.phase !== undefined,
|
|
254
|
-
fafData.ai?.context_file === 'CLAUDE.md',
|
|
255
|
-
fafData.project?.main_language !== 'Unknown',
|
|
256
|
-
];
|
|
257
|
-
const followedCount = practices.filter(p => p).length;
|
|
258
|
-
return followedCount >= 4; // At least 4/5 best practices
|
|
259
|
-
}
|
|
260
|
-
/**
|
|
261
|
-
* Generate improvement suggestions based on score
|
|
262
|
-
*/
|
|
263
|
-
static generateImprovements(score, fafData) {
|
|
264
|
-
// Critical improvements (blocking 70%+)
|
|
265
|
-
if (score.score < 70) {
|
|
266
|
-
if (score.sections.projectIdentity.filled < 2) {
|
|
267
|
-
score.improvements.critical.push('Define project identity (name, goal, language)');
|
|
268
|
-
}
|
|
269
|
-
if (score.sections.humanContext.filled < 3) {
|
|
270
|
-
score.improvements.critical.push('Add human context (WHO, WHAT, WHY minimum)');
|
|
271
|
-
}
|
|
272
|
-
if (score.sections.stackArchitecture.filled < 3) {
|
|
273
|
-
score.improvements.critical.push('Specify tech stack (frontend, backend, build minimum)');
|
|
274
|
-
}
|
|
275
|
-
}
|
|
276
|
-
// Recommended improvements (blocking 90%+)
|
|
277
|
-
if (score.score < 90) {
|
|
278
|
-
score.sections.humanContext.missing.forEach(field => {
|
|
279
|
-
score.improvements.recommended.push(`Add ${field}`);
|
|
280
|
-
});
|
|
281
|
-
if (!fafData.ai_instructions) {
|
|
282
|
-
score.improvements.recommended.push('Add AI instructions for optimal collaboration');
|
|
283
|
-
}
|
|
284
|
-
}
|
|
285
|
-
// Optional improvements (the pursuit of 99%)
|
|
286
|
-
if (score.score < 99) {
|
|
287
|
-
if (!fafData.preferences?.commit_style) {
|
|
288
|
-
score.improvements.optional.push('Define commit style preference');
|
|
289
|
-
}
|
|
290
|
-
if (!fafData.state?.next_milestone) {
|
|
291
|
-
score.improvements.optional.push('Set next milestone');
|
|
292
|
-
}
|
|
293
|
-
// Only suggest the truly optional extended fields
|
|
294
|
-
if (score.originalSlots.filled === 21) {
|
|
295
|
-
score.improvements.optional.push('All 21 slots filled! Consider adding extended context');
|
|
296
|
-
}
|
|
297
|
-
}
|
|
298
|
-
}
|
|
299
|
-
/**
|
|
300
|
-
* Request AI validation for the final 1%
|
|
301
|
-
* This is where AI judges if the project meets best practices
|
|
302
|
-
*/
|
|
303
|
-
static async requestAiValidation(fafData) {
|
|
304
|
-
// In a real implementation, this would call an AI service
|
|
305
|
-
// For now, we'll simulate the validation logic
|
|
306
|
-
const validation = {
|
|
307
|
-
assessed: true,
|
|
308
|
-
bestPracticeScore: 0,
|
|
309
|
-
reasoning: '',
|
|
310
|
-
timestamp: new Date().toISOString()
|
|
311
|
-
};
|
|
312
|
-
// AI checks for championship-grade patterns
|
|
313
|
-
const checks = {
|
|
314
|
-
hasZeroErrors: fafData.preferences?.quality_bar === 'zero_errors',
|
|
315
|
-
hasRequiredTesting: fafData.preferences?.testing === 'required',
|
|
316
|
-
hasClaudeContext: fafData.ai?.context_file === 'CLAUDE.md',
|
|
317
|
-
hasClearGoal: fafData.project?.goal?.length > 20,
|
|
318
|
-
hasCompleteDocs: fafData.human_context?.what && fafData.human_context?.why,
|
|
319
|
-
followsConventions: fafData.preferences?.commit_style !== undefined,
|
|
320
|
-
hasProperStructure: fafData.state?.phase !== undefined,
|
|
321
|
-
};
|
|
322
|
-
const passedChecks = Object.values(checks).filter(c => c).length;
|
|
323
|
-
const totalChecks = Object.keys(checks).length;
|
|
324
|
-
// AI grants the 1% only for true excellence
|
|
325
|
-
if (passedChecks === totalChecks) {
|
|
326
|
-
validation.bestPracticeScore = 1;
|
|
327
|
-
validation.reasoning = "Championship-grade project meeting all best practices. The final 1% granted.";
|
|
328
|
-
}
|
|
329
|
-
else {
|
|
330
|
-
validation.bestPracticeScore = passedChecks / totalChecks;
|
|
331
|
-
validation.reasoning = `Good project, but not quite championship grade. ${passedChecks}/${totalChecks} best practices met.`;
|
|
332
|
-
}
|
|
333
|
-
return validation;
|
|
334
|
-
}
|
|
335
|
-
/**
|
|
336
|
-
* The 99% Philosophy Summary
|
|
337
|
-
*/
|
|
338
|
-
static getPhilosophy() {
|
|
339
|
-
return `
|
|
340
|
-
🏆 THE 99% PHILOSOPHY
|
|
341
|
-
|
|
342
|
-
"My race-strategy in-fact design-for-life is 99% -
|
|
343
|
-
the last 1% is the futile pursuit of perfection which defies definition.
|
|
344
|
-
I gave the 1% to Claude to fathom."
|
|
345
|
-
|
|
346
|
-
SCORING REALITY:
|
|
347
|
-
• 0-29% = Needs work
|
|
348
|
-
• 30-49% = Getting there
|
|
349
|
-
• 50-69% = Solid foundation
|
|
350
|
-
• 70-89% = Good project
|
|
351
|
-
• 90-98% = Excellent project
|
|
352
|
-
• 99% = Maximum human achievement
|
|
353
|
-
• 100% = AI-validated perfection (rare)
|
|
354
|
-
|
|
355
|
-
REMEMBER:
|
|
356
|
-
- Don't chase undefined perfection
|
|
357
|
-
- Build excellence you can measure
|
|
358
|
-
- Ship at 99% and move to the next
|
|
359
|
-
- Let AI ponder the philosophical 1%
|
|
360
|
-
|
|
361
|
-
"One man's perfection is 1000 others' imperfection"
|
|
362
|
-
|
|
363
|
-
FAF: Built to measure a million projects with wisdom.
|
|
364
|
-
.faf is inevitable - excellence is achievable.
|
|
365
|
-
`;
|
|
366
|
-
}
|
|
367
|
-
}
|
|
368
|
-
exports.ChampionshipScorer = ChampionshipScorer;
|
|
369
|
-
/**
|
|
370
|
-
* Export the main scoring function for compatibility
|
|
371
|
-
*/
|
|
372
|
-
async function calculateChampionshipScore(fafData, projectPath, requestAiValidation) {
|
|
373
|
-
return ChampionshipScorer.score(fafData, {
|
|
374
|
-
projectPath,
|
|
375
|
-
requestAiValidation
|
|
376
|
-
});
|
|
377
|
-
}
|
|
378
|
-
// Export for backwards compatibility
|
|
379
|
-
exports.default = ChampionshipScorer;
|
|
380
|
-
//# sourceMappingURL=championship-scorer.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"championship-scorer.js","sourceRoot":"","sources":["../../src/scoring/championship-scorer.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 📊 .faf Scoring Calculator
|
|
3
|
-
* Championship scoring with FAB-FORMATS Power Unit
|
|
4
|
-
* 150+ file handlers delivering 86%+ scores!
|
|
5
|
-
*/
|
|
6
|
-
export interface SectionScore {
|
|
7
|
-
percentage: number;
|
|
8
|
-
filled: number;
|
|
9
|
-
total: number;
|
|
10
|
-
missing: string[];
|
|
11
|
-
}
|
|
12
|
-
export interface ScoreResult {
|
|
13
|
-
totalScore: number;
|
|
14
|
-
filledSlots: number;
|
|
15
|
-
totalSlots: number;
|
|
16
|
-
sectionScores: Record<string, SectionScore>;
|
|
17
|
-
suggestions: string[];
|
|
18
|
-
qualityIndicators: {
|
|
19
|
-
hasAiInstructions: boolean;
|
|
20
|
-
hasHumanContext: boolean;
|
|
21
|
-
hasFreshTimestamp: boolean;
|
|
22
|
-
hasQualityPreferences: boolean;
|
|
23
|
-
};
|
|
24
|
-
}
|
|
25
|
-
/**
|
|
26
|
-
* Calculate .faf score for v2.5.0 nested_snake format with fab-formats discovery
|
|
27
|
-
*/
|
|
28
|
-
export declare function calculateFafScore(fafData: any, projectPath?: string): Promise<ScoreResult>;
|
|
29
|
-
//# sourceMappingURL=score-calculator.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"score-calculator.d.ts","sourceRoot":"","sources":["../../src/scoring/score-calculator.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAC5C,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,iBAAiB,EAAE;QACjB,iBAAiB,EAAE,OAAO,CAAC;QAC3B,eAAe,EAAE,OAAO,CAAC;QACzB,iBAAiB,EAAE,OAAO,CAAC;QAC3B,qBAAqB,EAAE,OAAO,CAAC;KAChC,CAAC;CACH;AAUD;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,GAAG,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CA2QhG"}
|