Skip to content

Releases: fdsprod/slopmeter

Slopmeter v0.7.0

Choose a tag to compare

@fdsprod fdsprod released this 22 Sep 16:05

Slopmeter v0.7.0

This release improves clone change matching, budget explanations, and import
context. It preserves snapshot measurements and calibration. The README now
starts with an agent review workflow; the detailed reference is under docs/.

Edited clones and new copies

changes can now retain correspondence when a clone's normalized syntax changes.
Four existing copies edited together report four modified members and zero
additions. A fifth copy still reports one addition. This corrects introduction
budgets that previously counted coordinated edits as new copies.

Matching requires mapped files, unique declaration owners and statement suites,
and a majority of unchanged complete statements with at least two distinct
anchors. Matching names alone do not prove continuity. Weak matches, duplicate
qualified declarations, and competing split/merge relationships remain unresolved.

JSON includes baseline_fingerprint, current_fingerprint, and modified.
Changed members retain evidence from both sides. Saved reviews still become
stale when their source or evidence changes; correspondence does not reapprove them.

Budget explanations

Budget checks now include incomplete_details with reason codes, source sides,
paths, and spans when available. Terminal output shows those locations. Aggregate
limits retain population scope rather than invented file locations. The existing
incomplete_reasons messages remain available.

Unchanged unsupported handlers still make the error budget incomplete. These
changes do not turn missing coverage into a passing result. Budgets remain
advisory unless --enforce-budget is explicitly selected.

Literal state comparisons

.state comparisons are described as syntax evidence with unknown semantic
intent. A field can contain geographic, lifecycle, or other values. The detector
keeps the observations without recommending lifecycle types from the field name
alone. No values are suppressed or placed on a project-specific allowlist.

Import context

architecture adds execution and guard context to import observations:

  • Eager syntax, deferred function bodies, or unknown timing.
  • Conditional and recognized positive typing.TYPE_CHECKING guards.
  • Conservative handling of shadowing, alias mutation, and dynamic namespace writes.
  • Unknown timing for annotation and lazy type-alias expressions.

Cycle output includes edge paths and contexts. All static edges still contribute
to cycles and declared-rule checks. A type-checking or deferred edge does not
prove an import-time failure. No target code is executed.

Compatibility and limits

  • Snapshot scoring is unchanged: profile py-2026.3, M4 version 3, the same six
    historical reference projects, and unchanged thresholds and weights.
  • Existing change and architecture reports load. Missing legacy import context
    remains unknown. Older strict readers can reject the new additive report fields.
  • Review stores and ledgers need no migration for these changes. Source changes
    still require review; no automatic approval or suppression was added.
  • Broader calibration and independent detector holdouts remain future work.
    Scores and experimental findings remain advisory review evidence.

Validation

The implementation passed 2,069 deterministic tests with 93.83% package coverage.
Four wheel/source archive and isolated-install checks passed separately. Learning
and performance checks passed 69 tests with one skip. The cached public source
evaluation passed all 16 jobs and 137 checks. These selected cases are regression
evidence, not population precision/recall estimates.

A self-scan found no new pattern or exception-fallback candidates. On identical
source, complete score JSON matched the v0.6.0 executable before the version bump.
No evaluator thresholds were changed to favor this repository.

Install or upgrade

Install the command in an isolated tool environment:

uv tool install --upgrade --python 3.12 https://github.com/fdsprod/slopmeter/releases/download/v0.7.0/slop_measure-0.7.0-py3-none-any.whl
uv tool update-shell
slop score . --lang py --top 10

Or install with pip in your selected Python environment:

python -m pip install --upgrade https://github.com/fdsprod/slopmeter/releases/download/v0.7.0/slop_measure-0.7.0-py3-none-any.whl

Python 3.12 or later is required. The release includes the wheel, source archive,
and SHA256SUMS.txt. Packages are distributed through GitHub releases.

Release verification

Release commit: a32e1033ab50658461d98adcd4161bbf1cc5331c.

All CI jobs passed: static checks and tests/package installation on Windows, macOS, and Linux with Python 3.12, 3.13, and 3.14.

The version update passed 93 targeted golden/CLI tests, four local distribution checks, and a fresh 137-check cached public evaluation. An isolated uv tool installation upgraded from v0.6.0 to v0.7.0 and ran the installed slop command. README output examples and local documentation links were checked.

Slopmeter v0.6.0

Choose a tag to compare

