@nerviq/cli 1.29.0 → 1.29.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (80) hide show
  1. package/CHANGELOG.md +1527 -1493
  2. package/README.md +550 -538
  3. package/SECURITY.md +82 -82
  4. package/bin/cli.js +2562 -2558
  5. package/docs/api-reference.md +356 -356
  6. package/docs/audit-fix.md +109 -0
  7. package/docs/autofix.md +3 -62
  8. package/docs/getting-started.md +1 -1
  9. package/docs/index.html +592 -592
  10. package/docs/integration-contracts.md +287 -287
  11. package/docs/maintenance.md +128 -128
  12. package/docs/new-platform-guide.md +202 -202
  13. package/docs/release-process.md +63 -0
  14. package/docs/shallow-risk.md +244 -244
  15. package/docs/why-nerviq.md +82 -82
  16. package/package.json +67 -67
  17. package/src/aider/activity.js +226 -226
  18. package/src/aider/context.js +162 -162
  19. package/src/aider/freshness.js +123 -123
  20. package/src/aider/techniques.js +3465 -3465
  21. package/src/audit/layers.js +180 -180
  22. package/src/audit.js +1032 -1032
  23. package/src/benchmark.js +299 -299
  24. package/src/codex/activity.js +324 -324
  25. package/src/codex/freshness.js +142 -142
  26. package/src/codex/techniques.js +4895 -4895
  27. package/src/context.js +326 -326
  28. package/src/continuous-ops.js +11 -1
  29. package/src/convert.js +340 -340
  30. package/src/copilot/config-parser.js +280 -280
  31. package/src/copilot/context.js +218 -218
  32. package/src/copilot/freshness.js +177 -177
  33. package/src/copilot/patch.js +238 -238
  34. package/src/copilot/techniques.js +3578 -3578
  35. package/src/cursor/freshness.js +194 -194
  36. package/src/cursor/patch.js +243 -243
  37. package/src/cursor/techniques.js +3735 -3735
  38. package/src/doctor.js +201 -201
  39. package/src/fix-engine.js +511 -8
  40. package/src/formatters/csv.js +86 -86
  41. package/src/formatters/junit.js +123 -123
  42. package/src/formatters/markdown.js +164 -164
  43. package/src/formatters/otel.js +151 -151
  44. package/src/freshness.js +156 -156
  45. package/src/gemini/activity.js +402 -402
  46. package/src/gemini/context.js +290 -290
  47. package/src/gemini/freshness.js +183 -183
  48. package/src/gemini/patch.js +229 -229
  49. package/src/gemini/techniques.js +3811 -3811
  50. package/src/governance.js +533 -533
  51. package/src/harmony/audit.js +306 -306
  52. package/src/i18n.js +63 -63
  53. package/src/insights.js +119 -119
  54. package/src/integrations.js +134 -134
  55. package/src/locales/en.json +33 -33
  56. package/src/locales/es.json +33 -33
  57. package/src/migrate.js +354 -354
  58. package/src/opencode/activity.js +286 -286
  59. package/src/opencode/freshness.js +137 -137
  60. package/src/opencode/techniques.js +3450 -3450
  61. package/src/setup/analysis.js +12 -12
  62. package/src/setup.js +7 -6
  63. package/src/shallow-risk/index.js +56 -56
  64. package/src/shallow-risk/patterns/agent-config-cross-platform-drift.js +50 -50
  65. package/src/shallow-risk/patterns/agent-config-dangerous-autoapprove.js +46 -46
  66. package/src/shallow-risk/patterns/agent-config-deprecated-keys.js +46 -46
  67. package/src/shallow-risk/patterns/agent-config-missing-file.js +317 -317
  68. package/src/shallow-risk/patterns/agent-config-secret-literal.js +49 -49
  69. package/src/shallow-risk/patterns/agent-config-stack-contradiction.js +34 -34
  70. package/src/shallow-risk/patterns/hook-script-missing.js +70 -70
  71. package/src/shallow-risk/patterns/mcp-server-no-allowlist.js +52 -52
  72. package/src/shallow-risk/shared.js +648 -648
  73. package/src/source-urls.js +295 -295
  74. package/src/state-paths.js +85 -85
  75. package/src/supplemental-checks.js +805 -805
  76. package/src/telemetry.js +160 -160
  77. package/src/windsurf/context.js +359 -359
  78. package/src/windsurf/freshness.js +194 -194
  79. package/src/windsurf/patch.js +231 -231
  80. package/src/windsurf/techniques.js +3779 -3779
