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.

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.

Implemented measurements
MetricDefinition and limitationsKindVersionUnitScopeDirectionSource
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-indicators
Not 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-indicators
Not 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.

Experimental measurements
MetricDefinition and limitationsKindVersionUnitScopeDirectionSource
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-violations
Not 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-change
Not 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-added
Not 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.

Planned measurements
MetricDefinition and limitationsKindVersionUnitScopeDirectionSource
code.unreachable
Not in the metric catalog
Dead or unreachable code where deterministically measurable (R1). Observation — — — — —
cohesion.indicators
Not in the metric catalog
Cohesion indicators (R1). Observation — — — — —
complexity.ast-cyclomatic
Not in the metric catalog
Syntax-tree cyclomatic complexity to replace or complement the lexical proxy (R1). Observation — — — — —
complexity.cognitive
Not in the metric catalog
Cognitive complexity (R1). Observation — — — — —
coupling.indicators
Not in the metric catalog
Coupling indicators (R1). Observation — — — — —
readability.indicators
Not in the metric catalog
Readability and code-smell indicators beyond the current lexical counts. Observation — — — — —
suppressions.age
Not in the metric catalog
Suppression and waiver counts and age (R1, R3). Observation — — — — —
tests.coverage
Not 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.

The five files with the highest complexity proxy
FileComplexity proxy (points)
src/Dokimos.Core/CanonicalComparison.fs30
src/Dokimos.Domain/Domain.fs30
src/Dokimos.Core/Correlation.fs26
src/Dokimos.Core/Policy.fs23
src/Dokimos.Cli/Program.fs19

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.