@fdsprod fdsprod released this 22 Sep 06:42

Slopmeter v0.6.0

This release adds change-focused review and a repeatable public evaluation suite.
It keeps raw evidence, uncertain matches, and analysis limits visible. New review
signals do not contribute to calibrated snapshot scores.

New commands

  • errors reports supported exception handlers that return literal defaults while
    another return supplies a different result. Reports retain protected operations,
    locations, and assessed/unresolved coverage. Inspect the caller contract before
    treating a candidate as an error disguised as success. Saved reports support
    attributed decisions through the new error review family.
  • changes compares directory, Git, and WORKTREE evidence. It tracks pattern
    occurrences, clone membership, exception fallbacks, and direct raw-string tests
    of .state. It distinguishes introductions, removals, persistence, changes,
    and unresolved correspondence. Clone groups also expose expansion/contraction.
  • surface reports Python declaration additions, changes, removals, and supported
    moves, with an explicit unavailable state when correspondence is incomplete.
  • architecture checks declared direct import restrictions and reports module
    fan-out and source dependency cycles. Dynamic or ambiguous imports remain
    unresolved. Source relationships do not prove runtime dependencies.
  • history reads a bounded first-parent Git range. It reports source churn and
    recent rework for lines with known introduction dates. Missing history and
    unknown ages remain explicit. This is not files-changing-together analysis.
slop errors --root . --lang py --json
slop changes HEAD~1 HEAD --repo . --lang py --json
slop surface HEAD~1 HEAD --repo . --json
slop architecture --root . --policy architecture.toml --json
slop history HEAD~20 HEAD --repo . --window-days 14 --max-commits 100

Explicit policies

Change budgets are separate from slop.toml and ownership labels. For example:

[[limits]]
metric = "introduced-errors"
maximum = 0

Use slop changes HEAD~1 HEAD --repo . --budget budget.toml for advisory output.
Add --enforce-budget only when enforcing a chosen policy. Supported limits are
introduced-patterns, added-clone-members, and introduced-errors. An enforced
exceeded budget exits 1; incomplete evidence exits 3. Invalid inputs exit 2.
The example cap is not a calibrated recommendation.

Architecture uses a separate policy, with roots relative to the analyzed source:

source_roots = ["src"]

[[forbidden]]
source = "app.controllers"
target = "app.storage"

These rules cover direct imports and descendants of the declared modules.
Ownership labels do not create import permissions. Architecture remains advisory.
Existing external --config selection remains available for analysis settings.

Review workflow and compatibility

  • Mixed-family ledgers now distinguish not-in-selected-report from missing.
    An absent report family no longer creates a misleading missing-evidence queue.
  • review-report list supports repeated --kind, --cohort, and
    --hotspots-only filters. These select evidence without changing measurements.
  • review-report set --supersedes LEGACY_ID explicitly links a new clone judgment
    to a legacy decision. The legacy entry becomes superseded; history remains.
    No automatic reapproval or source-change suppression occurs.
  • Review-resolution JSON is now schema 3. Ledger storage remains schema 2,
    with optional supersedes_legacy_id on linking events. Existing ledgers load
    without migration. Older readers cannot consume schema-3 resolutions or the
    new ledger field. Preserve an unchanged copy when an older reader is required.
  • score --reviews and legacy review still accept schema-1 clone stores only.
    Schema-2 errors now explain how to use review-report with a fresh saved report.

Public evaluation suite

The source archive and checkout include evaluation/public-cases.json, usage
instructions, and tools/evaluate.py. The wheel does not install this developer
tool as a command.

The suite pins six cases from five repository lineages: AstrBot introduction and
fix, an intentional HTTPX fallback, and PyRIT/Werkzeug/NetworkX coverage gaps. It
checks source hashes, preserves complete reports, enforces worker deadlines, and
records analyzer/runtime identity. It runs offline from a verified cache;
downloads require --fetch. Target code and upstream tests are never executed.

All 16 evaluation jobs and 137 checks passed on the implementation revision.
A separate fresh-download AstrBot run passed 24 checks. These are selected
regression examples, not a precision/recall study or independent holdout. The
object-field and cross-method derived-state examples remain unsupported.

Measurement compatibility and validation

The calibration resources remain unchanged: profile py-2026.3, M4 version 3,
and the same six historical reference projects. No new weights or thresholds were
introduced. Scores remain review signals, not a general correctness gate.

