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