Arid 2.1.0-beta.1 — Auditable Maintenance Beta
Arid 2.1.0-beta.1 marks the feature-freeze point for the Arid 2.1 release line.
The detector remains intentionally unchanged from 2.0: Arid still finds exact normalized Python duplicate code and reports DUP001. V2.1 adds auditable suppression maintenance, explainable discovery, stale-maintenance enforcement, and a human-facing total scan-time footer around that same detector.
This beta is for broader real-world and integration validation before release-candidate qualification. New product features are not planned after this point. Fixes are limited to correctness defects, compatibility regressions, deterministic-output defects, platform inconsistencies, documentation defects, or release-process defects inside the approved v2.1 contract.
What is frozen
The beta carries forward the complete v2.1 surface introduced in alpha.1:
--suppression-statuswith deterministicactive/staleclassification- idempotent suppression directives
- valid
# arid: disablethrough EOF --fail-on-stalefor suppression status and baseline status--explain-path <PATH>using the same effective discovery policy as real traversal--no-ignore-filesfor bypassing ignore-file-derived filtering without bypassing Aridexclude, hidden-path, source-type, or symlink policysuppression-status-v1path-explanation-v1- direct administrative
--report json=PATHoutput rendered from the same typed model as JSON stdout - the always-on human-facing
Total time:footer for completed normal text scans - timing excluded from JSON, Markdown, SARIF, supplemental report files, and all versioned machine contracts
The existing 2.0 contracts remain unchanged, including report-v4, error-v1, baseline-v1, capabilities-v1, finding identity, ordinary exit meanings, normalization behavior, and duplicate semantics.
Alpha qualification results
The published 2.1.0-alpha.1 release passed the complete pre-publication and published-artifact qualification path.
Before publication, Arid passed:
- the full inherited v2 integration suite
- the focused v2.1 suppression, stale-policy, discovery, path-explanation, administrative-output, and timing suite
- Black, Django, mypy, Rich, and Unicode/space-path real-world validation
- Django worker determinism at workers 1, 2, 4, and 8
- malformed-source validation
- a v2.0.0 → v2.1 performance regression comparison on Requests, Pydantic, and Polaris with no measurable regression
- the production release build matrix on Linux x86-64, Linux aarch64, macOS arm64, macOS x86-64, and Windows x86-64
After publication, both the exact GitHub Linux x86-64 standalone artifact and the exact PyPI arid==2.1.0a1 installation passed the full durable validation/v2.1.sh contract suite.
Published-artifact validation confirmed:
- the new CLI controls execute correctly
- normal text scans display exactly one
Total time:footer when appropriate - exit-2, JSON, Markdown, SARIF, and supplemental reports remain timing-free
suppression-status-v1andpath-explanation-v1outputs validate against the tagged schemas- administrative JSON stdout and direct JSON report files are byte-equivalent
No detector-semantic regression or material performance regression was found during alpha qualification.
Suppression lifecycle maintenance
--suppression-status treats effective suppression regions as lifecycle state rather than permanent lint graffiti.
Each effective region is exactly one of:
active— removing the suppression would expose otherwise-reportable duplicate code or allow a duplicate to cross the suppression boundarystale— the suppression is no longer needed under the current analysis settings
Repeated same-state directives are valid no-ops, and # arid: disable through EOF is valid without a matching # arid: enable.
--fail-on-stale can turn stale suppression or baseline state into exit status 1, supporting a maintenance ratchet of:
zero new duplication + zero obsolete suppression
Explainable discovery
--explain-path <PATH> explains one inclusion or exclusion decision without parsing Python, running duplicate detection, or recursively tracing a directory tree.
--no-ignore-files disables ignore-file-derived traversal filtering for one invocation while preserving Arid's own exclusion policy, hidden-path behavior, source-type selection, and symlink policy.
Together these controls make discovery decisions inspectable without introducing a second discovery implementation.
Human-facing timing
Completed normal text scans include a concise footer such as:
Total time: 18.7 ms
Timing is presentation-only. It is intentionally absent from deterministic machine contracts and does not change report-v4 or any other versioned schema.
Install the beta
With uv:
uv tool install --prerelease allow "arid==2.1.0b1"
arid --versionOr with pip:
python -m pip install --pre "arid==2.1.0b1"
arid --versionExpected version output:
arid 2.1.0-beta.1
Official GitHub Action
For this beta:
- uses: sponge-b0b/arid@v2.1.0-beta.1
with:
paths: .The release workflow verifies the published Action against the exact PyPI package version encoded in the tagged Action metadata.
What to test
Beta feedback should focus on defects and integration friction in the frozen v2.1 surface, especially:
- active/stale suppression classification on real repositories
- stale-policy enforcement in CI
- ignore-file and Arid-exclude interactions
- path explanation in monorepos and unusual repository layouts
- symlink and hidden-path behavior
- direct administrative JSON output
- machine-contract determinism
- timing-footer presentation across normal text scans
- absence of timing from machine-oriented output
- compatibility with existing report-v4 and baseline-v1 consumers
- platform-specific installation, packaging, and GitHub Action behavior
Any change to suppression-status-v1 or path-explanation-v1 after this point requires an explicit versioned contract decision rather than silent schema mutation.
Next steps
After beta publication, Arid 2.1 enters real-world beta stabilization. The release candidate will be prepared only after published beta artifacts pass the real-world validation campaign, machine contracts remain stable, ordinary detector behavior continues to match 2.0 expectations, timing behavior remains correct, and no material unexplained performance regression appears.