The implementation passed 1,996 tests on Windows Python 3.12.14 with 93.25%
package coverage. Four release-install tests were skipped in that development
run. Ruff, Pyright, five import contracts, and wheel/source builds passed. The
version bump also passed all 58 targeted golden and CLI tests. All four isolated release-install checks passed, followed by 27 installed-wheel
and source-install command smoke checks. The release commit passed the full
Windows/macOS/Linux matrix on Python 3.12, 3.13, and 3.14, including distribution
installation, learning tests, and benchmark accounting.

Verified release CI.

Install the attached wheel with Python 3.12 or later:

python -m pip install --upgrade slop_measure-0.6.0-py3-none-any.whl

The release includes the wheel, source archive, and SHA256SUMS.txt.

Slopmeter v0.5.0

Choose a tag to compare

@fdsprod fdsprod released this 21 Sep 22:00

Slopmeter v0.5.0

This release adds attributed review history, experimental stored-count analysis,
and coverage summaries that show what the experiments actually assessed.
Calibration, thresholds, scoring formulas, pattern rules, and clone detection
remain unchanged.

Experimental coverage and explanations

models, variants, and derived now put coverage before detailed findings:
files analyzed/failed, subjects encountered/assessed/unresolved, findings, and
grouped unresolved reasons. JSON includes the same computed summary.

Nothing assessed differs from assessed subjects with no findings. Class counts
include ordinary classes and test fakes; they do not measure business-model
coverage or recall. Failed files contribute no inferred subject count. Missing
and fallback variant handlers count as findings; exhaustive handlers do not prove
branch correctness.

Variant explanations now identify unsupported scope/signatures, non-leading
matches, subject shapes, annotations, bindings, declarations, and patterns.
These explanations preserve the supported syntax and successful evidence.

Stored-count review

slop derived --root . --lang py
slop derived --root C:/project --config C:/reviews/project.toml --json

This experimental command connects a stored len(items), a length-increasing
list mutation, and a later read without recomputation. It supports straight-line
local list literals with append, nonempty literal extend, and insert.
Unknown calls, aliases, control flow, object fields, and uncertain bindings remain
unresolved. A stored count can be an intentional snapshot; review the consumer's
contract. The command never executes source and makes no score or M2 contribution.

Attributed review history

slop score . --lang py --json | Set-Content -Encoding utf8 snapshot.json
slop review-report list --report snapshot.json
slop review-report set TARGET_ID --report snapshot.json --store decisions.json --actor reviewer-name --disposition defer --reason "Review when the contract changes." --next-step "Check failure paths."
slop review-report show --report snapshot.json --store decisions.json

The new workflow accepts saved JSON from score, models, variants, and
derived. It retains clone, complexity, pattern, model, variant, and derived-state
decisions with an explicit actor, UTC timestamp, rationale, next step, and history.
Failed and unresolved experimental results are not review targets.

These commands inspect saved reports. Generate a fresh report to check current
source. Reads do not write stores, and changes are never automatically approved.
New clone decisions bind their members' effective boundary assignments; unrelated
declarations do not invalidate them. Changed member assignments, source bytes,
evidence, or analysis definitions still do. Comment-only edits still require review.

Fixes and compatibility

  • Model review rejects class-local bool shadowing instead of claiming a built-in
    Boolean field. Supported unshadowed evidence is unchanged.
  • Findings from historical M4 v1/v2 reports use full complexity. M4 v3 uses the
    cohort-specific basis. Missing or unknown versions do not invent classifications.
  • Default calibration remains py-2026.3, M4 version 3, with the same six historical
    reference projects. No project-specific score tuning was introduced.
  • The current reader accepts old experimental reports without a summary and
    validates supplied summaries against detailed evidence. Older readers may reject
    the new additive summary field; upgrade readers before consuming new reports.
  • Schema-1 clone stores remain readable. The first explicit review-report set
    write preserves old decisions under legacy_decisions in a schema-2 ledger.
    Legacy decisions retain whole-policy invalidation. Use review-report afterward;
    the original review commands remain schema-1-only. Keep a copy for legacy use.
  • Review evidence, source selection, profile identity, and scan root must stay
    comparable. Keep separate stores for independent roots.

