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.
- package/dist/.claude/plugins/marketplaces/vibe-validate/CHANGELOG.md +1591 -0
- package/dist/.claude/plugins/marketplaces/vibe-validate/README.md +58 -0
- package/dist/.claude/plugins/marketplaces/vibe-validate/plugins/vibe-validate/.claude-plugin/plugin.json +1 -1
- package/dist/.claude/plugins/marketplaces/vibe-validate/plugins/vibe-validate/skills/vibe-validate/SKILL.md +1 -1
- package/dist/skills/vibe-validate/SKILL.md +1 -1
- package/package.json +4 -4
|
@@ -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
|