Documentation
¶
Overview ¶
Package insight — gömülü "insight kartı"nın SUNUCU sözleşmesi (AI Assistant Faz 2.1, v0.9.1129; docs/plans/ai-assistant-design-2026-08-16.md §2.3).
Kartın tek fikri: kanıt DÖRT dik yoldan gelir ve hiçbiri diğerini bekletmez.
SIGNALS deterministik projeksiyon — LLM'siz de doğru, ANINDA LINKS sunucu-üretimi derin linkler — pencereyi TAŞIRLAR CHARTS doğrulanmış chart spec'leri (opsiyonel) PROSE modelin anlatısı — akar, gecikir, HİÇ gelmeyebilir
Ayrım TİPTE yaşıyor çünkü ürün kararı şu: AI kapalı, yapılandırılmamış ya da kotası dolmuş bir kurulumda kart YİNE tam değerli olmalı. Emsal ServiceChartsExplainBody (v0.9.477): anlatım ile yapısal kanıt ayrı yollardan gelir, model metni bozsa bile tablo doğru kalır. Burada aynı ilke tipe kaldırıldı — bir yüzey Signals'ı prose'un İÇİNDEN türetmeye kalkarsa derleyici izin vermiyor.
SUNUCU-ÜRETİMİ LİNKLER — bilinçli sapma. ChartProblemSignal ailesi (explain_service_charts.go:181) linkleri FRONTEND'e bıraktı: "rotalar frontend'in bilgisi". Kart için ters karar verildi, iki nedenle: (1) kart DÖRT yuvada aynı bileşenle çizilecek (exception satırı, problem satırı, log paneli, slow-span), yani rota bilgisi FE'de dörde kopyalanırdı; (2) pencere-taşıma disiplini (pivotHref, serviceHref, logsRangeParam) tam olarak "kopyalandığı için dört kez kırıldı" diye var. Kanıtı üreten yer linki de üretir; FE yalnız Label+Href çizer.
Index ¶
- Constants
- func ExceptionWindow(firstSeenNs, lastSeenNs int64) (fromNs, toNs int64)
- func FmtDurTR(seconds int64) string
- func Kinds() []string
- func KnownKind(k string) bool
- func LogPatternPromptUser(ev LogPatternEvidence) string
- func MetricFamily(metric string) string
- func PatternKQL(service string, tokens []string) string
- func PatternLogWindow(lastSeenNs int64) (fromNs, toNs int64)
- func ProblemPromptUser(ev ProblemEvidence, hypBlock string) string
- func RangeParam(fromNs, toNs int64) string
- func SlowQueryPromptUser(ev SlowQueryEvidence) string
- func StmtParam(hash uint64, system string) string
- type BlastRef
- type CallerRef
- type ChartSpec
- type DeployCandidate
- type DeployRef
- type ExceptionEvidence
- type HypothesisRef
- type Link
- type LogPatternEvidence
- type OpRef
- type PatternServiceRef
- type ProblemEvidence
- type Response
- type Signal
- type SlowQueryEvidence
- type StmtRef
Constants ¶
const ( KindException = "exception" KindProblem = "problem" KindLogPattern = "log-pattern" KindSlowQuery = "slow-query" )
Faz 2.1'in yuvaları: exception grubu (id = fingerprint) ve problem (id = problem id). Log deseni + yavaş sorgu 2.4'te aynı sözleşmeye bindi — o yüzden tür bir ENUM, handler başına ayrı uç değil.
KİMLİK KARARLARI (v0.9.1137, Faz 2.4) — her ikisi de "satırın KENDİ taşıdığı kimlik", türetilmiş bir şey değil:
KindLogPattern — id = küratörlü desenin ADI ("Out of memory").
LogPatternAnomaly'nin id alanı YOK; adı ise detektörün
patterns[] listesinin anahtarı (internal/anomaly/log_patterns.go)
ve susturma parmak izinin orta alanı (FingerprintAnomaly
"log_pattern|<pattern>|<service>"). Yani kimlik olarak ZATEN
kullanılıyor. Drain şablonlarının (log_templates.ID) hash'i AYRI
bir aile: "Desenleri anlat" paneli ikisini birden anlatıyor ama
operatörün TIKLADIĞI satır küratörlü desen — şablon hash'ini
kimlik yapmak, olmayan bir satırı adreslemek olurdu.
Servis kimliğe GİRMEZ: kartın servisi "bu pencerede en çok basan"
servistir, pencereyle DEĞİŞİR — kimliğe koymak aynı deseni iki
pencerede iki farklı kart yapardı.
KindSlowQuery — id = `?stmt=` kodeğinin ta kendisi:
"<stmtHash>[|<dbSystem>]". stmtHash v0.8.375'in ingest-zamanı
parmak izi (pencereler arası KALICI), dbSystem ise katalog
sayfasının kapsamı; ikisi birlikte /slow-queries çekmecesinin
URL kimliği (stmtParam.ts encodeStmtParam) ve detay ucunun
(hash, system) argüman çifti. Üçüncü bir yazılış üretmedik.
const ( SignalDeploy = "deploy" SignalProblem = "problem" SignalOpDelta = "opdelta" SignalBlast = "blast" SignalException = "exception" SignalGeneric = "generic" // v0.9.1137 (Faz 2.4) — iki yeni yuvanın kendi aileleri. Kapalı küme // GENİŞLEDİ, esnetilmedi: FE'nin InsightSignalKind birleşimi bu // listeyle 1:1 (types.ts) ve bugün hiçbiri BOYANMIYOR — küme // gelecekteki ikon dili için var (InsightCard.tsx gerekçesi). SignalLog = "log" SignalDB = "db" )
Sinyal türü, FE'nin ikon/renk seçimi için. Serbest metin DEĞİL: kart dört yuvada aynı görsel dili konuşsun diye kapalı küme.
const ( SevOK = "ok" SevWarn = "warn" SevErr = "err" )
Şiddet — boş DEĞER GEÇERLİ ve anlamlı: "nötr bilgi" (servis adı, operasyon sayısı). ok/warn/err olmayan bir üçüncü renk yok.
const ( ChartRangeDefaultS int64 = 1800 ChartRangeMaxS int64 = 7 * 86400 )
Chart penceresi bandı — normalizeRenderChart ile AYNI (varsayılan 30dk, tavan 7g). Kart spec'i modelden gelmiyor ama bandın tek olması FE'nin "hangi pencere gelebilir" kabulünü tek tutuyor.
Variables ¶
This section is empty.
Functions ¶
func ExceptionWindow ¶
ExceptionWindow — exception grubunun OLAY penceresi.
Grubun tamamı (FirstSeen→LastSeen) haftalar sürebilir; log/trace pivotunu o aralığa açmak hem pahalı hem yanlış soru — operatörün baktığı şey SON oluşum. Kural: [LastSeen-30dk, LastSeen+5dk]; grup bu pencereden GENÇSE alt kenar FirstSeen-5dk olur (yeni grubun run-up'ı pencerede kalsın). Saf; sıfır/ters damgalarda boş (0,0) döner ve pencere isteyen linkler üretilmez.
func FmtDurTR ¶
FmtDurTR — bağıl süre. fmtAgoTR (copilot_guided.go:830) ile BAYT BAYT aynı yazılış: aynı operatör aynı gün sohbet cevabında "38dk", kartta "38 min" görmemeli. İki yazılışın ayrışmasını signals_test.go pinler.
Her birim ayrı dalda (sn/dk/sa/gün) — v0.6.36 birim-karıştırma sınıfının kuralı: değer+birim üreten şablon HER birimi testler.
func Kinds ¶
func Kinds() []string
Kinds — route'un tanıdığı tür listesi. Sıra sabit: /ai yüzey kırılımı ve testler bu listeden türer.
func KnownKind ¶
KnownKind — bilinmeyen tür 404 olur ve LLM'e HİÇ ulaşmaz. Bu, ai_calls yüzey etiketinin sonlu kalmasının da kapısı (aiSurfaceFromPath aynı whitelist'i ikinci kez uygular — ucuz ikinci kapı).
func LogPatternPromptUser ¶ added in v0.9.1137
func LogPatternPromptUser(ev LogPatternEvidence) string
LogPatternPromptUser — TEK desenin kanıt paketi.
Sistem prompt'u SystemPromptLogPatterns (panel anlatıcısının prompt'u) ve bu BİLİNÇLİ: yeni bir sistem prompt'u eklemek prompts.go'nun sicil kapısını (prompt_language_test.go) büyütür ve aynı işi ikinci kez tarif eder. Ama o prompt PANEL paketini bekliyor — "kaç yeni/patlayan desen", "Sürekli Gürültü" bölümü vb. Kart paketinde o bölümlerin kanıtı YOK; prompt'un kendi kuralı ("kanıtı olmayan bölümü tamamen atla") bunu çözüyor, ama tahmine bırakmıyoruz: kapsam kanıt gövdesinde AÇIKÇA söyleniyor.
func MetricFamily ¶
MetricFamily — problemin ihlal ettiği metrik ailesi. Alt dize listesi exemplarKindForMetric (internal/api/rootcause.go:44) ile BİREBİR: aynı problemde örnek trace "yavaş" seçilirken kart linki "hatalı" göstermesin. Dönüş: "error" | "latency" | "other".
func PatternKQL ¶ added in v0.9.1137
PatternKQL — desenin /logs sorgusu.
PARAM DOĞRULAMASI (ölü-param disiplini, v0.9.1130 sınıfı): /logs okuyucusu readLogsParams (frontend/src/lib/logsUrl.ts) YALNIZ service · cluster · q · severity · traceId · spanId · hasTrace · filters · cols okur, pencere de `range`ten. `pattern=` ya da `tokens=` diye bir param YOK — yazsak sessizce düşer ve hedef sayfa FİLTRESİZ açılır.
Servis de `q`ya giriyor, `service=`ye DEĞİL: v0.5.311'de operatör-bildirimli karar ("servis picker'da ön-seçili gelmesin, KQL'e girsin") — kardeş üretici logsLinkForPattern bugün aynen bunu yapıyor. İki üretici aynı çipi çiziyor; ayrışmaları operatörün "aynı link neden farklı" sorusudur.
func PatternLogWindow ¶ added in v0.9.1137
PatternLogWindow — desenin OLAY penceresi: son görülmenin 30dk öncesi → 10dk sonrası. patternLogWindow (streams.tsx, v0.9.862) ile AYNI formül: aynı desen için satırın "logs ↗" çipi ile kartın pivotu farklı pencere açarsa operatör iki farklı cevap görür.
Saf; damga yoksa (0,0) döner ve pencere isteyen linkler üretilmez.
func ProblemPromptUser ¶
func ProblemPromptUser(ev ProblemEvidence, hypBlock string) string
ProblemPromptUser — problem kanıtının prompt gövdesi. hypBlock, anomaly.HypothesisPromptBlockTR çıktısı (boş olabilir): deterministik korelasyon motorunun BİRİNCİL kanıtı, aynen taşınır.
func RangeParam ¶
RangeParam — [fromNs, toNs] → /logs, /traces, /service ve /problems'ın okuduğu `custom:<fromMs>-<toMs>` token'ı. logsRangeParam (frontend/src/lib/logsUrl.ts) ile AYNI sözleşme:
- ns → ms; alt kenar AŞAĞI, üst kenar YUKARI yuvarlanır ki yuvarlama pencereyi DARALTMASIN (kesilen üst kenar en yeni kovayı düşürür);
- decodeRange'in kabul testini birebir aynala: fromMs > 0 ve toMs > fromMs. Reddedeceği bir token'ı ÜRETMEYİZ, boş döner ve çağıran linki atar.
func SlowQueryPromptUser ¶ added in v0.9.1137
func SlowQueryPromptUser(ev SlowQueryEvidence) string
SlowQueryPromptUser — yavaş sorgu sınıfının kanıt paketi.
Etiketler İNGİLİZCE ve bu bilinçli: SystemPromptSlowQuery gövdesi "You receive: the normalized statement, a real sample with literals, the DB engine name, and the aggregate stats" diye SAYIYOR ve bugünkü /api/copilot/explain-slow-query gövdesi de bu etiketlerle yazılıyor. Cevap dili AnswerInTurkish ile sistem tarafında sabit.
Eski gövdeden İKİ FARK, ikisi de kartın lehine:
- "Service:" tek servis yazıyordu (satırın servisi); ifade sınıfı servisler ARASI, o yüzden burada çağıran KIRILIMI var.
- literalli örnek eskiden frontend'den geliyordu; burada MV'nin kendi bucket örneği (anyMerge(sample_stmt_state)), yani kartın gösterdiği sınıfla hash-tutarlı.
func StmtParam ¶ added in v0.9.1137
StmtParam — kanonik `?stmt=` üreticisi.
Sistem adı YALNIZ güvenli karakterlerden oluşuyorsa taşınır; aksi halde DÜŞÜRÜLÜR ve link motorlar arası katlanmış hâle açılır. Gerekçe: FE kodeği ikinci parçayı decodeURIComponent'ten geçiriyor ve bozuk bir %-kaçışı orada ATAR (çekmece hiç açılmaz). Bugün gerçek değerler (postgresql/oracle/mysql/redis/mssql) bu kümenin içinde; dışına çıkan bir değerde DAHA GENİŞ ama açılan bir kapsam, açılmayan bir çekmeceden iyidir (v0.9.655: kırık link, link yokluğundan kötü).
Types ¶
type CallerRef ¶ added in v0.9.1137
CallerRef — ifade sınıfını çağıran bir servis (db_statement_summary_5m MV'sinin servis kırılımı).
type ChartSpec ¶
type ChartSpec struct {
Title string `json:"title"`
Service string `json:"service"`
Operation string `json:"operation,omitempty"`
Agg string `json:"agg"`
RangeS int64 `json:"rangeS"`
}
ChartSpec — render_chart'ın DOĞRULANMIŞ çıktısıyla aynı şekil (chatChartBlock, copilot_chat.go:337 → guidedChartSpec). Aynı şekil olması şart: FE tarafında ```chart``` fence'ini çizen bileşen (CosreChart) bu alan kümesini okuyor, kart ikinci bir çizici istemiyor.
func ExceptionCharts ¶
func ExceptionCharts(ev ExceptionEvidence) []ChartSpec
ExceptionCharts — grubun servisinin hata oranı, olay penceresinde. Tek kart: exception'ın sorusu "hata ne zaman patladı", ve error_rate bunu bir bakışta gösteriyor.
func NewChartSpec ¶
NewChartSpec — spec kurucusu + doğrulayıcı. ok=false ⇒ spec ATILIR (kart chart'sız çizilir); yarım/uydurma bir spec basıp FE'de boş bir panel çizdirmek, hiç chart olmamasından kötü.
Saf — table-testli.
func ProblemCharts ¶
func ProblemCharts(ev ProblemEvidence) []ChartSpec
ProblemCharts — ihlal edilen metriğin AİLESİNE uygun seri. Aile eşlemesi MetricFamily ile tek yerden: kart linki "en yavaş trace" derken chart error_rate çizmesin.
type DeployCandidate ¶
DeployCandidate — grubun başlangıcı çevresinde seçilmiş deploy.
OffsetSec MUTLAK uzaklık (≥0) ve yön AYRI bir bayrak. İşaretle kodlamak cazip ama yanlış: sub-saniye bir "sonra" deploy'u (ns→sn kırpması) 0'a düşer ve işaret 0'da yön TAŞIMAZ. Yön seçimi yapan yer (anomaly.PickDeploysAroundStartRefs) biliyor, tahmine bırakmıyoruz — After=true olan aday KÖK NEDEN OLAMAZ.
func NearestDeployBefore ¶
func NearestDeployBefore(cands []DeployCandidate) (DeployCandidate, bool)
NearestDeployBefore — başlangıçtan ÖNCEKİ (After=false) en YAKIN deploy. Saf; sonrası-adayları eler.
type DeployRef ¶
type DeployRef struct {
Version string
AgeSec int64
HasImpact bool
P99DeltaPct float64
ErrDeltaPP float64
}
DeployRef — problemin yakın deploy'u + (varsa) ölçülmüş etkisi. Impact YALNIZ hipotez yolunda dolar (RecentDeploy.Impact, v0.9.1059); problems listesi enrichment'ı doldurmaz — HasImpact bu ayrımı taşır.
type ExceptionEvidence ¶
type ExceptionEvidence struct {
Fingerprint string
Type string
Service string
State string
Occurrences uint64
Last24 uint64
PeakCount uint64
FirstSeenNs int64
LastSeenNs int64
Deploys []DeployCandidate
TraceID string
// NowNs — bağıl süreleri hesaplayan referans an. Parametre olması
// ŞART: time.Now() okuyan bir projeksiyon test edilemez ve
// "şimdi"yi iki kez okuyup iki farklı yaş basma riski taşır.
NowNs int64
}
ExceptionEvidence — exception grubu kartının deterministik girdisi. Alanların hepsi anomaly.BuildExceptionExplainInput'un ZATEN okuduğu veriden gelir; kart için ikinci bir sorgu YOK (yeniden okumak, modelin gördüğü deploy/stack ile kartın gösterdiğinin ayrışması demekti — exception_context.go'nun kendi gerekçesi).
type HypothesisRef ¶
HypothesisRef — kalıcı kök-neden hipotezinin kart yüzü.
Others = top suspect DIŞINDAKİ toplam aday sayısı. Candidates o kümenin (belki kırpılmış) hâli; ikisi ayrı çünkü "+N" ancak GERÇEK toplamdan türetilirse dürüst olur. Top suspect'i saymayan bir sayı bilerek seçildi: "Diğer adaylar" satırı zaten onu listelemiyor, dahil eden bir toplam satırın kendi "+N"ini bir fazla gösterirdi.
type Link ¶
Link — kartın derin-link çipi. Şekil guidedAnswerLink'in ikizi (copilot_followup.go:185): FE'nin çip şeridi bu şekli çiziyor.
func ExceptionLinks ¶
func ExceptionLinks(ev ExceptionEvidence) []Link
ExceptionLinks — exception kartının çipleri, sıra sabit.
func LogPatternLinks ¶ added in v0.9.1137
func LogPatternLinks(ev LogPatternEvidence) []Link
LogPatternLinks — desen kartının çipleri, sıra sabit.
func ProblemLinks ¶
func ProblemLinks(ev ProblemEvidence) []Link
ProblemLinks — problem kartının çipleri, sıra sabit.
func SlowQueryLinks ¶ added in v0.9.1137
func SlowQueryLinks(ev SlowQueryEvidence) []Link
SlowQueryLinks — yavaş sorgu kartının çipleri, sıra sabit.
PARAM DOĞRULAMASI:
/databases/statement → `stmt` (decodeStmtParam) + `range` (usePageZoomRange → useUrlRange). İfade DETAY SAYFASI; aynı şekli stmtDetailHref (stmtParam.ts) da üretiyor.
⚠ v0.9.1377 — bu satır `/slow-queries` yazıyordu ve o yol App.tsx'te KAYITLI DEĞİL. Kayıtsız yol catch-all'a düşüyor (`path="*"` → <Navigate to="/" replace />), yani kartın "İfade detayı" çipi operatörü ANA SAYFAYA atıyordu — 404 bile değil, sessiz bir yön değişimi. Bu, v0.9.1323'ün BİREBİR aynısı: o sürüm frontend'deki stmtDetailHref'i düzeltti, buradaki ikizini bırakmıştı. Üstelik yukarıdaki şerh "aynı şekli stmtDetailHref de üretiyor" diyerek iki tarafın hizalı olduğunu İDDİA ediyordu; 1323 sonrası bu iddia yanlıştı ve hiçbir şey onu ölçmüyordu. Artık ölçülüyor: TestServerLinkPathsAreRegisteredRoutes.
Hedef ayrıca v0.9.1374'te taşındı (çekmece → tam sayfa), yani tek düzeltme iki kusuru birden kapatıyor.
/databases → `dbsys` + `dbname` (Databases.tsx:80-81) + `range`.
/trace → `id`; pencere OKUMAZ (nokta nesnesi, links.go üst notu).
/database (TEKİL, detay sayfası) BİLİNÇLİ YOK: oradaki kimlik bir ÜÇLÜ (system, instance, dbName) ve bir ifade sınıfının instance'ı yoktur — sınıf motorun bütün instance'larına yayılır. Uydurma bir instance sessizce BOŞ bir detay sayfası açar (v0.9.821'in "etiketi kimlik sanmak" arızası). databasesFilterHref (v0.9.964) bu kararı frontend'de zaten vermiş; sunucu tarafı aynı kararı tekrarlıyor.
dbname da yazılmıyor: gruplama db_name'i KATLIYOR, yani özetten gelen ad temsili olabilir (katalog satırının "+N"i) ve 'default' MV'nin "db.name yoktu" nöbetçisi. Katalogda motor filtresi kalıyor: olabileceğinden dar bir katalog, kendinden emin ama yanlış olandan iyidir.
type LogPatternEvidence ¶ added in v0.9.1137
type LogPatternEvidence struct {
Pattern string
// Kind — "new" | "spike". Kartın rengi buradan: FE'nin desen
// kartındaki rozet dili (streams.tsx: NEW=warning, SPIKE=danger)
// ile AYNI eşleme, yoksa aynı olay iki yüzeyde iki renk olur.
Kind string
CurrentCount uint64
BaselineCount uint64 // pencere-eşdeğerine normalize edilmiş taban
Ratio float64
Service string // pencerede en çok basan servis
Sample string
TopServices []PatternServiceRef
// Tokens — desenin gövde alt dizeleri (küratörlü patterns[] listesi).
// SİNYAL değil, LİNK malzemesi: /logs sorgusu bunlardan kuruluyor
// (PatternKQL). Kanıt yapısında durması bilinçli — linki üreten yer
// kanıtı üreten yerle aynı olsun (v0.9.831'in "iki yerde seçim" tuzağı).
Tokens []string
LastSeenNs int64
// WindowSec — sayımların penceresi. Sinyal olarak BASILIYOR çünkü
// "1.240" tek başına birimsiz bir sayı: hangi pencerede 1.240?
WindowSec int64
NowNs int64
}
LogPatternEvidence — küratörlü log deseni kartının deterministik girdisi. TAMAMI anomaly.DetectLogPatterns'ın ZATEN döndürdüğü alanlardan gelir: kart için ikinci bir ES sorgusu YOK (operatörün duran kısıtı "elastice çok sorgu yükü oluşturma sakın").
ŞİDDET KARIŞIMI (severity mix) BİLİNÇLİ YOK: detektörün okuması (logstore.CountPatterns) severity boyutu döndürmüyor, dolayısıyla karışımı göstermek YENİ bir sorgu şekli isterdi. Olmayan bir kırılımı tahminle doldurmak yerine hiç göstermiyoruz.
type OpRef ¶
OpRef — DeepEvidence'ın en yavaş operasyonu. Bugün HİÇBİR yüzeyde gösterilmiyordu (tasarım §1.6: "hesaplanıp hiç anlatılmayan"), kart onu deterministik satır olarak getiriyor.
type PatternServiceRef ¶ added in v0.9.1137
PatternServiceRef — desenin bir servisteki payı (logstore'un PatternServiceHit projeksiyonu).
type ProblemEvidence ¶
type ProblemEvidence struct {
ID string
Service string
Metric string
Severity string
Priority string
PriorityReason string
Comparator string
Status string
Value float64
Threshold float64
StartedNs int64
ResolvedNs int64 // 0 = açık
FromNs int64 // analiz penceresi (boundAnalysisWindow)
ToNs int64
NowNs int64
Deploy *DeployRef
Hyp *HypothesisRef
Blast *BlastRef
SlowOp *OpRef
}
ProblemEvidence — problem kartının deterministik girdisi.
type Response ¶
type Response struct {
// Prose — modelin anlatısı. Boş olabilir ve bu bir HATA DEĞİL
// (AIOff, kota, model hatası). Kart boş prose'u "anlatım yok"
// diye söyler, sinyalleri yine çizer.
Prose string `json:"prose"`
// Signals / Links — DAİMA dizi, asla null. nil bırakmak JSON'da
// `null` üretir ve FE'de `.map` çöker; v0.9.836'nın (rootcause
// correlations) tam olarak bu sınıfı. Normalize() garanti eder.
Signals []Signal `json:"signals"`
Links []Link `json:"links"`
Charts []ChartSpec `json:"charts,omitempty"`
// ExchangeID — bu CEVABIN kimliği; 👍/👎 bununla
// POST /api/ai/feedback'e gider (v0.8.399 rayı). AI kapalıyken
// BOŞ: oylanacak bir model cevabı yok, ai_calls satırı da yok.
ExchangeID string `json:"exchangeId,omitempty"`
// AIOff — "AI yapılandırılmamış/kapalı" işareti. Kartın prose
// alanını neden boş gördüğünü FE'nin ARIZA sanmaması için AÇIK
// bir bayrak: 503 yerine 200 + bayrak, çünkü cevabın geri kalanı
// (sinyaller, linkler) tamamen geçerli.
AIOff bool `json:"aiOff,omitempty"`
// Truncated — deterministik yarının KIRPILDIĞI işareti (çipler
// tavana takıldı). Dürüstlük zarfının kart-içi hâli: operatör
// "hepsi bu mu" sorusunu sormak zorunda kalmaz.
Truncated bool `json:"truncated,omitempty"`
// Model — anlatıyı üreten model kimliği (copilot.ActiveModel).
// Yalnız Active() iken dolu; baseURL/apiKey ASLA (v0.9.1037 çipi
// ile aynı dar sözleşme).
Model string `json:"model,omitempty"`
// Verdict — v0.9.1207 (Faz 6.3): ÖNCEDEN üretilmiş, kalkanlı RCA
// verdict'inin ham gövdesi (api.RCAVerdict şekli; bu paket şekle
// bilinçli kör — stdlib-only kalır). YALNIZ rootcause-explain
// önbelleğinde hazır bir verdict varsa dolar; insight kartı LLM
// ATEŞLEMEZ (A2 kararı: collapsed pasif, açılış deterministik).
// Deterministik yarının parçası — `signals` çerçevesinde taşınır.
Verdict json.RawMessage `json:"verdict,omitempty"`
}
Response — kartın TAM cevabı. Akan kipte `signals` çerçevesi bunun prose'suz hâlidir, `answer` çerçevesi prose'u getirir; buffered kipte tek gövde olarak döner. TEK tip olması bilinçli: FE iki çerçeveyi aynı okuyucuyla çözer.
func (*Response) Normalize ¶
func (r *Response) Normalize()
Normalize — nil dilimleri boş dilime çevirir. Çerçeve/gövde yazan TEK yer bunu çağırır, çağrı noktalarına dağıtılmaz.
func (Response) WithoutProse ¶
WithoutProse — `signals` çerçevesinin gövdesi: aynı tip, prose boş. Değer kopyası döner (çağıran Response'u sonra prose ile doldurmaya devam eder).
type Signal ¶
type Signal struct {
Kind string `json:"kind"`
Label string `json:"label"`
Value string `json:"value"`
Severity string `json:"severity,omitempty"`
}
Signal — kartın deterministik satırı. Value bir DİZE çünkü kart onu olduğu gibi çizer; birim/biçim kararı burada, sunucuda verilir.
MUTLAK SAAT YOK. Value içine "16.08 09:11" basmak yasak: sunucu UTC basar, sayfanın kalanı tarayıcı saatini basar (fmtClock/fmtDateTime, 24 saat konvansiyonu v0.9.879) ve iki damga yan yana ÇELİŞİR. Zaman bilgisi ya bağıl gösterilir ("38dk önce") ya da Link'in penceresine biner (custom:<ms>-<ms> — birim belirsizliği olmayan tek yol).
func ExceptionSignals ¶
func ExceptionSignals(ev ExceptionEvidence) (out []Signal, truncated bool)
ExceptionSignals — exception grubunun deterministik satırları. Sıra SABİT (kart her açılışta aynı satırları aynı yerde gösterir). truncated her zaman false: bu projeksiyonda liste-şekilli sinyal yok (deploy adaylarından yalnız en yakın ÖNCE olanı bir sinyal olur ve bu kırpma değil, seçim — bkz. aşağıdaki gerekçe).
func LogPatternSignals ¶ added in v0.9.1137
func LogPatternSignals(ev LogPatternEvidence) (out []Signal, truncated bool)
LogPatternSignals — desenin deterministik satırları, sıra sabit.
func ProblemSignals ¶
func ProblemSignals(ev ProblemEvidence) (out []Signal, truncated bool)
ProblemSignals — problemin deterministik satırları, sıra sabit. truncated = liste-şekilli sinyallerden biri tavana takıldı.
func SlowQuerySignals ¶ added in v0.9.1137
func SlowQuerySignals(ev SlowQueryEvidence) (out []Signal, truncated bool)
SlowQuerySignals — yavaş sorgunun deterministik satırları, sıra sabit.
type SlowQueryEvidence ¶ added in v0.9.1137
type SlowQueryEvidence struct {
// StmtParam — `?stmt=` kodeği ("<hash>[|<system>]"); linkler bunu
// AYNEN taşır ki kart ile çekmece AYNI sınıfı açsın.
StmtParam string
Statement string // '?'-normalize görünüm formu
Sample string // literalli gerçek örnek (yalnız prompt'a girer)
DBSystem string
DBName string
Calls uint64
Errors uint64
TotalMs float64
AvgMs float64
P95Ms float64
P99Ms float64
MaxMs float64
Callers []CallerRef
// CallersCapped — çağıran okuması TAVANA dayandı (okuma limiti).
// Ayrı bir bayrak çünkü kırpma İKİ yerde oluyor: okuma limitinde ve
// gösterim tavanında; ikisini tek sayıya karıştırmak "+N"i yalan yapar.
CallersCapped bool
SlowTraceID string
ErrorTraceID string
FromNs, ToNs int64
NowNs int64
}
SlowQueryEvidence — yavaş sorgu sınıfı kartının deterministik girdisi. Kaynak: db_statement_summary_5m MV'si (özet + çağıran kırılımı) + MV-gömülü exemplar (v0.9.1097). HAM spans taraması YOK.
type StmtRef ¶ added in v0.9.1137
type StmtRef struct {
// Hash — ayrıştırılmış kimlik.
Hash uint64
// System — db_system kapsamı; "" = motorlar arası katlanmış
// (katalogun varsayılanı).
System string
// Param — kanonik `?stmt=` değeri (linkler bunu taşır). ESCAPE
// EDİLMEZ: href() url.Values ile kodlar, iki kez kodlamak '|'yi
// %257C yapar ve FE kodeği onu tanımaz.
Param string
}
stmtref.go — `slow-query` kartının kimlik kodeği (v0.9.1137, Faz 2.4). Saf, tablo-testli.
Kimlik ZATEN var ve ÜÇ yerde aynı: /slow-queries çekmecesinin `?stmt=` paramı (frontend/src/pages/slowqueries/stmtParam.ts), /api/databases/statements/detail'in (hash, system) argüman çifti ve v0.8.375'in kalıcı stmt_hash'i. Kart DÖRDÜNCÜ bir yazılış üretmiyor, aynı dizeyi okuyor:
"<stmtHash>[|<dbSystem>]"
Neden hash bir DİZE olarak taşınıyor: uint64 JSON'da 2^53 sonrası sessizce hassasiyet kaybeder (SlowQueryRow.stmtHash sözleşmesi). Bu yüzden tel üstünde ondalık dize, sunucuda ParseUint.
KABUL TESTİ decodeStmtParam ile BİREBİR aynı olmalı: FE'nin reddettiği bir dizeyi sunucunun kabul etmesi (ya da tersi) "link çalışıyor ama çekmece açılmıyor" sınıfı üretir. Reddedilenler:
- rakam-dışı ya da 20 haneden uzun hash,
- "0" (MV'nin "ifade yok" nöbetçisi — hiçbir sınıfı adreslemez),
- ikiden fazla parça,
- ikinci parça VAR ama boş,
- bozuk %-kaçışı.
func ParseStmtRef ¶ added in v0.9.1137
ParseStmtRef — id → StmtRef. ok=false ⇒ 400 (LLM'e hiç gitmez).