Test coverage map — release 2026.5.190
This document maps 2026.5.190 changelog items to regression tests. It is maintained for release sign-off, not as a substitute for reading test names in CI.
How to run (Node ≥ 22.16):
cd extensions/memory-hybrid && npm test
CI: Push to main or open a PR — .github/workflows/ci.yml runs typecheck, lint, and tests on Node 22.16 and 24.
Operator smoke (installed OpenClaw):
bash scripts/release-smoke-2026.5.190.sh
Release sign-off checklist
- CI green on Node 22 and 24 (
extensions/memory-hybridtest job) - New regression files pass locally or in Docker (see below)
bash scripts/release-smoke-2026.5.190.shon a staging host with real config (optional but recommended)- Changelog
[2026.5.190]matches shipped behavior
Focused test files added for this release sign-off:
| File | What it guards |
|---|---|
vector-db-semantic-cache-uninitialized.test.ts | Semantic cache no-op when table missing (#1469) |
facts-db.test.ts (store SQLITE_BUSY) | Concurrent store retry (#1506, storeFact path) |
dashboard-server.test.ts (cached Lance size) | Dashboard Lance TOCTOU (#1501) |
run-all-maintenance.test.ts | run-all dry-run + backfill marker idempotency |
maintenance-jsonl-pipeline.test.ts | Malformed JSONL does not break backfill / analyze-feedback |
dream-cycle.test.ts (episodic consolidation idempotent) | Nightly consolidation does not double-process events |
Docker (local Node 20 host):
docker run --rm -v "$PWD:/work" -w /work/extensions/memory-hybrid node:22.16-bookworm-slim \
bash -c "npm ci && npm test"
Summary
| Area | Coverage | Notes |
|---|---|---|
| Similarity-sweep hardening | Strong | Dedicated tests per surface (sensor, backfill, distill, language-keywords, config await, extract paths) |
| Atomic writes | Strong | stage-capture, cmd-selfcorrection-atomic, install-workspace-skill, crystallization / generated-skill validation |
| Vector DB | Strong | Init timeout (#1495), semantic cache uninitialized (#1469), optimize/cache, count timeout |
| CLI JSON contracts | Strong | verify-fix-config-error, register-corrections-config-*, config-view-json |
| Bootstrap / Ollama | Strong | bootstrap-databases-ollama, ollama-llm (localAutoStart, dedupe), embedding-global-inheritance (AbortSignal.timeout) |
| Guards / multi-agent | Strong | session-ref-matches, pre-finalization-guard-*, lifecycle-agent-end-guard |
| Procedures / skills | Strong | procedure-extractor (any-failure-wins), procedure-promotion-policy (staticValidation), procedures-db (enum drift), skills-rescan |
| Dashboard | Strong | Concurrent + cached Lance size (#1501 / #1529) in dashboard-server.test.ts |
| Storage concurrency | Strong | facts-db.test store + storeFact SQLITE_BUSY (#1506) |
| Dream cycle / stewardship | Strong | dream-cycle.test (idempotent second run), run-all-maintenance.test, maintenance-jsonl-pipeline.test |
| Autopilot foundation | Moderate | pending-autopilot-foundation, pending-digest-autopilot*, triage adapter tests |
| Cost optimization (#1319) | Light | Mostly integration / e2e; see COST-OPTIMIZATION-PLAYBOOK.md for manual checks |
Verdict: Release 2026.5.190 is well covered for operator-facing fixes and skill/procedure pipelines. Gaps are mostly integration breadth (full gateway e2e under load), not missing unit tests for the listed fixes.
Fixes — test file index
| Changelog item | Primary test file(s) |
|---|---|
| Sensor sweep JSON / invalid HA entities (#1476, #1512) | sensor-sweep.test.ts |
| Backfill analyze-feedback JSONL (#1472, #1511) | cmd-backfill-analyze-feedback.test.ts, cmd-backfill-jsonl.test.ts |
| Distill JSON parse (#1471) | cmd-distill.test.ts |
| Language-keywords JSON (#1477) | language-keywords.test.ts |
Procedure avoidance_notes (#1470) | procedures-db.test.ts |
Config/features runConfigView await (#1496, #1524) | config-view-await-regression.test.ts |
| Extract missing-await (#1493) | cmd-extract-session-paths.test.ts |
| Stage-capture atomic writes (#1498) | stage-capture.test.ts |
| Self-correction atomic (#1499) | cmd-selfcorrection-atomic.test.ts |
| Install workspace skill atomic (#1500) | install-workspace-skill.test.ts |
| Vector init timeout (#1495) | vector-db-init-timeout.test.ts |
| Semantic cache table missing (#1469) | vector-db-semantic-cache-uninitialized.test.ts |
Verify stderr for --json (#1492, #1520) | verify-fix-config-error.test.ts |
| Corrections config stdout (#1519) | register-corrections-config-cli.test.ts, register-corrections-config-output-sink.test.ts |
| Ollama auto-start / unref (#1480, #1514) | bootstrap-databases-ollama.test.ts, ollama-llm.test.ts |
| Provider-router AbortSignal.timeout | embedding-global-inheritance.test.ts (probeOllamaEndpoint) |
| Pre-finalization multi-agent (#1504, #1486) | pre-finalization-guard-allow.test.ts, session-ref-matches.test.ts |
| SQLITE_BUSY retry (#1506) | facts-db.test.ts |
| Dashboard Lance cache TOCTOU (#1501, #1529) | dashboard-server.test.ts |
| Retrieval breadcrumb failures (#1507) | retrieval-modes.test.ts |
| Alias index closed-state (#1494) | retrieval-aliases-schema.test.ts |
| Procedure enum drift (#1487, #1515) | procedures-db.test.ts |
staticValidation semantics | procedure-promotion-policy.test.ts |
| Any-failure-wins session success | procedure-extractor.test.ts |
run-all backfill marker idempotency | run-all-maintenance.test.ts |
| Malformed JSONL in maintenance inputs | maintenance-jsonl-pipeline.test.ts, cmd-backfill-jsonl.test.ts |
| Dream cycle episodic idempotent re-run | dream-cycle.test.ts (runEpisodicConsolidation) |
Added features — test file index
| Feature area | Primary test file(s) |
|---|---|
| Generated skill validation / safety | generated-skill-validation.test.ts, crystallization.test.ts |
| Skill pipelines / lifecycle | generated-skill-telemetry.test.ts, skills-rescan.test.ts, procedure-skill-generator.test.ts |
| Promotion policy | procedure-promotion-policy.test.ts |
| Crystallization store / proposer | crystallization-store.test.ts, crystallization-proposer.test.ts |
| Evidence hash / legacy | evidence-hash-legacy.test.ts |
| Pending autopilot / digest | pending-autopilot-foundation.test.ts, pending-digest-autopilot*.test.ts |
| Persona / verified-fact triage | persona-proposal-triage.test.ts, verified-fact-triage.test.ts |
| Doctor / user-friendly CLI | user-friendly-cli.test.ts |
| Session observability | session-observability.test.ts |
| Comprehensive e2e | comprehensive-e2e.test.ts, plugin-e2e.test.ts |
When to add more tests
Add focused regression tests when:
- A bug escaped CI because behavior was only covered indirectly.
- A new public CLI contract changes (document in
CLI-REFERENCE.md+ JSON sink tests). - A new failure mode is degraded (return null / stderr) rather than thrown.
Prefer extending an existing *.test.ts beside the module under test before adding one-off e2e unless the bug is lifecycle-wide.