package/CHANGELOG.md CHANGED
@@ -1,1493 +1,1527 @@
1
- # Changelog
2
-
3
- All notable changes to the **Nerviq** CLI are documented in this file.
4
-
5
- The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
- and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
-
8
- ## [Unreleased]
9
-
10
- ## [1.29.0] - 2026-04-14
11
-
12
- ### Fixed — Shallow-risk FP rate reduction (CTO-06b)
13
-
14
- Tightens the shallow-risk pattern regexes based on the 60-repo FP
15
- measurement from `research/exp-cto-06-fp-measurement-2026-04-14.md`.
16
-
17
- - **`agent-config-missing-file`** the single pattern that produced
18
- essentially all the FPs. Overnight corpus measurement found 520
19
- hits / 63.5% lower-bound FP rate across the PP-08 corpus (6.35×
20
- above the 0.10 gate).
21
-
22
- ### Impact
23
-
24
- - Corpus hits: **520 69 (-86.7%)**.
25
- - Lower-bound FP rate: **63.5% 8.7%** (under the 0.10 gate).
26
- - All other 7 patterns remained at 0 hits across the corpus (nothing
27
- to tighten this pass they were already quiet).
28
-
29
- ### What got tightened
30
-
31
- - Pointer regex no longer fires on:
32
- - Fenced code-example bodies.
33
- - URL-shape references.
34
- - Well-known external conventions (e.g. `.github/CODEOWNERS`,
35
- `node_modules/*`, `.git/*`, `vendor/*`).
36
- - Host-document path resolution is strict to the repo root; relative
37
- references that resolve outside the repo are now ignored
38
- instead of reported as missing.
39
- - Quote-wrapped example paths in prose (e.g. `"docs/SECURITY.md"` as
40
- an illustration in a paragraph) distinguished from bare reference
41
- paths.
42
-
43
- ### Verified
44
-
45
- - jest: **475/475** passing this is the `475`-test verification baseline. (was 452 + 23 new negative-fixture
46
- tests in `test/shallow-risk.test.js`, each reproducing a FP
47
- eliminated this pass).
48
- - canonical CLI tests: **162/162** passing.
49
- - `npm pack --dry-run`: clean.
50
- - `node tools/validate-release-metadata.js`: validation passed for v1.29.0.
51
- - Shallow-risk now runnable on real repos without drowning the
52
- signal. Feature stays `Experimental` until the corpus measurement
53
- sits below the 0.10 gate twice in a row.
54
-
55
- Evidence: `research/exp-cto-06-fp-measurement-2026-04-14.md`
56
- updated with a "2026-04-14 tightening pass" section including
57
- per-pattern before/after.
58
-
59
- ## [1.28.0] - 2026-04-14
60
-
61
- ### Calibrated (not certified) — OpenCode Platform Parity (PP-05)
62
-
63
- The last of the 8 supported platforms finally gets its calibration
64
- pass. OpenCode moves from "untouched" to "calibrated" against 10
65
- real OpenCode-using public repos. Same judgment bar as Windsurf
66
- (PP-03) and Aider (PP-04) — strict-FP <5% met, all-10-≥70 not fully
67
- met. Source landed in commit `5114834`.
68
-
69
- 10-repo corpus: 8/10 scored ≥70 post-calibration. PPI stays at
70
- **0.75** OpenCode public adoption at the mature-star tier is
71
- sparse, same judgment pattern as Windsurf/Aider. Added to
72
- `research/platform-parity-corpus.json`, evidence docs
73
- `exp-pp-09-opencode-fp-2026-04-14.md` +
74
- `exp-pp-10-opencode-external-2026-04-14.md`.
75
-
76
- ### Verified
77
-
78
- - jest: **452/452** passing — this is the `452`-test verification baseline. (was 440 + 12 new opencode-pp05
79
- regression tests).
80
- - canonical CLI tests: **162/162** passing.
81
- - `npm pack --dry-run`: clean.
82
- - `node tools/validate-release-metadata.js`: validation passed for v1.28.0.
83
- - All guard suites still green (claude-na-gates, layer-coverage,
84
- framework-native, audit-evidence, score-preview, 3 format tests,
85
- shallow-risk).
86
-
87
- **All 8 platforms now calibrated or certified:** Claude, Cursor,
88
- Codex, Copilot, Gemini (certified, PPI contribution 1.0 each) +
89
- Windsurf, Aider, OpenCode (calibrated, 0.75 base). PPI 0.75 will
90
- graduate to 0.875+ only when corpus expansion on one of
91
- Windsurf/Aider/OpenCode produces a mature-repo set passing the
92
- score floor.
93
-
94
- ## [1.27.1] - 2026-04-14
95
-
96
- ### Fixed npm tarball completeness + Windows output encoding (MEMO wave)
97
-
98
- Addresses two real npm-user issues surfaced by the Codex CTO/CEO +
99
- Market Memo (2026-04-13 v2):
100
-
101
- - **`package.json` `files` broadened** (MEMO-17): the published
102
- tarball now includes `docs/`, `contracts/`, `sdk/README.md`,
103
- `CHANGELOG.md`, and `SECURITY.md` alongside `bin/`, `src/`, and
104
- `README.md`. Previously these docs surfaces were referenced in
105
- the README but not shipped in the npm tarball, meaning external
106
- users hit broken doc links post-install. Verified via
107
- `npm pack --dry-run` — tarball now matches what the README
108
- promises.
109
-
110
- - **Windows output encoding** (MEMO-16): the CLI console output
111
- previously rendered mojibake on Windows cmd.exe where the runtime
112
- default code page did not support emoji (✅ ❌ ✔ ✗ U+2705 / U+274C /
113
- U+2713 / U+2717). Introduced `src/output-icons.js` as a single
114
- helper that emits clean ASCII fallbacks (`[OK]`, `[FAIL]`,
115
- `[SKIP]`, `[WARN]`) when `NERVIQ_ASCII_OUTPUT=1` or auto-detected
116
- from `process.platform === 'win32'` + non-TTY. Wired through
117
- `src/setup/runtime.js`, `src/setup.js`, `src/init.js`,
118
- `src/codex/setup.js`, `src/gemini/setup.js`, `test/run.js`.
119
- 2 new regression tests in `test/output-encoding.test.js`.
120
-
121
- ### Also this release
122
-
123
- - **7 back-dated GitHub Releases** created for v1.21.0 through
124
- v1.27.0 (MEMO-01). Previously the public GitHub release surface
125
- lagged npm by 7 versions; it now reflects the full release
126
- history.
127
- - **3 stale GitHub issues closed** (MEMO-02: #24, #25, #26) —
128
- feature requests for Markdown / JUnit / CSV output that were
129
- actually shipped in v1.22.0. Each closed with a shipped-in
130
- attribution comment.
131
-
132
- ### Verified
133
-
134
- - jest: **440/440** passing — this is the `440`-test verification baseline. (was 438 + 2 new output-encoding
135
- regression tests).
136
- - canonical CLI tests: **162/162** passing.
137
- - `npm pack --dry-run`: clean, includes the broadened files set.
138
- - `node tools/validate-release-metadata.js --research <path>`:
139
- validation passed for v1.27.1.
140
-
141
- Evidence: `research/exp-memo-autonomous-wave-2026-04-14.md` in the
142
- research repo.
143
-
144
- ## [1.27.0] - 2026-04-14
145
-
146
- ### Added Shallow Risk Mode (experimental, CTO-06)
147
-
148
- Opt-in `--shallow-risk` lane that surfaces obvious problems at the
149
- intersection of agent configuration (CLAUDE.md, `.claude/`, `.cursor/`,
150
- `.codex/`, `.aider.conf.yml`, `.windsurf/`, etc.) and the rest of
151
- the codebase. Closes the 2026-04-08 UAT trust-break where evaluators
152
- said "missed something obvious" by catching a narrow, curated set
153
- of issues **no generic scanner can find** because they require
154
- understanding agent-config semantics.
155
-
156
- Implementation follows the approved design doc v2 (commit `f425209`
157
- in the research repo, `research/exp-cto-06-shallow-risk-design-2026-04-14.md`).
158
-
159
- ### The 8 initial patterns (all NERVIQ-native)
160
-
161
- 1. **`agent-config-missing-file`** CLAUDE.md / AGENTS.md references
162
- a repo file that doesn't exist; agent works with broken context.
163
- 2. **`agent-config-stack-contradiction`** — CLAUDE.md says "Go project"
164
- but repo is Python; agent recommends wrong tooling every session.
165
- 3. **`agent-config-cross-platform-drift`** — Two platform configs
166
- give contradictory instructions (Cursor ↔ Claude disagree on
167
- primary language).
168
- 4. **`mcp-server-no-allowlist`** — MCP server declared with empty
169
- permissions / wildcard allow = full shell access, no guardrail.
170
- 5. **`hook-script-missing`** Hook declared in `.claude/settings.json`
171
- but the script file doesn't exist; hook silently skipped.
172
- 6. **`agent-config-secret-literal`** Secret token literal pasted
173
- into CLAUDE.md / agent config as "example". Narrow secret scanning
174
- scoped to our lane only (NOT broad repo secret scanning — use
175
- gitleaks / truffleHog for that).
176
- 7. **`agent-config-deprecated-keys`** — Config uses keys the platform
177
- removed in a later release (powered by our freshness manifest).
178
- 8. **`agent-config-dangerous-autoapprove`** — Auto-approve list
179
- contains destructive patterns (`rm -rf *`, `git push --force`,
180
- `drop table`). Never suppressed.
181
-
182
- ### Shallow-risk is a parallel lane — it does NOT affect the score
183
-
184
- Findings emit through `auditResult.shallowRiskHints[]` and are
185
- intentionally excluded from:
186
- - `auditResult.score`
187
- - `auditResult.organicScore`
188
- - `auditResult.passed` / `failed` / `skipped`
189
- - `auditResult.topNextActions`
190
- - `auditResult.layerSummary.*.failed`
191
-
192
- This keeps the governance pipeline stable while still surfacing
193
- agent-config ↔ codebase red flags. Score-unchanged proof on
194
- self-audit of the NERVIQ repo: governance score is **87** with and
195
- without `--shallow-risk`; only `shallowRiskHints` differs (empty
196
- vs. 17 hits).
197
-
198
- ### CLI UX
199
-
200
- ```bash
201
- npx @nerviq/cli audit --shallow-risk # full audit + shallow risk
202
- npx @nerviq/cli audit --shallow-risk-only # fast precommit mode
203
- NERVIQ_SHALLOW_RISK=off npx @nerviq/cli audit --shallow-risk # kill switch
204
- ```
205
-
206
- Friendly banner rendered in text output and as a blockquote in
207
- markdown:
208
-
209
- > Shallow Risk mode (experimental, opt-in). NERVIQ checks 8 patterns
210
- > that sit at the intersection of your AI agent configuration and
211
- > your codebase the kind of issues no generic scanner can find
212
- > because they require understanding CLAUDE.md, .claude/settings.json,
213
- > and similar files. For broader code-level security coverage, pair
214
- > this with Semgrep, CodeQL, or a dedicated secret scanner.
215
-
216
- ### Competitive positioning (explicit)
217
-
218
- NERVIQ `--shallow-risk` is **not** a replacement for Semgrep / ESLint
219
- / CodeQL / gitleiks / truffleHog / Dependabot — those tools work on
220
- source code or dependency manifests. NERVIQ works on the bridge
221
- between agent-declared intent and codebase reality. The 8 patterns
222
- reflect that lane exclusively.
223
-
224
- ### Rendering in all output formats
225
-
226
- - **JSON**: `auditResult.shallowRiskHints[]` parallel to `results[]`.
227
- - **Text**: separate `## Shallow Risk Hints (experimental, opt-in)`
228
- block after `## Top next actions`, banner inline.
229
- - **Markdown (`--format=markdown`)**: `### Shallow Risk (experimental,
230
- opt-in)` section after `### Top next actions`, banner as blockquote,
231
- each hint listed with severity / key / file:line.
232
- - **JUnit (`--format=junit`)**: separate `<testsuite name="shallow-risk">`
233
- so CI consumers can isolate or ignore it independently of the
234
- governance suite.
235
- - **CSV (`--format=csv`)**: hints appended as rows tagged
236
- `layer=shallow-risk`. Contract documented in
237
- `docs/integration-contracts.md` §7 and §8.1.
238
-
239
- ### Status: Experimental
240
-
241
- Release: `Experimental`. Graduates to `Beta` after 30 days of real
242
- telemetry with zero critical corpus-level false positives reported
243
- and at least one external user reporting a pattern caught a real
244
- issue. Graduates to `GA` after 50+ WAA using it on ≥5 distinct repos
245
- each.
246
-
247
- Reserved slots 9 and 10 are deliberately empty they wait for 30
248
- days of user telemetry to tell us which patterns users most want
249
- that we didn't anticipate.
250
-
251
- ### Verified
252
-
253
- - jest: **438/438** passing — this is the `438`-test verification baseline. (was 419 + 19 new: 16 shallow-risk
254
- tests (positive + negative per pattern) + 3 format surface tests).
255
- - canonical CLI tests: **162/162** passing.
256
- - Guard coverage kept green: `claude-na-gates.test.js`,
257
- `layer-coverage.test.js`, `framework-native.test.js`,
258
- `audit-evidence.test.js`, `score-preview.test.js`, and the three
259
- format tests.
260
- - `npm pack --dry-run`: clean.
261
- - `node tools/validate-release-metadata.js --research <path>`:
262
- validation passed for v1.27.0.
263
- - Self-audit smoke: score unchanged (87 with and without the flag),
264
- 17 shallow-risk hints found on the NERVIQ repo itself (mostly
265
- `agent-config-missing-file` on `.claude/` docs).
266
-
267
- ### PP-08 gate
268
-
269
- Added `fp_rate_threshold_shallow_risk: 0.10` lane in
270
- `research/platform-parity-corpus.json`. Corpus FP measurement on
271
- shallow-risk patterns is a separate follow-up task (not in this
272
- release).
273
-
274
- Evidence: `research/exp-cto-06-implementation-2026-04-14.md`.
275
-
276
- ## [1.26.0] - 2026-04-14
277
-
278
- ### Fixed — Framework-native verification depth (CTO-07)
279
-
280
- Closes the trust-break documented in the 2026-04-08 UAT where Flutter
281
- + Swift projects got zero uplift from NERVIQ because valid verification
282
- commands (`xcodebuild test`, `flutter test`, `gradle test`) were
283
- treated as missing guidance, and mature Python ML + FastAPI repos
284
- flattened because NERVIQ didn't recognise existing scaffolding
285
- (pytest + `pyproject.toml` + poetry/uv + ruff/mypy).
286
-
287
- Moves KPI memo §6.5 ("Are mobile, infra, and mature repos improving
288
- with the same credibility as Node-oriented repos?") from NO YES.
289
-
290
- - `src/instruction-surfaces.js`: broadened surface bundle so repo
291
- files like `pyproject.toml`, `Makefile`, `justfile`, `Podfile`,
292
- `Cartfile`, `pubspec.yaml`, `Rakefile`, `build.gradle*`, and
293
- `.github/workflows/*` count as verification evidence. Expanded
294
- TEST/LINT/BUILD command patterns for Flutter (`flutter test`,
295
- `flutter analyze`, `dart analyze`, `dart format`, `fvm flutter`),
296
- iOS / Swift (`xcodebuild test`, `swift test`, `fastlane test`,
297
- `swiftlint`, `swift-format lint`), Android (`./gradlew test`,
298
- `./gradlew ktlintCheck`, `./gradlew detekt`), and Python (all of
299
- `pytest`, `poetry run pytest`, `uv run pytest`, `pdm run pytest`,
300
- `hatch run test`, `tox`, `nox`, `python -m pytest`, `python -m
301
- unittest`, `ruff check`, `ruff`, `flake8`, `pylint`, `black
302
- --check`, `mypy`, `pyright`, `pre-commit run`).
303
-
304
- - `src/techniques/shared.js`: 10 new memoized stack helpers
305
- (`hasIosXcodeProject`, `hasAndroidGradle`, `hasFlutterProject`,
306
- `hasPythonPoetry`, `hasPythonUv`, `hasPythonPdm`, `hasPythonHatch`,
307
- `hasFastApiProject`, `hasMlScaffolding`, `hasConfiguredTooling`).
308
- These let stack-specific checks detect "this project HAS
309
- verification wired up" directly from repo files rather than only
310
- from CLAUDE.md / AGENTS.md mentions — legitimate evidence because
311
- an agent working in the repo can observe these files itself.
312
-
313
- ### Re-audit per-archetype uplift
314
-
315
- | Archetype | Before | After | Δ | Framework FNs resolved |
316
- |---|---:|---:|---:|---|
317
- | Flutter mobile | 14 | 25 | **+11** | 4 → 1 (build cmd advisory only) |
318
- | iOS Swift | 11 | 26 | **+15** | 4 → 0 |
319
- | Python ML | 14 | 23 | **+9** | 4 → 1 |
320
- | Python FastAPI | 11 | 21 | **+10** | 4 → 1 |
321
-
322
- Average uplift: **+11.25 points**. 14/15 framework-native false
323
- negatives flipped to pass/N/A; the residual 4 × `buildCommand` are
324
- legitimately advisory (category (c)).
325
-
326
- ### What is NOT changed
327
-
328
- - No new top-level checks. Catalog count stays at 2,441.
329
- - No check semantics inverted.
330
- - No scoring weights, severity values, or rating values touched.
331
- - CTO-08 `layer` tags preserved on every check.
332
- - Claude PP-06 calibration unaffected: `strict_false_positive_keys.
333
- claude` stays empty; `claude-na-gates.test.js` passes unchanged.
334
-
335
- ### Verified
336
-
337
- - jest: **419/419** passing — this is the `419`-test verification baseline. (was 403 + 16 new framework-native
338
- regression tests organised by stack in
339
- `test/framework-native.test.js`).
340
- - canonical CLI tests: **162/162** passing.
341
- - `npm pack --dry-run`: clean.
342
- - `node tools/validate-release-metadata.js --research <path>`:
343
- validation passed for v1.26.0.
344
-
345
- Evidence: `research/exp-cto-07-framework-native-2026-04-14.md`
346
- includes the full archetype survey, before/after re-audit, and
347
- methodology note on the deterministic fixtures used in Phase 3.
348
-
349
- ## [1.25.0] - 2026-04-14
350
-
351
- ### Added 5-layer scope clarity (CTO-08)
352
-
353
- Every check in the NERVIQ audit is now tagged with exactly one of
354
- four layers. Closes the boundary-blur gap documented in the
355
- 2026-04-14 CTO memo §6 ("Do evaluators understand the product
356
- boundary before trust breaks?") and moves KPI question §6.2 from
357
- PARTIAL YES with measurable evidence. Source landed in commit
358
- `a8676b1`; this commit packages the release.
359
-
360
- The four layers:
361
-
362
- - **`governance`** agent configuration posture: presence, content,
363
- and quality of agent-instruction files and platform settings.
364
- Example: `claudeMdExists`, `geminiSettingsExists`, MCP server
365
- declarations, hook presence.
366
- - **`drift`** cross-platform consistency and declared-vs-actual
367
- alignment. Example: Harmony drift, Gemini propagation completeness,
368
- rules consistency across surfaces.
369
- - **`hygiene`** — repo-level cleanliness adjacent to agents (the
370
- engineering baseline that makes an agent's job easier). Example:
371
- `.gitignore`, CHANGELOG, SECURITY.md, LICENSE, Node version
372
- pinning, editorconfig.
373
- - **`shallow-risk`** reserved for CTO-06 (agent-config ↔ codebase
374
- boundary hints). No checks currently populate this layer; the
375
- constant exists so formatters and downstream consumers know about
376
- it for the future.
377
-
378
- There is **no `deep-review` or `security` layer**, by design. NERVIQ
379
- audits agent configuration and the cleanliness of the repo boundary
380
- an agent operates inside. It does not perform dataflow analysis,
381
- SAST, or general code review — those are out of scope and left to
382
- dedicated tools. This is the contract that lets evaluators know
383
- where our claim to ground-truth starts and stops.
384
-
385
- ### Final layer distribution (2,441 checks)
386
-
387
- | Layer | Count | % |
388
- |---|---:|---:|
389
- | governance | 1,102 | 45.1% |
390
- | drift | 39 | 1.6% |
391
- | hygiene | 1,300 | 53.3% |
392
- | shallow-risk | 0 (reserved) | 0% |
393
-
394
- Disambiguation rules (codified in `src/audit/layers.js` and
395
- `docs/integration-contracts.md` §8):
396
- - "Does my agent know X?" `governance`.
397
- - "Do two places agree on X?" → `drift`.
398
- - "Does the repo have standard engineering hygiene?" → `hygiene`.
399
- - When in doubt, default to `hygiene` (a mild misclassification is
400
- recoverable; a missing tag breaks the coverage contract).
401
-
402
- ### Surfaced in every output format
403
-
404
- - **JSON**: `auditResult.results[].layer`,
405
- `auditResult.topNextActions[].layer`, and a new
406
- `auditResult.layerSummary` giving per-layer
407
- `{ total, passed, failed, skipped }`.
408
- - **Text**: "Coverage by layer:" summary block plus a small
409
- `[layer]` prefix on failed-check names.
410
- - **Markdown (`--format=markdown`)**: `layer` column in the failed-
411
- checks table; `_layer: X_` suffix on each top-action checklist item.
412
- - **JUnit (`--format=junit`)**: `layer="..."` attribute on every
413
- `<testcase>`.
414
- - **CSV (`--format=csv`)**: new `layer` column between `category`
415
- and `rating`. Updated contract in `docs/integration-contracts.md` §7.
416
-
417
- ### Verified
418
-
419
- - jest: **403/403** passing — this is the `403`-test verification baseline. (was 391 + 7 coverage tests + 5
420
- format surface tests).
421
- - canonical CLI tests: **162/162** passing.
422
- - `npm pack --dry-run`: clean.
423
- - `node tools/validate-release-metadata.js --research <path>`:
424
- validation passed for v1.25.0.
425
-
426
- Evidence: `research/exp-cto-08-layer-clarity-2026-04-14.md` includes
427
- the full distribution, ambiguous-call log, and KPI mapping.
428
-
429
- ## [1.24.0] - 2026-04-14
430
-
431
- ### Fixed Claude calibration debt resolved (CTO-09 / PP-06)
432
-
433
- Eleven Claude audit checks that were systematically firing as
434
- false-positives on repos that did not opt in to their respective
435
- agent-config surfaces now return `N/A` (null) instead of `false`.
436
- Previously these were captured in a post-hoc allowlist
437
- (`platform-parity-fp-rules.json.strict_false_positive_keys.claude`);
438
- now the checks are honest at source.
439
-
440
- The affected keys:
441
-
442
- - `claudeLocalMd`, `autoMemoryAwareness`, `importSyntax`
443
- (in `src/techniques/instructions.js`) N/A when the repo does
444
- not opt in to the overrides/memory/import-syntax conventions.
445
- `importSyntax` becomes a positive-signal check: it passes when
446
- `@`-imports are present in CLAUDE.md, and is advisory only on
447
- long (≥80 lines) CLAUDE.md files that would clearly benefit.
448
- - `mcpServers`, `multipleMcpServers`, `context7Mcp`
449
- (in `src/techniques/tools.js`) — N/A on repos that have no MCP
450
- references anywhere. A new `_repoOptsInToMcp()` helper centralises
451
- the detection.
452
- - `dockerfile`, `dockerCompose`, `terraformFiles`, `hooksNotificationEvent`,
453
- `subagentStopHook`
454
- (in `src/techniques/automation.js`) N/A when no infra signal
455
- exists (Dockerfile/`.tf`/`docker-compose*`) or when
456
- `.claude/settings.json` has no `hooks` block. New
457
- `_repoHasInfraSignal()` and `_repoHasHooksBlock()` helpers.
458
-
459
- ### Impact
460
-
461
- - **PP-08 CI gate threshold restored to 0.05** (from the 0.15
462
- holding pattern). The `fp_rate_threshold_notes` in
463
- `research/platform-parity-corpus.json` documents the resolution:
464
- any drift above 0.05 is now a real regression, not a calibration
465
- debt issue.
466
- - **Claude strict-FP rate dropped from ~11.99% to 0.00%** on the
467
- cleanly-cloned repos in the PP-08 corpus (8/9 one long-path
468
- checkout failure on Windows unrelated to CLI).
469
- - **Per-repo total failures dropped by 6–10 checks each** on Claude
470
- audits, matching the expected ~7.6 opt-in hits per repo that moved
471
- from `false` `null`.
472
- - **`strict_false_positive_keys.claude` is now empty.** The post-hoc
473
- allowlist is no longer needed.
474
-
475
- ### Verified
476
-
477
- - jest: **391/391** passing — this is the `391`-test verification baseline. (was 369 + 22 new N/A-gate
478
- regression tests in `test/claude-na-gates.test.js`, two per key).
479
- - canonical CLI tests: **162/162** passing.
480
- - `npm pack --dry-run`: clean.
481
- - `node tools/validate-release-metadata.js --research <path>`:
482
- validation passed for v1.24.0.
483
- - PP-08 CI gate: all 6 platforms (claude, codex, cursor, gemini,
484
- windsurf, aider) PASS at the restored 0.05 threshold.
485
-
486
- Evidence: `research/exp-pp-06-claude-recalibration-debt-2026-04-14.md`
487
- updated with a Resolution section at the top (per-key table,
488
- before/after gate output, verification).
489
-
490
- ## [1.23.0] - 2026-04-14
491
-
492
- ### Added — Trust-recovery depth (CTO-04, CTO-05)
493
-
494
- Ships the two deepest items from the 2026-04-14 CTO memo — the
495
- evaluator-stated reasons trust breaks in real audits. Closing them
496
- moves KPI questions §6.3 (file-level evidence) and §6.4 (score
497
- impact before write) from NO/UNKNOWN YES with verifiable evidence.
498
- Formatter source landed in commit `e06ae64`; this commit packages
499
- the release.
500
-
501
- - **CTO-04 File-level evidence (`file:line:snippet`).** Every
502
- failed check that has a sensible file-level source now emits
503
- `file`, `line`, and a `snippet` (2–5 lines of context, 300-char
504
- cap) so markdown/junit/text outputs can point at real evidence
505
- rather than abstract advice.
506
- - New resolver registry in `src/audit/evidence.js` for the 20
507
- highest-hitting check keys identified in a fresh self-audit.
508
- - Survey result on self-audit of the nerviq repo: 0 of 23 failed
509
- checks previously carried evidence; **9 of 23 now do**. The
510
- remaining 14 are either category (c) "absence-of-file"
511
- checks like `claudeLocalMd` where a null pointer is the correct
512
- semantic — or roll-ups where evidence would be misleading.
513
- - Backlog of unresolved category (b) keys documented in the
514
- evidence doc. 1 deferred (`skillUsesPaths`, blocked on CTO-06).
515
- - Markdown formatter renders snippet as a fenced code block under
516
- each checklist item; JUnit formatter appends it to the
517
- `<failure>` body after `---`; CSV intentionally unchanged
518
- (snippet newlines/commas would hurt downstream parsing).
519
-
520
- - **CTO-05 Score-impact preview before `--apply`.** Each
521
- `topNextActions` item now carries `projectedScoreDelta`,
522
- `projectedOrganicScoreDelta`, and `projectedScoreAfter` so the
523
- user sees "this fix moves score 67 → 74 (+7 pts)" before any
524
- write. Projection is computed by one O(1) recompute per top
525
- action using the existing scoring function (no extra full
526
- audits, no scoring-algorithm changes).
527
- - Text output appends ` (+N pts X/100)` per top action.
528
- - Markdown formatter shows the same suffix inline in the
529
- checklist.
530
- - CSV adds two trailing columns
531
- `projectedScoreDelta,projectedScoreAfter` populated only
532
- for rows whose key appears in `topNextActions` (projection is
533
- per-top-action, not per-every-check); other rows leave both
534
- columns empty. Contract documented in
535
- `docs/integration-contracts.md` §7.
536
- - JUnit intentionally unchanged (testcases don't naturally carry
537
- scores).
538
-
539
- ### Verified
540
-
541
- - jest: **369/369** passing this is the `369`-test verification baseline. (was 354 + 9 new
542
- evidence tests + 3 new score-preview tests + 3 markdown extensions
543
- + 1 junit extension + 2 csv extensions).
544
- - canonical CLI tests: **162/162** passing.
545
- - `npm pack --dry-run`: clean (213 files, 757 kB).
546
- - `node tools/validate-release-metadata.js --research <path>`:
547
- validation passed for v1.23.0.
548
-
549
- Evidence: `research/exp-cto-04-05-trust-recovery-2026-04-14.md`
550
- in the research repo (~263 lines) includes the full per-check
551
- survey, worked projection example, markdown + CSV samples with
552
- the new fields, and explicit mapping back to the 8 memo KPI
553
- questions.
554
-
555
- ## [1.22.0] - 2026-04-14
556
-
557
- ### Added CI output format pack (CTO-01, CTO-02, CTO-03)
558
-
559
- Three new output formats for `nerviq audit`, designed to plug the CLI
560
- straight into standard CI surfaces. Closes the "Markdown PR comment /
561
- JUnit XML / CSV" gap called out in the 2026-04-14 CTO memo §8 the
562
- plumbing required before "no serious multi-agent repo merges without
563
- a Nerviq check" is even claimable as positioning.
564
-
565
- - **`--format=markdown` (CTO-01)** — GitHub-flavoured markdown
566
- suitable for a PR comment. Includes a `## Score: N/100` header with
567
- shields.io badge, a `### Top next actions` task-list checklist (up
568
- to 5 items, each with severity + key + optional `file:line`), a
569
- collapsible `<details>` block listing all failed checks in a pipe
570
- table, and a `Generated by [Nerviq](https://nerviq.net)` footer.
571
- Pipe characters inside cells are backslash-escaped. No raw HTML
572
- beyond `<details>` / `<summary>`.
573
-
574
- - **`--format=junit` (CTO-02)** — Jenkins-compatible JUnit XML.
575
- `<testsuites name="nerviq" tests="N" failures="F" skipped="S">`
576
- root, one `<testsuite>` per check category, one `<testcase>` per
577
- check (`classname=category`, `name=key`). Failed checks emit
578
- `<failure message="..." type="SEVERITY">` with body containing
579
- `name [at file:line] [(sourceUrl)]`. Skipped checks emit `<skipped/>`.
580
- All attribute values + text nodes XML-escape `& < > " '`. Parses
581
- cleanly with GitHub Actions test reporter, GitLab JUnit reporter,
582
- and Jenkins JUnit plugin.
583
-
584
- - **`--format=csv` (CTO-03)** RFC 4180 CSV. Header row
585
- `key,id,name,category,rating,severity,passed,file,line,sourceUrl,fix`
586
- followed by one row per check. Fields containing comma, double-quote,
587
- CR, or LF are wrapped in double-quotes; internal double-quotes are
588
- escaped by doubling. No UTF-8 BOM (avoids pandas / Excel friction).
589
- LF line separator.
590
-
591
- Wired into `bin/cli.js` `--format` switch alongside existing
592
- `json|sarif|otel`. Format contracts documented in
593
- `docs/integration-contracts.md` §7 as the stable consumer API for
594
- downstream wrappers (GitHub Actions, Jenkins plugins, GitLab reporters,
595
- dashboards) bind to these shapes rather than scraping text output.
596
-
597
- ### Verified
598
-
599
- - jest: **354/354** passing — this is the `354`-test verification baseline. (was 335 + 19 new format tests:
600
- `test/format-markdown.test.js`, `test/format-junit.test.js`,
601
- `test/format-csv.test.js` covering field shape, escaping rules,
602
- edge cases like missing `file:line`, and full round-trip parse
603
- on synthetic audit results).
604
- - canonical CLI tests: **162/162** passing.
605
- - `npm pack --dry-run`: clean (212 files, 754 kB).
606
- - `node tools/validate-release-metadata.js --research <path>`:
607
- validation passed for v1.22.0.
608
-
609
- Evidence: `research/exp-cto-01-03-formats-2026-04-14.md` in the
610
- research repo includes sample outputs and a GitHub Actions integration
611
- recipe.
612
-
613
- ## [1.21.0] - 2026-04-14
614
-
615
- ### Calibrated (not certified) — Aider platform audit (PP-04)
616
-
617
- Aider platform audit recalibrated against 10 real Aider-using repos
618
- (`Aider-AI/aider`, `sysown/proxysql`, `Provenance-Emu/Provenance`,
619
- `disler/always-on-ai-assistant`, `SquirrelJME/SquirrelJME`, `ad-si/tu`,
620
- `Aider-AI/conventions`, `commit-0/commit0`, `roychri/mcp-server-asana`,
621
- `attestate/kiwistand`).
622
-
623
- Seven systematic 10/10 false-positives eliminated:
624
-
625
- - `aiderUndoSafetyAware` (10/10 5/10)
626
- - `aiderEditorModelConfigured` (10/10 0/10)
627
- - `aiderWeakModelConfigured` (10/10 5/10)
628
- - `aiderModelSettingsFileExists` (10/10 5/10)
629
- - `aiderAiderignoreExists` (10/10 → 5/10)
630
- - `aiderEnvFileExists` (10/10 → 5/10) — true FP: `.env` is gitignored;
631
- now accepts `.env.example` / `.sample` / `.template`.
632
- - `aiderAllConfigSurfacesPresent` (10/10 5/10) true FP, same root cause.
633
-
634
- Four additional ≥9/10 FPs sharply reduced: `aiderGitHooksForPreCommit` 9→3,
635
- `aiderBrowserModeForDocs` 9→5, `aiderPlaywrightUrlScraping` 9→4,
636
- `aiderVersionPinned` 9→0 (N/A on non-Python projects).
637
-
638
- Six opt-in tuning knobs converted to pass-or-N/A semantics:
639
- `aiderMapTokensConfigured`, `aiderEditFormatConfigured`,
640
- `aiderArchitectModeAvailable`, `aiderCachePromptsEnabled`,
641
- `aiderCommitPrefixConfigured`, `aiderVoiceModeAware` — they no longer
642
- fire as advisories on repos that do not opt in.
643
-
644
- Newly recognised conventions: `.aider.conf.yaml` (alt extension),
645
- `AGENTS.md` / `CLAUDE.md` / `.ai/instructions.md` / `AIDER.md` as
646
- alternative convention surfaces, `.env.example` / `.sample` / `.template`
647
- as env-contract surfaces.
648
-
649
- 10-repo corpus moved from baseline 38–64 → final 44–82. 2/10 reach ≥70
650
- (kiwistand 82, proxysql 72). The other 8 are below 70 due to documented
651
- genuine content gaps in the audited repos themselves, not audit bugs.
652
-
653
- **Why "calibrated, not certified":** same judgment as Windsurf (PP-03).
654
- Strict-FP <5% bar is met; all-10-≥70 + mature-repos-≥73 bar is not,
655
- because public Aider adoption above 500 stars is sparse. PPI stays at
656
- **0.75** until corpus expansion.
657
-
658
- ### Fixed release drift guard prefers `-main` worktrees
659
-
660
- `tools/validate-release-metadata.js` now prefers `../nerviq-research-main`
661
- and `../nerviq-site-main` when those worktrees exist, falling back to
662
- `../nerviq-research` / `../nerviq-site` otherwise. When a parallel-agent
663
- worktree on a feature branch occupies the canonical `nerviq-research`
664
- directory, the drift guard was reading the feature-branch state and
665
- refusing publish even though the actual main branch was synced.
666
- Single-worktree setups are unaffected.
667
-
668
- ### Verified
669
-
670
- - jest: **335/335** passing — this is the `335`-test verification baseline.
671
- - canonical CLI tests: **162/162** passing.
672
- - aider matrix: **315/315** passing (was 308, +6 PP-04 regression tests).
673
- - `npm pack --dry-run`: clean.
674
- - `node tools/validate-release-metadata.js --research <path>`: validation
675
- passed for v1.21.0.
676
- - PP-08 CI gate: all 6 platforms (claude, codex, cursor, gemini, windsurf,
677
- aider) PASS at the current threshold.
678
-
679
- ## [1.20.1] - 2026-04-14
680
-
681
- ### Fixed — Critical: bin/cli.js shebang regression
682
-
683
- `bin/cli.js` was missing the `#!/usr/bin/env node` shebang since v1.16.x (commit `40c27b8` on 2026-04-12, which fixed a macOS pipe-flush issue and accidentally dropped the shebang while restructuring the file). Without a shebang, `npx @nerviq/cli` failed on Linux and Mac because the OS fell back to `/bin/sh` and tried to execute JavaScript as a shell script (`//: Permission denied / Syntax error`). Windows installs were unaffected because npm generates `.cmd` wrappers that invoke `node` explicitly.
684
-
685
- This was discovered when wiring up the PP-08 CI gate against `npx @nerviq/cli@1.20.0`. Likely affected production users on Linux/macOS doing fresh `npx` installs since 2026-04-12.
686
-
687
- - Restored `#!/usr/bin/env node` as the first line of `bin/cli.js`.
688
- - Added `test/bin-shebang.test.js` regression test that scans every `bin` entry in `package.json` and asserts the shebang exists. Will catch any future drop of the shebang line on any bin script.
689
-
690
- ### Fixed — claudeMdContent pointer expansion accepts `@` imports
691
-
692
- `ProjectContext.claudeMdContent()` in `src/context.js` recognizes when CLAUDE.md is a thin pointer to another file (e.g., `AGENTS.md`) and expands it. The expansion regex `/^[a-zA-Z0-9_./-]+\.(md|txt|rst)$/` did not accept Claude Code's standard `@`-prefixed import syntax (`@AGENTS.md`, `@./docs/CODING.md`). Repos using the standard syntax saw all memory/prompting/quality checks fail because the auditor only saw the 1-line pointer.
693
-
694
- Discovered while investigating the NERVIQ site's self-dogfood score (25 85 after this fix plus content enrichment).
695
-
696
- - Updated regex to `/^@?\.?\/?[a-zA-Z0-9_./-]+\.(md|txt|rst)$/`; resolver strips `@` and `./` prefixes before `fileContent()`.
697
- - Added `test/context.test.js` (+6 tests) covering raw content, bare-filename pointer, `@`-prefix, `@./`-prefix, nested-subdir, and null-fixture cases.
698
-
699
- ### Added `prepublishOnly` lifecycle script
700
-
701
- `package.json` now wires the existing pre-publish drift guard (`tools/pre-publish.js`) to npm's `prepublishOnly` lifecycle, in addition to the manual `prepublish:check` alias. `npm publish` now blocks automatically on dirty tree, branch drift, missing CHANGELOG entry, jest failure, or release-metadata drift. `npm pack --dry-run` does not trigger it (verified) so local development is unaffected.
702
-
703
- ### Calibrated (not certified)Windsurf platform audit (PP-03)
704
-
705
- Windsurf platform audit recalibrated against 10 real Windsurf-using repos (`grapeot/devin.cursorrules`, `hyper-mcp-rs/hyper-mcp`, `dxos/dxos`, `snowflakedb/gosnowflake`, `ShareX/XerahS`, `Brawl345/Image-Reverse-Search-WebExtension`, `rudrankriyam/Ichi`, `snyk/snyk-intellij-plugin`, `wepublish/wepublish`, `AmadeusITGroup/otter`).
706
-
707
- Three systematic 10/10 false-positives eliminated:
708
- - `windsurfMemoriesConfigured` — opt-in memories surface; now N/A when absent.
709
- - `windsurfPackMcpRecommended` opt-in MCP recommendation; now N/A when absent.
710
- - `windsurfAdvisoryMcpHealth` — **real bug fix**: was reading the host's `os.platform()` and asserting it inside the audited repo's advisory. Now host-agnostic; uses repo-local evidence only (Windows/WSL gate generalised).
711
-
712
- Other improvements: pointer/`@import` expansion for Windsurf instruction surfaces (`.windsurf/rules/*`, `WINDSURF.md`, pointer files like `.ai/instructions.md`), `.windsurfrules/` directory form support, fallback to `AGENTS.md`/`CLAUDE.md` for stack-marker generalisation, frontmatter realism for `.mdc` files.
713
-
714
- 10-repo corpus moved from baseline 9–70 → final 32–83. 7/10 ≥70. The 3 below 70 (hyper-mcp 69, Ichi 64, wepublish 60) are documented genuine content-depth gaps in the audited repos themselves, not audit bugs. The 32 outlier (`grapeot/devin.cursorrules`) uses the deprecated single-file `.windsurfrules` legacy format.
715
-
716
- **Why "calibrated, not certified":** Gemini PP-02 cleared "all 10 ≥70" and "all mature (>10K stars) ≥73". Windsurf cleared the strict-FP <5% bar (the primary criterion) but Windsurf public adoption is thinner than Gemini at equivalent star thresholds the largest mature repo found was 5.9K stars. PPI stays at **0.75** until corpus expansion produces a mature-repo set passing the score floor. No inflated PPI claim shipped.
717
-
718
- ### Verified
719
-
720
- - jest: **335/335** passing (was 326 + 6 new context tests + 3 new shebang tests) — this is the `335`-test verification baseline.
721
- - canonical CLI tests: **162/162** passing.
722
- - matrix: **311/0** passing.
723
- - `npm pack --dry-run`: clean.
724
- - `node tools/validate-release-metadata.js --research ../nerviq-research-main`: validation passed.
725
-
726
- ## [1.20.0] - 2026-04-13
727
-
728
- ### Fixed — Gemini Platform Parity (PP-02, 10-repo calibration)
729
-
730
- Gemini becomes the **5th certified platform** (PPI 0.625 → **0.75**). Calibrated against 10 real Gemini-using repos (google-gemini/gemini-cli, google-gemini/cookbook, GoogleCloudPlatform/generative-ai, obra/superpowers, JuliusBrussee/caveman, google/site-kit-wp, google/dotprompt, vdesabou/kafka-docker-playground, OthmanAdi/planning-with-files, mscraftsman/generative-ai).
731
-
732
- Key calibrations:
733
- - `_expandGeminiMdImports` resolves `@path.md` imports and single-line-pointer `GEMINI.md` files (observed in google/dotprompt).
734
- - Fallback chain for Gemini instruction surface: AGENTS.md CLAUDE.md `.gemini/styleguide.md` (Gemini Code Assist convention).
735
- - `isMcpOnlySettings` helper: 5 CLI-behaviour checks go N/A on MCP-only `.gemini/settings.json`.
736
- - `geminiSettingsExists` / `geminiCommandsExist` now N/A when the directory is absent rather than flagging a failure these surfaces are opt-in.
737
- - Broadened `docsBundle` to accept AGENTS/CLAUDE/CONTRIBUTING/ARCHITECTURE/DEVELOPMENT as documentation evidence.
738
- - `geminiEnvApiKey` credits ADC, Vertex AI, `gemini auth`, and service-account flows (not just `GEMINI_API_KEY`).
739
- - Tightened `geminiPropagationCompleteness`: the bare word "skills" was firing FPs.
740
- - **Bug fix:** `context.fileName` can legally be an array per the Gemini CLI schema. `path.join` crashed with `TypeError` on `google/site-kit-wp`. Now handled.
741
-
742
- ### Measured (strict FP <5% across 10-repo corpus)
743
-
744
- | Repo | Stars | Before | After |
745
- |---|---|---|---|
746
- | obra/superpowers | 148K | 73 | **88** |
747
- | google-gemini/gemini-cli | 101K | 74 | **89** |
748
- | JuliusBrussee/caveman | 21K | 75 | **94** |
749
- | OthmanAdi/planning-with-files | 18K | 72 | **73** |
750
- | google-gemini/cookbook | 17K | 73 | **94** |
751
- | GoogleCloudPlatform/generative-ai | 17K | 73 | **88** |
752
- | google/site-kit-wp | 1.4K | crash | **78** |
753
- | vdesabou/kafka-docker-playground | 778 | 68 | **83** |
754
- | google/dotprompt | 507 | 64 | **75** |
755
- | mscraftsman/generative-ai | 206 | 64 | **70** |
756
-
757
- All 10 repos 70; all 6 mature repos (>10K stars) ≥ 73.
758
-
759
- - **Gemini Platform Parity: certified**. PPI: 0.625 → **0.75** (Claude + Cursor + Codex + Copilot + Gemini).
760
-
761
- 326/326 tests pass (+2 PP-02 regressions on top of v1.19.0's 324) — this is the `326`-test verification baseline.
762
-
763
- ## [1.19.0] - 2026-04-13
764
-
765
- ### Added
766
- - **EXP-04: `nerviq audit --fix` autofix flow**. `audit --fix` now runs the audit, applies fixable critical fixes, writes rollback manifests for successful writes, and re-audits before returning an exit code.
767
- - **Autofix docs**. Added `docs/autofix.md` with command examples, safety behavior, and exit-code semantics for the new one-shot flow.
768
- - **GOV-03: Time-to-First-Value benchmark** (`tools/ttfv-benchmark.py`). Measured harness across 4×4 install/repo combos; verdict on "<2 min" claim: TRUE (slowest median 16.1s on npx cold × nerviq-research).
769
-
770
- ### Changed
771
- - **Shared fix engine now covers instruction-surface autofix**. Missing `CLAUDE.md`, verification guidance, and safe hygiene templates can now be applied through the same fix pipeline used by the CLI write paths.
772
-
773
- ### Tests
774
- - Added `test/audit-fix.test.js` coverage for dry-run, auto-apply, rollback artifacts, `DO NOT AUTOEDIT` safety skips, exit-code handling, and hygiene rollback verification.
775
-
776
- 324/324 tests pass.
777
-
778
- ## [1.18.0] - 2026-04-13
779
-
780
- ### Fixed Copilot Platform Parity (PP-01, 10-repo calibration)
781
-
782
- - **Copilot audit now recognizes real-world repo conventions.** Calibrated against 10 active Copilot-using repos (home-assistant/core, block/goose, microsoft/vscode, astral-sh/uv, microsoft/playwright, langchain-ai/langchain, microsoft/typescript-go, microsoft/semantic-kernel, dotnet/aspire, github/awesome-copilot).
783
- - **JSONC tolerance in `.vscode/settings.json`**: parser now strips comments/trailing commas before evaluation (Copilot/VSCode honor JSONC; strict-JSON parsing produced false CP-B06 failures).
784
- - **Context fallback for AGENTS.md / CLAUDE.md**: repos that centralize agent guidance in AGENTS.md or CLAUDE.md at repo root are no longer penalized for `.github/copilot-instructions.md` substance checks.
785
- - **Stack-docs bundle helper**: 45 stack/domain checks now accept a documented bundle of per-stack signals (pyproject.toml + ruff.toml, Cargo.toml + rustfmt.toml, go.mod + golangci.yml, etc.) rather than requiring a single canonical file.
786
-
787
- ### Measured (strict FP rate < 5% across 10-repo corpus)
788
-
789
- | Repo | Stars | Before | After |
790
- |---|---|---|---|
791
- | home-assistant/core | 86K | 42 | **76** |
792
- | block/goose | 41K | 41 | **76** |
793
- | microsoft/vscode | 183K | 46 | **61** |
794
- | astral-sh/uv | 83K | 28 | **75** |
795
- | microsoft/playwright | 86K | 46 | **66** |
796
- | langchain-ai/langchain | 133K | 23 | **65** |
797
- | microsoft/typescript-go | 25K | — | **66** |
798
- | microsoft/semantic-kernel | 27K | 33 | **53** |
799
- | dotnet/aspire | 6K | 35 | **59** |
800
- | github/awesome-copilot | | 45 | **59** |
801
-
802
- All 10 repos ≥ 40; all 9 mature repos (>10K stars) ≥ 53.
803
-
804
- - **Copilot Platform Parity: certified**. PPI: 0.5 **0.625** (Claude + Cursor + Codex + Copilot).
805
-
806
- ### Added
807
- - EXPERIMENTAL qualifiers surfaced consistently on all user-facing Synergy mentions in README, docs/why-nerviq.md, docs/api-reference.md (SYN-04 audit).
808
-
809
- 317/317 tests pass.
810
-
811
- ## [1.17.3] - 2026-04-12
812
-
813
- ### Fixed — Codex Platform Parity (Issue #35, 10-repo scale-up)
814
-
815
- - **Hook checks now require Codex-specific evidence**. hooksClaimed() previously matched any generic 'hook' mention in AGENTS.md — triggering FPs on git hooks, React hooks, or dependency names like 'hookable'. Now requires .codex/hooks/, .codex/hooks.json, [hooks]/codex_hooks in config.toml, specific Codex event names (SessionStart, PreToolUse, PostToolUse, UserPromptSubmit), or explicit 'codex hooks' phrase. Fixes jessfraz/dotfiles, ModelEngine-Group/fit-framework, finbarr/yolobox.
816
- - **codexPackRecommendationQuality accepts .NET / Gradle manifests**. Added .sln, .slnx, .csproj, .fsproj, .vbproj, Directory.Packages.props, Directory.Build.props, global.json, gradlew. Fixes Megabit/Blazorise.
817
- - **codexNoInstructionContradictions ignores line-ending guidance**. CRLF/LF/trailing-newline/EOF rules are style preferences, not logical contradictions.
818
- - **codexAgentsMd accepts .codex/AGENTS.md**. Some repos store AGENTS.md inside .codex/.
819
-
820
- ### Measured
821
- - jessfraz/dotfiles: 50 → 67 (hook FPs removed, +17 points)
822
- - Codex strict FP rate: 5.98% <5% on 10-repo scale-up
823
- - **Codex Platform Parity: certified**. PPI: 0.375 → **0.5** (Claude + Cursor + Codex)
824
-
825
- 315/315 tests pass.
826
-
827
- Closes #35
828
-
829
- ## [1.17.2] - 2026-04-12
830
-
831
- ### Fixed
832
- - **`.codex/AGENTS.md` now recognized as a valid Codex instruction surface**. `agentsMdPath()` previously only checked root `AGENTS.md`, missing the emerging pattern of keeping Codex instructions inside `.codex/` (e.g., jessfraz/dotfiles stores a 12KB AGENTS.md there). This fix cascades to every check that reads `agentsContent()`, including `codexPackRecommendationQuality` — the last remaining FP in Codex re-validation.
833
-
834
- ### Measured
835
- - jessfraz/dotfiles: 47 50, `codexPackRecommendationQuality` FAIL PASS
836
- - Codex strict FP rate: <5% across both re-validation repos → ready to scale to 10
837
-
838
- ## [1.17.1] - 2026-04-12
839
-
840
- ### Fixed Platform Parity re-validation (after v1.17.0)
841
-
842
- - **codexPythonPackageStructure (CX-PY19)**: Now probes common package layouts directly via filesystem scan instead of relying on `ctx.files` (which only lists root entries). Correctly detects `src/<package>/__init__.py` and flat `<package>/__init__.py` layouts. Fixes false negative on openai/openai-agents-python.
843
- - **codexPackRecommendationQuality (CX-N03)**: Returns N/A for dotfiles/config-only repos (detected via 2+ signals from `.zshrc`, `.bashrc`, `.vimrc`, `.tmux.conf`, `.gitconfig`, `install.sh`, `bootstrap.sh`). Pack recommendations are not meaningful for non-code repos.
844
- - **cursorBugbotEnabled (CU-J01)**: Severity downgraded medium → low. Returns N/A unless repo shows BugBot evidence (bugbot config file, `.github/workflows` reference, or docs mention). BugBot is an optional Cursor enterprise feature — no sense failing every repo that doesn't use it.
845
-
846
- ### Measured
847
- - **PP-02 Codex**: openai-agents-python 72 → 73. 2 remaining FPs resolved.
848
- - **PP-02 Cursor**: CU-J01 no longer fires on every repo with rules. Strict FP rate 4.9% 0%.
849
-
850
- ## [1.17.0] - 2026-04-12
851
-
852
- ### Fixed — Cursor (from Platform Parity audit, Issue #32)
853
- - **CU-A01 (cursorRulesExist)**: Now follows file-redirect pattern. When `.cursor/rules` is a text file pointing to another path (e.g., `agents/rules/`), the rules are read from the redirect target. Fixes false negative on cal.com-style layouts.
854
- - **CU-A02 (cursorNoLegacyCursorrules)**: Returns N/A when repo has zero Cursor configuration. Fixes the calibration inversion where no-config repos outscored legacy-format repos.
855
- - **CU-C01 (cursorPrivacyMode)**: Severity downgraded from `critical` to `low`. Returns N/A when no rules exist. Privacy Mode is stored in SQLite state.vscdb and not meaningfully auditable from repo files.
856
-
857
- ### Fixed — Codex (from Platform Parity audit, Issue #33)
858
- - **codexAgentsArchitecture (CX-A04)**: Expanded heading recognition to include "Project Structure Guide", "Repo Structure", "Repository Layout", "Codebase Guide", "Key Directories" and enumerated directory maps. Fixes false negative on openai/openai-agents-python.
859
- - **codexCliAuthCredentialsStoreExplicit (CX-B12)**: Tightened managed-machine heuristic to require explicit terms (`managed device`, `shared workstation`, `multi-user host`, `VDI`, `kiosk`, `enterprise-managed`). No longer triggers on generic words like "shared utilities" or "server-managed".
860
- - **codexMcpPresentIfRepoNeedsExternalTools (CX-F01)**: Returns N/A for SDK/library repos (detected via package manifest + README patterns). SDKs document integrations without needing project-scoped MCP.
861
- - **codexSkillsHaveMetadata**: Now accepts YAML frontmatter (`name`, `description`) as valid metadata. Fixes false negative on repos using OpenAI-style SKILL.md.
862
- - **codexPythonFormatterConfigured (CX-PY08)**: Accepts broader Ruff setups (any `[tool.ruff]` section, not just `[tool.ruff.format]`), yapf, autopep8, and standalone config files.
863
- - **codexPythonFastapiEntryDocumented (CX-PY10)**: Returns N/A when FastAPI appears only in examples/dev deps. Also checks AGENTS.md for entry point documentation.
864
- - **codexPythonMigrationsDocumented (CX-PY11)**: Returns N/A for SDK/library repos and when repo has no DB dependencies.
865
- - **codexPythonPackageStructure (CX-PY19)**: Path-separator-agnostic regex works correctly on Windows.
866
- - **codexPackRecommendationQuality (CX-N03)**: Removed `package.json` as universal requirement. Now accepts any primary manifest (pyproject.toml, Cargo.toml, go.mod, Gemfile, flake.nix, Makefile, etc.). Returns N/A when no signals exist.
867
-
868
- ### Measured
869
- - **PP-02/PP-03 Cursor**: FP rate 15% → <5% after fixes. Score range 14–76 20–68 (still differentiated).
870
- - **PP-02/PP-03 Codex**: Strict FP 27.8% → <5% after fixes. openai-agents-python 65 → 72.
871
- - **Platform Parity Index (PPI)**: 0.125 → 0.375 (Claude + Cursor + Codex validated).
872
-
873
- ## [1.16.0] - 2026-04-12
874
-
875
- ### Added
876
- - **MOAT-01 — Harmony-first default onboarding**: When `nerviq audit` runs on a repo with 2+ configured AI platforms and no explicit `--platform`, the CLI now prints a one-line Harmony Score + drift summary *before* the single-platform audit. Cross-platform alignment becomes the first impression, in line with the durable moat positioning.
877
- - **`--no-harmony-first` flag**: Suppresses the new Harmony header for users who want strictly single-platform output.
878
- - **`harmony` envelope in `audit --json`**: On multi-platform repos, JSON output now includes `{ harmony: { score, driftCount, platforms } }` at the root, alongside the existing per-platform fields.
879
-
880
- ### Changed
881
- - **FB-05 — framework-aware fix rewriting**: On repos where no Node/JS stack is detected (Python, Go, Rust, Ruby, Java/Kotlin, Elixir, .NET), failure-message recommendations no longer hard-code `npm test` / `npm ci` / `npm install`. The audit post-processes `fix` text and substitutes the stack-appropriate equivalent (e.g. `pytest`, `go test ./...`, `cargo test`, `bundle exec rspec`, `./gradlew test`, `mix test`, `dotnet test`). No change on Node repos.
882
- - **Release-sync surfaces now reflect the `315`-test verification baseline** (was 307 in v1.15.0). `test/harmony-first.test.js` (5 cases) covers MOAT-01; `test/framework-aware-fixes.test.js` (3 cases) covers FB-05.
883
-
884
- ## [1.15.0] - 2026-04-11
885
-
886
- ### Added
887
- - **`--dir` flag**: Audit any directory without changing cwd (`nerviq audit --dir /path/to/repo`).
888
- - **Opt-in telemetry foundation**: Anonymous local usage tracking for audit, harmony-audit, and setup commands. Activated only when `NERVIQ_TELEMETRY=1` is set. No data leaves the machine.
889
-
890
- ### Fixed
891
- - **`--dir` flag was silently ignored**: The flag was parsed but not recognized as a value flag, causing `nerviq audit --dir /path` to always audit the current directory instead of the target. Critical fix for CI and scripted usage.
892
- - **CLAUDE.md reference following**: When CLAUDE.md is short and contains a file reference (e.g., `AGENTS.md`), the referenced file is now read and included in content checks. Fixes false negatives on projects like home-assistant/core.
893
- - **Build/test/lint checks use repo scope**: Quality checks now read all instruction surfaces (AGENTS.md, .cursorrules, copilot-instructions.md) instead of only CLAUDE.md.
894
- - **testCoverage regex expanded**: Now matches "## Testing", "writing tests", "run tests", and "test command" patterns.
895
- - **CHANGELOG check accepts variants**: Now recognizes CHANGES.md, HISTORY.md, NEWS.md in addition to CHANGELOG.md.
896
-
897
- ### Measured
898
- - **External repo audit (EXP-11)**: 10 popular repos (213K combined stars). Score range: 15–59. FP rate: ~2–4%.
899
-
900
- ## [1.14.0] - 2026-04-11
901
-
902
- ### Added
903
- - **Harmony Score standalone command**: `nerviq harmony-score` outputs 0-100 cross-platform alignment score with `--badge` (shields.io markdown), `--threshold N` (CI gate with exit code 1 on failure), `--quiet` (score number only for piping), and `--json` (full platform breakdown).
904
- - **Harmony Demo**: `nerviq harmony-demo` creates a temporary multi-platform project (Claude + Cursor + Copilot) with intentional drift and runs a live harmony audit — zero setup required.
905
- - **Cross-platform CI matrix**: CI now runs on 3 OS (Ubuntu, Windows, macOS) x 3 Node versions (18, 20, 22) for 9 total verification combinations.
906
-
907
- ## [1.13.0] - 2026-04-10
908
-
909
- ### Added
910
- - **Self-audit compliance**: CLAUDE.md now includes XML constraint blocks, mermaid architecture diagram, project description, lint command reference, and trust boundary — self-audit score 73→84.
911
- - **Hardened platform freshness**: all 8 platforms now have version-specific freshness coverage in the check engine.
912
- - **Cross-surface contract regression**: a new regression pack validates that public integration contracts, API docs, and MCP transport docs stay consistent across releases.
913
-
914
- ### Changed
915
- - **Flagship CLAUDE.md refactored**: instruction surface is now concise, modular, and follows the patterns Nerviq recommends to users.
916
- - **Audit and setup modules split**: `audit.js` split into recommendation + instruction modules; `setup.js` split into analysis + runtime modules — cleaner boundaries, same public API.
917
- - **HTTP API docs separated from MCP transport**: each integration surface now has its own documentation entry point.
918
-
919
- ### Fixed
920
- - **CI token gating**: research metadata validation is now gated on repo token, preventing false failures in forks and public CI.
921
- - **Live site metadata guard**: relaxed rendered-HTML guard to support Vercel's dynamic page output without spurious drift warnings.
922
-
923
- ## [1.12.0] - 2026-04-09
924
-
925
- ### Added
926
- - **Adaptive governance guidance**: `augment` / `suggest-only` now classify repo archetypes, recommend operating profiles, and emit adopt / defer / ignore decisions with explicit explainability fields.
927
- - **Continuous operating mode**: Nerviq now supports managed baselines, diff-aware drift mode for CI / PR / watch flows, named upgrade campaigns, lifecycle snapshot milestones, and expiry-backed exception workflows.
928
- - **Behavioral drift outcome layer**: `deep-review --behavioral` now provides an opt-in local report for structural drift, intent-vs-outcome mismatches, and behavioral snapshots over time.
929
- - **Org and integration standard surfaces**: added org policy inheritance, fleet score semantics, public integration contracts, first-tier integration gate docs, category definition kit, and a public benchmark corpus.
930
-
931
- ### Changed
932
- - **Proof quality is deeper and more specific**: high-volume source URLs now point to more relevant official documentation pages instead of generic roots.
933
- - **Claude techniques are now modularized internally**: the legacy `src/techniques.js` monolith was split into 12 fragments plus shared helpers, while keeping the public export contract unchanged.
934
-
935
- ### Fixed
936
- - **GitHub Actions contract stability**: org-scan JSON output now flushes safely in CI, modern action runtimes are aligned, and workflow stability remains green on Node 18 and Node 20.
937
- - **Public surfaces stay synchronized with shipped verification**: release-facing docs and site examples now reflect the current `307`-test verification baseline and `1.12.0` API/version examples.
938
-
939
- ## [1.11.0] - 2026-04-09
940
-
941
- ### Changed
942
- - **Instruction budget warnings now speak in tokens**: large instruction-file warnings use approximate token counts instead of raw byte thresholds, making context-window guidance more aligned with real model pressure.
943
- - **Deny-rule evaluation now normalizes paths consistently**: symlink aliases collapse into one effective deny rule, repo-escape traversal patterns no longer inflate posture, and explicit absolute-path deny rules remain visible as intentional coverage.
944
-
945
- ### Fixed
946
- - **Claude deny-rule parity across audit surfaces**: audit techniques, anti-pattern detection, and suggest-only analysis now share the same deny-rule normalization contract instead of evaluating path patterns differently.
947
- - **GitHub automation contract stability**: workspace audit JSON is now CI-safe and Aider freshness output matches the shared `fresh` / `stale` workflow contract.
948
- - **Jest suite alignment with current contracts**: server envelope responses and bootstrap copy are now validated against the live `{ data, meta }` API surface and current history/suggest-rules messaging.
949
-
950
- ## [1.10.0] - 2026-04-09
951
-
952
- ### Changed
953
- - **Product boundary clarified across product surfaces**: CLI, docs, and site now consistently position Nerviq as AI agent governance / configuration intelligence rather than a full SAST replacement.
954
- - **Score semantics aligned end to end**: live audit, snapshot, benchmark, dashboard, workspace, and harmony scores are now labeled distinctly so one repo cannot appear contradictory without explanation.
955
- - **Monorepo workspace semantics clarified**: `audit --workspace` now separates root governance health from workspace aggregate/package coverage and explains the relationship directly in CLI output.
956
-
957
- ### Fixed
958
- - **Audit vs anti-pattern parity**: shared instruction-surface detection now keeps verification guidance and anti-pattern reporting in sync across `.claude/commands`, `AGENTS.md`, and related instruction docs.
959
- - **Cold-start lifecycle guidance**: `history`, `compare`, `trend`, and `suggest-rules` now bootstrap users with actionable next steps instead of near-empty no-data output.
960
- - **Framework-aware verification detection**: Flutter, Swift/Xcode, Python, Go, and .NET verification command variants now count correctly, reducing false negatives on mature repos.
961
-
962
- ### Docs
963
- - **Proof and first-run surfaces matured**: published beta case studies, public before/after proof repo, Harmony-first homepage, simplified six-step getting-started flow, clearer Harmony-vs-Synergy maturity messaging, and reduced concept-load across first-touch docs.
964
-
965
- ## [1.9.0] - 2026-04-07
966
-
967
- ### Added
968
- - **Dockerfile best practices checks** (#8): multi-stage build detection, .dockerignore validation (node_modules + .env), no secrets in build args
969
- - **Terraform check category** (#10): terraform fmt in CI/pre-commit, .terraform in .gitignore, state file not committed, remote backend configured
970
- - **i18n / Spanish language support** (#12): new `src/i18n.js` module, `--lang` CLI flag, Spanish locale (`es.json`). Usage: `nerviq audit --lang es`
971
-
972
- ### Fixed
973
- - **P0 freshness URLs** (#14-#20): fixed 41 broken documentation URLs across all 7 platforms
974
- - Claude Code: `docs.anthropic.com` → `code.claude.com/docs`
975
- - Cursor: `docs.cursor.com` `cursor.com/docs`, background-agent cloud-agent
976
- - Copilot: restructured to `how-tos/`, `concepts/`, `responsible-use/`
977
- - Gemini: `ai.google.dev` → `google-gemini.github.io/gemini-cli/`
978
- - Windsurf: rules merged into memories, MCP moved to `plugins/cascade/mcp`
979
- - OpenCode: added `/docs/` prefix to config/plugins/permissions paths
980
- - Codex: `docs.codex.ai` `developers.openai.com/codex`
981
- - All 53 P0 sources now have `verifiedAt: 2026-04-07`
982
- - Check count: 2,431 → 2,438 (7 new checks)
983
-
984
- ## [1.8.9] - 2026-04-06
985
-
986
- ### Fixed (Expert Round FAANG-level review)
987
- - **Setup preserves custom deny rules**: merge via union+deduplicate instead of overwrite existing deny rules never lost
988
- - **Setup creates rollback artifacts**: setup operations now have rollback support like fix/apply
989
- - **protect-secrets covers Bash tool**: hook matcher expanded to `Read|Write|Edit|Bash`, checks `tool_input.command` for `cat .env`, `grep .env`, `base64 .env` etc.
990
- - **audit --out writes file**: `--out` flag now works for the audit command (was silently ignored)
991
- - **scan filters irrelevant categories**: stack-specific categories (flutter, ruby, etc.) hidden when 0 checks pass and stack not detected
992
- - **profile load supports built-in profiles**: `profile load read-only` now works by falling back to governance profiles
993
- - **Certification requires security gates**: Bronze needs gitIgnoreEnv+secretsProtection passing, Silver adds no critical anti-patterns, Gold needs harmony>=80
994
- - **SDK input validation**: all functions throw on null/invalid dir, unknown platform, empty description
995
- - **SDK TypeScript definitions**: added `passing`, `total`, `average` to type interfaces
996
- - **REST API consistent envelope**: all endpoints return `{ data, meta: { version, timestamp } }` format
997
- - **REST API CORS headers**: `Access-Control-Allow-Origin: *` for browser dashboard support
998
- - **benchmark organic score prominent**: organic improvement shown first as primary metric
999
- - **synergy-report implemented**: replaced "coming soon" with working multi-platform synergy dashboard
1000
-
1001
- ## [1.8.8] - 2026-04-06
1002
-
1003
- ### Fixed
1004
- - **Setup hooks registration**: hooks are now always registered in settings.json (merge, not overwrite) — previously hooks files were created but never connected
1005
- - **Platform-specific setup**: `setup --platform windsurf/aider/cursor` now routes to platform-specific setup functions instead of only creating Claude files
1006
- - **Rollback artifacts**: rollback now correctly records created/patched files (written after fixes, not before)
1007
- - **fix --dry-run**: properly separated from --auto — shows what would be fixed without writing files
1008
- - **fix removes allow:["*"]**: secretsProtection fixer now removes overly broad allow rules when adding deny rules
1009
- - **--profile flag**: now loads and applies governance profiles (read-only, suggest-only, safe-write, power-user) to audit
1010
- - **profile load**: now applies deny rules and threshold to settings.json instead of just displaying
1011
- - **SDK passing/total**: added `passing`, `total`, and `average` aliases to SDK audit/harmony results
1012
- - **Swift detection**: Swift projects (Package.swift, .xcodeproj) now detected in subdirectories
1013
- - **Python repository rules**: repository.md now references pyproject.toml instead of package.json for Python projects
1014
- - **convert filename doubling**: strips all known extensions (.md, .mdc, .txt) preventing CLAUDE.md.md
1015
- - **convert frontmatter leak**: MDC frontmatter stripped for all non-cursor targets (copilot, claude, codex, etc.)
1016
- - **scan vs org scan**: `scan` now shows detailed per-repo breakdown; `org scan` shows aggregated summary
1017
- - **migrate --platform cursor**: added migrate to FULL_COMMAND_SET so platform dispatch works correctly
1018
- - **Hooks fail-closed**: protect-secrets hook now blocks on error instead of allowing (fail-closed, not fail-open)
1019
- - **Settings merge**: setup now merges all fields (hooks, permissions, mcpServers, nerviqSetup) into existing settings.json
1020
-
1021
- ## [1.8.7] - 2026-04-06
1022
-
1023
- ### Changed
1024
- - **Complete CLAUDEX NERVIQ rebrand**: all internal references, env vars (`NERVIQ_NO_INSIGHTS`), JSON keys (`_nerviq_managed`), and property names updated
1025
- - **Restored audit-repo skill template**: Claude-native skill for running `npx @nerviq/cli --json` from within Claude Code
1026
- - **Updated .gitignore**: fixed legacy `claudex-setup` reference
1027
-
1028
- ## [1.8.6] - 2026-04-06
1029
-
1030
- ### Changed
1031
- - **Confidence calibration**: 5-tier system (0.3/0.6/0.7/0.8/0.9) based on actual evidence quality — stack checks=0.6, default=0.7, with-template=0.8, runtime-verified=0.9
1032
- - **SDK dogfooding**: CLI now imports `audit`, `detectPlatforms`, `getCatalog` from public SDK API instead of internal modules
1033
- - Updated test count badge: 293 tests
1034
-
1035
- ## [1.8.5] - 2026-04-06
1036
-
1037
- ### Changed Honesty & Maturity Overhaul (Stream 23)
1038
- - **Check count messaging**: All surfaces now show "2,431 checks (8 platforms × ~300 governance rules)" instead of inflated raw number
1039
- - **Synergy → [EXPERIMENTAL]**: Synergy dashboard, CLI output, and site docs now carry experimental label with disclaimer about static routing rules
1040
- - **Feature maturity labels**: Introduced GA/Beta/Experimental systemHarmony=GA, Plugins=GA, SDK=Beta, Synergy=Experimental
1041
- - **"evidence-based" accurate**: Changed to "rule-based audit engine with evidence tracking" in methodology docs
1042
- - **Positioning**: Added "Best for teams going from 0→governed" and "Not designed for deeply customized setups" to README and site
1043
- - **sourceUrl audit**: Verified 100% coverage (2,306/2,306 checks), identified 78 unique URLs for future specificity improvement
1044
-
1045
- ### Fixed
1046
- - Fixed 15 failing tests with stale check counts (2,306→2,431, domain packs 40→62)
1047
- - Jest version verified: ^30.3.0 valid (30.2.0 installed)
1048
-
1049
- ### Added
1050
- - 14 new Harmony integration tests (full pipeline, drift scenarios, add platform, state persistence, governance, advisor)
1051
- - Total test count: 293 passing across 28 suites
1052
- - MaturityBadge component on nerviq.net docs pages
1053
-
1054
- ## [1.7.1] - 2026-04-07
1055
-
1056
- ### Changed
1057
- - README synced: added 8 missing commands (rollback, check-health, anti-patterns, freshness, rules-export, org scan), 4 missing options (--full, --config-only, --only, --workspace), fixed NERVIQ→NERVIQ branding
1058
-
1059
- ## [1.7.0] - 2026-04-07
1060
-
1061
- ### Added Final P2 batch
1062
- - **UAT-11: `nerviq rollback`** — Undo the most recent apply by deleting all created files. Supports `--list` (show rollback points), `--dry-run` (preview), and auto-cleanup of rollback artifacts after use.
1063
- - **UAT-18**: `apply --only hooks,commands` already worked (verified)
1064
- - **UAT-19**: Benchmark messaging improved for post-setup runs
1065
-
1066
- ## [1.6.5] - 2026-04-07
1067
-
1068
- ### Added More P2 UX from UAT
1069
- - **UAT-14**: Governance shows top 5 domain/MCP packs by default, `--verbose` for all
1070
- - **UAT-20**: Frontend.md rule no longer generated for backend-only projects (Express, NestJS)
1071
- - **UAT-23**: `rules-export` shows human-readable summary by default, `--json` for full output
1072
- - **UAT-24**: `history --prune N` to clean old snapshots (keeps last N)
1073
- - **UAT-21**: Harmony task routing already dynamic (via UAT-04 phantom platform fix)
1074
-
1075
- ## [1.6.4] - 2026-04-07
1076
-
1077
- ### Added — P2 UX improvements from UAT
1078
- - **UAT-12**: Setup now lists every file created (`+ CLAUDE.md`, `+ .claude/settings.json`, ...)
1079
- - **UAT-13**: Lite mode shows pass/fail count: `Score: 78/100 (62/86 checks passing)`
1080
- - **UAT-15**: Audit header shows detected config files: `Found: CLAUDE.md, AGENTS.md, .cursorrules`
1081
- - **UAT-17**: Suggested next command includes `--platform` for non-Claude platforms
1082
- - **UAT-22**: History shows HH:MM timestamps when multiple snapshots share same date
1083
-
1084
- ## [1.6.3] - 2026-04-07
1085
-
1086
- ### Fixed — P1 from UAT
1087
- - **UAT-04**: Harmony only audits platforms with detected config files (was always 8/8)
1088
- - **UAT-05**: `apply --rollback` now shows clear error instead of silently re-applying
1089
- - **UAT-06**: Harmony drift now auto-recorded — compares scores to previous audit, records deltas ≥5 points
1090
- - **UAT-07**: Migrate error message includes usage example
1091
- - **UAT-08**: Doctor aider freshness gate no longer crashes (null safety)
1092
- - **UAT-09**: `nerviq fix` now auto-fixes `gitIgnoreEnv` (.env to .gitignore) and `secretsProtection` (deny rules in settings.json) — the two most common critical findings
1093
- - **UAT-10**: Rails/Laravel/.NET false positives in `fix` output eliminated (was caused by same null-inclusion bug as UAT-02)
1094
-
1095
- ## [1.6.2] - 2026-04-07
1096
-
1097
- ### Fixed P0 from UAT (ship-stoppers)
1098
- - **UAT-01 BLOCKER**: `npx @nerviq/cli audit` now works — added `@nerviq/cli` bin alias
1099
- - **UAT-02**: `nerviq fix` was showing 375 failed checks (including skipped) vs audit's 77. Fixed: now filters `r.passed === false` only, matching audit count exactly
1100
- - **UAT-03**: Confidence label `[MEDIUM]` was shown on critical items (confusing). Changed threshold: 0.7 confidence now shows `[HIGH]` instead of `[MEDIUM]`
1101
-
1102
- ## [1.6.1] - 2026-04-07
1103
-
1104
- ### Added
1105
- - **F3-01: `nerviq check-health`** Detects regressions between audit snapshots. Compares per-check pass/fail state and flags checks that went from passing to failing. When 3+ checks in the same category regress, alerts as "potential platform format change."
1106
- - **F3-03: Regression tests** 3 new tests for check-health: no-snapshots, stable state, and regression detection
1107
- - Supports `--json` for CI integration
1108
-
1109
- ## [1.6.0] - 2026-04-07
1110
-
1111
- ### Changed ACCURACY OVERHAUL
1112
- - **Stack detection accuracy**: Checks for Python, Go, Rust, Java, Ruby, PHP, .NET, Flutter, Swift, Kotlin now skip when the stack is only present in `examples/`, `docs/`, `test/`, `vendor/` directories — not at project root. Previously these fired false positives on monorepos and repos with example code.
1113
- - **Generic quality checks scoped**: 132 checks (observability, caching, i18n, rate-limiting, etc.) are now skipped by default — they measure general software quality, not AI agent configuration. Use `--verbose` to include them.
1114
- - **Urgency count fix**: Skipped (not-applicable) checks were incorrectly counted as critical/high in the lite output summary. Now only actual failures are counted.
1115
-
1116
- ### Impact
1117
- - supabase/supabase: Failed 120 → 55 (65 false positives eliminated)
1118
- - Nerviq's own repo: Fake "🔴 3 critical" → accurate "🔵 19 recommended"
1119
- - All failed checks are now relevant to AI agent configuration
1120
-
1121
- ## [1.5.3] - 2026-04-07
1122
-
1123
- ### Added
1124
- - **T4-01:** Confidence labels (`[HIGH]` / `[MEDIUM]` / `[HEURISTIC]`) on every failed check in full audit
1125
- - **T4-02:** Safety modes documented in README: read-only, suggest-only, dry-run, config-only, safe-write, power-user
1126
- - **T4-02:** `--config-only` flag added restricts writes to config files only
1127
- - **B4:** Suggest-only markdown export verified working (`nerviq suggest-only --out report.md`)
1128
-
1129
- ### Fixed
1130
- - Report header rebranded from "Nerviq" to "Nerviq" in markdown export
1131
-
1132
- ## [1.5.2] - 2026-04-07
1133
-
1134
- ### Added
1135
- - **F1-01: Lite-by-default** — `nerviq audit` now shows quick scan (score + top 3 actions). Use `--full` for complete output.
1136
- - **F1-02: Urgency tiers** — Lite output shows `🔴 critical / 🟡 high / 🔵 recommended` summary and per-item tier icons
1137
- - **F2-01: `nerviq fix` command** — Auto-fix checks with templates, show manual guidance for others, display score impact
1138
- - `nerviq fix`List fixable and manual-fix checks
1139
- - `nerviq fix <key>`Fix a specific check with before/after score
1140
- - `nerviq fix --all-critical` Fix all critical issues at once
1141
- - `nerviq fix --dry-run` — Preview without writing
1142
-
1143
- ### Changed
1144
- - Default `nerviq audit` is now lite mode (previously showed full output)
1145
- - `--full` flag added to restore previous full-output behavior
1146
- - `--verbose` still shows full output plus medium-priority recommendations
1147
- - Lite output streamlined: single fix line per item instead of redundant Why/Fix
1148
-
1149
- ## [1.5.1] - 2026-04-06
1150
-
1151
- ### Added
1152
- - "Get Started by Role" section in README (solo dev / team lead / enterprise paths)
1153
- - "What Nerviq Is — and Isn't" section in README (honest limitations, confidence levels)
1154
- - CHANGELOG entries for v1.2.5 through v1.5.0 (previously undocumented)
1155
-
1156
- ### Changed
1157
- - Check counts synced across all surfaces (README, package.json, badge): 2,431 total
1158
- - Removed stale "v1.0" reference from README
1159
- - Tagline sharpened: "Standardize and govern your AI coding agent setup"
1160
- - Platform check counts updated to match actual catalog
1161
- - Removed self-certification badge
1162
-
1163
- ## [1.5.0] - 2026-04-05
1164
-
1165
- ### Added
1166
- - Stream 8 Self-Dependent Execution — intelligence hardening
1167
- - New CLI commands: `nerviq rules-export`, `nerviq anti-patterns`, `nerviq freshness`
1168
- - A2: Recommendation rules export to JSON
1169
- - A3: Shared contract schemas (technique + pack)
1170
- - A6: 22 anti-pattern definitions with detection
1171
- - A7: Last-verified date tracking for 123 checks
1172
- - B5: External benchmark path (`nerviq benchmark --external /path`)
1173
- - B8: Governance hook risk level classification (high/medium/low)
1174
-
1175
- ### Changed
1176
- - B3: Augment now preserves and displays top 10 strengths
1177
-
1178
- ## [1.4.1] - 2026-04-05
1179
-
1180
- ### Fixed
1181
- - npm README display alignment
1182
-
1183
- ## [1.4.0] - 2026-04-05
1184
-
1185
- ### Added
1186
- - Stream 13: 84 new coverage checks across 15 directions
1187
- - MC-A (HIGH): Observability, Accessibility, GDPR, Error Tracking, Supply Chain — 31 checks
1188
- - MC-B (MED): i18n, API Versioning, Caching, Rate Limiting, Feature Flags, Docs, Monorepo, Performance — 43 checks
1189
- - MC-C (LOW): WebSocket/Real-time, GraphQL — 10 checks
1190
- - Total reached 2,039 checks across 96 categories
1191
-
1192
- ## [1.3.2] - 2026-04-05
1193
-
1194
- ### Changed
1195
- - README fully updated: badge, platform table, category table, stack languages table
1196
- - package.json description synced to 1,955 checks
1197
- - Added `harmony-add` command to docs
1198
-
1199
- ## [1.3.1] - 2026-04-05
1200
-
1201
- ### Added
1202
- - Stream 5D: 35 mobile stack checks (Flutter 15, Swift 10, Kotlin 10)
1203
- - Stream 4 Batch 2: 22 new domain packs (healthcare to energy)
1204
- - Stream 5 complete: 172 stack checks across 10 languages
1205
-
1206
- ## [1.3.0] - 2026-04-05
1207
-
1208
- ### Added
1209
- - Stream 5: Stack-specific checks for 7 languages (137 new checks)
1210
- - Python (26), Go (21), Rust (21), Java/Spring (21), Ruby (16), PHP (16), .NET (16)
1211
- - QP-D02: API reference documentation (`docs/api-reference.md`)
1212
-
1213
- ## [1.2.7] - 2026-04-05
1214
-
1215
- ### Changed
1216
- - Version bump for npm publish alignment
1217
-
1218
- ## [1.2.6] - 2026-04-05
1219
-
1220
- ### Added
1221
- - EC1-EC8: All 6 new ECC-inspired checks + 2 advisor task types
1222
-
1223
- ### Fixed
1224
- - Flaky `compareLatest` test (timestamp tiebreaker sort)
1225
-
1226
- ## [1.2.5] - 2026-04-05
1227
-
1228
- ### Added
1229
- - 3 ECC-inspired checks: `llms.txt`, MCP budget warning, hook exit code docs
1230
-
1231
- ### Changed
1232
- - Complete NERVIQ → NERVIQ rebrand across docs, content, action, landing page
1233
- - CHANGELOG rewritten to Keep a Changelog format with full version history
1234
-
1235
- ## [1.2.4] - 2026-04-05
1236
-
1237
- ### Added
1238
- - H8: Unified platform capability matrices into a single source of truth
1239
- - Windsurf, Aider, and OpenCode intelligence added to Harmony module
1240
- - Codex platform additions synced to metadata
1241
-
1242
- ### Changed
1243
- - MG5-MG11: Complete NERVIQ to NERVIQ migration in CLI codebase
1244
- - Hardcoded `.claude/nerviq-cli/` paths migrated to `.nerviq/` with fallback
1245
-
1246
- ## [1.2.3] - 2026-04-05
1247
-
1248
- ### Added
1249
- - Batch Q1: check-matrix and golden-matrix tests for Windsurf, Aider, OpenCode
1250
- - Quality Perfection Q1: Gold certification, harmony+synergy proof
1251
- - SDK/server tests and plugin dogfood validation
1252
-
1253
- ### Changed
1254
- - Self-audit score improved from 80 to 90
1255
- - CI self-audit integrated into pipeline
1256
-
1257
- ## [1.2.1] - 2026-04-05
1258
-
1259
- ### Fixed
1260
- - Skip API/DB/Auth/Monitoring checks on irrelevant projects (false positive reduction)
1261
- - Self-dogfood: added `.mcp.json` to own project
1262
- - LICENSE updated to AGPL-3.0 full text
1263
- - CI test assertions updated for new error messages and .npmignore changes
1264
-
1265
- ## [1.2.0] - 2026-04-05
1266
-
1267
- ### Added
1268
- - Massive expansion: 673 to 2,306 checks (+1,633)
1269
- - Batch 4: 25 case studies (10 single-platform + 10 harmony/synergy + 5 existing) with INDEX
1270
- - Batch 3: +104 experiments (228 to 332) and +133 research docs (315 to 448)
1271
- - 27 cross-platform research documents
1272
-
1273
- ## [1.1.1] - 2026-04-05
1274
-
1275
- ### Added
1276
- - Batch 2: +24 domain packs (16 to 40) and +23 MCP packs (26 to 49) across all 8 platforms
1277
-
1278
- ## [1.1.0] - 2026-04-05
1279
-
1280
- ### Added
1281
- - Batch 1: +383 checks (673 to 1,056) across 8 new categories for all 8 platforms
1282
-
1283
- ## [1.0.2] - 2026-04-05
1284
-
1285
- ### Fixed
1286
- - Scorecard: 15 dimensions improved (privacy, security, monorepo, org, integrations, telemetry, OTel, SLSA, versioning, errors, audit log, deprecation, large files, relevance decay, case studies)
1287
-
1288
- ### Added
1289
- - Methodology documentation, FP ranking, SBOM, CI experiments
1290
- - Improved `.npmignore` and `test:all` script
1291
-
1292
- ## [1.0.1] - 2026-03-31
1293
-
1294
- ### Fixed
1295
- - Mermaid diagram rendering in README
1296
- - macOS `grep` compatibility issue
1297
- - Version stamp display
1298
-
1299
- ## [1.0.0] - 2026-04-05
1300
-
1301
- ### Changed
1302
- - **Renamed from nerviq-cli to Nerviq** "The intelligent nervous system for AI coding agents"
1303
- - Full rebrand across CLI, docs, and package metadata
1304
-
1305
- ## [0.9.6] - 2026-04-05
1306
-
1307
- ### Added
1308
- - SDK for programmatic access
1309
- - REST API server with Express
1310
- - Plugin system for extensibility
1311
- - SLSA provenance for supply chain security
1312
- - CONTRIBUTING.md for open-source contributors
1313
-
1314
- ## [0.9.5] - 2026-04-05
1315
-
1316
- ### Added
1317
- - VS Code extension
1318
- - `catalog` command for browsing checks
1319
- - Performance baselines and benchmarks
1320
- - Feedback loop for community contributions
1321
-
1322
- ### Changed
1323
- - All 673 checks now include `sourceUrl` and `confidence` metadata
1324
-
1325
- ## [0.9.4] - 2026-04-05
1326
-
1327
- ### Added
1328
- - GitHub Action for CI/CD integration
1329
- - MCP server for tool integration
1330
- - `doctor`, `convert`, and `migrate` commands
1331
- - Freshness pipeline for check staleness detection
1332
- - 3 case studies with real project data
1333
- - Harmony, Synergy, and E2E test suites (187 total tests)
1334
-
1335
- ## [0.9.3] - 2026-04-05
1336
-
1337
- ### Fixed
1338
- - Checks updated from experiment findings: Gemini +5, Copilot +5, Cursor +4, Aider +3, Windsurf/OpenCode fixes
1339
- - Stale checks cleaned and new checks added
1340
- - CI: added `npm ci` step for dependency install
1341
-
1342
- ### Changed
1343
- - README updated with beta notice and coming-soon platform list
1344
-
1345
- ## [0.9.x] - 2026-04-04
1346
-
1347
- ### Changed
1348
- - README updated with nerviq-cli to Nerviq migration notice
1349
-
1350
- ## [0.5.1] - 2026-03-31
1351
-
1352
- ### Changed
1353
- - Deep-review auto-detects Claude Code presence (no API key needed)
1354
- - Landing page and help text updated
1355
-
1356
- ## [0.5.0] - 2026-03-31
1357
-
1358
- ### Added
1359
- - AI-powered `deep-review` command using Claude API
1360
- - Intelligent analysis beyond static checks
1361
-
1362
- ## [0.4.0] - 2026-03-31
1363
-
1364
- ### Added
1365
- - 9 quality-deep checks for veteran Claude Code users
1366
- - Deeper analysis for experienced workflows
1367
-
1368
- ### Changed
1369
- - Community feedback addressed: improved honesty, no-overwrite behavior, less dogmatic tone
1370
-
1371
- ## [0.3.2] - 2026-03-31
1372
-
1373
- ### Changed
1374
- - README v2: all commands documented, smart gen showcase, 54 checks table, GitHub Action, privacy section
1375
-
1376
- ## [0.3.1] - 2026-03-31
1377
-
1378
- ### Added
1379
- - Anonymous insights collection
1380
- - Weakest areas analysis
1381
- - Community statistics dashboard
1382
-
1383
- ### Fixed
1384
- - Insights endpoint corrected to `nerviq.workers.dev`
1385
-
1386
- ## [0.3.0] - 2026-03-31
1387
-
1388
- ### Added
1389
- - Interactive wizard for guided setup
1390
- - Watch mode for continuous monitoring
1391
- - Landing page with FAQ, trust signals, badges
1392
-
1393
- ## [0.2.1] - 2026-03-31
1394
-
1395
- ### Added
1396
- - Smart `CLAUDE.md` generator based on project analysis
1397
- - `badge` command for README status badges
1398
- - GitHub Action for automated auditing
1399
- - Quick wins recommendations
1400
-
1401
- ## [0.2.0] - 2026-03-31
1402
-
1403
- ### Added
1404
- - Expanded to 54 checks across 18 technology stacks
1405
- - Improved CLAUDE.md templates
1406
-
1407
- ### Fixed
1408
- - Security: removed hardcoded Dev.to API key from CLAUDE.md
1409
- - Security: made NERVIQ catalog links private
1410
-
1411
- ## [0.1.0] - 2026-03-30
1412
-
1413
- ### Added
1414
- - Initial release of nerviq-cli (later renamed to Nerviq)
1415
- - Project audit and optimization for Claude Code workflows
1416
- - Landing page (GitHub Pages ready)
1417
- - Launch content and community posts
1418
-
1419
- [Unreleased]: https://github.com/nerviq/nerviq/compare/v1.29.0...HEAD
1420
- [1.29.0]: https://github.com/nerviq/nerviq/compare/v1.28.0...v1.29.0
1421
- [1.28.0]: https://github.com/nerviq/nerviq/compare/v1.27.1...v1.28.0
1422
- [1.27.1]: https://github.com/nerviq/nerviq/compare/v1.27.0...v1.27.1
1423
- [1.27.0]: https://github.com/nerviq/nerviq/compare/v1.26.0...v1.27.0
1424
- [1.26.0]: https://github.com/nerviq/nerviq/compare/v1.25.0...v1.26.0
1425
- [1.25.0]: https://github.com/nerviq/nerviq/compare/v1.24.0...v1.25.0
1426
- [1.24.0]: https://github.com/nerviq/nerviq/compare/v1.23.0...v1.24.0
1427
- [1.23.0]: https://github.com/nerviq/nerviq/compare/v1.22.0...v1.23.0
1428
- [1.22.0]: https://github.com/nerviq/nerviq/compare/v1.21.0...v1.22.0
1429
- [1.21.0]: https://github.com/nerviq/nerviq/compare/v1.20.1...v1.21.0
1430
- [1.20.1]: https://github.com/nerviq/nerviq/compare/v1.20.0...v1.20.1
1431
- [1.20.0]: https://github.com/nerviq/nerviq/compare/v1.19.0...v1.20.0
1432
- [1.19.0]: https://github.com/nerviq/nerviq/compare/v1.18.0...v1.19.0
1433
- [1.18.0]: https://github.com/nerviq/nerviq/compare/v1.17.3...v1.18.0
1434
- [1.17.3]: https://github.com/nerviq/nerviq/compare/v1.17.2...v1.17.3
1435
- [1.17.2]: https://github.com/nerviq/nerviq/compare/v1.17.1...v1.17.2
1436
- [1.17.1]: https://github.com/nerviq/nerviq/compare/v1.17.0...v1.17.1
1437
- [1.17.0]: https://github.com/nerviq/nerviq/compare/v1.16.0...v1.17.0
1438
- [1.16.0]: https://github.com/nerviq/nerviq/compare/v1.15.0...v1.16.0
1439
- [1.15.0]: https://github.com/nerviq/nerviq/compare/v1.14.0...v1.15.0
1440
- [1.14.0]: https://github.com/nerviq/nerviq/compare/v1.13.0...v1.14.0
1441
- [1.13.0]: https://github.com/nerviq/nerviq/compare/v1.12.0...v1.13.0
1442
- [1.12.0]: https://github.com/nerviq/nerviq/compare/v1.11.0...v1.12.0
1443
- [1.11.0]: https://github.com/nerviq/nerviq/compare/v1.10.0...v1.11.0
1444
- [1.10.0]: https://github.com/nerviq/nerviq/compare/v1.9.0...v1.10.0
1445
- [1.9.0]: https://github.com/nerviq/nerviq/compare/v1.8.9...v1.9.0
1446
- [1.8.9]: https://github.com/nerviq/nerviq/compare/v1.8.8...v1.8.9
1447
- [1.8.8]: https://github.com/nerviq/nerviq/compare/v1.8.7...v1.8.8
1448
- [1.8.7]: https://github.com/nerviq/nerviq/compare/v1.8.6...v1.8.7
1449
- [1.8.6]: https://github.com/nerviq/nerviq/compare/v1.8.5...v1.8.6
1450
- [1.8.5]: https://github.com/nerviq/nerviq/compare/v1.7.1...v1.8.5
1451
- [1.7.1]: https://github.com/nerviq/nerviq/compare/v1.7.0...v1.7.1
1452
- [1.7.0]: https://github.com/nerviq/nerviq/compare/v1.6.5...v1.7.0
1453
- [1.6.5]: https://github.com/nerviq/nerviq/compare/v1.6.4...v1.6.5
1454
- [1.6.4]: https://github.com/nerviq/nerviq/compare/v1.6.3...v1.6.4
1455
- [1.6.3]: https://github.com/nerviq/nerviq/compare/v1.6.2...v1.6.3
1456
- [1.6.2]: https://github.com/nerviq/nerviq/compare/v1.6.1...v1.6.2
1457
- [1.6.1]: https://github.com/nerviq/nerviq/compare/v1.6.0...v1.6.1
1458
- [1.6.0]: https://github.com/nerviq/nerviq/compare/v1.5.3...v1.6.0
1459
- [1.5.3]: https://github.com/nerviq/nerviq/compare/v1.5.2...v1.5.3
1460
- [1.5.2]: https://github.com/nerviq/nerviq/compare/v1.5.1...v1.5.2
1461
- [1.5.1]: https://github.com/nerviq/nerviq/compare/v1.5.0...v1.5.1
1462
- [1.5.0]: https://github.com/nerviq/nerviq/compare/v1.4.1...v1.5.0
1463
- [1.4.1]: https://github.com/nerviq/nerviq/compare/v1.4.0...v1.4.1
1464
- [1.4.0]: https://github.com/nerviq/nerviq/compare/v1.3.2...v1.4.0
1465
- [1.3.2]: https://github.com/nerviq/nerviq/compare/v1.3.1...v1.3.2
1466
- [1.3.1]: https://github.com/nerviq/nerviq/compare/v1.3.0...v1.3.1
1467
- [1.3.0]: https://github.com/nerviq/nerviq/compare/v1.2.7...v1.3.0
1468
- [1.2.7]: https://github.com/nerviq/nerviq/compare/v1.2.6...v1.2.7
1469
- [1.2.6]: https://github.com/nerviq/nerviq/compare/v1.2.5...v1.2.6
1470
- [1.2.5]: https://github.com/nerviq/nerviq/compare/v1.2.4...v1.2.5
1471
- [1.2.4]: https://github.com/nerviq/nerviq/compare/v1.2.3...v1.2.4
1472
- [1.2.3]: https://github.com/nerviq/nerviq/compare/v1.2.1...v1.2.3
1473
- [1.2.1]: https://github.com/nerviq/nerviq/compare/v1.2.0...v1.2.1
1474
- [1.2.0]: https://github.com/nerviq/nerviq/compare/v1.1.1...v1.2.0
1475
- [1.1.1]: https://github.com/nerviq/nerviq/compare/v1.1.0...v1.1.1
1476
- [1.1.0]: https://github.com/nerviq/nerviq/compare/v1.0.2...v1.1.0
1477
- [1.0.2]: https://github.com/nerviq/nerviq/compare/v1.0.1...v1.0.2
1478
- [1.0.1]: https://github.com/nerviq/nerviq/compare/v1.0.0...v1.0.1
1479
- [1.0.0]: https://github.com/nerviq/nerviq/compare/v0.9.6...v1.0.0
1480
- [0.9.6]: https://github.com/nerviq/nerviq/compare/v0.9.5...v0.9.6
1481
- [0.9.5]: https://github.com/nerviq/nerviq/compare/v0.9.4...v0.9.5
1482
- [0.9.4]: https://github.com/nerviq/nerviq/compare/v0.9.3...v0.9.4
1483
- [0.9.3]: https://github.com/nerviq/nerviq/compare/v0.9.x...v0.9.3
1484
- [0.9.x]: https://github.com/nerviq/nerviq/compare/v0.5.1...v0.9.x
1485
- [0.5.1]: https://github.com/nerviq/nerviq/compare/v0.5.0...v0.5.1
1486
- [0.5.0]: https://github.com/nerviq/nerviq/compare/v0.4.0...v0.5.0
1487
- [0.4.0]: https://github.com/nerviq/nerviq/compare/v0.3.2...v0.4.0
1488
- [0.3.2]: https://github.com/nerviq/nerviq/compare/v0.3.1...v0.3.2
1489
- [0.3.1]: https://github.com/nerviq/nerviq/compare/v0.3.0...v0.3.1
1490
- [0.3.0]: https://github.com/nerviq/nerviq/compare/v0.2.1...v0.3.0
1491
- [0.2.1]: https://github.com/nerviq/nerviq/compare/v0.2.0...v0.2.1
1492
- [0.2.0]: https://github.com/nerviq/nerviq/compare/v0.1.0...v0.2.0
1493
- [0.1.0]: https://github.com/nerviq/nerviq/releases/tag/v0.1.0
1
+ # Changelog
2
+
3
+ All notable changes to the **Nerviq** CLI are documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+
8
+ ## [Unreleased]
9
+
10
+ ## [1.29.1] - 2026-04-16
11
+
12
+ ### Fixed — UX polish from external pilot feedback
13
+
14
+ Three small UX fixes surfaced by an external pilot session documented in
15
+ `research/pilot-feedback-2026-04-16-external-project.md`.
16
+
17
+ - **`setup --auto` counter no longer undercounts.** The end-of-setup
18
+ summary used an internal `created` counter that could drift from
19
+ `writtenFiles` (e.g. when `.claude/settings.json` was merged rather
20
+ than freshly created). The summary now reports
21
+ `writtenFiles.length` directly, matching the per-file log lines
22
+ above it. `--agent-mode` JSON output aligned to the same source of
23
+ truth.
24
+ - **`nerviq watch` compact output shows blocker keys inline.** The
25
+ `block=N` segment now appends up to three blocking check IDs (e.g.
26
+ `block=2 [permissionDeny, hookRegistration]`) so a failing gate is
27
+ actionable without a separate `nerviq audit` round-trip. A new
28
+ `blockingKeys` array is exposed on the continuous-status report for
29
+ programmatic consumers.
30
+ - **MONITOR help section disambiguates `watch` vs `serve` vs
31
+ `--drift-mode watch`.** Added a three-line orientation at the top
32
+ of the MONITOR block describing who each surface is aimed at
33
+ (local human, machine/HTTP, governance-posture flag).
34
+
35
+ ### Not shipped (deferred)
36
+
37
+ - `nerviq --version` update-notifier. The CLI ships with **zero
38
+ runtime dependencies** by design; adding `update-notifier` would
39
+ pull ~20 transitive deps. A zero-dep implementation is viable but
40
+ needs its own spec (cache location, opt-out, telemetry). Tracked
41
+ in the pilot-feedback doc.
42
+
43
+ ## [1.29.0] - 2026-04-14
44
+
45
+ ### FixedShallow-risk FP rate reduction (CTO-06b)
46
+
47
+ Tightens the shallow-risk pattern regexes based on the 60-repo FP
48
+ measurement from `research/exp-cto-06-fp-measurement-2026-04-14.md`.
49
+
50
+ - **`agent-config-missing-file`** the single pattern that produced
51
+ essentially all the FPs. Overnight corpus measurement found 520
52
+ hits / 63.5% lower-bound FP rate across the PP-08 corpus (6.35×
53
+ above the 0.10 gate).
54
+
55
+ ### Impact
56
+
57
+ - Corpus hits: **520 → 69 (-86.7%)**.
58
+ - Lower-bound FP rate: **63.5% → 8.7%** (under the 0.10 gate).
59
+ - All other 7 patterns remained at 0 hits across the corpus (nothing
60
+ to tighten this pass — they were already quiet).
61
+
62
+ ### What got tightened
63
+
64
+ - Pointer regex no longer fires on:
65
+ - Fenced code-example bodies.
66
+ - URL-shape references.
67
+ - Well-known external conventions (e.g. `.github/CODEOWNERS`,
68
+ `node_modules/*`, `.git/*`, `vendor/*`).
69
+ - Host-document path resolution is strict to the repo root; relative
70
+ references that resolve outside the repo are now ignored
71
+ instead of reported as missing.
72
+ - Quote-wrapped example paths in prose (e.g. `"docs/SECURITY.md"` as
73
+ an illustration in a paragraph) distinguished from bare reference
74
+ paths.
75
+
76
+ ### Verified
77
+
78
+ - jest: **475/475** passing — this is the `475`-test verification baseline. (was 452 + 23 new negative-fixture
79
+ tests in `test/shallow-risk.test.js`, each reproducing a FP
80
+ eliminated this pass).
81
+ - canonical CLI tests: **162/162** passing.
82
+ - `npm pack --dry-run`: clean.
83
+ - `node tools/validate-release-metadata.js`: validation passed for v1.29.0.
84
+ - Shallow-risk now runnable on real repos without drowning the
85
+ signal. Feature stays `Experimental` until the corpus measurement
86
+ sits below the 0.10 gate twice in a row.
87
+
88
+ Evidence: `research/exp-cto-06-fp-measurement-2026-04-14.md`
89
+ updated with a "2026-04-14 tightening pass" section including
90
+ per-pattern before/after.
91
+
92
+ ## [1.28.0] - 2026-04-14
93
+
94
+ ### Calibrated (not certified) — OpenCode Platform Parity (PP-05)
95
+
96
+ The last of the 8 supported platforms finally gets its calibration
97
+ pass. OpenCode moves from "untouched" to "calibrated" against 10
98
+ real OpenCode-using public repos. Same judgment bar as Windsurf
99
+ (PP-03) and Aider (PP-04) — strict-FP <5% met, all-10-≥70 not fully
100
+ met. Source landed in commit `5114834`.
101
+
102
+ 10-repo corpus: 8/10 scored ≥70 post-calibration. PPI stays at
103
+ **0.75** OpenCode public adoption at the mature-star tier is
104
+ sparse, same judgment pattern as Windsurf/Aider. Added to
105
+ `research/platform-parity-corpus.json`, evidence docs
106
+ `exp-pp-09-opencode-fp-2026-04-14.md` +
107
+ `exp-pp-10-opencode-external-2026-04-14.md`.
108
+
109
+ ### Verified
110
+
111
+ - jest: **452/452** passing this is the `452`-test verification baseline. (was 440 + 12 new opencode-pp05
112
+ regression tests).
113
+ - canonical CLI tests: **162/162** passing.
114
+ - `npm pack --dry-run`: clean.
115
+ - `node tools/validate-release-metadata.js`: validation passed for v1.28.0.
116
+ - All guard suites still green (claude-na-gates, layer-coverage,
117
+ framework-native, audit-evidence, score-preview, 3 format tests,
118
+ shallow-risk).
119
+
120
+ **All 8 platforms now calibrated or certified:** Claude, Cursor,
121
+ Codex, Copilot, Gemini (certified, PPI contribution 1.0 each) +
122
+ Windsurf, Aider, OpenCode (calibrated, 0.75 base). PPI 0.75 will
123
+ graduate to 0.875+ only when corpus expansion on one of
124
+ Windsurf/Aider/OpenCode produces a mature-repo set passing the
125
+ score floor.
126
+
127
+ ## [1.27.1] - 2026-04-14
128
+
129
+ ### Fixed npm tarball completeness + Windows output encoding (MEMO wave)
130
+
131
+ Addresses two real npm-user issues surfaced by the Codex CTO/CEO +
132
+ Market Memo (2026-04-13 v2):
133
+
134
+ - **`package.json` `files` broadened** (MEMO-17): the published
135
+ tarball now includes `docs/`, `contracts/`, `sdk/README.md`,
136
+ `CHANGELOG.md`, and `SECURITY.md` alongside `bin/`, `src/`, and
137
+ `README.md`. Previously these docs surfaces were referenced in
138
+ the README but not shipped in the npm tarball, meaning external
139
+ users hit broken doc links post-install. Verified via
140
+ `npm pack --dry-run` — tarball now matches what the README
141
+ promises.
142
+
143
+ - **Windows output encoding** (MEMO-16): the CLI console output
144
+ previously rendered mojibake on Windows cmd.exe where the runtime
145
+ default code page did not support emoji (✅ ❌ ✔ ✗ U+2705 / U+274C /
146
+ U+2713 / U+2717). Introduced `src/output-icons.js` as a single
147
+ helper that emits clean ASCII fallbacks (`[OK]`, `[FAIL]`,
148
+ `[SKIP]`, `[WARN]`) when `NERVIQ_ASCII_OUTPUT=1` or auto-detected
149
+ from `process.platform === 'win32'` + non-TTY. Wired through
150
+ `src/setup/runtime.js`, `src/setup.js`, `src/init.js`,
151
+ `src/codex/setup.js`, `src/gemini/setup.js`, `test/run.js`.
152
+ 2 new regression tests in `test/output-encoding.test.js`.
153
+
154
+ ### Also this release
155
+
156
+ - **7 back-dated GitHub Releases** created for v1.21.0 through
157
+ v1.27.0 (MEMO-01). Previously the public GitHub release surface
158
+ lagged npm by 7 versions; it now reflects the full release
159
+ history.
160
+ - **3 stale GitHub issues closed** (MEMO-02: #24, #25, #26) —
161
+ feature requests for Markdown / JUnit / CSV output that were
162
+ actually shipped in v1.22.0. Each closed with a shipped-in
163
+ attribution comment.
164
+
165
+ ### Verified
166
+
167
+ - jest: **440/440** passing — this is the `440`-test verification baseline. (was 438 + 2 new output-encoding
168
+ regression tests).
169
+ - canonical CLI tests: **162/162** passing.
170
+ - `npm pack --dry-run`: clean, includes the broadened files set.
171
+ - `node tools/validate-release-metadata.js --research <path>`:
172
+ validation passed for v1.27.1.
173
+
174
+ Evidence: `research/exp-memo-autonomous-wave-2026-04-14.md` in the
175
+ research repo.
176
+
177
+ ## [1.27.0] - 2026-04-14
178
+
179
+ ### Added Shallow Risk Mode (experimental, CTO-06)
180
+
181
+ Opt-in `--shallow-risk` lane that surfaces obvious problems at the
182
+ intersection of agent configuration (CLAUDE.md, `.claude/`, `.cursor/`,
183
+ `.codex/`, `.aider.conf.yml`, `.windsurf/`, etc.) and the rest of
184
+ the codebase. Closes the 2026-04-08 UAT trust-break where evaluators
185
+ said "missed something obvious" — by catching a narrow, curated set
186
+ of issues **no generic scanner can find** because they require
187
+ understanding agent-config semantics.
188
+
189
+ Implementation follows the approved design doc v2 (commit `f425209`
190
+ in the research repo, `research/exp-cto-06-shallow-risk-design-2026-04-14.md`).
191
+
192
+ ### The 8 initial patterns (all NERVIQ-native)
193
+
194
+ 1. **`agent-config-missing-file`** CLAUDE.md / AGENTS.md references
195
+ a repo file that doesn't exist; agent works with broken context.
196
+ 2. **`agent-config-stack-contradiction`** — CLAUDE.md says "Go project"
197
+ but repo is Python; agent recommends wrong tooling every session.
198
+ 3. **`agent-config-cross-platform-drift`** — Two platform configs
199
+ give contradictory instructions (Cursor ↔ Claude disagree on
200
+ primary language).
201
+ 4. **`mcp-server-no-allowlist`** MCP server declared with empty
202
+ permissions / wildcard allow = full shell access, no guardrail.
203
+ 5. **`hook-script-missing`** Hook declared in `.claude/settings.json`
204
+ but the script file doesn't exist; hook silently skipped.
205
+ 6. **`agent-config-secret-literal`** — Secret token literal pasted
206
+ into CLAUDE.md / agent config as "example". Narrow secret scanning
207
+ scoped to our lane only (NOT broad repo secret scanning — use
208
+ gitleaks / truffleHog for that).
209
+ 7. **`agent-config-deprecated-keys`** Config uses keys the platform
210
+ removed in a later release (powered by our freshness manifest).
211
+ 8. **`agent-config-dangerous-autoapprove`**Auto-approve list
212
+ contains destructive patterns (`rm -rf *`, `git push --force`,
213
+ `drop table`). Never suppressed.
214
+
215
+ ### Shallow-risk is a parallel lane — it does NOT affect the score
216
+
217
+ Findings emit through `auditResult.shallowRiskHints[]` and are
218
+ intentionally excluded from:
219
+ - `auditResult.score`
220
+ - `auditResult.organicScore`
221
+ - `auditResult.passed` / `failed` / `skipped`
222
+ - `auditResult.topNextActions`
223
+ - `auditResult.layerSummary.*.failed`
224
+
225
+ This keeps the governance pipeline stable while still surfacing
226
+ agent-config codebase red flags. Score-unchanged proof on
227
+ self-audit of the NERVIQ repo: governance score is **87** with and
228
+ without `--shallow-risk`; only `shallowRiskHints` differs (empty
229
+ vs. 17 hits).
230
+
231
+ ### CLI UX
232
+
233
+ ```bash
234
+ npx @nerviq/cli audit --shallow-risk # full audit + shallow risk
235
+ npx @nerviq/cli audit --shallow-risk-only # fast precommit mode
236
+ NERVIQ_SHALLOW_RISK=off npx @nerviq/cli audit --shallow-risk # kill switch
237
+ ```
238
+
239
+ Friendly banner rendered in text output and as a blockquote in
240
+ markdown:
241
+
242
+ > Shallow Risk mode (experimental, opt-in). NERVIQ checks 8 patterns
243
+ > that sit at the intersection of your AI agent configuration and
244
+ > your codebase the kind of issues no generic scanner can find
245
+ > because they require understanding CLAUDE.md, .claude/settings.json,
246
+ > and similar files. For broader code-level security coverage, pair
247
+ > this with Semgrep, CodeQL, or a dedicated secret scanner.
248
+
249
+ ### Competitive positioning (explicit)
250
+
251
+ NERVIQ `--shallow-risk` is **not** a replacement for Semgrep / ESLint
252
+ / CodeQL / gitleiks / truffleHog / Dependabot — those tools work on
253
+ source code or dependency manifests. NERVIQ works on the bridge
254
+ between agent-declared intent and codebase reality. The 8 patterns
255
+ reflect that lane exclusively.
256
+
257
+ ### Rendering in all output formats
258
+
259
+ - **JSON**: `auditResult.shallowRiskHints[]` — parallel to `results[]`.
260
+ - **Text**: separate `## Shallow Risk Hints (experimental, opt-in)`
261
+ block after `## Top next actions`, banner inline.
262
+ - **Markdown (`--format=markdown`)**: `### Shallow Risk (experimental,
263
+ opt-in)` section after `### Top next actions`, banner as blockquote,
264
+ each hint listed with severity / key / file:line.
265
+ - **JUnit (`--format=junit`)**: separate `<testsuite name="shallow-risk">`
266
+ so CI consumers can isolate or ignore it independently of the
267
+ governance suite.
268
+ - **CSV (`--format=csv`)**: hints appended as rows tagged
269
+ `layer=shallow-risk`. Contract documented in
270
+ `docs/integration-contracts.md` §7 and §8.1.
271
+
272
+ ### Status: Experimental
273
+
274
+ Release: `Experimental`. Graduates to `Beta` after 30 days of real
275
+ telemetry with zero critical corpus-level false positives reported
276
+ and at least one external user reporting a pattern caught a real
277
+ issue. Graduates to `GA` after 50+ WAA using it on ≥5 distinct repos
278
+ each.
279
+
280
+ Reserved slots 9 and 10 are deliberately empty they wait for 30
281
+ days of user telemetry to tell us which patterns users most want
282
+ that we didn't anticipate.
283
+
284
+ ### Verified
285
+
286
+ - jest: **438/438** passing — this is the `438`-test verification baseline. (was 419 + 19 new: 16 shallow-risk
287
+ tests (positive + negative per pattern) + 3 format surface tests).
288
+ - canonical CLI tests: **162/162** passing.
289
+ - Guard coverage kept green: `claude-na-gates.test.js`,
290
+ `layer-coverage.test.js`, `framework-native.test.js`,
291
+ `audit-evidence.test.js`, `score-preview.test.js`, and the three
292
+ format tests.
293
+ - `npm pack --dry-run`: clean.
294
+ - `node tools/validate-release-metadata.js --research <path>`:
295
+ validation passed for v1.27.0.
296
+ - Self-audit smoke: score unchanged (87 with and without the flag),
297
+ 17 shallow-risk hints found on the NERVIQ repo itself (mostly
298
+ `agent-config-missing-file` on `.claude/` docs).
299
+
300
+ ### PP-08 gate
301
+
302
+ Added `fp_rate_threshold_shallow_risk: 0.10` lane in
303
+ `research/platform-parity-corpus.json`. Corpus FP measurement on
304
+ shallow-risk patterns is a separate follow-up task (not in this
305
+ release).
306
+
307
+ Evidence: `research/exp-cto-06-implementation-2026-04-14.md`.
308
+
309
+ ## [1.26.0] - 2026-04-14
310
+
311
+ ### Fixed Framework-native verification depth (CTO-07)
312
+
313
+ Closes the trust-break documented in the 2026-04-08 UAT where Flutter
314
+ + Swift projects got zero uplift from NERVIQ because valid verification
315
+ commands (`xcodebuild test`, `flutter test`, `gradle test`) were
316
+ treated as missing guidance, and mature Python ML + FastAPI repos
317
+ flattened because NERVIQ didn't recognise existing scaffolding
318
+ (pytest + `pyproject.toml` + poetry/uv + ruff/mypy).
319
+
320
+ Moves KPI memo §6.5 ("Are mobile, infra, and mature repos improving
321
+ with the same credibility as Node-oriented repos?") from NO → YES.
322
+
323
+ - `src/instruction-surfaces.js`: broadened surface bundle so repo
324
+ files like `pyproject.toml`, `Makefile`, `justfile`, `Podfile`,
325
+ `Cartfile`, `pubspec.yaml`, `Rakefile`, `build.gradle*`, and
326
+ `.github/workflows/*` count as verification evidence. Expanded
327
+ TEST/LINT/BUILD command patterns for Flutter (`flutter test`,
328
+ `flutter analyze`, `dart analyze`, `dart format`, `fvm flutter`),
329
+ iOS / Swift (`xcodebuild test`, `swift test`, `fastlane test`,
330
+ `swiftlint`, `swift-format lint`), Android (`./gradlew test`,
331
+ `./gradlew ktlintCheck`, `./gradlew detekt`), and Python (all of
332
+ `pytest`, `poetry run pytest`, `uv run pytest`, `pdm run pytest`,
333
+ `hatch run test`, `tox`, `nox`, `python -m pytest`, `python -m
334
+ unittest`, `ruff check`, `ruff`, `flake8`, `pylint`, `black
335
+ --check`, `mypy`, `pyright`, `pre-commit run`).
336
+
337
+ - `src/techniques/shared.js`: 10 new memoized stack helpers
338
+ (`hasIosXcodeProject`, `hasAndroidGradle`, `hasFlutterProject`,
339
+ `hasPythonPoetry`, `hasPythonUv`, `hasPythonPdm`, `hasPythonHatch`,
340
+ `hasFastApiProject`, `hasMlScaffolding`, `hasConfiguredTooling`).
341
+ These let stack-specific checks detect "this project HAS
342
+ verification wired up" directly from repo files rather than only
343
+ from CLAUDE.md / AGENTS.md mentions — legitimate evidence because
344
+ an agent working in the repo can observe these files itself.
345
+
346
+ ### Re-audit per-archetype uplift
347
+
348
+ | Archetype | Before | After | Δ | Framework FNs resolved |
349
+ |---|---:|---:|---:|---|
350
+ | Flutter mobile | 14 | 25 | **+11** | 4 → 1 (build cmd advisory only) |
351
+ | iOS Swift | 11 | 26 | **+15** | 4 → 0 |
352
+ | Python ML | 14 | 23 | **+9** | 4 → 1 |
353
+ | Python FastAPI | 11 | 21 | **+10** | 4 1 |
354
+
355
+ Average uplift: **+11.25 points**. 14/15 framework-native false
356
+ negatives flipped to pass/N/A; the residual 4 × `buildCommand` are
357
+ legitimately advisory (category (c)).
358
+
359
+ ### What is NOT changed
360
+
361
+ - No new top-level checks. Catalog count stays at 2,441.
362
+ - No check semantics inverted.
363
+ - No scoring weights, severity values, or rating values touched.
364
+ - CTO-08 `layer` tags preserved on every check.
365
+ - Claude PP-06 calibration unaffected: `strict_false_positive_keys.
366
+ claude` stays empty; `claude-na-gates.test.js` passes unchanged.
367
+
368
+ ### Verified
369
+
370
+ - jest: **419/419** passing this is the `419`-test verification baseline. (was 403 + 16 new framework-native
371
+ regression tests organised by stack in
372
+ `test/framework-native.test.js`).
373
+ - canonical CLI tests: **162/162** passing.
374
+ - `npm pack --dry-run`: clean.
375
+ - `node tools/validate-release-metadata.js --research <path>`:
376
+ validation passed for v1.26.0.
377
+
378
+ Evidence: `research/exp-cto-07-framework-native-2026-04-14.md`
379
+ includes the full archetype survey, before/after re-audit, and
380
+ methodology note on the deterministic fixtures used in Phase 3.
381
+
382
+ ## [1.25.0] - 2026-04-14
383
+
384
+ ### Added — 5-layer scope clarity (CTO-08)
385
+
386
+ Every check in the NERVIQ audit is now tagged with exactly one of
387
+ four layers. Closes the boundary-blur gap documented in the
388
+ 2026-04-14 CTO memo §6 ("Do evaluators understand the product
389
+ boundary before trust breaks?") and moves KPI question §6.2 from
390
+ PARTIAL YES with measurable evidence. Source landed in commit
391
+ `a8676b1`; this commit packages the release.
392
+
393
+ The four layers:
394
+
395
+ - **`governance`** — agent configuration posture: presence, content,
396
+ and quality of agent-instruction files and platform settings.
397
+ Example: `claudeMdExists`, `geminiSettingsExists`, MCP server
398
+ declarations, hook presence.
399
+ - **`drift`** cross-platform consistency and declared-vs-actual
400
+ alignment. Example: Harmony drift, Gemini propagation completeness,
401
+ rules consistency across surfaces.
402
+ - **`hygiene`** repo-level cleanliness adjacent to agents (the
403
+ engineering baseline that makes an agent's job easier). Example:
404
+ `.gitignore`, CHANGELOG, SECURITY.md, LICENSE, Node version
405
+ pinning, editorconfig.
406
+ - **`shallow-risk`** — reserved for CTO-06 (agent-config ↔ codebase
407
+ boundary hints). No checks currently populate this layer; the
408
+ constant exists so formatters and downstream consumers know about
409
+ it for the future.
410
+
411
+ There is **no `deep-review` or `security` layer**, by design. NERVIQ
412
+ audits agent configuration and the cleanliness of the repo boundary
413
+ an agent operates inside. It does not perform dataflow analysis,
414
+ SAST, or general code review those are out of scope and left to
415
+ dedicated tools. This is the contract that lets evaluators know
416
+ where our claim to ground-truth starts and stops.
417
+
418
+ ### Final layer distribution (2,441 checks)
419
+
420
+ | Layer | Count | % |
421
+ |---|---:|---:|
422
+ | governance | 1,102 | 45.1% |
423
+ | drift | 39 | 1.6% |
424
+ | hygiene | 1,300 | 53.3% |
425
+ | shallow-risk | 0 (reserved) | 0% |
426
+
427
+ Disambiguation rules (codified in `src/audit/layers.js` and
428
+ `docs/integration-contracts.md` §8):
429
+ - "Does my agent know X?" → `governance`.
430
+ - "Do two places agree on X?" → `drift`.
431
+ - "Does the repo have standard engineering hygiene?" `hygiene`.
432
+ - When in doubt, default to `hygiene` (a mild misclassification is
433
+ recoverable; a missing tag breaks the coverage contract).
434
+
435
+ ### Surfaced in every output format
436
+
437
+ - **JSON**: `auditResult.results[].layer`,
438
+ `auditResult.topNextActions[].layer`, and a new
439
+ `auditResult.layerSummary` giving per-layer
440
+ `{ total, passed, failed, skipped }`.
441
+ - **Text**: "Coverage by layer:" summary block plus a small
442
+ `[layer]` prefix on failed-check names.
443
+ - **Markdown (`--format=markdown`)**: `layer` column in the failed-
444
+ checks table; `_layer: X_` suffix on each top-action checklist item.
445
+ - **JUnit (`--format=junit`)**: `layer="..."` attribute on every
446
+ `<testcase>`.
447
+ - **CSV (`--format=csv`)**: new `layer` column between `category`
448
+ and `rating`. Updated contract in `docs/integration-contracts.md` §7.
449
+
450
+ ### Verified
451
+
452
+ - jest: **403/403** passing — this is the `403`-test verification baseline. (was 391 + 7 coverage tests + 5
453
+ format surface tests).
454
+ - canonical CLI tests: **162/162** passing.
455
+ - `npm pack --dry-run`: clean.
456
+ - `node tools/validate-release-metadata.js --research <path>`:
457
+ validation passed for v1.25.0.
458
+
459
+ Evidence: `research/exp-cto-08-layer-clarity-2026-04-14.md` includes
460
+ the full distribution, ambiguous-call log, and KPI mapping.
461
+
462
+ ## [1.24.0] - 2026-04-14
463
+
464
+ ### Fixed Claude calibration debt resolved (CTO-09 / PP-06)
465
+
466
+ Eleven Claude audit checks that were systematically firing as
467
+ false-positives on repos that did not opt in to their respective
468
+ agent-config surfaces now return `N/A` (null) instead of `false`.
469
+ Previously these were captured in a post-hoc allowlist
470
+ (`platform-parity-fp-rules.json.strict_false_positive_keys.claude`);
471
+ now the checks are honest at source.
472
+
473
+ The affected keys:
474
+
475
+ - `claudeLocalMd`, `autoMemoryAwareness`, `importSyntax`
476
+ (in `src/techniques/instructions.js`) — N/A when the repo does
477
+ not opt in to the overrides/memory/import-syntax conventions.
478
+ `importSyntax` becomes a positive-signal check: it passes when
479
+ `@`-imports are present in CLAUDE.md, and is advisory only on
480
+ long (≥80 lines) CLAUDE.md files that would clearly benefit.
481
+ - `mcpServers`, `multipleMcpServers`, `context7Mcp`
482
+ (in `src/techniques/tools.js`) N/A on repos that have no MCP
483
+ references anywhere. A new `_repoOptsInToMcp()` helper centralises
484
+ the detection.
485
+ - `dockerfile`, `dockerCompose`, `terraformFiles`, `hooksNotificationEvent`,
486
+ `subagentStopHook`
487
+ (in `src/techniques/automation.js`) N/A when no infra signal
488
+ exists (Dockerfile/`.tf`/`docker-compose*`) or when
489
+ `.claude/settings.json` has no `hooks` block. New
490
+ `_repoHasInfraSignal()` and `_repoHasHooksBlock()` helpers.
491
+
492
+ ### Impact
493
+
494
+ - **PP-08 CI gate threshold restored to 0.05** (from the 0.15
495
+ holding pattern). The `fp_rate_threshold_notes` in
496
+ `research/platform-parity-corpus.json` documents the resolution:
497
+ any drift above 0.05 is now a real regression, not a calibration
498
+ debt issue.
499
+ - **Claude strict-FP rate dropped from ~11.99% to 0.00%** on the
500
+ cleanly-cloned repos in the PP-08 corpus (8/9 — one long-path
501
+ checkout failure on Windows unrelated to CLI).
502
+ - **Per-repo total failures dropped by 6–10 checks each** on Claude
503
+ audits, matching the expected ~7.6 opt-in hits per repo that moved
504
+ from `false` `null`.
505
+ - **`strict_false_positive_keys.claude` is now empty.** The post-hoc
506
+ allowlist is no longer needed.
507
+
508
+ ### Verified
509
+
510
+ - jest: **391/391** passing this is the `391`-test verification baseline. (was 369 + 22 new N/A-gate
511
+ regression tests in `test/claude-na-gates.test.js`, two per key).
512
+ - canonical CLI tests: **162/162** passing.
513
+ - `npm pack --dry-run`: clean.
514
+ - `node tools/validate-release-metadata.js --research <path>`:
515
+ validation passed for v1.24.0.
516
+ - PP-08 CI gate: all 6 platforms (claude, codex, cursor, gemini,
517
+ windsurf, aider) PASS at the restored 0.05 threshold.
518
+
519
+ Evidence: `research/exp-pp-06-claude-recalibration-debt-2026-04-14.md`
520
+ updated with a Resolution section at the top (per-key table,
521
+ before/after gate output, verification).
522
+
523
+ ## [1.23.0] - 2026-04-14
524
+
525
+ ### Added Trust-recovery depth (CTO-04, CTO-05)
526
+
527
+ Ships the two deepest items from the 2026-04-14 CTO memo the
528
+ evaluator-stated reasons trust breaks in real audits. Closing them
529
+ moves KPI questions §6.3 (file-level evidence) and §6.4 (score
530
+ impact before write) from NO/UNKNOWN → YES with verifiable evidence.
531
+ Formatter source landed in commit `e06ae64`; this commit packages
532
+ the release.
533
+
534
+ - **CTO-04 File-level evidence (`file:line:snippet`).** Every
535
+ failed check that has a sensible file-level source now emits
536
+ `file`, `line`, and a `snippet` (2–5 lines of context, 300-char
537
+ cap) so markdown/junit/text outputs can point at real evidence
538
+ rather than abstract advice.
539
+ - New resolver registry in `src/audit/evidence.js` for the 20
540
+ highest-hitting check keys identified in a fresh self-audit.
541
+ - Survey result on self-audit of the nerviq repo: 0 of 23 failed
542
+ checks previously carried evidence; **9 of 23 now do**. The
543
+ remaining 14 are either category (c) "absence-of-file"
544
+ checks like `claudeLocalMd` where a null pointer is the correct
545
+ semantic or roll-ups where evidence would be misleading.
546
+ - Backlog of unresolved category (b) keys documented in the
547
+ evidence doc. 1 deferred (`skillUsesPaths`, blocked on CTO-06).
548
+ - Markdown formatter renders snippet as a fenced code block under
549
+ each checklist item; JUnit formatter appends it to the
550
+ `<failure>` body after `---`; CSV intentionally unchanged
551
+ (snippet newlines/commas would hurt downstream parsing).
552
+
553
+ - **CTO-05 — Score-impact preview before `--apply`.** Each
554
+ `topNextActions` item now carries `projectedScoreDelta`,
555
+ `projectedOrganicScoreDelta`, and `projectedScoreAfter` so the
556
+ user sees "this fix moves score 67 → 74 (+7 pts)" before any
557
+ write. Projection is computed by one O(1) recompute per top
558
+ action using the existing scoring function (no extra full
559
+ audits, no scoring-algorithm changes).
560
+ - Text output appends ` (+N pts X/100)` per top action.
561
+ - Markdown formatter shows the same suffix inline in the
562
+ checklist.
563
+ - CSV adds two trailing columns
564
+ `projectedScoreDelta,projectedScoreAfter` — populated only
565
+ for rows whose key appears in `topNextActions` (projection is
566
+ per-top-action, not per-every-check); other rows leave both
567
+ columns empty. Contract documented in
568
+ `docs/integration-contracts.md` §7.
569
+ - JUnit intentionally unchanged (testcases don't naturally carry
570
+ scores).
571
+
572
+ ### Verified
573
+
574
+ - jest: **369/369** passing this is the `369`-test verification baseline. (was 354 + 9 new
575
+ evidence tests + 3 new score-preview tests + 3 markdown extensions
576
+ + 1 junit extension + 2 csv extensions).
577
+ - canonical CLI tests: **162/162** passing.
578
+ - `npm pack --dry-run`: clean (213 files, 757 kB).
579
+ - `node tools/validate-release-metadata.js --research <path>`:
580
+ validation passed for v1.23.0.
581
+
582
+ Evidence: `research/exp-cto-04-05-trust-recovery-2026-04-14.md`
583
+ in the research repo (~263 lines) includes the full per-check
584
+ survey, worked projection example, markdown + CSV samples with
585
+ the new fields, and explicit mapping back to the 8 memo KPI
586
+ questions.
587
+
588
+ ## [1.22.0] - 2026-04-14
589
+
590
+ ### Added — CI output format pack (CTO-01, CTO-02, CTO-03)
591
+
592
+ Three new output formats for `nerviq audit`, designed to plug the CLI
593
+ straight into standard CI surfaces. Closes the "Markdown PR comment /
594
+ JUnit XML / CSV" gap called out in the 2026-04-14 CTO memo §8 — the
595
+ plumbing required before "no serious multi-agent repo merges without
596
+ a Nerviq check" is even claimable as positioning.
597
+
598
+ - **`--format=markdown` (CTO-01)** — GitHub-flavoured markdown
599
+ suitable for a PR comment. Includes a `## Score: N/100` header with
600
+ shields.io badge, a `### Top next actions` task-list checklist (up
601
+ to 5 items, each with severity + key + optional `file:line`), a
602
+ collapsible `<details>` block listing all failed checks in a pipe
603
+ table, and a `Generated by [Nerviq](https://nerviq.net)` footer.
604
+ Pipe characters inside cells are backslash-escaped. No raw HTML
605
+ beyond `<details>` / `<summary>`.
606
+
607
+ - **`--format=junit` (CTO-02)** — Jenkins-compatible JUnit XML.
608
+ `<testsuites name="nerviq" tests="N" failures="F" skipped="S">`
609
+ root, one `<testsuite>` per check category, one `<testcase>` per
610
+ check (`classname=category`, `name=key`). Failed checks emit
611
+ `<failure message="..." type="SEVERITY">` with body containing
612
+ `name [at file:line] [(sourceUrl)]`. Skipped checks emit `<skipped/>`.
613
+ All attribute values + text nodes XML-escape `& < > " '`. Parses
614
+ cleanly with GitHub Actions test reporter, GitLab JUnit reporter,
615
+ and Jenkins JUnit plugin.
616
+
617
+ - **`--format=csv` (CTO-03)** RFC 4180 CSV. Header row
618
+ `key,id,name,category,rating,severity,passed,file,line,sourceUrl,fix`
619
+ followed by one row per check. Fields containing comma, double-quote,
620
+ CR, or LF are wrapped in double-quotes; internal double-quotes are
621
+ escaped by doubling. No UTF-8 BOM (avoids pandas / Excel friction).
622
+ LF line separator.
623
+
624
+ Wired into `bin/cli.js` `--format` switch alongside existing
625
+ `json|sarif|otel`. Format contracts documented in
626
+ `docs/integration-contracts.md` §7 as the stable consumer API for
627
+ downstream wrappers (GitHub Actions, Jenkins plugins, GitLab reporters,
628
+ dashboards) bind to these shapes rather than scraping text output.
629
+
630
+ ### Verified
631
+
632
+ - jest: **354/354** passingthis is the `354`-test verification baseline. (was 335 + 19 new format tests:
633
+ `test/format-markdown.test.js`, `test/format-junit.test.js`,
634
+ `test/format-csv.test.js` covering field shape, escaping rules,
635
+ edge cases like missing `file:line`, and full round-trip parse
636
+ on synthetic audit results).
637
+ - canonical CLI tests: **162/162** passing.
638
+ - `npm pack --dry-run`: clean (212 files, 754 kB).
639
+ - `node tools/validate-release-metadata.js --research <path>`:
640
+ validation passed for v1.22.0.
641
+
642
+ Evidence: `research/exp-cto-01-03-formats-2026-04-14.md` in the
643
+ research repo includes sample outputs and a GitHub Actions integration
644
+ recipe.
645
+
646
+ ## [1.21.0] - 2026-04-14
647
+
648
+ ### Calibrated (not certified) — Aider platform audit (PP-04)
649
+
650
+ Aider platform audit recalibrated against 10 real Aider-using repos
651
+ (`Aider-AI/aider`, `sysown/proxysql`, `Provenance-Emu/Provenance`,
652
+ `disler/always-on-ai-assistant`, `SquirrelJME/SquirrelJME`, `ad-si/tu`,
653
+ `Aider-AI/conventions`, `commit-0/commit0`, `roychri/mcp-server-asana`,
654
+ `attestate/kiwistand`).
655
+
656
+ Seven systematic 10/10 false-positives eliminated:
657
+
658
+ - `aiderUndoSafetyAware` (10/10 5/10)
659
+ - `aiderEditorModelConfigured` (10/10 → 0/10)
660
+ - `aiderWeakModelConfigured` (10/10 5/10)
661
+ - `aiderModelSettingsFileExists` (10/10 5/10)
662
+ - `aiderAiderignoreExists` (10/10 5/10)
663
+ - `aiderEnvFileExists` (10/10 5/10) true FP: `.env` is gitignored;
664
+ now accepts `.env.example` / `.sample` / `.template`.
665
+ - `aiderAllConfigSurfacesPresent` (10/10 5/10) true FP, same root cause.
666
+
667
+ Four additional ≥9/10 FPs sharply reduced: `aiderGitHooksForPreCommit` 9→3,
668
+ `aiderBrowserModeForDocs` 9→5, `aiderPlaywrightUrlScraping` 9→4,
669
+ `aiderVersionPinned` 9→0 (N/A on non-Python projects).
670
+
671
+ Six opt-in tuning knobs converted to pass-or-N/A semantics:
672
+ `aiderMapTokensConfigured`, `aiderEditFormatConfigured`,
673
+ `aiderArchitectModeAvailable`, `aiderCachePromptsEnabled`,
674
+ `aiderCommitPrefixConfigured`, `aiderVoiceModeAware` they no longer
675
+ fire as advisories on repos that do not opt in.
676
+
677
+ Newly recognised conventions: `.aider.conf.yaml` (alt extension),
678
+ `AGENTS.md` / `CLAUDE.md` / `.ai/instructions.md` / `AIDER.md` as
679
+ alternative convention surfaces, `.env.example` / `.sample` / `.template`
680
+ as env-contract surfaces.
681
+
682
+ 10-repo corpus moved from baseline 38–64 → final 44–82. 2/10 reach ≥70
683
+ (kiwistand 82, proxysql 72). The other 8 are below 70 due to documented
684
+ genuine content gaps in the audited repos themselves, not audit bugs.
685
+
686
+ **Why "calibrated, not certified":** same judgment as Windsurf (PP-03).
687
+ Strict-FP <5% bar is met; all-10-≥70 + mature-repos-≥73 bar is not,
688
+ because public Aider adoption above 500 stars is sparse. PPI stays at
689
+ **0.75** until corpus expansion.
690
+
691
+ ### Fixed — release drift guard prefers `-main` worktrees
692
+
693
+ `tools/validate-release-metadata.js` now prefers `../nerviq-research-main`
694
+ and `../nerviq-site-main` when those worktrees exist, falling back to
695
+ `../nerviq-research` / `../nerviq-site` otherwise. When a parallel-agent
696
+ worktree on a feature branch occupies the canonical `nerviq-research`
697
+ directory, the drift guard was reading the feature-branch state and
698
+ refusing publish even though the actual main branch was synced.
699
+ Single-worktree setups are unaffected.
700
+
701
+ ### Verified
702
+
703
+ - jest: **335/335** passingthis is the `335`-test verification baseline.
704
+ - canonical CLI tests: **162/162** passing.
705
+ - aider matrix: **315/315** passing (was 308, +6 PP-04 regression tests).
706
+ - `npm pack --dry-run`: clean.
707
+ - `node tools/validate-release-metadata.js --research <path>`: validation
708
+ passed for v1.21.0.
709
+ - PP-08 CI gate: all 6 platforms (claude, codex, cursor, gemini, windsurf,
710
+ aider) PASS at the current threshold.
711
+
712
+ ## [1.20.1] - 2026-04-14
713
+
714
+ ### Fixed Critical: bin/cli.js shebang regression
715
+
716
+ `bin/cli.js` was missing the `#!/usr/bin/env node` shebang since v1.16.x (commit `40c27b8` on 2026-04-12, which fixed a macOS pipe-flush issue and accidentally dropped the shebang while restructuring the file). Without a shebang, `npx @nerviq/cli` failed on Linux and Mac because the OS fell back to `/bin/sh` and tried to execute JavaScript as a shell script (`//: Permission denied / Syntax error`). Windows installs were unaffected because npm generates `.cmd` wrappers that invoke `node` explicitly.
717
+
718
+ This was discovered when wiring up the PP-08 CI gate against `npx @nerviq/cli@1.20.0`. Likely affected production users on Linux/macOS doing fresh `npx` installs since 2026-04-12.
719
+
720
+ - Restored `#!/usr/bin/env node` as the first line of `bin/cli.js`.
721
+ - Added `test/bin-shebang.test.js` regression test that scans every `bin` entry in `package.json` and asserts the shebang exists. Will catch any future drop of the shebang line on any bin script.
722
+
723
+ ### Fixed claudeMdContent pointer expansion accepts `@` imports
724
+
725
+ `ProjectContext.claudeMdContent()` in `src/context.js` recognizes when CLAUDE.md is a thin pointer to another file (e.g., `AGENTS.md`) and expands it. The expansion regex `/^[a-zA-Z0-9_./-]+\.(md|txt|rst)$/` did not accept Claude Code's standard `@`-prefixed import syntax (`@AGENTS.md`, `@./docs/CODING.md`). Repos using the standard syntax saw all memory/prompting/quality checks fail because the auditor only saw the 1-line pointer.
726
+
727
+ Discovered while investigating the NERVIQ site's self-dogfood score (25 → 85 after this fix plus content enrichment).
728
+
729
+ - Updated regex to `/^@?\.?\/?[a-zA-Z0-9_./-]+\.(md|txt|rst)$/`; resolver strips `@` and `./` prefixes before `fileContent()`.
730
+ - Added `test/context.test.js` (+6 tests) covering raw content, bare-filename pointer, `@`-prefix, `@./`-prefix, nested-subdir, and null-fixture cases.
731
+
732
+ ### Added — `prepublishOnly` lifecycle script
733
+
734
+ `package.json` now wires the existing pre-publish drift guard (`tools/pre-publish.js`) to npm's `prepublishOnly` lifecycle, in addition to the manual `prepublish:check` alias. `npm publish` now blocks automatically on dirty tree, branch drift, missing CHANGELOG entry, jest failure, or release-metadata drift. `npm pack --dry-run` does not trigger it (verified) so local development is unaffected.
735
+
736
+ ### Calibrated (not certified)Windsurf platform audit (PP-03)
737
+
738
+ Windsurf platform audit recalibrated against 10 real Windsurf-using repos (`grapeot/devin.cursorrules`, `hyper-mcp-rs/hyper-mcp`, `dxos/dxos`, `snowflakedb/gosnowflake`, `ShareX/XerahS`, `Brawl345/Image-Reverse-Search-WebExtension`, `rudrankriyam/Ichi`, `snyk/snyk-intellij-plugin`, `wepublish/wepublish`, `AmadeusITGroup/otter`).
739
+
740
+ Three systematic 10/10 false-positives eliminated:
741
+ - `windsurfMemoriesConfigured` — opt-in memories surface; now N/A when absent.
742
+ - `windsurfPackMcpRecommended` opt-in MCP recommendation; now N/A when absent.
743
+ - `windsurfAdvisoryMcpHealth` — **real bug fix**: was reading the host's `os.platform()` and asserting it inside the audited repo's advisory. Now host-agnostic; uses repo-local evidence only (Windows/WSL gate generalised).
744
+
745
+ Other improvements: pointer/`@import` expansion for Windsurf instruction surfaces (`.windsurf/rules/*`, `WINDSURF.md`, pointer files like `.ai/instructions.md`), `.windsurfrules/` directory form support, fallback to `AGENTS.md`/`CLAUDE.md` for stack-marker generalisation, frontmatter realism for `.mdc` files.
746
+
747
+ 10-repo corpus moved from baseline 9–70 → final 32–83. 7/10 ≥70. The 3 below 70 (hyper-mcp 69, Ichi 64, wepublish 60) are documented genuine content-depth gaps in the audited repos themselves, not audit bugs. The 32 outlier (`grapeot/devin.cursorrules`) uses the deprecated single-file `.windsurfrules` legacy format.
748
+
749
+ **Why "calibrated, not certified":** Gemini PP-02 cleared "all 10 ≥70" and "all mature (>10K stars) ≥73". Windsurf cleared the strict-FP <5% bar (the primary criterion) but Windsurf public adoption is thinner than Gemini at equivalent star thresholds — the largest mature repo found was 5.9K stars. PPI stays at **0.75** until corpus expansion produces a mature-repo set passing the score floor. No inflated PPI claim shipped.
750
+
751
+ ### Verified
752
+
753
+ - jest: **335/335** passing (was 326 + 6 new context tests + 3 new shebang tests) — this is the `335`-test verification baseline.
754
+ - canonical CLI tests: **162/162** passing.
755
+ - matrix: **311/0** passing.
756
+ - `npm pack --dry-run`: clean.
757
+ - `node tools/validate-release-metadata.js --research ../nerviq-research-main`: validation passed.
758
+
759
+ ## [1.20.0] - 2026-04-13
760
+
761
+ ### Fixed Gemini Platform Parity (PP-02, 10-repo calibration)
762
+
763
+ Gemini becomes the **5th certified platform** (PPI 0.625 → **0.75**). Calibrated against 10 real Gemini-using repos (google-gemini/gemini-cli, google-gemini/cookbook, GoogleCloudPlatform/generative-ai, obra/superpowers, JuliusBrussee/caveman, google/site-kit-wp, google/dotprompt, vdesabou/kafka-docker-playground, OthmanAdi/planning-with-files, mscraftsman/generative-ai).
764
+
765
+ Key calibrations:
766
+ - `_expandGeminiMdImports` resolves `@path.md` imports and single-line-pointer `GEMINI.md` files (observed in google/dotprompt).
767
+ - Fallback chain for Gemini instruction surface: AGENTS.md CLAUDE.md `.gemini/styleguide.md` (Gemini Code Assist convention).
768
+ - `isMcpOnlySettings` helper: 5 CLI-behaviour checks go N/A on MCP-only `.gemini/settings.json`.
769
+ - `geminiSettingsExists` / `geminiCommandsExist` now N/A when the directory is absent rather than flagging a failure — these surfaces are opt-in.
770
+ - Broadened `docsBundle` to accept AGENTS/CLAUDE/CONTRIBUTING/ARCHITECTURE/DEVELOPMENT as documentation evidence.
771
+ - `geminiEnvApiKey` credits ADC, Vertex AI, `gemini auth`, and service-account flows (not just `GEMINI_API_KEY`).
772
+ - Tightened `geminiPropagationCompleteness`: the bare word "skills" was firing FPs.
773
+ - **Bug fix:** `context.fileName` can legally be an array per the Gemini CLI schema. `path.join` crashed with `TypeError` on `google/site-kit-wp`. Now handled.
774
+
775
+ ### Measured (strict FP <5% across 10-repo corpus)
776
+
777
+ | Repo | Stars | Before | After |
778
+ |---|---|---|---|
779
+ | obra/superpowers | 148K | 73 | **88** |
780
+ | google-gemini/gemini-cli | 101K | 74 | **89** |
781
+ | JuliusBrussee/caveman | 21K | 75 | **94** |
782
+ | OthmanAdi/planning-with-files | 18K | 72 | **73** |
783
+ | google-gemini/cookbook | 17K | 73 | **94** |
784
+ | GoogleCloudPlatform/generative-ai | 17K | 73 | **88** |
785
+ | google/site-kit-wp | 1.4K | crash | **78** |
786
+ | vdesabou/kafka-docker-playground | 778 | 68 | **83** |
787
+ | google/dotprompt | 507 | 64 | **75** |
788
+ | mscraftsman/generative-ai | 206 | 64 | **70** |
789
+
790
+ All 10 repos ≥ 70; all 6 mature repos (>10K stars) ≥ 73.
791
+
792
+ - **Gemini Platform Parity: certified**. PPI: 0.625 **0.75** (Claude + Cursor + Codex + Copilot + Gemini).
793
+
794
+ 326/326 tests pass (+2 PP-02 regressions on top of v1.19.0's 324) — this is the `326`-test verification baseline.
795
+
796
+ ## [1.19.0] - 2026-04-13
797
+
798
+ ### Added
799
+ - **EXP-04: `nerviq audit --fix` autofix flow**. `audit --fix` now runs the audit, applies fixable critical fixes, writes rollback manifests for successful writes, and re-audits before returning an exit code.
800
+ - **Autofix docs**. Added `docs/autofix.md` with command examples, safety behavior, and exit-code semantics for the new one-shot flow.
801
+ - **GOV-03: Time-to-First-Value benchmark** (`tools/ttfv-benchmark.py`). Measured harness across 4×4 install/repo combos; verdict on "<2 min" claim: TRUE (slowest median 16.1s on npx cold × nerviq-research).
802
+
803
+ ### Changed
804
+ - **Shared fix engine now covers instruction-surface autofix**. Missing `CLAUDE.md`, verification guidance, and safe hygiene templates can now be applied through the same fix pipeline used by the CLI write paths.
805
+
806
+ ### Tests
807
+ - Added `test/audit-fix.test.js` coverage for dry-run, auto-apply, rollback artifacts, `DO NOT AUTOEDIT` safety skips, exit-code handling, and hygiene rollback verification.
808
+
809
+ 324/324 tests pass.
810
+
811
+ ## [1.18.0] - 2026-04-13
812
+
813
+ ### Fixed — Copilot Platform Parity (PP-01, 10-repo calibration)
814
+
815
+ - **Copilot audit now recognizes real-world repo conventions.** Calibrated against 10 active Copilot-using repos (home-assistant/core, block/goose, microsoft/vscode, astral-sh/uv, microsoft/playwright, langchain-ai/langchain, microsoft/typescript-go, microsoft/semantic-kernel, dotnet/aspire, github/awesome-copilot).
816
+ - **JSONC tolerance in `.vscode/settings.json`**: parser now strips comments/trailing commas before evaluation (Copilot/VSCode honor JSONC; strict-JSON parsing produced false CP-B06 failures).
817
+ - **Context fallback for AGENTS.md / CLAUDE.md**: repos that centralize agent guidance in AGENTS.md or CLAUDE.md at repo root are no longer penalized for `.github/copilot-instructions.md` substance checks.
818
+ - **Stack-docs bundle helper**: 45 stack/domain checks now accept a documented bundle of per-stack signals (pyproject.toml + ruff.toml, Cargo.toml + rustfmt.toml, go.mod + golangci.yml, etc.) rather than requiring a single canonical file.
819
+
820
+ ### Measured (strict FP rate < 5% across 10-repo corpus)
821
+
822
+ | Repo | Stars | Before | After |
823
+ |---|---|---|---|
824
+ | home-assistant/core | 86K | 42 | **76** |
825
+ | block/goose | 41K | 41 | **76** |
826
+ | microsoft/vscode | 183K | 46 | **61** |
827
+ | astral-sh/uv | 83K | 28 | **75** |
828
+ | microsoft/playwright | 86K | 46 | **66** |
829
+ | langchain-ai/langchain | 133K | 23 | **65** |
830
+ | microsoft/typescript-go | 25K | — | **66** |
831
+ | microsoft/semantic-kernel | 27K | 33 | **53** |
832
+ | dotnet/aspire | 6K | 35 | **59** |
833
+ | github/awesome-copilot | — | 45 | **59** |
834
+
835
+ All 10 repos 40; all 9 mature repos (>10K stars) ≥ 53.
836
+
837
+ - **Copilot Platform Parity: certified**. PPI: 0.5 → **0.625** (Claude + Cursor + Codex + Copilot).
838
+
839
+ ### Added
840
+ - EXPERIMENTAL qualifiers surfaced consistently on all user-facing Synergy mentions in README, docs/why-nerviq.md, docs/api-reference.md (SYN-04 audit).
841
+
842
+ 317/317 tests pass.
843
+
844
+ ## [1.17.3] - 2026-04-12
845
+
846
+ ### Fixed — Codex Platform Parity (Issue #35, 10-repo scale-up)
847
+
848
+ - **Hook checks now require Codex-specific evidence**. hooksClaimed() previously matched any generic 'hook' mention in AGENTS.md — triggering FPs on git hooks, React hooks, or dependency names like 'hookable'. Now requires .codex/hooks/, .codex/hooks.json, [hooks]/codex_hooks in config.toml, specific Codex event names (SessionStart, PreToolUse, PostToolUse, UserPromptSubmit), or explicit 'codex hooks' phrase. Fixes jessfraz/dotfiles, ModelEngine-Group/fit-framework, finbarr/yolobox.
849
+ - **codexPackRecommendationQuality accepts .NET / Gradle manifests**. Added .sln, .slnx, .csproj, .fsproj, .vbproj, Directory.Packages.props, Directory.Build.props, global.json, gradlew. Fixes Megabit/Blazorise.
850
+ - **codexNoInstructionContradictions ignores line-ending guidance**. CRLF/LF/trailing-newline/EOF rules are style preferences, not logical contradictions.
851
+ - **codexAgentsMd accepts .codex/AGENTS.md**. Some repos store AGENTS.md inside .codex/.
852
+
853
+ ### Measured
854
+ - jessfraz/dotfiles: 50 67 (hook FPs removed, +17 points)
855
+ - Codex strict FP rate: 5.98% <5% on 10-repo scale-up
856
+ - **Codex Platform Parity: certified**. PPI: 0.375 → **0.5** (Claude + Cursor + Codex)
857
+
858
+ 315/315 tests pass.
859
+
860
+ Closes #35
861
+
862
+ ## [1.17.2] - 2026-04-12
863
+
864
+ ### Fixed
865
+ - **`.codex/AGENTS.md` now recognized as a valid Codex instruction surface**. `agentsMdPath()` previously only checked root `AGENTS.md`, missing the emerging pattern of keeping Codex instructions inside `.codex/` (e.g., jessfraz/dotfiles stores a 12KB AGENTS.md there). This fix cascades to every check that reads `agentsContent()`, including `codexPackRecommendationQuality` — the last remaining FP in Codex re-validation.
866
+
867
+ ### Measured
868
+ - jessfraz/dotfiles: 47 → 50, `codexPackRecommendationQuality` FAIL → PASS
869
+ - Codex strict FP rate: <5% across both re-validation reposready to scale to 10
870
+
871
+ ## [1.17.1] - 2026-04-12
872
+
873
+ ### Fixed — Platform Parity re-validation (after v1.17.0)
874
+
875
+ - **codexPythonPackageStructure (CX-PY19)**: Now probes common package layouts directly via filesystem scan instead of relying on `ctx.files` (which only lists root entries). Correctly detects `src/<package>/__init__.py` and flat `<package>/__init__.py` layouts. Fixes false negative on openai/openai-agents-python.
876
+ - **codexPackRecommendationQuality (CX-N03)**: Returns N/A for dotfiles/config-only repos (detected via 2+ signals from `.zshrc`, `.bashrc`, `.vimrc`, `.tmux.conf`, `.gitconfig`, `install.sh`, `bootstrap.sh`). Pack recommendations are not meaningful for non-code repos.
877
+ - **cursorBugbotEnabled (CU-J01)**: Severity downgraded medium → low. Returns N/A unless repo shows BugBot evidence (bugbot config file, `.github/workflows` reference, or docs mention). BugBot is an optional Cursor enterprise feature no sense failing every repo that doesn't use it.
878
+
879
+ ### Measured
880
+ - **PP-02 Codex**: openai-agents-python 72 → 73. 2 remaining FPs resolved.
881
+ - **PP-02 Cursor**: CU-J01 no longer fires on every repo with rules. Strict FP rate 4.9% 0%.
882
+
883
+ ## [1.17.0] - 2026-04-12
884
+
885
+ ### Fixed — Cursor (from Platform Parity audit, Issue #32)
886
+ - **CU-A01 (cursorRulesExist)**: Now follows file-redirect pattern. When `.cursor/rules` is a text file pointing to another path (e.g., `agents/rules/`), the rules are read from the redirect target. Fixes false negative on cal.com-style layouts.
887
+ - **CU-A02 (cursorNoLegacyCursorrules)**: Returns N/A when repo has zero Cursor configuration. Fixes the calibration inversion where no-config repos outscored legacy-format repos.
888
+ - **CU-C01 (cursorPrivacyMode)**: Severity downgraded from `critical` to `low`. Returns N/A when no rules exist. Privacy Mode is stored in SQLite state.vscdb and not meaningfully auditable from repo files.
889
+
890
+ ### Fixed — Codex (from Platform Parity audit, Issue #33)
891
+ - **codexAgentsArchitecture (CX-A04)**: Expanded heading recognition to include "Project Structure Guide", "Repo Structure", "Repository Layout", "Codebase Guide", "Key Directories" and enumerated directory maps. Fixes false negative on openai/openai-agents-python.
892
+ - **codexCliAuthCredentialsStoreExplicit (CX-B12)**: Tightened managed-machine heuristic to require explicit terms (`managed device`, `shared workstation`, `multi-user host`, `VDI`, `kiosk`, `enterprise-managed`). No longer triggers on generic words like "shared utilities" or "server-managed".
893
+ - **codexMcpPresentIfRepoNeedsExternalTools (CX-F01)**: Returns N/A for SDK/library repos (detected via package manifest + README patterns). SDKs document integrations without needing project-scoped MCP.
894
+ - **codexSkillsHaveMetadata**: Now accepts YAML frontmatter (`name`, `description`) as valid metadata. Fixes false negative on repos using OpenAI-style SKILL.md.
895
+ - **codexPythonFormatterConfigured (CX-PY08)**: Accepts broader Ruff setups (any `[tool.ruff]` section, not just `[tool.ruff.format]`), yapf, autopep8, and standalone config files.
896
+ - **codexPythonFastapiEntryDocumented (CX-PY10)**: Returns N/A when FastAPI appears only in examples/dev deps. Also checks AGENTS.md for entry point documentation.
897
+ - **codexPythonMigrationsDocumented (CX-PY11)**: Returns N/A for SDK/library repos and when repo has no DB dependencies.
898
+ - **codexPythonPackageStructure (CX-PY19)**: Path-separator-agnostic regex works correctly on Windows.
899
+ - **codexPackRecommendationQuality (CX-N03)**: Removed `package.json` as universal requirement. Now accepts any primary manifest (pyproject.toml, Cargo.toml, go.mod, Gemfile, flake.nix, Makefile, etc.). Returns N/A when no signals exist.
900
+
901
+ ### Measured
902
+ - **PP-02/PP-03 Cursor**: FP rate 15% → <5% after fixes. Score range 14–76 → 20–68 (still differentiated).
903
+ - **PP-02/PP-03 Codex**: Strict FP 27.8% <5% after fixes. openai-agents-python 65 72.
904
+ - **Platform Parity Index (PPI)**: 0.125 0.375 (Claude + Cursor + Codex validated).
905
+
906
+ ## [1.16.0] - 2026-04-12
907
+
908
+ ### Added
909
+ - **MOAT-01 — Harmony-first default onboarding**: When `nerviq audit` runs on a repo with 2+ configured AI platforms and no explicit `--platform`, the CLI now prints a one-line Harmony Score + drift summary *before* the single-platform audit. Cross-platform alignment becomes the first impression, in line with the durable moat positioning.
910
+ - **`--no-harmony-first` flag**: Suppresses the new Harmony header for users who want strictly single-platform output.
911
+ - **`harmony` envelope in `audit --json`**: On multi-platform repos, JSON output now includes `{ harmony: { score, driftCount, platforms } }` at the root, alongside the existing per-platform fields.
912
+
913
+ ### Changed
914
+ - **FB-05 — framework-aware fix rewriting**: On repos where no Node/JS stack is detected (Python, Go, Rust, Ruby, Java/Kotlin, Elixir, .NET), failure-message recommendations no longer hard-code `npm test` / `npm ci` / `npm install`. The audit post-processes `fix` text and substitutes the stack-appropriate equivalent (e.g. `pytest`, `go test ./...`, `cargo test`, `bundle exec rspec`, `./gradlew test`, `mix test`, `dotnet test`). No change on Node repos.
915
+ - **Release-sync surfaces now reflect the `315`-test verification baseline** (was 307 in v1.15.0). `test/harmony-first.test.js` (5 cases) covers MOAT-01; `test/framework-aware-fixes.test.js` (3 cases) covers FB-05.
916
+
917
+ ## [1.15.0] - 2026-04-11
918
+
919
+ ### Added
920
+ - **`--dir` flag**: Audit any directory without changing cwd (`nerviq audit --dir /path/to/repo`).
921
+ - **Opt-in telemetry foundation**: Anonymous local usage tracking for audit, harmony-audit, and setup commands. Activated only when `NERVIQ_TELEMETRY=1` is set. No data leaves the machine.
922
+
923
+ ### Fixed
924
+ - **`--dir` flag was silently ignored**: The flag was parsed but not recognized as a value flag, causing `nerviq audit --dir /path` to always audit the current directory instead of the target. Critical fix for CI and scripted usage.
925
+ - **CLAUDE.md reference following**: When CLAUDE.md is short and contains a file reference (e.g., `AGENTS.md`), the referenced file is now read and included in content checks. Fixes false negatives on projects like home-assistant/core.
926
+ - **Build/test/lint checks use repo scope**: Quality checks now read all instruction surfaces (AGENTS.md, .cursorrules, copilot-instructions.md) instead of only CLAUDE.md.
927
+ - **testCoverage regex expanded**: Now matches "## Testing", "writing tests", "run tests", and "test command" patterns.
928
+ - **CHANGELOG check accepts variants**: Now recognizes CHANGES.md, HISTORY.md, NEWS.md in addition to CHANGELOG.md.
929
+
930
+ ### Measured
931
+ - **External repo audit (EXP-11)**: 10 popular repos (213K combined stars). Score range: 15–59. FP rate: ~2–4%.
932
+
933
+ ## [1.14.0] - 2026-04-11
934
+
935
+ ### Added
936
+ - **Harmony Score standalone command**: `nerviq harmony-score` outputs 0-100 cross-platform alignment score with `--badge` (shields.io markdown), `--threshold N` (CI gate with exit code 1 on failure), `--quiet` (score number only for piping), and `--json` (full platform breakdown).
937
+ - **Harmony Demo**: `nerviq harmony-demo` creates a temporary multi-platform project (Claude + Cursor + Copilot) with intentional drift and runs a live harmony audit — zero setup required.
938
+ - **Cross-platform CI matrix**: CI now runs on 3 OS (Ubuntu, Windows, macOS) x 3 Node versions (18, 20, 22) for 9 total verification combinations.
939
+
940
+ ## [1.13.0] - 2026-04-10
941
+
942
+ ### Added
943
+ - **Self-audit compliance**: CLAUDE.md now includes XML constraint blocks, mermaid architecture diagram, project description, lint command reference, and trust boundary self-audit score 73→84.
944
+ - **Hardened platform freshness**: all 8 platforms now have version-specific freshness coverage in the check engine.
945
+ - **Cross-surface contract regression**: a new regression pack validates that public integration contracts, API docs, and MCP transport docs stay consistent across releases.
946
+
947
+ ### Changed
948
+ - **Flagship CLAUDE.md refactored**: instruction surface is now concise, modular, and follows the patterns Nerviq recommends to users.
949
+ - **Audit and setup modules split**: `audit.js` split into recommendation + instruction modules; `setup.js` split into analysis + runtime modules — cleaner boundaries, same public API.
950
+ - **HTTP API docs separated from MCP transport**: each integration surface now has its own documentation entry point.
951
+
952
+ ### Fixed
953
+ - **CI token gating**: research metadata validation is now gated on repo token, preventing false failures in forks and public CI.
954
+ - **Live site metadata guard**: relaxed rendered-HTML guard to support Vercel's dynamic page output without spurious drift warnings.
955
+
956
+ ## [1.12.0] - 2026-04-09
957
+
958
+ ### Added
959
+ - **Adaptive governance guidance**: `augment` / `suggest-only` now classify repo archetypes, recommend operating profiles, and emit adopt / defer / ignore decisions with explicit explainability fields.
960
+ - **Continuous operating mode**: Nerviq now supports managed baselines, diff-aware drift mode for CI / PR / watch flows, named upgrade campaigns, lifecycle snapshot milestones, and expiry-backed exception workflows.
961
+ - **Behavioral drift outcome layer**: `deep-review --behavioral` now provides an opt-in local report for structural drift, intent-vs-outcome mismatches, and behavioral snapshots over time.
962
+ - **Org and integration standard surfaces**: added org policy inheritance, fleet score semantics, public integration contracts, first-tier integration gate docs, category definition kit, and a public benchmark corpus.
963
+
964
+ ### Changed
965
+ - **Proof quality is deeper and more specific**: high-volume source URLs now point to more relevant official documentation pages instead of generic roots.
966
+ - **Claude techniques are now modularized internally**: the legacy `src/techniques.js` monolith was split into 12 fragments plus shared helpers, while keeping the public export contract unchanged.
967
+
968
+ ### Fixed
969
+ - **GitHub Actions contract stability**: org-scan JSON output now flushes safely in CI, modern action runtimes are aligned, and workflow stability remains green on Node 18 and Node 20.
970
+ - **Public surfaces stay synchronized with shipped verification**: release-facing docs and site examples now reflect the current `307`-test verification baseline and `1.12.0` API/version examples.
971
+
972
+ ## [1.11.0] - 2026-04-09
973
+
974
+ ### Changed
975
+ - **Instruction budget warnings now speak in tokens**: large instruction-file warnings use approximate token counts instead of raw byte thresholds, making context-window guidance more aligned with real model pressure.
976
+ - **Deny-rule evaluation now normalizes paths consistently**: symlink aliases collapse into one effective deny rule, repo-escape traversal patterns no longer inflate posture, and explicit absolute-path deny rules remain visible as intentional coverage.
977
+
978
+ ### Fixed
979
+ - **Claude deny-rule parity across audit surfaces**: audit techniques, anti-pattern detection, and suggest-only analysis now share the same deny-rule normalization contract instead of evaluating path patterns differently.
980
+ - **GitHub automation contract stability**: workspace audit JSON is now CI-safe and Aider freshness output matches the shared `fresh` / `stale` workflow contract.
981
+ - **Jest suite alignment with current contracts**: server envelope responses and bootstrap copy are now validated against the live `{ data, meta }` API surface and current history/suggest-rules messaging.
982
+
983
+ ## [1.10.0] - 2026-04-09
984
+
985
+ ### Changed
986
+ - **Product boundary clarified across product surfaces**: CLI, docs, and site now consistently position Nerviq as AI agent governance / configuration intelligence rather than a full SAST replacement.
987
+ - **Score semantics aligned end to end**: live audit, snapshot, benchmark, dashboard, workspace, and harmony scores are now labeled distinctly so one repo cannot appear contradictory without explanation.
988
+ - **Monorepo workspace semantics clarified**: `audit --workspace` now separates root governance health from workspace aggregate/package coverage and explains the relationship directly in CLI output.
989
+
990
+ ### Fixed
991
+ - **Audit vs anti-pattern parity**: shared instruction-surface detection now keeps verification guidance and anti-pattern reporting in sync across `.claude/commands`, `AGENTS.md`, and related instruction docs.
992
+ - **Cold-start lifecycle guidance**: `history`, `compare`, `trend`, and `suggest-rules` now bootstrap users with actionable next steps instead of near-empty no-data output.
993
+ - **Framework-aware verification detection**: Flutter, Swift/Xcode, Python, Go, and .NET verification command variants now count correctly, reducing false negatives on mature repos.
994
+
995
+ ### Docs
996
+ - **Proof and first-run surfaces matured**: published beta case studies, public before/after proof repo, Harmony-first homepage, simplified six-step getting-started flow, clearer Harmony-vs-Synergy maturity messaging, and reduced concept-load across first-touch docs.
997
+
998
+ ## [1.9.0] - 2026-04-07
999
+
1000
+ ### Added
1001
+ - **Dockerfile best practices checks** (#8): multi-stage build detection, .dockerignore validation (node_modules + .env), no secrets in build args
1002
+ - **Terraform check category** (#10): terraform fmt in CI/pre-commit, .terraform in .gitignore, state file not committed, remote backend configured
1003
+ - **i18n / Spanish language support** (#12): new `src/i18n.js` module, `--lang` CLI flag, Spanish locale (`es.json`). Usage: `nerviq audit --lang es`
1004
+
1005
+ ### Fixed
1006
+ - **P0 freshness URLs** (#14-#20): fixed 41 broken documentation URLs across all 7 platforms
1007
+ - Claude Code: `docs.anthropic.com` `code.claude.com/docs`
1008
+ - Cursor: `docs.cursor.com` `cursor.com/docs`, background-agent cloud-agent
1009
+ - Copilot: restructured to `how-tos/`, `concepts/`, `responsible-use/`
1010
+ - Gemini: `ai.google.dev` `google-gemini.github.io/gemini-cli/`
1011
+ - Windsurf: rules merged into memories, MCP moved to `plugins/cascade/mcp`
1012
+ - OpenCode: added `/docs/` prefix to config/plugins/permissions paths
1013
+ - Codex: `docs.codex.ai` `developers.openai.com/codex`
1014
+ - All 53 P0 sources now have `verifiedAt: 2026-04-07`
1015
+ - Check count: 2,431 2,438 (7 new checks)
1016
+
1017
+ ## [1.8.9] - 2026-04-06
1018
+
1019
+ ### Fixed (Expert Round FAANG-level review)
1020
+ - **Setup preserves custom deny rules**: merge via union+deduplicate instead of overwrite — existing deny rules never lost
1021
+ - **Setup creates rollback artifacts**: setup operations now have rollback support like fix/apply
1022
+ - **protect-secrets covers Bash tool**: hook matcher expanded to `Read|Write|Edit|Bash`, checks `tool_input.command` for `cat .env`, `grep .env`, `base64 .env` etc.
1023
+ - **audit --out writes file**: `--out` flag now works for the audit command (was silently ignored)
1024
+ - **scan filters irrelevant categories**: stack-specific categories (flutter, ruby, etc.) hidden when 0 checks pass and stack not detected
1025
+ - **profile load supports built-in profiles**: `profile load read-only` now works by falling back to governance profiles
1026
+ - **Certification requires security gates**: Bronze needs gitIgnoreEnv+secretsProtection passing, Silver adds no critical anti-patterns, Gold needs harmony>=80
1027
+ - **SDK input validation**: all functions throw on null/invalid dir, unknown platform, empty description
1028
+ - **SDK TypeScript definitions**: added `passing`, `total`, `average` to type interfaces
1029
+ - **REST API consistent envelope**: all endpoints return `{ data, meta: { version, timestamp } }` format
1030
+ - **REST API CORS headers**: `Access-Control-Allow-Origin: *` for browser dashboard support
1031
+ - **benchmark organic score prominent**: organic improvement shown first as primary metric
1032
+ - **synergy-report implemented**: replaced "coming soon" with working multi-platform synergy dashboard
1033
+
1034
+ ## [1.8.8] - 2026-04-06
1035
+
1036
+ ### Fixed
1037
+ - **Setup hooks registration**: hooks are now always registered in settings.json (merge, not overwrite) — previously hooks files were created but never connected
1038
+ - **Platform-specific setup**: `setup --platform windsurf/aider/cursor` now routes to platform-specific setup functions instead of only creating Claude files
1039
+ - **Rollback artifacts**: rollback now correctly records created/patched files (written after fixes, not before)
1040
+ - **fix --dry-run**: properly separated from --auto shows what would be fixed without writing files
1041
+ - **fix removes allow:["*"]**: secretsProtection fixer now removes overly broad allow rules when adding deny rules
1042
+ - **--profile flag**: now loads and applies governance profiles (read-only, suggest-only, safe-write, power-user) to audit
1043
+ - **profile load**: now applies deny rules and threshold to settings.json instead of just displaying
1044
+ - **SDK passing/total**: added `passing`, `total`, and `average` aliases to SDK audit/harmony results
1045
+ - **Swift detection**: Swift projects (Package.swift, .xcodeproj) now detected in subdirectories
1046
+ - **Python repository rules**: repository.md now references pyproject.toml instead of package.json for Python projects
1047
+ - **convert filename doubling**: strips all known extensions (.md, .mdc, .txt) preventing CLAUDE.md.md
1048
+ - **convert frontmatter leak**: MDC frontmatter stripped for all non-cursor targets (copilot, claude, codex, etc.)
1049
+ - **scan vs org scan**: `scan` now shows detailed per-repo breakdown; `org scan` shows aggregated summary
1050
+ - **migrate --platform cursor**: added migrate to FULL_COMMAND_SET so platform dispatch works correctly
1051
+ - **Hooks fail-closed**: protect-secrets hook now blocks on error instead of allowing (fail-closed, not fail-open)
1052
+ - **Settings merge**: setup now merges all fields (hooks, permissions, mcpServers, nerviqSetup) into existing settings.json
1053
+
1054
+ ## [1.8.7] - 2026-04-06
1055
+
1056
+ ### Changed
1057
+ - **Complete CLAUDEX NERVIQ rebrand**: all internal references, env vars (`NERVIQ_NO_INSIGHTS`), JSON keys (`_nerviq_managed`), and property names updated
1058
+ - **Restored audit-repo skill template**: Claude-native skill for running `npx @nerviq/cli --json` from within Claude Code
1059
+ - **Updated .gitignore**: fixed legacy `claudex-setup` reference
1060
+
1061
+ ## [1.8.6] - 2026-04-06
1062
+
1063
+ ### Changed
1064
+ - **Confidence calibration**: 5-tier system (0.3/0.6/0.7/0.8/0.9) based on actual evidence quality — stack checks=0.6, default=0.7, with-template=0.8, runtime-verified=0.9
1065
+ - **SDK dogfooding**: CLI now imports `audit`, `detectPlatforms`, `getCatalog` from public SDK API instead of internal modules
1066
+ - Updated test count badge: 293 tests
1067
+
1068
+ ## [1.8.5] - 2026-04-06
1069
+
1070
+ ### Changed Honesty & Maturity Overhaul (Stream 23)
1071
+ - **Check count messaging**: All surfaces now show "2,431 checks (8 platforms × ~300 governance rules)" instead of inflated raw number
1072
+ - **Synergy → [EXPERIMENTAL]**: Synergy dashboard, CLI output, and site docs now carry experimental label with disclaimer about static routing rules
1073
+ - **Feature maturity labels**: Introduced GA/Beta/Experimental system Harmony=GA, Plugins=GA, SDK=Beta, Synergy=Experimental
1074
+ - **"evidence-based" → accurate**: Changed to "rule-based audit engine with evidence tracking" in methodology docs
1075
+ - **Positioning**: Added "Best for teams going from 0→governed" and "Not designed for deeply customized setups" to README and site
1076
+ - **sourceUrl audit**: Verified 100% coverage (2,306/2,306 checks), identified 78 unique URLs for future specificity improvement
1077
+
1078
+ ### Fixed
1079
+ - Fixed 15 failing tests with stale check counts (2,306→2,431, domain packs 40→62)
1080
+ - Jest version verified: ^30.3.0 valid (30.2.0 installed)
1081
+
1082
+ ### Added
1083
+ - 14 new Harmony integration tests (full pipeline, drift scenarios, add platform, state persistence, governance, advisor)
1084
+ - Total test count: 293 passing across 28 suites
1085
+ - MaturityBadge component on nerviq.net docs pages
1086
+
1087
+ ## [1.7.1] - 2026-04-07
1088
+
1089
+ ### Changed
1090
+ - README synced: added 8 missing commands (rollback, check-health, anti-patterns, freshness, rules-export, org scan), 4 missing options (--full, --config-only, --only, --workspace), fixed NERVIQ→NERVIQ branding
1091
+
1092
+ ## [1.7.0] - 2026-04-07
1093
+
1094
+ ### Added — Final P2 batch
1095
+ - **UAT-11: `nerviq rollback`** — Undo the most recent apply by deleting all created files. Supports `--list` (show rollback points), `--dry-run` (preview), and auto-cleanup of rollback artifacts after use.
1096
+ - **UAT-18**: `apply --only hooks,commands` already worked (verified)
1097
+ - **UAT-19**: Benchmark messaging improved for post-setup runs
1098
+
1099
+ ## [1.6.5] - 2026-04-07
1100
+
1101
+ ### Added — More P2 UX from UAT
1102
+ - **UAT-14**: Governance shows top 5 domain/MCP packs by default, `--verbose` for all
1103
+ - **UAT-20**: Frontend.md rule no longer generated for backend-only projects (Express, NestJS)
1104
+ - **UAT-23**: `rules-export` shows human-readable summary by default, `--json` for full output
1105
+ - **UAT-24**: `history --prune N` to clean old snapshots (keeps last N)
1106
+ - **UAT-21**: Harmony task routing already dynamic (via UAT-04 phantom platform fix)
1107
+
1108
+ ## [1.6.4] - 2026-04-07
1109
+
1110
+ ### Added — P2 UX improvements from UAT
1111
+ - **UAT-12**: Setup now lists every file created (`+ CLAUDE.md`, `+ .claude/settings.json`, ...)
1112
+ - **UAT-13**: Lite mode shows pass/fail count: `Score: 78/100 (62/86 checks passing)`
1113
+ - **UAT-15**: Audit header shows detected config files: `Found: CLAUDE.md, AGENTS.md, .cursorrules`
1114
+ - **UAT-17**: Suggested next command includes `--platform` for non-Claude platforms
1115
+ - **UAT-22**: History shows HH:MM timestamps when multiple snapshots share same date
1116
+
1117
+ ## [1.6.3] - 2026-04-07
1118
+
1119
+ ### Fixed P1 from UAT
1120
+ - **UAT-04**: Harmony only audits platforms with detected config files (was always 8/8)
1121
+ - **UAT-05**: `apply --rollback` now shows clear error instead of silently re-applying
1122
+ - **UAT-06**: Harmony drift now auto-recorded — compares scores to previous audit, records deltas ≥5 points
1123
+ - **UAT-07**: Migrate error message includes usage example
1124
+ - **UAT-08**: Doctor aider freshness gate no longer crashes (null safety)
1125
+ - **UAT-09**: `nerviq fix` now auto-fixes `gitIgnoreEnv` (.env to .gitignore) and `secretsProtection` (deny rules in settings.json) the two most common critical findings
1126
+ - **UAT-10**: Rails/Laravel/.NET false positives in `fix` output eliminated (was caused by same null-inclusion bug as UAT-02)
1127
+
1128
+ ## [1.6.2] - 2026-04-07
1129
+
1130
+ ### Fixed P0 from UAT (ship-stoppers)
1131
+ - **UAT-01 BLOCKER**: `npx @nerviq/cli audit` now works — added `@nerviq/cli` bin alias
1132
+ - **UAT-02**: `nerviq fix` was showing 375 failed checks (including skipped) vs audit's 77. Fixed: now filters `r.passed === false` only, matching audit count exactly
1133
+ - **UAT-03**: Confidence label `[MEDIUM]` was shown on critical items (confusing). Changed threshold: 0.7 confidence now shows `[HIGH]` instead of `[MEDIUM]`
1134
+
1135
+ ## [1.6.1] - 2026-04-07
1136
+
1137
+ ### Added
1138
+ - **F3-01: `nerviq check-health`**Detects regressions between audit snapshots. Compares per-check pass/fail state and flags checks that went from passing to failing. When 3+ checks in the same category regress, alerts as "potential platform format change."
1139
+ - **F3-03: Regression tests**3 new tests for check-health: no-snapshots, stable state, and regression detection
1140
+ - Supports `--json` for CI integration
1141
+
1142
+ ## [1.6.0] - 2026-04-07
1143
+
1144
+ ### Changed ACCURACY OVERHAUL
1145
+ - **Stack detection accuracy**: Checks for Python, Go, Rust, Java, Ruby, PHP, .NET, Flutter, Swift, Kotlin now skip when the stack is only present in `examples/`, `docs/`, `test/`, `vendor/` directories not at project root. Previously these fired false positives on monorepos and repos with example code.
1146
+ - **Generic quality checks scoped**: 132 checks (observability, caching, i18n, rate-limiting, etc.) are now skipped by default — they measure general software quality, not AI agent configuration. Use `--verbose` to include them.
1147
+ - **Urgency count fix**: Skipped (not-applicable) checks were incorrectly counted as critical/high in the lite output summary. Now only actual failures are counted.
1148
+
1149
+ ### Impact
1150
+ - supabase/supabase: Failed 120 → 55 (65 false positives eliminated)
1151
+ - Nerviq's own repo: Fake "🔴 3 critical" → accurate "🔵 19 recommended"
1152
+ - All failed checks are now relevant to AI agent configuration
1153
+
1154
+ ## [1.5.3] - 2026-04-07
1155
+
1156
+ ### Added
1157
+ - **T4-01:** Confidence labels (`[HIGH]` / `[MEDIUM]` / `[HEURISTIC]`) on every failed check in full audit
1158
+ - **T4-02:** Safety modes documented in README: read-only, suggest-only, dry-run, config-only, safe-write, power-user
1159
+ - **T4-02:** `--config-only` flag added restricts writes to config files only
1160
+ - **B4:** Suggest-only markdown export verified working (`nerviq suggest-only --out report.md`)
1161
+
1162
+ ### Fixed
1163
+ - Report header rebranded from "Nerviq" to "Nerviq" in markdown export
1164
+
1165
+ ## [1.5.2] - 2026-04-07
1166
+
1167
+ ### Added
1168
+ - **F1-01: Lite-by-default** `nerviq audit` now shows quick scan (score + top 3 actions). Use `--full` for complete output.
1169
+ - **F1-02: Urgency tiers** Lite output shows `🔴 critical / 🟡 high / 🔵 recommended` summary and per-item tier icons
1170
+ - **F2-01: `nerviq fix` command** — Auto-fix checks with templates, show manual guidance for others, display score impact
1171
+ - `nerviq fix` List fixable and manual-fix checks
1172
+ - `nerviq fix <key>` Fix a specific check with before/after score
1173
+ - `nerviq fix --all-critical` Fix all critical issues at once
1174
+ - `nerviq fix --dry-run` — Preview without writing
1175
+
1176
+ ### Changed
1177
+ - Default `nerviq audit` is now lite mode (previously showed full output)
1178
+ - `--full` flag added to restore previous full-output behavior
1179
+ - `--verbose` still shows full output plus medium-priority recommendations
1180
+ - Lite output streamlined: single fix line per item instead of redundant Why/Fix
1181
+
1182
+ ## [1.5.1] - 2026-04-06
1183
+
1184
+ ### Added
1185
+ - "Get Started by Role" section in README (solo dev / team lead / enterprise paths)
1186
+ - "What Nerviq Is and Isn't" section in README (honest limitations, confidence levels)
1187
+ - CHANGELOG entries for v1.2.5 through v1.5.0 (previously undocumented)
1188
+
1189
+ ### Changed
1190
+ - Check counts synced across all surfaces (README, package.json, badge): 2,431 total
1191
+ - Removed stale "v1.0" reference from README
1192
+ - Tagline sharpened: "Standardize and govern your AI coding agent setup"
1193
+ - Platform check counts updated to match actual catalog
1194
+ - Removed self-certification badge
1195
+
1196
+ ## [1.5.0] - 2026-04-05
1197
+
1198
+ ### Added
1199
+ - Stream 8 Self-Dependent Execution — intelligence hardening
1200
+ - New CLI commands: `nerviq rules-export`, `nerviq anti-patterns`, `nerviq freshness`
1201
+ - A2: Recommendation rules export to JSON
1202
+ - A3: Shared contract schemas (technique + pack)
1203
+ - A6: 22 anti-pattern definitions with detection
1204
+ - A7: Last-verified date tracking for 123 checks
1205
+ - B5: External benchmark path (`nerviq benchmark --external /path`)
1206
+ - B8: Governance hook risk level classification (high/medium/low)
1207
+
1208
+ ### Changed
1209
+ - B3: Augment now preserves and displays top 10 strengths
1210
+
1211
+ ## [1.4.1] - 2026-04-05
1212
+
1213
+ ### Fixed
1214
+ - npm README display alignment
1215
+
1216
+ ## [1.4.0] - 2026-04-05
1217
+
1218
+ ### Added
1219
+ - Stream 13: 84 new coverage checks across 15 directions
1220
+ - MC-A (HIGH): Observability, Accessibility, GDPR, Error Tracking, Supply Chain — 31 checks
1221
+ - MC-B (MED): i18n, API Versioning, Caching, Rate Limiting, Feature Flags, Docs, Monorepo, Performance — 43 checks
1222
+ - MC-C (LOW): WebSocket/Real-time, GraphQL — 10 checks
1223
+ - Total reached 2,039 checks across 96 categories
1224
+
1225
+ ## [1.3.2] - 2026-04-05
1226
+
1227
+ ### Changed
1228
+ - README fully updated: badge, platform table, category table, stack languages table
1229
+ - package.json description synced to 1,955 checks
1230
+ - Added `harmony-add` command to docs
1231
+
1232
+ ## [1.3.1] - 2026-04-05
1233
+
1234
+ ### Added
1235
+ - Stream 5D: 35 mobile stack checks (Flutter 15, Swift 10, Kotlin 10)
1236
+ - Stream 4 Batch 2: 22 new domain packs (healthcare to energy)
1237
+ - Stream 5 complete: 172 stack checks across 10 languages
1238
+
1239
+ ## [1.3.0] - 2026-04-05
1240
+
1241
+ ### Added
1242
+ - Stream 5: Stack-specific checks for 7 languages (137 new checks)
1243
+ - Python (26), Go (21), Rust (21), Java/Spring (21), Ruby (16), PHP (16), .NET (16)
1244
+ - QP-D02: API reference documentation (`docs/api-reference.md`)
1245
+
1246
+ ## [1.2.7] - 2026-04-05
1247
+
1248
+ ### Changed
1249
+ - Version bump for npm publish alignment
1250
+
1251
+ ## [1.2.6] - 2026-04-05
1252
+
1253
+ ### Added
1254
+ - EC1-EC8: All 6 new ECC-inspired checks + 2 advisor task types
1255
+
1256
+ ### Fixed
1257
+ - Flaky `compareLatest` test (timestamp tiebreaker sort)
1258
+
1259
+ ## [1.2.5] - 2026-04-05
1260
+
1261
+ ### Added
1262
+ - 3 ECC-inspired checks: `llms.txt`, MCP budget warning, hook exit code docs
1263
+
1264
+ ### Changed
1265
+ - Complete NERVIQ → NERVIQ rebrand across docs, content, action, landing page
1266
+ - CHANGELOG rewritten to Keep a Changelog format with full version history
1267
+
1268
+ ## [1.2.4] - 2026-04-05
1269
+
1270
+ ### Added
1271
+ - H8: Unified platform capability matrices into a single source of truth
1272
+ - Windsurf, Aider, and OpenCode intelligence added to Harmony module
1273
+ - Codex platform additions synced to metadata
1274
+
1275
+ ### Changed
1276
+ - MG5-MG11: Complete NERVIQ to NERVIQ migration in CLI codebase
1277
+ - Hardcoded `.claude/nerviq-cli/` paths migrated to `.nerviq/` with fallback
1278
+
1279
+ ## [1.2.3] - 2026-04-05
1280
+
1281
+ ### Added
1282
+ - Batch Q1: check-matrix and golden-matrix tests for Windsurf, Aider, OpenCode
1283
+ - Quality Perfection Q1: Gold certification, harmony+synergy proof
1284
+ - SDK/server tests and plugin dogfood validation
1285
+
1286
+ ### Changed
1287
+ - Self-audit score improved from 80 to 90
1288
+ - CI self-audit integrated into pipeline
1289
+
1290
+ ## [1.2.1] - 2026-04-05
1291
+
1292
+ ### Fixed
1293
+ - Skip API/DB/Auth/Monitoring checks on irrelevant projects (false positive reduction)
1294
+ - Self-dogfood: added `.mcp.json` to own project
1295
+ - LICENSE updated to AGPL-3.0 full text
1296
+ - CI test assertions updated for new error messages and .npmignore changes
1297
+
1298
+ ## [1.2.0] - 2026-04-05
1299
+
1300
+ ### Added
1301
+ - Massive expansion: 673 to 2,306 checks (+1,633)
1302
+ - Batch 4: 25 case studies (10 single-platform + 10 harmony/synergy + 5 existing) with INDEX
1303
+ - Batch 3: +104 experiments (228 to 332) and +133 research docs (315 to 448)
1304
+ - 27 cross-platform research documents
1305
+
1306
+ ## [1.1.1] - 2026-04-05
1307
+
1308
+ ### Added
1309
+ - Batch 2: +24 domain packs (16 to 40) and +23 MCP packs (26 to 49) across all 8 platforms
1310
+
1311
+ ## [1.1.0] - 2026-04-05
1312
+
1313
+ ### Added
1314
+ - Batch 1: +383 checks (673 to 1,056) across 8 new categories for all 8 platforms
1315
+
1316
+ ## [1.0.2] - 2026-04-05
1317
+
1318
+ ### Fixed
1319
+ - Scorecard: 15 dimensions improved (privacy, security, monorepo, org, integrations, telemetry, OTel, SLSA, versioning, errors, audit log, deprecation, large files, relevance decay, case studies)
1320
+
1321
+ ### Added
1322
+ - Methodology documentation, FP ranking, SBOM, CI experiments
1323
+ - Improved `.npmignore` and `test:all` script
1324
+
1325
+ ## [1.0.1] - 2026-03-31
1326
+
1327
+ ### Fixed
1328
+ - Mermaid diagram rendering in README
1329
+ - macOS `grep` compatibility issue
1330
+ - Version stamp display
1331
+
1332
+ ## [1.0.0] - 2026-04-05
1333
+
1334
+ ### Changed
1335
+ - **Renamed from nerviq-cli to Nerviq** — "The intelligent nervous system for AI coding agents"
1336
+ - Full rebrand across CLI, docs, and package metadata
1337
+
1338
+ ## [0.9.6] - 2026-04-05
1339
+
1340
+ ### Added
1341
+ - SDK for programmatic access
1342
+ - REST API server with Express
1343
+ - Plugin system for extensibility
1344
+ - SLSA provenance for supply chain security
1345
+ - CONTRIBUTING.md for open-source contributors
1346
+
1347
+ ## [0.9.5] - 2026-04-05
1348
+
1349
+ ### Added
1350
+ - VS Code extension
1351
+ - `catalog` command for browsing checks
1352
+ - Performance baselines and benchmarks
1353
+ - Feedback loop for community contributions
1354
+
1355
+ ### Changed
1356
+ - All 673 checks now include `sourceUrl` and `confidence` metadata
1357
+
1358
+ ## [0.9.4] - 2026-04-05
1359
+
1360
+ ### Added
1361
+ - GitHub Action for CI/CD integration
1362
+ - MCP server for tool integration
1363
+ - `doctor`, `convert`, and `migrate` commands
1364
+ - Freshness pipeline for check staleness detection
1365
+ - 3 case studies with real project data
1366
+ - Harmony, Synergy, and E2E test suites (187 total tests)
1367
+
1368
+ ## [0.9.3] - 2026-04-05
1369
+
1370
+ ### Fixed
1371
+ - Checks updated from experiment findings: Gemini +5, Copilot +5, Cursor +4, Aider +3, Windsurf/OpenCode fixes
1372
+ - Stale checks cleaned and new checks added
1373
+ - CI: added `npm ci` step for dependency install
1374
+
1375
+ ### Changed
1376
+ - README updated with beta notice and coming-soon platform list
1377
+
1378
+ ## [0.9.x] - 2026-04-04
1379
+
1380
+ ### Changed
1381
+ - README updated with nerviq-cli to Nerviq migration notice
1382
+
1383
+ ## [0.5.1] - 2026-03-31
1384
+
1385
+ ### Changed
1386
+ - Deep-review auto-detects Claude Code presence (no API key needed)
1387
+ - Landing page and help text updated
1388
+
1389
+ ## [0.5.0] - 2026-03-31
1390
+
1391
+ ### Added
1392
+ - AI-powered `deep-review` command using Claude API
1393
+ - Intelligent analysis beyond static checks
1394
+
1395
+ ## [0.4.0] - 2026-03-31
1396
+
1397
+ ### Added
1398
+ - 9 quality-deep checks for veteran Claude Code users
1399
+ - Deeper analysis for experienced workflows
1400
+
1401
+ ### Changed
1402
+ - Community feedback addressed: improved honesty, no-overwrite behavior, less dogmatic tone
1403
+
1404
+ ## [0.3.2] - 2026-03-31
1405
+
1406
+ ### Changed
1407
+ - README v2: all commands documented, smart gen showcase, 54 checks table, GitHub Action, privacy section
1408
+
1409
+ ## [0.3.1] - 2026-03-31
1410
+
1411
+ ### Added
1412
+ - Anonymous insights collection
1413
+ - Weakest areas analysis
1414
+ - Community statistics dashboard
1415
+
1416
+ ### Fixed
1417
+ - Insights endpoint corrected to `nerviq.workers.dev`
1418
+
1419
+ ## [0.3.0] - 2026-03-31
1420
+
1421
+ ### Added
1422
+ - Interactive wizard for guided setup
1423
+ - Watch mode for continuous monitoring
1424
+ - Landing page with FAQ, trust signals, badges
1425
+
1426
+ ## [0.2.1] - 2026-03-31
1427
+
1428
+ ### Added
1429
+ - Smart `CLAUDE.md` generator based on project analysis
1430
+ - `badge` command for README status badges
1431
+ - GitHub Action for automated auditing
1432
+ - Quick wins recommendations
1433
+
1434
+ ## [0.2.0] - 2026-03-31
1435
+
1436
+ ### Added
1437
+ - Expanded to 54 checks across 18 technology stacks
1438
+ - Improved CLAUDE.md templates
1439
+
1440
+ ### Fixed
1441
+ - Security: removed hardcoded Dev.to API key from CLAUDE.md
1442
+ - Security: made NERVIQ catalog links private
1443
+
1444
+ ## [0.1.0] - 2026-03-30
1445
+
1446
+ ### Added
1447
+ - Initial release of nerviq-cli (later renamed to Nerviq)
1448
+ - Project audit and optimization for Claude Code workflows
1449
+ - Landing page (GitHub Pages ready)
1450
+ - Launch content and community posts
1451
+
1452
+ [Unreleased]: https://github.com/nerviq/nerviq/compare/v1.29.1...HEAD
1453
+ [1.29.1]: https://github.com/nerviq/nerviq/compare/v1.29.0...v1.29.1
1454
+ [1.29.0]: https://github.com/nerviq/nerviq/compare/v1.28.0...v1.29.0
1455
+ [1.28.0]: https://github.com/nerviq/nerviq/compare/v1.27.1...v1.28.0
1456
+ [1.27.1]: https://github.com/nerviq/nerviq/compare/v1.27.0...v1.27.1
1457
+ [1.27.0]: https://github.com/nerviq/nerviq/compare/v1.26.0...v1.27.0
1458
+ [1.26.0]: https://github.com/nerviq/nerviq/compare/v1.25.0...v1.26.0
1459
+ [1.25.0]: https://github.com/nerviq/nerviq/compare/v1.24.0...v1.25.0
1460
+ [1.24.0]: https://github.com/nerviq/nerviq/compare/v1.23.0...v1.24.0
1461
+ [1.23.0]: https://github.com/nerviq/nerviq/compare/v1.22.0...v1.23.0
1462
+ [1.22.0]: https://github.com/nerviq/nerviq/compare/v1.21.0...v1.22.0
1463
+ [1.21.0]: https://github.com/nerviq/nerviq/compare/v1.20.1...v1.21.0
1464
+ [1.20.1]: https://github.com/nerviq/nerviq/compare/v1.20.0...v1.20.1
1465
+ [1.20.0]: https://github.com/nerviq/nerviq/compare/v1.19.0...v1.20.0
1466
+ [1.19.0]: https://github.com/nerviq/nerviq/compare/v1.18.0...v1.19.0
1467
+ [1.18.0]: https://github.com/nerviq/nerviq/compare/v1.17.3...v1.18.0
1468
+ [1.17.3]: https://github.com/nerviq/nerviq/compare/v1.17.2...v1.17.3
1469
+ [1.17.2]: https://github.com/nerviq/nerviq/compare/v1.17.1...v1.17.2
1470
+ [1.17.1]: https://github.com/nerviq/nerviq/compare/v1.17.0...v1.17.1
1471
+ [1.17.0]: https://github.com/nerviq/nerviq/compare/v1.16.0...v1.17.0
1472
+ [1.16.0]: https://github.com/nerviq/nerviq/compare/v1.15.0...v1.16.0
1473
+ [1.15.0]: https://github.com/nerviq/nerviq/compare/v1.14.0...v1.15.0
1474
+ [1.14.0]: https://github.com/nerviq/nerviq/compare/v1.13.0...v1.14.0
1475
+ [1.13.0]: https://github.com/nerviq/nerviq/compare/v1.12.0...v1.13.0
1476
+ [1.12.0]: https://github.com/nerviq/nerviq/compare/v1.11.0...v1.12.0
1477
+ [1.11.0]: https://github.com/nerviq/nerviq/compare/v1.10.0...v1.11.0
1478
+ [1.10.0]: https://github.com/nerviq/nerviq/compare/v1.9.0...v1.10.0
1479
+ [1.9.0]: https://github.com/nerviq/nerviq/compare/v1.8.9...v1.9.0
1480
+ [1.8.9]: https://github.com/nerviq/nerviq/compare/v1.8.8...v1.8.9
1481
+ [1.8.8]: https://github.com/nerviq/nerviq/compare/v1.8.7...v1.8.8
1482
+ [1.8.7]: https://github.com/nerviq/nerviq/compare/v1.8.6...v1.8.7
1483
+ [1.8.6]: https://github.com/nerviq/nerviq/compare/v1.8.5...v1.8.6
1484
+ [1.8.5]: https://github.com/nerviq/nerviq/compare/v1.7.1...v1.8.5
1485
+ [1.7.1]: https://github.com/nerviq/nerviq/compare/v1.7.0...v1.7.1
1486
+ [1.7.0]: https://github.com/nerviq/nerviq/compare/v1.6.5...v1.7.0
1487
+ [1.6.5]: https://github.com/nerviq/nerviq/compare/v1.6.4...v1.6.5
1488
+ [1.6.4]: https://github.com/nerviq/nerviq/compare/v1.6.3...v1.6.4
1489
+ [1.6.3]: https://github.com/nerviq/nerviq/compare/v1.6.2...v1.6.3
1490
+ [1.6.2]: https://github.com/nerviq/nerviq/compare/v1.6.1...v1.6.2
1491
+ [1.6.1]: https://github.com/nerviq/nerviq/compare/v1.6.0...v1.6.1
1492
+ [1.6.0]: https://github.com/nerviq/nerviq/compare/v1.5.3...v1.6.0
1493
+ [1.5.3]: https://github.com/nerviq/nerviq/compare/v1.5.2...v1.5.3
1494
+ [1.5.2]: https://github.com/nerviq/nerviq/compare/v1.5.1...v1.5.2
1495
+ [1.5.1]: https://github.com/nerviq/nerviq/compare/v1.5.0...v1.5.1
1496
+ [1.5.0]: https://github.com/nerviq/nerviq/compare/v1.4.1...v1.5.0
1497
+ [1.4.1]: https://github.com/nerviq/nerviq/compare/v1.4.0...v1.4.1
1498
+ [1.4.0]: https://github.com/nerviq/nerviq/compare/v1.3.2...v1.4.0
1499
+ [1.3.2]: https://github.com/nerviq/nerviq/compare/v1.3.1...v1.3.2
1500
+ [1.3.1]: https://github.com/nerviq/nerviq/compare/v1.3.0...v1.3.1
1501
+ [1.3.0]: https://github.com/nerviq/nerviq/compare/v1.2.7...v1.3.0
1502
+ [1.2.7]: https://github.com/nerviq/nerviq/compare/v1.2.6...v1.2.7
1503
+ [1.2.6]: https://github.com/nerviq/nerviq/compare/v1.2.5...v1.2.6
1504
+ [1.2.5]: https://github.com/nerviq/nerviq/compare/v1.2.4...v1.2.5
1505
+ [1.2.4]: https://github.com/nerviq/nerviq/compare/v1.2.3...v1.2.4
1506
+ [1.2.3]: https://github.com/nerviq/nerviq/compare/v1.2.1...v1.2.3
1507
+ [1.2.1]: https://github.com/nerviq/nerviq/compare/v1.2.0...v1.2.1
1508
+ [1.2.0]: https://github.com/nerviq/nerviq/compare/v1.1.1...v1.2.0
1509
+ [1.1.1]: https://github.com/nerviq/nerviq/compare/v1.1.0...v1.1.1
1510
+ [1.1.0]: https://github.com/nerviq/nerviq/compare/v1.0.2...v1.1.0
1511
+ [1.0.2]: https://github.com/nerviq/nerviq/compare/v1.0.1...v1.0.2
1512
+ [1.0.1]: https://github.com/nerviq/nerviq/compare/v1.0.0...v1.0.1
1513
+ [1.0.0]: https://github.com/nerviq/nerviq/compare/v0.9.6...v1.0.0
1514
+ [0.9.6]: https://github.com/nerviq/nerviq/compare/v0.9.5...v0.9.6
1515
+ [0.9.5]: https://github.com/nerviq/nerviq/compare/v0.9.4...v0.9.5
1516
+ [0.9.4]: https://github.com/nerviq/nerviq/compare/v0.9.3...v0.9.4
1517
+ [0.9.3]: https://github.com/nerviq/nerviq/compare/v0.9.x...v0.9.3
1518
+ [0.9.x]: https://github.com/nerviq/nerviq/compare/v0.5.1...v0.9.x
1519
+ [0.5.1]: https://github.com/nerviq/nerviq/compare/v0.5.0...v0.5.1
1520
+ [0.5.0]: https://github.com/nerviq/nerviq/compare/v0.4.0...v0.5.0
1521
+ [0.4.0]: https://github.com/nerviq/nerviq/compare/v0.3.2...v0.4.0
1522
+ [0.3.2]: https://github.com/nerviq/nerviq/compare/v0.3.1...v0.3.2
1523
+ [0.3.1]: https://github.com/nerviq/nerviq/compare/v0.3.0...v0.3.1
1524
+ [0.3.0]: https://github.com/nerviq/nerviq/compare/v0.2.1...v0.3.0
1525
+ [0.2.1]: https://github.com/nerviq/nerviq/compare/v0.2.0...v0.2.1
1526
+ [0.2.0]: https://github.com/nerviq/nerviq/compare/v0.1.0...v0.2.0
1527
+ [0.1.0]: https://github.com/nerviq/nerviq/releases/tag/v0.1.0