Skip to content
Codebase Assurance Index, forklaret

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.

En hurtig orientering

Det, der gør Codebase Assurance Index anderledes.

Reproducerbar

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.

Dybde er aldrig spærret bag betaling

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.

Verificerbar

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.

Sådan måler vi

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.
Sådan måler vi

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.

Brandmuren

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.

AI'en rådgiver kun ◐

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 input scorer aldrig

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.

Fra linserne til ét tal

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.

Kernen tæller altid; betingede linser kun når de er relevante

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.

En kritisk linse sætter loft over hovedtallet

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.

Kalibreret, ikke støjende

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.

Tunet på rigtig kode

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%.

Vær uenig, og den lærer

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.

Stille af design

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.

Et gennemarbejdet eksempel — kohæsion

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.

Rubrikversionering

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.

Kontraktrubrikker

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.