@jagilber-org/index-server 1.26.4 → 1.26.5

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
@@ -31,7 +31,7 @@ The format is based on Keep a Changelog and this project adheres to Semantic Ver
31
31
 
32
32
  - `health_check` now reports audit-log health counters while exposing only sanitized audit persistence error messages.
33
33
 
34
- ### Removed (breaking MCP feedback surface)
34
+ ### Removed (breaking ΓÇö MCP feedback surface)
35
35
 
36
36
  - **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
37
 
@@ -40,15 +40,15 @@ The format is based on Keep a Changelog and this project adheres to Semantic Ver
40
40
  ### Added
41
41
 
42
42
  - `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.
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.
47
47
  - `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.
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.
52
52
  - 62 new embedding-related tests across 8 test files (contract, unit, integration, scenario).
53
53
  - 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
54
  - Architecture docs updated with embedding store abstraction diagram and IEmbeddingStore interface reference.
@@ -57,14 +57,14 @@ The format is based on Keep a Changelog and this project adheres to Semantic Ver
57
57
 
58
58
  - Fixed dual-write stderr that caused duplicate log entries in VS Code Output panel.
59
59
  - 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).
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).
61
61
 
62
62
  ### Changed
63
63
 
64
64
  - 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.
65
+ - Fixed severity misassignment in `promptReviewService.ts` — `logError` → `logWarn`/`logInfo` for non-error messages.
66
66
  - Added embedding stress tests and `/api/embeddings/compute` route tests.
67
- - Fixed `logInfo('')` empty-string calls in `performanceBaseline.ts` replaced with `logInfo('---')` separators.
67
+ - Fixed `logInfo('')` empty-string calls in `performanceBaseline.ts` ΓÇö replaced with `logInfo('---')` separators.
68
68
  - Fixed `factory.ts` formatting defect (multi-statement single line in sqlite case block).
69
69
  - Docker deployment docs now note Alpine/musl limitation for sqlite-vec native binary.
70
70
 
@@ -92,8 +92,8 @@ The format is based on Keep a Changelog and this project adheres to Semantic Ver
92
92
  - Dashboard authentication via `INDEX_SERVER_ADMIN_API_KEY` with Bearer token, login modal, and sessionStorage-based session management.
93
93
  - CRUD stress test scripts (`scripts/stress-test.ps1`) for load testing instruction operations.
