fraim-framework 2.0.63 → 2.0.65

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.
Files changed (106) hide show
  1. package/bin/fraim-mcp.js +52 -19
  2. package/bin/fraim.js +23 -0
  3. package/dist/src/cli/commands/add-ide.js +53 -14
  4. package/dist/src/cli/commands/doctor.js +12 -24
  5. package/dist/src/cli/commands/init-project.js +0 -3
  6. package/dist/src/cli/commands/init.js +0 -2
  7. package/dist/src/cli/commands/mcp.js +65 -0
  8. package/dist/src/cli/commands/setup.js +17 -1
  9. package/dist/src/cli/commands/sync.js +173 -104
  10. package/dist/src/cli/setup/auto-mcp-setup.js +6 -4
  11. package/dist/src/cli/setup/mcp-config-generator.js +65 -41
  12. package/dist/src/fraim/issue-tracking/ado-provider.js +304 -0
  13. package/dist/src/fraim/issue-tracking/factory.js +63 -0
  14. package/dist/src/fraim/issue-tracking/github-provider.js +200 -0
  15. package/dist/src/fraim/issue-tracking/types.js +7 -0
  16. package/dist/src/fraim/issue-tracking-config.js +83 -0
  17. package/dist/src/local-mcp-server/stdio-server.js +91 -15
  18. package/dist/src/utils/remote-sync.js +130 -0
  19. package/package.json +3 -4
  20. package/dist/src/utils/enforcement-utils.js +0 -239
  21. package/dist/src/utils/validate-workflows.js +0 -101
  22. package/registry/scripts/cleanup-branch.ts +0 -341
  23. package/registry/scripts/code-quality-check.sh +0 -566
  24. package/registry/scripts/comprehensive-explorer.py +0 -297
  25. package/registry/scripts/create-git-labels.sh +0 -49
  26. package/registry/scripts/create-website-structure.js +0 -562
  27. package/registry/scripts/detect-tautological-tests.sh +0 -38
  28. package/registry/scripts/evaluate-code-quality.ts +0 -36
  29. package/registry/scripts/exec-with-timeout.ts +0 -122
  30. package/registry/scripts/generate-engagement-emails.ts +0 -830
  31. package/registry/scripts/interactive-explorer.py +0 -270
  32. package/registry/scripts/markdown-to-pdf.js +0 -395
  33. package/registry/scripts/newsletter-helpers.ts +0 -777
  34. package/registry/scripts/pdf-styles.css +0 -172
  35. package/registry/scripts/prep-issue.sh +0 -548
  36. package/registry/scripts/productivity/build-productivity-csv.mjs +0 -242
  37. package/registry/scripts/productivity/fetch-pr-details.mjs +0 -144
  38. package/registry/scripts/productivity/productivity-report.sh +0 -147
  39. package/registry/scripts/profile-server.ts +0 -426
  40. package/registry/scripts/run-thank-you-workflow.ts +0 -122
  41. package/registry/scripts/scrape-site.py +0 -302
  42. package/registry/scripts/send-newsletter-simple.ts +0 -102
  43. package/registry/scripts/send-thank-you-emails.ts +0 -57
  44. package/registry/scripts/validate-openapi-limits.ts +0 -366
  45. package/registry/scripts/validate-test-coverage.ts +0 -280
  46. package/registry/scripts/verify-pr-comments.sh +0 -74
  47. package/registry/scripts/verify-test-coverage.ts +0 -36
  48. package/registry/stubs/workflows/bootstrap/create-architecture.md +0 -11
  49. package/registry/stubs/workflows/bootstrap/detect-broken-windows.md +0 -11
  50. package/registry/stubs/workflows/bootstrap/evaluate-code-quality.md +0 -11
  51. package/registry/stubs/workflows/bootstrap/verify-test-coverage.md +0 -11
  52. package/registry/stubs/workflows/brainstorming/blue-sky-brainstorming.md +0 -11
  53. package/registry/stubs/workflows/brainstorming/codebase-brainstorming.md +0 -11
  54. package/registry/stubs/workflows/business-development/create-business-plan.md +0 -11
  55. package/registry/stubs/workflows/business-development/ideate-business-opportunity.md +0 -11
  56. package/registry/stubs/workflows/business-development/price-product.md +0 -18
  57. package/registry/stubs/workflows/compliance/detect-compliance-requirements.md +0 -11
  58. package/registry/stubs/workflows/compliance/generate-audit-evidence.md +0 -11
  59. package/registry/stubs/workflows/compliance/soc2-evidence-generator.md +0 -11
  60. package/registry/stubs/workflows/customer-development/insight-analysis.md +0 -11
  61. package/registry/stubs/workflows/customer-development/insight-triage.md +0 -11
  62. package/registry/stubs/workflows/customer-development/interview-preparation.md +0 -11
  63. package/registry/stubs/workflows/customer-development/linkedin-outreach.md +0 -11
  64. package/registry/stubs/workflows/customer-development/strategic-brainstorming.md +0 -11
  65. package/registry/stubs/workflows/customer-development/thank-customers.md +0 -11
  66. package/registry/stubs/workflows/customer-development/user-survey-dispatch.md +0 -11
  67. package/registry/stubs/workflows/customer-development/users-to-target.md +0 -11
  68. package/registry/stubs/workflows/customer-development/weekly-newsletter.md +0 -11
  69. package/registry/stubs/workflows/deploy/cloud-deployment.md +0 -11
  70. package/registry/stubs/workflows/improve-fraim/contribute.md +0 -11
  71. package/registry/stubs/workflows/improve-fraim/file-issue.md +0 -11
  72. package/registry/stubs/workflows/learning/build-skillset.md +0 -11
  73. package/registry/stubs/workflows/learning/synthesize-learnings.md +0 -11
  74. package/registry/stubs/workflows/legal/contract-review-analysis.md +0 -11
  75. package/registry/stubs/workflows/legal/nda.md +0 -11
  76. package/registry/stubs/workflows/legal/patent-filing.md +0 -11
  77. package/registry/stubs/workflows/legal/saas-contract-development.md +0 -11
  78. package/registry/stubs/workflows/legal/trademark-filing.md +0 -11
  79. package/registry/stubs/workflows/marketing/content-creation.md +0 -11
  80. package/registry/stubs/workflows/marketing/convert-to-pdf.md +0 -11
  81. package/registry/stubs/workflows/marketing/create-modern-website.md +0 -11
  82. package/registry/stubs/workflows/marketing/domain-registration.md +0 -11
  83. package/registry/stubs/workflows/marketing/hbr-article.md +0 -11
  84. package/registry/stubs/workflows/marketing/launch-checklist.md +0 -11
  85. package/registry/stubs/workflows/marketing/marketing-strategy.md +0 -11
  86. package/registry/stubs/workflows/marketing/storytelling.md +0 -11
  87. package/registry/stubs/workflows/performance/analyze-performance.md +0 -11
  88. package/registry/stubs/workflows/product-building/design.md +0 -11
  89. package/registry/stubs/workflows/product-building/implement.md +0 -11
  90. package/registry/stubs/workflows/product-building/iterate-on-pr-comments.md +0 -11
  91. package/registry/stubs/workflows/product-building/prep-issue.md +0 -11
  92. package/registry/stubs/workflows/product-building/prototype.md +0 -11
  93. package/registry/stubs/workflows/product-building/resolve.md +0 -11
  94. package/registry/stubs/workflows/product-building/retrospect.md +0 -11
  95. package/registry/stubs/workflows/product-building/spec.md +0 -11
  96. package/registry/stubs/workflows/product-building/test.md +0 -11
  97. package/registry/stubs/workflows/productivity-report/productivity-report.md +0 -11
  98. package/registry/stubs/workflows/quality-assurance/browser-validation.md +0 -11
  99. package/registry/stubs/workflows/quality-assurance/iterative-improvement-cycle.md +0 -11
  100. package/registry/stubs/workflows/replicate/replicate-discovery.md +0 -11
  101. package/registry/stubs/workflows/replicate/replicate-to-issues.md +0 -11
  102. package/registry/stubs/workflows/reviewer/review-implementation-vs-design-spec.md +0 -11
  103. package/registry/stubs/workflows/reviewer/review-implementation-vs-feature-spec.md +0 -11
  104. package/registry/stubs/workflows/startup-credits/aws-activate-application.md +0 -11
  105. package/registry/stubs/workflows/startup-credits/google-cloud-application.md +0 -11
  106. package/registry/stubs/workflows/startup-credits/microsoft-azure-application.md +0 -11
