Det vi måler — Codebase Assurance Index
Codebase Assurance Index (CAI) er én reproducerbar 0–100-score for en hel C#/.NET-kodebase. Den ruller ti linser sammen — de fleste dimensioner måles af deterministiske værktøjer, nogle få får en rådgivende, tolerancebåndet LLM-vurdering. En måling, ikke en mening.
Det, der gør Codebase Assurance Index anderledes.
Hver dimension beregnes af et deterministisk værktøj, der læser din kode. Commit + frosset rubrik → præcis én score. Samme commit, samme rubrik, samme rådgivende data — samme tal.
Hver plan — også gratisplanen — beregner hele CAI: alle dimensioner, alle linser. Du betaler aldrig for dybde; du betaler for bredde (porteføljeoprulning, teamanalyse) og kadence.
Læs den præcise regel, hver dimension blev scoret efter, og kør den samme måling på din egen kode — algoritmen og rubrikken er åbne.
Bedømt efter den åbne CAI-standard — på tværs af ti linser.
Fem er altid aktive; fem tændes med din arkitektur. Vi scorer dem ikke bare — vi lokaliserer hvert fund til fil:linje, trender hver linse scanning for scanning og giver dig det, der skal rettes. Standarden er åben: hver linse linker til sine præcise dimensioner på cai.canine.dev.
Altid aktive
Tændes med din arkitektur
Hele vokabularet — hver dimension, dens evaluator og rubrikversion — lever på den åbne standard. Gennemse kataloget →
-
Ikke en CI-scanner eller linterScorer aldrig en linje og blokerer aldrig et merge.
-
Ikke en SAST-/dataflow-motorLæser deres signal; forsøger ikke at overgå dem i dybde.
-
Ikke en kodeagentRedigerer, committer, pusher eller åbner aldrig en PR.
-
Ikke en certificeringsinstansRegistrerer beviset; et navngivet menneske underskriver.
-
En uafhængig landinspektørÉn højde over dine scannere.
-
Én reproducerbar CAIUnderskrevet, commit-fastlåst — kører til det samme tal igen.
-
Et skrivebeskyttet orakelServerer hvert fund til din agent over MCP.
-
En helsystem-opmålingArkitektur, modenhed, compliance & risiko i én rapport.
Metoden er en åben standard.
Watchdog bedømmer ikke efter husstil — den måler op mod CAI, Codebase Assurance Index: en åben, reproducerbar 0–100-standard. Hele algoritmen og worst-first-foldningen, brandmuren mellem den deterministiske score og det rådgivende lag, de fire git-historie-minede dimensioner (hotspots, bus factor, vidensfriskhed, ændringskobling), og præcis hvad der hæver eller sænker en score, lever alt sammen på standarden — åbent at læse, citere eller genberegne.
Intet flytter tallet undtagen koden.
Den deterministiske score sidder på den ene side af en brandmur; en rådgivende LLM-vurdering sidder på den anden — og den kan aldrig krydse over. Det er forskellen på en måling og det at spørge en LLM, der svarer forskelligt hver gang.
Nogle få fund får en rådgivende, tolerancebåndet LLM-vurdering, der aldrig, per konstruktion, kan flytte hovedtallet. Den forklarer på almindeligt sprog; den scorer aldrig. Målingen forbliver ren.
Dine compliance-erklæringer, et undertrykt fund, din kontraktprofil — de ændrer, hvad artefakten siger, aldrig CAI. En erklæring er præsentation; scoren er måling. Ingen part i en kontrakt kan vippe tallet — kun en ændring i koden flytter det (eller en oplyst rådgivende opdatering som en ny CVE).
Hele brandmuren er tegnet ud på standarden: cai.canine.dev/spec.
Sådan rulles linserne sammen.
CAI er en vægtet oprulning af linsescorerne under den frosne rubrik — ikke et gennemsnit, du ikke kan se ind i.
De fem kernelinser (Kodesundhed, Arkitektur, Modenhed, Driftsparathed, Sikkerhed & Compliance) bidrager altid. De betingede linser (Domænemodellering, Hændelsesdrevet, Event Sourcing, Tilgængelighed, Performance) bidrager kun, når koden lægger op til det, og vægtene renormaliseres — så et repo straffes aldrig for en linse, der ikke er relevant.
Oprulningen kan ikke vise Stærk, mens en linse viser Kritisk: en enkelt linse i det kritiske bånd sætter loft over CAI, så det ene tal ikke kan skjule en alvorlig svigt i én dimension bag stærke scorer andetsteds.
Så et kontraktgulv på CAI ≥ 80 betyder, at hver altid-aktiv linse er Stærk eller bedre, uden at nogen linse er Kritisk — nedbrydeligt, ikke uigennemskueligt.
En aflæsning, du kan handle på — ikke tusind fund at triagere.
En måling er kun nyttig, hvis du kan stole på det, den fremhæver. Watchdog er kalibreret mod et korpus af rigtige .NET-kodebaser, så de idiomer, en linjeniveau-tjekker falder over — et repository, der hænger sammen via en baseklasse, en test der asserterer gennem en harness, et interface en façade er forpligtet til at implementere — ikke læses som defekter. Nul opsætning, ingen regeltunings-weekend: de falske positiver er kalibreret væk, før du overhovedet ser dem.
Hver detektor er testet i, at den fyrer på den reelle defekt og forbliver tavs på idiomet, mod et offentligt referencekorpus. På det korpus er det typiske repositorys fund over 95% reelle, og reference-kodebaser med ren arkitektur overstiger 99%.
Ethvert scoret fund kan bestrides med ét klik — sendt til menneskelig triage, og en bekræftet falsk positiv bliver til en detektortest, så den ikke kan gentage sig. Instrumentet skærpes med brug; scoren bøjer sig aldrig for indsigelsen.
Fund rangeres efter, hvad der flytter karakteren, foldes så én løsreven stub knap registreres, og en linse returnerer ikke-målt, med begrundelsen frem for et fantom-nul. Mængde forveksles aldrig med grundighed.
Kohæsionsmål som LCOM4 tæller, hvordan en klasses metoder deler intern tilstand: en klasse, hvis metoder
rører urelaterede felter, læses som lav kohæsion — del den op. Men et veldesignet domæne-
aggregat — et Order, der eksponerer AddItem, ChangeShipping,
Cancel — er kohæsivt i kraft af sin invariant: det er det ene sted, de regler
håndhæves, selvom de metoder rører forskellige felter. For et råt mål ligner det rene aggregat
en ægte god-class til forveksling. De fleste værktøjer rapporterer bare tallet og lader dig sortere de falske
alarmer. Det gør vi ikke: Watchdog genkender de former, LCOM4 påviseligt fejlmåler — domæne-aggregater,
dataadgangs-repositories, kildegenererede view-models, kontraktpålagt plumbing — og undtager dem,
mens den stadig flager det reelle god-object: servicen, der injicerer et dusin samarbejdspartnere og bolter
urelaterede bekymringer sammen. Resultatet er et kohæsionssignal, du kan handle på, i stedet for en liste, du skal
triagere.
Kalibrering er et løbende program — idiom-tunge kodebaser afgiver stadig residual støj, som vi bliver ved med at skrue ned, og hver indsigelse fodrer den næste runde.
Frys rubrikken, hold scoren konstant.
Watchdog scorer med en versioneret rubrik. Enhver ændring, der kan flytte en score for uændret kode, hæver rubrikversionen — og rubrikken er anfægtelig: en scoringsændring, der ikke afspejles i den offentliggjorte specifikation, fejler i vores CI, så hvert tal forbliver genskabeligt ud fra en regel, du kan læse. Engagementer kan låse et repository til en frosset rubrik i kontraktens løbetid — så den CAI, du underwriter ved LOI, og tallet ved closing er direkte sammenlignelige.
Lås et repository til en frosset rubrik, og målestokken holder op med at flytte sig under dig — den samme commit scorer til det samme tal under den rubrik, så enhver bevægelse, du ser, er aktivet, der ændrer sig, aldrig målestokken. (Rådgivende data opdateres stadig, så en ny CVE kan legitimt flytte et sikkerhedsfund — et reelt signal, oplyst i changeloggen.) Den aktuelle version og hele historikken lever på den åbne standard.
Få målingen. Ingen dybde er nogensinde spærret.
Log ind med GitHub · intet kort · C#/.NET · den første fulde rapport er €0.