user.email binds across unrelated Django test apps via TIER1R_RECEIVER — 2 live phantoms on master, and #199's own comment says they were gone #246
Labels
No labels
code-review
correctness
dos
performance
security
severity/high
severity/low
severity/medium
tech-debt
Kind/Breaking
Kind/Bug
Kind/Documentation
Kind/Enhancement
Kind/Feature
Kind/Security
Kind/Testing
Priority
Critical
Priority
High
Priority
Low
Priority
Medium
Reviewed
Confirmed
Reviewed
Duplicate
Reviewed
Invalid
Reviewed
Won't Fix
Status
Abandoned
Status
Blocked
Status
Need More Info
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
h-dv/code-index#246
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Split out of #199, which is now closed on its census half. This is the precision residual, and it is live on
mastertoday — measured by the #199/#206/#207 lane at8a8ea5c.Measured
Two refs in
django.contrib.auth's own tests bindemailto an unrelated test app'sUser.email.Read at source:
django.contrib.auth'sUsergetsemailfromAbstractUser. It is inherited, so there is noemailsymbol under theUserthe reference means — and tier 1R, having proven the receiver's type name isUser, binds it to the oneUserin the repository that happened to writeemaildown.Why this needs its own number
#199's own follow-up comment says these are gone. Written at
1d81180: "zero refs resolve to …User.emailanywhere." That was true when written. Since then #69's member arm landed (96d428a), and #203's route-A fix did not remove these two — it removed the relative-specifier class, and this is not one.So the state of the tracker was "measured and resolved" while the tree says otherwise. Two of #199's original eighteen survive; the other sixteen (the
a.idandcomposite_pkones) genuinely do not reproduce (target_id IS NULL).What the existing instruments say
precision_gate— cannot see it. It indexes zero corpus repositories, and a phantom scores only against a declared decoy.corpus_ratchet— counts resolutions. These are resolutions; the count went up.(container, member)ambiguity census — this is exactly the blind spot #199 was about, and #199's fix now discloses the conditions:same_named=14, declared_in=1, undeclared_containers_with_supertypes=11. The census can now say "eleven same-named containers have a supertype mechanism I cannot see through", which is the disclosure. It does not stop the bind.So the honesty half is shipped and the precision half is open. That split is deliberate and is why this is a separate number.
What must NOT be done
rust-analyzer'sto_proto.rswhere the source is explicit about which crate's type it means and a locality test overrules it. Applied over nine repos, reverted. Proximity is the wrong instrument.precision_gategreen. It has twice this week reported 7/7phantom_count == 0across changes admitting 34 and 37 wrong corpus binds.The two directions, from #199, neither attempted
from django.contrib.auth.models import Usernames the app's own class, and #196's clause is the mechanism. This is the discriminator these binds actually need, and it is the same answer #203 used for the relative half.class X(Base)toBaseand let member lookup walk the chain. Large; changes the candidate pool everywhere; needs its own bind-for-bind pass.Direction 1 is the narrower one and is the natural continuation of #203, which spliced
module_is_relativeand left the absolute-module half explicitly open (that half is #168, currently in flight).What a fix must prove
select_related_onetoone, read at source, and either resolve correctly or resolve to nothing — a phantom replaced by a different phantom is not progress.(path, line, col, kind, occurrence)and split byresolved_by, with every moved row adjudicated at source.precision_gatedecoy for this shape, so the gate stops being blind to it — two same-named containers in unrelated packages where one inherits the member and one declares it.Related
#199 (closed; this is its precision residual, and its census now discloses the conditions), #69 (whose member arm reaches these), #196 (import evidence), #203 (the relative half, fixed), #168 (the absolute-module half of the stem hazard).
Filed 2026-09-10 against
mastere425320; measured at8a8ea5c.LineIndexphantoms survive on rust-analyzer because tier 1Q anchors on a file STEM — directions 1 and 2 (package_root_of/lib) measured and REFUSED, direction 3 is what remains #168package_root_ofreturns EMPTY when a SRC_DIRS name is the first path component, sosrc/- andlib/-headed trees can anchor no qualifier — #175's own repro still fails because of it #247buildagent referenced this issue2026-09-11 20:25:15 +02:00
views.serveandstorage.request.COOKIES#250Released in v0.28.2 through #266. The two real Django user.email occurrences at tests/auth_tests/test_models.py:281:44 and :293:31 no longer bind to the unrelated test application. They remain unresolved because inherited-member traversal is outside this fix. Shadowed import origins reject inconsistent receiver decisions after uniqueness; they cannot manufacture a new unique candidate.
The public installer/archive and both MCP transports were verified. The actual published CLI reproduced all nine final corpus projections: exactly two false bindings removed, every reference population and every other target/rule unchanged, including all 17 required controls and both ContentType controls. Upgrading actual published-v0.28.1 Flask/Django databases matched fresh v0.28.2 indexes without replacing symbol/contribution rows. Native Windows and Linux CI passed. Actual decision-filter, ambiguity, positive-control, migration and precision mutations failed their intended tests, then restored tests passed.
Occurrence-level evidence. Closing the reported false-binding defect.
Published build
0.28.2 (76e8967)was checked through both MCP transports: wrong-target references 0, positive-control references 1 in each. Published Linux CLI SHA-256:8b82e1099e7f84a84cd0c5d73f2ccbb4173803ba5ec0be0af69bea149eab6036. Release workflow: all 11 jobs passed.