94
94
  - `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).
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).
97
97
  - `npm audit` step in build pipeline and `prepack` script.
98
98
  - `ensureLoadedMiddleware` to reduce redundant `ensureLoaded()` calls in dashboard routes.
99
99
  - Comprehensive stress testing documentation (`docs/stress-testing.md`).
@@ -106,7 +106,7 @@ The format is based on Keep a Changelog and this project adheres to Semantic Ver
106
106
  - All instruction handlers now use `IInstructionStore` interface instead of direct disk I/O, enabling pluggable storage backends.
107
107
  - Auto-migration from JSON to SQLite on startup when `INDEX_SERVER_STORAGE_BACKEND=sqlite`.
108
108
  - 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.
109
+ - README replaced with streamlined v2 (216 lines vs 449 original) focused on install → quickstart → copilot integration.
110
110
  - Bootstrapper instruction (000-bootstrapper) rewritten to v3 with search-first workflow and copilot instructions setup.
111
111
  - Stress test parallel mode refactored from `Start-Job` to `ForEach-Object -Parallel` (PS 7+).
112
112
  - `.github/copilot-instructions.md` updated with search-before-add gate and fixed stale tool names.
@@ -119,7 +119,7 @@ The format is based on Keep a Changelog and this project adheres to Semantic Ver
119
119
 
120
120
  ### Deprecated
121
121
 
122
- - `INDEX_SERVER_DISABLE_USAGE_RATE_LIMIT` replaced by `INDEX_SERVER_DISABLE_RATE_LIMIT` which covers all rate limiting.
122
+ - `INDEX_SERVER_DISABLE_USAGE_RATE_LIMIT` ΓÇö replaced by `INDEX_SERVER_DISABLE_RATE_LIMIT` which covers all rate limiting.
123
123
 
124
124
  ### Removed
125
125
 
@@ -163,20 +163,20 @@ The format is based on Keep a Changelog and this project adheres to Semantic Ver
163
163
 
164
164
  ### Changed
165
165
 
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.
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.
168
168
 
169
169
  ### Environment Variables
170
170
 
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`)
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`)
180
180
 
181
181
  ### Fixed
182
182
 
@@ -223,14 +223,14 @@ The format is based on Keep a Changelog and this project adheres to Semantic Ver
223
223
 
224
224
  ### Fixed
225
225
 
226
- - Addressed P1 scan findings path-injection and regex-injection hardening.
226
+ - Addressed P1 scan findings ΓÇö path-injection and regex-injection hardening.
227
227
 
228
228
  ## [1.18.2] - 2026-04-14 (retroactively documented)
229
229
 
230
230
  ### Fixed
231
231
 
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.
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.
234
234
  - Added scan reconciliation report documenting resolved findings.
235
235
 
236
236
  ## [1.18.1] - 2026-04-14 (retroactively documented)
@@ -249,36 +249,36 @@ The format is based on Keep a Changelog and this project adheres to Semantic Ver
249
249
 
250
250
  ### Added
251
251
 
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)
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)
259
259
  - FTS5 search with BM25 ranking (title 10x, body 5x weight)
260
260
  - SQLite backup support in autoBackup (copies .db + WAL/SHM files)
261
261
  - Factory pattern with feature flag: `createStore()` selects backend from config
262
262
  - 115+ storage-specific tests (contract, migration, FTS5, messaging, usage)
263
263
  - Governance hash identical across both backends
264
264
  - **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.
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.
266
266
  - **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
267
  - **Offset/limit pagination** for `index_dispatch` list action.
268
268
 
269
269
  ### Changed
270
270
 
271
- - **Pre-push slow test gate removed** slow tests now run exclusively in CI workflows.
271
+ - **Pre-push slow test gate removed** ΓÇö slow tests now run exclusively in CI workflows.
272
272
  - Security headers added to dashboard script routes.
273
273
  - Large modules split into focused single-responsibility files (CQ-1 compliance).
274
274
  - 66 ESLint unused-variable warnings resolved.
275
275
 
276
- ### Environment Variables (⚠️ SQLite options are experimental)
276
+ ### Environment Variables (⚠️ SQLite options are experimental)
277
277
 
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`)
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`)
282
282
 
283
283
  ## [1.16.1] - 2026-04-01
284
284
 
@@ -403,13 +403,13 @@ The format is based on Keep a Changelog and this project adheres to Semantic Ver
403
403
 
404
404
  ### Added
405
405
 
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.
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.
408
408
 
409
409
  ### Changed
410
410
 
411
411
  - **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.
412
+ - **Flag registry sorting**: `/api/admin/config` flags are now sorted by category → name for consistent ordering.
413
413
  - **Flag metadata**: Each flag now includes a `docAnchor` slug and the response includes `lastRefreshed` timestamp.
414
414
 
415
415
  ## [1.10.0] - 2026-03-02
@@ -420,8 +420,8 @@ The format is based on Keep a Changelog and this project adheres to Semantic Ver
420
420
  - **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
421
  - **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
422
  - **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.
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.
425
425
 
426
426
  ### Fixed
427
427
 
@@ -436,13 +436,13 @@ The format is based on Keep a Changelog and this project adheres to Semantic Ver
436
436
  ### Added
437
437
 
438
438
  - **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`.
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`.
442
442
  - **Embedding service**: New `embeddingService.ts` with cosine similarity, disk cache, staleness detection, and lazy model loading (zero startup impact).
443
443
  - **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.
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.
446
446
  - **Search highlighting**: Match highlighting in both global search results and local instruction list filter using `<mark>` tags with gold background.
447
447
  - **Backup file export/import**: "Backup to File" and "Restore from File" buttons in Maintenance tab with file dialog support.
448
448
  - **Server export/import endpoints**: `GET /api/admin/maintenance/backup/:id/export` and `POST /api/admin/maintenance/backup/import` for backup bundle transfer.
@@ -450,7 +450,7 @@ The format is based on Keep a Changelog and this project adheres to Semantic Ver
450
450
 
451
451
  ### Fixed
452
452
 
453
- - **Global search URL mismatch**: Client was calling `/api/instructions/search` but server route is `/api/index_search` global search always returned "Not found".
453
+ - **Global search URL mismatch**: Client was calling `/api/instructions/search` but server route is `/api/index_search` ΓÇö global search always returned "Not found".
454
454
  - **Cache-busting**: Now hashes all JS + CSS + HTML files (was CSS-only), ensuring JS changes are picked up by browsers.
455
455
  - **Instance badge**: Shows green when count > 0 (was > 1).
456
456
  - **Instance dropdown positioning**: Aligned left instead of centered.
@@ -487,11 +487,11 @@ The format is based on Keep a Changelog and this project adheres to Semantic Ver
487
487
  - **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
488
  - **Dry-run mode**: `index_remove` accepts `dryRun: true` to preview which IDs would be deleted without modifying disk.
489
489
  - **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.
490
+ - **Tests**: `bulkDeleteGuard.spec.ts` ΓÇö 6 unit tests covering threshold enforcement, force override, dry-run, and auto-backup behavior.
491
491
 
492
492
  ### Security
493
493
 
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.
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.
495
495
 
496
496
  ## [1.8.1] - 2026-02-24
497
497
 
@@ -505,7 +505,7 @@ The format is based on Keep a Changelog and this project adheres to Semantic Ver
505
505
 
506
506
  - **Constitution Q-7**: Schema-contract tests required for dispatcher action additions.
507
507
  - **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.
508
+ - **Test file**: `dispatcherAddFlatParams.spec.ts` ΓÇö 11 contract + agent-perspective tests covering all dispatch mutation actions.
509
509
 
510
510
  ## [1.8.0] - 2026-02-24
511
511
 
@@ -543,26 +543,26 @@ The format is based on Keep a Changelog and this project adheres to Semantic Ver
543
543
  ### Changed
544
544
 
545
545
  - **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 v3v4**: Automatic no-op migration fields are optional so no data transforms needed; schemaVersion stamp is updated on load.
546
+ - **Migration v3→v4**: Automatic no-op migration — fields are optional so no data transforms needed; schemaVersion stamp is updated on load.
547
547
 
548
548
  ## [1.6.7] - 2026-02-16
549
549
 
550
550
  ### Added
551
551
 
552
552
  - **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
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
560
560
 
561
561
  ## [1.6.6] - 2026-02-16
562
562
 
563
563
  ### Added
564
564
 
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 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.
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.
566
566
  - **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
567
  - **TOOLS.md** documentation for `promote_from_repo` tool.
568
568
 
@@ -570,7 +570,7 @@ The format is based on Keep a Changelog and this project adheres to Semantic Ver
570
570
 
571
571
  ### Changed
572
572
 
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.
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.
574
574
  - **Dispatch schema**: Added `listScoped` and `getEnhanced` to the `index_dispatch` action enum so these actions are no longer blocked by schema validation.
575
575
 
576
576
  ### Fixed
@@ -585,7 +585,7 @@ The format is based on Keep a Changelog and this project adheres to Semantic Ver
585
585
 
586
586
  ### Changed (Catalog Configuration)
587
587
 
588
- - **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.
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.
589
589
  - **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
590
  - **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
591
  - **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 +605,8 @@ The format is based on Keep a Changelog and this project adheres to Semantic Ver
605
605
  ### Fixed (MCP Protocol Compliance)
606
606
 
607
607
  - **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)
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)
610
610
  - Fixed `sdkServer.ts`: Corrected literal `\n` escape sequences that broke TypeScript compilation
611
611
  - Impact: stdout now contains ONLY JSON-RPC messages (MCP spec compliant), stderr contains all diagnostic/debug logging
612
612
  - Fixes: PowerShell MCP client timeout issue caused by non-JSON lines in stdout stream
@@ -645,7 +645,7 @@ The format is based on Keep a Changelog and this project adheres to Semantic Ver
645
645
 
646
646
  ### Added (test infrastructure)
647
647
 
648
- - Introduced shared dashboard readiness helper `waitForDashboard.ts` eliminating adhoc polling loops across graph-related tests.
648
+ - Introduced shared dashboard readiness helper `waitForDashboard.ts` eliminating adΓÇæhoc polling loops across graph-related tests.
649
649
 
650
650
  ### Fixed (flaky tests)
651
651
 
@@ -663,9 +663,9 @@ The format is based on Keep a Changelog and this project adheres to Semantic Ver
663
663
 
664
664
  ### Future (1.6.2 follow-up)
665
665
 
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.
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.
667
667
 
668
- ### Configuration Consolidation (Phases 14)
668
+ ### Configuration Consolidation (Phases 1ΓÇô4)
669
669
 
670
670
  - Added unified runtime configuration loader `src/config/runtimeConfig.ts` centralizing parsing & normalization of environment variables.
671
671
  - 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 +673,7 @@ The format is based on Keep a Changelog and this project adheres to Semantic Ver
673
673
  - Pilot migration: `manifestEdgeCases.spec.ts` refactored to consume timing via `cfg.timing()` accessor; remaining high-churn tests scheduled for follow-up phases.
674
674
  - Documentation updates: README consolidation section, deployment matrix extended with migration notes, contributing guidelines prohibit new ad-hoc env vars, configuration guide cross-referenced.
675
675
  - 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).
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).
677
677
 
678
678
 
679
679
  ### Added (dispatcher capabilities & batch)
@@ -682,8 +682,8 @@ The format is based on Keep a Changelog and this project adheres to Semantic Ver
682
682
 
683
683
  - Added `docs/MANIFEST.md` detailing catalog manifest lifecycle, invariants, drift categories, opportunistic materialization, and fastload roadmap.
684
684
  - 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 (MF1MF7) and ratified schemaaided failure contract.
686
- - Updated `ARCHITECTURE.md` (version banner 1.4.1 context now aligned with opportunistic materialization & manifest helper) cross-linked manifest semantics.
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.
687
687
  - Updated `DOCS-INDEX.md` adding Manifest category; refreshed recent updates section for 1.4.x runtime changes.
688
688
  - Removed deprecated PRD stub files (`docs/PRD.md`, `docs/PROJECT-PRD.md`) to eliminate duplication; canonical remains `docs/PROJECT_PRD.md`.
689
689
  - Ensured CHANGELOG references preserved and future fastload placeholder documented (no runtime effect yet).
@@ -714,28 +714,28 @@ The format is based on Keep a Changelog and this project adheres to Semantic Ver
714
714
 
715
715
  ### Added (manifest observability & helper)
716
716
 
717
- - Centralized manifest update helper `attemptManifestUpdate()` consolidates all postmutation catalog manifest writes (future hook point for batching/debounce without changing call sites).
717
+ - Centralized manifest update helper `attemptManifestUpdate()` consolidates all postΓÇæmutation catalog manifest writes (future hook point for batching/debounce without changing call sites).
718
718
  - Structured manifest write log lines: `[manifest] wrote catalog-manifest.json count=<entryCount> ms=<duration>` emitted only on successful writes.
719
719
  - 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
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
723
723
  - Environment flag `INDEX_SERVER_MANIFEST_WRITE=0` disables manifest persistence (read-only / diagnostic mode) while allowing normal runtime behavior.
724
724
 
725
725
  ### Fixed (visibility flake)
726
726
 
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).
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).
728
728
 
729
729
  ### Tests (edge coverage)
730
730
 
731
731
  - New `manifestEdgeCases.spec.ts` validating:
732
732
  - Disabled write mode respects `INDEX_SERVER_MANIFEST_WRITE=0` (no file created/modified)
733
- - Corrupted on-disk manifest autorepair after subsequent catalog mutation
733
+ - Corrupted on-disk manifest autoΓÇærepair after subsequent catalog mutation
734
734
  - Visibility invariant test enhanced with diagnostic trace & retry instrumentation (now consistently green).
735
735
 
736
736
  ### Documentation
737
737
 
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).
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).
739
739
  - CONFIGURATION guide: Added Manifest Configuration section & environment variable table entries.
740
740
  - CHANGELOG: This entry formalizes helper + observability release.
741
741
 
@@ -748,28 +748,28 @@ The format is based on Keep a Changelog and this project adheres to Semantic Ver
748
748
 
749
749
  - No instruction schema or tool interface changes.
750
750
  - 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.
751
+ - When `INDEX_SERVER_MANIFEST_WRITE=0`, runtime skips writes silently (counter increments suppressed) ΓÇô intended only for diagnostics / perf profiling.
752
752
 
753
753
  ### Upgrade Guidance (1.4.0)
754
754
 
755
- - Pull & rebuild no client changes required.
755
+ - Pull & rebuild ΓÇô no client changes required.
756
756
  - 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
757
  - Monitoring systems may now scrape manifest counters alongside existing metrics buckets.
758
758
 
759
- ### Future (not included 1.4.0 roadmap)
759
+ ### Future (not included ΓÇô 1.4.0 roadmap)
760
760
 
761
- - Planned `INDEX_SERVER_MANIFEST_FASTLOAD` optimization mode (hash/mtime shortcircuit) reserved; currently no effect (documented as placeholder only).
761
+ - Planned `INDEX_SERVER_MANIFEST_FASTLOAD` optimization mode (hash/mtime shortΓÇæcircuit) reserved; currently no effect (documented as placeholder only).
762
762
 
763
763
  ## [1.4.1] - 2025-09-14
764
764
 
765
765
  ### Fixed (dashboard health accuracy)
766
766
 
767
767
  - 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.
768
+ - Restored memory utilization health check (`mem: ok` / fail at ≥90% heap usage) alongside CPU derived check when backend omits explicit entries.
769
769
 
770
770
  ### Changed (UI consistency)
771
771
 
772
- - Unified overview card styling with Realtime Monitoring card via new shared `.stat-row` styles (consistent spacing, typography, separators).
772
+ - Unified overview card styling with RealΓÇætime Monitoring card via new shared `.stat-row` styles (consistent spacing, typography, separators).
773
773
  - Added stronger label/value contrast and tabular numeric alignment across System Statistics, System Health, and Performance cards.
774
774
 
775
775
  ### Internal (refactor / cleanup)
@@ -812,13 +812,13 @@ The format is based on Keep a Changelog and this project adheres to Semantic Ver
812
812
  ### Added (schema v3 & governance)
813
813
 
814
814
  - Introduced on-disk instruction schemaVersion `3` with new `primaryCategory` field enforcing a single canonical category reference.
815
- - Automatic migration path (v1v2v3) updates existing instruction JSON files in-place; adds `primaryCategory` from first existing category and normalizes category list to include it.
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.
816
816
  - Added governance justification file `governance/ALLOW_HASH_CHANGE` documenting approved hash shift from structural canonicalization.
817
817
 
818
818
  ### Changed (migration & normalization)
819
819
 
820
820
  - `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.
