1# scc 4.0.0 Release Notes23This is a major release. It bundles new modes of operation (MCP, git4processing), new cost/output models, broader language support, and a handful of5behavioural changes to flag parsing, language detection and config handling that6can produce different results than 3.7.0 for the same input — hence the major7version bump.89## ⚠️ Breaking / behavioural changes1011These can change scc's output or behaviour for an identical invocation against123.7.0. Review before upgrading in scripts/CI.1314- **Last duplicate flag now wins** (#723) — pflag parsing changed so that when a15 flag is supplied more than once on the command line, the last occurrence takes16 precedence. Scripts relying on the previous precedence may behave differently.17- **Linguist-inspired language detection** (#721) — files may now be classified18 as different languages than before, shifting per-language counts and the19 contents of JSON/CSV output.20- **Per-user and per-project config overrides** (#724) — scc now reads config21 overrides from user/project locations. A repository containing a config file22 will behave differently than under 3.7.0 for the same command.2324## ✨ New features2526- **MCP server support** (#686) — run scc as a Model Context Protocol server over27 stdio (`--mcp`), exposing an `analyze` tool for programmatic/LLM consumers.28 Includes sorting/limit tuning and shared settings with the CLI path.29- **Git processing** (#707) — integrated git handling, with `gc` enabled for git30 operations and help text highlighting the git options.31- **LOCOMO — LLM Output Cost Model** (#682) — a new cost calculation aimed at32 estimating LLM output cost, with configurable cycles.33- **Infographic report output** (#709) — new report/infographic rendering.34- **Percentage outputs in JSON** (#720) — JSON output now includes percentage35 figures.36- **Codeberg support** (#866376f) — Codeberg as a supported badge/target.37- **External ignore files via `--ignore-file`** — supply additional gitignore-format38 ignore files from outside the scanned tree (repeatable, order-sensitive, anchored39 at the scan root; any in-tree `.gitignore`/`.ignore`/`.sccignore` takes precedence).40 Resolves the long-standing request for global/shared ignore support without scc41 shelling out to git — point it at `~/.config/git/ignore` directly, or set it once42 in a `.scc` file via `SCC_CONFIG_PATH`. Backed by `CustomIgnoreFiles` in gocodewalker.4344## 🗣 Language support4546- Linguist-inspired language detection (#721).47- New / updated languages: Mojo (#685), Zen C (#708), XHTML (#681),48 IEC61131-3 Siemens extensions (#702), Mog (#683), Phoenix LiveView fix (#722).49- Patch/diff: recognize `.diff` files as Patch (#705).50- Rust: count the `?` try operator toward complexity (#701).51- C/C++ language information updated (#691); CUDA updated (#693).52- New "move" classifier (#703).53- Python: prevent apostrophes in docstrings from breaking parsing (#695); extra54 docstring test coverage.5556## 🐛 Fixes5758- Fix potential MCP issue (a148002) and MCP settings/sorting/limit tweaks.59- Fix circular symlinks bug (#694).60- Catch error when mapping to an unknown language (30fa28a); fix a panic61 (dc8c92e).62- Fix for issue #412 (#719).63- WIP/fix for issue #531 (#714).6465## 🏎 Performance & internals6667- Reduce string allocations (#687).68- Minor performance tweaks (#711) and general cleanup/optimization (#680).69- Apply `go fix` suggestions (#712); convert more shell tests to Go tests (#696).70- Automate file generation and add CI tests (#688, #706); update to latest Go71 and refresh dependencies.7273## 🗒 To discuss / follow-up7475- **Remaining `git` subprocess shell-out** — `remoteOriginName` in76 `processor/report.go` still runs `git config --get remote.origin.url` to derive77 the HTML report title. This is the only place scc shells out to the `git` binary78 (the rest use the go-git library or `gocodewalker.FindRepositoryRoot`). Decide79 whether to drop it (fall back to the path basename) or read it via go-git's config80 instead, so scc has no hard dependency on a `git` binary being installed.8182---8384_Generated from the commit history between `v3.7.0` and the 4.0.0 release._
Findings
✓ No findings reported for this file.