Build1 distinct publisher3 min readUpdated
JetBrains says 263 fixes shipped across the 2026.2 line. The five-ticket SQLAlchemy 2.0 cluster is the one with a scheduling argument attached for teams on modern declarative models.
The Engineer · Build desk
Compiled by The EngineerSomething wrong?How this is made
JetBrains says the PyCharm 2026.2 release line shipped 263 fixes and improvements, with a stated focus on more precise type inference, fewer false positives, smarter completion and imports, and more reliable refactoring [1]. The item on that list with an actual upgrade argument attached is SQLAlchemy: the company describes the ORM as a long-standing source of false positives, enough that duplicate tickets accumulated over the years, and says this release resolves a batch of them for the 2.0 style [2].
Four specifics. String forward references inside `Mapped[...]` now resolve, so `Mapped[list["Post"]]` on a `relationship()` ties `"Post"` to the model class [3]. `Session.get()` yields the mapped type rather than the class object: `reveal_type` on `session.get(Report, report_id)` previously gave `type[Report] | None` and now gives `Report | None` [4]. Hybrid property setters written in the modern `@name.inplace.setter` form are recognized, so assigning to the property no longer produces a warning [5]. Model class attributes defined via mixins are picked up again, clearing the old unexpected-argument reports on model constructors [6]. Five tickets are cited against that group: PY-78816, PY-65142, PY-59732, PY-51906 and PY-28762 [7], more ticket IDs than any other group in the post [9].
That mixin item is the tell for how these bugs get consumed. A false unexpected-argument warning on every model constructor in a codebase with declarative mixins is not a minor irritation; it is the kind of noise that gets an inspection disabled team-wide, after which it stops catching real errors too. The `Session.get()` case is quieter and worse: an editor that believes it is holding `type[Report]` will complete the wrong names and stay silent about instance attribute access it cannot see. None of this alters runtime behavior. It alters whether the warnings your team has trained itself to scroll past are worth reading again.
The neighboring inference work lands on the same codebases. Strings used as metadata inside `Annotated[...]`, a Pydantic discriminator field name in JetBrains' example, are no longer parsed as forward references and flagged unresolved [8]. `isinstance` on an `int | float` union no longer narrows the `else` branch to `Never` and reports it unreachable, and narrowing survives a `while` loop, so re-narrowing an optional attribute inside the body stops producing a bogus missing-attribute error [10]. Augmented assignment was misanalyzed: `foo = 5` followed by `foo /= 2` inferred `int` and now infers `float | int` [11]. Enum member `.value` and `.name` return precise `Literal` types instead of a widened `str` or `int`, which JetBrains notes matches mypy's inference [12]. Starred expressions keep their element types, so returning `(1, *a())` where `a()` is `tuple[int, int]` no longer draws a spurious mismatch against `tuple[int, int, int]` [13]. Parameters of a decorated function are inferred from the decorator's `Callable` constraint rather than falling back to `Any` [14].
Worth keeping in proportion: this is JetBrains' own account of its own bug fixes, demonstrated on short snippets. The test is whether the same inference holds on a real declarative base with several layers of mixins, `TypeDecorator` columns and generated relationships, which is where the duplicate tickets came from in the first place. Teams that suppressed the ORM inspections years ago should re-enable them on a branch before assuming the noise is gone.
Follow any of these and your For You feed starts watching them — no settings page required.
Ranked by verification strength, evidence, and original report placement.
Across the PyCharm 2026.2 release line, JetBrains shipped 263 fixes and improvements, many improving Python code insight with more precise type inference, fewer false positives, smarter completion and imports, and more reliable refactoring.
SQLAlchemy has been a long-standing source of false positives in PyCharm, enough that several duplicate tickets accumulated over the years; the 2026.2 release resolves a batch of them for the 2.0 style.
String forward-references inside Mapped[...] now resolve correctly, e.g. posts: Mapped[list["Post"]] = relationship(back_populates="author") resolves "Post" to the model class.
PyCharm now correctly infers the mapped type returned by Session.get() instead of treating the result as the model class itself: reveal_type(session.get(Report, report_id)) was type[Report] | None and is now Report | None.
Modern hybrid_property setters written as @name.inplace.setter are recognized, so assigning to the property no longer produces a warning.
Model class attributes defined via mixins are picked up again, clearing the old unexpected argument reports on model constructors.
Evidence-backed comparisons of source perspectives and observed adoption signals. Read the methodology
Which Builder, Operator, and Investor concerns the observed source mix emphasized—not a truth score.
Evidence, demonstrated adoption, hype gap, incentives, and confidence are assessed independently, each on its own current evidence. How these are measured.
Detailed first-party changelog, no outside check
The single source is the vendor's own release-notes post, but it is specific and falsifiable: per-group YouTrack ticket IDs, before/after reveal_type snippets for Session.get(), augmented assignment, enum Literal, starred expressions and decorator-inferred parameters, and named inspection messages. That is strong evidence for what changed in the product; it is not independent, and no second publisher or user report in the cluster corroborates the behaviour.
Shipped in stable line, uptake unmeasured
The only adoption signal is that the fixes are stated to have shipped across the PyCharm 2026.2 release line, which puts them in front of users of a widely distributed IDE. Nothing in the cluster reports install or upgrade numbers, user confirmations, re-enabled inspection profiles, or any third-party deployment, so real uptake of these specific fixes is unquantified.
Claims sit slightly below their evidence
The vendor post is written as a maintenance changelog: narrow, mechanically specific claims with code examples and ticket IDs, no performance or productivity superlatives, and one claim explicitly aligned to mypy's behaviour. If anything the framing understates the practical impact for teams that switched SQLAlchemy inspections off, since the largest cited fix cluster is buried in a general 263-fix roundup. The absence of any adoption evidence keeps this only marginally negative rather than strongly so.
Single vendor writing about its paid product
Every claim in this cluster originates with JetBrains describing fixes to its own commercial IDE, on its own blog, with a headline count of 263 fixes and improvements. The vendor benefits from the impression of responsiveness to long-accumulated SQLAlchemy complaints, and there is no independent publisher, user report, or competing account in the cluster to offset that interest. The per-ticket attributions and reproducible examples are a partial constraint on the incentive, since they can be checked.
Authoritative on behaviour, blind on impact
Confidence is high that the described inference and inspection changes exist as stated, because the publisher is the product's maker and documents each change with examples and ticket IDs. Confidence is much lower on anything beyond that: single-source cluster, no independent reproduction, no measure of how many teams upgraded or re-enabled inspections, and no statement of which SQLAlchemy false positives remain.
build
Return the admission record, not the log line: one memory service's case for receipts1 distinct publisher
build
Live-demo failures are mostly a settings problem: one speaker's Rider checklist1 distinct publisher
build
Force the tool call, then hand Lightsail a long-lived key1 distinct publisher
build
Stop timing your GraphQL tests and start counting loader calls1 distinct publisher
Distinct publishers with included, body-backed reporting in this cluster.
1 article · August 19, 2026