- 0.1.1. Initialise the Cargo workspace with workspace members and
rust-toolchainpin. - 0.1.2. Add baseline project metadata (
README,LICENSE, contributing guide,CODEOWNERS). - 0.1.3. Establish Makefile or justfile targets for fmt, lint, test, and UI test orchestration.
- 1.1.1. Implement the
commoncrate helpers for attributes, context detection, spans, and diagnostics. - 1.1.2. Wire shared configuration loading with
dylint_linting::config_or_defaultand serde structs.
- 1.2.1. Integrate
dylint_testingharness boilerplate for UI tests across all lint crates.
- 1.3.1. Add the
crates/whitaker_support_macrosproc-macro crate and implement#[whitaker_support::dylint_expect(...)]withlib,lints, and optionalreasonarguments. See ADR 002 §Decision outcome / proposed direction and §Functional requirements. - 1.3.2. Add the
crates/whitaker_supportre-export crate, wire both support crates into the workspace, and document the supported attribute surface with API examples. See ADR 002 §Decision outcome / proposed direction and §Migration plan. - 1.3.3. Add compatibility coverage that proves the attribute stays warning
free in non-Dylint builds, Clippy runs, and Dylint runs with the matching
dylint_libvalue. See ADR 002 §Technical requirements and §Migration plan. Requires 1.3.1 and 1.3.2. - 1.3.4. Document intended usage, narrow-scope review guidance, and
pre-expansion limitations for the conditional
expectattribute. See ADR 002 §Decision outcome / proposed direction and §Known risks and limitations. Requires 1.3.3.
- 2.1.1. Establish the lint crate template with shared dependencies and UI test harness boilerplate.
- 2.2.1. Implement
function_attrs_follow_docswith targeted UI scenarios. - 2.2.2. Implement
no_expect_outside_testswith context-aware diagnostics. - 2.2.3. Implement
module_must_have_inner_docsensuring each module opens with an inner doc comment, including UI scenarios for inline, file, and macro-generated modules plus localised diagnostics and behaviour-driven coverage. - 2.2.4. Implement
public_fn_must_have_docsusing effective visibility data. - 2.2.5. Implement
test_must_not_have_examplecovering code-fence heuristics. - 2.2.6. Implement
module_max_lineswith configurable thresholds. - 2.2.7. Implement
conditional_max_n_branchesfor complex predicates. - 2.2.8. Implement
no_unwrap_or_else_panicwith optionalclippyhelpers. - 2.2.9. Replace ad hoc conditional
allowandexpectsequences in Whitaker-managed code with#[whitaker_support::dylint_expect(...)], keeping suppressions narrowly scoped to the item they justify. See ADR 002 §Migration plan. Requires 1.3.1, 1.3.2, and 1.3.3.
- 2.3.1. Add
fluent-templatesandonce_cellto the workspace dependencies and expose a sharedcommon::i18nloader. - 2.3.2. Create the
locales/resource tree with anen-GBfallback and secondarycy/gdlanguage samples covering every lint slug. - 2.3.3. Refactor lint diagnostics to source primary messages, notes, and help text from Fluent bundles with structured arguments.
- 2.3.4. Allow locale selection via
DYLINT_LOCALEanddylint.toml, and add UI smoke tests that run under at least one non-English locale.
- 3.1.1. Assemble the
whitaker_suitecdylib using constituent features and combined lint pass wiring.
- 3.2.1. Implement the installer CLI that builds, links, and stages all lint libraries.
- 3.2.2. Add
test-supportCargo feature exposingStubExecutorandStubMismatchfor external test suites. Seeinstaller/Cargo.tomlfeature documentation for usage guidance and caveats.
- 3.3.1. Provide consumer guidance and workspace metadata examples in documentation.
- 3.4.1. Define artefact naming, manifest schema, and verification policy.
See
docs/adr-001-prebuilt-dylint-libraries.md. - 3.4.2. Build CI automation to compile lint libraries for the supported
target matrix and publish
.tar.zstassets to the rolling release. Seedocs/adr-001-prebuilt-dylint-libraries.md§Decision outcome / proposed direction. - 3.4.3. Emit
manifest.jsonfor each artefact with git SHA, toolchain, target triple, build time, and SHA256. Seedocs/adr-001-prebuilt-dylint-libraries.md§Decision outcome / proposed direction. - 3.4.4. Extend the installer to download and verify prebuilt artefacts
before local compilation, falling back on failure. See
docs/adr-001-prebuilt-dylint-libraries.md§Decision outcome / proposed direction. - 3.4.5. Extract libraries to
~/.local/share/whitaker/lints/<toolchain>/<target>/liband setDYLINT_LIBRARY_PATH. Seedocs/adr-001-prebuilt-dylint-libraries.md§Decision outcome / proposed direction. - 3.4.6. Record download-versus-build rates and total installation time.
See
docs/adr-001-prebuilt-dylint-libraries.md§Migration plan.
- 3.5.1. Add a root
whitakerbinary and move the current installer behaviour behind an internal library boundary. See Whitaker CLI design §Public CLI surface and §Compatibility and migration. Requires 3.2.1. - 3.5.2. Implement
whitaker checkas the default linting path, including lazy dependency repair,--no-install, forwarded cargo arguments after--, and operational error handling that preserves lint-failure exit semantics. See Whitaker CLI design §Public CLI surface and §whitaker check. Requires 3.6.3, 3.6.4, and 3.7.1. - 3.5.3. Publish
whitakerrelease artefacts withcargo-binstallmetadata that mirror the existing installer packaging flow. See Whitaker CLI design §Public CLI surface and §Compatibility and migration. Requires 3.5.1 and 4.3.1.
- 3.6.1. Assign stable rule codes, family selectors, and
DEFAULT/ALLsemantics for the core lint suite. See Whitaker CLI design §Rule identifiers and selection model. Requires 3.5.1. - 3.6.2. Implement selector precedence across configuration and CLI flags,
including the curated
--experimentalbehaviour for implicit and explicit selections. See Whitaker CLI design §Rule identifiers and selection model. Requires 3.6.1. - 3.6.3. Adopt
ortho_configfor CLI, environment, andwhitaker.tomlloading, while retaining one-release compatibility withdylint.tomland legacy environment keys. See Whitaker CLI design §Configuration model. Requires 3.5.1. - 3.6.4. Add shared
--locale,--colour, and--progresscontrols, and ensure the merged config surface remains localizable and accessible. See Whitaker CLI design §Accessibility and localization requirements and §Configuration model. Requires 3.6.3 and 2.3.4.
- 3.7.1. Move dependency repair, toolchain provisioning, and bundle
installation into
whitaker install, including--offline,--build-from-source, and--toolchainflows. See Whitaker CLI design §whitaker install. Requires 3.5.1, 3.4.5, and 4.3.2. - 3.7.2. Resolve source builds against the CLI release version or an
explicit revision instead of cloning
main, and record source provenance for installed bundles. See Whitaker CLI design §whitaker install. Requires 3.7.1. - 3.7.3. Add per-bundle manifest files with schema version, Whitaker
version, source SHA, build date, toolchain, target, origin, and bundle-kind
metadata. See Whitaker CLI design §Bundle manifests
and
whitaker ls. Requires 3.7.1.
- 3.8.1. Implement
whitaker lstext output with installed bundle metadata, the effective config path, and per-rule enablement states. See Whitaker CLI design §Bundle manifests andwhitaker ls. Requires 3.6.2 and 3.7.3. - 3.8.2. Add
--jsontowhitaker lsandwhitaker doctor, using stable machine-readable fields that remain untranslated across locales. See Whitaker CLI design §Accessibility and localization requirements and §whitaker doctor. Requires 3.8.1. - 3.8.3. Record structured dependency-install and bundle-build failures with timestamps, phase metadata, stderr tails, advice, and log-path references. See Whitaker CLI design §Failure recording. Requires 3.7.1.
- 3.8.4. Implement
whitaker doctorto summarize configuration, toolchains, dependencies, prebuilt availability, bundle-version drift, selected-lint coverage, and recent failures. See Whitaker CLI design §whitaker doctorand §Failure recording. Requires 3.7.3 and 3.8.3. - 3.8.5. Add behaviour coverage for locale overrides, plain-progress output, and JSON parity between text and machine-readable status commands. See Whitaker CLI design §Accessibility and localization requirements. Requires 3.6.4, 3.8.2, and 3.8.4.
- 3.9.1. Ship a compatibility release where
whitaker-installerdispatches towhitaker installwith a deprecation notice andwhitaker lsacceptslistas an alias. See Whitaker CLI design §Public CLI surface and §Compatibility and migration. Requires 3.7.1 and 3.8.1. - 3.9.2. Update
docs/users-guide.md,docs/developers-guide.md,docs/publishing.md, and installer-facing workflow documentation to point to the unified CLI and the new configuration surface. See Whitaker CLI design §Configuration model, §Compatibility and migration, and §Expected outcomes. Requires 3.6.3 and 3.9.1. - 3.9.3. Remove wrapper script generation,
whitaker-ls, and installer-first references once the compatibility release window closes. See Whitaker CLI design §Public CLI surface and §Compatibility and migration. Requires 3.9.1 and 3.9.2.
- 4.1.1. Configure CI workflows for fmt, clippy, dylint runs, and per-crate UI tests on a multi-OS matrix.
- 4.1.2. Add markdownlint, nixie, and other doc/tooling checks to the pipeline.
- 4.1.3. Enforce lint-level deny rules and fail builds on warnings across the workspace.
- 4.2.1. Add cargo-binstall metadata to
installer/Cargo.tomlfor published release artefacts.
- 4.3.1. Implement a release workflow that builds
whitaker-installerfor each supported target, packages.tgz/.ziparchives, and uploads them to GitHub Releases taggedv<version>. - 4.3.2. Publish repository-hosted dependency binaries for
cargo-dylintanddylint-link, and teach the installer to prefer them before Cargo-based installation. (design.execplan.dependency-binary,docs/execplans/install-dependency-binaries.mdStage C-D)
- 5.1.1. Implement the per-line complexity signal builder and smoothing window logic.
- 5.1.2. Detect bump intervals, surface diagnostics with labelled spans, and add configuration options.
- 5.1.3. Ship UI coverage for positive and negative Bumpy Road scenarios and gate behind a feature flag.
- 6.1.1. Add a shared LCOM4 helper in
commonthat builds a method graph and returns connected component counts. See brain trust lints design §Cohesion analysis (LCOM4). Requires 1.1.1. - 6.1.2. Define method metadata extraction for field access and method calls, including macro-span filtering. See brain trust lints design §Cohesion analysis (LCOM4) and §Implementation approach.
- 6.2.1. Implement metric collection for WMC (cognitive complexity), brain
method detection (CC + LOC), LCOM4, and foreign reach. See
brain trust lints design §
brain_typesignals. Requires 6.1.1. - 6.2.2. Implement threshold evaluation and escalation rules, and surface
measured values in diagnostics. See
brain trust lints design §
brain_typerule set (initial defaults). Requires 6.2.1. - 6.2.3. Ensure macro-expanded spans are excluded or capped during CC calculation. See brain trust lints design §Metric collection.
- 6.3.1. Implement trait item counting, default method CC aggregation, and
implementor burden metrics. See
brain trust lints design §
brain_traitsignals. - 6.3.2. Apply warning and escalation thresholds, and surface measured
values in diagnostics. See
brain trust lints design §
brain_traitrule set (initial defaults).
- 6.4.1. Build feature vectors for methods and cluster with community detection to form decomposition suggestions. See brain trust lints design §Decomposition advice. Requires 6.2.1.
- 6.4.2. Emit concise diagnostic notes mapping clusters to extraction suggestions, capped for large types. See brain trust lints design §Decomposition advice.
- 6.4.3. Use Verus to prove
cosine_threshold_met's cross-multiplied threshold check is equivalent tocosine >= 0.20for non-zero norms and cannot divide by zero. See brain trust lints design §Decomposition advice. Requires 6.4.1. - 6.4.4. Use Verus to prove
dot_productandnorm_squaredalgebraic properties, including commutativity, non-negativity, and zero-result behaviour when vectors have no overlapping positive features. See brain trust lints design §Decomposition advice. Requires 6.4.1. - 6.4.5. Use Kani to verify
build_adjacencypreserves similarity edges, keeps neighbour indices in bounds, and produces symmetric adjacency lists. See brain trust lints design §Decomposition advice. Requires 6.4.1. - 6.4.6. Use Kani to verify
propagate_labelspreserves valid label indices, returns one label per input vector, and terminates within the supplied iteration bound. Verification harnesses are complete modulo the CBMC state-explosion blocker documented in the design notes. See brain trust lints design §Decomposition advice. Requires 6.4.1.
- 6.5.1. Collect brain trust diagnostics into a SARIF 2.1.0 emitter that is opt-in and English-only for tool ingestion. See brain trust lints design §SARIF output.
- 6.6.1. Add
brain_typeandbrain_traitconfiguration sections towhitaker.tomlwith documented defaults. See brain trust lints design §Configuration, localization, and testing. - 6.6.2. Add Fluent localization entries for both lints. See brain trust lints design §Configuration, localization, and testing.
- 6.6.3. Add UI tests for positive and negative cases under
crates/brain_type/ui/andcrates/brain_trait/ui/. See brain trust lints design §Configuration, localization, and testing.
- 6.7.1. Update
docs/users-guide.mdwith lint descriptions, configuration keys, and SARIF usage. See brain trust lints design §Configuration, localization, and testing.
- 7.1.1. Create the
whitaker_sarifcrate with SARIF 2.1.0 models, builders, and merge logic. See clone detector design §Crate responsibilities and §SARIF schema and mapping.
- 7.2.1. Implement
rustc_lexernormalization, k-shingling, winnowing, and Rabin-Karp hashing. See clone detector design §Pass A: token engine (rustc_lexer). - 7.2.2. Implement MinHash + LSH candidate generation with configurable bands and rows. See clone detector design §MinHash and LSH.
- 7.2.3. Emit SARIF run 0 for accepted Type-1 and Type-2 pairs with stable fingerprints and spans. See clone detector design §SARIF emission (Run 0). Requires 7.1.1.
- 7.2.4. Add sidecar proof workflows and Makefile targets for clone-detector Verus and Kani checks. Requires 7.2.2. See ADR 003.
- 7.2.5. Use Verus to prove
LshConfig::newrejects zerobandsandrows, and enforcesbands * rows == MINHASH_SIZE. Requires 7.2.4. See ADR 003 and clone detector design §MinHash and LSH. - 7.2.6. Use Verus to prove
CandidatePair::newcanonicalizes fragment ordering and suppresses self-pairs. Requires 7.2.4. See ADR 003 and clone detector design §MinHash and LSH. - 7.2.7. Use Kani to verify bounded
MinHasher::sketchinvariants, including deterministic output, duplicate-hash insensitivity, and empty-input failure. Requires 7.2.4. See ADR 003 and clone detector design §MinHash and LSH. - 7.2.8. Use Kani to verify bounded
LshIndexinvariants, including no self-pairs, canonical pair ordering, repeated-band deduplication, and insertion-order independence. Requires 7.2.4. See ADR 003 and clone detector design §MinHash and LSH.
- 7.3.1. Map candidate spans to
ra_ap_syntaxnodes and extract AST feature vectors. See clone detector design §Pass B: AST engine (ra_ap_syntax). - 7.3.2. Score Type-3 similarity and update SARIF run 1 with cosine and AST hash metadata. See clone detector design §Scoring and acceptance (Type-3) and §SARIF update (Run 1).
- 7.4.1. Implement
cargo whitaker cloneswithscan,refine,report, andcleansubcommands. See clone detector design §CLI surface. - 7.4.2. Emit optional HTML reports and anchor deep links in SARIF results. See clone detector design §Grouping and reporting.
- 7.5.1. Implement the
clone_detectedlint to load SARIF results, filter to current crate files, and emit diagnostics withhelpguidance. See clone detector design §Dylint integration (clone_detectedlint). - 7.5.2. Honour
#[allow(whitaker::clone_detected)]and per-file allowlists in configuration. See clone detector design §Dylint integration (clone_detectedlint).
- 7.6.1. Implement the per-file cache in
target/whitaker/clones-cache.binwith config hashing and shard indexing. See clone detector design §Incrementality and caching.
- 7.7.1. Add SARIF golden tests with deterministic ordering. See clone detector design §Testing strategy.
- 7.7.2. Add Dylint UI tests that consume pre-baked SARIF results. See clone detector design §Testing strategy.
- 7.7.3. Add property tests for normalization invariants. See clone detector design §Testing strategy.
- 7.8.1. Add CI jobs to run token and AST passes and verify stable SARIF output. See clone detector design §Acceptance criteria.
- 8.1.1. Add shared
rstesttest and fixture detection helpers incommonfor attribute-based detection and optional expansion-trace fallback. See rstest fixture and test hygiene lints §Lint A: call-site fixture extraction and §Integration constraints. Requires 1.1.1. - 8.1.2. Add shared user-editable span recovery helpers for macro-heavy test code paths, and use them to avoid diagnostics on macro-only glue. See rstest fixture and test hygiene lints §Integration constraints and §Lint A: call-site fixture extraction. Requires 1.1.1.
- 8.1.3. Add shared argument and paragraph fingerprint data models for deterministic grouping across tests. See rstest fixture and test hygiene lints §Lint A: call-site fixture extraction and §Lint C: repeated fixture paragraph detection. Requires 8.1.1.
- 8.2.1. Create the
rstest_helper_should_be_fixturelint crate, registerRSTEST_HELPER_SHOULD_BE_FIXTURE, and wire configuration loading defaults. See rstest fixture and test hygiene lints §Lint A: call-site fixture extraction. Requires 8.1.1 and 8.1.3. - 8.2.2. Implement call-site collection in
#[rstest]tests, including fixture-local classification and constant-aware argument fingerprinting. See rstest fixture and test hygiene lints §Lint A: call-site fixture extraction. Requires 8.2.1. - 8.2.3. Implement crate-post aggregation thresholds and actionable
diagnostics with
span_lint_hir_and_then. See rstest fixture and test hygiene lints §Lint A: call-site fixture extraction. Requires 8.2.2 and 8.1.2. - 8.2.4. Add UI pass/fail coverage for repeated no-arg helpers, repeated fixture/constant argument helpers, and non-trigger cases. See rstest fixture and test hygiene lints §Lint A: call-site fixture extraction. Requires 8.2.3 and 1.2.1.
- 8.3.1. Create the
single_binding_paragraphlint crate and implement the local statement I/O model (defs,uses,muts, and control-flow guards). See rstest fixture and test hygiene lints §Lint B: single-binding paragraph detection. Requires 8.1.2. - 8.3.2. Implement the contiguous backward-slice algorithm, single-output checks, and configurable limits for paragraph length and external inputs. See rstest fixture and test hygiene lints §Lint B: single-binding paragraph detection. Requires 8.3.1.
- 8.3.3. Emit diagnostics with bounded spans and explanatory notes for extraction candidates. See rstest fixture and test hygiene lints §Lint B: single-binding paragraph detection. Requires 8.3.2.
- 8.3.4. Add UI pass/fail coverage for simple paragraphs, too-short candidates, control-flow-containing blocks, and intermediate reuse cases. See rstest fixture and test hygiene lints §Lint B: single-binding paragraph detection. Requires 8.3.3 and 1.2.1.
- 8.4.1. Create the
rstest_paragraph_should_be_fixturelint crate and registerRSTEST_PARAGRAPH_SHOULD_BE_FIXTUREwith configurable assertion and input constraints. See rstest fixture and test hygiene lints §Lint C: repeated fixture paragraph detection. Requires 8.1.1 and 8.1.3. - 8.4.2. Reuse lint B candidate generation and implement assertion-free filtering plus fixture-or-constant input validation. See rstest fixture and test hygiene lints §Lint C: repeated fixture paragraph detection. Requires 8.4.1 and 8.3.2.
- 8.4.3. Implement cross-test paragraph grouping, identical input
fingerprint checks, and crate-post emission controls (
emit_once_per_group). See rstest fixture and test hygiene lints §Lint C: repeated fixture paragraph detection. Requires 8.4.2. - 8.4.4. Add UI pass/fail coverage for repeated setup paragraphs, assertion presence, differing inputs, and non-fixture-derived inputs. See rstest fixture and test hygiene lints §Lint C: repeated fixture paragraph detection. Requires 8.4.3 and 1.2.1.
- 8.5.1. Add all three lints to the experimental set with feature-gated suite wiring and default configuration stanzas. See rstest fixture and test hygiene lints §Integration constraints and §Comparison and rollout guidance. Requires 8.2.4, 8.3.4, and 8.4.4.
- 8.5.2. Add Fluent localization entries and diagnostic argument mappings for all three lint slugs. See rstest fixture and test hygiene lints §Integration constraints. Requires 8.5.1 and 2.3.3.
- 8.5.3. Update user documentation with lint intent, configuration keys, and fixture-extraction remediation guidance. See rstest fixture and test hygiene lints §Comparison and rollout guidance. Requires 8.5.1.
- 8.5.4. Define promotion criteria from experimental to standard based on UI stability and false-positive tuning across internal repositories. See rstest fixture and test hygiene lints §Integration constraints. Requires 8.5.1.
- 9.1.1. Add
common::ownership_shapemodel types, evaluation helpers, and diagnostic argument builders. See ownership shape lints design §11 Shared implementation approach and §16 Diagnostics and localization. Requires 1.1.1. - 9.1.2. Add resolved-path classifiers for clone-like operations and
wrapper constructors, following the
def_path_strplus parsed-segment pattern used byno_std_fs_operations. See ownership shape lints design §11.4 Resolution strategy and §15 Common helper requirements. Requires 9.1.1. - 9.1.3. Add exact borrow mappings for the initial concrete type set. See
ownership shape lints design §13 Lint 2:
owned_param_causes_cloneand §15 Common helper requirements. Requires 9.1.1. - 9.1.4. Add crate-local MIR summary helpers for local uses, escapes, and boundary classification. See ownership shape lints design §11.5 High-level Intermediate Representation (HIR) prefilter, Mid-level Intermediate Representation (MIR) confirmation and §10 Worked exception model: Servo-style code must stay quiet. Requires 9.1.1 and 9.1.2.
- 9.2.1. Create the lint crate and register
CLONE_ONLY_USED_BY_BORROW. See ownership shape lints design §12 Lint 1:clone_only_used_by_borrow. Requires 9.1.1. - 9.2.2. Implement HIR candidate prefiltering for
cloneandto_ownedforms. See ownership shape lints design §12 Lint 1:clone_only_used_by_borrowand §11.5 High-level Intermediate Representation (HIR) prefilter, Mid-level Intermediate Representation (MIR) confirmation. Requires 9.2.1 and 9.1.2. - 9.2.3. Implement MIR use classification and original-place conflict
checks. See ownership shape lints design
§12 Lint 1:
clone_only_used_by_borrow. Requires 9.2.2 and 9.1.4. - 9.2.4. Add machine-applicable suggestions for direct-call and simple-let forms. See ownership shape lints design §12.5 Suggestion policy. Requires 9.2.3.
- 9.2.5. Add UI pass and fail coverage, including macro and mutable-conflict cases. See ownership shape lints design §18 Testing strategy. Requires 9.2.3 and 1.2.1.
- 9.3.1. Create the lint crate and register
OWNED_PARAM_CAUSES_CLONE. See ownership shape lints design §13 Lint 2:owned_param_causes_clone. Requires 9.1.1. - 9.3.2. Implement local call-site clone-pressure collection that records callee identity, argument index, source shape, and retained-source evidence. See ownership shape lints design §13.2.1 Pass A: collect clone-pressure evidence at call sites. Requires 9.3.1, 9.1.2, and 9.1.4.
- 9.3.3. Implement callee parameter summaries and exported, trait, foreign function interface (FFI), and async suppression rules. See ownership shape lints design §13.2.2 Pass B: summarize callee parameter usage and §13.3 Exemptions. Requires 9.3.2.
- 9.3.4. Add exact borrow-type help for the initial mapping set without rewriting unsupported signatures. See ownership shape lints design §13.4 Exact borrow mappings and §13.5 Diagnostics. Requires 9.3.3 and 9.1.3.
- 9.3.5. Add UI coverage for private, exported, trait, async, and non-trigger scenarios. See ownership shape lints design §18 Testing strategy. Requires 9.3.4 and 1.2.1.
- 9.4.1. Create the lint crate and register
LOCAL_SHARED_OWNERSHIPbehind an experimental feature. See ownership shape lints design §14 Lint 3:local_shared_ownershipand §19 Rollout plan. Requires 9.1.1. - 9.4.2. Implement wrapper-construction detection and non-escape
classification for
Rc,Arc, interior mutability, and shared-mutable combinations. See ownership shape lints design §14.2 Scope and §14.3 Detection model. Requires 9.4.1, 9.1.2, and 9.1.4. - 9.4.3. Implement callback, async, thread, trait-surface, and external-API
suppression. See
ownership shape lints design §14.6
Servo-style exemptions and §14.7
local_shared_ownershipfalse-positive controls. Requires 9.4.2. - 9.4.4. Add diagnostic classes for interior-mutability-only,
shared-handle-only, and shared-mutable-wrapper cases. See
ownership shape lints design §14.4
Diagnostic classes and §14.5
local_shared_ownershipsuggestion policy. Requires 9.4.3. - 9.4.5. Add Servo-style regression fixtures and framework-boundary negatives. See ownership shape lints design §10 Worked exception model: Servo-style code must stay quiet and §18 Testing strategy. Requires 9.4.4 and 1.2.1.
- 9.5.1. Add Fluent entries and diagnostic argument mappings for all three lints. See ownership shape lints design §16 Diagnostics and localization. Requires 9.2.5, 9.3.5, 9.4.5, and 2.3.3.
- 9.5.2. Add Welsh and Gaelic smoke coverage for the ownership-shape diagnostics. See ownership shape lints design §16 Diagnostics and localization and §18 Testing strategy. Requires 9.5.1.
- 9.5.3. Update
docs/users-guide.mdanddocs/developers-guide.mdwith lint intent, configuration, and rollout guidance for the ownership-shape suite. See ownership shape lints design §17 Configuration and §19 Rollout plan. Requires 9.5.1. - 9.5.4. Define promotion criteria from experimental to standard based on UI stability and false-positive tuning across representative repositories. See ownership shape lints design §19 Rollout plan. Requires 9.5.1 and 9.5.2.
- 10.1.1. Add
whitaker::async_trait_hygienemodules behind thedylint-driverfeature and implement theAsyncTraitFamilyIndexdata model. See async-trait architecture hygiene Dylint suite design §Shared helper placement in Whitaker and §AsyncTraitFamilyIndex fields. Requires 1.1.1. - 10.1.2. Implement dyn-use closure, supertrait closure, boxed-future alias detection, sibling lookup, and adapter discovery with deterministic ordering. See async-trait architecture hygiene Dylint suite design §Algorithms and §AsyncTraitFamilyIndex fields. Requires 10.1.1.
- 10.1.3. Add shared configuration types and loaders for suite defaults,
allowlists, alias policy, and
Sendpolicy overrides. See async-trait architecture hygiene Dylint suite design §Configuration model. Requires 10.1.1 and 3.6.3.
- 10.2.1. Create the
async_trait_concrete_onlyandasync_trait_signature_markers_presentlint crates with diagnostics wired to the shared family index. See async-trait architecture hygiene Dylint suite design §Proposed lint table. Requires 10.1.2 and 10.1.3. - 10.2.2. Create the
async_dyn_family_requires_native_siblingandasync_dyn_family_requires_blanket_adapterlint crates, including family-scoped allowlist support. See async-trait architecture hygiene Dylint suite design §Proposed lint table and §Migration waves and default levels. Requires 10.2.1. - 10.2.3. Add UI coverage for dyn-required supertrait cases, high-confidence async-trait marker detection, missing sibling traits, and missing blanket adapters. See async-trait architecture hygiene Dylint suite design §Proposed lint table. Requires 10.2.2 and 1.2.1.
- 10.3.1. Create the
async_dyn_direct_impl_prefers_nativeandasync_dyn_boxed_future_alias_requiredlint crates and implement their family-shape checks. See async-trait architecture hygiene Dylint suite design §Proposed lint table. Requires 10.1.2 and 10.1.3. - 10.3.2. Create the
native_async_future_must_be_sendandnative_async_multi_borrow_requires_named_lifetimelint crates, including per-family non-Sendpolicy overrides. See async-trait architecture hygiene Dylint suite design §Proposed lint table and §Pending architectural decisions and trade-offs. Requires 10.3.1. - 10.3.3. Add UI coverage for direct dyn impls, raw boxed-future returns,
missing
+ Send, allowed non-Sendfamilies, and multi-borrow lifetime fixes. See async-trait architecture hygiene Dylint suite design §Proposed lint table. Requires 10.3.2 and 1.2.1.
- 10.4.1. Add the async-trait hygiene lints either to a specialist suite or
to
whitaker_suitebehind an explicit opt-in feature, and expose selector defaults for inventory versus ratchet waves. See async-trait architecture hygiene Dylint suite design §Suite plumbing and §Migration waves and default levels. Requires 10.2.3, 10.3.3, and 3.6.2. - 10.4.2. Add CI and maintainer guidance that capture timing evidence outside lint execution and document crate-local truth versus workspace-level audit limits. See async-trait architecture hygiene Dylint suite design §CI and xtask responsibilities versus lints. Requires 10.4.1 and 4.1.1.
- 10.4.3. Update
docs/users-guide.mdanddocs/developers-guide.mdwith the migration-wave model, configuration keys, and suppression guidance for async-trait hygiene findings. See async-trait architecture hygiene Dylint suite design §Configuration model and §Migration waves and default levels. Requires 10.4.1.
- 11.1.1. Create the
test_support_dead_codelint crate and implement the fast detector for dead-code suppressions in integration-test support modules. See technical design fortest_support_dead_codeandmasked_dead_code_expectations§Proposed rule contracts. Requires 1.1.1. - 11.1.2. Create the
masked_dead_code_expectationslint crate and detect#[expect(dead_code)]underallow(unfulfilled_lint_expectations)in the same support-module scope. See technical design fortest_support_dead_codeandmasked_dead_code_expectations§Proposed rule contracts. Requires 11.1.1. - 11.1.3. Add integration-test module-graph discovery for
tests/*.rsharnesses, ordinarymodedges, and explicit#[path]edges so workspace analysis can identify importer targets precisely. See technical design fortest_support_dead_codeandmasked_dead_code_expectations§Multi-pass execution path. Requires 11.1.1 and 3.5.2.
- 11.2.1. Implement overlay workspace creation and text-edit planning that
strips only
dead_codesuppressions, preserves unrelated lints, and inserts probe items without mutating the working tree. See technical design fortest_support_dead_codeandmasked_dead_code_expectations§Multi-pass execution path. Requires 11.1.3. - 11.2.2. Add per-target
cargo check --message-format=jsonreplay plus a collector that records organic and synthetic use sites for support items. See technical design fortest_support_dead_codeandmasked_dead_code_expectations§Multi-pass execution path and §Diagnostic model and report format. Requires 11.2.1. - 11.2.3. Add masked-expectation replay runs that remove
allow(unfulfilled_lint_expectations)only where needed and classify stale expectations per importer target. See technical design fortest_support_dead_codeandmasked_dead_code_expectations§Multi-pass execution path. Requires 11.2.2.
- 11.3.1. Integrate the merged dead-code and stale-expectation report into
whitaker check, with per-item classifications for globally dead, single-target live, shared, and synthetic-only support items. See technical design fortest_support_dead_codeandmasked_dead_code_expectations§Diagnostic model and report format. Requires 11.2.3 and 3.5.2. - 11.3.2. Add JSON output for the merged report so CI and follow-on tools
can consume item inventories, importer targets, and stale-expectation data.
See
technical design for
test_support_dead_codeandmasked_dead_code_expectations§Diagnostic model and report format. Requires 11.3.1 and 3.8.2. - 11.3.3. Add fixtures and behaviour coverage derived from the Axinite and
mdtablefix worked examples, including
#[path]traversal, genuine shared helpers, and synthetic keepalive shims. See technical design fortest_support_dead_codeandmasked_dead_code_expectations§Worked examples and §Constraints, failure modes, and rollout. Requires 11.3.1. - 11.3.4. Update
docs/users-guide.mdanddocs/developers-guide.mdwith the cleanup workflow, v1 non-goals, and guidance on when not to replaceallow(dead_code)withexpect(dead_code). See technical design fortest_support_dead_codeandmasked_dead_code_expectations§Constraints, failure modes, and rollout. Requires 11.3.1.
- 12.1.1. Add shared
[workspace.metadata.whitaker]policy parsing for layers, forbidden dependencies, feature islands, compile-hygiene thresholds, and allowlists. See Whitaker and cargo-compile-hygiene technical design §Policy storage and shared configuration model. Requires 3.6.3. - 12.1.2. Register Whitaker lint groups and naming conventions for
arch_*,hygiene_*,tests_*, andadvisory_*rules so CI and users can enable coherent policy sets. See Whitaker and cargo-compile-hygiene technical design §Whitaker lint namespaces and naming conventions and §Severity levels and build gating. Requires 12.1.1. - 12.1.3. Document suppression guidance for early, late, and
pre-expansion Whitaker lints, including
cfg_attr(dylint_lib = "whitaker", ...)and#[allow(unknown_lints)]escape hatches. See Whitaker and cargo-compile-hygiene technical design §Feature-matrix and “unknown lint” ergonomics. Requires 12.1.2.
- 12.2.1. Implement
whitaker::arch_hexagonal_layer_boundarywith resolution-aware internal and external dependency checks, and port the Wildside-style regression fixtures into Dylint UI tests. See Whitaker and cargo-compile-hygiene technical design §whitaker::arch_hexagonal_layer_boundary. Requires 12.1.1 and 1.2.1. - 12.2.2. Implement
whitaker::hygiene_public_api_leaks_optional_depandwhitaker::hygiene_feature_island_breach, including feature-matrix coverage for guarded and unguarded heavy-dependency paths. See Whitaker and cargo-compile-hygiene technical design §whitaker::hygiene_public_api_leaks_optional_depand §whitaker::hygiene_feature_island_breach. Requires 12.1.1 and 1.2.1. - 12.2.3. Implement
whitaker::tests_ui_test_macro_outside_appas a pre-expansion lint and keepwhitaker::advisory_async_trait_clear_misuseas an advisory-only rule with a conservative mode. See Whitaker and cargo-compile-hygiene technical design §whitaker::tests_ui_test_macro_outside_appand §whitaker::advisory_async_trait_clear_misuse. Requires 12.1.3 and 1.2.1.
- 12.3.1. Create the
cargo-compile-hygieneCargo subcommand withcheck,check --json,explain, andbaseline --writeentrypoints, usingcargo metadata --format-version 1as the primary graph input. See Whitaker and cargo-compile-hygiene technical design §Tool shape and why it is a Cargo subcommand and §Commands and CLI UX. Requires 12.1.1. - 12.3.2. Implement the
integration_target_budget,heavy_dependency_not_optional, andduplicate_major_version_hotspotschecks with shortest-path or hotspot explanations in reports. See Whitaker and cargo-compile-hygiene technical design §Checks. Requires 12.3.1. - 12.3.3. Implement the
tls_backend_multiplicityandpackage_boundary_puritychecks, including per-configuration graph analysis for feature-matrix runs. See Whitaker and cargo-compile-hygiene technical design §Checks and §Invocation patterns and feature-matrix handling. Requires 12.3.1. - 12.3.4. Add human-readable and JSON reporting with finding IDs, metrics, remediation guidance, and CI-oriented exit semantics. See Whitaker and cargo-compile-hygiene technical design §Output formats and example reports. Requires 12.3.2 and 12.3.3.
- 12.4.1. Add default, minimal, and all-features CI jobs that run both the
Whitaker lint set and
cargo-compile-hygieneacross the same feature matrix. See Whitaker and cargo-compile-hygiene technical design §Invocation patterns and feature-matrix handling. Requires 12.2.3, 12.3.4, and 4.1.1. - 12.4.2. Update
docs/users-guide.md,docs/developers-guide.md, and CLI-facing workflow documentation with shared policy examples, report interpretation guidance, and migration sequencing for downstream adopters. See Whitaker and cargo-compile-hygiene technical design §Comparison table: what belongs where and §Migration guidance for Axinite and Gauss. Requires 12.2.3 and 12.3.4. - 12.4.3. Define staged rollout criteria for promoting selected
architecture and compile-hygiene findings from report-only or
warnstatus to CI-failing policy. See Whitaker and cargo-compile-hygiene technical design §Severity levels and build gating and §Integration, CI, and rollout. Requires 12.4.1.