M-4: Memory.searchFacts typed degraded result + memoryVectorAvailable flag (R-011) #118

Open
opened 2026-05-12 19:37:12 +00:00 by KofTwentyTwo · 0 comments
KofTwentyTwo commented 2026-05-12 19:37:12 +00:00 (Migrated from github.com)

Goal

Memory.searchFacts returns typed Result<MemoryHits, MemoryError>. MemoryError.vectorIndexUnavailable triggerable via harness gate. getSelfState.memoryVectorAvailable reflects boot-time flag (R-011).

Scope

  • Typed Result<MemoryHits, MemoryError> return
  • MemoryError.vectorIndexUnavailable for degraded mode
  • Harness can inject this via errorInjector (G-005)
  • getSelfState.memoryVectorAvailable set at boot based on vec0.dylib load result

Files

  • packages/JarvisAPI/Sources/JarvisAPI/Surfaces/Memory+Adapter.swift
  • packages/Memory/Sources/Memory/MemoryStore.swift — dylib load detection
  • Boot path in JarvisHost — set memoryVectorAvailable flag

Acceptance

  • searchFacts returns .success(hits) when vec0 loaded
  • searchFacts returns .failure(.vectorIndexUnavailable) when not loaded
  • FTS-only path testable with StubEmbedder
  • getSelfState.memoryVectorAvailable asserted at boot

Test

S-MEM-006 (degraded mode) — harness injects unavailable; client receives typed failure.

Parent epic

#8

Source

.planning/architecture/JARVIS-API-MIGRATION-PLAN.md §2.5 (M-4.4)
.planning/architecture/REVIEW-MIGRATION-RISK.md R-011

## Goal Memory.searchFacts returns typed Result<MemoryHits, MemoryError>. MemoryError.vectorIndexUnavailable triggerable via harness gate. getSelfState.memoryVectorAvailable reflects boot-time flag (R-011). ## Scope - Typed `Result<MemoryHits, MemoryError>` return - `MemoryError.vectorIndexUnavailable` for degraded mode - Harness can inject this via `errorInjector` (G-005) - `getSelfState.memoryVectorAvailable` set at boot based on `vec0.dylib` load result ## Files - `packages/JarvisAPI/Sources/JarvisAPI/Surfaces/Memory+Adapter.swift` - `packages/Memory/Sources/Memory/MemoryStore.swift` — dylib load detection - Boot path in `JarvisHost` — set `memoryVectorAvailable` flag ## Acceptance - [ ] `searchFacts` returns `.success(hits)` when vec0 loaded - [ ] `searchFacts` returns `.failure(.vectorIndexUnavailable)` when not loaded - [ ] FTS-only path testable with `StubEmbedder` - [ ] `getSelfState.memoryVectorAvailable` asserted at boot ## Test `S-MEM-006` (degraded mode) — harness injects unavailable; client receives typed failure. ## Parent epic #8 ## Source `.planning/architecture/JARVIS-API-MIGRATION-PLAN.md` §2.5 (M-4.4) `.planning/architecture/REVIEW-MIGRATION-RISK.md` R-011
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: KofTwentyTwo/Jarvis#118