Skip to content

E003 ergonomics for library fragments: ~380 cross-module false positives across 6 consumer repos in the v0.27.0 sweep #460

Description

@InauguralPhysicist

Data from the pre-v0.27.0 verify-before-bump sweep (all 10 consumers, suites green): E003 works exactly as designed — entry points lint clean via transitive literal-load_file collection in every repo — but linting library fragments standalone produced ~380 false positives across 6 repos, all one pattern: a name defined in a sibling module the entry point loads first.

Counts: EigenMiniSat 99 (lib/bench.eigs, lib/solver.eigs), EigenGauntlet ~50 (src/lab.eigs → assert_eq/assert_true from src/common.eigs), DMG 217 (src/opcodes.eigs/cpu.eigs/memory.eigs compose via dmg.eigs), liferaft 38 (src/adversary/cluster/invariants), tidelog 4 (src/store.eigs → cbor), iLambdaAi ~26 (fragments + eigenscript-full extension builtins linted under a minimal binary).

Two sub-cases worth distinguishing:

  1. Loader-composed fragments — the common case. The existing # lint: allow-file E003 escape works but means a header in every fragment of every consumer (Tidepool needed 6).
  2. Out-of-language composition — EigenMiniSat's lib/solver.eigs deliberately has NO load_file because the EigenOS ROM bundle concatenates files; no in-language loader exists for E003 to follow. Same for extension builtins under a differently-built binary (iLambdaAi's eigen_train under the minimal binary).

Possible directions (not prescribing): a # lint: fragment / # lint: loaded-by <entry> declaration that pulls the entry point's binding set; a documented convention that consumer CI lints entry points only; or blessing mass allow-file headers as the answer. E003's fail-open design is intact — this is purely lint-adoption ergonomics, and it's currently the main friction to consumers turning on a --lint CI gate (only Tidepool gates today).

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions