create-qa-architect 5.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/.editorconfig +12 -0
- package/.github/CLAUDE_MD_AUTOMATION.md +248 -0
- package/.github/PROGRESSIVE_QUALITY_IMPLEMENTATION.md +408 -0
- package/.github/PROGRESSIVE_QUALITY_PROPOSAL.md +443 -0
- package/.github/RELEASE_CHECKLIST.md +100 -0
- package/.github/dependabot.yml +50 -0
- package/.github/git-sync.sh +48 -0
- package/.github/workflows/claude-md-validation.yml +82 -0
- package/.github/workflows/nightly-gitleaks-verification.yml +176 -0
- package/.github/workflows/pnpm-ci.yml.example +53 -0
- package/.github/workflows/python-ci.yml.example +69 -0
- package/.github/workflows/quality-legacy.yml.backup +165 -0
- package/.github/workflows/quality-progressive.yml.example +291 -0
- package/.github/workflows/quality.yml +436 -0
- package/.github/workflows/release.yml +53 -0
- package/.nvmrc +1 -0
- package/.prettierignore +14 -0
- package/.prettierrc +9 -0
- package/.stylelintrc.json +5 -0
- package/README.md +212 -0
- package/config/.lighthouserc.js +45 -0
- package/config/.pre-commit-config.yaml +66 -0
- package/config/constants.js +128 -0
- package/config/defaults.js +124 -0
- package/config/pyproject.toml +124 -0
- package/config/quality-config.schema.json +97 -0
- package/config/quality-python.yml +89 -0
- package/config/requirements-dev.txt +15 -0
- package/create-saas-monetization.js +1465 -0
- package/eslint.config.cjs +117 -0
- package/eslint.config.ts.cjs +99 -0
- package/legal/README.md +106 -0
- package/legal/copyright.md +76 -0
- package/legal/disclaimer.md +146 -0
- package/legal/privacy-policy.html +324 -0
- package/legal/privacy-policy.md +196 -0
- package/legal/terms-of-service.md +224 -0
- package/lib/billing-dashboard.html +645 -0
- package/lib/config-validator.js +163 -0
- package/lib/dependency-monitoring-basic.js +185 -0
- package/lib/dependency-monitoring-premium.js +1490 -0
- package/lib/error-reporter.js +444 -0
- package/lib/interactive/prompt.js +128 -0
- package/lib/interactive/questions.js +146 -0
- package/lib/license-validator.js +403 -0
- package/lib/licensing.js +989 -0
- package/lib/package-utils.js +187 -0
- package/lib/project-maturity.js +516 -0
- package/lib/security-enhancements.js +340 -0
- package/lib/setup-enhancements.js +317 -0
- package/lib/smart-strategy-generator.js +344 -0
- package/lib/telemetry.js +323 -0
- package/lib/template-loader.js +252 -0
- package/lib/typescript-config-generator.js +210 -0
- package/lib/ui-helpers.js +74 -0
- package/lib/validation/base-validator.js +174 -0
- package/lib/validation/cache-manager.js +158 -0
- package/lib/validation/config-security.js +741 -0
- package/lib/validation/documentation.js +326 -0
- package/lib/validation/index.js +186 -0
- package/lib/validation/validation-factory.js +153 -0
- package/lib/validation/workflow-validation.js +172 -0
- package/lib/yaml-utils.js +120 -0
- package/marketing/beta-user-email-campaign.md +372 -0
- package/marketing/landing-page.html +721 -0
- package/package.json +165 -0
- package/setup.js +2076 -0
|
@@ -0,0 +1,443 @@
|
|
|
1
|
+
# Progressive Quality Automation - Design Proposal
|
|
2
|
+
|
|
3
|
+
## Problem Statement
|
|
4
|
+
|
|
5
|
+
Early-stage projects often fail CI/CD quality checks not because of code quality issues, but because project assets haven't been created yet:
|
|
6
|
+
|
|
7
|
+
- **ESLint** fails when there are no source files to lint
|
|
8
|
+
- **Test coverage** fails when test infrastructure doesn't exist
|
|
9
|
+
- **Documentation validation** fails when docs aren't written
|
|
10
|
+
- **Security audits** fail on empty `package.json` with no dependencies
|
|
11
|
+
- **Lighthouse CI** fails when no web assets exist
|
|
12
|
+
|
|
13
|
+
This creates noise, discourages adoption, and makes it unclear which failures are "real" vs. expected.
|
|
14
|
+
|
|
15
|
+
## Proposed Solution: Adaptive Quality Checks
|
|
16
|
+
|
|
17
|
+
### Strategy 1: Project Maturity Detection
|
|
18
|
+
|
|
19
|
+
Automatically detect project maturity level and adjust checks accordingly.
|
|
20
|
+
|
|
21
|
+
#### Maturity Levels
|
|
22
|
+
|
|
23
|
+
```javascript
|
|
24
|
+
{
|
|
25
|
+
"minimal": {
|
|
26
|
+
// Just package.json, maybe README
|
|
27
|
+
"indicators": ["package.json exists", "< 5 total files", "no src/ or lib/"],
|
|
28
|
+
"checks": ["prettier", "basic-lint"]
|
|
29
|
+
},
|
|
30
|
+
|
|
31
|
+
"bootstrap": {
|
|
32
|
+
// Has some source files, no tests yet
|
|
33
|
+
"indicators": ["src/ or lib/ exists", "< 3 source files", "no test files"],
|
|
34
|
+
"checks": ["prettier", "eslint", "stylelint", "format-check"]
|
|
35
|
+
},
|
|
36
|
+
|
|
37
|
+
"development": {
|
|
38
|
+
// Active development, has tests
|
|
39
|
+
"indicators": ["โฅ 3 source files", "test files exist", "has dependencies"],
|
|
40
|
+
"checks": ["all linting", "security-basic", "documentation-basic"]
|
|
41
|
+
},
|
|
42
|
+
|
|
43
|
+
"production-ready": {
|
|
44
|
+
// Full project with tests, docs, dependencies
|
|
45
|
+
"indicators": ["has tests", "has docs", "has CI config", "โฅ 10 source files"],
|
|
46
|
+
"checks": ["all checks enabled"]
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
#### Implementation Example
|
|
52
|
+
|
|
53
|
+
```javascript
|
|
54
|
+
// lib/project-maturity.js
|
|
55
|
+
class ProjectMaturityDetector {
|
|
56
|
+
detect(projectPath) {
|
|
57
|
+
const stats = this.analyzeProject(projectPath)
|
|
58
|
+
|
|
59
|
+
if (stats.totalSourceFiles === 0) return 'minimal'
|
|
60
|
+
if (stats.totalSourceFiles < 3 && stats.testFiles === 0) return 'bootstrap'
|
|
61
|
+
if (stats.testFiles > 0 && stats.totalSourceFiles >= 3) return 'development'
|
|
62
|
+
if (
|
|
63
|
+
stats.hasDocumentation &&
|
|
64
|
+
stats.hasTests &&
|
|
65
|
+
stats.totalSourceFiles >= 10
|
|
66
|
+
) {
|
|
67
|
+
return 'production-ready'
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
return 'development' // default
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
analyzeProject(projectPath) {
|
|
74
|
+
return {
|
|
75
|
+
totalSourceFiles: this.countSourceFiles(projectPath),
|
|
76
|
+
testFiles: this.countTestFiles(projectPath),
|
|
77
|
+
hasDocumentation: this.hasDocumentation(projectPath),
|
|
78
|
+
hasTests: this.hasTests(projectPath),
|
|
79
|
+
hasDependencies: this.hasDependencies(projectPath),
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
### Strategy 2: Graceful Check Degradation
|
|
86
|
+
|
|
87
|
+
Each check should gracefully handle "nothing to check" scenarios.
|
|
88
|
+
|
|
89
|
+
#### Current State
|
|
90
|
+
|
|
91
|
+
```yaml
|
|
92
|
+
# โ FAILS on empty projects
|
|
93
|
+
- name: ESLint
|
|
94
|
+
run: npx eslint . --max-warnings=0
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
#### Proposed Improvement
|
|
98
|
+
|
|
99
|
+
```yaml
|
|
100
|
+
# โ
PASSES on empty projects with informative message
|
|
101
|
+
- name: ESLint
|
|
102
|
+
run: |
|
|
103
|
+
# Count source files
|
|
104
|
+
SOURCE_COUNT=$(find . -type f \( -name "*.js" -o -name "*.jsx" -o -name "*.ts" -o -name "*.tsx" \) ! -path "*/node_modules/*" ! -path "*/.git/*" | wc -l)
|
|
105
|
+
|
|
106
|
+
if [ "$SOURCE_COUNT" -eq 0 ]; then
|
|
107
|
+
echo "โญ๏ธ No source files found - skipping ESLint"
|
|
108
|
+
echo "This is expected for new projects. Add source files to enable linting."
|
|
109
|
+
exit 0
|
|
110
|
+
fi
|
|
111
|
+
|
|
112
|
+
echo "๐ Linting $SOURCE_COUNT source files..."
|
|
113
|
+
npx eslint . --max-warnings=0
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
### Strategy 3: Progressive Enablement Configuration
|
|
117
|
+
|
|
118
|
+
Add a `.qualityrc.json` file that tracks which checks are "ready" for the project.
|
|
119
|
+
|
|
120
|
+
```json
|
|
121
|
+
{
|
|
122
|
+
"version": "1.0",
|
|
123
|
+
"maturity": "auto",
|
|
124
|
+
"checks": {
|
|
125
|
+
"prettier": { "enabled": true, "required": true },
|
|
126
|
+
"eslint": { "enabled": "auto", "required": false },
|
|
127
|
+
"stylelint": { "enabled": "auto", "required": false },
|
|
128
|
+
"tests": { "enabled": false, "required": false },
|
|
129
|
+
"coverage": { "enabled": false, "required": false, "threshold": 80 },
|
|
130
|
+
"security-audit": { "enabled": "auto", "required": false },
|
|
131
|
+
"documentation": { "enabled": false, "required": false },
|
|
132
|
+
"lighthouse": { "enabled": false, "required": false }
|
|
133
|
+
},
|
|
134
|
+
"auto-enable": {
|
|
135
|
+
"eslint": { "when": "sourceFiles >= 1" },
|
|
136
|
+
"tests": { "when": "testFiles >= 1" },
|
|
137
|
+
"coverage": { "when": "testFiles >= 3" },
|
|
138
|
+
"security-audit": { "when": "dependencies >= 1" },
|
|
139
|
+
"documentation": { "when": "docs/ exists OR README.md >= 100 lines" }
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
### Strategy 4: Smart GitHub Actions Workflow
|
|
145
|
+
|
|
146
|
+
Update `quality.yml` to use maturity detection:
|
|
147
|
+
|
|
148
|
+
```yaml
|
|
149
|
+
name: Quality Checks
|
|
150
|
+
|
|
151
|
+
on:
|
|
152
|
+
push:
|
|
153
|
+
branches: [main, master, develop]
|
|
154
|
+
pull_request:
|
|
155
|
+
branches: [main, master, develop]
|
|
156
|
+
|
|
157
|
+
jobs:
|
|
158
|
+
detect-maturity:
|
|
159
|
+
runs-on: ubuntu-latest
|
|
160
|
+
outputs:
|
|
161
|
+
maturity: ${{ steps.detect.outputs.maturity }}
|
|
162
|
+
source-count: ${{ steps.detect.outputs.source-count }}
|
|
163
|
+
test-count: ${{ steps.detect.outputs.test-count }}
|
|
164
|
+
has-deps: ${{ steps.detect.outputs.has-deps }}
|
|
165
|
+
|
|
166
|
+
steps:
|
|
167
|
+
- uses: actions/checkout@v5
|
|
168
|
+
|
|
169
|
+
- name: Detect Project Maturity
|
|
170
|
+
id: detect
|
|
171
|
+
run: |
|
|
172
|
+
# Count source files
|
|
173
|
+
SOURCE_COUNT=$(find . -type f \( -name "*.js" -o -name "*.jsx" -o -name "*.ts" -o -name "*.tsx" \) ! -path "*/node_modules/*" ! -path "*/.git/*" | wc -l)
|
|
174
|
+
|
|
175
|
+
# Count test files
|
|
176
|
+
TEST_COUNT=$(find . -type f \( -name "*.test.js" -o -name "*.test.ts" -o -name "*.spec.js" -o -name "*.spec.ts" \) ! -path "*/node_modules/*" | wc -l)
|
|
177
|
+
|
|
178
|
+
# Check for dependencies
|
|
179
|
+
HAS_DEPS="false"
|
|
180
|
+
if [ -f package.json ] && grep -q '"dependencies"' package.json; then
|
|
181
|
+
HAS_DEPS="true"
|
|
182
|
+
fi
|
|
183
|
+
|
|
184
|
+
# Determine maturity
|
|
185
|
+
MATURITY="minimal"
|
|
186
|
+
if [ "$SOURCE_COUNT" -ge 10 ] && [ "$TEST_COUNT" -ge 3 ]; then
|
|
187
|
+
MATURITY="production-ready"
|
|
188
|
+
elif [ "$SOURCE_COUNT" -ge 3 ] && [ "$TEST_COUNT" -ge 1 ]; then
|
|
189
|
+
MATURITY="development"
|
|
190
|
+
elif [ "$SOURCE_COUNT" -ge 1 ]; then
|
|
191
|
+
MATURITY="bootstrap"
|
|
192
|
+
fi
|
|
193
|
+
|
|
194
|
+
echo "maturity=$MATURITY" >> $GITHUB_OUTPUT
|
|
195
|
+
echo "source-count=$SOURCE_COUNT" >> $GITHUB_OUTPUT
|
|
196
|
+
echo "test-count=$TEST_COUNT" >> $GITHUB_OUTPUT
|
|
197
|
+
echo "has-deps=$HAS_DEPS" >> $GITHUB_OUTPUT
|
|
198
|
+
|
|
199
|
+
echo "๐ Project Maturity: $MATURITY"
|
|
200
|
+
echo " Source files: $SOURCE_COUNT"
|
|
201
|
+
echo " Test files: $TEST_COUNT"
|
|
202
|
+
echo " Has dependencies: $HAS_DEPS"
|
|
203
|
+
|
|
204
|
+
# Core checks - ALWAYS run (project must pass these)
|
|
205
|
+
core-checks:
|
|
206
|
+
runs-on: ubuntu-latest
|
|
207
|
+
needs: detect-maturity
|
|
208
|
+
|
|
209
|
+
steps:
|
|
210
|
+
- uses: actions/checkout@v5
|
|
211
|
+
- uses: actions/setup-node@v6
|
|
212
|
+
with:
|
|
213
|
+
node-version: '20'
|
|
214
|
+
cache: 'npm'
|
|
215
|
+
|
|
216
|
+
- run: npm ci || npm install
|
|
217
|
+
|
|
218
|
+
- name: Prettier check
|
|
219
|
+
run: npm run format:check
|
|
220
|
+
|
|
221
|
+
# Linting checks - run if source files exist
|
|
222
|
+
linting:
|
|
223
|
+
runs-on: ubuntu-latest
|
|
224
|
+
needs: detect-maturity
|
|
225
|
+
if: needs.detect-maturity.outputs.source-count > 0
|
|
226
|
+
|
|
227
|
+
steps:
|
|
228
|
+
- uses: actions/checkout@v5
|
|
229
|
+
- uses: actions/setup-node@v6
|
|
230
|
+
with:
|
|
231
|
+
node-version: '20'
|
|
232
|
+
cache: 'npm'
|
|
233
|
+
|
|
234
|
+
- run: npm ci || npm install
|
|
235
|
+
|
|
236
|
+
- name: ESLint
|
|
237
|
+
run: npx eslint . --max-warnings=0
|
|
238
|
+
|
|
239
|
+
- name: Stylelint
|
|
240
|
+
run: npx stylelint "**/*.{css,scss,sass,less,pcss}" --allow-empty-input
|
|
241
|
+
|
|
242
|
+
# Security checks - run if dependencies exist
|
|
243
|
+
security:
|
|
244
|
+
runs-on: ubuntu-latest
|
|
245
|
+
needs: detect-maturity
|
|
246
|
+
if: needs.detect-maturity.outputs.has-deps == 'true'
|
|
247
|
+
|
|
248
|
+
steps:
|
|
249
|
+
- uses: actions/checkout@v5
|
|
250
|
+
- uses: actions/setup-node@v6
|
|
251
|
+
with:
|
|
252
|
+
node-version: '20'
|
|
253
|
+
cache: 'npm'
|
|
254
|
+
|
|
255
|
+
- run: npm ci || npm install
|
|
256
|
+
|
|
257
|
+
- name: Security audit
|
|
258
|
+
run: npm audit --audit-level high
|
|
259
|
+
|
|
260
|
+
- name: Check for hardcoded secrets
|
|
261
|
+
run: |
|
|
262
|
+
# ... existing secret detection logic
|
|
263
|
+
|
|
264
|
+
# Test checks - run if test files exist
|
|
265
|
+
tests:
|
|
266
|
+
runs-on: ubuntu-latest
|
|
267
|
+
needs: detect-maturity
|
|
268
|
+
if: needs.detect-maturity.outputs.test-count > 0
|
|
269
|
+
|
|
270
|
+
steps:
|
|
271
|
+
- uses: actions/checkout@v5
|
|
272
|
+
- uses: actions/setup-node@v6
|
|
273
|
+
with:
|
|
274
|
+
node-version: '20'
|
|
275
|
+
cache: 'npm'
|
|
276
|
+
|
|
277
|
+
- run: npm ci || npm install
|
|
278
|
+
|
|
279
|
+
- name: Run tests
|
|
280
|
+
run: npm test
|
|
281
|
+
|
|
282
|
+
# Advanced checks - only for production-ready projects
|
|
283
|
+
advanced:
|
|
284
|
+
runs-on: ubuntu-latest
|
|
285
|
+
needs: detect-maturity
|
|
286
|
+
if: needs.detect-maturity.outputs.maturity == 'production-ready'
|
|
287
|
+
|
|
288
|
+
steps:
|
|
289
|
+
- uses: actions/checkout@v5
|
|
290
|
+
- uses: actions/setup-node@v6
|
|
291
|
+
with:
|
|
292
|
+
node-version: '20'
|
|
293
|
+
cache: 'npm'
|
|
294
|
+
|
|
295
|
+
- run: npm ci || npm install
|
|
296
|
+
|
|
297
|
+
- name: Documentation validation
|
|
298
|
+
run: npx create-qa-architect@latest --validate-docs
|
|
299
|
+
|
|
300
|
+
- name: Lighthouse CI
|
|
301
|
+
if: hashFiles('.lighthouserc.js', '.lighthouserc.json', 'lighthouserc.js') != ''
|
|
302
|
+
run: npx lhci autorun
|
|
303
|
+
continue-on-error: true
|
|
304
|
+
```
|
|
305
|
+
|
|
306
|
+
## Implementation Plan
|
|
307
|
+
|
|
308
|
+
### Phase 1: Foundation (Week 1)
|
|
309
|
+
|
|
310
|
+
1. **Create `lib/project-maturity.js`**
|
|
311
|
+
- Implement maturity detection logic
|
|
312
|
+
- Add source file counting
|
|
313
|
+
- Add test file counting
|
|
314
|
+
- Add dependency detection
|
|
315
|
+
|
|
316
|
+
2. **Create `.qualityrc.json` template**
|
|
317
|
+
- Define configuration schema
|
|
318
|
+
- Add to setup.js output
|
|
319
|
+
- Document usage
|
|
320
|
+
|
|
321
|
+
3. **Add CLI command for maturity check**
|
|
322
|
+
```bash
|
|
323
|
+
npx create-qa-architect@latest --check-maturity
|
|
324
|
+
```
|
|
325
|
+
|
|
326
|
+
### Phase 2: Workflow Updates (Week 2)
|
|
327
|
+
|
|
328
|
+
1. **Update `.github/workflows/quality.yml`**
|
|
329
|
+
- Add `detect-maturity` job
|
|
330
|
+
- Split checks into conditional jobs
|
|
331
|
+
- Add informative skip messages
|
|
332
|
+
|
|
333
|
+
2. **Update pre-commit hooks**
|
|
334
|
+
- Add graceful degradation to lint-staged
|
|
335
|
+
- Skip checks with no files to process
|
|
336
|
+
|
|
337
|
+
3. **Add setup.js option for maturity level**
|
|
338
|
+
```bash
|
|
339
|
+
npx create-qa-architect@latest --maturity=minimal
|
|
340
|
+
npx create-qa-architect@latest --maturity=auto # default
|
|
341
|
+
```
|
|
342
|
+
|
|
343
|
+
### Phase 3: Documentation & Testing (Week 3)
|
|
344
|
+
|
|
345
|
+
1. **Create test fixtures**
|
|
346
|
+
- Minimal project (just package.json)
|
|
347
|
+
- Bootstrap project (1-2 source files, no tests)
|
|
348
|
+
- Development project (source + tests)
|
|
349
|
+
- Production-ready project (full setup)
|
|
350
|
+
|
|
351
|
+
2. **Integration tests**
|
|
352
|
+
- Test each maturity level
|
|
353
|
+
- Verify correct checks run
|
|
354
|
+
- Verify graceful skipping
|
|
355
|
+
|
|
356
|
+
3. **Update documentation**
|
|
357
|
+
- Add PROGRESSIVE_QUALITY.md guide
|
|
358
|
+
- Update CLAUDE.md with new approach
|
|
359
|
+
- Add examples to README
|
|
360
|
+
|
|
361
|
+
## Benefits
|
|
362
|
+
|
|
363
|
+
### For New Projects
|
|
364
|
+
|
|
365
|
+
- **No false failures** - Checks only run when there's something to check
|
|
366
|
+
- **Clear progression** - Developers see which checks will activate as they add files
|
|
367
|
+
- **Less noise** - CI/CD stays green during early development
|
|
368
|
+
|
|
369
|
+
### For Existing Projects
|
|
370
|
+
|
|
371
|
+
- **Backward compatible** - Auto-detection means no config changes needed
|
|
372
|
+
- **Opt-in strictness** - Can set `maturity: "production-ready"` to force all checks
|
|
373
|
+
- **Gradual adoption** - Can enable checks one at a time via `.qualityrc.json`
|
|
374
|
+
|
|
375
|
+
### For Maintainers
|
|
376
|
+
|
|
377
|
+
- **Better UX** - Reduces confusion and support requests
|
|
378
|
+
- **Professional polish** - Shows thoughtful design
|
|
379
|
+
- **Competitive advantage** - Most quality tools don't have this
|
|
380
|
+
|
|
381
|
+
## Alternative Approaches Considered
|
|
382
|
+
|
|
383
|
+
### 1. Manual Check Enablement
|
|
384
|
+
|
|
385
|
+
**Approach**: Require users to manually enable each check via config.
|
|
386
|
+
|
|
387
|
+
**Pros**: Complete control, no magic
|
|
388
|
+
|
|
389
|
+
**Cons**: Requires configuration burden, easy to forget checks, poor DX
|
|
390
|
+
|
|
391
|
+
**Decision**: Rejected - Auto-detection is better UX
|
|
392
|
+
|
|
393
|
+
### 2. Warning-Only Mode
|
|
394
|
+
|
|
395
|
+
**Approach**: Run all checks but return warnings instead of errors for early projects.
|
|
396
|
+
|
|
397
|
+
**Pros**: Simple implementation
|
|
398
|
+
|
|
399
|
+
**Cons**: Still creates noise, unclear which warnings matter, pollutes CI logs
|
|
400
|
+
|
|
401
|
+
**Decision**: Rejected - Clean skips are clearer than warnings
|
|
402
|
+
|
|
403
|
+
### 3. Time-Based Activation
|
|
404
|
+
|
|
405
|
+
**Approach**: Enable checks based on project age (e.g., full checks after 30 days).
|
|
406
|
+
|
|
407
|
+
**Pros**: Automatic progression
|
|
408
|
+
|
|
409
|
+
**Cons**: Arbitrary, doesn't reflect actual project state, can't work for fast-paced projects
|
|
410
|
+
|
|
411
|
+
**Decision**: Rejected - File-based detection is more accurate
|
|
412
|
+
|
|
413
|
+
## Open Questions
|
|
414
|
+
|
|
415
|
+
1. **Should we add a "learning mode"?**
|
|
416
|
+
- First 10 commits run checks but don't block?
|
|
417
|
+
- Could help teams understand what's needed
|
|
418
|
+
|
|
419
|
+
2. **Should maturity level be visible in PR checks?**
|
|
420
|
+
- Add a badge showing current maturity?
|
|
421
|
+
- "This project is in BOOTSTRAP mode - 2/10 checks active"
|
|
422
|
+
|
|
423
|
+
3. **Should we auto-upgrade maturity?**
|
|
424
|
+
- When test files are added, auto-enable test checks?
|
|
425
|
+
- Or require explicit opt-in via `.qualityrc.json`?
|
|
426
|
+
|
|
427
|
+
4. **How to handle monorepos?**
|
|
428
|
+
- Detect maturity per package?
|
|
429
|
+
- Or at root level?
|
|
430
|
+
|
|
431
|
+
## Next Steps
|
|
432
|
+
|
|
433
|
+
1. **User Feedback** - Gather feedback on this proposal
|
|
434
|
+
2. **Prototype** - Build Phase 1 implementation
|
|
435
|
+
3. **Test** - Validate with real projects at different maturity levels
|
|
436
|
+
4. **Iterate** - Refine based on testing
|
|
437
|
+
5. **Release** - Ship as v3.2.0 with full documentation
|
|
438
|
+
|
|
439
|
+
---
|
|
440
|
+
|
|
441
|
+
**Author**: Claude (AI Assistant)
|
|
442
|
+
**Date**: 2025-11-19
|
|
443
|
+
**Status**: PROPOSAL - Awaiting feedback
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
# Release Checklist ๐
|
|
2
|
+
|
|
3
|
+
Use this checklist before any version bump or npm publication.
|
|
4
|
+
|
|
5
|
+
## ๐ Pre-Release Documentation Review
|
|
6
|
+
|
|
7
|
+
### Version Consistency
|
|
8
|
+
|
|
9
|
+
- [ ] `package.json` version matches intended release
|
|
10
|
+
- [ ] `CHANGELOG.md` has entry for current version
|
|
11
|
+
- [ ] No "Unreleased" items that should be in current version
|
|
12
|
+
- [ ] Roadmap section doesn't reference completed versions
|
|
13
|
+
|
|
14
|
+
### File Inventory Accuracy
|
|
15
|
+
|
|
16
|
+
- [ ] README "What Gets Added" matches `setup.js` file creation logic
|
|
17
|
+
- [ ] All template files in `/config` are documented
|
|
18
|
+
- [ ] TypeScript-specific files mentioned when applicable
|
|
19
|
+
- [ ] Python-specific files mentioned when applicable
|
|
20
|
+
|
|
21
|
+
### Feature Documentation Completeness
|
|
22
|
+
|
|
23
|
+
- [ ] All new features from this version documented in README
|
|
24
|
+
- [ ] Configuration examples provided for new features
|
|
25
|
+
- [ ] Usage instructions clear and complete
|
|
26
|
+
- [ ] Security features properly documented
|
|
27
|
+
|
|
28
|
+
### Security Audit Compliance
|
|
29
|
+
|
|
30
|
+
- [ ] `KEYFLASH_INSPIRED_SECURITY_AUDIT.md` findings remain resolved
|
|
31
|
+
- [ ] **CRITICAL**: Gitleaks checksums are real SHA256 values, not placeholders
|
|
32
|
+
- [ ] `lib/validation/config-security.js` GITLEAKS_CHECKSUMS contains verified hashes
|
|
33
|
+
- [ ] No "PLACEHOLDER_CHECKSUM" strings exist in security validation code
|
|
34
|
+
- [ ] Gitleaks pinned version in code matches documented security version
|
|
35
|
+
- [ ] No new security vulnerabilities introduced since audit
|
|
36
|
+
- [ ] All security fixes from audit still in place
|
|
37
|
+
- [ ] Security audit document references current version (or base version for pre-releases like `4.0.1-rc.1`)
|
|
38
|
+
|
|
39
|
+
### Real Binary Verification
|
|
40
|
+
|
|
41
|
+
- [ ] **CRITICAL**: Nightly gitleaks verification workflow is enabled and passing
|
|
42
|
+
- [ ] Check last run of `.github/workflows/nightly-gitleaks-verification.yml`
|
|
43
|
+
- [ ] No open issues from failed nightly verification runs
|
|
44
|
+
- [ ] Production checksums validated in `tests/gitleaks-production-checksums.test.js`
|
|
45
|
+
- [ ] Real binary download test passes: `RUN_REAL_BINARY_TEST=1 node tests/gitleaks-real-binary-test.js`
|
|
46
|
+
- [ ] CI real binary verification test passes on Linux
|
|
47
|
+
- [ ] **BLOCKERS**: If nightly verification failed within 7 days, investigate before release:
|
|
48
|
+
- [ ] Check if gitleaks v8.28.0 assets were modified upstream
|
|
49
|
+
- [ ] Verify checksums against known good values
|
|
50
|
+
- [ ] Ensure no supply chain compromise indicators
|
|
51
|
+
- [ ] Update checksums only if legitimate upstream change confirmed
|
|
52
|
+
|
|
53
|
+
### Workflow Documentation Alignment
|
|
54
|
+
|
|
55
|
+
- [ ] GitHub Actions steps match actual workflow files
|
|
56
|
+
- [ ] Security scanning steps accurately described
|
|
57
|
+
- [ ] Lighthouse CI integration properly documented
|
|
58
|
+
- [ ] Python workflow steps match `quality-python.yml`
|
|
59
|
+
|
|
60
|
+
### Cross-Reference Verification
|
|
61
|
+
|
|
62
|
+
Run these commands to verify alignment:
|
|
63
|
+
|
|
64
|
+
```bash
|
|
65
|
+
# Check what files setup.js actually creates
|
|
66
|
+
grep -n "writeFileSync\|copyFileSync" setup.js
|
|
67
|
+
|
|
68
|
+
# Compare with README "What Gets Added" section
|
|
69
|
+
grep -A 20 "What Gets Added" README.md
|
|
70
|
+
|
|
71
|
+
# Verify workflow steps match documentation
|
|
72
|
+
diff <(grep -E "^ - name:" .github/workflows/quality.yml) \
|
|
73
|
+
<(grep -E "โ
.*-" README.md | head -10)
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
## ๐งช Pre-Release Testing
|
|
77
|
+
|
|
78
|
+
- [ ] `npm test` passes
|
|
79
|
+
- [ ] Test in clean directory: `npx create-qa-architect@latest`
|
|
80
|
+
- [ ] Verify all documented files are created
|
|
81
|
+
- [ ] Check that workflows run successfully
|
|
82
|
+
|
|
83
|
+
## ๐ฆ Publication Steps
|
|
84
|
+
|
|
85
|
+
- [ ] Update version: `npm version patch|minor|major`
|
|
86
|
+
- [ ] Update CHANGELOG.md with release date
|
|
87
|
+
- [ ] Commit changes: `git commit -m "release: vX.X.X"`
|
|
88
|
+
- [ ] Create git tag: `git tag vX.X.X`
|
|
89
|
+
- [ ] Push: `git push && git push --tags`
|
|
90
|
+
- [ ] Publish: `npm publish`
|
|
91
|
+
|
|
92
|
+
## ๐ Post-Release Verification
|
|
93
|
+
|
|
94
|
+
- [ ] npm shows correct version: `npm view create-qa-architect version`
|
|
95
|
+
- [ ] GitHub release tagged correctly
|
|
96
|
+
- [ ] Documentation renders correctly on npm/GitHub
|
|
97
|
+
|
|
98
|
+
---
|
|
99
|
+
|
|
100
|
+
**Remember**: This checklist exists because human memory fails. Use it every time.
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# Dependabot configuration for automated dependency updates
|
|
2
|
+
# https://docs.github.com/en/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file
|
|
3
|
+
|
|
4
|
+
version: 2
|
|
5
|
+
updates:
|
|
6
|
+
# npm dependencies
|
|
7
|
+
- package-ecosystem: 'npm'
|
|
8
|
+
directory: '/'
|
|
9
|
+
schedule:
|
|
10
|
+
interval: 'weekly'
|
|
11
|
+
day: 'monday'
|
|
12
|
+
time: '09:00'
|
|
13
|
+
open-pull-requests-limit: 5
|
|
14
|
+
reviewers:
|
|
15
|
+
- 'brettstark73'
|
|
16
|
+
# Group non-security updates for easier review
|
|
17
|
+
groups:
|
|
18
|
+
development-dependencies:
|
|
19
|
+
dependency-type: 'development'
|
|
20
|
+
update-types: ['patch', 'minor']
|
|
21
|
+
production-dependencies:
|
|
22
|
+
dependency-type: 'production'
|
|
23
|
+
update-types: ['patch', 'minor']
|
|
24
|
+
# Separate security updates (always create individual PRs)
|
|
25
|
+
labels:
|
|
26
|
+
- 'dependencies'
|
|
27
|
+
- 'automated'
|
|
28
|
+
commit-message:
|
|
29
|
+
prefix: 'chore(deps)'
|
|
30
|
+
include: 'scope'
|
|
31
|
+
# Only update to latest release (not pre-release)
|
|
32
|
+
versioning-strategy: increase
|
|
33
|
+
|
|
34
|
+
# GitHub Actions
|
|
35
|
+
- package-ecosystem: 'github-actions'
|
|
36
|
+
directory: '/'
|
|
37
|
+
schedule:
|
|
38
|
+
interval: 'weekly'
|
|
39
|
+
day: 'monday'
|
|
40
|
+
time: '10:00'
|
|
41
|
+
open-pull-requests-limit: 3
|
|
42
|
+
reviewers:
|
|
43
|
+
- 'brettstark73'
|
|
44
|
+
labels:
|
|
45
|
+
- 'dependencies'
|
|
46
|
+
- 'github-actions'
|
|
47
|
+
- 'automated'
|
|
48
|
+
commit-message:
|
|
49
|
+
prefix: 'ci'
|
|
50
|
+
include: 'scope'
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Daily Git sync protocol - prevents divergent branch issues
|
|
3
|
+
# Run this before starting any development work
|
|
4
|
+
|
|
5
|
+
set -e
|
|
6
|
+
|
|
7
|
+
echo "๐ Git Daily Sync Protocol"
|
|
8
|
+
echo "=========================="
|
|
9
|
+
|
|
10
|
+
# 1. Check current status
|
|
11
|
+
echo "๐ Current status:"
|
|
12
|
+
git status --short
|
|
13
|
+
|
|
14
|
+
# 2. Fetch latest from all remotes
|
|
15
|
+
echo ""
|
|
16
|
+
echo "๐ฅ Fetching from remote..."
|
|
17
|
+
git fetch origin
|
|
18
|
+
|
|
19
|
+
# 3. Check for unpushed local commits
|
|
20
|
+
UNPUSHED=$(git log --oneline origin/$(git branch --show-current)..HEAD 2>/dev/null | wc -l)
|
|
21
|
+
if [ "$UNPUSHED" -gt 0 ]; then
|
|
22
|
+
echo "โ ๏ธ You have $UNPUSHED unpushed commit(s):"
|
|
23
|
+
git log --oneline origin/$(git branch --show-current)..HEAD
|
|
24
|
+
echo ""
|
|
25
|
+
echo "๐ Pushing local commits..."
|
|
26
|
+
git push
|
|
27
|
+
fi
|
|
28
|
+
|
|
29
|
+
# 4. Check if we're behind remote
|
|
30
|
+
BEHIND=$(git log --oneline HEAD..origin/$(git branch --show-current) 2>/dev/null | wc -l)
|
|
31
|
+
if [ "$BEHIND" -gt 0 ]; then
|
|
32
|
+
echo "๐ฅ You are $BEHIND commit(s) behind remote. Pulling..."
|
|
33
|
+
git pull --rebase
|
|
34
|
+
fi
|
|
35
|
+
|
|
36
|
+
# 5. Final status
|
|
37
|
+
echo ""
|
|
38
|
+
echo "โ
Git sync complete!"
|
|
39
|
+
echo "๐ Final status:"
|
|
40
|
+
git status --short
|
|
41
|
+
|
|
42
|
+
# 6. Show recent activity
|
|
43
|
+
echo ""
|
|
44
|
+
echo "๐ Recent activity (last 5 commits):"
|
|
45
|
+
git log --oneline --graph -5
|
|
46
|
+
|
|
47
|
+
echo ""
|
|
48
|
+
echo "๐ฏ Repository is now synchronized and ready for development"
|