821
+ - Runtime handlers enforce invariant: `primaryCategory Γêê categories[]`; fallback category `uncategorized` only when INDEX_SERVER_REQUIRE_CATEGORY unset.
822
822
  - All committed instructions canonicalized (hash drift resolved) to provide stable CI governance baseline.
823
823
 
824
824
  ### Integrity & Tooling
@@ -834,7 +834,7 @@ The format is based on Keep a Changelog and this project adheres to Semantic Ver
834
834
 
835
835
  ### Documentation (navigation & migration)
836
836
 
837
- - Updated MIGRATION guidance (v2v3 path) and added docs index + instruction usage plan for navigation.
837
+ - Updated MIGRATION guidance (v2→v3 path) and added docs index + instruction usage plan for navigation.
838
838
 
839
839
 
840
840
  ### Changed (test stability)
@@ -1134,9 +1134,9 @@ No action required. Clients benefit from stricter and more predictable error cod
1134
1134
 
1135
1135
  ### Changed (test gating & stability)
1136
1136
 
1137
- - 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).
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).
1138
1138
  - 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 optin semantics.
1139
+ - Added skip pattern helper (`maybeIt`) in gated specs for clear optΓÇæin semantics.
1140
1140
 
1141
1141
  ### Added (tooling & scripts)
