From c1c2110322c690db93afe1623b78b653d7a02445 Mon Sep 17 00:00:00 2001 From: Mikhail Date: Sat, 29 Aug 2026 22:43:59 +0300 Subject: [PATCH] preserve governed cognitive head across discovery refresh --- adapters/postgres/capability_repository.go | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/adapters/postgres/capability_repository.go b/adapters/postgres/capability_repository.go index 7568a80..bf5bca4 100644 --- a/adapters/postgres/capability_repository.go +++ b/adapters/postgres/capability_repository.go @@ -570,7 +570,10 @@ func (r *CapabilityRepository) SaveCognitiveDiscovery(ctx context.Context, value } // Discovery may advance a head, but must never roll back a governed // CANARY/ACTIVE revision to an older discovered snapshot after restart. - _, err = tx.Exec(ctx, `INSERT INTO capability.cognitive_binding_revision_heads (binding_id,revision) VALUES ($1,$2) ON CONFLICT (binding_id) DO UPDATE SET revision=EXCLUDED.revision,updated_at=CURRENT_TIMESTAMP WHERE capability.cognitive_binding_revision_heads.revision < EXCLUDED.revision`, binding.ID, binding.Revision) + // Discovery may advance an inactive head even when its deterministic + // revision number is lower, but it must never overwrite a governed canary + // or active head during restart/startup refresh. + _, err = tx.Exec(ctx, `INSERT INTO capability.cognitive_binding_revision_heads (binding_id,revision) VALUES ($1,$2) ON CONFLICT (binding_id) DO UPDATE SET revision=EXCLUDED.revision,updated_at=CURRENT_TIMESTAMP WHERE NOT EXISTS (SELECT 1 FROM capability.cognitive_bindings current_binding WHERE current_binding.binding_id=capability.cognitive_binding_revision_heads.binding_id AND current_binding.revision=capability.cognitive_binding_revision_heads.revision AND current_binding.activation IN ('CANARY','ACTIVE'))`, binding.ID, binding.Revision) if err != nil { return err }