SteamGauge 0.4.0

Architecture

How SteamGauge is built, for anyone changing it. How it works says what it does and Accuracy how well; this page says how the parts fit and the rules they keep.

The parts

PartWhat it is
crates/steamgauge-appThe one binary, steamgauge: the Tauri window when opened with no arguments, the command line when given any, and the MCP server.
crates/steamgauge-coreEverything that knows nothing about a window: crawling, splitting, reading, counting, the report, updating itself.
crates/steamgauge-siteThe documentation site, written from the program's own tables.
training/Python that trains, measures and exports the reader. training/README.md gives the order.
reference/The labelled claims, the category sheet, the benchmark keys and the reader sizes table.
tools/The browser checks of the window, the report, the gold page and the site, and the release scripts.

A claim

Downloading

Reading

Counting

ComparisonFloorBar
What moved lately: the last three months against the twelve before100 and 300 reviews3 standard errors and 2 points
Either side of an update, 28 days each100 reviews a side3 standard errors and 2 points
One kind of reviewer against the rest100 reviews4 standard errors and 2 points
New reviews since the last look against the year before100 and 300 reviews4 standard errors and 2 points

The bar rises with how many shares a comparison tests, so that chance clears it on fewer than one game in thirty.

The window

Assistants

Updates and releases

Checks

CheckWhat it holds
CoverageThe core's own tests cover at least 97% of its lines; the floor only rises.
Mutation testingA surviving mutant on a pull request's changed lines fails it; the weekly run lists the rest in one issue.
FuzzingThe splitter, words_at, the reader's window and the term cut are fuzzed on every pull request, with their invariants asserted.
Browser checksThe window, the report, the gold page and the site, each against axe-core's WCAG 2.2 A and AA rules.
ProseVale checks the words people read for inflated and filler phrasing.
CodeQLEvery pull request, including those holding no code.
Release dry runrelease.yml run on a branch builds and installs everything without publishing.

A pull request holding only a version bump or package manifests (tools/release/scope.mjs) skips the build, install and scan jobs, and the release gate takes the checks of the commit that last held code.

Labels and measurement

Names

Nothing is named by an incremented number. A training run is named for its encoder and label count, and training/runs/README.md, generated by sweep.py --index, says what each changed and scored. A label set is named by its fingerprint, the sheet by the hash of its text.