Metrics
What Dokimos measures today, and what it does not yet.
Each measurement publishes a definition, unit, scope, and version. This page is generated from the metric catalog in the repository, and every measurement marked implemented is checked against Dokimos's own accepted baseline when the site is built.
Implemented
8
Experimental
20
Planned
8
Reading this page
Direction is not always a verdict.
Direction values come from config/metric-catalog.json.
Contextual metrics have no inherent good direction. A larger file or more commits is not automatically worse; the number becomes meaningful through history, correlation, and policy. Only a policy may declare that lower is better for a contextual metric.
Observations are measured directly. Derived measurements are correlations over several observations and always carry the signals that produced them. Lexical indicators are deliberately conservative: they point to places worth reading, not to proven defects.
8 measurements
Implemented
Computed by the Dokimos CLI and present in the accepted baseline snapshot, either as a versioned observation or as a finding.
| Metric | Definition and limitations | Kind | Version | Unit | Scope | Direction | Source |
|---|---|---|---|---|---|---|---|
complexity.proxy-cyclomatic |
Lexical complexity proxy composed from decision, boolean, and match-branch indicators; not AST cyclomatic complexity. Compare values within one codebase over time; they are not comparable with other tools' cyclomatic complexity. |
Observation | v1 | points | file | contextual | Complexity.fs (src/Dokimos.Core/Complexity.fs) |
correlation.maintainability-hotspot |
Explainable correlation requiring structural complexity and temporal change pressure. Emitted as a finding when structural complexity coincides with frequent change or high churn. |
Derived | v1 | finding-present-0-1 | file, region | lower-is-better | Correlation.fs (src/Dokimos.Core/Correlation.fs) |
quality.scaffolding-indicatorsNot in the metric catalog |
Counts unresolved TODO/FIXME markers. Emitted in snapshots but not yet published in the metric catalog. | Observation | — | — | — | — | FSharpQuality.fs (src/Dokimos.Core/FSharpQuality.fs) |
quality.type-weakening-indicatorsNot in the metric catalog |
Counts obj-typed declarations. Emitted in snapshots but not yet published in the metric catalog. | Observation | — | — | — | — | FSharpQuality.fs (src/Dokimos.Core/FSharpQuality.fs) |
source.broad-catch-indicators |
Lexical broad-pattern indicators. This metric does not assert a defect. Counts wildcard match arms; a place to look, not proof of hidden failure cases. |
Observation | v1 | count | file | contextual | Structural.fs (src/Dokimos.Core/Structural.fs) |
source.lines |
Physical source lines using normalized newline splitting. Size alone is context, not a verdict. |
Observation | v1 | lines | file | contextual | Structural.fs (src/Dokimos.Core/Structural.fs) |
source.mutable-bindings |
Lexical count of F# let mutable bindings. Mutation is context for review, not a defect by itself. |
Observation | v1 | count | file | contextual | Structural.fs (src/Dokimos.Core/Structural.fs) |
source.nonblank-lines |
Nonblank physical source lines. The size basis used for comparisons. |
Observation | v1 | lines | file | contextual | Structural.fs (src/Dokimos.Core/Structural.fs) |
20 measurements
Experimental
Logic exists in Dokimos.Core with tests, or evidence is recorded from CI, but it is not yet emitted as a standalone versioned observation in canonical snapshots.
| Metric | Definition and limitations | Kind | Version | Unit | Scope | Direction | Source |
|---|---|---|---|---|---|---|---|
api.added |
Public API symbols added between compatible snapshots. Public-surface comparison exists; no symbol collector yet. |
Observation | v1 | symbols | project, repository | contextual | ApiHistory.fs (src/Dokimos.Core/ApiHistory.fs) |
api.removed |
Public API symbols removed between compatible snapshots. Public-surface comparison exists; no symbol collector yet. |
Observation | v1 | symbols | project, repository | contextual | ApiHistory.fs (src/Dokimos.Core/ApiHistory.fs) |
api.signature-changed |
Public API symbols whose recorded signatures changed. Public-surface comparison exists; no symbol collector yet. |
Observation | v1 | symbols | project, repository | contextual | ApiHistory.fs (src/Dokimos.Core/ApiHistory.fs) |
architecture.boundary-violationsNot in the metric catalog |
Forbidden project-reference detection exists; no project-graph collector yet. | Observation | — | — | — | — | Architecture.fs (src/Dokimos.Core/Architecture.fs) |
build.compiler-errors |
Compiler errors emitted by the configured build. Recorded from CI build results and ratcheted in BASELINE-0001; not yet collected by the CLI. |
Observation | v1 | count | repository | lower-is-better | observations/ (observations/) |
build.compiler-warnings |
Compiler warnings emitted by the configured build. Recorded from CI build results and ratcheted in BASELINE-0001; not yet collected by the CLI. |
Observation | v1 | count | repository | lower-is-better | observations/ (observations/) |
change.file-churn |
Added plus deleted lines for a file in the selected window. Added plus deleted lines; used as hotspot evidence; not yet a standalone snapshot observation. |
Observation | v1 | lines | file | contextual | Temporal.fs (src/Dokimos.Core/Temporal.fs) |
change.file-commits |
Distinct commits touching a file in the selected window. Parsed from git log --numstat and used as hotspot evidence; not yet a standalone snapshot observation. |
Observation | v1 | count | file | contextual | Temporal.fs (src/Dokimos.Core/Temporal.fs) |
change.production-without-test-changeNot in the metric catalog |
Change-level indicator; no collector yet. | Observation | — | — | — | — | ChangeQuality.fs (src/Dokimos.Core/ChangeQuality.fs) |
change.region-commits |
Distinct commits modifying a confidence-bearing region identity. Region histories carry an identity confidence. Hunk extraction from Git is not wired into the CLI yet. |
Observation | v1 | count | region | contextual | Regions.fs (src/Dokimos.Core/Regions.fs) |
correlation.agent-generated-risk-pattern |
Multi-signal indicator for type/dependency expansion coinciding with production change lacking test change evidence; does not assert authorship. Multi-signal pattern. It does not assert authorship; attribution requires external provenance evidence. |
Derived | v1 | finding-present-0-1 | file, project | lower-is-better | Correlation.fs (src/Dokimos.Core/Correlation.fs) |
correlation.persistent-debt-hotspot |
Explainable correlation of aged debt with an actively changing area. Rule exists; debt-age signals are not collected yet. |
Derived | v1 | finding-present-0-1 | file, region | lower-is-better | Correlation.fs (src/Dokimos.Core/Correlation.fs) |
correlation.unstable-public-surface |
Explainable correlation of API instability with repeated implementation change. Rule exists; API-change signals are not collected yet. |
Derived | v1 | finding-present-0-1 | file, project | lower-is-better | Correlation.fs (src/Dokimos.Core/Correlation.fs) |
correlation.untested-high-change |
Explainable correlation of high production change with no corresponding test change evidence. Rule exists; test-change signals are not collected yet. |
Derived | v1 | finding-present-0-1 | file, project | lower-is-better | Correlation.fs (src/Dokimos.Core/Correlation.fs) |
debt.age-days |
Elapsed days since a tracked debt marker was first observed. Age calculation exists; no debt-marker collector yet. |
Observation | v1 | days | file, region | contextual | Debt.fs (src/Dokimos.Core/Debt.fs) |
debt.staleness-days |
Elapsed days since a tracked debt marker was last observed changing. Staleness calculation exists; no debt-marker collector yet. |
Observation | v1 | days | file, region | contextual | Debt.fs (src/Dokimos.Core/Debt.fs) |
dependency.packages-addedNot in the metric catalog |
Package additions and removals between snapshots; no collector yet. | Observation | — | — | — | — | Architecture.fs (src/Dokimos.Core/Architecture.fs) |
duplication.block-occurrences |
Occurrences of normalized repeated nonblank source blocks at configured block size. Reported by dokimos analyze; not yet written to canonical snapshots. |
Observation | v1 | count | repository, file | contextual | Complexity.fs (src/Dokimos.Core/Complexity.fs) |
source.public-declarations |
Conservative lexical indicator of module, type, and val declarations. Reported by dokimos measure; not yet written to canonical snapshots. |
Observation | v1 | count | file | contextual | Structural.fs (src/Dokimos.Core/Structural.fs) |
tests.total |
Tests executed in the observed test run. Count alone is not a quality score. Recorded from CI test runs. Observed, never ratcheted: more tests is not automatically better. |
Observation | v1 | count | repository | none | observations/ (observations/) |
8 measurements
Planned
Required by requirements/REQUIREMENTS.md. No implementation exists yet.
| Metric | Definition and limitations | Kind | Version | Unit | Scope | Direction | Source |
|---|---|---|---|---|---|---|---|
code.unreachableNot in the metric catalog |
Dead or unreachable code where deterministically measurable (R1). | Observation | — | — | — | — | — |
cohesion.indicatorsNot in the metric catalog |
Cohesion indicators (R1). | Observation | — | — | — | — | — |
complexity.ast-cyclomaticNot in the metric catalog |
Syntax-tree cyclomatic complexity to replace or complement the lexical proxy (R1). | Observation | — | — | — | — | — |
complexity.cognitiveNot in the metric catalog |
Cognitive complexity (R1). | Observation | — | — | — | — | — |
coupling.indicatorsNot in the metric catalog |
Coupling indicators (R1). | Observation | — | — | — | — | — |
readability.indicatorsNot in the metric catalog |
Readability and code-smell indicators beyond the current lexical counts. | Observation | — | — | — | — | — |
suppressions.ageNot in the metric catalog |
Suppression and waiver counts and age (R1, R3). | Observation | — | — | — | — | — |
tests.coverageNot in the metric catalog |
Test coverage when available (R1). | Observation | — | — | — | — | — |
Dokimos on Dokimos
Highest complexity in Dokimos's own source.
complexity.proxy-cyclomatic v1, lexical proxy.
Real Dokimos evidence. From the accepted baseline snapshot of kemiller2002/dokimos at 46c8385, collected 2026-09-26. 154 observations; 154 available.
| File | Complexity proxy (points) |
|---|---|
src/Dokimos.Core/CanonicalComparison.fs | 30 |
src/Dokimos.Domain/Domain.fs | 30 |
src/Dokimos.Core/Correlation.fs | 26 |
src/Dokimos.Core/Policy.fs | 23 |
src/Dokimos.Cli/Program.fs | 19 |
These are real observations, not demonstration data. A single snapshot shows where complexity sits; the trajectory across later snapshots will show where it is going.