rca

package
v0.9.1212 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 21, 2026 License: MIT Imports: 6 Imported by: 0

Documentation

Overview

v0.9.559 — paylaşılan varlık-adı tarayıcısı.

Bir LLM yüzeyinin ürettiği SERBEST METİN, şema doğrulamasından geçse bile uydurma bir servis adı taşıyabilir: şema "string" der, içeriğe bakmaz. Enum'la kısıtlanan alanlar (root_cause.entity gibi) güvenlidir; ama özet, nedensellik zinciri ve önerilen aksiyon serbest metindir ve operatör asıl onları okur.

Somut kaçış: model `root_cause.entity` alanına beyaz listeden geçen gerçek bir servis yazar, sonra özette ve remediation.action'da HİÇ var olmayan bir servisi anlatır. Ekranda gerçek görünen bir nedensellik zinciri ve somut bir "şunu yeniden başlat" aksiyonu belirir. Enum kalkanı bunu görmez.

Tarayıcı YENİDEN YAZILMADI: copilot_aianalyze.go'daki postCheckServiceAnalysis bunu 2026'dan beri yapıyor. Buraya taşındı ki iki yüzey aynı kuralı paylaşsın — ikinci bir kopya yazmak, birinin diğerinden sessizce ayrışması demekti (bu oturumda tam bu sınıftan üç hata çıktı: v0.9.552/553/554).

v0.9.559 — RCA kanıt kataloğu: İKİ ayrı kimlik uzayı.

Tasarım: docs/cosre-verdict-design.md §2.

Model, ürettiği her iddiayı bir kanıt kimliğine bağlamak zorunda. Ama kanıtın iki TÜRÜ var ve ikisi aynı işi göremez:

E1..En  bulunmuş sinyaller     → kök neden dayanağı OLABİLİR
N1..Nn  bakılmış, BULUNAMAMIŞ  → yalnız ÇÜRÜTME dayanağı olabilir

Asimetri mantıksal, keyfi değil: "trafik artışı değil, çünkü istek hacmi sabit" geçerli bir çürütmedir; "pod restart döngüsünde, çünkü restart kaydı BULUNAMADI" saçmadır. Aranmış ve bulunamamış olmak, olduğunun kanıtı değildir.

Bu ayrım olmadan kalkan yalnız etkisiz kalmaz, ZARARLI olur: model negatif bir kaydı kanıt diye gösterir, kalkan geçer (kimlik gerçekten katalogdadır), sonra sunucu o katalog metnini iddianın yanına basar ve uydurma DOĞRULANMIŞ görünür. Kalkanın varlığı zararı artırır.

Katalog kurulurken ayrım VERİDEN yapılır (CheckedSignal.Found), modelin beyanından değil.

Index

Constants

View Source
const (
	// ExtrasWindow — kanıt penceresi: ankorun AÇILIŞINI izleyen dilim
	// (correlate.go'nun 600 sn varsayılanıyla aynı; ≥300 sn olduğu için
	// correlations her zaman MV yolunda).
	ExtrasWindow = 10 * time.Minute

	// BubbleUpTimeout — ham-spans kıyası verdict kurulumunu
	// süresiz bekletemez; süre dolarsa aile atlanır.
	BubbleUpTimeout = 8 * time.Second
)

Variables

This section is empty.

Functions

func AddShownTokens

func AddShownTokens(known map[string]bool, texts ...string)

AddShownTokens — modele GÖSTERİLEN bir metindeki servis-biçimli jetonları bilinen kümeye ekler (v0.9.598).

İlke basit ve kalkanın kendi tanımından çıkıyor: kalkan "çıktıda olup GİRDİDE olmayan" adı yakalar. Öyleyse girdide GEÇEN her jeton, tanımı gereği bilinendir — nerede geçtiği (servis adı mı, bir CHANNEL_CODE değeri mi, bir hata mesajının içi mi) fark etmez.

Neden gerekliydi: v0.9.580 snapshot'a iş-boyutu kırılımı (CHANNEL_CODE/FUNCTION_CODE) ve örnek korelasyon kimlikleri basmaya başladı ama bilinen küme güncellenmedi. Model kendisine VERDİĞİMİZ bir değeri alıntıladığında ("internet-banking" gibi tireli-küçük harfe inen her değer) kalkan onu uydurma sanıyordu: halüsinasyon koruması yanlış alarm üretip DOĞRU cevabı şüpheli gösteriyordu.

Bu, kalkanı zayıflatmaz. Aynı tarayıcıyla aynı metinden çıkarılan jetonlar ekleniyor, yani "gösterildi mi" sorusuna tam olarak tarayıcının sorduğu biçimde cevap veriliyor. Ham metni tek anahtar olarak eklemek YETMEZDİ: tarayıcı jeton düzeyinde eşleşiyor ve bir request_id'nin ("8f3c-4a2b") içinden ayrı bir jeton çıkarabiliyor.

func AllowedEntities

