Miller is like awk, sed, cut, join, and sort for name-indexed data such as CSV, TSV, and tabular JSON
This report summarizes scanner evidence for johnkerl/miller, a Go project with 10,055 GitHub stars. SynthScan examined 200,637 lines of code across 771 source files, recording 425 pattern matches distributed across 12 syntactic categories. The legacy adjusted pattern signal is 3.4 (Low pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Payload schema: 1.0.0 · Engine: 2.0.0 · Scoring: heuristic-density-v1 · Scan date: 2026-10-31.
Can maintainers explain intent, assumptions, and trade-offs? 304 finding(s).
Are imports declared and package/API names verified? 10 finding(s).
Are wrappers, guards, and repeated structures necessary? 112 finding(s).
Which changes need focused human review? 425 finding(s).
This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 425 distinct pattern matches across 12 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM⚡ | man/mkman.rb | 3 | # ================================================================ | COMMENT |
| MEDIUM⚡ | man/mkman.rb | 12 | # ================================================================ | COMMENT |
| MEDIUM⚡ | man/mkman.rb | 14 | # ---------------------------------------------------------------- | COMMENT |
| MEDIUM | man/mkman.rb | 126 | # ================================================================ | COMMENT |
| MEDIUM⚡ | man/mkman.rb | 162 | # ---------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | man/mkman.rb | 172 | # ---------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | man/mkman.rb | 182 | # ---------------------------------------------------------------- | COMMENT |
| MEDIUM | man/mkman.rb | 193 | # ---------------------------------------------------------------- | COMMENT |
| MEDIUM | man/mkman.rb | 208 | # ---------------------------------------------------------------- | COMMENT |
| MEDIUM | man/mkman.rb | 219 | # ================================================================ | COMMENT |
| MEDIUM⚡ | tools/release.sh | 49 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tools/release.sh | 51 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tools/release.sh | 61 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tools/release.sh | 63 | # ============================================================================ | COMMENT |
| MEDIUM | tools/release.sh | 156 | # ============================================================================ | COMMENT |
| MEDIUM | tools/release.sh | 158 | # ============================================================================ | COMMENT |
| MEDIUM | tools/release.sh | 199 | # ============================================================================ | COMMENT |
| MEDIUM | tools/release.sh | 201 | # ============================================================================ | COMMENT |
| MEDIUM | tools/release.sh | 319 | # ============================================================================ | COMMENT |
| MEDIUM | tools/release.sh | 321 | # ============================================================================ | COMMENT |
| MEDIUM | tools/release.sh | 384 | # ============================================================================ | COMMENT |
| MEDIUM | tools/release.sh | 386 | # ============================================================================ | COMMENT |
| MEDIUM | tools/release.sh | 456 | # ============================================================================ | COMMENT |
| MEDIUM | tools/release.sh | 458 | # ============================================================================ | COMMENT |
| MEDIUM | tools/release.sh | 489 | # ============================================================================ | COMMENT |
| MEDIUM | tools/release.sh | 491 | # ============================================================================ | COMMENT |
| MEDIUM | tools/release.sh | 558 | # ============================================================================ | COMMENT |
| MEDIUM | tools/release.sh | 560 | # ============================================================================ | COMMENT |
| MEDIUM | tools/release.sh | 620 | # ============================================================================ | COMMENT |
| MEDIUM | tools/release.sh | 622 | # ============================================================================ | COMMENT |
| MEDIUM | tools/release.sh | 690 | # ============================================================================ | COMMENT |
| MEDIUM | tools/release.sh | 692 | # ============================================================================ | COMMENT |
| MEDIUM | tools/release.sh | 733 | # ============================================================================ | COMMENT |
| MEDIUM | tools/release.sh | 735 | # ============================================================================ | COMMENT |
| MEDIUM | tools/release.sh | 787 | # ============================================================================ | COMMENT |
| MEDIUM | tools/release.sh | 789 | # ============================================================================ | COMMENT |
| MEDIUM | python/sketch.py | 9 | # ================================================================ | COMMENT |
| MEDIUM | python/sketch.py | 30 | # ================================================================ | COMMENT |
| MEDIUM | python/sketch.py | 65 | # ---------------------------------------------------------------- | STRING |
| MEDIUM | python/sketch.py | 235 | # ================================================================ | STRING |
| MEDIUM | python/sketch.py | 256 | # ================================================================ | STRING |
| MEDIUM | python/sketch.py | 293 | # ================================================================ | STRING |
| MEDIUM | python/sketch.py | 333 | # ---------------------------------------------------------------- | STRING |
| MEDIUM | python/sketch.py | 358 | # ---------------------------------------------------------------- | STRING |
| MEDIUM | python/sketch.py | 396 | # ================================================================ | STRING |
| MEDIUM | python/sketch.py | 419 | # ---------------------------------------------------------------- | STRING |
| MEDIUM | python/sketch.py | 436 | # ---------------------------------------------------------------- | STRING |
| MEDIUM | python/sketch.py | 460 | # ---------------------------------------------------------------- | STRING |
| MEDIUM | python/sketch.py | 472 | # ================================================================ | STRING |
| MEDIUM | python/sketch.py | 606 | # ================================================================ | STRING |
| MEDIUM | python/sketch.py | 624 | # ================================================================ | STRING |
| MEDIUM | python/sketch.py | 641 | # ================================================================ | STRING |
| MEDIUM | docs/build-epub.sh | 3 | # ================================================================ | COMMENT |
| MEDIUM | docs/build-epub.sh | 16 | # ================================================================ | COMMENT |
| MEDIUM⚡ | docs/src/mk-func-info.rb | 3 | # ================================================================ | COMMENT |
| MEDIUM⚡ | docs/src/mk-func-info.rb | 6 | # ================================================================ | COMMENT |
| MEDIUM⚡ | docs/src/mk-func-info.rb | 8 | # ---------------------------------------------------------------- | COMMENT |
| MEDIUM | docs/src/mk-func-info.rb | 65 | # ---------------------------------------------------------------- | COMMENT |
| MEDIUM | docs/src/mk-func-info.rb | 113 | # ---------------------------------------------------------------- | COMMENT |
| MEDIUM | docs/src/dkvp-examples.md | 26 | # ================================================================ | COMMENT |
| 50 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | regression_test.go | 21 | // verbosityLevel = 3 for all cases is probably too much output to be | COMMENT |
| LOW | man/mkman.rb | 1 | #!/usr/bin/env ruby | COMMENT |
| LOW | cmd/experiments/cli_parser/msys2in.sh | 1 | /home/kerlj/git/miller/experiments/cli-parser/cliparse.exe '$c=$a."bbb"' | COMMENT |
| LOW | cmd/experiments/line_parser/splitter.go | 1 | package main | COMMENT |
| LOW | cmd/experiments/line_parser/splitter.go | 21 | // Otherwise, the Scanner advances the input. If the token is not nil, the | COMMENT |
| LOW | tools/release.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | tools/release.sh | 21 | # | COMMENT |
| LOW | python/sketch.py | 1 | #!/usr/bin/python | COMMENT |
| LOW | docs/build-epub.sh | 1 | #!/bin/bash | COMMENT |
| LOW | docs/src/dkvp-examples.md | 21 | Here are the I/O routines: | COMMENT |
| LOW | docs/src/dkvp-examples.md | 41 | # >>> map | COMMENT |
| LOW | docs/src/dkvp-examples.md | 161 | # | COMMENT |
| LOW | docs/src/expo-sample.sh | 1 | # Generate 100,000 pairs of independent and identically distributed | COMMENT |
| LOW | docs/src/polyglot-dkvp-io/dkvp_io.rb | 1 | #!/usr/bin/env ruby | COMMENT |
| LOW | docs/src/polyglot-dkvp-io/dkvp_io.py | 1 | #!/usr/bin/env python | COMMENT |
| LOW | docs/src/ngrams/ngrams.sh | 1 | #!/bin/bash | COMMENT |
| LOW | scripts/perf/multilanguage-timings/original/tn.rb | 1 | #!/usr/bin/ruby | COMMENT |
| LOW | scripts/perf/multilanguage-timings/original/cutgo.go | 61 | // TIME IN SECONDS 0.221 -- cutgo ccode,milex,year,cinc ../c/nmc1.dkvp | COMMENT |
| LOW | scripts/perf/multilanguage-timings/original/cutgo.go | 81 | // $ repeat 10 justtime cutgo ccode,milex,year,cinc ../c/nmc1.dkvp > /dev/null | COMMENT |
| LOW | scripts/perf/multilanguage-timings/original/cutgo.go | 101 | if present { | COMMENT |
| LOW | scripts/perf/multilanguage-timings/original/cutgo.go | 141 | // TIME IN SECONDS 3.821 -- cutgo ccode,milex,year,cinc ../c/nmc1.dkvp | COMMENT |
| LOW | scripts/perf/multilanguage-timings/original/cutgo.go | 161 | // TIME IN SECONDS 3.539 -- cutgo ccode,milex,year,cinc ../c/nmc1.dkvp | COMMENT |
| LOW | scripts/perf/multilanguage-timings/original/cutgo.go | 181 | // TIME IN SECONDS 4.747 -- cutgo ccode,milex,year,cinc ../c/nmc1.dkvp | COMMENT |
| LOW | scripts/perf/multilanguage-timings/optimized/cutcpp.cpp | 1 | // CLI: step (1-6) arg1, comma-separated field names arg2, filenames arg3+. | COMMENT |
| LOW | .github/workflows/codeql-analysis.yml | 1 | # For most projects, this workflow file will not need changing; you simply need | COMMENT |
| LOW | .github/workflows/codeql-analysis.yml | 41 | # Initializes the CodeQL tools for scanning. | COMMENT |
| LOW | .github/workflows/codespell.yml | 41 | # WARNING: Trying next encoding "iso-8859-1" | COMMENT |
| LOW | data/generators/abixy.c | 21 | // a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 | COMMENT |
| LOW | data/generators/randuv-chomped.c | 1 | #include <stdio.h> | COMMENT |
| LOW | data/generators/randuv-chomped.c | 21 | // oooooooo----------------+ | COMMENT |
| LOW | pkg/dkvpx/dkvpx_reader.go | 1 | // Package dkvpx reads DKVPX records: comma-delimited key=value pairs with | COMMENT |
| LOW | pkg/types/doc.go | 1 | // Package types contains the implementation of the Mlrval datatype which is | COMMENT |
| LOW | pkg/auxents/hex.go | 1 | package auxents | COMMENT |
| LOW | pkg/terminals/repl/dsl.go | 1 | // This is the handler for taking DSL statements typed in interactively by the | COMMENT |
| LOW | pkg/terminals/repl/session.go | 1 | // Top-level handler for a REPL session, including setup/construction, and | COMMENT |
| LOW | pkg/terminals/repl/entry.go | 1 | // This is the shell command-line entry point to the Miller REPL command line. | COMMENT |
| LOW | pkg/terminals/repl/verbs.go | 521 | // | COMMENT |
| LOW | pkg/terminals/completion/completion.go | 1 | // Package completion implements shell tab-completion for Miller. | COMMENT |
| LOW | pkg/terminals/completion/verbflags.go | 1 | // Per-verb flag discovery for shell completion. | COMMENT |
| LOW | pkg/terminals/completion/shell_smoke_test.go | 1 | //go:build !windows | COMMENT |
| LOW | pkg/terminals/mcp/mcp_main.go | 1 | // Entrypoint for `mlr mcp`: a Model Context Protocol server exposing Miller | COMMENT |
| LOW | pkg/terminals/mcp/mcp_main.go | 41 | // serverConfig carries the `mlr mcp` command-line options into the tool | COMMENT |
| LOW | pkg/terminals/regtest/regtester.go | 1 | // Logic for executing regression tests via 'mlr regtest'. | COMMENT |
| LOW | pkg/terminals/regtest/regtester.go | 21 | // in test/input/. | COMMENT |
| LOW | pkg/terminals/regtest/regtester.go | 41 | // NR=1,a=pan,b=pan | COMMENT |
| LOW | pkg/terminals/regtest/regtester.go | 381 | COMMENT | |
| LOW | pkg/terminals/registry/registry.go | 1 | // Package registry is the single source of truth for the names of Miller's | COMMENT |
| LOW | pkg/terminals/help/entry_which.go | 1 | // mlr which -- intent-to-capability router for AI agents and interactive users. | COMMENT |
| LOW | pkg/terminals/help/entry.go | 141 | // flag-section named "CSV-only flags", etc. Here we can't key in the names | COMMENT |
| LOW | pkg/terminals/help/entry_json.go | 1 | // Machine-readable (JSON) help, for `mlr help --as-json` and friends. | COMMENT |
| LOW | pkg/mlrval/mlrval_collections.go | 1 | // ABOUT ARRAY/MAP INDEXING | COMMENT |
| LOW | pkg/mlrval/mlrval_collections.go | 21 | // | COMMENT |
| LOW | pkg/mlrval/mlrval_collections.go | 41 | // o No zero index: AWK uses $0 like Miller uses $*, to refer | COMMENT |
| LOW | pkg/mlrval/mlrval_collections.go | 101 | n := int(len(*array)) | COMMENT |
| LOW | pkg/mlrval/mlrval_collections.go | 121 | // -7 -2 false | COMMENT |
| LOW | pkg/mlrval/mlrval_collections.go | 201 | // | COMMENT |
| LOW | pkg/mlrval/mlrval_collections.go | 221 | // the array by one. | COMMENT |
| LOW | pkg/mlrval/mlrval_new.go | 201 | } | COMMENT |
| LOW | pkg/mlrval/mlrval_new.go | 241 | return &Mlrval{ | COMMENT |
| LOW | pkg/mlrval/mlrmap_json.go | 21 | buffer.WriteString(s) | COMMENT |
| 214 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | scripts/perf/multilanguage-timings/naive/cutcpp.cpp | 51 | // Step 2: line to map | COMMENT |
| LOW⚡ | scripts/perf/multilanguage-timings/naive/cutcpp.cpp | 60 | // Step 3: map-to-map transform | COMMENT |
| LOW | scripts/perf/multilanguage-timings/naive/cutcpp.cpp | 83 | // Step 6: write to stdout | COMMENT |
| LOW | scripts/perf/multilanguage-timings/naive/cutgo.go | 65 | // Step 2: line to map | COMMENT |
| LOW | scripts/perf/multilanguage-timings/naive/cutgo.go | 78 | // Step 3: map-to-map transform (keep include order for output) | COMMENT |
| LOW | scripts/perf/multilanguage-timings/naive/cutgo.go | 108 | // Step 6: write to stdout | COMMENT |
| LOW | scripts/perf/multilanguage-timings/naive/cutrs.rs | 70 | // Step 2: line to map | COMMENT |
| LOW | scripts/perf/multilanguage-timings/naive/cutrs.rs | 85 | // Step 3: map-to-map transform (newmap for step 4 lookup; order from include_fields) | COMMENT |
| LOW | scripts/perf/multilanguage-timings/naive/cutrs.rs | 113 | // Step 6: write to stdout | COMMENT |
| LOW | scripts/perf/multilanguage-timings/optimized/cutgo.go | 105 | // Step 2: line to map | COMMENT |
| LOW | scripts/perf/multilanguage-timings/optimized/cutgo.go | 119 | // Step 3: map-to-map transform | COMMENT |
| LOW | scripts/perf/multilanguage-timings/optimized/cutgo.go | 149 | // Step 6: send to writer | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | scripts/perf/multilanguage-timings/naive/cutcpp.cpp | 51 | // Step 2: line to map | COMMENT |
| LOW⚡ | scripts/perf/multilanguage-timings/naive/cutcpp.cpp | 60 | // Step 3: map-to-map transform | COMMENT |
| LOW | scripts/perf/multilanguage-timings/naive/cutcpp.cpp | 83 | // Step 6: write to stdout | COMMENT |
| LOW | scripts/perf/multilanguage-timings/naive/cutgo.go | 65 | // Step 2: line to map | COMMENT |
| LOW | scripts/perf/multilanguage-timings/naive/cutgo.go | 78 | // Step 3: map-to-map transform (keep include order for output) | COMMENT |
| LOW | scripts/perf/multilanguage-timings/naive/cutgo.go | 108 | // Step 6: write to stdout | COMMENT |
| LOW | scripts/perf/multilanguage-timings/naive/cutrs.rs | 70 | // Step 2: line to map | COMMENT |
| LOW | scripts/perf/multilanguage-timings/naive/cutrs.rs | 85 | // Step 3: map-to-map transform (newmap for step 4 lookup; order from include_fields) | COMMENT |
| LOW | scripts/perf/multilanguage-timings/naive/cutrs.rs | 113 | // Step 6: write to stdout | COMMENT |
| LOW | scripts/perf/multilanguage-timings/optimized/cutgo.go | 105 | // Step 2: line to map | COMMENT |
| LOW | scripts/perf/multilanguage-timings/optimized/cutgo.go | 119 | // Step 3: map-to-map transform | COMMENT |
| LOW | scripts/perf/multilanguage-timings/optimized/cutgo.go | 149 | // Step 6: send to writer | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | docs/src/file-formats.md | 1162 | "Phone": "555-1234", | CODE |
| LOW | docs/src/file-formats.md | 1168 | "Phone": "555-5678" | CODE |
| LOW | pkg/input/record_reader_rec_test.go | 32 | assert.Equal(t, "John Doe", record.Head.Value.String()) | CODE |
| LOW | pkg/cli/flag_types.go | 455 | // * Help string is "Lorem ipsum dolor sit amet, consectetur adipiscing elit, | COMMENT |
| LOW | pkg/cli/flag_types.go | 455 | // * Help string is "Lorem ipsum dolor sit amet, consectetur adipiscing elit, | COMMENT |
| LOW | pkg/cli/flag_types.go | 469 | // --foo or -f {bar} Lorem ipsum dolor sit amet, consectetur adipiscing | COMMENT |
| LOW | pkg/cli/flag_types.go | 469 | // --foo or -f {bar} Lorem ipsum dolor sit amet, consectetur adipiscing | COMMENT |
| LOW | pkg/cli/flag_types.go | 482 | // Lorem ipsum dolor sit amet, consectetur adipiscing | COMMENT |
| LOW | pkg/cli/flag_types.go | 482 | // Lorem ipsum dolor sit amet, consectetur adipiscing | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | pkg/transformers/doc.go | 2 | // output records as requested by the user (sort, filter, etc.). | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | pkg/mlrval/mlrval_collections.go | 696 | // CollectionFold multiplexes ArrayFold or MapFold. The panic here is not robust, but is done to | COMMENT |
| MEDIUM | pkg/dsl/cst/udf.go | 291 | // Definitely a Miller internal coding error if the user put 'return x' in | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | docs/src/polyglot-dkvp-io/dkvp_io.py | 45 | except: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | python/sketch.py | 66 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | docs/src/mk-func-info.rb | 55 | def name_to_display_name_and_link_name(name) | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …ripts/perf/multilanguage-timings/original/mand/mand.py | 3 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tools/release.sh | 5 | # Usage: | COMMENT |