Validation

  • 1,574 deterministic tests passed with 95.20% branch-inclusive coverage; four
    clean wheel/source installation checks passed separately.
  • All 69 new coverage/explanation cases passed on Python 3.13 and 3.14.
  • Ruff, Pyright, and all five import contracts passed.
  • On identical final source, ordinary score JSON matched the pre-change
    implementation exactly before the version bump. Experimental evidence matched
    after removing only summaries and unresolved variant reason text.
  • Independent HTTPX/Rich/Black evaluation supplied no eligible positive cases.
    Self-scans likewise expose narrow experimental coverage. These results do not
    establish detector precision, recall, or a general correctness guarantee.

Use the tool for advisory review. Assets include a wheel, source distribution,
and SHA-256 checksums.

Hosted release CI passed all nine Windows/macOS/Linux and Python 3.12–3.14 jobs, plus static checks and dependency audit: CI run.

Source commit: 3306dc0.

Slopmeter v0.4.0

Choose a tag to compare

@fdsprod fdsprod released this 21 Sep 17:04

Slopmeter v0.4.0 adds review evidence and configuration options. Calibration, thresholds, pattern rules, clone detection and score formulas are unchanged.

New commands

  • slop models --root . --lang py: experimental coupled-state review. Finds a supported local dataclass rejection guard repeated by at least two typed consumers. Shows field declarations, validator and consumer locations.
  • slop variants --root . --lang py: experimental local Enum/Literal match review. Distinguishes missing cases, catch-all coverage and exhaustive explicit handling. Guarded branches do not prove full coverage.

Both commands accept --json, --config, and --strict. They parse source without executing it and make no score or M2 contribution. They do not support every model or handler: Pydantic/TypedDict models, cross-file resolution, uncertain bindings, and unsupported patterns remain outside their narrow scopes. Unresolved is not clean. Neither command proves a defect or recommends an automatic refactor.

External configuration

slop score C:/project --config C:/reviews/project.toml --lang py --top 10
slop review show --root C:/project --config C:/reviews/project.toml --store C:/reviews/decisions.json

--config replaces root-local config discovery. Precedence is defaults, selected file, then CLI overrides. Missing or invalid explicit files fail instead of falling back. A file named exactly pyproject.toml reads [tool.slop]; other filenames use standalone Slop TOML. Config paths are relative to the invocation directory. Boundary prefixes and source patterns remain relative to the scan root. Comparisons use the same settings for both source states. The external file path does not enter review fingerprints.

Stale clone reviews

Reports now identify changed source hashes, clone evidence, boundary policy, analysis definition, or unavailable identity evidence. Existing stores need no migration. Applicability remains conservative: comment-only member-file changes and unrelated boundary additions still invalidate reviews. Hashes cannot establish that an edit was harmless. Opaque policy fingerprints cannot identify the old changed declaration. Nothing automatically reapproves a decision.

Compatibility and validation

  • Default profile remains py-2026.3, M4 version 3. The same six historical reference projects remain; this release does not broaden calibration.
  • Ordinary score JSON matched released v0.3.0 on the same source before the version bump. Existing model-review output also remained unchanged when variant review was added.
  • 1,424 deterministic tests passed with 95.46% branch-inclusive coverage. Four wheel/source installation checks passed. All 47 new variant checks passed on Python 3.13 and 3.14.
  • Seeded examples exercise positive and negative cases. The repository self-scan did not establish new defects; unsupported cases stayed unresolved. Independent holdouts are still required to estimate detector precision and recall.

Use scores and experimental findings for advisory review, not as an automatic quality gate. Assets include a Python wheel, source distribution, and SHA-256 checksums.

Slopmeter v0.3.0

Choose a tag to compare

@fdsprod fdsprod released this 19 Sep 00:17

Slopmeter v0.3.0 adds configured clone boundaries and persistent review decisions. It also makes clone-driven rankings and callable complexity easier to interpret.

No scoring change: the default remains py-2026.3 / M4 version 3. Calibration resources, weights, thresholds, and default exclusions are unchanged. Running v0.2.0 and this implementation on identical source produced identical raw metrics, scores, callable facts, coverage, clone groups, and pattern findings. No project-specific tuning was applied.

Configure architectural boundaries

Create slop.toml in the directory you use as the scan root:

[[boundaries]]
name = "provider-a"
prefix = "src/providers/a"

[[boundaries]]
name = "provider-b"
prefix = "src/providers/b"

Or put the declarations in pyproject.toml:

[[tool.slop.boundaries]]
name = "provider-a"
prefix = "src/providers/a"

