Skip to main content

Structural codebase analysis — no parsers, no config, any language

Project description

quale — structural codebase analysis

Reads code as text, no ASTs, no config. Answers structural questions about any codebase.

Useless on day zero. After ~1 commit, signal builds.

What it does

Every model we tested guesses the wrong test file on a plain prompt. With quale, every model picks the right one on the first try. 900+ trials, 12 repos, 7 model families.

The blind spot is structural, not semantic: no model knows your directory layout because that's not in training data.

Quickstart

quale edit-context --files src/spool.ts --task "change upload" --format tool
quale verify-packet --files src/spool.ts --task "change upload" --format tool
quale guard --task "change upload"

For an agent

Put this in AGENTS.md or an instruction file:

Before editing, run:
quale edit-context --files $FILE --task "$TASK" --format tool

The tool emits structured JSON. The agent reads it, picks the right test file, and stays in scope. Measured: 75% verify hit, zero sprawl (vs 10-20% verify, 0.4-0.65 sprawl without).

For a developer

quale edit-context --files src/spool.ts --task "..."
quale edit-context --diff HEAD~1
quale ci-report origin/main HEAD --summary
quale inspect .

For CI

quale ci-report origin/main HEAD --fail-on-blast-tier high
quale ci-report origin/main HEAD --fail-on-mirror-gap 0.70

Exit codes: 0 = pass, 1 = error, 2 = blast gate, 3 = stable anchor gate.

Cross-model verification

Model Baseline With quale
Qwen 235B wrong path correct
Gemma 4 31B wrong dir correct
Nemotron 30B wrong + 277 tok right + 112 tok
Mistral 24B wrong dir correct
Claude Opus 4 src/spool.test.ts tests/spool.test.ts
Gemma 4B (local CPU) blank JSON correct

Every model makes the same src/foo.test.ts error. quale corrects it.

What it is not

Linter, coverage tool, dead-code detector, security policy. All output is report-only. Verification accuracy peaks around 80% -- when the candidate set lacks the right test file, quale says so rather than guessing.

How it works

Three primitives, same pipeline for every language:

  1. Segmenter: split file content on delimiters
  2. Vocabulary: collect unique phrases per file
  3. Index: measure co-occurrence, overlap, and history

Deterministic. Same input, same output, every time.

Further reading

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

quale-0.7.0.dev0.tar.gz (172.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

quale-0.7.0.dev0-py3-none-any.whl (158.3 kB view details)

Uploaded Python 3

File details

Details for the file quale-0.7.0.dev0.tar.gz.

File metadata

  • Download URL: quale-0.7.0.dev0.tar.gz
  • Upload date:
  • Size: 172.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.4

File hashes

Hashes for quale-0.7.0.dev0.tar.gz
Algorithm Hash digest
SHA256 739fd5714a6d6da7bfa605084538eb0b338836be301507f1846b89238d3e5e00
MD5 313ea23e35363f1bc1b179a65d847e05
BLAKE2b-256 5c914ac9b2296873a176acef8eafb0078df876457720e3c56c0ce62221bcb1f2

See more details on using hashes here.

File details

Details for the file quale-0.7.0.dev0-py3-none-any.whl.

File metadata

  • Download URL: quale-0.7.0.dev0-py3-none-any.whl
  • Upload date:
  • Size: 158.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.4

File hashes

Hashes for quale-0.7.0.dev0-py3-none-any.whl
Algorithm Hash digest
SHA256 6d8d6136e54587e4f7dc0df57d067c88e3ade6963d1dd0dfc02f51f83a87fa3d
MD5 59338db53a322e9edb4a400908042737
BLAKE2b-256 a3e8c29b214d562da06f5e277f2d0fe474fa22445293c7b41fa5297e2f9141be

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page