feat(cas): content-addressed artifact store (steps 1–8)
New core:artifacts-store interface + infrastructure/artifacts-cas implementation: segment files + SQLite index, Blake3 hashing, group-commit fsync via flushBefore, recovery tail-scan, manual compactor, and oldest-first disk-cap evictor. Inference events now carry promptArtifactId / responseArtifactId; orchestrators put bytes before emitting. SqliteEventStore wraps its txn in artifactStore.flushBefore so segment data is fsynced before the event commit, making the crash window non-corrupting (TailScanner re-indexes orphan tail records on reopen). Compactor and evictor are mutually exclusive via maintenanceMutex. Step 9 (cloud sync) deferred to a later epic. See docs/reviews/2026-05-18-cas-steps-1-8-review.md for the final review.
This commit is contained in:
@@ -0,0 +1,9 @@
|
||||
plugins {
|
||||
id 'java-library'
|
||||
id 'org.jetbrains.kotlin.jvm'
|
||||
id 'org.jetbrains.kotlin.plugin.serialization'
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation(project(":core:events"))
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
package com.correx.core.artifactstore
|
||||
|
||||
import com.correx.core.events.types.ArtifactId
|
||||
|
||||
interface ArtifactStore {
|
||||
suspend fun put(bytes: ByteArray): ArtifactId
|
||||
suspend fun get(id: ArtifactId): ByteArray?
|
||||
suspend fun flushBefore(commit: suspend () -> Unit)
|
||||
}
|
||||
Reference in New Issue
Block a user