[[tool.slop.boundaries]]
name = "provider-b"
prefix = "src/providers/b"
  • Prefixes are project-relative paths, not globs. Names and normalized prefixes must each be unique. Absolute paths, parent traversal, and glob syntax are rejected.
  • The longest matching path-component prefix wins. A declaration for src/providers/a overrides a broader declaration for src/providers. A prefix for src/providers/a does not match src/providers/another.
  • Config is loaded from the scan root. A subdirectory scan does not inherit its parent's config. Adjust declarations to the root used by that scan.
  • When both files define boundaries, the slop.toml list replaces the pyproject.toml list.

Clone reports then show:

Relation Meaning
within-boundary Every occurrence belongs to the same declared boundary.
cross-boundary Every occurrence is assigned, across two or more boundaries.
unknown At least one occurrence is unassigned.

View the labels with slop findings --root . --lang py --metric m3 or slop explain PATH --root ..

Labels annotate real duplicates. They do not suppress findings, lower scores, change rankings, or establish whether extraction is appropriate. Preserve deliberate isolation when the architecture requires it, with a review reason.

Retain clone review decisions

First inspect a clone group and copy its ID from findings. Replace CLONE_ID below:

slop findings --root . --lang py --metric m3
slop review set CLONE_ID --root . --store reviews.json --disposition no-change --reason "These adapters evolve under separate contracts." --next-step "Recheck each adapter when the contract changes."
slop score . --lang py --reviews reviews.json
slop findings --root . --metric m3 --reviews reviews.json --json
slop review show --root . --store reviews.json --json
  • Dispositions: actionable, defer, or no-change. A reason is required; the next step is optional.
  • Only review set writes. Ordinary scans and review show read the explicitly selected store. Stores are not discovered or created automatically.
  • current means the retained clone evidence, member-file hashes, boundary policy, and clone measurement definition still match.
  • stale means the previous decision needs review. Even a comment-only change can invalidate it. This release hashes whole member files, so an unrelated edit in one can also require review.
  • missing means evidence is absent or unavailable. It is not proof of a fix.
  • Re-running review set for the same group ID replaces its saved decision. Reinspect changed evidence before doing this.

Review annotations do not hide evidence or change scores. Persistence currently covers clone groups on the current snapshot side. Use separate stores for independent scan roots. Stores contain relative locations, hashes, and review text, not source code. Keep private review stores local unless separately approved for sharing.

Clearer evidence presentation

  • File and tree rankings include clone percentages, including at narrow widths.
  • Callable rows label retained mass as full-CC mass. Explanations separately show effective CC, effective mass, the M4 numerator, threshold, and selected basis.
  • Pattern findings (0) explicitly counts pattern rules; it does not imply that complexity or clone evidence is absent.
  • A production callable whose threshold crossing comes from assertions gets a classification-review hint. It remains production-classified, and its score is unchanged. Inspect intent before moving tests or changing file-level classification.

Report compatibility and limitations

New JSON reports add exact source_sha256 values to file results. Configured clone groups gain boundary_context; loading a review store adds review_results. Older reports remain readable, but reports without source hashes cannot create or confirm a current source-bound decision. The existing callable mass field retains its full-CC meaning.

Python remains the only implemented language. The reference corpus still has the same six historical projects. These features improve review context; they do not establish a representative service-specific calibration or turn the score into a CI quality gate.

Validation

GitHub CI passed static checks and all nine test/package jobs across Windows, macOS, and Linux with Python 3.12, 3.13, and 3.14. A cross-platform golden fixture was corrected to use explicit LF source bytes; production source hashing remains byte-exact.

  • 1,290 deterministic tests passed with 96.98% branch-inclusive coverage before the version-only release update.
  • 50 dependency-learning tests passed. The 73 new workflow and integrity checks also passed on Python 3.13 and 3.14.
  • All 40 release-version, boundary-config, and review-CLI checks passed.
  • The v0.3.0 wheel and source archive passed four isolated installation checks.
  • Regression tests cover unchanged scores, current/stale/missing reviews, source edits, policy changes, imported-report tampering, locks, and atomic-write failures.

Install

Download the wheel below and run:

python -m pip install --upgrade ./slop_measure-0.3.0-py3-none-any.whl
slop score . --lang py --scope all --top 10

Requires Python 3.12 or later. SHA256SUMS.txt covers the wheel and source archive. This is a GitHub release, not a PyPI publication.

Full usage and configuration

Slopmeter v0.2.0

Choose a tag to compare

@fdsprod fdsprod released this 18 Sep 23:25

