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
- func AddShownTokens(known map[string]bool, texts ...string)
- func AllowedEntities(c EvidenceCatalog) []string
- func LowerKnownSet(names ...string) map[string]bool
- func RenderEvidenceCatalog(c EvidenceCatalog) string
- func ScanUnknownEntities(known map[string]bool, texts ...string) []string
- type CatalogExtras
- type EvidenceCatalog
- type EvidenceKind
- type EvidenceRef
Constants ¶
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 ¶
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 ¶
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 ¶
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ı.