vibe-validate 0.19.1 → 0.19.2-rc.2

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.
@@ -0,0 +1,1591 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project will be documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+
8
+ ## [Unreleased]
9
+
10
+ ## [0.19.1] - 2026-04-01
11
+
12
+ ### Added
13
+
14
+ - **`ci.registryUrl` config** — Set `registry-url` on `actions/setup-node` for GitHub Packages authentication in generated workflows
15
+ - **`ci.env` config** — Add workflow-level environment variables (e.g., `NODE_AUTH_TOKEN`) to generated workflows
16
+ - **`ci.permissions` config** — Add GitHub Actions `permissions:` block to generated workflows for scoped token access
17
+ - **`ci.concurrency` config** — Add `concurrency:` block to cancel in-progress CI runs on new pushes
18
+ - **`ci.setupSteps` config** — Inject custom GitHub Actions steps (e.g., `actions/setup-dotnet`, Chrome install) after checkout in generated workflows
19
+ - **`runScope` step property** — Set `runScope: ci` or `runScope: local` on validation steps to control where they run. CI-only steps are skipped locally (shown as "skipped"), local-only steps are skipped in CI.
20
+
21
+ ### Changed
22
+
23
+ - **Skill distribution migrated to vibe-agent-toolkit plugin system** — Skills now install as Claude Code plugins via `~/.claude/plugins/` instead of flat files at `~/.claude/skills/`. Upgrading from older versions automatically cleans up the legacy flat-skill install.
24
+
25
+ ### Fixed
26
+
27
+ - **`generate-workflow` hardening** — `ci.permissions` and `ci.env` are now applied to the `validate` and `coverage` jobs instead of at workflow level, so the `all-validation-passed` gate job no longer inherits unnecessary access (resolves SonarQube workflow-level permissions flag). `contents: read` is auto-injected when `ci.permissions` is set, since job-level permissions replace all defaults and `actions/checkout` always needs it. Also fixed check script indentation and build step auto-detection (no longer matches on step name substring — checks `package.json` for a `build` script instead).
28
+ - **`watch-pr` crashes on repos with non-main default branch** — `fetchFileChanges` hardcoded `origin/main` for git diff, causing failures on repos using `master`, `develop`, or other base branches. Now uses the PR's actual base branch from GitHub metadata.
29
+
30
+ ## [0.19.0] - 2026-03-04
31
+
32
+ ### Breaking Changes
33
+
34
+ - **CI workflow generation now uses a single validate job.** Run `npx vibe-validate generate-workflow` to regenerate your workflow file. The `useMatrix` option has been removed.
35
+ - **Cached failures are now returned instantly.** `vv validate` returns the last cached result for the current tree hash, even if it failed — no more redundant re-runs. Use `--force` to bypass cache when needed.
36
+ - **TreeHashResult structure simplified** for projects with submodules. Projects without submodules are unaffected. See Migration Guide below.
37
+
38
+ ### Added
39
+
40
+ - **`--retry-failed` flag** — Re-runs only failed validation steps while preserving passed results from cache. Detects and reports flaky tests when retried steps pass. Usage: `vv validate --retry-failed`
41
+ - **Dependency lock check** — Verifies lock files are in sync before validation to prevent cache poisoning. Auto-detects your package manager (npm, pnpm, yarn, bun). Configure via `ci.dependencyLockCheck.runOn`.
42
+ - **`watch-pr` improvements:**
43
+ - Errors extracted and displayed immediately as CI checks fail (no waiting for final output)
44
+ - Log files saved with paths included in YAML output for easy follow-up
45
+ - **`VV_TEMP_DIR` environment variable** — Override the default temp directory for project-local storage, CI builds, or network storage
46
+ - **Flakiness detection** — Warns when the same code produces different validation outcomes across runs
47
+
48
+ ### Performance
49
+
50
+ - **19x faster pre-commit secret scanning** — secretlint now scans only staged files (15s → 0.8s). Zero configuration required.
51
+ - **10x faster ESLint** — Caching enabled automatically (18s → 1.8s on warm runs)
52
+ - **Instant cached validation** — History health checks and git notes listing optimized from hundreds of subprocess calls to single batch operations
53
+ - **Flattened temp directory structure** — Reduces permission prompts in AI coding assistants to one approval per day
54
+
55
+ ### Changed
56
+
57
+ - **Cache messaging improved** — Results displayed authoritatively ("Validation failed for this code") instead of defensive language ("Cached result: ...") that caused AI assistants to doubt cache validity
58
+ - **`watch-pr` default timeout reduced** from 30 minutes to 10 minutes. Override with `--timeout`.
59
+ - **`watch-pr` output optimized** — Stripped internal metadata to reduce token usage (~30-50 tokens saved per failed check)
60
+
61
+ ### Fixed
62
+
63
+ - **Validation now always runs from project root**, regardless of which subdirectory you invoke `vv validate` from
64
+ - **Git submodule cache invalidation** — Changes in submodule working trees now correctly invalidate the cache
65
+ - **Git notes storage fixed for submodules** — Notes now store structured data instead of composite hashes that were incompatible with Git's SHA-1 object references
66
+ - **Validation history recording** — Fixed bug where `vv validate --force` on the same tree hash would silently fail to record history
67
+ - **`watch-pr --fail-fast`** now waits for error extraction to complete before exiting
68
+
69
+ ### Migration Guide
70
+
71
+ **Projects with submodules:**
72
+ - Cache entries from v0.18.x are incompatible — first validation after upgrade will be a fresh run
73
+ - Subsequent runs use the new cache format automatically
74
+
75
+ **Projects without submodules:**
76
+ - Fully backward compatible, no action required
77
+
78
+ ## [0.18.4] - 2026-01-31
79
+
80
+ ### Bug Fixes
81
+
82
+ - **Fixed validation locking race condition in pre-commit** (Issue #110)
83
+ - Migrated to proper-lockfile for 99.9% reliable locking
84
+ - Prevents concurrent validation runs from interfering
85
+ - Fixed worktree corruption in git integration tests
86
+ - **Windows compatibility: removed Unix-specific `find` command** (PR #108)
87
+ - Build commands now work cross-platform
88
+ - **Shift-left CHANGELOG validation to prevent publish failures**
89
+ - Added Check 11 to pre-publish-check: validates CHANGELOG.md has entry for current version
90
+ - Prevents npm publish success followed by GitHub Release failure
91
+ - Skips check in development mode (`--skip-git-checks`) for workflow flexibility
92
+
93
+ ### Internal
94
+
95
+ - **Turborepo integration for 79x faster cached builds** (PR #108)
96
+ - Cold build: 5.3s → Cached build: 67ms (79x speedup)
97
+ - Intelligent content-based caching with parallel execution
98
+ - Clean architecture: vibe-validate → turbo → tool
99
+ - Error extraction works automatically through Turbo output
100
+ - See `docs/comparisons/turborepo.md` for detailed comparison
101
+ - **Refactored dev tools to symmetric monorepo structure** (PR #112)
102
+ - Moved tools/ to packages/dev-tools/ for consistency with other packages
103
+ - Enhanced pre-publish-check with 11 validation checks (up from 10)
104
+ - Added --skip-git-checks flag to prevent circular dependencies
105
+ - Reduced code duplication by 70% (4.73% → 0.86%)
106
+ - Added comprehensive ESLint rules for code quality (custom rules for security and architecture enforcement)
107
+
108
+ ## [0.18.3] - 2026-01-05
109
+
110
+ ### Bug Fixes
111
+
112
+ - **CRITICAL: Fixed history recording failure due to YAML/JSON format mismatch** (Issue #106, PR #107)
113
+ - **Problem**: History recording failed silently when validating the same code twice, losing all previous runs
114
+ - **Root cause**: `mergeNotes()` used JSON.parse/stringify but notes are written as YAML
115
+ - **Impact**: Affected v0.18.1 and v0.18.2-rc.1 (Dec 28 - Jan 5)
116
+ - **Fix**: Replace JSON operations with YAML operations in git notes merge logic
117
+ - **Testing**: Added regression test "should merge YAML-formatted notes correctly"
118
+ - Users can now validate the same code multiple times without losing history
119
+
120
+ ## [0.18.2] - 2026-01-04
121
+
122
+ ### Bug Fixes
123
+
124
+ - **Complete atomic safety for concurrent worktrees** (Issue #103, PR #105)
125
+ - Implemented true atomic compare-and-swap (CAS) operations for git notes merge
126
+ - Eliminates race condition from PR #104's optimistic locking approach
127
+ - Uses git plumbing commands (hash-object, ls-tree, mktree, commit-tree, update-ref)
128
+ - Guarantees zero data loss under any concurrency level
129
+ - 7 git commands per conflict vs 3 (acceptable trade-off for 100% safety)
130
+
131
+ ## [0.18.1] - 2025-12-26
132
+
133
+ ### Features
134
+
135
+ - **Expanded package manager support to yarn and bun**
136
+ - Config schema now supports `ci.packageManager: npm | pnpm | yarn | bun`
137
+ - Auto-detection priority: bun > yarn > npm > pnpm (npm preferred when both npm/pnpm exist)
138
+ - All CLI examples and error messages now show commands for all 4 package managers
139
+ - CI workflows use proper frozen lockfile commands (`pnpm install --frozen-lockfile`, `npm ci`, etc.)
140
+ - Support both `bun.lock` (text) and `bun.lockb` (binary) lockfile formats
141
+ - Include Node.js setup for Bun projects in matrix mode to ensure compatibility testing across Node versions for npm package consumers
142
+
143
+ ### Bug Fixes
144
+
145
+ - Fixed crash when running `vv snapshot` or `vv validate` in fresh git repos (after `git init`, before first commit)
146
+ - Fixed package manager detection to prefer npm over pnpm when both lockfiles exist (more conservative default)
147
+
148
+ ### Documentation
149
+
150
+ - Fixed broken markdown links across documentation
151
+
152
+ ## [0.18.0] - 2025-12-26
153
+
154
+ ### Features
155
+
156
+ - **`watch-pr` complete redesign with error extraction** (PR #92) - **BREAKING CHANGES**
157
+ - **Problem**: CI failures showed "check failed" with no details - had to click through GitHub UI to find what broke
158
+ - **What's new**:
159
+ - Extracts test failures with file:line:message from GitHub Actions logs (Vitest, Jest, ESLint, TypeScript, Playwright)
160
+ - Shows flaky test patterns and success rates from PR history
161
+ - View all runs with `--history` to discover run IDs
162
+ - Inspect specific failures with `--run-id <id>` (useful for testing extractors)
163
+ - Monitor any repo with `--repo owner/repo`
164
+ - 24x faster with local caching
165
+ - Auto-polls until CI completes
166
+ - **Breaking changes**:
167
+ - Removed `--provider` option (GitHub Actions only, no GitLab support)
168
+ - Changed timeout default from 60 minutes to 30 minutes
169
+ - Different output format (LLM-optimized YAML structure)
170
+ - **Impact**: Get actionable errors immediately without leaving terminal
171
+
172
+ - **`cleanup` redesigned for safe LLM-guided branch deletion** (Issue #93, PR #95) - **BREAKING CHANGES**
173
+ - **Problem**: Old cleanup was unsafe (could delete current branch) and lacked context about why branches exist
174
+ - **What's new**:
175
+ - Safe to run - auto-switches off current branch, never deletes it
176
+ - Fetches PR metadata from GitHub (open/closed/merged, merge method, who merged it)
177
+ - Explains why squash/rebase merged branches show as "not merged" in git
178
+ - Clear assessment for each branch with context (safe to delete, needs review, has unpushed work)
179
+ - 6.4x faster (parallel GitHub API fetching)
180
+ - LLM-optimized YAML output with actionable guidance
181
+ - **Breaking changes**:
182
+ - Requires `gh` CLI
183
+ - Removed `--main-branch`, `--dry-run`, `--yaml` flags (auto-detects main, always previews, always YAML output)
184
+ - Always outputs structured YAML (no human-friendly text mode)
185
+ - **Impact**: Safe for LLMs to run with clear contextual guidance for decision-making
186
+
187
+ ### Bug Fixes
188
+
189
+ - **Windows compatibility** (Issue #86, PR #94) - vibe-validate now works correctly on Windows (path handling, process spawning)
190
+ - **Vitest extractor** (Issue #84, PR #98) - Fixed unhandled promise rejections causing silent failures
191
+
192
+ ### Internal
193
+
194
+ - Reduced code duplication 70% (4.73% → 1.43%)
195
+ - Eliminated SonarQube security blockers and code quality violations
196
+
197
+ ### Documentation
198
+
199
+ - Added comprehensive `watch-pr` command guide (650+ lines)
200
+ - Updated README with latest features
201
+
202
+ ## [0.17.6] - 2025-12-15
203
+
204
+ ### Bug Fixes
205
+
206
+ - **Fixed secret scanning failure with default secretlint command** (Issue #88, regression from v0.17.5)
207
+ - **Problem**: Users with secret scanning enabled but no gitleaks installed and no custom `scanCommand` got "Not found target files" error
208
+ - **Solution**: Default command no longer uses shell syntax that was being misinterpreted
209
+ - **Impact**: Affects ~5% of users (scanning enabled, no gitleaks binary, no custom config)
210
+
211
+ ### Features
212
+
213
+ - Automated npm publishing via GitHub Actions (push tags to publish, RC→@next, stable→@latest+release)
214
+ - Converted all tools/ scripts to TypeScript with direct execution via tsx
215
+
216
+ ## [0.17.5] - 2025-12-15
217
+
218
+ ### Bug Fixes
219
+
220
+ - **CRITICAL: Fixed CI workflow validation check** (Issue #85) - Workflow was incorrectly passing even when tests failed because grep matched nested `passed: true` fields instead of top-level validation result (simplified to use exit codes)
221
+ - Fixed Windows CI test failures, which were masked by the CI workflow bug
222
+ - Pre-commit hook no longer falsely flags the local branch as stale during merge commits
223
+
224
+ ### Security
225
+
226
+ - **CRITICAL: Eliminated command injection vulnerability in history recorder**
227
+ - **Problem**: `packages/history/src/recorder.ts` used `execSync` with string interpolation for git notes operations, creating command injection risk
228
+ - **Solution**: Replaced with secure `addNote()` API from `@vibe-validate/git` package that uses stdin for content passing
229
+ - **Impact**: No more shell interpreter risks in validation history recording
230
+ - **NEW: Secure command execution wrapper**
231
+ - Created `packages/cli/src/utils/safe-exec.ts` with `safeExecSync()`, `isToolAvailable()`, and `getToolVersion()` functions
232
+ - Uses `spawnSync` with `shell: false` and `which` package for absolute path resolution
233
+ - Comprehensive unit tests covering security scenarios (command injection, PATH manipulation, special characters)
234
+ - Replaced 4 tool detection calls (gh, gitleaks, node, npm/pnpm) with secure wrapper
235
+ - **Benefits**:
236
+ - No shell interpreter = no command injection attack surface
237
+ - Absolute paths prevent runtime PATH manipulation
238
+ - SonarQube compliant
239
+ - DRY - centralizes execution logic
240
+ - Self-documenting security intent
241
+ - Fixed HIGH severity vulnerability in glob package (command injection)
242
+ - Fixed MODERATE severity vulnerability in js-yaml package (prototype pollution)
243
+ - Updated to TypeScript ES2024 target (backward compatible)
244
+
245
+ ### Features
246
+
247
+ - `vv doctor` now detects stale builds and dependencies
248
+
249
+ ### Documentation
250
+
251
+ - Added SonarCloud Quality Gate and Codecov coverage badges to README.md
252
+ - Improved README.md to clarify the benefits of the project, and reduced verbosity
253
+ - Cleaned up repository root (moved files to `.github/`, removed unnecessary files)
254
+
255
+ ### New Package
256
+
257
+ - **@vibe-validate/utils** - Common utilities package (command execution, cross-platform path helpers)
258
+
259
+ ## [0.17.4] - 2025-12-07
260
+
261
+ ### Bug Fixes
262
+
263
+ - **Commands now work correctly from any subdirectory** (Issue #76)
264
+ - **Problem**: Running commands from subdirectories (like `packages/cli/`) caused failures or incorrect behavior
265
+ - **What was broken**:
266
+ - `vv doctor` reported "workflow file not found" even when the workflow existed at project root
267
+ - `vv generate-workflow` created workflow files in the wrong location
268
+ - Confusing error messages depending on where you ran commands
269
+ - **What's fixed**: All commands now work correctly regardless of which directory you run them from
270
+ - **Commands verified**: validate, state, config, snapshot, history, cleanup, pre-commit, watch-pr, init, run, doctor, generate-workflow
271
+
272
+ ## [0.17.3] - 2025-12-06
273
+
274
+ ### Bug Fixes
275
+
276
+ - **CRITICAL: `vv run` caching completely broken** (Issue #73, Regression in v0.17.0-rc.7, stable releases v0.17.0-v0.17.2)
277
+ - **Problem**: Cache was not working at all - every command executed fully instead of returning cached results
278
+ - **Root Cause**: Security refactoring (commit 778cede, PR #58) passed string literal `'HEAD'` to git notes functions that require hexadecimal tree hashes, causing silent validation failures
279
+ - **Impact**: 312x speedup unavailable for 12 days (Nov 24 - Dec 6, 2025)
280
+ - **Solution**: Changed to use actual tree hash variable instead of `'HEAD'` literal
281
+ - **Affected versions**: v0.17.0, v0.17.1, v0.17.2, and prereleases v0.17.0-rc.7 through rc.13
282
+
283
+ - **Improved nested `vv run` command caching efficiency** (Issue #73 expanded scope)
284
+ - **Previous Behavior**: After the critical cache fix above, nested `vv run` commands worked but created unnecessary duplicate cache entries
285
+ - Running `vv run "vv run 'echo test'"` would store TWO cache entries for the same result
286
+ - Both outer and inner commands would cache independently with different keys
287
+ - Cache worked correctly but accumulated redundant entries over time
288
+ - **Improvement**: Outer `vv run` now skips caching when nested command is detected - only innermost command caches its result
289
+ - **Cleaner cache**: One cache entry per unique command instead of duplicates
290
+ - **Bidirectional caching**: Nested and direct invocations now explicitly share the same single cache entry
291
+ - **Cache hit propagation**: `isCachedResult: true` properly flows from inner to outer results
292
+ - **Transparency**: Added optional `requestedCommand` field showing original wrapped command when it differs from executed command
293
+ - **Technical Details**:
294
+ - Modified `storeCacheResult()` to skip caching when `result.command !== commandString` (indicates nested YAML detected)
295
+ - Added `requestedCommand` optional field to `RunResult` schema (v0.17.3+)
296
+ - Enhanced `mergeNestedYaml()` to preserve transparency about command wrapping
297
+
298
+ - **Fixed `--force` flag not propagating to nested `vv run` commands** (Issue #73 side effect)
299
+ - **Problem**: When running `vv validate --force` or nested `vv run --force` commands, the inner commands still used cached results instead of forcing fresh execution
300
+ - **Root Cause**: The nested caching efficiency fix correctly prevented outer caching, but the `--force` flag wasn't being passed to child processes
301
+ - **Impact**: Users expecting `--force` to bypass ALL caching only saw outer layer bypass - inner commands still used stale cache
302
+ - **Solution**: Added `VV_FORCE_EXECUTION=1` environment variable that propagates naturally through nested commands
303
+ - When `--force` flag is present, set `VV_FORCE_EXECUTION=1` in environment
304
+ - Cache lookup checks for this env var and skips cache when detected
305
+ - Works for both direct `vv run --force` and nested `vv validate --force` scenarios
306
+ - **Verification**: Running `vv validate --force --yaml` now correctly shows `isCachedResult: false` for all validation steps
307
+
308
+ ### Features
309
+
310
+ - **Custom Workflow Support**: Added `ci.disableWorkflowCheck` config option for projects requiring manual workflow customization
311
+ - Set to `true` to suppress "workflow out of sync" warnings from `doctor` command
312
+ - Useful for multi-language projects or custom CI setups that can't use auto-generated workflows
313
+ - See troubleshooting docs at `docs/heterogeneous-projects.md`
314
+
315
+ ### Documentation
316
+
317
+ - Improved `doctor` command error messages with troubleshooting links and workflow regeneration guidance
318
+ - Added comprehensive troubleshooting section for workflow sync issues
319
+ - Claude Code SKILL.md now includes version field that tracks vibe-validate package version
320
+
321
+ ## [0.17.2] - 2025-12-06
322
+
323
+ ### Bug Fixes
324
+
325
+ - **Pre-commit Work Protection Timing**: Fixed execution order in `pre-commit` command to create worktree snapshot BEFORE branch sync checks
326
+ - Previously suggested `git pull`/`git merge` before snapshotting, risking work loss on merge conflicts
327
+ - Snapshot now created immediately after config loading
328
+ - All subsequent git operations are now protected
329
+ - Fixes Issue #69
330
+
331
+ ### Features
332
+
333
+ - **New `snapshot` command**: View current worktree snapshot state and recovery instructions
334
+ - Shows validation status with clarified "Validation Status:" label
335
+ - Provides step-by-step recovery instructions for different scenarios
336
+ - Uses correct program name (vv vs vibe-validate) in suggestions
337
+ - Suggests running `state` command for failed validations
338
+
339
+ ### Internal Improvements
340
+
341
+ - Refactored test helpers to reduce code duplication (51.3% → minimal)
342
+ - Improved process.exit mock handling in snapshot command tests
343
+
344
+ ## [0.17.1] - 2025-12-05
345
+
346
+ ### Features
347
+
348
+ - **Automatic Work Protection**: Every validation creates recoverable snapshots of all files
349
+ - Automatic - no user action required
350
+ - Zero storage overhead - git deduplicates unchanged files
351
+ - Recover work using standard git commands and tree hashes
352
+
353
+ ### Documentation
354
+
355
+ - Added comprehensive Work Protection Guide with recovery scenarios and command cookbook
356
+ - Updated all READMEs and guides to document work protection feature
357
+ - Reorganized Claude Code skill structure for better maintainability
358
+ - Consolidated skill resources to single source of truth in `docs/skill/resources/`
359
+
360
+ ### Known Limitations
361
+
362
+ - **Claude Code Skill**: Auto-installs on `npm install -g` but not on `npm uninstall -g`
363
+ - Upgrading automatically cleans and reinstalls
364
+ - Manual cleanup: `rm -rf ~/.claude/skills/vibe-validate`
365
+ - Only affects global installations
366
+
367
+ ## [0.17.0] - 2025-11-30
368
+
369
+ ### 🚨 BREAKING CHANGES
370
+
371
+ **Default Working Directory Changed to Git Root**
372
+ - Commands now run from git root by default (not `process.cwd()`)
373
+ - Steps with `cwd` field interpret paths relative to git root
374
+ - Improves cache hit rates by 30-50% in monorepos
375
+ - If you relied on running from subdirectories, add explicit `cwd` field to config
376
+ - See "Heterogeneous Project Support" feature below for migration details
377
+
378
+ ### ✨ Features
379
+
380
+ **Smart Version-Aware CLI Wrapper**
381
+ - Automatically detects execution context (dev/local/global)
382
+ - Shows `-dev` suffix for development builds (`vv --version` in workspace)
383
+ - Enhanced `vv doctor` with context labels and semver-aware version checks
384
+ - Debug mode (`VV_DEBUG=1`) shows resolution details
385
+ - Impact: Clear understanding of which vibe-validate version is running
386
+
387
+ **Heterogeneous Project Support (Multi-Language Monorepos)**
388
+ - New `cwd` field runs validation steps from specific directories
389
+ - Paths interpreted relative to git root for consistency
390
+ - Perfect for Java + TypeScript + Python monorepos
391
+ - 30-50% better cache hit rates through path normalization
392
+ - Security: Path traversal prevention built-in
393
+ - GitHub Actions workflow generation includes `working-directory`
394
+ - New documentation: `docs/heterogeneous-projects.md`
395
+ - New template: `config-templates/multi-language.yaml`
396
+
397
+ **Plugin Architecture for Error Extractors**
398
+ - Migrated all 14 extractors to plugin structure with co-located tests/docs
399
+ - Eliminated ~400 lines of duplicated detection logic
400
+ - Extractor registry pattern for easy extension
401
+ - Each plugin includes: detection logic, extraction, samples, tests, docs
402
+ - Impact: Easier to add new test framework support
403
+
404
+ **Secure Git Command Execution**
405
+ - Eliminated all command injection vulnerabilities in git operations
406
+ - New secure execution layer with input validation
407
+ - High-level API functions (`addNote()`, `readNote()`, `removeNote()`)
408
+ - Comprehensive security test suite
409
+ - Impact: Safe git operations, no shell injection risks
410
+
411
+ **Maven Compiler Extractor**
412
+ - Extracts compilation errors from Maven builds
413
+ - Supports file/line/column parsing
414
+ - Impact: Better error extraction for Java projects
415
+
416
+ **Pre-commit Now Detects and Blocks Partially Staged Files**
417
+ - Pre-commit now detects when files have both staged and unstaged changes
418
+ - Prevents validation mismatch where validated code differs from committed code
419
+ - Provides clear remediation steps when detected
420
+ - Impact: Ensures committed code always matches validated code
421
+
422
+ **Pre-commit Now Detects If Current Branch Is Behind Remote**
423
+ - Pre-commit now checks if current branch is behind its remote tracking branch
424
+ - Prevents conflicts from committing while teammates have pushed to the same branch
425
+ - Works for any branch with remote tracking (feature branches, main, etc.)
426
+ - Impact: Prevents merge conflicts and lost work
427
+
428
+ **Meta-Package Delegation to CLI**
429
+ - Fixed `vibe-validate` wrapper scripts to delegate to `@vibe-validate/cli` at runtime
430
+ - Ensures single source of truth for wrapper logic
431
+ - Fixes version detection when installed globally via npm
432
+ - Impact: `vv --version` now correctly shows `-dev` suffix in workspace
433
+
434
+ **Automatic Secret Scanning Tool Detection**
435
+ - Secret scanning now automatically detects available tools (gitleaks, secretlint)
436
+ - Can run multiple scanners simultaneously (defense in depth)
437
+ - Works in containerized environments (Claude Code on the web)
438
+ - Graceful fallback when preferred tool unavailable
439
+ - Impact: Better secret detection across different environments
440
+
441
+ **Auto-Output YAML on Validation Failure**
442
+ - `vv validate` and `vv pre-commit` now automatically output structured YAML on failure
443
+ - Eliminates need for separate `vv state` command
444
+ - Impact: Immediate actionable feedback for both humans and AI agents
445
+
446
+ **Config File Discovery from Subdirectories**
447
+ - Config loader now walks up directory tree to find `vibe-validate.config.yaml`
448
+ - Impact: Run `vv validate` from any subdirectory within your project
449
+
450
+ ### 🐛 Bug Fixes
451
+
452
+ **Suppressed Alarming Schema Validation Warnings for Legacy History**
453
+ - Silently skip corrupted legacy entries from rc.9 (0/0 line/column values)
454
+ - Clean validation output without repeated warnings
455
+ - Users can cleanup with: `vv history prune --all`
456
+
457
+ **Fixed Misleading "0 test failure(s)" for Killed Processes**
458
+ - Killed processes (from fail-fast) now show meaningful extraction
459
+ - Summary: "Process stopped (fail-fast)"
460
+ - Impact: Clear understanding of fail-fast behavior
461
+
462
+ **Fixed Broken Validation History in Jest-Based Projects**
463
+ - Jest extractor now sets line/column to `undefined` when location unavailable
464
+ - Prevents schema validation warnings and corrupted history
465
+ - Impact: Jest projects no longer produce corrupted validation history
466
+
467
+ **Fixed Incorrect Extractor Selection in Multi-Language Projects**
468
+ - Maven test output no longer misdetected as Jasmine tests
469
+ - Increased Maven Surefire priority above Jasmine
470
+ - Impact: Maven projects now correctly extract test failures
471
+
472
+ **Fixed Doctor Command Legacy History Detection**
473
+ - No longer reports false positives for "Legacy validation history detected"
474
+ - Only warns when actual legacy `.vibe-validate-state.yaml` entries exist
475
+ - Impact: Accurate diagnosis for fresh installations
476
+
477
+ **Fixed `vv run` Cache Regression**
478
+ - Restored v0.16.1 behavior - cache keys include invocation directory
479
+ - Prevents false cache hits from different directories
480
+ - Impact: Reliable caching for subdirectory workflows
481
+
482
+ **Fixed Extractor Schema Compliance**
483
+ - Jest extractor now properly sets `line`/`column` to `undefined` when unavailable
484
+ - Prevents "line: Number must be greater than 0" schema violations
485
+ - Impact: No more corrupted validation history in Jest projects
486
+
487
+ ### 🔒 Security
488
+
489
+ **Eliminated Git Command Injection Vulnerabilities**
490
+ - Fixed shell piping vulnerability in git notes cleanup
491
+ - Fixed heredoc injection in git notes operations
492
+ - All git commands now use secure spawn with array arguments
493
+ - Comprehensive input validation for refs, hashes, and paths
494
+ - Impact: Protection against command injection attacks
495
+
496
+ ## [0.16.1] - 2025-11-21
497
+
498
+ ### 🐛 Bug Fixes
499
+
500
+ **Config Error Reporting**
501
+ - `vibe-validate validate` now shows specific validation errors when config file exists but is invalid
502
+ - Previously showed generic "No configuration found" message for both missing files and invalid configs
503
+ - Now matches `vibe-validate doctor` behavior with clear error messages and fix suggestions
504
+
505
+ ## [0.16.0] - 2025-11-15
506
+
507
+ ### 🚨 BREAKING CHANGES
508
+
509
+ **Regenerate GitHub Actions Workflows**
510
+ - Run `vibe-validate generate-workflow` to regenerate `.github/workflows/validate.yml`
511
+ - New phase-based job grouping reduces GitHub Actions runner usage by 40-70%
512
+ - Commit and push the updated workflow file
513
+
514
+ **`parallel` Flag Now Works**
515
+ - The `parallel` flag was defined in config but never implemented - it was silently ignored
516
+ - Now properly controls CI job grouping:
517
+ - `parallel: false` - Steps run in ONE job (cost-effective, recommended default)
518
+ - `parallel: true` - Each step runs in separate job (faster for slow steps)
519
+ - Local validation unchanged, only affects CI workflows
520
+
521
+ ### ✨ New Features
522
+
523
+ **Phase-Based CI Job Grouping**
524
+ - Reduces GitHub Actions runner usage by 40-70% for most projects
525
+ - Example: TypeScript project goes from 3 runners → 1 runner (67% reduction)
526
+ - When to use:
527
+ - `parallel: false` - Fast steps (< 30s), minimize runner startup overhead
528
+ - `parallel: true` - Slow steps (1+ min), need true parallelism
529
+
530
+ **Example Config**:
531
+ ```yaml
532
+ validation:
533
+ phases:
534
+ - name: Pre-Qualification
535
+ parallel: false # All steps in 1 job
536
+ steps:
537
+ - name: TypeScript
538
+ command: pnpm typecheck
539
+ - name: ESLint
540
+ command: pnpm lint
541
+ - name: Testing
542
+ parallel: true # Each step separate job (if multiple)
543
+ steps:
544
+ - name: Tests
545
+ command: pnpm test
546
+ ```
547
+
548
+ ### 🐛 Bug Fixes
549
+
550
+ - **CRITICAL**: Fixed unimplemented `parallel` flag - now actually controls CI job grouping as documented
551
+
552
+ ### 🎯 Migration Guide
553
+
554
+ 1. Check your config: `grep "parallel:" vibe-validate.config.yaml`
555
+ 2. Decide strategy: `parallel: false` (recommended) or `parallel: true` (for slow steps)
556
+ 3. Regenerate: `vibe-validate generate-workflow`
557
+ 4. Review: `git diff .github/workflows/validate.yml`
558
+ 5. Commit and push
559
+
560
+ ## [0.15.0] - 2025-11-12
561
+
562
+ Major update bringing run command caching, code quality enforcement, smart defaults, and enhanced AI agent integration.
563
+
564
+ ### 🚨 BREAKING CHANGES
565
+
566
+ **Schema Changes**
567
+ - Validate results, validate steps, and run results now share common schema elements for consistency
568
+ - Extensive changes to the schema to reduce redundancy that can consume LLM tokens and to support enhancements, e.g. with outputFiles visibility
569
+
570
+ **Git Notes Paths Changed**
571
+ - Validation history: `runs/{hash}` → `validate/{hash}`
572
+ - Added new run cache location for `vv run` command caching
573
+ - Old v0.14.x history won't display (still exists, just hidden)
574
+ - Run `vibe-validate history prune --all` to clean up old entries (optional)
575
+
576
+ **Run Command Behavior**
577
+ - `vv run` now returns cached results by default when code unchanged
578
+ - Use `--force` flag to bypass cache and always re-execute
579
+ - Use `--check` flag to query cache status without running
580
+
581
+ ### ✨ New Features
582
+
583
+ **Smart Command Wrapper with `vv` Alias**
584
+ - New `vv` binary provides shortest invocation for all commands
585
+ - Context-aware execution: automatically detects dev mode, local install, or global install
586
+ - Works seamlessly in both git and non-git directories
587
+ - Example: `vv run pytest tests/` instead of `npx vibe-validate run "pytest tests/"`
588
+ - Global installs now correctly expose both `vv` and `vibe-validate` commands
589
+
590
+ **Run Command Caching**
591
+ - Smart caching by git tree hash - instant results (<200ms) for unchanged code
592
+ - Works in ANY language (Python, Rust, Go, etc.) - no config required
593
+ - Flags: `--force` (bypass cache), `--check` (query cache status), `--debug` (show outputFiles)
594
+ - 90-95% context window reduction for AI agents when extracting supported formats
595
+ - YAML frontmatter detection enables nested `vv run` command composition
596
+
597
+ **Smart outputFiles Visibility**
598
+ - New `--debug` flag for validate and run commands controls output verbosity
599
+ - Step-level outputFiles: Only shown for failed steps or with `--debug`
600
+ - Top-level outputFiles: Only shown with `--debug` flag
601
+ - Commands wrapped with `vv run` always show outputFiles for downstream processing
602
+ - Significantly reduces token usage for AI agents (only show logs when needed)
603
+
604
+ **Enhanced History and State Commands**
605
+ - `history show` now defaults to current tree hash (no argument needed)
606
+ - `state` command intelligently shows run cache when no validation config exists
607
+ - Added `--runs` flag to state: show only run cache entries
608
+ - Added `--all` flag to state: show both validation history and run cache
609
+ - `history show <hash> --all` - View validation runs + all cached run results
610
+ - `history list --run` - List all run cache entries with newest first
611
+ - `history prune --run` - Clean up run cache entries
612
+
613
+ **Schema Type Safety & IDE Support**
614
+ - 5 JSON Schema files published to npm and available via unpkg CDN
615
+ - All result schemas use `.strict()` mode (prevents typos/unknown fields)
616
+ - `vibe-validate init` generates version-pinned schema URLs for IDE autocomplete
617
+ - Example: `$schema: https://unpkg.com/@vibe-validate/config@0.15.0/config.schema.json`
618
+ - Stable URLs with version matching prevent breakage
619
+
620
+ **TreeHash Deduplication**
621
+ - Removed duplicate treeHash from nested results in history/state output
622
+ - TreeHash now only appears at root level to save tokens
623
+ - Created shared `tree-hash-output.ts` utility for consistent formatting
624
+
625
+ ### 🎨 Improvements
626
+
627
+ **Natural Command-Line Syntax for `run`**
628
+ - `vv run echo test` now works naturally without quotes
629
+ - Options pass through correctly: `vv run eslint --max-warnings 0 src/`
630
+ - Old quoted syntax still works for backwards compatibility: `vv run "npm test"`
631
+
632
+ **Cleaner Help Output**
633
+ - Replaced `---` section separators with `***` to avoid YAML front matter confusion
634
+ - YAML document start markers (`---`) remain in code examples where appropriate
635
+
636
+ **Simplified History Commands**
637
+ - Removed redundant `--all` flag from `history list --run`
638
+ - More intuitive interface with sensible defaults
639
+
640
+ **YAML Output Format**
641
+ - Always include trailing `---` separator in `vv run` output (RFC 4627 compliant)
642
+ - Provides deterministic parsing boundaries for LLMs and YAML parsers
643
+ - Improves extraction accuracy and standards compliance
644
+
645
+ **TypeScript Bin Wrapper Refactor**
646
+ - Converted shell script wrappers to TypeScript for type safety
647
+ - Eliminated 132 lines of duplication between `vibe-validate` and `vv` binaries
648
+ - Single source of truth with full type safety and JSDoc comments
649
+ - Cleaner build process and git history
650
+
651
+ **Reduced Code Duplication**
652
+ - Created shared utilities for common patterns:
653
+ - `test-framework-utils.ts` - Shared test extraction logic
654
+ - `yaml-output.ts` - Consistent YAML formatting
655
+ - `fs-utils.ts` - Reusable filesystem operations
656
+ - Refactored CLI commands to use shared utilities
657
+ - Lowered jscpd detection thresholds (min-lines: 5, min-tokens: 50)
658
+
659
+ ### 🐛 Bug Fixes
660
+
661
+ **YAML Separator Consistency**
662
+ - Fixed inconsistent trailing separator behavior in `vv run` output
663
+ - Now always includes both opening and closing `---` separators
664
+ - Updated all test mocks and parsing helpers to handle consistent format
665
+
666
+ **Process Management**
667
+ - Fixed critical timeout bug preventing hung child processes (581s → 87s validation)
668
+ - Added timeout safeguards with proper cleanup
669
+ - Fixed stdin hanging issues with centralized spawn utility
670
+
671
+ **Generic Extractor**
672
+ - Fixed totalCount bug in error counting
673
+
674
+ **Test Infrastructure**
675
+ - Removed noisy "Failed to parse nested YAML" warning (expected for nested `vv run`)
676
+ - Extracted Commander test setup helper (refactored 10 test files)
677
+ - Created integration test helpers (3 new modules, 296 lines of reusable code)
678
+
679
+ ### 📚 Documentation
680
+
681
+ **New Documentation**
682
+ - `docs/schemas.md` - Complete JSON Schema reference
683
+ - `docs/ci-debugging.md` - Comprehensive `--debug` flag usage guide (82 lines)
684
+ - Migration guide for upgrading from v0.14.x
685
+ - Version management workflow in CLAUDE.md
686
+
687
+ **Updated Documentation**
688
+ - Updated CLI reference with natural syntax examples
689
+ - Added `--debug` flag documentation with CI debugging examples
690
+ - Updated VALIDATION-STATE-EXAMPLES.md with new output format
691
+ - Claude Code plugin docs with v0.15.0 caching behavior
692
+
693
+ ## [0.14.3] - 2025-10-30
694
+
695
+ ### 🐛 Bug Fixes
696
+
697
+ - **CRITICAL: Fixed Jest detection failures with real-world output** (Issue #43)
698
+ - **Problem**: Large Jest output (1.7 MB, 28k lines) from facebook/jest monorepo was misdetected as Mocha or Vitest due to bullet spacing and detection order bugs
699
+ - **Solution**: Removed space requirement from bullet marker detection and moved Jest detection before Mocha (more distinctive patterns checked first). Added regression tests with real-world samples.
700
+ - **Impact**: Jest output now correctly detected (confidence 90) with all errors extracted
701
+
702
+ ## [0.14.2] - 2025-10-27
703
+
704
+ ### 🐛 Bug Fixes
705
+
706
+ - **CRITICAL: Fixed broken `init` command** (Issue #36 - complete fix)
707
+ - **Problem**: `vibe-validate init` still failed with "template not found" despite v0.14.1 fix
708
+ - **Solution**: Moved templates permanently to `packages/cli/config-templates/` and fixed path resolution in both `init.ts` and `template-discovery.ts`
709
+ - **Impact**: `vibe-validate init` now works reliably for all users
710
+
711
+ ### ✨ Improvements
712
+
713
+ - **Enhanced `config` command error reporting**
714
+ - Config command now shows detailed validation errors with field names, expected types, and helpful suggestions
715
+ - Consistent error messages across `config` and `doctor` commands
716
+
717
+ ### 🧪 Testing
718
+
719
+ - Added 23 comprehensive regression tests covering `init`, `config`, and `doctor` commands
720
+ - Added end-to-end packaging test that validates template discovery at runtime
721
+
722
+ ## [0.14.1] - 2025-10-27
723
+
724
+ ### 🐛 Bug Fixes
725
+
726
+ - **CRITICAL: Fixed broken `init` command** (Issue #36)
727
+ - **Problem**: `vibe-validate init` was completely broken for new users installing from npm
728
+ - Error: "template 'minimal' not found"
729
+ - Available templates: empty list
730
+ - **Solution**: Config templates are now properly packaged with the CLI. Added comprehensive packaging tests (unit + system) to prevent regression.
731
+ - **Impact**: `vibe-validate init` now works correctly for all users
732
+
733
+ ## [0.14.0] - 2025-10-27
734
+
735
+ ### ✨ New Features
736
+
737
+ - **NEW: `run` Command for AI Agents** (Issue #32)
738
+ - **Problem**: AI agents (Claude Code, Cursor, Aider) were overwhelmed by verbose test output, wasting 90-95% of their context window on noise
739
+ - **Solution**: New `vibe-validate run "<command>"` wraps any command and extracts only the errors in clean YAML format
740
+ - **Impact**:
741
+ - Saves 90-95% of AI agent context window (1500 tokens → 75 tokens)
742
+ - Works with ANY command, not just validation steps
743
+ - Automatic tool detection (Jest, Vitest, Playwright, TypeScript, ESLint, etc.)
744
+ - Detects nested `vibe-validate run` calls and merges YAML output (2-10+ levels deep)
745
+ - Routes package manager noise (pnpm/npm/yarn) to stderr, keeps stdout pure YAML
746
+ - **Example**:
747
+ ```bash
748
+ # Instead of overwhelming output:
749
+ npx vitest failing-test.ts
750
+ # 200+ lines of verbose output...
751
+
752
+ # Get clean, LLM-friendly errors:
753
+ vibe-validate run "npx vitest failing-test.ts"
754
+ # Output: 4-5 lines showing what failed and next steps
755
+ ```
756
+ - **Use cases**:
757
+ - Test single file: `vibe-validate run "npx vitest <file>"`
758
+ - Type checking: `vibe-validate run "pnpm typecheck"`
759
+ - Linting: `vibe-validate run "pnpm lint"`
760
+ - Any command that outputs errors
761
+ - See `vibe-validate run --help` for details
762
+
763
+ ### 🐛 Bug Fixes
764
+
765
+ - **CRITICAL: Fixed Jest, Vitest, and Playwright Error Extraction**
766
+ - **Problem**: Test failure extraction was broken for three major test frameworks
767
+ - Jest: Only extracting 1 error when 27 failures present
768
+ - Vitest: Extracting 0 errors due to missing ANSI stripping
769
+ - Playwright: Detection completely missing from smart-extractor
770
+ - **Root causes**:
771
+ - ANSI color codes (e.g., `\x1b[31m`) were breaking regex pattern matching
772
+ - Wrong Unicode symbols used (× vs ✕) causing misrouting between Jest/Vitest
773
+ - Test framework detection was missing or using incorrect patterns
774
+ - Source code in stack traces triggered false positive detections
775
+ - **Solution**: Complete extractor detection overhaul
776
+ - **Central ANSI stripping**: All extractors now receive clean, parseable input (DRY, fail-safe)
777
+ - **Pattern-based detection**: Tool detection based on actual output patterns, not step names
778
+ - **Correct symbol detection**: Vitest uses × (U+00D7), Jest uses ✕ (U+2715)
779
+ - **Detection order matters**: More specific patterns checked first (Playwright `.spec.ts` before Jest/Vitest `.test.ts`)
780
+ - **Multi-pattern requirement**: Requires multiple patterns together to prevent false positives
781
+ - **Impact**:
782
+ - ✅ Jest: Now correctly extracts all 27 errors
783
+ - ✅ Vitest: Now correctly extracts all 14 errors
784
+ - ✅ Playwright: Now correctly extracts all 11 errors
785
+ - ✅ Extraction works reliably with real command output (not just clean test fixtures)
786
+
787
+ - **Detection Metadata for Transparency**
788
+ - **Problem**: No way to verify which error extractor was actually used
789
+ - **Solution**: Every extraction now includes metadata showing:
790
+ - Which extractor was chosen (jest, vitest, playwright, etc.)
791
+ - Detection confidence level (0-100)
792
+ - Patterns that matched
793
+ - Reason for detection
794
+ - **Impact**: Makes debugging extraction issues much easier
795
+
796
+ ### ♻️ Refactoring
797
+
798
+ - **Function rename**: `extractByStepName` → `autoDetectAndExtract`
799
+ - **Problem**: Old name suggested step names controlled routing (they don't - detection is 100% pattern-based)
800
+ - **Solution**: Renamed to accurately reflect auto-detection from output patterns
801
+ - **Impact**: Clearer API, better documentation
802
+
803
+ ### 🔒 Security
804
+
805
+ - **SonarCloud Security Hotspots Resolved**
806
+ - **Problem**: Shell command execution in file operations flagged as security risk
807
+ - **Solution**:
808
+ - Replaced `execSync('cp ...')` with `fs.copyFileSync()` in tree-hash calculation
809
+ - Replaced `execSync('rm -f ...')` with `fs.unlinkSync()`
810
+ - Added comprehensive NOSONAR justifications documenting threat model
811
+ - Enhanced SECURITY.md with command execution security model
812
+ - **Impact**:
813
+ - Prevents potential command injection in file paths
814
+ - All security hotspots reviewed and resolved
815
+ - Clear documentation of security design decisions
816
+
817
+ - **SonarCloud Configuration Added**
818
+ - **Problem**: Test files flagged for code duplication (28.4%)
819
+ - **Solution**: Created `sonar-project.properties` to exclude test files from duplication checks
820
+ - **Rationale**: Test code duplication is acceptable and often necessary for test clarity and independence
821
+ - **Impact**: Quality gate focuses on production code quality, not test patterns
822
+
823
+ ### 🧪 Testing
824
+
825
+ - **System Test Infrastructure** (3-tier strategy)
826
+ - **Problem**: Unit tests passed but extractors failed with real command output
827
+ - **Solution**: Added system test layer that runs actual commands (Jest, Vitest, Playwright, TypeScript)
828
+ - **Impact**: Catches real-world extraction bugs that unit tests miss
829
+ - **Test tiers**:
830
+ - **Unit tests** (pnpm test): Fast (10s), mocked, pre-commit
831
+ - **Integration tests** (included): Medium (30s), fast real commands
832
+ - **System tests** (pnpm test:system): Slow (3-5min), full real commands, pre-release
833
+ - **Coverage**: 211 unit tests + 15 system tests + 7 sample tests (all passing)
834
+
835
+ ## [0.13.0] - 2025-10-26
836
+
837
+ ### ✨ New Features
838
+
839
+ - **Smart Locking System for Concurrency Control**
840
+ - **Problem**: Multiple validation runs (different terminals, worktrees) could conflict with shared resources like ports or databases
841
+ - **Solution**: Configurable locking system with wait-for-completion mode
842
+ - **Impact**: Prevents duplicate validation runs and resource conflicts
843
+ - **Key capabilities**:
844
+ - Enabled by default - only one validation runs at a time
845
+ - Wait mode (default): New runs wait for existing validation to complete
846
+ - Project-scoped locking: Share locks across worktrees when using fixed ports/databases
847
+ - Directory-scoped locking (default): Each directory has its own lock for parallel worktrees
848
+ - Auto-detection of project ID from git remote or package.json
849
+ - CLI flags: `--no-lock`, `--no-wait`, `--wait-timeout <seconds>`
850
+ - **Configuration**:
851
+ ```yaml
852
+ locking:
853
+ enabled: true # Default: true
854
+ concurrencyScope: directory # "directory" (default) or "project"
855
+ projectId: my-app # Optional: auto-detected
856
+ ```
857
+ - **Use cases**:
858
+ - Directory scope: No shared resources, parallel worktrees OK
859
+ - Project scope: Tests use fixed ports (3000, 8080) or shared databases
860
+ - Disable: CI environments with isolated containers
861
+ - See `docs/locking-configuration.md` for details
862
+
863
+ ### ♻️ Refactoring
864
+
865
+ - **Cross-platform pre-publish script** (Windows compatibility)
866
+ - **Change**: Converted `tools/pre-publish-check.sh` (bash) to `tools/pre-publish-check.js` (Node.js)
867
+ - **Impact**: Pre-publish checks now work on Windows without WSL/Git Bash
868
+ - **Benefits**: Consistent behavior across Windows, macOS, and Linux
869
+
870
+ - **Cleaned up legacy state file references**
871
+ - Removed deprecated `validate:force` script from package.json
872
+ - Updated bug report template to request `vibe-validate state --yaml` output
873
+ - Added Claude Code Stop hook for automatic validation
874
+ - Remaining references are intentional (migration support, tests, documentation)
875
+
876
+ ## [0.12.2] - 2025-10-25
877
+
878
+ ### ✨ New Features
879
+
880
+ - **Comprehensive Test Framework Support** (Issue #28)
881
+ - **Jest**: Full error extraction for Jest test framework
882
+ - Supports all error types (assertions, timeouts, file errors, type errors)
883
+ - 107% extraction rate on comprehensive test suite
884
+ - **JUnit XML**: Universal test format support
885
+ - Auto-detection via XML format markers
886
+ - HTML entity decoding for clean error messages
887
+ - 100% extraction on comprehensive samples
888
+ - **Mocha**: Native Mocha test output support
889
+ - Distinctive format detection (X passing/failing)
890
+ - Stack trace parsing for file locations
891
+ - 100% extraction (17/17 tests)
892
+ - **Jasmine**: Angular ecosystem support (1.51M weekly downloads)
893
+ - Message:/Stack: section parsing
894
+ - Distinctive "Failures:" header detection
895
+ - 100% extraction (15/15 tests)
896
+ - **TAP (Test Anything Protocol)**: Industry standard format
897
+ - Covers Tape, node-tap, and TAP-compatible frameworks
898
+ - YAML diagnostics block parsing
899
+ - 100% extraction (21/21 tests)
900
+ - **Ava**: Node.js community favorite (272K weekly downloads)
901
+ - Two-pass parsing for reliable extraction
902
+ - Unicode symbol detection (✘ [fail]:)
903
+ - Quality metadata integration
904
+ - **Playwright**: Modern E2E testing framework
905
+ - Numbered failure block parsing
906
+ - Stack trace extraction for file locations
907
+ - Error type detection (assertions, timeouts, element not found, navigation)
908
+ - 100% extraction (22/22 tests)
909
+
910
+ - **Extraction Quality Metadata System**
911
+ - Self-reporting quality metrics for all extractors
912
+ - Confidence scores (0-100) based on pattern match quality
913
+ - Completeness tracking (% of failures with complete info)
914
+ - Issue reporting for debugging extraction problems
915
+ - Enables continuous improvement of extractors
916
+
917
+ - **Test Framework Documentation**
918
+ - `packages/extractors/FORMATS.md` - Complete format reference
919
+ - Format examples for all extractors
920
+ - Regex patterns and edge cases documented
921
+ - Testing guidelines for contributors
922
+ - Sample format requirements
923
+
924
+ - **Smart Extraction Performance**
925
+ - Extractors only run on FAILED validation steps (not on success)
926
+ - Minimal performance impact: ~10ms per failed step
927
+ - Success paths remain fast (<100ms with caching)
928
+
929
+ ### 🐛 Bug Fixes
930
+
931
+ - **CRITICAL: Fixed Vitest Format 2 extraction** (was getting 0% extraction)
932
+ - **Problem**: Vitest extractor only supported legacy Format 1 (file path in failure line)
933
+ - **Solution**: Added Format 2 support (file path in header line from `vitest run`)
934
+ - **Impact**: Extractor now works with current Vitest output format
935
+ - Prevents duplicate extraction when both formats present
936
+ - `watch-pr` command now correctly extracts CI validation failures
937
+
938
+ - **CRITICAL: Fixed flaky test** (`validate.test.ts`)
939
+ - **Problem**: Test would randomly fail due to mock state pollution across test runs
940
+ - **Root Cause**: Cross-file test pollution - `pre-commit.test.ts` missing `vi.clearAllMocks()` in `beforeEach`
941
+ - **Solution**: Added proper mock cleanup in both test files
942
+ - **Impact**: All 865 tests now pass consistently with zero flakiness
943
+
944
+ - **Fixed Jest project name parsing in FAIL line**
945
+ - Now correctly handles Jest project prefixes in failure output
946
+ - Improves extraction accuracy for monorepo projects
947
+
948
+ ### 📦 Internal Changes
949
+
950
+ - Adjusted coverage threshold (85% → 84%) to accommodate new extractor code
951
+ - Added comprehensive test-bed infrastructure for all frameworks
952
+ - Created real-world failure samples for regression testing
953
+ - Updated smart extractor with auto-detection for all new frameworks
954
+
955
+ ## [0.12.1] - 2025-10-24
956
+
957
+ ### 🐛 Bug Fixes
958
+
959
+ - **CRITICAL: Fixed npm publish process** - v0.12.0 publishing issue
960
+ - **Problem**: Packages published with `npm publish` didn't resolve `workspace:*` dependencies, making them uninstallable
961
+ - **Solution**: Re-published using `pnpm publish -r` which correctly resolves workspace dependencies to versioned dependencies
962
+ - **Impact**: Packages are now installable via `npm install @vibe-validate/cli@0.12.1`
963
+ - **v0.12.0 deprecated**: Do not use v0.12.0 - it has broken dependencies
964
+
965
+ ## [0.12.0] - 2025-10-23 [DEPRECATED - Use 0.12.1]
966
+
967
+ ### 🚨 BREAKING CHANGES
968
+
969
+ - **State File Deprecated - Git Notes-Based Caching**
970
+ - **Problem**: `.vibe-validate-state.yaml` file only cached one tree hash, limiting cache effectiveness
971
+ - **Solution**: Git notes provide content-based caching across branches
972
+ - **Impact**: Run `vibe-validate doctor` after upgrade to detect and remove deprecated files
973
+ - **Migration**: Delete `.vibe-validate-state.yaml` and remove from `.gitignore`
974
+ - Better cache hits across branch switches, reverts, and multiple branches
975
+ - No more cache misses from branch changes when code is identical
976
+
977
+ - **Formatters Package Replaced by Extractors Package**
978
+ - **Problem**: Old `@vibe-validate/formatters` package had unclear naming and limited extraction capabilities
979
+ - **Solution**: New `@vibe-validate/extractors` package with improved error parsing and LLM optimization
980
+ - **Impact**: Internal architecture change - no user action required (automatic with upgrade)
981
+ - **Benefits**:
982
+ - Smarter extraction (only runs on failed tests)
983
+ - Better test framework support (Vitest, Jest, ESLint, TypeScript)
984
+ - Quality metrics for contributors
985
+ - 90% smaller output storage
986
+
987
+ ### ✨ New Features
988
+
989
+ - **Validation History Tracking** (Issue #23)
990
+ - `vibe-validate history list` - View validation timeline across all tree hashes
991
+ - `vibe-validate history show <hash>` - Inspect specific validation results
992
+ - `vibe-validate history prune` - Cleanup old history (by age or all)
993
+ - `vibe-validate history health` - Check git notes storage health
994
+ - Multi-run support per tree hash (tracks every validation run)
995
+ - Worktree stability checks (before/after validation)
996
+ - Output truncation (10KB max per step)
997
+
998
+ - **Enhanced `vibe-validate state` Command**
999
+ - Now reads from git notes instead of state file
1000
+ - Same command, same output format, better caching
1001
+ - Displays most recent validation for current tree hash
1002
+ - Compatible YAML output format maintained
1003
+
1004
+ - **Pre-commit Secret Scanning** (Issue #24)
1005
+ - **Problem**: Developers accidentally commit API keys, tokens, and passwords to git
1006
+ - **Solution**: Configurable pre-commit secret scanning blocks commits containing secrets
1007
+ - **Impact**: Prevents credential leaks before they enter git history
1008
+ - Tool-agnostic design via `scanCommand` configuration
1009
+ - Gitleaks recommended (fast, free, 160+ secret types)
1010
+ - Advisory doctor check ensures scanner is installed
1011
+ - Comprehensive false positive management (baseline, .gitleaksignore, inline comments)
1012
+ - All config templates include secret scanning by default
1013
+ - Pre-commit only (GitHub already scans repos after push)
1014
+
1015
+ - **Developer Feedback Mode** (`developerFeedback: true`)
1016
+ - **Problem**: Error extraction ran on all tests and exposed quality metrics to end users
1017
+ - **Solution**: Smart extraction that only runs when needed and reports quality when helpful
1018
+ - **How it works**:
1019
+ - Extractors only run on failed tests (skip passing tests entirely)
1020
+ - Extraction quality metrics only included when `developerFeedback: true`
1021
+ - Alert "vibe-validate improvement opportunity" when extraction quality < 50%
1022
+ - **Impact**:
1023
+ - Faster validation (skip ~10ms extraction per passing test)
1024
+ - Cleaner YAML output for end users (no extraction noise)
1025
+ - Reduced LLM context window usage (only actionable failures)
1026
+ - Clear separation: end-user mode vs contributor mode
1027
+ - **For contributors**: Set `developerFeedback: true` to help improve vibe-validate extractors
1028
+
1029
+ - **YAML Output Separator for LLM-Friendly Parsing** (RFC 4627 compliant)
1030
+ - **Problem**: When using `--yaml` flag, progress messages on stderr mix with YAML on stdout in terminal view
1031
+ - **Solution**: Added standard `---` separator before YAML output to mark boundary
1032
+ - **Impact**:
1033
+ - Clear visual separation between progress and data
1034
+ - Easy extraction: `sed -n '/^---$/,$p'` gets pure YAML
1035
+ - Standards-compliant (YAML document separator)
1036
+ - LLMs can deterministically parse output
1037
+ - **Recommendation**: Use `pnpm validate --yaml` for LLM workflows (see CLAUDE.md)
1038
+
1039
+ - **3 New Doctor Health Checks** (15 total checks now):
1040
+ - Detects deprecated `.vibe-validate-state.yaml` file
1041
+ - Warns if state file still in `.gitignore`
1042
+ - Checks validation history health (git notes)
1043
+ - Suggests cleanup when needed
1044
+
1045
+ ### 🐛 Bug Fixes
1046
+
1047
+ - **CRITICAL: Fixed Git Tree Hash Calculation** (Improved cache reliability and security)
1048
+ - **Problem**: Unstaged file changes weren't included in tree hash, causing false cache hits
1049
+ - **Solution**: Removed `--intent-to-add` flag that prevented content from being staged
1050
+ - **Impact**: Cache now correctly invalidates when files change, preventing stale validation results
1051
+
1052
+ - **SECURITY: Fixed .gitignore Handling in Tree Hash**
1053
+ - **Problem**: `--force` flag included ignored files (secrets, credentials) in tree hash
1054
+ - **Solution**: Removed `--force` flag to respect .gitignore rules
1055
+ - **Impact**: Secrets no longer checksummed, cache sharing works reliably across developers
1056
+
1057
+ - **Fixed Git Tree Hash Error Handling**
1058
+ - Git stderr now properly captured (was being ignored)
1059
+ - Non-git repositories now handled gracefully
1060
+ - Proper fallback to timestamp-based hash
1061
+ - `vibe-validate state` exits 0 in non-git repos
1062
+
1063
+ - **CRITICAL: Fixed Pre-Commit Caching Bug** (v0.11.0 regression)
1064
+ - **Problem**: Pre-commit hook bypassed git tree hash caching, always running full validation (30+ seconds) even when code unchanged
1065
+ - **Root Cause**: `pre-commit.ts` called `runValidation()` directly instead of reusing `validate.ts` workflow with caching logic
1066
+ - **Solution**: Extracted shared `validate-workflow.ts` used by both commands - true code reuse with all caching/history features
1067
+ - **Impact**:
1068
+ - Pre-commit now gets instant cache hits (same as `validate` command)
1069
+ - 30+ seconds reduced to <100ms when validation already passed
1070
+ - All future validate improvements automatically apply to pre-commit
1071
+ - Reduced code duplication (validate.ts: 276 → 60 lines)
1072
+ - **If you experienced slow pre-commit in v0.11.0, this is now fixed**
1073
+
1074
+ ### ⚡ Performance Improvements
1075
+
1076
+ - **90% Reduction in Git Notes Storage Size**
1077
+ - **Problem**: Failed validation output stored raw (100+ lines of environment variables, verbose test output)
1078
+ - **Solution**: Extract actionable failures before storing (5-10 lines of clean, structured errors)
1079
+ - **Impact**:
1080
+ - Git notes operations are faster
1081
+ - `vibe-validate state` shows clean, LLM-friendly errors immediately
1082
+ - Less disk space used for validation history
1083
+ - Critical metadata (pass/fail, recovery commands) always available even if output truncated
1084
+
1085
+ - **Truncation-Safe YAML Output**
1086
+ - **Problem**: If YAML output was truncated, critical recovery information could be lost
1087
+ - **Solution**: Verbose fields (error output) placed at end of YAML structure
1088
+ - **Impact**: YAML remains parseable and actionable even if truncated by logs or display tools
1089
+
1090
+ ### 📝 Documentation
1091
+
1092
+ - **LLM-Optimized Workflow Guide** (CLAUDE.md)
1093
+ - New section explaining best practices for AI assistants
1094
+ - `validate --yaml` recommended over two-step `validate` + `state`
1095
+ - Examples of parsing YAML from mixed stderr/stdout
1096
+ - Benefits: context-efficient, machine-parseable, human-readable progress
1097
+
1098
+ - **"Run Doctor After Upgrade" Pattern** - Documented for AI agents
1099
+ - CLAUDE.md: Prominent upgrade workflow section
1100
+ - README.md: Added doctor to Quick Start (4 steps)
1101
+ - Pattern: `upgrade → doctor → fix → verify → commit`
1102
+
1103
+ - **Updated Agent Integration Guide**
1104
+ - All examples use `vibe-validate state` command
1105
+ - Python and Node.js examples updated
1106
+ - Added note: "Validation state stored in git notes (not files)"
1107
+
1108
+ - **Auto-Synced CLI Reference**
1109
+ - Updated with new `history` commands
1110
+ - Perfect sync with `--help --verbose` output
1111
+
1112
+ ## [0.11.0] - 2025-10-20
1113
+
1114
+ ### ✨ New Features
1115
+
1116
+ - **Real-time CI Monitoring with `watch-pr` Command** (Issue #21)
1117
+ - Monitor GitHub Actions PR checks in real-time
1118
+ - Auto-detects PR from current branch or accepts PR number
1119
+ - Extracts vibe-validate state files from failed CI runs
1120
+ - Provides actionable recovery commands
1121
+ - Supports fail-fast mode and configurable timeout
1122
+ - Human-friendly live display OR structured YAML output
1123
+
1124
+ - **YAML-Only Output Standardization** (BREAKING CHANGE)
1125
+ - Removed confusing `--format` and `--json` options from all commands
1126
+ - Single `--yaml` flag across all commands for structured output
1127
+ - Clear semantics: `--yaml` means exactly what it says
1128
+ - Affected commands: `doctor`, `sync-check`, `cleanup`, `watch-pr`
1129
+
1130
+ - **Windows Compatibility** (Issue #4)
1131
+ - Cross-platform shell execution (`shell: true`)
1132
+ - Platform-specific process termination (taskkill on Windows, signals on Unix)
1133
+ - Windows CI testing (Ubuntu + macOS + Windows × Node 20 + 22 + 24)
1134
+ - Fixed ESLint glob patterns for Windows
1135
+ - Comprehensive line ending normalization
1136
+
1137
+ ### 🐛 Bug Fixes
1138
+
1139
+ - **Fixed Incomplete Schema** (discovered during strict validation implementation)
1140
+ - Added missing `validation.failFast` field to schema (was used by code but not in schema)
1141
+ - Added missing `description` field to ValidationStepSchema (for documenting what steps do)
1142
+ - These fields were being used in configs but silently ignored - now properly validated
1143
+ - Updated all config templates to include these fields with helpful comments
1144
+
1145
+ - **Cross-Platform Compatibility Fixes**
1146
+ - Fixed stdout/stderr capture on Windows (disabled detached mode)
1147
+ - Fixed line ending differences (CRLF vs LF) across all file operations
1148
+ - Fixed platform-specific test failures (permission bits, signals)
1149
+ - Added `.gitattributes` and `.editorconfig` for consistent line endings
1150
+
1151
+ ### 🚨 BREAKING CHANGES
1152
+
1153
+ - **Output Flag Standardization**
1154
+ - Old: `doctor --json`, `sync-check --format yaml`, `cleanup --format json`
1155
+ - New: All commands use `--yaml` for structured output
1156
+ - Migration: Replace `--json` or `--format` with `--yaml` in scripts/workflows
1157
+
1158
+ - **Removed TypeScript Preset System**
1159
+ - `preset:` property no longer supported in configs
1160
+ - Migration: Copy YAML templates from `config-templates/` directory instead
1161
+ - See `packages/cli/config-templates/README.md` for migration instructions
1162
+
1163
+ - **Strict Schema Validation Enabled**
1164
+ - Unknown properties in configs now cause validation errors (previously ignored silently)
1165
+ - Example: `output.format` field no longer exists - remove it from your config
1166
+ - Run `vibe-validate doctor` to check your config for issues
1167
+ - Benefits: Catches typos, prevents configuration drift
1168
+
1169
+ ### ✨ Features
1170
+
1171
+ - **Config Templates Replace Presets**
1172
+ - Four YAML templates available in `config-templates/` directory
1173
+ - Templates are transparent (everything visible, no hidden defaults)
1174
+ - Anyone can contribute templates (no TypeScript knowledge needed)
1175
+ - Browse on GitHub: https://github.com/jdutton/vibe-validate/tree/main/packages/cli/config-templates
1176
+ - Copy template → customize → done
1177
+
1178
+ - **Strict Validation Prevents Configuration Drift**
1179
+ - Unknown properties immediately rejected with clear error messages
1180
+ - Catches removed/renamed fields (like `output.format`)
1181
+ - Catches typos in configuration field names
1182
+ - Fail fast with helpful errors instead of silent failures
1183
+
1184
+ ### 📝 Documentation
1185
+
1186
+ - **New**: `packages/cli/config-templates/README.md`
1187
+ - Explains how to use YAML templates
1188
+ - Migration guide from old `preset:` system
1189
+ - Best practices for customizing templates
1190
+ - Examples for all project types
1191
+
1192
+ - **Updated**: All documentation now references config templates instead of presets
1193
+ - getting-started.md
1194
+ - configuration-reference.md
1195
+ - agent-integration-guide.md
1196
+ - error-extractors-guide.md
1197
+
1198
+ ### 🗑️ Removed
1199
+
1200
+ - **Removed unused configuration fields** (YAGNI principle - "You Aren't Gonna Need It"):
1201
+ - `preset:` field - Use config templates from `config-templates/` directory instead
1202
+ - `extends:` field - Zero usage detected, templates are simpler
1203
+ - `output:` section - Was never implemented
1204
+
1205
+ - **Impact**: Cleaner, more focused configuration schema with only actively-used features
1206
+
1207
+ ### 🎯 Migration Guide
1208
+
1209
+ **Before (v0.10.x and earlier):**
1210
+ ```yaml
1211
+ preset: typescript-nodejs
1212
+ git:
1213
+ mainBranch: develop
1214
+ ```
1215
+
1216
+ **After (v0.11.0+):**
1217
+ ```bash
1218
+ # Copy template
1219
+ curl -o vibe-validate.config.yaml \
1220
+ https://raw.githubusercontent.com/jdutton/vibe-validate/main/config-templates/typescript-nodejs.yaml
1221
+
1222
+ # Edit to customize (e.g., change mainBranch to 'develop')
1223
+ ```
1224
+
1225
+ **Strict validation fix:**
1226
+ ```yaml
1227
+ # Remove unknown properties
1228
+ output:
1229
+ format: auto # ❌ Remove this - field doesn't exist
1230
+ ```
1231
+
1232
+ Run `vibe-validate doctor` to check your config for issues.
1233
+
1234
+ ### 📊 Impact
1235
+
1236
+ - **Transparent configs**: Everything visible in YAML (no hidden defaults)
1237
+ - **Better errors**: Unknown properties caught immediately with helpful guidance
1238
+ - **Easier contributions**: Anyone can submit template PRs (no TypeScript knowledge needed)
1239
+ - **Faster onboarding**: Copy template → customize → done
1240
+
1241
+ ## [0.10.4] - 2025-10-19
1242
+
1243
+ ### ✨ Features
1244
+
1245
+ - **Added YAML Configuration Templates**
1246
+ - Four ready-to-use YAML configuration templates in `config-templates/` directory:
1247
+ - `typescript-library.yaml` - For npm packages and shared libraries
1248
+ - `typescript-nodejs.yaml` - For Node.js apps, APIs, and backend services
1249
+ - `typescript-react.yaml` - For React SPAs and Next.js applications
1250
+ - `minimal.yaml` - Bare-bones template for custom projects
1251
+ - Each template includes descriptive comments and JSON Schema URL for IDE autocomplete
1252
+ - Browse templates on GitHub: https://github.com/jdutton/vibe-validate/tree/main/packages/cli/config-templates
1253
+
1254
+ ### 🐛 Bug Fixes
1255
+
1256
+ - **Fixed broken example link in `doctor` error messages**
1257
+ - Doctor previously pointed to non-existent `examples/` directory (404 error)
1258
+ - Now correctly links to `config-templates/` directory with real working examples
1259
+
1260
+ - **CRITICAL: Fixed `doctor` command output**
1261
+ - Non-verbose mode now shows summary only when all checks pass (was showing all 15 checks)
1262
+ - Verbose mode now shows all checks when failures exist (was showing only failing checks)
1263
+ - Fixed `--verbose` flag not working due to option conflict
1264
+ - Clearer messaging about when checks are hidden
1265
+
1266
+ - **Better validation error messages**
1267
+ - Doctor now shows specific Zod validation errors (e.g., "validation.phases.0.name: Required")
1268
+ - Displays up to 5 validation errors with helpful links to documentation and examples
1269
+
1270
+ - No more confusing warnings during initial setup
1271
+
1272
+ ## [0.10.3] - 2025-10-19
1273
+
1274
+ ### ✨ Features
1275
+
1276
+ - **Comprehensive LLM-Friendly Help Output** (Issue #14, Issue #16)
1277
+ - Enhanced `--help --verbose` with complete CLI reference in single output
1278
+ - **Exit codes** documented for all commands (what each code means)
1279
+ - **"What it does"** explanations (step-by-step command behavior)
1280
+ - **File locations** (what gets created/modified by each command)
1281
+ - **Examples** for every command (real-world usage)
1282
+ - **Error recovery guidance** (what to do when commands fail)
1283
+ - **"When to use"** guidance (appropriate contexts for each command)
1284
+ - **Common workflows** section (first-time setup, before commits, after PR merge)
1285
+ - **Caching explanation** (how validation caching works)
1286
+ - **FILES section** (all files used by vibe-validate)
1287
+ - **EXIT CODES section** (global exit code meanings)
1288
+ - Output grew from 76 to 298 lines - 4x more comprehensive
1289
+
1290
+ ### ✅ Testing
1291
+
1292
+ - **13 New Comprehensive Help Tests** (Issue #14)
1293
+ - Validates all sections present (exit codes, examples, workflows, etc.)
1294
+ - Ensures help is significantly longer than regular help (3x minimum)
1295
+ - Verifies all commands documented with examples
1296
+ - Total tests: 484 passing (up from 471)
1297
+
1298
+ ### 📝 Documentation
1299
+
1300
+ - **Created Issue #16** for next iteration:
1301
+ - DRY exit codes (single source of truth)
1302
+ - Auto-generate `docs/skill/resources/cli-reference.md` from `--help --verbose`
1303
+ - Test to enforce documentation sync
1304
+ - Improves SEO and LLM training data discoverability
1305
+
1306
+ ## [0.10.2] - 2025-10-19
1307
+
1308
+ ### ✨ Features
1309
+
1310
+ - **AI Assistant Support: Get All Help at Once** (Issue #14)
1311
+ - Use `vibe-validate --help --verbose` to see all command options in one output
1312
+ - Perfect for AI assistants (Claude Code, Cursor, Aider, Continue) to get complete CLI reference
1313
+ - Regular `--help` remains concise for human users
1314
+ - Eliminates need to run 9 separate `<command> --help` calls
1315
+
1316
+ ### 🐛 Bug Fixes
1317
+
1318
+ - **Fixed IDE Autocomplete in Documentation** (Issue #14)
1319
+ - Corrected schema URL in README examples: Now uses `config.schema.json` (was: `schema.json`)
1320
+ - Users following documentation will now get proper IDE autocomplete and validation
1321
+
1322
+ ### 📝 Documentation
1323
+
1324
+ - **Added Package Installation Clarity** (Issue #14)
1325
+ - New FAQ: "Should I install `vibe-validate` or `@vibe-validate/cli`?"
1326
+ - Both packages work identically - use whichever name you prefer
1327
+ - Eliminates confusion from seeing two different package names
1328
+
1329
+ - **Improved AI Assistant Guidance**
1330
+ - Added prominent "For AI Assistants" callout in README
1331
+ - Documents `--help --verbose` for comprehensive help output
1332
+
1333
+ - **Cleaned Up Format References**
1334
+ - Focused documentation on YAML configuration (the current standard)
1335
+ - Removed outdated format references from user-facing docs
1336
+ - Simplified troubleshooting and getting-started guides
1337
+
1338
+ ## [0.10.1] - 2025-10-19
1339
+
1340
+ ### 🐛 Bug Fixes
1341
+
1342
+ - **CRITICAL: Fixed broken `init` command** (Issue #12)
1343
+ - **Problem**: `vibe-validate init` was creating `.ts` config files that couldn't be loaded, breaking the initialization workflow for new users in v0.10.0
1344
+ - **Solution**: Now correctly generates `vibe-validate.config.yaml` files
1345
+ - **Impact**: New users can now successfully initialize and use vibe-validate
1346
+
1347
+ - **Fixed IDE autocomplete for YAML configs**
1348
+ - Corrected JSON Schema URL in generated configs
1349
+ - IDEs (VS Code, WebStorm, etc.) now properly provide autocomplete and validation
1350
+
1351
+ ### 📝 Documentation
1352
+
1353
+ - Updated all examples to use YAML configuration format
1354
+ - Clarified that YAML is the only supported format (`.ts`, `.js`, `.json` are not supported)
1355
+
1356
+ ## [0.10.0] - 2025-10-19
1357
+
1358
+ ### 🎉 Major Features
1359
+
1360
+ - **YAML Configuration Support** (Issue #6)
1361
+ - Primary format: `vibe-validate.config.yaml` (modern, maintainable)
1362
+ - JSON Schema generation for IDE validation and autocomplete
1363
+ - Better IDE support, more readable, industry-standard format
1364
+
1365
+ - **Focused Init Modes - Idempotent Setup Operations** (Issue #6)
1366
+ - `init --setup-hooks`: Install pre-commit hook only
1367
+ - `init --setup-workflow`: Create GitHub Actions workflow only
1368
+ - `init --fix-gitignore`: Add state file to .gitignore only
1369
+ - `init --dry-run`: Preview changes without writing files
1370
+ - All operations are idempotent (safe to run multiple times)
1371
+ - 50+ comprehensive tests for setup operations
1372
+
1373
+ - **Enhanced Doctor Diagnostics** (Issue #6)
1374
+ - Version check with upgrade guidance
1375
+ - .gitignore validation for state file
1376
+ - Config format migration warnings with actionable steps
1377
+ - Educational suggestions (manual instructions + CLI commands)
1378
+ - Performance optimization: Load config once (reduced duplicate warnings 7→1)
1379
+
1380
+ - **Setup Engine Architecture** (Issue #6)
1381
+ - New `SetupCheck` interface for standardized operations
1382
+ - Reusable check/preview/fix pattern
1383
+ - Idempotent operations with preview mode
1384
+ - Comprehensive test coverage (50 tests)
1385
+
1386
+ ### 🐛 Bug Fixes
1387
+
1388
+ - **Fixed ESLint Errors** (Issue #6)
1389
+ - Prefixed unused interface parameters with underscore
1390
+ - Removed unused imports
1391
+ - Clean lint: 0 errors, 0 warnings
1392
+
1393
+ - **Replaced TypeScript `any` Types** (Issue #6)
1394
+ - Created `InitOptions` interface for init command options
1395
+ - Created `SetupOperation` interface for setup operations
1396
+ - Added comprehensive JSDoc to all functions
1397
+ - Full type safety restored
1398
+
1399
+ - **Fixed npm Warnings** (Issue #10)
1400
+ - Separated pnpm-specific configs to `.pnpmrc`
1401
+ - Cleaned up `.npmrc` for npm-only settings
1402
+ - No more `@pnpm/types` warnings during npm operations
1403
+
1404
+ - Refactored `runDoctor()` to load config once
1405
+ - Reduced duplicate deprecation warnings from 7 to 1
1406
+ - Updated 7 function signatures to accept config parameter
1407
+ - Better performance and cleaner output
1408
+
1409
+ ### 🔧 Changed
1410
+
1411
+ - **Duration Format Improvement**
1412
+ - Changed validation state file from milliseconds to seconds
1413
+ - Field renamed: `duration` → `durationSecs` (camelCase)
1414
+ - More human-readable output (e.g., `1.1` instead of `1100`)
1415
+
1416
+ ### ♻️ Refactoring
1417
+
1418
+ - **Git Detection (DRY)** (Issue #6)
1419
+ - Extracted shared `git-detection.ts` module
1420
+ - Removed 82 lines of duplication from `init.ts`
1421
+ - 11 comprehensive tests for git detection
1422
+ - Reusable across commands
1423
+
1424
+ ### 📝 Documentation
1425
+
1426
+ - **CLI Reference Updates** (Issue #6)
1427
+ - Complete `init` command documentation
1428
+ - Doctor command usage guide
1429
+ - All focused modes with examples
1430
+ - Migration workflow guide
1431
+
1432
+ ### ✅ Testing
1433
+
1434
+ - **Test-Driven Development (TDD)**
1435
+ - All features written with TDD approach
1436
+ - 460/460 tests passing (100% pass rate)
1437
+ - 17 new test files added
1438
+ - Coverage maintained at 80%+
1439
+
1440
+ ### 🎯 Migration Demonstration
1441
+
1442
+ - Demonstrates the `init --migrate` workflow
1443
+ - Doctor now shows 15/15 checks passing (was 14/15)
1444
+ - No deprecation warnings
1445
+
1446
+ ## [0.9.11] - 2025-10-18
1447
+
1448
+ ### 🐛 Bug Fixes
1449
+
1450
+ - **CRITICAL: Fix tree hash consistency between validate and validate --check** (Issue #8)
1451
+ - Replaced non-deterministic `getWorkingTreeHash()` (using `git stash create` with timestamps) with deterministic `getGitTreeHash()` (using `git write-tree`, content-based only)
1452
+ - **CRITICAL FIX**: Use temporary GIT_INDEX_FILE to prevent corrupting git index during pre-commit hooks
1453
+ - Added `@vibe-validate/git` as dependency to `@vibe-validate/core` package
1454
+ - Ensures `validate` and `validate --check` calculate identical tree hashes for unchanged working tree
1455
+ - Fixes broken caching mechanism that defeated the 300x+ speedup feature
1456
+ - `--check` flag now accurately detects when validation is needed vs already passed
1457
+ - Added TDD test to verify deterministic hash calculation (Issue #8)
1458
+ - Removed deprecated non-deterministic `getWorkingTreeHash()` function from core package
1459
+ - Pre-commit hook now works correctly without corrupting staged files
1460
+
1461
+ ### 📝 Documentation
1462
+
1463
+ - **Improved README clarity** (Issue #1)
1464
+ - Quick Start section: Clarified that `validate` is an ongoing command (run before every commit), not one-time
1465
+ - Timing labels: Changed "First run/Cached run" to "When code changes/When code unchanged"
1466
+ - Try It Out section: Focused on 3 key prerequisites (Node.js, Git, package manager) instead of listing all doctor checks
1467
+ - Added note that `doctor` provides additional setup guidance beyond prerequisites
1468
+ - Better positioning for AI agents evaluating project suitability
1469
+
1470
+ - **Added CHANGELOG.md update requirement to CLAUDE.md**
1471
+ - Documented mandatory CHANGELOG update before any release
1472
+ - Added example CHANGELOG entry format with Issue #8 as demonstration
1473
+
1474
+ ### 🔧 Changed
1475
+
1476
+ - **Removed `config.output.format` field** - State files are now always written as YAML (not JSON)
1477
+ - Removed `OutputFormatSchema` and `OutputFormat` type from config package
1478
+ - State files (`.vibe-validate-state.yaml`) are now written in YAML format for both human and machine readability
1479
+ - JSON is valid YAML, so existing JSON state files will still be parsed correctly
1480
+ - Removed implicit format auto-detection - explicit and simple is better
1481
+ - Updated all presets, init command, and config command to remove format references
1482
+ - All 374 tests passing
1483
+
1484
+ ## [0.9.8] - 2025-10-18
1485
+
1486
+ ### 🎉 Initial Public Release
1487
+
1488
+ **vibe-validate** is a git-aware validation orchestration tool built specifically for **agentic coding workflows** with AI assistants like [Claude Code](https://claude.ai/code).
1489
+
1490
+ ### Core Design Goals (Why This Exists)
1491
+
1492
+ 1. **Enforce SDLC best practices with AI agents**
1493
+ - Validate before pushing (prevent broken PRs)
1494
+ - Synchronize PR/local validation (guarantee CI passes)
1495
+ - Parallel + cached validation (speed up iteration)
1496
+ - Agent-optimized error output (minimize context window usage)
1497
+ - Branch sync enforcement (keep branches current with main)
1498
+
1499
+ 2. **Built for Claude Code** - Primarily tested with Anthropic's AI coding assistant
1500
+
1501
+ ### ✨ Features
1502
+
1503
+ - **300x+ faster cached validation** (sub-second vs ~90s when code unchanged)
1504
+ - **Git tree hash caching** - Content-based, deterministic
1505
+ - **Parallel phase execution** - Run independent checks simultaneously
1506
+ - **Agent-optimized output** - Auto-detects Claude Code, Cursor, Aider, Continue
1507
+ - **Branch sync enforcement** - Pre-commit hook ensures branches stay current
1508
+ - **GitHub Actions generator** - CI/CD workflow auto-generated from config
1509
+ - **Configuration diagnostics** - `doctor` command checks setup (7 health checks)
1510
+
1511
+ ### 📦 Packages
1512
+
1513
+ - **@vibe-validate/cli** - Command-line interface
1514
+ - **@vibe-validate/core** - Validation orchestration engine
1515
+ - **@vibe-validate/git** - Git workflow utilities
1516
+ - **@vibe-validate/extractors** - Error parsing & LLM optimization
1517
+ - **@vibe-validate/config** - Configuration system with presets
1518
+
1519
+ ### 🚀 Performance
1520
+
1521
+ Real-world TypeScript Node.js app:
1522
+ - Full validation: 90.5s (parallel execution)
1523
+ - Cached validation: Sub-second
1524
+ - Speedup: 300x+
1525
+
1526
+ ### 📊 Test Coverage
1527
+
1528
+ - **371 tests** passing (100% pass rate)
1529
+ - **75.76% coverage**
1530
+ - **Self-hosting** - vibe-validate validates itself
1531
+
1532
+ ### 🎯 Primary Use Case
1533
+
1534
+ **Agentic coding with Claude Code**:
1535
+ - Prevent broken PRs before they reach CI
1536
+ - Guarantee local/CI validation sync
1537
+ - Speed up debugging with filtered test output
1538
+ - Enforce branch synchronization with main
1539
+ - Minimize AI context window usage
1540
+
1541
+ ### 🤖 AI Assistant Support
1542
+
1543
+ - **Claude Code** (primary) - Anthropic's AI coding assistant
1544
+ - **Cursor** - Compatible with agent context detection
1545
+ - **Aider** - Supported output formatting
1546
+ - **Continue** - Agent-friendly error reporting
1547
+
1548
+ ---
1549
+
1550
+ ## Version History
1551
+
1552
+ - **v0.17.0** (2025-11-30) - Heterogeneous project support, smart version detection, plugin architecture, security hardening, pre-commit enhancements
1553
+ - **v0.16.1** (2025-11-21) - Fixed config error reporting
1554
+ - **v0.16.0** (2025-11-15) - Phase-based CI job grouping, parallel flag implementation
1555
+ - **v0.15.0** (2025-11-12) - Run command caching, code quality enforcement, smart defaults, enhanced AI integration
1556
+ - **v0.14.3** (2025-10-30) - Fixed Jest detection with real-world output
1557
+ - **v0.14.2** (2025-10-27) - Fixed broken init command
1558
+ - **v0.14.1** (2025-10-27) - Fixed broken init command (template packaging)
1559
+ - **v0.14.0** (2025-10-27) - Run command for AI agents, critical extractor fixes
1560
+ - **v0.13.0** (2025-10-26) - Smart locking system for concurrency control
1561
+ - **v0.12.2** (2025-10-25) - Comprehensive test framework support (8 extractors)
1562
+ - **v0.12.1** (2025-10-24) - Fixed npm publish process
1563
+ - **v0.12.0** (2025-10-23) - Git notes-based caching and validation history
1564
+ - **v0.11.0** (2025-10-20) - Real-time CI monitoring with watch-pr command
1565
+ - **v0.10.0** (2025-10-19) - YAML config support, focused init modes, enhanced doctor
1566
+ - **v0.9.11** (2025-10-18) - Critical bug fix for tree hash consistency
1567
+ - **v0.9.8** (2025-10-18) - Initial public release
1568
+
1569
+ [Unreleased]: https://github.com/jdutton/vibe-validate/compare/v0.17.5...HEAD
1570
+ [0.17.5]: https://github.com/jdutton/vibe-validate/compare/v0.17.4...v0.17.5
1571
+ [0.17.4]: https://github.com/jdutton/vibe-validate/compare/v0.17.0...v0.17.4
1572
+ [0.17.0]: https://github.com/jdutton/vibe-validate/compare/v0.16.1...v0.17.0
1573
+ [0.16.1]: https://github.com/jdutton/vibe-validate/compare/v0.16.0...v0.16.1
1574
+ [0.16.0]: https://github.com/jdutton/vibe-validate/compare/v0.15.0...v0.16.0
1575
+ [0.15.0]: https://github.com/jdutton/vibe-validate/compare/v0.14.3...v0.15.0
1576
+ [0.14.3]: https://github.com/jdutton/vibe-validate/compare/v0.14.2...v0.14.3
1577
+ [0.14.2]: https://github.com/jdutton/vibe-validate/compare/v0.14.1...v0.14.2
1578
+ [0.14.1]: https://github.com/jdutton/vibe-validate/compare/v0.14.0...v0.14.1
1579
+ [0.14.0]: https://github.com/jdutton/vibe-validate/compare/v0.13.0...v0.14.0
1580
+ [0.13.0]: https://github.com/jdutton/vibe-validate/compare/v0.12.2...v0.13.0
1581
+ [0.12.2]: https://github.com/jdutton/vibe-validate/compare/v0.12.1...v0.12.2
1582
+ [0.12.1]: https://github.com/jdutton/vibe-validate/compare/v0.12.0...v0.12.1
1583
+ [0.12.0]: https://github.com/jdutton/vibe-validate/compare/v0.11.0...v0.12.0
1584
+ [0.11.0]: https://github.com/jdutton/vibe-validate/compare/v0.10.4...v0.11.0
1585
+ [0.10.4]: https://github.com/jdutton/vibe-validate/compare/v0.10.3...v0.10.4
1586
+ [0.10.3]: https://github.com/jdutton/vibe-validate/compare/v0.10.2...v0.10.3
1587
+ [0.10.2]: https://github.com/jdutton/vibe-validate/compare/v0.10.1...v0.10.2
1588
+ [0.10.1]: https://github.com/jdutton/vibe-validate/compare/v0.10.0...v0.10.1
1589
+ [0.10.0]: https://github.com/jdutton/vibe-validate/compare/v0.9.11...v0.10.0
1590
+ [0.9.11]: https://github.com/jdutton/vibe-validate/compare/v0.9.10...v0.9.11
1591
+ [0.9.8]: https://github.com/jdutton/vibe-validate/releases/tag/v0.9.8