1142
1142
 
@@ -1201,7 +1201,7 @@ For routine CI or local verification omit the flag for deterministic results.
1201
1201
  ### Changed (test stability & isolation)
1202
1202
 
1203
1203
  - Refactored feedback test suite:
1204
- - Introduced `feedbackCore.spec.ts` (comprehensive) & `feedbackSimple.spec.ts` (smoke) with pertest isolated `INDEX_SERVER_FEEDBACK_DIR` directories.
1204
+ - Introduced `feedbackCore.spec.ts` (comprehensive) & `feedbackSimple.spec.ts` (smoke) with perΓÇætest isolated `INDEX_SERVER_FEEDBACK_DIR` directories.
1205
1205
  - Converted brittle absolute "empty list" assertions to delta-based assertions; legacy expectations gated with `it.skip(... // SKIP_OK)` for documentation without flakiness.
1206
1206
  - Added deterministic persistence wait loop for filesystem write visibility.
1207
1207
  - Replaced dynamic requires with explicit static imports (avoids MODULE_NOT_FOUND under variant names).
@@ -1226,7 +1226,7 @@ For routine CI or local verification omit the flag for deterministic results.
1226
1226
 
1227
1227
  - Guarded optional `since` parameter access in feedback list & stats handlers (eliminates TS18048 risk under strict mode).
1228
1228
  - 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).
1229
+ - All core + contract tests passing (168 passed / 14 skipped ΓÇô skips limited to explicitly gated stress & legacy expectations).
1230
1230
 