@@ -1,562 +0,0 @@
1
- #!/usr/bin/env node
2
-
3
- /**
4
- * Website Structure Creator
5
- *
6
- * This script creates the basic file structure for a modern website project
7
- * following the FRAIM website creation workflow.
8
- */
9
-
10
- const fs = require('fs');
11
- const path = require('path');
12
-
13
- // Read configuration from .fraim/config.json if available
14
- function loadConfig() {
15
- const configPath = path.join(process.cwd(), '.fraim', 'config.json');
16
- if (fs.existsSync(configPath)) {
17
- try {
18
- return JSON.parse(fs.readFileSync(configPath, 'utf8'));
19
- } catch (error) {
20
- console.warn('Warning: Could not parse .fraim/config.json, using defaults');
21
- return {};
22
- }
23
- }
24
- return {};
25
- }
26
-
27
- function createWebsiteStructure(projectName, outputDir = process.cwd()) {
28
- const websiteDir = path.join(outputDir, projectName);
29
-
30
- // Create main directory
31
- if (!fs.existsSync(websiteDir)) {
32
- fs.mkdirSync(websiteDir, { recursive: true });
33
- }
34
-
35
- // Create subdirectories
36
- const dirs = [
37
- 'assets',
38
- 'assets/images',
39
- 'assets/icons',
40
- 'css',
41
- 'js',
42
- 'docs'
43
- ];
44
-
45
- dirs.forEach(dir => {
46
- const dirPath = path.join(websiteDir, dir);
47
- if (!fs.existsSync(dirPath)) {
48
- fs.mkdirSync(dirPath, { recursive: true });
49
- }
50
- });
51
-
52
- // Create basic HTML structure
53
- const indexHtml = `<!DOCTYPE html>
54
- <html lang="en">
55
- <head>
56
- <meta charset="UTF-8">
57
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
58
- <title>${projectName} - Modern Web Experience</title>
59
- <meta name="description" content="Modern, responsive website for ${projectName}">
60
- <link rel="stylesheet" href="css/styles.css">
61
- </head>
62
- <body>
63
- <!-- Navigation -->
64
- <nav class="nav">
65
- <div class="nav-container">
66
- <div class="nav-logo">
67
- <span class="logo-text">${projectName}</span>
68
- </div>
69
- <div class="nav-links">
70
- <a href="#features">Features</a>
71
- <a href="#about">About</a>
72
- <a href="#contact">Contact</a>
73
- <button class="theme-toggle" id="theme-toggle" aria-label="Toggle dark mode">
74
- <span class="theme-icon">šŸŒ™</span>
75
- </button>
76
- </div>
77
- </div>
78
- </nav>
79
-
80
- <!-- Hero Section -->
81
- <section class="hero">
82
- <div class="hero-container">
83
- <h1 class="hero-title">
84
- Welcome to <span class="gradient-text">${projectName}</span>
85
- </h1>
86
- <p class="hero-subtitle">
87
- Your modern web experience starts here. Built with performance, accessibility, and user experience in mind.
88
- </p>
89
- <div class="hero-cta">
90
- <a href="#get-started" class="btn-primary">Get Started</a>
91
- <a href="#learn-more" class="btn-secondary">Learn More</a>
92
- </div>
93
- </div>
94
- </section>
95
-
96
- <!-- Features Section -->
97
- <section id="features" class="features">
98
- <div class="container">
99
- <h2 class="section-title">Key Features</h2>
100
- <div class="features-grid">
101
- <div class="feature-card">
102
- <div class="feature-icon">⚔</div>
103
- <h3>Fast Performance</h3>
104
- <p>Optimized for speed and efficiency</p>
105
- </div>
106
- <div class="feature-card">
107
- <div class="feature-icon">šŸ“±</div>
108
- <h3>Mobile Responsive</h3>
109
- <p>Perfect experience on all devices</p>
110
- </div>
111
- <div class="feature-card">
112
- <div class="feature-icon">šŸŽØ</div>
113
- <h3>Modern Design</h3>
114
- <p>Beautiful, contemporary interface</p>
115
- </div>
116
- </div>
117
- </div>
118
- </section>
119
-
120
- <script src="js/script.js"></script>
121
- </body>
122
- </html>`;
123
-
124
- // Create basic CSS with CSS variables for theming
125
- const stylesCSS = `/* CSS Variables for theming */
126
- :root {
127
- --bg-primary: #ffffff;
128
- --bg-secondary: #f8fafc;
129
- --text-primary: #1a1a1a;
130
- --text-secondary: #666666;
131
- --accent-color: #6366f1;
132
- --border-color: #e5e5e5;
133
- }
134
-
135
- [data-theme="dark"] {
136
- --bg-primary: #0f172a;
137
- --bg-secondary: #1e293b;
138
- --text-primary: #f8fafc;
139
- --text-secondary: #cbd5e1;
140
- --border-color: #334155;
141
- }
142
-
143
- /* Reset and base styles */
144
- * {
145
- margin: 0;
146
- padding: 0;
147
- box-sizing: border-box;
148
- }
149
-
150
- body {
151
- font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
152
- line-height: 1.6;
153
- color: var(--text-primary);
154
- background: var(--bg-primary);
155
- transition: background-color 0.3s ease, color 0.3s ease;
156
- }
157
-
158
- .container {
159
- max-width: 1200px;
160
- margin: 0 auto;
161
- padding: 0 24px;
162
- }
163
-
164
- /* Navigation */
165
- .nav {
166
- position: fixed;
167
- top: 0;
168
- width: 100%;
169
- background: rgba(255, 255, 255, 0.95);
170
- backdrop-filter: blur(10px);
171
- border-bottom: 1px solid var(--border-color);
172
- z-index: 1000;
173
- }
174
-
175
- .nav-container {
176
- max-width: 1200px;
177
- margin: 0 auto;
178
- padding: 0 24px;
179
- display: flex;
180
- justify-content: space-between;
181
- align-items: center;
182
- height: 64px;
183
- }
184
-
185
- .nav-links {
186
- display: flex;
187
- align-items: center;
188
- gap: 32px;
189
- }
190
-
191
- .nav-links a {
192
- text-decoration: none;
193
- color: var(--text-secondary);
194
- font-weight: 500;
195
- transition: color 0.2s;
196
- }
197
-
198
- .nav-links a:hover {
199
- color: var(--text-primary);
200
- }
201
-
202
- .theme-toggle {
203
- background: none;
204
- border: 2px solid var(--border-color);
205
- border-radius: 8px;
206
- padding: 8px 12px;
207
- cursor: pointer;
208
- transition: all 0.2s ease;
209
- }
210
-
211
- .theme-toggle:hover {
212
- border-color: var(--accent-color);
213
- }
214
-
215
- /* Hero Section */
216
- .hero {
217
- padding: 120px 0 80px;
218
- background: linear-gradient(135deg, var(--bg-secondary) 0%, var(--bg-primary) 100%);
219
- text-align: center;
220
- }
221
-
222
- .hero-title {
223
- font-size: 56px;
224
- font-weight: 700;
225
- margin-bottom: 24px;
226
- }
227
-
228
- .gradient-text {
229
- background: linear-gradient(135deg, var(--accent-color) 0%, #8b5cf6 100%);
230
- -webkit-background-clip: text;
231
- -webkit-text-fill-color: transparent;
232
- background-clip: text;
233
- }
234
-
235
- .hero-subtitle {
236
- font-size: 20px;
237
- color: var(--text-secondary);
238
- margin-bottom: 32px;
239
- max-width: 600px;
240
- margin-left: auto;
241
- margin-right: auto;
242
- }
243
-
244
- .hero-cta {
245
- display: flex;
246
- gap: 16px;
247
- justify-content: center;
248
- flex-wrap: wrap;
249
- }
250
-
251
- .btn-primary, .btn-secondary {
252
- padding: 12px 24px;
253
- border-radius: 8px;
254
- text-decoration: none;
255
- font-weight: 600;
256
- transition: all 0.2s;
257
- display: inline-block;
258
- }
259
-
260
- .btn-primary {
261
- background: var(--accent-color);
262
- color: white;
263
- }
264
-
265
- .btn-primary:hover {
266
- transform: translateY(-1px);
267
- box-shadow: 0 4px 12px rgba(99, 102, 241, 0.3);
268
- }
269
-
270
- .btn-secondary {
271
- background: transparent;
272
- color: var(--accent-color);
273
- border: 2px solid var(--accent-color);
274
- }
275
-
276
- .btn-secondary:hover {
277
- background: var(--accent-color);
278
- color: white;
279
- }
280
-
281
- /* Features Section */
282
- .features {
283
- padding: 80px 0;
284
- }
285
-
286
- .section-title {
287
- font-size: 40px;
288
- font-weight: 700;
289
- text-align: center;
290
- margin-bottom: 64px;
291
- }
292
-
293
- .features-grid {
294
- display: grid;
295
- grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
296
- gap: 32px;
297
- }
298
-
299
- .feature-card {
300
- background: var(--bg-secondary);
301
- padding: 32px;
302
- border-radius: 16px;
303
- text-align: center;
304
- transition: transform 0.2s;
305
- }
306
-
307
- .feature-card:hover {
308
- transform: translateY(-4px);
309
- }
310
-
311
- .feature-icon {
312
- font-size: 48px;
313
- margin-bottom: 16px;
314
- }
315
-
316
- .feature-card h3 {
317
- font-size: 24px;
318
- margin-bottom: 12px;
319
- }
320
-
321
- .feature-card p {
322
- color: var(--text-secondary);
323
- }
324
-
325
- /* Responsive Design */
326
- @media (max-width: 768px) {
327
- .hero-title {
328
- font-size: 40px;
329
- }
330
-
331
- .nav-links {
332
- gap: 16px;
333
- }
334
-
335
- .hero-cta {
336
- flex-direction: column;
337
- align-items: center;
338
- }
339
-
340
- .features-grid {
341
- grid-template-columns: 1fr;
342
- }
343
- }`;
344
-
345
- // Create basic JavaScript for theme toggle
346
- const scriptJS = `// Theme toggle functionality
347
- document.addEventListener('DOMContentLoaded', function() {
348
- const themeToggle = document.getElementById('theme-toggle');
349
- const themeIcon = themeToggle.querySelector('.theme-icon');
350
-
351
- // Check for saved theme preference or default to system preference
352
- const savedTheme = localStorage.getItem('theme');
353
- const systemPrefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches;
354
- const initialTheme = savedTheme || (systemPrefersDark ? 'dark' : 'light');
355
-
356
- // Apply initial theme
357
- document.documentElement.setAttribute('data-theme', initialTheme);
358
- updateThemeIcon(initialTheme);
359
-
360
- // Theme toggle event listener
361
- themeToggle.addEventListener('click', () => {
362
- const currentTheme = document.documentElement.getAttribute('data-theme');
363
- const newTheme = currentTheme === 'dark' ? 'light' : 'dark';
364
-
365
- document.documentElement.setAttribute('data-theme', newTheme);
366
- localStorage.setItem('theme', newTheme);
367
- updateThemeIcon(newTheme);
368
- });
369
-
370
- function updateThemeIcon(theme) {
371
- themeIcon.textContent = theme === 'dark' ? 'ā˜€ļø' : 'šŸŒ™';
372
- }
373
-
374
- // Listen for system theme changes
375
- window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', (e) => {
376
- if (!localStorage.getItem('theme')) {
377
- const newTheme = e.matches ? 'dark' : 'light';
378
- document.documentElement.setAttribute('data-theme', newTheme);
379
- updateThemeIcon(newTheme);
380
- }
381
- });
382
-
383
- // Smooth scrolling for navigation links
384
- const navLinks = document.querySelectorAll('a[href^="#"]');
385
- navLinks.forEach(link => {
386
- link.addEventListener('click', function(e) {
387
- e.preventDefault();
388
- const targetId = this.getAttribute('href');
389
- const targetSection = document.querySelector(targetId);
390
-
391
- if (targetSection) {
392
- const offsetTop = targetSection.offsetTop - 80; // Account for fixed nav
393
- window.scrollTo({
394
- top: offsetTop,
395
- behavior: 'smooth'
396
- });
397
- }
398
- });
399
- });
400
- });`;
401
-
402
- // Create README
403
- const readmeMD = `# ${projectName} Website
404
-
405
- Modern, responsive website built following FRAIM website creation workflow.
406
-
407
- ## Features
408
-
409
- - šŸŒ“ Dark/Light mode toggle with system preference detection
410
- - šŸ“± Fully responsive design
411
- - ⚔ Performance optimized
412
- - ♿ Accessibility focused
413
- - šŸŽØ Modern design with CSS variables
414
- - šŸš€ Ready for deployment
415
-
416
- ## Development
417
-
418
- ### Local Development
419
- 1. Open \`index.html\` in your browser
420
- 2. Or use a local server:
421
- \`\`\`bash
422
- # Python
423
- python -m http.server 8000
424
-
425
- # Node.js
426
- npx serve .
427
-
428
- # VS Code Live Server extension
429
- \`\`\`
430
-
431
- ### File Structure
432
- \`\`\`
433
- ${projectName}/
434
- ā”œā”€ā”€ index.html # Main page
435
- ā”œā”€ā”€ css/
436
- │ └── styles.css # Main stylesheet
437
- ā”œā”€ā”€ js/
438
- │ └── script.js # JavaScript functionality
439
- ā”œā”€ā”€ assets/
440
- │ ā”œā”€ā”€ images/ # Image assets
441
- │ └── icons/ # Icon assets
442
- └── docs/
443
- └── README.md # This file
444
- \`\`\`
445
-
446
- ## Customization
447
-
448
- ### Colors
449
- Edit CSS variables in \`css/styles.css\`:
450
- \`\`\`css
451
- :root {
452
- --bg-primary: #ffffff;
453
- --bg-secondary: #f8fafc;
454
- --text-primary: #1a1a1a;
455
- --text-secondary: #666666;
456
- --accent-color: #6366f1;
457
- --border-color: #e5e5e5;
458
- }
459
- \`\`\`
460
-
461
- ### Content
462
- - Update text content in \`index.html\`
463
- - Add images to \`assets/images/\`
464
- - Modify styles in \`css/styles.css\`
465
- - Add functionality in \`js/script.js\`
466
-
467
- ## Deployment
468
-
469
- ### GitHub Pages
470
- 1. Push to GitHub repository
471
- 2. Enable GitHub Pages in repository settings
472
- 3. Select "GitHub Actions" as source
473
-
474
- ### Netlify
475
- 1. Connect GitHub repository
476
- 2. Set build command: (none for static site)
477
- 3. Set publish directory: \`.\`
478
-
479
- ### Vercel
480
- 1. Import GitHub repository
481
- 2. Deploy with default settings
482
-
483
- ## Performance
484
-
485
- - Optimized CSS with minimal dependencies
486
- - Vanilla JavaScript (no heavy frameworks)
487
- - Responsive images
488
- - Efficient animations
489
-
490
- ## Browser Support
491
-
492
- - Chrome (latest 2 versions)
493
- - Firefox (latest 2 versions)
494
- - Safari (latest 2 versions)
495
- - Edge (latest 2 versions)
496
- - Mobile browsers
497
-
498
- ## License
499
-
500
- [Add your license here]
501
- `;
502
-
503
- // Write files
504
- fs.writeFileSync(path.join(websiteDir, 'index.html'), indexHtml);
505
- fs.writeFileSync(path.join(websiteDir, 'css', 'styles.css'), stylesCSS);
506
- fs.writeFileSync(path.join(websiteDir, 'js', 'script.js'), scriptJS);
507
- fs.writeFileSync(path.join(websiteDir, 'README.md'), readmeMD);
508
-
509
- // Create .gitignore
510
- const gitignore = `# Dependencies
511
- node_modules/
512
- npm-debug.log*
513
-
514
- # Build outputs
515
- dist/
516
- build/
517
-
518
- # Environment variables
519
- .env
520
- .env.local
521
-
522
- # IDE files
523
- .vscode/
524
- .idea/
525
- *.swp
526
- *.swo
527
-
528
- # OS files
529
- .DS_Store
530
- Thumbs.db
531
-
532
- # Logs
533
- *.log
534
- `;
535
- fs.writeFileSync(path.join(websiteDir, '.gitignore'), gitignore);
536
-
537
- console.log(`āœ… Website structure created successfully!`);
538
- console.log(`šŸ“ Project directory: ${websiteDir}`);
539
- console.log(`šŸš€ Next steps:`);
540
- console.log(` 1. cd ${projectName}`);
541
- console.log(` 2. Open index.html in your browser`);
542
- console.log(` 3. Start customizing your website!`);
543
- console.log(` 4. Follow the FRAIM website creation workflow for best practices`);
544
- }
545
-
546
- // CLI usage
547
- if (require.main === module) {
548
- const config = loadConfig();
549
- const args = process.argv.slice(2);
550
- const projectName = args[0];
551
- const outputDir = args[1] || process.cwd();
552
-
553
- if (!projectName) {
554
- console.log('Usage: node create-website-structure.js <project-name> [output-directory]');
555
- console.log('Example: node create-website-structure.js my-awesome-website');
556
- process.exit(1);
557
- }
558
-
559
- createWebsiteStructure(projectName, outputDir);
560
- }
561
-
562
- module.exports = { createWebsiteStructure };
@@ -1,38 +0,0 @@
1
- #!/bin/bash
2
-
3
- # Detect Tautological Tests
4
- # This script scans test files for patterns that suggest tests are validating code structure
5
- # (interfaces, enums) rather than runtime behavior.
6
-
7
- echo "šŸ” Scanning for Tautological Test Patterns..."
8
- ERROR_FOUND=0
9
-
10
- # Pattern 1: Asserting an array literal equals another array literal (common in enum testing)
11
- # Looks for: assert.deepEqual(['a', 'b'], ['a', 'b'])
12
- if grep -rE "assert\.(deep)?(Strict)?Equal\(\[.*\], \[.*\]\)" test*.ts; then
13
- echo "āŒ ERROR: Found potential tautological array comparison. Tests should verify app logic, not hardcoded arrays."
14
- echo " Rationale: Testing that ['A'] equals ['A'] validates nothing about the application."
15
- ERROR_FOUND=1
16
- fi
17
-
18
- # Pattern 2: Asserting properties on an object literal defined in the test (Type/Interface testing)
19
- # Simplified: Look for defining a typed object and immediately asserting on it in the same file
20
- # This is hard to do robustly with just grep, so we'll rely on the Naming Convention check for now.
21
-
22
- # Pattern 3: Test names that explicitly say "Validate Enums", "Validate Fields", etc.
23
- # We match "Validate TaskStatus Enums" or similar phrases
24
- if grep -riE "['\"]Unit: Validate (Enum|Constant|Interface|Type|Field|Object|TaskStatus|Task Object)" test*.ts; then
25
- echo "āŒ ERROR: Found test descriptions explicitly claiming to validate Enums/Types/Fields."
26
- echo " Rationale: Unit tests should validate BEHAVIOR (e.g., 'persists correct status'), not definitions."
27
- ERROR_FOUND=1
28
- fi
29
-
30
- if [ $ERROR_FOUND -eq 1 ]; then
31
- echo ""
32
- echo "āš ļø Potential Anti-Patterns Detected."
33
- echo " Please review the identified tests against rules/integrity-and-test-ethics.md"
34
- exit 1
35
- else
36
- echo "āœ… No obvious tautological patterns found."
37
- exit 0
38
- fi
@@ -1,36 +0,0 @@
1
- #!/usr/bin/env node
2
- /**
3
- * Code Quality Evaluator (Diagnostic Tool)
4
- *
5
- * Runs code quality checks and outputs results to the console.
6
- * Used by the evaluate-code-quality bootstrapping workflow.
7
- *
8
- * Usage: npx tsx <this-script>
9
- */
10
-
11
- import * as path from 'path';
12
- import { spawn } from 'child_process';
13
-
14
- const REGISTRY_SCRIPTS_DIR = __dirname;
15
- const QUALITY_CHECK_SCRIPT = path.join(REGISTRY_SCRIPTS_DIR, 'code-quality-check.sh');
16
-
17
- function evaluateQuality() {
18
- console.log('šŸš€ Starting Code Quality Evaluation...');
19
- console.log('šŸ“Š Running code-quality-check.sh...\n');
20
-
21
- // Run the existing quality check script and pipe output directly to terminal
22
- const child = spawn('bash', [QUALITY_CHECK_SCRIPT, 'pre-pr'], {
23
- stdio: 'inherit',
24
- shell: false
25
- });
26
-
27
- child.on('exit', (code) => {
28
- if (code === 0) {
29
- console.log('\nāœ… Code quality check completed successfully.');
30
- } else {
31
- console.log(`\nāŒ Code quality check failed with exit code ${code}.`);
32
- }
33
- });
34
- }
35
-
36
- evaluateQuality();