diff --git a/Partner-Core/src/main/java/work/slhaf/partner/module/impression/ImpressionUpdatePlan.kt b/Partner-Core/src/main/java/work/slhaf/partner/module/impression/ImpressionUpdatePlan.kt new file mode 100644 index 00000000..54acb5ea --- /dev/null +++ b/Partner-Core/src/main/java/work/slhaf/partner/module/impression/ImpressionUpdatePlan.kt @@ -0,0 +1,66 @@ +package work.slhaf.partner.module.impression + +/** + * A conservative, auditable plan produced after message rolling. + * + * The updater should treat this model as intent only: validation decides whether + * a step is safe to execute, and the applier performs mutations through + * CognitionCapability / ImpressionCore so indexes stay consistent. + */ +data class ImpressionUpdatePlan @JvmOverloads constructor( + val steps: List, + val status: PlanStatus = PlanStatus.PREPARED, + val reason: String? = null, +) + +enum class PlanStatus { + PREPARED, + CONFIRMED, + REJECTED, +} + +sealed class ImpressionUpdateStep + +data class UpdateExistingStep( + val entityUuid: String, + val updatePatch: UpdatePatch, +) : ImpressionUpdateStep() + + +data class CreateEntityStep( + val subject: String, + val impressions: List = emptyList(), + val features: List = emptyList(), + val aliases: List = emptyList(), + val relations: List = emptyList(), +) : ImpressionUpdateStep() + +sealed class UpdatePatch + +data class ImpressionPatch @JvmOverloads constructor( + val impression: String, + val newImpression: String? = null, + val confidence: Double = 1.0, +) : UpdatePatch() + +data class FeaturePatch @JvmOverloads constructor( + val feature: String, + val newFeature: String? = null, + val confidence: Double = 1.0, +) : UpdatePatch() + +data class AliasPatch @JvmOverloads constructor( + val alias: String, + val deprecated: Boolean = false, +) : UpdatePatch() + +data class SubjectPatch @JvmOverloads constructor( + val subject: String, + val keepOldSubjectAsAlias: Boolean = true, +) : UpdatePatch() + +data class RelationPatch @JvmOverloads constructor( + val target: String, + val relation: String, + val strength: Double = 1.0, +) : UpdatePatch()