You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Our check-typing recipe runs Astral's tyunpinned (we deliberately ride the
latest release and adjust on the go — tyships near-daily and we want to stay
current rather than freeze). ty 0.0.53 started emitting two diagnostic classes on
our existing, unchanged source that the recipe's --ignore allowlist does not yet
cover, so ty check now exits 1 and the Code Quality Checks job fails.
This is pure toolchain drift — not a code regression. The fix is to add the two
new rules to the recipe's ignore list.
Evidence
Surfaced on PR #1887 (an unrelated one-line example cleanup), CI run 75977933002,
job Code Quality Checks → "Code static typing (via ty)":
+ ty==0.0.53
...
Found 922 diagnostics
error: recipe `check-typing` failed with exit code 1
##[error]Process completed with exit code 1.
Diagnostic breakdown — 0 errors, all warnings:
count
rule
where
921
warning[possibly-missing-submodule]
vendored src/autobahn/wamp/gen/** (FlatBuffers-generated), plus a few flatbuffers.* re-export sites in message_fbs.py / message.py / protocol.py
Every diagnostic is in src/autobahn/…; none in examples/ or .audit/, confirming
PR #1887 is not the cause.
Timeline confirms drift, not code:
last green master run: 2026-06-19 (Fix 1878, Fix 1878 #1879) on an earlier ty
this run: 2026-06-25 picked up ty 0.0.53 → red
Master HEAD would be red on a re-run today; the breakage is independent of any open PR.
Root cause
check-typing (in justfile) invokes ty check … src/autobahn/ with an explicit --ignore <rule> allowlist (the # FIXME: Many ignores needed until type annotations are fixed block). ty 0.0.53 emits possibly-missing-submodule (the vendored
FlatBuffers runtime uses flatbuffers.number_types / flatbuffers.encode / flatbuffers.packer submodule access that ty can't statically resolve) and flags
the now-redundant blanket # type: ignore in util.py as unused-type-ignore-comment
— neither is in the allowlist, so ty returns a non-zero exit.
possibly-missing-submodule — fires on vendored, generated FlatBuffers code we do
not hand-maintain; the imports are correct at runtime. Ignore (consistent with the
existing unresolved-import / unresolved-attribute ignores for the same generated
surface).
unused-type-ignore-comment — a single stale # type: ignore in util.py:1062.
Ignoring the rule keeps this CHORE minimal and drift-only. (Optional follow-up: just
delete the now-unneeded comment instead — but verify it doesn't resurface a different
diagnostic on that assignment under the current ty.)
Explicitly not pinning ty. Policy is to ride the latest release and extend the
ignore list as ty evolves; pinning is rejected here on purpose.
Acceptance criteria
just check-typing (all venvs: cpy311–314, pypy311) exits 0 against current
master with ty 0.0.53.
Code Quality Checks job is green.
No source change required beyond the recipe (the optional util.py comment
removal can be a separate tidy-up).
This is the same class of issue addressed in crossbar by "handle ty rule name
differences across versions in check-typing" — autobahn's recipe is the static --ignore variant and will keep needing these top-ups as ty advances. A future
hardening (out of scope here) could auto-tolerate unknown/warning-level rules the way
crossbar's recipe does.
Checklist
I have searched existing issues to avoid duplicates
Summary
Our
check-typingrecipe runs Astral'styunpinned (we deliberately ride thelatest release and adjust on the go —
tyships near-daily and we want to staycurrent rather than freeze).
ty 0.0.53started emitting two diagnostic classes onour existing, unchanged source that the recipe's
--ignoreallowlist does not yetcover, so
ty checknow exits1and the Code Quality Checks job fails.This is pure toolchain drift — not a code regression. The fix is to add the two
new rules to the recipe's ignore list.
Evidence
Surfaced on PR #1887 (an unrelated one-line example cleanup), CI run
75977933002,job Code Quality Checks → "Code static typing (via ty)":
Diagnostic breakdown — 0 errors, all warnings:
warning[possibly-missing-submodule]src/autobahn/wamp/gen/**(FlatBuffers-generated), plus a fewflatbuffers.*re-export sites inmessage_fbs.py/message.py/protocol.pywarning[unused-type-ignore-comment]src/autobahn/util.py:1062(tags = OrderedDict() # type: ignore)Every diagnostic is in
src/autobahn/…; none inexamples/or.audit/, confirmingPR #1887 is not the cause.
Timeline confirms drift, not code:
Fix 1878, Fix 1878 #1879) on an earliertyty 0.0.53→ redMaster HEAD would be red on a re-run today; the breakage is independent of any open PR.
Root cause
check-typing(injustfile) invokesty check … src/autobahn/with an explicit--ignore <rule>allowlist (the# FIXME: Many ignores needed until type annotations are fixedblock).ty 0.0.53emitspossibly-missing-submodule(the vendoredFlatBuffers runtime uses
flatbuffers.number_types/flatbuffers.encode/flatbuffers.packersubmodule access thattycan't statically resolve) and flagsthe now-redundant blanket
# type: ignoreinutil.pyasunused-type-ignore-comment— neither is in the allowlist, so
tyreturns a non-zero exit.Proposed fix
Add to the
check-typingrecipe's ignore list:Rationale per rule:
possibly-missing-submodule— fires on vendored, generated FlatBuffers code we donot hand-maintain; the imports are correct at runtime. Ignore (consistent with the
existing
unresolved-import/unresolved-attributeignores for the same generatedsurface).
unused-type-ignore-comment— a single stale# type: ignoreinutil.py:1062.Ignoring the rule keeps this CHORE minimal and drift-only. (Optional follow-up: just
delete the now-unneeded comment instead — but verify it doesn't resurface a different
diagnostic on that assignment under the current
ty.)Explicitly not pinning
ty. Policy is to ride the latest release and extend theignore list as
tyevolves; pinning is rejected here on purpose.Acceptance criteria
just check-typing(all venvs: cpy311–314, pypy311) exits0against currentmaster with
ty 0.0.53.Code Quality Checksjob is green.util.pycommentremoval can be a separate tidy-up).
Notes
fix_<n>branch / PR, merged to master, then merged into PR Remove duplicate run call for ApplicationRunner #1887so that PR can go green (its example/audit change is unrelated and correct).
differences across versions in check-typing" — autobahn's recipe is the static
--ignorevariant and will keep needing these top-ups astyadvances. A futurehardening (out of scope here) could auto-tolerate unknown/warning-level rules the way
crossbar's recipe does.
Checklist