I came in to write @QuarkusTest integration tests for the ATT&CK ingestion pipeline. qhorus#438 — the CDI deployment error that had blocked this work for weeks — was closed. Clean path forward, or so it seemed.

The first mvn clean exposed the real situation. The -U flag pulled fresh SNAPSHOT dependencies, and the ledger module had been split from a monolith into casehub-ledger-api, casehub-ledger-jpa-common, and casehub-ledger-core. Every import path changed. JpaLedgerEntry moved from io.casehub.ledger.runtime.model.jpa to io.casehub.ledger.jpa. The trust score repository moved. WorkerDecisionEntry and CaseLedgerEntryRepository were removed entirely — no replacement API visible.

The engine API also changed: CaseInstanceRepository.findByUuid() went from returning CaseInstance to Optional<CaseInstance>. Five files across three packages broke on the same pattern.

We fixed 20 compilation errors across 10 files. The import renames were mechanical. The Optional wrapping was a find-and-replace. The interesting decision was what to do about WorkerDecisionEntry — the class that SocTrustService.getRoutingRationale() and SocAttestationService.processOutcome() depended on is gone from the new ledger API with no obvious replacement. I stubbed both methods with log warnings and filed #62 to track the full restoration once the ledger team documents the new query surface.

With the build green, I tried @QuarkusTest. The Jandex fix from ledger#215 cleared the entity indexing error, but revealed 84 CDI deployment problems — all neocortex RAG config beans (RagConfig, IngestionConfig, CorpusStorageConfig) unresolvable. We added test defaults in application.properties, a Jandex index directive, and @DefaultBean alternatives for CaseContextRetriever and DedupIngestionConfig. That brought it down to 71 — all CurrentPrincipal ambiguity from the platform’s test fixture lacking CDI priority annotations. Filed parent#520.

Each fix revealed the next layer. That’s the nature of CDI wiring in a multi-module Quarkus application — you don’t see the full dependency graph until augmentation runs, and augmentation stops at the first error.

The resilience tests landed as unit tests with InMemoryMindMapStore and InMemoryEmbeddingIngestor. Seven scenarios from the design spec: crash recovery with null root nodes, RAG failure isolation (MindMap survives when the embedding store throws), deleteCorpus failure preventing duplicate ingestion, capability guard for NoOp stores, disabled config, version-stamped re-ingestion, and the error boundary that keeps the app starting even when ingestion throws. All pass. When parent#520 lands, upgrading these to @QuarkusTest is a one-annotation change — the test logic stays identical.