1231
1231
  ### Notes (stabilization)
1232
1232
 
@@ -1243,10 +1243,10 @@ For routine CI or local verification omit the flag for deterministic results.
1243
1243
 
1244
1244
  - 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
1245
  - Real backup system with millisecond precision IDs (`backup_YYYYMMDDTHHMMSS_mmm`), manifest generation (instructionCount, schemaVersion) and safety pre-restore snapshot.
1246
- - Admin dashboard backup listing & oneclick restore UI (auto refresh + schemaVersion display).
1246
+ - Admin dashboard backup listing & oneΓÇæclick restore UI (auto refresh + schemaVersion display).
1247
1247
  - WebSocket enhancements: client UUID assignment, connect/disconnect broadcast events, immediate metrics snapshot push, active connection metrics integration.
1248
1248
  - 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 inflight request counter + status endpoint.
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.
1250
1250
  - Instruction editor enrichment: diff view, formatting button, diagnostics panel (validity, size, hash, missing fields), template injection, change detection.
1251
1251
  - HTTP metrics instrumentation aggregating all REST requests into pseudo tool bucket `http/request` (opt-out with `INDEX_SERVER_HTTP_METRICS=0`).
1252
1252
  - Performance detailed endpoint `/api/performance/detailed` (requestThroughput, avg, p95 approximation, errorRate, concurrentConnections, activeSyntheticRequests).
@@ -1255,7 +1255,7 @@ For routine CI or local verification omit the flag for deterministic results.
1255
1255
 
1256
1256
  - Added `httpMetrics.spec.ts` validating HTTP aggregation bucket increments.
1257
1257
  - 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 58, 7s hard wallclock) reducing runtime while preserving coverage rotation.
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.
1259
1259
  - Fast test script (`scripts/test-fast.mjs`) leak guard ensuring slow specs never bleed into fast subset.
1260
1260
  - Pre-push hook (`scripts/pre-push.ps1`) running slow test suite gating pushes.
1261
1261
 
@@ -1370,13 +1370,13 @@ No client changes required. Enable `INDEX_SERVER_MEMOIZE=1` (and optionally `IND
1370
1370
 
1371
1371
  ### Documentation (lifecycle)
1372
1372
 
1373
- - Added `FEEDBACK-DEFECT-LIFECYCLE.md` formalizing feedback red test fix coverage workflow.
1373
+ - Added `FEEDBACK-DEFECT-LIFECYCLE.md` formalizing feedback → red test → fix → coverage workflow.
1374
1374
  - Pending README & TOOLS doc updates for enriched add response (will be completed in 1.1.0 minor bump).
1375
1375
 
1376
1376
  ### Internal (stability)
1377
1377
 
1378
1378
  - 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.
1379
+ - Eliminated intermittent ΓÇ£No test suite foundΓÇ¥ flake in portable CRUD atomic spec via stabilization of file export timing.
1380
1380
 
1381
1381
  ### Versioning Notes (next minor)
1382
1382
 
@@ -1388,32 +1388,32 @@ No client changes required. Enable `INDEX_SERVER_MEMOIZE=1` (and optionally `IND
1388
1388
 
1389
1389
  ### Added (bootstrap gating & safety)
1390
1390
 
1391
- - Bootstrap confirmation gating flow (`requestBootstrapToken` `finalizeBootstrapToken`) requiring explicit human confirmation artifact before enabling broad mutation operations.
1392
- - Minimal allowlisted seed instruction IDs (000 / 001) excluded from recursion and leakage risk metrics to guarantee a safe tool discovery baseline.
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.
1393
1393
  - Human confirmation persistence (`bootstrap.confirmed.json`) with token TTL enforcement and rejection reasons (`mutation_blocked`, `token_invalid`, `token_expired`).
1394
1394
 
1395
1395
  ### Added (governance & risk instrumentation)
1396
1396
 
1397
- - Recursion/leakage risk metrics capturing selfreferential or cyclic instruction body/category link detection; aggregated risk summary surfaced via governance hash pathways.
1397
+ - Recursion/leakage risk metrics capturing selfΓÇæreferential or cyclic instruction body/category link detection; aggregated risk summary surfaced via governance hash pathways.
1398
1398
  - Performance baseline tooling (`perf-baseline.mjs`, compare, trend, summary scripts) now integrated with release workflow enabling drift detection on CPU time & RSS.
1399
1399
  - Baseline auto-confirm test helper (`forceBootstrapConfirmForTests`) gated by `INDEX_SERVER_BOOTSTRAP_AUTOCONFIRM` for legacy suite compatibility without weakening production gating semantics.
1400
1400
 
1401
1401
  ### Changed (test infrastructure)
1402
1402
 
1403
1403
  - 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 pertest temporary `INDEX_SERVER_DIR` ensuring real token lifecycle coverage (block issue token finalize unblocked).
1404
+ - `bootstrapGating.spec.ts` isolated via per‑test temporary `INDEX_SERVER_DIR` ensuring real token lifecycle coverage (block → issue token → finalize → unblocked).
1405
1405
  - Dispatcher P1 unit test adapted to force confirmation post dynamic import keeping focus on catalog ordering semantics.
1406
1406
 
1407
1407
  ### Governance (baseline change control)
1408
1408
 
1409
- - 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).
1410
- - Updated baseline sentinel and guard allow-list (noise suppression only; minimal invariant suite unchanged per §6 baseline plan).
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).
1411
1411
 