func AllowedEntities(c EvidenceCatalog) []string

AllowedEntities — K3 beyaz listesi, sıralı.

Katalogdaki pozitif varlıklar + ankor servisi. Sıralı çünkü şema enum'una gidiyor ve rastgele sıra istek gövdesini gereksiz değiştirirdi (copilot_schemas.go'daki sortedKeys ile aynı gerekçe).

func LowerKnownSet

func LowerKnownSet(names ...string) map[string]bool

LowerKnownSet — bilinen adlardan küçük-harfli küme. Boş değerler atlanır: boş bir anahtar her metni "bilinen" yapmaz ama kümeyi gereksiz kirletir.

func RenderEvidenceCatalog

func RenderEvidenceCatalog(c EvidenceCatalog) string

RenderEvidenceCatalog — kataloğu prompt'a basar.

İki bölüm AYRI başlıklar altında ve negatif bölüm ne için kullanılabileceğini AÇIKÇA söyler. Küçük modelde kuralı uzakta bir yerde bir kez söylemek yetmiyor; kısıtı verinin yanına yazmak gerekiyor.

func ScanUnknownEntities

func ScanUnknownEntities(known map[string]bool, texts ...string) []string

ScanUnknownEntities — verilen metinlerde, bilinen küme DIŞINDA kalan servis-biçimli adları döndürür. Sıra: ilk görülme (deterministik).

`known` anahtarları küçük harfe indirgenmiş olmalı; çağıran LowerKnownSet ile kurar.

Types

type CatalogExtras

type CatalogExtras struct {
	Blast        *chstore.BlastRadius
	Correlations []chstore.ChangedService
	BubbleUp     *chstore.BubbleUpResult
}

CatalogExtras — katalog genişlemesinin girdileri. Sıfır değeri "hiçbiri toplanamadı" demek ve katalog bugünkü hâliyle kurulur.

type EvidenceCatalog

type EvidenceCatalog struct {
	Refs []EvidenceRef `json:"refs"`

	// Entities — katalogdan türeyen varlık beyaz listesi (K3).
	// Burada olan bir ad, modelin uydurmadığı anlamına gelir.
	Entities map[string]bool `json:"-"`
	// contains filtered or unexported fields
}

EvidenceCatalog — bir ankor için kurulmuş tam katalog.

func BuildEvidenceCatalog

func BuildEvidenceCatalog(h *chstore.RootCauseHypothesis) EvidenceCatalog

BuildEvidenceCatalog — hipotezden katalog kurar.

SAF: hiçbir IO yok, tamamen tablo-testlenebilir. Bu bilinçli — kanıt ayrımı bu tasarımın tek en kritik parçası ve test edilemeyen bir yerde durmamalı.

Sıra deterministik: aynı hipotez her çağrıda AYNI kimlikleri üretir. Aksi hâlde bir kimlik iki çağrı arasında başka bir kanıta kayar ve önbelleğe alınmış bir verdict sessizce yanlış kanıta atıf yapar.

func BuildEvidenceCatalogExt

func BuildEvidenceCatalogExt(h *chstore.RootCauseHypothesis, extras CatalogExtras) EvidenceCatalog

BuildEvidenceCatalogExt — taban kataloğu kurar, üç yeni aileyi SONUNA ekler. Taban builder'a dokunulmaz: mevcut E/N kimlikleri bayt-bayt aynı kalır (10 dk cache'li verdict'in kimlik-kararlılık sözleşmesi, rca_evidence.go:89-91) — yeni aileler sayaçları taban kataloğun kaldığı yerden devralır.

func (EvidenceCatalog) Lookup

func (c EvidenceCatalog) Lookup(id string) (EvidenceRef, bool)

lookup — kimlikten kanıt. ok=false ⇒ katalogda YOK (uydurulmuş).

func (EvidenceCatalog) NegativeIDs

func (c EvidenceCatalog) NegativeIDs() []string

func (EvidenceCatalog) PositiveIDs

func (c EvidenceCatalog) PositiveIDs() []string

PositiveIDs / NegativeIDs — prompt'a basılacak kimlik listeleri.

type EvidenceKind

type EvidenceKind string

EvidenceKind — kimlik uzayı.

const (
	Positive EvidenceKind = "E"
	Negative EvidenceKind = "N"
)

type EvidenceRef

type EvidenceRef struct {
	ID   string       `json:"id"`   // E3 / N1
	Kind EvidenceKind `json:"kind"` // E | N
	// Entity — kanıtın AİT OLDUĞU varlık; boş olabilir (deploy gibi
	// servise bağlı olmayan sinyaller). K3 beyaz listesini besler.
	Entity string `json:"entity,omitempty"`
	// Text — operatöre gösterilecek metin. Sunucunun kendi cümlesi;
	// modelin ürettiği hiçbir şey buraya girmez.
	Text string `json:"text"`
}

EvidenceRef — katalogdaki tek kanıt satırı.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL