@jagilber-org/index-server 1.26.5 → 1.27.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -6,6 +6,50 @@ The format is based on Keep a Changelog and this project adheres to Semantic Ver
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [1.27.0] - 2026-04-30
10
+
11
+ ### Changed (BREAKING)
12
+
13
+ - **Rate limiting is now opt-in** and consolidated behind a single environment variable, `INDEX_SERVER_RATE_LIMIT` (#270).
14
+ - `INDEX_SERVER_RATE_LIMIT=0` (default, or unset) — rate limiting is **disabled**.
15
+ - `INDEX_SERVER_RATE_LIMIT=N` (positive integer) — enforces **N requests per minute** with a fixed 60-second window.
16
+ - Bulk import/export/backup/restore routes (`/api/admin/maintenance/normalize`, `/api/admin/maintenance/backup`, `/api/admin/maintenance/backups`, `/api/admin/maintenance/restore`, `/api/charts/export`, `/api/sqlite/backup`, `/api/sqlite/restore`, `/api/sqlite/export`) are **unconditionally exempt**, so dashboard bulk operations no longer trigger 429 responses.
17
+ - The 429 response body shape simplifies to `{ error, message, retryAfterSeconds, timestamp }`. The previous `tier` field (global vs. mutation) has been removed; there is now a single tier.
18
+
19
+ ### Removed (BREAKING)
20
+
21
+ The following environment variables have been **removed with no back-compat aliases**. Replace them with `INDEX_SERVER_RATE_LIMIT`:
22
+
23
+ | Removed variable | Replacement |
24
+ |------------------|-------------|
25
+ | `INDEX_SERVER_DISABLE_RATE_LIMIT` | unset / `INDEX_SERVER_RATE_LIMIT=0` (default) |
26
+ | `INDEX_SERVER_DISABLE_USAGE_RATE_LIMIT` | unset / `INDEX_SERVER_RATE_LIMIT=0` (default) |
27
+ | `INDEX_SERVER_RATE_LIMIT_MAX` | `INDEX_SERVER_RATE_LIMIT=<N>` |
28
+ | `INDEX_SERVER_RATE_LIMIT_WINDOW_MS` | _removed; window is fixed at 60 seconds_ |
29
+ | `INDEX_SERVER_RATE_LIMIT_MUTATION_MAX` | _removed; single tier only_ |
30
+
31
+ Also removed: `DashboardHttpConfig.rateLimitEnabled / rateLimitWindowMs / rateLimitMax / rateLimitMutationMax` (replaced by `rateLimitPerMinute: number`); `ApiRoutesOptions.rateLimit` (replaced by `rateLimitPerMinute?: number`); `AdminConfig.serverSettings.rateLimit` reduced to `{ perMinute: number }`.
32
+
33
+
34
+
35
+ ### Fixed
36
+
37
+ - **Release**: `server.json` now ends with exactly one trailing LF. The v1.26.10 release was published with two trailing LFs (artefact of an earlier `Set-Content -NoNewline` pipeline), which caused the mirror PR to fail CI on the `end-of-file-fixer` framework hook.
38
+ - **Pre-commit (prevention)**: `scripts/pre-commit.mjs` now invokes the `pre-commit` framework on staged files for an explicit fast-hook allowlist (`end-of-file-fixer`, `trailing-whitespace`, `check-json`, `check-yaml`, `check-merge-conflict`, `detect-private-key`). Previously these framework hooks only ran in CI, so auto-fixable formatting issues silently passed local commits and broke PR builds. Slow security hooks (`gitleaks`, `semgrep`, `ggshield`, `detect-secrets`) deliberately remain in their own CI workflows / pre-push stage. Honours `SKIP_PRE_COMMIT_FRAMEWORK=1` and skips gracefully when `pre-commit` is not on PATH (#266).
39
+
40
+ ## [1.26.10] - 2026-04-30
41
+
42
+ ### Fixed
43
+
44
+ - **CI**: `.github/workflows/precommit.yml` checkout now uses `fetch-depth: 0` so `pre-commit run --from-ref BASE --to-ref HEAD` (diff-only mode introduced in v1.26.9) can resolve the PR base SHA. Previous default `fetch-depth: 1` caused `git diff BASE..HEAD` to exit 3 with `CalledProcessError` on every PR (#264).
45
+ - **Tests**: `skippedTestsAudit.spec.ts` env-check allowlist now recognizes platform identifiers (`isWindows`, `isLinux`, `isMac`, `isDarwin`, `process.platform`) so the new `ggshieldWithRetry.spec.ts` Windows-skip from v1.26.9 passes the audit (#264).
46
+
47
+ ## [1.26.6] - 2026-04-28
48
+
49
+ ### Fixed
50
+
51
+ - **Setup Wizard**: Resolve server entry point for `npx` installs so the wizard can locate and launch the server correctly.
52
+
9
53
  ## [1.26.1] - 2026-04-27
10
54
 
11
55
  ### Fixed
@@ -31,7 +75,7 @@ The format is based on Keep a Changelog and this project adheres to Semantic Ver
31
75
 
32
76
  - `health_check` now reports audit-log health counters while exposing only sanitized audit persistence error messages.
33
77
 
34
- ### Removed (breaking ΓÇö MCP feedback surface)
78
+ ### Removed (breaking MCP feedback surface)
35
79
 
36
80
  - **MCP feedback tools collapsed to `feedback_submit` only (#111)**. The following MCP tools have been removed with no deprecation alias and no compatibility shim: `feedback_list`, `feedback_get`, `feedback_update`, `feedback_delete`, `feedback_stats`, `feedback_health`, `feedback_dispatch`. Agents must use `feedback_submit` to file entries. Human-operator CRUD now lives behind dashboard authentication at `GET/POST /admin/feedback`, `GET/PATCH/DELETE /admin/feedback/:id`, sharing the same `feedback/feedback-entries.json` store as the MCP submit path. GitHub issue handoff from the dashboard is browser-side, human-triggered, token-free, and targets `jagilber-org/index-server`. Spec: `specs/111-feedback-mcp-rip-down.md`.
37
81
 
@@ -40,15 +84,15 @@ The format is based on Keep a Changelog and this project adheres to Semantic Ver
40
84
  ### Added
41
85
 
42
86
  - `IEmbeddingStore` interface with pluggable embedding storage backends.
43
- - `SqliteEmbeddingStore` ΓÇö sqlite-vec backed embedding storage with native KNN search via `vec0` virtual table.
44
- - `JsonEmbeddingStore` ΓÇö file-based embedding storage adapter with brute-force cosine similarity search.
45
- - `INDEX_SERVER_SQLITE_VEC_ENABLED` env var ΓÇö opt-in toggle for sqlite-vec embedding storage (default: off).
46
- - `INDEX_SERVER_SQLITE_VEC_PATH` env var ΓÇö custom sqlite-vec native binary path override.
87
+ - `SqliteEmbeddingStore` sqlite-vec backed embedding storage with native KNN search via `vec0` virtual table.
88
+ - `JsonEmbeddingStore` file-based embedding storage adapter with brute-force cosine similarity search.
89
+ - `INDEX_SERVER_SQLITE_VEC_ENABLED` env var opt-in toggle for sqlite-vec embedding storage (default: off).
90
+ - `INDEX_SERVER_SQLITE_VEC_PATH` env var custom sqlite-vec native binary path override.
47
91
  - `createEmbeddingStore()` factory function with automatic JSON fallback when sqlite-vec is unavailable.
48
- - `resolveDevice()` — ONNX Runtime backend probe with injectable fallback chain (cuda → dml → cpu).
49
- - `checkModelReadiness()` ΓÇö startup check that warns when embedding model is missing with LOCAL_ONLY enabled.
50
- - `checkNodeVersion()` ΓÇö runtime version gate with clear error messages for feature-specific Node.js requirements.
51
- - Embedding migration support: `migrateJsonEmbeddingsToStore()` for JSON → SQLite migration.
92
+ - `resolveDevice()` ONNX Runtime backend probe with injectable fallback chain (cuda dml cpu).
93
+ - `checkModelReadiness()` startup check that warns when embedding model is missing with LOCAL_ONLY enabled.
94
+ - `checkNodeVersion()` runtime version gate with clear error messages for feature-specific Node.js requirements.
95
+ - Embedding migration support: `migrateJsonEmbeddingsToStore()` for JSON SQLite migration.
52
96
  - 62 new embedding-related tests across 8 test files (contract, unit, integration, scenario).
53
97
  - Documentation for all new env vars in configuration.md, mcp_configuration.md, vscode_mcp.md, deployment.md, docker_deployment.md, docker-compose.yml, runtime_config_mapping.md.
54
98
  - Architecture docs updated with embedding store abstraction diagram and IEmbeddingStore interface reference.
@@ -57,14 +101,14 @@ The format is based on Keep a Changelog and this project adheres to Semantic Ver
57
101
 
58
102
  - Fixed dual-write stderr that caused duplicate log entries in VS Code Output panel.
59
103
  - Fixed `.Count` on `$null` in `New-CleanRoomCopy.ps1` by wrapping collections in `@()`.
60
- - Fixed tag-wiping in `Publish-ToMirror.ps1` and `publish-direct-to-remote.cjs` ΓÇö publish scripts no longer delete existing remote tags (template-repo#47).
104
+ - Fixed tag-wiping in `Publish-ToMirror.ps1` and `publish-direct-to-remote.cjs` publish scripts no longer delete existing remote tags (template-repo#47).
61
105
 
62
106
  ### Changed
63
107
 
64
108
  - Replaced 137 `console.*` calls with structured logger (`logError`/`logWarn`/`logInfo`/`logDebug`) across 27 server-side TypeScript files.
65
- - Fixed severity misassignment in `promptReviewService.ts` — `logError` → `logWarn`/`logInfo` for non-error messages.
109
+ - Fixed severity misassignment in `promptReviewService.ts` `logError` `logWarn`/`logInfo` for non-error messages.
66
110
  - Added embedding stress tests and `/api/embeddings/compute` route tests.
67
- - Fixed `logInfo('')` empty-string calls in `performanceBaseline.ts` ΓÇö replaced with `logInfo('---')` separators.
111
+ - Fixed `logInfo('')` empty-string calls in `performanceBaseline.ts` replaced with `logInfo('---')` separators.
68
112
  - Fixed `factory.ts` formatting defect (multi-statement single line in sqlite case block).
69
113
  - Docker deployment docs now note Alpine/musl limitation for sqlite-vec native binary.
70
114
 
@@ -92,8 +136,8 @@ The format is based on Keep a Changelog and this project adheres to Semantic Ver
92
136
  - Dashboard authentication via `INDEX_SERVER_ADMIN_API_KEY` with Bearer token, login modal, and sessionStorage-based session management.
93
137
  - CRUD stress test scripts (`scripts/stress-test.ps1`) for load testing instruction operations.
94
138
  - `dashboardAdminAuth` middleware now protects dashboard mutation routes (POST/PUT/DELETE instructions).
95
- - Integration tests for dashboard auth middleware (`dashboardAuth.spec.ts` ΓÇö 33 tests).
96
- - Playwright E2E tests for dashboard auth flow (`dashboard-auth.spec.ts` ΓÇö 10 tests).
139
+ - Integration tests for dashboard auth middleware (`dashboardAuth.spec.ts` 33 tests).
140
+ - Playwright E2E tests for dashboard auth flow (`dashboard-auth.spec.ts` 10 tests).
97
141
  - `npm audit` step in build pipeline and `prepack` script.
98
142
  - `ensureLoadedMiddleware` to reduce redundant `ensureLoaded()` calls in dashboard routes.
99
143
  - Comprehensive stress testing documentation (`docs/stress-testing.md`).
@@ -106,7 +150,7 @@ The format is based on Keep a Changelog and this project adheres to Semantic Ver
106
150
  - All instruction handlers now use `IInstructionStore` interface instead of direct disk I/O, enabling pluggable storage backends.
107
151
  - Auto-migration from JSON to SQLite on startup when `INDEX_SERVER_STORAGE_BACKEND=sqlite`.
108
152
  - Dashboard CRUD routes now properly invalidate cache after mutations, matching MCP handler patterns.
109
- - README replaced with streamlined v2 (216 lines vs 449 original) focused on install → quickstart → copilot integration.
153
+ - README replaced with streamlined v2 (216 lines vs 449 original) focused on install quickstart copilot integration.
110
154
  - Bootstrapper instruction (000-bootstrapper) rewritten to v3 with search-first workflow and copilot instructions setup.
111
155
  - Stress test parallel mode refactored from `Start-Job` to `ForEach-Object -Parallel` (PS 7+).
112
156
  - `.github/copilot-instructions.md` updated with search-before-add gate and fixed stale tool names.
@@ -119,7 +163,7 @@ The format is based on Keep a Changelog and this project adheres to Semantic Ver
119
163
 
120
164
  ### Deprecated
121
165
 
122
- - `INDEX_SERVER_DISABLE_USAGE_RATE_LIMIT` ΓÇö replaced by `INDEX_SERVER_DISABLE_RATE_LIMIT` which covers all rate limiting.
166
+ - `INDEX_SERVER_DISABLE_USAGE_RATE_LIMIT` replaced by `INDEX_SERVER_DISABLE_RATE_LIMIT` which covers all rate limiting.
123
167
 
124
168
  ### Removed
125
169
 
@@ -163,20 +207,20 @@ The format is based on Keep a Changelog and this project adheres to Semantic Ver
163
207
 
164
208
  ### Changed
165
209
 
166
- - **Environment variable consolidation** ΓÇö All direct `process.env` reads in runtime source files have been migrated to the centralized `getRuntimeConfig()` config layer. 12 files consolidated: `handlers.feedback.ts`, `autoBackup.ts`, `instructions.dispatcher.ts`, `sqlite.routes.ts`, `admin.routes.ts`, `seedBootstrap.ts`, `sdkServer.ts`, `BufferRing.ts`, `SessionPersistenceManager.ts`, `manifestManager.ts`, `registry.ts`, `transportFactory.ts`.
167
- - **Standardized env var prefixes** ΓÇö Unprefixed environment variables have been replaced with `INDEX_SERVER_*` equivalents. Old unprefixed names are no longer supported.
210
+ - **Environment variable consolidation** All direct `process.env` reads in runtime source files have been migrated to the centralized `getRuntimeConfig()` config layer. 12 files consolidated: `handlers.feedback.ts`, `autoBackup.ts`, `instructions.dispatcher.ts`, `sqlite.routes.ts`, `admin.routes.ts`, `seedBootstrap.ts`, `sdkServer.ts`, `BufferRing.ts`, `SessionPersistenceManager.ts`, `manifestManager.ts`, `registry.ts`, `transportFactory.ts`.
211
+ - **Standardized env var prefixes** Unprefixed environment variables have been replaced with `INDEX_SERVER_*` equivalents. Old unprefixed names are no longer supported.
168
212
 
169
213
  ### Environment Variables
170
214
 
171
- - `INDEX_SERVER_BUFFER_RING_APPEND` ΓÇö replaces `BUFFER_RING_APPEND` (default: `1`)
172
- - `INDEX_SERVER_BUFFER_RING_PRELOAD` ΓÇö replaces `BUFFER_RING_APPEND_PRELOAD` (default: `0`)
173
- - `INDEX_SERVER_GRAPH_INCLUDE_PRIMARY_EDGES` ΓÇö replaces `GRAPH_INCLUDE_PRIMARY_EDGES` (default: `1`)
174
- - `INDEX_SERVER_GRAPH_LARGE_CATEGORY_CAP` ΓÇö replaces `GRAPH_LARGE_CATEGORY_CAP` (default: `150`)
175
- - `INDEX_SERVER_AUDIT_LOG` ΓÇö replaces `INSTRUCTIONS_AUDIT_LOG` (default: enabled, `logs/audit/`)
176
- - `INDEX_SERVER_COVERAGE_FAST` ΓÇö replaces `FAST_COVERAGE` (default: `0`)
177
- - `INDEX_SERVER_COVERAGE_HARD_MIN` ΓÇö replaces `COVERAGE_HARD_MIN`
178
- - `INDEX_SERVER_COVERAGE_TARGET` ΓÇö replaces `COVERAGE_TARGET`
179
- - `INDEX_SERVER_COVERAGE_STRICT` ΓÇö replaces `COVERAGE_STRICT` (default: `0`)
215
+ - `INDEX_SERVER_BUFFER_RING_APPEND` replaces `BUFFER_RING_APPEND` (default: `1`)
216
+ - `INDEX_SERVER_BUFFER_RING_PRELOAD` replaces `BUFFER_RING_APPEND_PRELOAD` (default: `0`)
217
+ - `INDEX_SERVER_GRAPH_INCLUDE_PRIMARY_EDGES` replaces `GRAPH_INCLUDE_PRIMARY_EDGES` (default: `1`)
218
+ - `INDEX_SERVER_GRAPH_LARGE_CATEGORY_CAP` replaces `GRAPH_LARGE_CATEGORY_CAP` (default: `150`)
219
+ - `INDEX_SERVER_AUDIT_LOG` replaces `INSTRUCTIONS_AUDIT_LOG` (default: enabled, `logs/audit/`)
220
+ - `INDEX_SERVER_COVERAGE_FAST` replaces `FAST_COVERAGE` (default: `0`)
221
+ - `INDEX_SERVER_COVERAGE_HARD_MIN` replaces `COVERAGE_HARD_MIN`
222
+ - `INDEX_SERVER_COVERAGE_TARGET` replaces `COVERAGE_TARGET`
223
+ - `INDEX_SERVER_COVERAGE_STRICT` replaces `COVERAGE_STRICT` (default: `0`)
180
224
 
181
225
  ### Fixed
182
226
 
@@ -223,14 +267,14 @@ The format is based on Keep a Changelog and this project adheres to Semantic Ver
223
267
 
224
268
  ### Fixed
225
269
 
226
- - Addressed P1 scan findings ΓÇö path-injection and regex-injection hardening.
270
+ - Addressed P1 scan findings path-injection and regex-injection hardening.
227
271
 
228
272
  ## [1.18.2] - 2026-04-14 (retroactively documented)
229
273
 
230
274
  ### Fixed
231
275
 
232
- - **Path traversal** in instruction routes ΓÇö validated and sanitized file path parameters.
233
- - **XSS** in admin dashboard ΓÇö escaped user-supplied content in DOM insertion paths.
276
+ - **Path traversal** in instruction routes validated and sanitized file path parameters.
277
+ - **XSS** in admin dashboard escaped user-supplied content in DOM insertion paths.
234
278
  - Added scan reconciliation report documenting resolved findings.
235
279
 
236
280
  ## [1.18.1] - 2026-04-14 (retroactively documented)
@@ -249,36 +293,36 @@ The format is based on Keep a Changelog and this project adheres to Semantic Ver
249
293
 
250
294
  ### Added
251
295
 
252
- - **SQLite storage backend** (⚠️ EXPERIMENTAL — limited testing performed): `INDEX_SERVER_STORAGE_BACKEND=sqlite` enables SQLite-backed instruction storage using Node.js built-in `node:sqlite` (zero third-party dependencies). Not recommended for production use.
253
- - `IInstructionStore` interface ΓÇö storage abstraction layer for backend-agnostic instruction persistence
254
- - `JsonFileStore` ΓÇö existing JSON-file-per-instruction behavior wrapped in the interface
255
- - `SqliteStore` ΓÇö full SQLite implementation with WAL mode, indexes, and FTS5 full-text search
256
- - `SqliteMessageStore` ΓÇö message persistence in SQLite with channel/sender/thread queries
257
- - `SqliteUsageStore` ΓÇö usage tracking in SQLite with atomic increment
258
- - Migration engine ΓÇö bidirectional JSON Γåö SQLite migration (lossless round-trip)
296
+ - **SQLite storage backend** (⚠️ EXPERIMENTAL limited testing performed): `INDEX_SERVER_STORAGE_BACKEND=sqlite` enables SQLite-backed instruction storage using Node.js built-in `node:sqlite` (zero third-party dependencies). Not recommended for production use.
297
+ - `IInstructionStore` interface storage abstraction layer for backend-agnostic instruction persistence
298
+ - `JsonFileStore` existing JSON-file-per-instruction behavior wrapped in the interface
299
+ - `SqliteStore` full SQLite implementation with WAL mode, indexes, and FTS5 full-text search
300
+ - `SqliteMessageStore` message persistence in SQLite with channel/sender/thread queries
301
+ - `SqliteUsageStore` usage tracking in SQLite with atomic increment
302
+ - Migration engine bidirectional JSON SQLite migration (lossless round-trip)
259
303
  - FTS5 search with BM25 ranking (title 10x, body 5x weight)
260
304
  - SQLite backup support in autoBackup (copies .db + WAL/SHM files)
261
305
  - Factory pattern with feature flag: `createStore()` selects backend from config
262
306
  - 115+ storage-specific tests (contract, migration, FTS5, messaging, usage)
263
307
  - Governance hash identical across both backends
264
308
  - **NDJSON structured logging**: All server log output now uses strict NDJSON (newline-delimited JSON) format. Each log line is a JSON object with `ts`, `level`, `msg`, and optional `detail`, `tool`, `ms`, `pid`, `port`, `correlationId` fields. V8 `Error.captureStackTrace` auto-populates stack traces on WARN/ERROR. Module-prefixed messages (`[module]`) support source-file heatmap matching.
265
- - **Markdown preview in instruction editor**: Dashboard instruction editor includes a 📖 Preview button that renders the instruction `body` as GitHub Flavored Markdown (via `marked`). Preview auto-updates as you type.
309
+ - **Markdown preview in instruction editor**: Dashboard instruction editor includes a 📖 Preview button that renders the instruction `body` as GitHub Flavored Markdown (via `marked`). Preview auto-updates as you type.
266
310
  - **Zip-based backups**: All backup operations (auto-backup, bulk-delete, admin panel) now produce `.zip` archives via `adm-zip`. SQLite backend backups include WAL/SHM files for full state preservation. Retention pruning removes oldest snapshots beyond `INDEX_SERVER_AUTO_BACKUP_MAX_COUNT`.
267
311
  - **Offset/limit pagination** for `index_dispatch` list action.
268
312
 
269
313
  ### Changed
270
314
 
271
- - **Pre-push slow test gate removed** ΓÇö slow tests now run exclusively in CI workflows.
315
+ - **Pre-push slow test gate removed** slow tests now run exclusively in CI workflows.
272
316
  - Security headers added to dashboard script routes.
273
317
  - Large modules split into focused single-responsibility files (CQ-1 compliance).
274
318
  - 66 ESLint unused-variable warnings resolved.
275
319
 
276
- ### Environment Variables (⚠️ SQLite options are experimental)
320
+ ### Environment Variables (⚠️ SQLite options are experimental)
277
321
 
278
- - `INDEX_SERVER_STORAGE_BACKEND` ΓÇö `json` (default) or `sqlite` (experimental ΓÇö not recommended for production)
279
- - `INDEX_SERVER_SQLITE_PATH` ΓÇö SQLite database path (default: `data/index.db`)
280
- - `INDEX_SERVER_SQLITE_WAL` ΓÇö Enable WAL mode (default: `true`)
281
- - `INDEX_SERVER_SQLITE_MIGRATE_ON_START` — Auto-migrate JSON → SQLite on first start (default: `true`)
322
+ - `INDEX_SERVER_STORAGE_BACKEND` `json` (default) or `sqlite` (experimental not recommended for production)
323
+ - `INDEX_SERVER_SQLITE_PATH` SQLite database path (default: `data/index.db`)
324
+ - `INDEX_SERVER_SQLITE_WAL` Enable WAL mode (default: `true`)
325
+ - `INDEX_SERVER_SQLITE_MIGRATE_ON_START` Auto-migrate JSON SQLite on first start (default: `true`)
282
326
 
283
327
  ## [1.16.1] - 2026-04-01
284
328
 
@@ -403,13 +447,13 @@ The format is based on Keep a Changelog and this project adheres to Semantic Ver
403
447
 
404
448
  ### Added
405
449
 
406
- - **Dashboard configuration panel redesign**: Category-grouped flags with collapsible sections, live search/filter, documentation links (📖 icons), 15-second auto-refresh, stability color coding, and full-height layout replacing the constrained 480px scroll area.
407
- - **Constitution rule A-7**: Canonical seeds in `seedBootstrap.ts` must contain only generalized, public-safe content ΓÇö no environment-specific or org-specific data.
450
+ - **Dashboard configuration panel redesign**: Category-grouped flags with collapsible sections, live search/filter, documentation links (📖 icons), 15-second auto-refresh, stability color coding, and full-height layout replacing the constrained 480px scroll area.
451
+ - **Constitution rule A-7**: Canonical seeds in `seedBootstrap.ts` must contain only generalized, public-safe content no environment-specific or org-specific data.
408
452
 
409
453
  ### Changed
410
454
 
411
455
  - **Auto-backup default**: `autoBackupEnabled` now defaults to `false` (was `true`). Set `INDEX_SERVER_AUTO_BACKUP=1` to re-enable.
412
- - **Flag registry sorting**: `/api/admin/config` flags are now sorted by category → name for consistent ordering.
456
+ - **Flag registry sorting**: `/api/admin/config` flags are now sorted by category name for consistent ordering.
413
457
  - **Flag metadata**: Each flag now includes a `docAnchor` slug and the response includes `lastRefreshed` timestamp.
414
458
 
415
459
  ## [1.10.0] - 2026-03-02
@@ -420,8 +464,8 @@ The format is based on Keep a Changelog and this project adheres to Semantic Ver
420
464
  - **Embedding cache model awareness**: Embedding cache now stores `modelName` alongside `catalogHash`, automatically invalidating cached embeddings when the semantic model is changed (e.g., switching from `all-MiniLM-L6-v2` to `bge-base-en-v1.5`). Prevents dimension mismatch errors.
421
465
  - **Zod schema for `index_search`**: Added `zInstructionsSearch` to `toolRegistry.zod.ts` with all parameters (`keywords`, `mode`, `limit`, `includeCategories`, `caseSensitive`, `contentType`) matching the JSON Schema definition.
422
466
  - **Documentation**: Added docs index, MCP configuration guide, project PRD, prompt optimization guide, search benchmark results, credential centralization runbook.
423
- - **Benchmark script**: `scripts/benchmark-search.ps1` ΓÇö stress-tests keyword/regex/semantic search modes and generates markdown + Mermaid report.
424
- - **Tools REST routes**: `src/dashboard/server/routes/tools.routes.ts` ΓÇö REST bridge for MCP tool handlers.
467
+ - **Benchmark script**: `scripts/benchmark-search.ps1` stress-tests keyword/regex/semantic search modes and generates markdown + Mermaid report.
468
+ - **Tools REST routes**: `src/dashboard/server/routes/tools.routes.ts` REST bridge for MCP tool handlers.
425
469
 
426
470
  ### Fixed
427
471
 
@@ -436,13 +480,13 @@ The format is based on Keep a Changelog and this project adheres to Semantic Ver
436
480
  ### Added
437
481
 
438
482
  - **Search modes**: `index_search` now supports `mode` parameter with three values:
439
- - `keyword` (default) ΓÇö substring matching with auto-tokenization
440
- - `regex` ΓÇö pattern matching (e.g., `"deploy|release"`, `"Type[Ss]cript"`) with ReDoS protection (200-char limit)
441
- - `semantic` ΓÇö embedding-based cosine similarity search with lazy-loaded HuggingFace model, disk-cached embeddings, and graceful degradation to keyword mode on failure. Requires `INDEX_SERVER_SEMANTIC_ENABLED=1`.
483
+ - `keyword` (default) substring matching with auto-tokenization
484
+ - `regex` pattern matching (e.g., `"deploy|release"`, `"Type[Ss]cript"`) with ReDoS protection (200-char limit)
485
+ - `semantic` embedding-based cosine similarity search with lazy-loaded HuggingFace model, disk-cached embeddings, and graceful degradation to keyword mode on failure. Requires `INDEX_SERVER_SEMANTIC_ENABLED=1`.
442
486
  - **Embedding service**: New `embeddingService.ts` with cosine similarity, disk cache, staleness detection, and lazy model loading (zero startup impact).
443
487
  - **Semantic configuration**: New env vars `INDEX_SERVER_SEMANTIC_ENABLED`, `INDEX_SERVER_SEMANTIC_MODEL`, `INDEX_SERVER_SEMANTIC_CACHE_DIR`, `INDEX_SERVER_EMBEDDING_PATH`, `INDEX_SERVER_SEMANTIC_DEVICE`, `INDEX_SERVER_SEMANTIC_LOCAL_ONLY` via `SemanticConfig` in `runtimeConfig.ts`.
444
- - `INDEX_SERVER_SEMANTIC_DEVICE` ΓÇö Run embeddings on GPU: `cuda` (NVIDIA) or `dml` (DirectML/Windows). Default: `cpu`.
445
- - `INDEX_SERVER_SEMANTIC_LOCAL_ONLY` ΓÇö Block remote model downloads when set to `1`. Model must already be cached.
488
+ - `INDEX_SERVER_SEMANTIC_DEVICE` Run embeddings on GPU: `cuda` (NVIDIA) or `dml` (DirectML/Windows). Default: `cpu`.
489
+ - `INDEX_SERVER_SEMANTIC_LOCAL_ONLY` Block remote model downloads when set to `1`. Model must already be cached.
446
490
  - **Search highlighting**: Match highlighting in both global search results and local instruction list filter using `<mark>` tags with gold background.
447
491
  - **Backup file export/import**: "Backup to File" and "Restore from File" buttons in Maintenance tab with file dialog support.
448
492
  - **Server export/import endpoints**: `GET /api/admin/maintenance/backup/:id/export` and `POST /api/admin/maintenance/backup/import` for backup bundle transfer.
@@ -450,7 +494,7 @@ The format is based on Keep a Changelog and this project adheres to Semantic Ver
450
494
 
451
495
  ### Fixed
452
496
 
453
- - **Global search URL mismatch**: Client was calling `/api/instructions/search` but server route is `/api/index_search` ΓÇö global search always returned "Not found".
497
+ - **Global search URL mismatch**: Client was calling `/api/instructions/search` but server route is `/api/index_search` global search always returned "Not found".
454
498
  - **Cache-busting**: Now hashes all JS + CSS + HTML files (was CSS-only), ensuring JS changes are picked up by browsers.
455
499
  - **Instance badge**: Shows green when count > 0 (was > 1).
456
500
  - **Instance dropdown positioning**: Aligned left instead of centered.
@@ -487,11 +531,11 @@ The format is based on Keep a Changelog and this project adheres to Semantic Ver
487
531
  - **Pre-mutation auto-backup**: When a forced bulk delete exceeds the threshold and `INDEX_SERVER_BACKUP_BEFORE_BULK_DELETE` is enabled (default), all instruction files are snapshotted to `backups/instructions-{timestamp}/` before deletion proceeds. Backup failure aborts the entire operation.
488
532
  - **Dry-run mode**: `index_remove` accepts `dryRun: true` to preview which IDs would be deleted without modifying disk.
489
533
  - **New env vars**: `INDEX_SERVER_MAX_BULK_DELETE` (number, default 5), `INDEX_SERVER_BACKUP_BEFORE_BULK_DELETE` (boolean, default true).
490
- - **Tests**: `bulkDeleteGuard.spec.ts` ΓÇö 6 unit tests covering threshold enforcement, force override, dry-run, and auto-backup behavior.
534
+ - **Tests**: `bulkDeleteGuard.spec.ts` 6 unit tests covering threshold enforcement, force override, dry-run, and auto-backup behavior.
491
535
 
492
536
  ### Security
493
537
 
494
- - Mitigates accidental or automated mass instruction deletion ΓÇö the incident that wiped production catalog is no longer possible without explicit `force` acknowledgement and automatic backup.
538
+ - Mitigates accidental or automated mass instruction deletion the incident that wiped production catalog is no longer possible without explicit `force` acknowledgement and automatic backup.
495
539
 
496
540
  ## [1.8.1] - 2026-02-24
497
541
 
@@ -505,7 +549,7 @@ The format is based on Keep a Changelog and this project adheres to Semantic Ver
505
549
 
506
550
  - **Constitution Q-7**: Schema-contract tests required for dispatcher action additions.
507
551
  - **Constitution Q-8**: Agent-perspective tests required for mutation dispatch actions.
508
- - **Test file**: `dispatcherAddFlatParams.spec.ts` ΓÇö 11 contract + agent-perspective tests covering all dispatch mutation actions.
552
+ - **Test file**: `dispatcherAddFlatParams.spec.ts` 11 contract + agent-perspective tests covering all dispatch mutation actions.
509
553
 
510
554
  ## [1.8.0] - 2026-02-24
511
555
 
@@ -543,26 +587,26 @@ The format is based on Keep a Changelog and this project adheres to Semantic Ver
543
587
  ### Changed
544
588
 
545
589
  - **Schema version bumped to v4**: Instruction schema now accepts `sourceWorkspace` and `createdByAgent` as optional root-level properties. These fields are set by `promote_from_repo` to track provenance of promoted entries. Previously, entries with these fields were rejected by `additionalProperties: false` validation (caused 10 skipped entries in production catalogs).
546
- - **Migration v3→v4**: Automatic no-op migration — fields are optional so no data transforms needed; schemaVersion stamp is updated on load.
590
+ - **Migration v3v4**: Automatic no-op migration fields are optional so no data transforms needed; schemaVersion stamp is updated on load.
547
591
 
548
592
  ## [1.6.7] - 2026-02-16
549
593
 
550
594
  ### Added
551
595
 
552
596
  - **SpecKit bootstrap**: Full spec-driven development scaffolding for the repo.
553
- - `constitution.json` ΓÇö Machine-checkable quality gates (quality, security, architecture, governance articles)
554
- - `.specify/` folder ΓÇö `memory/constitution.md`, `templates/` (spec, plan, tasks), `config/promotion-map.json`, `commands/`
555
- - `.github/copilot-instructions.md` ΓÇö Canonical repo instructions with MCP integration section
556
- - `.github/agents/` ΓÇö 5 SpecKit agent slash commands (constitution, specify, plan, tasks, implement)
557
- - `.github/prompts/` ΓÇö 5 matching reusable prompt files
558
- - `sync-constitution.cjs` ΓÇö Generates derived constitution.md from constitution.json (supports `--check` mode)
559
- - `promotion-map.json` ΓÇö Maps existing docs (ARCHITECTURE, PRD, TOOLS, CONTRIBUTING, specs) for catalog promotion
597
+ - `constitution.json` Machine-checkable quality gates (quality, security, architecture, governance articles)
598
+ - `.specify/` folder `memory/constitution.md`, `templates/` (spec, plan, tasks), `config/promotion-map.json`, `commands/`
599
+ - `.github/copilot-instructions.md` Canonical repo instructions with MCP integration section
600
+ - `.github/agents/` 5 SpecKit agent slash commands (constitution, specify, plan, tasks, implement)
601
+ - `.github/prompts/` 5 matching reusable prompt files
602
+ - `sync-constitution.cjs` Generates derived constitution.md from constitution.json (supports `--check` mode)
603
+ - `promotion-map.json` Maps existing docs (ARCHITECTURE, PRD, TOOLS, CONTRIBUTING, specs) for catalog promotion
560
604
 
561
605
  ## [1.6.6] - 2026-02-16
562
606
 
563
607
  ### Added
564
608
 
565
- - **`promote_from_repo` tool**: New mutation tool that scans a local Git repository and promotes its knowledge content (constitutions, docs, instructions, specs) into the instruction catalog. Supports `.specify/config/promotion-map.json` for explicit source→instruction mappings and automatic `instructions/*.json` discovery. Features SHA-256 content hash dedup, scope filtering, dry-run mode, force re-promote, and custom repoId override. Replaces per-repo promotion logic with a centralized server-side tool.
609
+ - **`promote_from_repo` tool**: New mutation tool that scans a local Git repository and promotes its knowledge content (constitutions, docs, instructions, specs) into the instruction catalog. Supports `.specify/config/promotion-map.json` for explicit sourceinstruction mappings and automatic `instructions/*.json` discovery. Features SHA-256 content hash dedup, scope filtering, dry-run mode, force re-promote, and custom repoId override. Replaces per-repo promotion logic with a centralized server-side tool.
566
610
  - **15 unit tests** for `promote_from_repo` covering promotion-map, instruction file scanning, scope filtering, content hash dedup, force flag, dry-run, repoId override, error handling, and malformed file resilience.
567
611
  - **TOOLS.md** documentation for `promote_from_repo` tool.
568
612
 
@@ -570,7 +614,7 @@ The format is based on Keep a Changelog and this project adheres to Semantic Ver
570
614
 
571
615
  ### Changed
572
616
 
573
- - **Tool name separator**: Renamed all 44 MCP tool names from slash (`/`) to underscore (`_`) format (e.g., `health/check` → `health_check`, `instructions/dispatch` → `index_dispatch`). Underscore naming improves compatibility across MCP clients and avoids path-separator ambiguity.
617
+ - **Tool name separator**: Renamed all 44 MCP tool names from slash (`/`) to underscore (`_`) format (e.g., `health/check` `health_check`, `instructions/dispatch` `index_dispatch`). Underscore naming improves compatibility across MCP clients and avoids path-separator ambiguity.
574
618
  - **Dispatch schema**: Added `listScoped` and `getEnhanced` to the `index_dispatch` action enum so these actions are no longer blocked by schema validation.
575
619
 
576
620
  ### Fixed
@@ -585,7 +629,7 @@ The format is based on Keep a Changelog and this project adheres to Semantic Ver
585
629
 
586
630
  ### Changed (Catalog Configuration)
587
631
 
588
- - **Configurable body max length**: Added `INDEX_SERVER_BODY_MAX_LENGTH` environment variable (default: 20000, range: 1000ΓÇô1000000) to control the maximum body character length for instruction entries. The JSON schema ceiling is 1MB; the runtime config controls effective enforcement.
632
+ - **Configurable body max length**: Added `INDEX_SERVER_BODY_MAX_LENGTH` environment variable (default: 20000, range: 10001000000) to control the maximum body character length for instruction entries. The JSON schema ceiling is 1MB; the runtime config controls effective enforcement.
589
633
  - **Enhanced salvage for missing fields**: Missing `audience` now defaults to `all` (salvage counter: `audienceMissing`), missing `requirement` defaults to `recommended` (counter: `requirementMissing`). Previously, entries without these fields were hard-rejected.
590
634
  - **Body truncation always applies**: Removed the 24K ceiling on body truncation salvage. Bodies exceeding the configured limit are always truncated, regardless of how far over they are.
591
635
  - **Near-limit warning is relative**: The `body:near-limit` soft warning now triggers at 90% of the configured body max length instead of a hardcoded 18K threshold.
@@ -605,8 +649,8 @@ The format is based on Keep a Changelog and this project adheres to Semantic Ver
605
649
  ### Fixed (MCP Protocol Compliance)
606
650
 
607
651
  - **CRITICAL:** Eliminated stdout contamination violating MCP stdio transport specification. Server was writing diagnostic messages to stdout, contaminating the JSON-RPC message stream and causing PowerShell MCP client connection failures.
608
- - Changed `MetricsCollector.ts`: 4 instances of `console.log()` → `console.error()` (storage mode, clear messages)
609
- - Changed `memoryMonitor.ts`: 9 instances of `console.log()` → `console.error()` (monitoring lifecycle, snapshots, utilities)
652
+ - Changed `MetricsCollector.ts`: 4 instances of `console.log()` `console.error()` (storage mode, clear messages)
653
+ - Changed `memoryMonitor.ts`: 9 instances of `console.log()` `console.error()` (monitoring lifecycle, snapshots, utilities)
610
654
  - Fixed `sdkServer.ts`: Corrected literal `\n` escape sequences that broke TypeScript compilation
611
655
  - Impact: stdout now contains ONLY JSON-RPC messages (MCP spec compliant), stderr contains all diagnostic/debug logging
612
656
  - Fixes: PowerShell MCP client timeout issue caused by non-JSON lines in stdout stream
@@ -645,7 +689,7 @@ The format is based on Keep a Changelog and this project adheres to Semantic Ver
645
689
 
646
690
  ### Added (test infrastructure)
647
691
 
648
- - Introduced shared dashboard readiness helper `waitForDashboard.ts` eliminating adΓÇæhoc polling loops across graph-related tests.
692
+ - Introduced shared dashboard readiness helper `waitForDashboard.ts` eliminating adhoc polling loops across graph-related tests.
649
693
 
650
694
  ### Fixed (flaky tests)
651
695
 
@@ -663,9 +707,9 @@ The format is based on Keep a Changelog and this project adheres to Semantic Ver
663
707
 
664
708
  ### Future (1.6.2 follow-up)
665
709
 
666
- - Schedule removal of legacy mutation flag references in help text and admin dashboard after confirming negligible usage (target ≥90% replacement) and possibly introduce `INDEX_SERVER_CONFIG_STRICT` to enforce consolidated variable set.
710
+ - Schedule removal of legacy mutation flag references in help text and admin dashboard after confirming negligible usage (target 90% replacement) and possibly introduce `INDEX_SERVER_CONFIG_STRICT` to enforce consolidated variable set.
667
711
 
668
- ### Configuration Consolidation (Phases 1ΓÇô4)
712
+ ### Configuration Consolidation (Phases 14)
669
713
 
670
714
  - Added unified runtime configuration loader `src/config/runtimeConfig.ts` centralizing parsing & normalization of environment variables.
671
715
  - Introduced consolidated variables: `INDEX_SERVER_TIMING_JSON`, `INDEX_SERVER_TEST_MODE`, `INDEX_SERVER_LOG_LEVEL`, `INDEX_SERVER_MUTATION`, `INDEX_SERVER_TRACE` (token set), with future placeholders (`INDEX_SERVER_BUFFER_RING`).
@@ -673,7 +717,7 @@ The format is based on Keep a Changelog and this project adheres to Semantic Ver
673
717
  - Pilot migration: `manifestEdgeCases.spec.ts` refactored to consume timing via `cfg.timing()` accessor; remaining high-churn tests scheduled for follow-up phases.
674
718
  - Documentation updates: README consolidation section, deployment matrix extended with migration notes, contributing guidelines prohibit new ad-hoc env vars, configuration guide cross-referenced.
675
719
  - Coverage gating integrated with loader (`runtimeConfig.coverage`) maintaining dual-threshold (`COVERAGE_HARD_MIN`, `COVERAGE_TARGET`).
676
- - Established future Phase 5 plan: optional strict mode (`INDEX_SERVER_CONFIG_STRICT=1`) to reject unmapped legacy flags once adoption threshold met (target ≥70% migrated usages).
720
+ - Established future Phase 5 plan: optional strict mode (`INDEX_SERVER_CONFIG_STRICT=1`) to reject unmapped legacy flags once adoption threshold met (target 70% migrated usages).
677
721
 
678
722
 
679
723
  ### Added (dispatcher capabilities & batch)
@@ -682,8 +726,8 @@ The format is based on Keep a Changelog and this project adheres to Semantic Ver
682
726
 
683
727
  - Added `docs/MANIFEST.md` detailing catalog manifest lifecycle, invariants, drift categories, opportunistic materialization, and fastload roadmap.
684
728
  - Updated `README.md` with Manifest & Opportunistic Materialization section; added MANIFEST doc links in primary doc suite lists.
685
- - Updated `PROJECT_PRD.md` to version 1.4.2 including formal Manifest & Materialization requirements (MF1ΓÇôMF7) and ratified schemaΓÇæaided failure contract.
686
- - Updated `ARCHITECTURE.md` (version banner 1.4.1 → context now aligned with opportunistic materialization & manifest helper) – cross-linked manifest semantics.
729
+ - Updated `PROJECT_PRD.md` to version 1.4.2 including formal Manifest & Materialization requirements (MF1MF7) and ratified schemaaided failure contract.
730
+ - Updated `ARCHITECTURE.md` (version banner 1.4.1 context now aligned with opportunistic materialization & manifest helper) cross-linked manifest semantics.
687
731
  - Updated `DOCS-INDEX.md` adding Manifest category; refreshed recent updates section for 1.4.x runtime changes.
688
732
  - Removed deprecated PRD stub files (`docs/PRD.md`, `docs/PROJECT-PRD.md`) to eliminate duplication; canonical remains `docs/PROJECT_PRD.md`.
689
733
  - Ensured CHANGELOG references preserved and future fastload placeholder documented (no runtime effect yet).
@@ -714,28 +758,28 @@ The format is based on Keep a Changelog and this project adheres to Semantic Ver
714
758
 
715
759
  ### Added (manifest observability & helper)
716
760
 
717
- - Centralized manifest update helper `attemptManifestUpdate()` consolidates all postΓÇæmutation catalog manifest writes (future hook point for batching/debounce without changing call sites).
761
+ - Centralized manifest update helper `attemptManifestUpdate()` consolidates all postmutation catalog manifest writes (future hook point for batching/debounce without changing call sites).
718
762
  - Structured manifest write log lines: `[manifest] wrote catalog-manifest.json count=<entryCount> ms=<duration>` emitted only on successful writes.
719
763
  - New counters:
720
- - `manifest:write` ΓÇô incremented on each successful manifest write
721
- - `manifest:writeFailed` ΓÇô incremented when an exception occurs during write
722
- - `manifest:hookError` ΓÇô incremented when update hook invocation throws
764
+ - `manifest:write` incremented on each successful manifest write
765
+ - `manifest:writeFailed` incremented when an exception occurs during write
766
+ - `manifest:hookError` incremented when update hook invocation throws
723
767
  - Environment flag `INDEX_SERVER_MANIFEST_WRITE=0` disables manifest persistence (read-only / diagnostic mode) while allowing normal runtime behavior.
724
768
 
725
769
  ### Fixed (visibility flake)
726
770
 
727
- - Stabilized intermittent add → immediate list/get visibility timing by refining late materialization path and adding targeted retry logic in `addVisibilityInvariant.spec.ts` (single bounded retry, preserves genuine failure signal).
771
+ - Stabilized intermittent add immediate list/get visibility timing by refining late materialization path and adding targeted retry logic in `addVisibilityInvariant.spec.ts` (single bounded retry, preserves genuine failure signal).
728
772
 
729
773
  ### Tests (edge coverage)
730
774
 
731
775
  - New `manifestEdgeCases.spec.ts` validating:
732
776
  - Disabled write mode respects `INDEX_SERVER_MANIFEST_WRITE=0` (no file created/modified)
733
- - Corrupted on-disk manifest autoΓÇærepair after subsequent catalog mutation
777
+ - Corrupted on-disk manifest autorepair after subsequent catalog mutation
734
778
  - Visibility invariant test enhanced with diagnostic trace & retry instrumentation (now consistently green).
735
779
 
736
780
  ### Documentation
737
781
 
738
- - README: Added Manifest Observability section, documented new counters & `INDEX_SERVER_MANIFEST_WRITE` flag plus reserved `INDEX_SERVER_MANIFEST_FASTLOAD` (planned fast load optimization ΓÇô inactive placeholder).
782
+ - README: Added Manifest Observability section, documented new counters & `INDEX_SERVER_MANIFEST_WRITE` flag plus reserved `INDEX_SERVER_MANIFEST_FASTLOAD` (planned fast load optimization inactive placeholder).
739
783
  - CONFIGURATION guide: Added Manifest Configuration section & environment variable table entries.
740
784
  - CHANGELOG: This entry formalizes helper + observability release.
741
785
 
@@ -748,28 +792,28 @@ The format is based on Keep a Changelog and this project adheres to Semantic Ver
748
792
 
749
793
  - No instruction schema or tool interface changes.
750
794
  - Purely additive logging & metrics; safe transparent upgrade for all clients.
751
- - When `INDEX_SERVER_MANIFEST_WRITE=0`, runtime skips writes silently (counter increments suppressed) ΓÇô intended only for diagnostics / perf profiling.
795
+ - When `INDEX_SERVER_MANIFEST_WRITE=0`, runtime skips writes silently (counter increments suppressed) intended only for diagnostics / perf profiling.
752
796
 
753
797
  ### Upgrade Guidance (1.4.0)
754
798
 
755
- - Pull & rebuild ΓÇô no client changes required.
799
+ - Pull & rebuild no client changes required.
756
800
  - To disable manifest file writes for diagnostics: set `INDEX_SERVER_MANIFEST_WRITE=0` (do not use in production if you rely on external manifest consumers).
757
801
  - Monitoring systems may now scrape manifest counters alongside existing metrics buckets.
758
802
 
759
- ### Future (not included ΓÇô 1.4.0 roadmap)
803
+ ### Future (not included 1.4.0 roadmap)
760
804
 
761
- - Planned `INDEX_SERVER_MANIFEST_FASTLOAD` optimization mode (hash/mtime shortΓÇæcircuit) reserved; currently no effect (documented as placeholder only).
805
+ - Planned `INDEX_SERVER_MANIFEST_FASTLOAD` optimization mode (hash/mtime shortcircuit) reserved; currently no effect (documented as placeholder only).
762
806
 
763
807
  ## [1.4.1] - 2025-09-14
764
808
 
765
809
  ### Fixed (dashboard health accuracy)
766
810
 
767
811
  - Resolved persistent false positive "Statistics unavailable" issue: local `statsAvailable` shadowed global flag so health card always injected the warning despite successful stats fetches. Now uses `window.statsAvailable` consistently.
768
- - Restored memory utilization health check (`mem: ok` / fail at ≥90% heap usage) alongside CPU derived check when backend omits explicit entries.
812
+ - Restored memory utilization health check (`mem: ok` / fail at 90% heap usage) alongside CPU derived check when backend omits explicit entries.
769
813
 
770
814
  ### Changed (UI consistency)
771
815
 
772
- - Unified overview card styling with RealΓÇætime Monitoring card via new shared `.stat-row` styles (consistent spacing, typography, separators).
816
+ - Unified overview card styling with Realtime Monitoring card via new shared `.stat-row` styles (consistent spacing, typography, separators).
773
817
  - Added stronger label/value contrast and tabular numeric alignment across System Statistics, System Health, and Performance cards.
774
818
 
775
819
  ### Internal (refactor / cleanup)
@@ -812,13 +856,13 @@ The format is based on Keep a Changelog and this project adheres to Semantic Ver
812
856
  ### Added (schema v3 & governance)
813
857
 
814
858
  - Introduced on-disk instruction schemaVersion `3` with new `primaryCategory` field enforcing a single canonical category reference.
815
- - Automatic migration path (v1→v2→v3) updates existing instruction JSON files in-place; adds `primaryCategory` from first existing category and normalizes category list to include it.
859
+ - Automatic migration path (v1v2v3) updates existing instruction JSON files in-place; adds `primaryCategory` from first existing category and normalizes category list to include it.
816
860
  - Added governance justification file `governance/ALLOW_HASH_CHANGE` documenting approved hash shift from structural canonicalization.
817
861
 
818
862
  ### Changed (migration & normalization)
819
863
 
820
864
  - `migrateInstructionRecord` now injects `primaryCategory` for v2 records and ensures `schemaVersion` bump with descriptive notes.
821
- - Runtime handlers enforce invariant: `primaryCategory Γêê categories[]`; fallback category `uncategorized` only when INDEX_SERVER_REQUIRE_CATEGORY unset.
865
+ - Runtime handlers enforce invariant: `primaryCategory categories[]`; fallback category `uncategorized` only when INDEX_SERVER_REQUIRE_CATEGORY unset.
822
866
  - All committed instructions canonicalized (hash drift resolved) to provide stable CI governance baseline.
823
867
 
824
868
  ### Integrity & Tooling
@@ -834,7 +878,7 @@ The format is based on Keep a Changelog and this project adheres to Semantic Ver
834
878
 
835
879
  ### Documentation (navigation & migration)
836
880
 
837
- - Updated MIGRATION guidance (v2→v3 path) and added docs index + instruction usage plan for navigation.
881
+ - Updated MIGRATION guidance (v2v3 path) and added docs index + instruction usage plan for navigation.
838
882
 
839
883
 
840
884
  ### Changed (test stability)
@@ -1134,9 +1178,9 @@ No action required. Clients benefit from stricter and more predictable error cod
1134
1178
 
1135
1179
  ### Changed (test gating & stability)
1136
1180
 
1137
- - Segregated nondeterministic / adversarial fuzz & stress specs behind `INDEX_SERVER_STRESS_DIAG=1` (handshake flake, mixed workload health starvation repro, multiΓÇæprocess health stress, dispatcher stress/flake, concurrency fuzz).
1181
+ - Segregated nondeterministic / adversarial fuzz & stress specs behind `INDEX_SERVER_STRESS_DIAG=1` (handshake flake, mixed workload health starvation repro, multiprocess health stress, dispatcher stress/flake, concurrency fuzz).
1138
1182
  - Baseline test run (without flag) now deterministic: all core + compliance + governance suites green; stress specs appear as skipped (documented) eliminating prior intermittent CI noise.
1139
- - Added skip pattern helper (`maybeIt`) in gated specs for clear optΓÇæin semantics.
1183
+ - Added skip pattern helper (`maybeIt`) in gated specs for clear optin semantics.
1140
1184
 
1141
1185
  ### Added (tooling & scripts)
1142
1186
 
@@ -1201,7 +1245,7 @@ For routine CI or local verification omit the flag for deterministic results.
1201
1245
  ### Changed (test stability & isolation)
1202
1246
 
1203
1247
  - Refactored feedback test suite:
1204
- - Introduced `feedbackCore.spec.ts` (comprehensive) & `feedbackSimple.spec.ts` (smoke) with perΓÇætest isolated `INDEX_SERVER_FEEDBACK_DIR` directories.
1248
+ - Introduced `feedbackCore.spec.ts` (comprehensive) & `feedbackSimple.spec.ts` (smoke) with pertest isolated `INDEX_SERVER_FEEDBACK_DIR` directories.
1205
1249
  - Converted brittle absolute "empty list" assertions to delta-based assertions; legacy expectations gated with `it.skip(... // SKIP_OK)` for documentation without flakiness.
1206
1250
  - Added deterministic persistence wait loop for filesystem write visibility.
1207
1251
  - Replaced dynamic requires with explicit static imports (avoids MODULE_NOT_FOUND under variant names).
@@ -1226,7 +1270,7 @@ For routine CI or local verification omit the flag for deterministic results.
1226
1270
 
1227
1271
  - Guarded optional `since` parameter access in feedback list & stats handlers (eliminates TS18048 risk under strict mode).
1228
1272
  - Added commit helper tasks for structured documentation and feature commits.
1229
- - All core + contract tests passing (168 passed / 14 skipped ΓÇô skips limited to explicitly gated stress & legacy expectations).
1273
+ - All core + contract tests passing (168 passed / 14 skipped skips limited to explicitly gated stress & legacy expectations).
1230
1274
 
1231
1275
  ### Notes (stabilization)
1232
1276
 
@@ -1243,10 +1287,10 @@ For routine CI or local verification omit the flag for deterministic results.
1243
1287
 
1244
1288
  - Unified runtime diagnostics guard (`[diag] [ISO] [category]`) capturing uncaught exceptions, unhandled rejections, process warnings, and termination signals with optional exit delay (`INDEX_SERVER_FATAL_EXIT_DELAY_MS`).
1245
1289
  - Real backup system with millisecond precision IDs (`backup_YYYYMMDDTHHMMSS_mmm`), manifest generation (instructionCount, schemaVersion) and safety pre-restore snapshot.
1246
- - Admin dashboard backup listing & oneΓÇæclick restore UI (auto refresh + schemaVersion display).
1290
+ - Admin dashboard backup listing & oneclick restore UI (auto refresh + schemaVersion display).
1247
1291
  - WebSocket enhancements: client UUID assignment, connect/disconnect broadcast events, immediate metrics snapshot push, active connection metrics integration.
1248
1292
  - Live synthetic activity per-call trace streaming over WebSocket (`synthetic_trace` messages) with runId, sequence, duration, error, and skipped markers.
1249
- - Synthetic harness expansion to exercise instruction dispatcher CRUD pathways (`add/get/list/query/update/remove`) plus usage tracking; active inΓÇæflight request counter + status endpoint.
1293
+ - Synthetic harness expansion to exercise instruction dispatcher CRUD pathways (`add/get/list/query/update/remove`) plus usage tracking; active inflight request counter + status endpoint.
1250
1294
  - Instruction editor enrichment: diff view, formatting button, diagnostics panel (validity, size, hash, missing fields), template injection, change detection.
1251
1295
  - HTTP metrics instrumentation aggregating all REST requests into pseudo tool bucket `http/request` (opt-out with `INDEX_SERVER_HTTP_METRICS=0`).
1252
1296
  - Performance detailed endpoint `/api/performance/detailed` (requestThroughput, avg, p95 approximation, errorRate, concurrentConnections, activeSyntheticRequests).
@@ -1255,7 +1299,7 @@ For routine CI or local verification omit the flag for deterministic results.
1255
1299
 
1256
1300
  - Added `httpMetrics.spec.ts` validating HTTP aggregation bucket increments.
1257
1301
  - Hardened PowerShell isolation handshake test with BOM stripping, retry initialize, soft-pass degraded mode and extended deadlines to eliminate flakes.
1258
- - Adaptive sampling + concurrency & duration guard in multi-client feedback reproduction test (dynamic ~0.8% sample, clamped 5ΓÇô8, 7s hard wallclock) reducing runtime while preserving coverage rotation.
1302
+ - Adaptive sampling + concurrency & duration guard in multi-client feedback reproduction test (dynamic ~0.8% sample, clamped 58, 7s hard wallclock) reducing runtime while preserving coverage rotation.
1259
1303
  - Fast test script (`scripts/test-fast.mjs`) leak guard ensuring slow specs never bleed into fast subset.
1260
1304
  - Pre-push hook (`scripts/pre-push.ps1`) running slow test suite gating pushes.
1261
1305
 
@@ -1370,13 +1414,13 @@ No client changes required. Enable `INDEX_SERVER_MEMOIZE=1` (and optionally `IND
1370
1414
 
1371
1415
  ### Documentation (lifecycle)
1372
1416
 
1373
- - Added `FEEDBACK-DEFECT-LIFECYCLE.md` formalizing feedback → red test → fix → coverage workflow.
1417
+ - Added `FEEDBACK-DEFECT-LIFECYCLE.md` formalizing feedback red test fix coverage workflow.
1374
1418
  - Pending README & TOOLS doc updates for enriched add response (will be completed in 1.1.0 minor bump).
1375
1419
 
1376
1420
  ### Internal (stability)
1377
1421
 
1378
1422
  - Introduced ambient module declaration for portable client to resolve TS7016 without expanding `tsconfig` include surface.
1379
- - Eliminated intermittent ΓÇ£No test suite foundΓÇ¥ flake in portable CRUD atomic spec via stabilization of file export timing.
1423
+ - Eliminated intermittent No test suite found flake in portable CRUD atomic spec via stabilization of file export timing.
1380
1424
 
1381
1425
  ### Versioning Notes (next minor)
1382
1426
 
@@ -1388,32 +1432,32 @@ No client changes required. Enable `INDEX_SERVER_MEMOIZE=1` (and optionally `IND
1388
1432
 
1389
1433
  ### Added (bootstrap gating & safety)
1390
1434
 
1391
- - Bootstrap confirmation gating flow (`requestBootstrapToken` → `finalizeBootstrapToken`) requiring explicit human confirmation artifact before enabling broad mutation operations.
1392
- - Minimal allowΓÇælisted seed instruction IDs (000 / 001) excluded from recursion and leakage risk metrics to guarantee a safe tool discovery baseline.
1435
+ - Bootstrap confirmation gating flow (`requestBootstrapToken` `finalizeBootstrapToken`) requiring explicit human confirmation artifact before enabling broad mutation operations.
1436
+ - Minimal allowlisted seed instruction IDs (000 / 001) excluded from recursion and leakage risk metrics to guarantee a safe tool discovery baseline.
1393
1437
  - Human confirmation persistence (`bootstrap.confirmed.json`) with token TTL enforcement and rejection reasons (`mutation_blocked`, `token_invalid`, `token_expired`).
1394
1438
 
1395
1439
  ### Added (governance & risk instrumentation)
1396
1440
 
1397
- - Recursion/leakage risk metrics capturing selfΓÇæreferential or cyclic instruction body/category link detection; aggregated risk summary surfaced via governance hash pathways.
1441
+ - Recursion/leakage risk metrics capturing selfreferential or cyclic instruction body/category link detection; aggregated risk summary surfaced via governance hash pathways.
1398
1442
  - Performance baseline tooling (`perf-baseline.mjs`, compare, trend, summary scripts) now integrated with release workflow enabling drift detection on CPU time & RSS.
1399
1443
  - Baseline auto-confirm test helper (`forceBootstrapConfirmForTests`) gated by `INDEX_SERVER_BOOTSTRAP_AUTOCONFIRM` for legacy suite compatibility without weakening production gating semantics.
1400
1444
 
1401
1445
  ### Changed (test infrastructure)
1402
1446
 
1403
1447
  - Global test setup (`setupDistReady.ts`) defaults `INDEX_SERVER_BOOTSTRAP_AUTOCONFIRM=1` unless explicitly disabled, restoring green for historical mutation suites while preserving a dedicated authentic gating spec.
1404
- - `bootstrapGating.spec.ts` isolated via per‑test temporary `INDEX_SERVER_DIR` ensuring real token lifecycle coverage (block → issue token → finalize → unblocked).
1448
+ - `bootstrapGating.spec.ts` isolated via pertest temporary `INDEX_SERVER_DIR` ensuring real token lifecycle coverage (block issue token finalize unblocked).
1405
1449
  - Dispatcher P1 unit test adapted to force confirmation post dynamic import keeping focus on catalog ordering semantics.
1406
1450
 
1407
1451
  ### Governance (baseline change control)
1408
1452
 
1409
- - Added §14.5 BASELINE-CR (noise‑suppression allow‑list) to `INTERNAL-BASELINE.md` covering bootstrap gating, manifest lifecycle & schema validation, governance recursion guard, search/versioning, graph export enriched/mermaid variants, onboarding helper, and visibility invariant spec (early warning only).
1410
- - Updated baseline sentinel and guard allow-list (noise suppression only; minimal invariant suite unchanged per §6 baseline plan).
1453
+ - Added §14.5 BASELINE-CR (noisesuppression allowlist) to `INTERNAL-BASELINE.md` covering bootstrap gating, manifest lifecycle & schema validation, governance recursion guard, search/versioning, graph export enriched/mermaid variants, onboarding helper, and visibility invariant spec (early warning only).
1454
+ - Updated baseline sentinel and guard allow-list (noise suppression only; minimal invariant suite unchanged per §6 baseline plan).
1411
1455
 
1412
1456
  ### Notes (1.5.0)
1413
1457
 
1414
1458
  - Minor release justified by additive safety gating mechanism and new performance & risk instrumentation surfaces; no breaking tool schema changes.
1415
- - Production deployments must perform a oneΓÇætime bootstrap confirmation; tests emulate confirmation automatically unless deliberately disabled.
1416
- - Future hardening roadmap: elevate selected noiseΓÇæsuppression specs (manifest fastload, recursion guard) to minimal invariant status via separate BASELINE-CR once semantics fully stabilized.
1459
+ - Production deployments must perform a onetime bootstrap confirmation; tests emulate confirmation automatically unless deliberately disabled.
1460
+ - Future hardening roadmap: elevate selected noisesuppression specs (manifest fastload, recursion guard) to minimal invariant status via separate BASELINE-CR once semantics fully stabilized.
1417
1461
 
1418
1462
  ### Upgrade Guidance (1.5.0)
1419
1463
 
@@ -1443,3 +1487,15 @@ No client changes required. Enable `INDEX_SERVER_MEMOIZE=1` (and optionally `IND
1443
1487
  ## [1.26.4] - 2026-04-28
1444
1488
 
1445
1489
  ## [1.26.5] - 2026-04-28
1490
+
1491
+ ## [1.26.7] - 2026-04-30
1492
+
1493
+ ### Added
1494
+
1495
+ - fix(wizard): correct Build prompt logic
1496
+
1497
+ ## [1.26.8] - 2026-04-30
1498
+
1499
+ ### Added
1500
+
1501
+ - Test stability + version parity tooling (PR #261)