1412
1412
  ### Notes (1.5.0)
1413
1413
 
1414
1414
  - 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 onetime bootstrap confirmation; tests emulate confirmation automatically unless deliberately disabled.
1416
- - Future hardening roadmap: elevate selected noisesuppression specs (manifest fastload, recursion guard) to minimal invariant status via separate BASELINE-CR once semantics fully stabilized.
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.
1417
1417
 
1418
1418
  ### Upgrade Guidance (1.5.0)
1419
1419
 
@@ -1441,3 +1441,5 @@ No client changes required. Enable `INDEX_SERVER_MEMOIZE=1` (and optionally `IND
1441
1441
  ## [1.26.2] - 2026-04-27
1442
1442
 
1443
1443
  ## [1.26.4] - 2026-04-28
1444
+
1445
+ ## [1.26.5] - 2026-04-28
@@ -266,8 +266,11 @@ function applyProfileDefaults(profile) {
266
266
  if (process.env[key] === undefined)
267
267
  process.env[key] = value;
268
268
  };
269
- // All profiles enable dashboard by default
269
+ // All profiles enable dashboard and file logging by default.
270
+ // File logging uses the sentinel value '1' which resolves to logs/mcp-server.log.
271
+ // This ensures logs are always available on disk without requiring mcp.json changes.
270
272
  setDefault('INDEX_SERVER_DASHBOARD', '1');
273
+ setDefault('INDEX_SERVER_LOG_FILE', '1');
271
274
  if (profile === 'enhanced') {
272
275
  setDefault('INDEX_SERVER_SEMANTIC_ENABLED', '1');
273
276
  setDefault('INDEX_SERVER_SEMANTIC_LOCAL_ONLY', '0');
@@ -1,29 +1,29 @@
1
1
  <!DOCTYPE html>
2
2
  <html lang="en">
3
3
  <head>
4
- <meta name="dashboard-build-version" content="1.26.4-9badd8dd">
4
+ <meta name="dashboard-build-version" content="1.26.5-9badd8dd">
5
5
  <meta charset="UTF-8">
6
6
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
7
7
  <title>Index Server Admin</title>
8
- <link rel="stylesheet" href="css/admin.css?v=1.26.4-9badd8dd">
9
- <script defer src="js/admin.utils.js?v=1.26.4-9badd8dd"></script>
10
- <script defer src="js/admin.auth.js?v=1.26.4-9badd8dd"></script>
11
- <script defer src="js/admin.overview.js?v=1.26.4-9badd8dd"></script>
12
- <script defer src="js/admin.sessions.js?v=1.26.4-9badd8dd"></script>
13
- <script defer src="js/admin.monitor.js?v=1.26.4-9badd8dd"></script>
14
- <script defer src="js/admin.graph.js?v=1.26.4-9badd8dd"></script>
8
+ <link rel="stylesheet" href="css/admin.css?v=1.26.5-9badd8dd">
9
+ <script defer src="js/admin.utils.js?v=1.26.5-9badd8dd"></script>
10
+ <script defer src="js/admin.auth.js?v=1.26.5-9badd8dd"></script>
11
+ <script defer src="js/admin.overview.js?v=1.26.5-9badd8dd"></script>
12
+ <script defer src="js/admin.sessions.js?v=1.26.5-9badd8dd"></script>
13
+ <script defer src="js/admin.monitor.js?v=1.26.5-9badd8dd"></script>
14
+ <script defer src="js/admin.graph.js?v=1.26.5-9badd8dd"></script>
15
15
  <script defer src="js/marked.umd.js"></script>
16
- <script defer src="js/admin.instructions.js?v=1.26.4-9badd8dd"></script>
17
- <script defer src="js/admin.logs.js?v=1.26.4-9badd8dd"></script>
18
- <script defer src="js/admin.maintenance.js?v=1.26.4-9badd8dd"></script>
19
- <script defer src="js/admin.config.js?v=1.26.4-9badd8dd"></script>
20
- <script defer src="js/admin.performance.js?v=1.26.4-9badd8dd"></script>
21
- <script defer src="js/admin.instances.js?v=1.26.4-9badd8dd"></script>
22
- <script defer src="js/admin.embeddings.js?v=1.26.4-9badd8dd"></script>
23
- <script defer src="js/admin.messaging.js?v=1.26.4-9badd8dd"></script>
24
- <script defer src="js/admin.sqlite.js?v=1.26.4-9badd8dd"></script>
25
- <script defer src="js/admin.boot.js?v=1.26.4-9badd8dd"></script>
26
- <script defer src="js/admin.feedback.js?v=1.26.4-9badd8dd"></script>
16
+ <script defer src="js/admin.instructions.js?v=1.26.5-9badd8dd"></script>
17
+ <script defer src="js/admin.logs.js?v=1.26.5-9badd8dd"></script>
18
+ <script defer src="js/admin.maintenance.js?v=1.26.5-9badd8dd"></script>
19
+ <script defer src="js/admin.config.js?v=1.26.5-9badd8dd"></script>
20
+ <script defer src="js/admin.performance.js?v=1.26.5-9badd8dd"></script>
21
+ <script defer src="js/admin.instances.js?v=1.26.5-9badd8dd"></script>
22
+ <script defer src="js/admin.embeddings.js?v=1.26.5-9badd8dd"></script>
23
+ <script defer src="js/admin.messaging.js?v=1.26.5-9badd8dd"></script>
24
+ <script defer src="js/admin.sqlite.js?v=1.26.5-9badd8dd"></script>
25
+ <script defer src="js/admin.boot.js?v=1.26.5-9badd8dd"></script>
26
+ <script defer src="js/admin.feedback.js?v=1.26.5-9badd8dd"></script>
27
27
  </head>
28
28
  <body>
29
29
  <div class="admin-container admin-root">
@@ -879,10 +879,10 @@
879
879
  }
880
880
  }
881
881
 
882
- // Graph logic was extracted to js/admin.graph.js?v=1.26.4-9badd8dd
882
+ // Graph logic was extracted to js/admin.graph.js?v=1.26.5-9badd8dd
883
883
  // Functions available globally: reloadGraphMermaid, initGraphScopeDefaults, copyMermaidSource, toggleGraphEdit, applyGraphEdit, cancelGraphEdit, refreshDrillCategories, loadDrillInstructions, clearSelections
884
884
 
885
- <!-- overview functions moved to js/admin.overview.js?v=1.26.4-9badd8dd -->
885
+ <!-- overview functions moved to js/admin.overview.js?v=1.26.5-9badd8dd -->
886
886
 
887
887
  // Lightweight overview-level maintenance display (optional)
888
888
  // Intentionally minimal to avoid blocking overview rendering.
@@ -1067,7 +1067,7 @@
1067
1067
  }
1068
1068
 
1069
1069
  // --- Backup / Restore ---
1070
- // Extracted to js/admin.maintenance.js?v=1.26.4-9badd8dd
1070
+ // Extracted to js/admin.maintenance.js?v=1.26.5-9badd8dd
1071
1071
 
1072
1072
  async function performBackup() {
1073
1073
  try {
@@ -1133,7 +1133,7 @@
1133
1133
  }
1134
1134
 
1135
1135
  async function loadConfiguration() {
1136
- // Primary implementation in js/admin.config.js?v=1.26.4-9badd8dd (loaded via defer).
1136
+ // Primary implementation in js/admin.config.js?v=1.26.5-9badd8dd (loaded via defer).
1137
1137
  // This inline fallback only fires if the external script failed to load.
1138
1138
  if (window.__configExternalLoaded) return;
1139
1139
  try {
@@ -1193,10 +1193,10 @@
1193
1193
  return false;
1194
1194
  }
1195
1195
 
1196
- // Monitoring functions moved to js/admin.monitor.js?v=1.26.4-9badd8dd
1196
+ // Monitoring functions moved to js/admin.monitor.js?v=1.26.5-9badd8dd
1197
1197
 
1198
1198
  // ===== Log Viewer =====
1199
- // Extracted to js/admin.logs.js?v=1.26.4-9badd8dd
1199
+ // Extracted to js/admin.logs.js?v=1.26.5-9badd8dd
1200
1200
 
1201
1201
  // ===== Instruction Management =====
1202
1202
  let instructionEditing = null;
@@ -1693,7 +1693,7 @@
1693
1693
  setInterval(fetchResourceTrends, 10000);
1694
1694
  })();
1695
1695
 
1696
- // Instruction management logic extracted to js/admin.instructions.js?v=1.26.4-9badd8dd
1696
+ // Instruction management logic extracted to js/admin.instructions.js?v=1.26.5-9badd8dd
1697
1697
  // Functions exposed globally: loadInstructions, renderInstructionList, editInstruction, saveInstruction, deleteInstruction, etc.
1698
1698
 
1699
1699
  function startAutoRefresh() {
@@ -26,6 +26,7 @@ const LEVEL_PRIORITY = {
26
26
  */
27
27
  function newCorrelationId() { return crypto_1.default.randomBytes(8).toString('hex'); }
28
28
  let logFileHandle = null;
29
+ let logFilePath;
29
30
  function loggingCfg() {
30
31
  return (0, runtimeConfig_1.getRuntimeConfig)().logging;
31
32
  }
@@ -63,8 +64,19 @@ function shouldEmit(level) {
63
64
  function initializeFileLogging() {
64
65
  const cfg = loggingCfg();
65
66
  const logFile = cfg.file;
66
- if (!logFile || logFileHandle)
67
- return; // Already initialized or not requested
67
+ if (!logFile)
68
+ return;
69
+ // If file handle exists but path changed (e.g., test reconfiguration), close old and reopen
70
+ if (logFileHandle && logFilePath !== logFile) {
71
+ try {
72
+ logFileHandle.end();
73
+ }
74
+ catch { /* ignore */ }
75
+ logFileHandle = null;
76
+ logFilePath = undefined;
77
+ }
78
+ if (logFileHandle)
79
+ return; // Already initialized for this path
68
80
  try {
69
81
  // Ensure log directory exists
70
82
  const logDir = path_1.default.dirname(logFile);
@@ -76,6 +88,7 @@ function initializeFileLogging() {
76
88
  flags: 'a',
77
89
  encoding: 'utf8'
78
90
  });
91
+ logFilePath = logFile;
79
92
  // NDJSON session start record
80
93
  const sessionStart = {
81
94
  ts: new Date().toISOString(),
@@ -153,8 +166,9 @@ function emit(rec) {
153
166
  if (!shouldEmit(rec.level))
154
167
  return;
155
168
  // Initialize file logging on first emit (lazy initialization)
169
+ // or reinitialize if the configured path has changed (e.g., test reconfiguration)
156
170
  const cfg = loggingCfg();
157
- if (!logFileHandle && cfg.file) {
171
+ if (cfg.file && (!logFileHandle || logFilePath !== cfg.file)) {
158
172
  initializeFileLogging();
159
173
  }
160
174
  // Always include pid for multi-process identification
@@ -23,15 +23,18 @@ export declare function registerMcpServer(server: any): void;
23
23
  * Activate the bridge so subsequent log calls are routed via MCP protocol.
24
24
  * Replays any buffered pre-handshake stderr lines through the protocol.
25
25
  * Called from `emitReadyGlobal()` after the handshake completes.
26
+ *
27
+ * No-op when STDERR_BRIDGE_ENABLED is false (default).
26
28
  */
27
29
  export declare function activateMcpLogBridge(): void;
28
30
  /**
29
31
  * Returns true if the bridge is active and logs will be sent via MCP protocol.
32
+ * Always false when STDERR_BRIDGE_ENABLED is false (default).
30
33
  */
31
34
  export declare function isMcpLogBridgeActive(): boolean;
32
35
  /**
33
36
  * Send a log message through the MCP `notifications/message` protocol.
34
- * No-op if the bridge is not yet active.
37
+ * No-op if the bridge is not yet active or not enabled.
35
38
  *
36
39
  * @param level - The index-server log level (TRACE, DEBUG, INFO, WARN, ERROR)
37
40
  * @param data - The log payload (typically the NDJSON string)
@@ -29,10 +29,25 @@ const LEVEL_MAP = {
29
29
  WARN: 'warning',
30
30
  ERROR: 'error',
31
31
  };
32
- // Singleton instance — intercepts stderr immediately on module load.
32
+ // Bridge default: DISABLED.
33
+ //
34
+ // History: enabling-by-default routed all logs through MCP `notifications/message`
35
+ // and suppressed raw stderr. VS Code Insiders does not surface those notifications
36
+ // in any visible output channel, so the net effect for that client was complete
37
+ // log silence (regression first observed after commit 5de6662 / v1.26.4).
38
+ //
39
+ // Default is now off: stderr flows raw, which every MCP-aware client (including
40
+ // VS Code Insiders' `[server stderr]` rendering) handles. Set
41
+ // INDEX_SERVER_ENABLE_STDERR_BRIDGE=1 to opt in to the protocol-level routing
42
+ // (preferred for clients that render `notifications/message` with proper severity).
43
+ //
44
+ // The legacy INDEX_SERVER_DISABLE_STDERR_BRIDGE variable is now a no-op (the
45
+ // new default already matches what setting it did).
46
+ const STDERR_BRIDGE_ENABLED = process.env.INDEX_SERVER_ENABLE_STDERR_BRIDGE === '1';
47
+ // Singleton instance — intercepts stderr only when the bridge is opted in.
33
48
  const _logger = new mcpStdioLogging_1.McpStdioLogger({
34
49
  serverName: 'index-server',
35
- interceptImmediately: process.env.INDEX_SERVER_DISABLE_STDERR_BRIDGE !== '1',
50
+ interceptImmediately: STDERR_BRIDGE_ENABLED,
36
51
  maxBufferSize: 500,
37
52
  });
38
53
  /**
@@ -47,24 +62,31 @@ function registerMcpServer(server) {
47
62
  * Activate the bridge so subsequent log calls are routed via MCP protocol.
48
63
  * Replays any buffered pre-handshake stderr lines through the protocol.
49
64
  * Called from `emitReadyGlobal()` after the handshake completes.
65
+ *
66
+ * No-op when STDERR_BRIDGE_ENABLED is false (default).
50
67
  */
51
68
  function activateMcpLogBridge() {
69
+ if (!STDERR_BRIDGE_ENABLED)
70
+ return;
52
71
  _logger.activate();
53
72
  }
54
73
  /**
55
74
  * Returns true if the bridge is active and logs will be sent via MCP protocol.
75
+ * Always false when STDERR_BRIDGE_ENABLED is false (default).
56
76
  */
57
77
  function isMcpLogBridgeActive() {
58
- return _logger.isActive;
78
+ return STDERR_BRIDGE_ENABLED && _logger.isActive;
59
79
  }
60
80
  /**
61
81
  * Send a log message through the MCP `notifications/message` protocol.
62
- * No-op if the bridge is not yet active.
82
+ * No-op if the bridge is not yet active or not enabled.
63
83
  *
64
84
  * @param level - The index-server log level (TRACE, DEBUG, INFO, WARN, ERROR)
65
85
  * @param data - The log payload (typically the NDJSON string)
66
86
  */
67
87
  function sendMcpLog(level, data) {
88
+ if (!STDERR_BRIDGE_ENABLED)
89
+ return;
68
90
  _logger.log(LEVEL_MAP[level] ?? 'info', data);
69
91
  }
70
92
  /**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jagilber-org/index-server",
3
- "version": "1.26.4",
3
+ "version": "1.26.5",
4
4
  "mcpName": "io.github.jagilber-org/index-server",
5
5
  "description": "MCP instruction indexing server for AI assistant governance — search, CRUD, schema validation, usage tracking, and cross-repo knowledge promotion.",
6
6
  "publishConfig": {
package/server.json CHANGED
@@ -6,12 +6,12 @@
6
6
  "url": "https://github.com/jagilber-org/index-server",
7
7
  "source": "github"
8
8
  },
9
- "version": "1.26.4",
9
+ "version": "1.26.5",
10
10
  "packages": [
11
11
  {
12
12
  "registryType": "npm",
13
13
  "identifier": "@jagilber-org/index-server",
14
- "version": "1.26.4",
14
+ "version": "1.26.5",
15
15
  "transport": {
16
16
  "type": "stdio"
17
17
  }