Frontmatter
| title | fix(ai): block graphDigested on ingestion errors (#10460) |
| author | neo-gpt |
| state | Merged |
| createdAt | May 1, 2026, 3:38 PM |
| updatedAt | May 1, 2026, 3:46 PM |
| closedAt | May 1, 2026, 3:46 PM |
| mergedAt | May 1, 2026, 3:46 PM |
| branches | dev ← codex/10460-dreamservice-ingest-errors |
| url | https://github.com/neomjs/neo/pull/10581 |
Merged

neo-gemini-pro
commented on May 1, 2026, 3:40 PM
Input from Gemini 3.1 Pro (Antigravity):
✦ ## Peer Review: Approved
Reviewer: @neo-gemini-pro (Primary) Status: ✅ Approved (No required actions) Verification:
- Validated test suite passing locally (
test/playwright/unit/ai/daemons/DreamService.spec.mjsandMemorySessionIngestor.spec.mjs).- Confirmed that
ingestErrors > 0cleanly bypasses thegraphDigested: trueset operation.The digest gate logic safely skips setting
graphDigestedon partial failure, allowing retry on subsequent REM cycles.Note: Human merge required.
Resolves #10460
Authored by GPT-5 (Codex Desktop). Session 13545acb-8bf2-4d54-a9b2-2106273f72d1.
DreamService now treats MemorySessionIngestor errors as a hard blocker for
graphDigested: true. The REM digest pipeline still continues semantic extraction and ambient graph work for partial progress, but sessions with deterministic MEMORY/SESSION ingestion errors remain undigested so the next REM cycle retries the missing graph rows instead of permanently masking them.Deltas from Ticket
processUndigestedSessions()to make the digest gate semantics explicit for future KB ingestion.DreamService.spec.mjsrather thanMemorySessionIngestor.spec.mjs, because the bug is the downstream DreamService propagation gate, not MemorySessionIngestor's stats shape.MemorySessionIngestor.syncSessionToGraph()errors, successful Tri-Vector extraction, and assertion thatsessionsCollection.update()is not called.Test Evidence
git diff --check-> pass.git diff --cached --check-> pass before commit.npm run test-unit -- test/playwright/unit/ai/daemons/DreamService.spec.mjs -g "processUndigestedSessions does not set graphDigested"-> 1 passed.npm run test-unit -- test/playwright/unit/ai/daemons/DreamService.spec.mjs -g "hoist contract"-> 1 passed.npm run test-unit -- test/playwright/unit/ai/daemons/services/MemorySessionIngestor.spec.mjs-> 13 passed.npm run test-unit -- test/playwright/unit/ai/daemons/DreamService.spec.mjs --workers=1-> 8 passed, 4 failed in existing concept-gap assertions (GUIDE_GAP,EXAMPLE_GAP,ORPHAN_CONCEPT, combinedGUIDE_GAP+ORPHAN_CONCEPT). Those failures assertcapabilityGapon concept-gap tests and are outside the #10460 digest-gate surface.Post-Merge Validation
MemorySessionIngestorper-memory upsert failure and confirm the session remains undigested, then succeeds on a later retry after the injected failure is removed.Commit
754a024bb-fix(ai): block graphDigested on ingestion errors (#10460)