Slopmeter v0.2.0 improves test-complexity measurement and explains calibration support beside scores.

Changes

  • Test erosion now excludes plain assertion increments. Reports retain full cyclomatic complexity, assertion counts, and assertion-excluded control-flow complexity. Production complexity is unchanged.
  • New default profile py-2026.3 uses M4 version 3, rebuilt from the same six pinned reference projects. Production distributions, weights, and thresholds are unchanged.
  • Scores show reference observation counts, file size bands where applicable, nominal percentile steps, and unassessed domain match.
  • Reports distinguish missing reference populations from incompatible calibration, and explain zero points with nonzero raw evidence.
  • Compact reports include absolute metric totals. Expanded guidance explains test-style bias, intentional clones, embedded self-checks, and calibration limits.

Compatibility and limits

Do not directly compare scores across calibration profiles or metric versions. Historical profiles remain packaged and unchanged. Saved reports without assertion counts or reference support retain explicit unknown states.

Python is the only implemented language. Classification still uses file paths. Boundary-aware clone labels and persistent review dispositions are not included. The six-project historical corpus remains small and library-heavy. Scores are review signals, not a quality gate or defect probabilities.

Validation

GitHub CI passed static checks and all nine test/package jobs across Windows, macOS, and Linux with Python 3.12, 3.13, and 3.14.

  • 1,217 deterministic tests passed with 96.90% branch-inclusive coverage before the version-only release update.
  • 50 dependency-learning tests passed; focused Python 3.13 and 3.14 runs each passed 408 tests.
  • Both v0.2.0 distributions passed isolated installation checks. Release-version golden checks passed.
  • A self-scan confirmed that 26 over-threshold unit-test callables became one after excluding assertion increments. Real branching remains visible.

Install

Download the wheel below, then run:

python -m pip install ./slop_measure-0.2.0-py3-none-any.whl
slop score . --lang py --scope all --top 10

Requires Python 3.12 or later. SHA256SUMS.txt contains SHA-256 digests for the wheel and source distribution. Installation is from these GitHub assets; this release is not a PyPI publication.

Slopmeter v0.1.0

Choose a tag to compare

@fdsprod fdsprod released this 18 Sep 22:18

First release of Slopmeter, a Python source-review tool for people and coding agents.
The command is slop; the package is slop-measure.

Included

  • Python directory scans, file rankings, directory trees, and callable explanations.
  • Twenty pattern rules, normalized clone detection, and gradual excess-complexity measurement.
  • Directory and Git revision comparisons, including the working tree, without executing target code.
  • Early language filtering with --lang py / --langs, plus Git ignore handling that skips ignored folders.
  • Calibrated file and project scores using py-2026.2. Erosion contributions reflect both reference percentile and raw severity.
  • Interpretation guidance on every successful report, with a full structured guide in JSON and expanded terminal guidance under --verbose.
  • Findings output that retains coverage, diagnostics, and excluded-directory context.
  • Automatic ASCII fallback for output streams that cannot encode display characters.

Install

Requires Python 3.12 or later. Python 3.12, 3.13, and 3.14 are tested.
In an activated virtual environment, install the release wheel directly:

python -m pip install https://github.com/fdsprod/slopmeter/releases/download/v0.1.0/slop_measure-0.1.0-py3-none-any.whl
slop score /path/to/project --lang py --top 10

For agents, use slop score /path/to/project --lang py --json.
For more detail in a terminal, add --verbose.
The source distribution is also attached. SHA256SUMS.txt contains checksums for both packages.

See the README for Windows PowerShell setup, configuration, and all commands.

Interpretation and limits

Only Python analysis is currently implemented. Scores identify review candidates;
they are not defect probabilities or proof of authorship. Flat predicates can
overstate refactoring need, while subtle algorithms can understate it. The
initial tuning uses nine local examples and a six-project historical reference
corpus; evaluation on other repositories remains useful.

The default py-2026.2 profile uses M4 version 2. Its scores are not directly
comparable with the historical py-2026.1 profile. Historical resources remain available.

Validation

  • 1,178 deterministic tests and 42 retained learning tests passed locally.
  • All four release archive and isolated wheel/source installation checks passed against the attached packages.
  • Local branch coverage: 96.81 percent.
  • Release commit CI passed static checks and all nine Windows, macOS, and Linux jobs on Python 3.12, 3.13, and 3.14.

Release source: a61c528afe7aa79dcfb3554d30124822bb15d7b3. Existing Git history is preserved.