Files
zeekay 1b367e2b62 chore: rebase the tree onto upstream master
The tree was a debranded snapshot of upstream taken around 2026-02-20, and
upstream has moved about five months since. This replaces it with upstream
master, mechanically re-derived: bin/debrand does the rename, and the
pipeline and squashed migrations are restored from the shipped tree.

Not a merge. The previous import replaced the tree wholesale in a single
commit, so there is no shared content history to merge against. Reproducing
the rename on the new tree is what actually converges.

What survives: .hanzo/workflows, the Dockerfiles and bin/docker* entrypoints,
compose files, LLM.md, and insights/migrations. The squashed initial
migration is load-bearing — the live database records it by name, so
upstream's ~918 individual migrations cannot come back.

Nine products are dropped as unreferenced. Twenty-one more that we do not run
are kept anyway because the core app still imports them; unpicking those is a
refactor and does not belong in a rebase.

This base does not build yet, and the reasons are not in the rename:
upstream now wants Python 3.13.13 against our 3.12.12 and Django 5.2 against
our 4.2, and the dependency manifests still name upstream packages that we
republish under our own names. Those are decisions, not renames.
2026-08-01 15:44:40 -07:00

1.3 KiB

Ty Type Checking

ty runs in CI as an informational check to evaluate its usefulness vs mypy. If you see ty annotations on your PR:

  • Review the feedback — ty often catches real type issues
  • Share your experience in #team-devex
  • ty warnings are informational and don't block CI

Manual Usage

uv run ty check path/to/file.py    # Check specific files
uv run ty check insights ee         # Check directories

Ty vs mypy: Fast trial vs authoritative checking

ty is currently in trial mode:

  • Extremely fast (~10-100x faster than mypy)
  • Alpha software — expect edge cases
  • Runs in CI (informational, non-blocking) and as a lint-staged pre-commit check to gather feedback
  • Uses GitHub problem matcher to show warnings inline

mypy remains the authoritative type checker:

  • More mature and comprehensive
  • Slower but thorough
  • Final source of truth (runs in CI and blocks on errors)
  • Recommended for local deep checks

This trial helps us evaluate whether ty should become a blocking check in the future.

Configuration

ty rule categories where ty disagrees with mypy on idiomatic Django/DRF code are suppressed in pyproject.toml under [tool.ty.rules]. This replaced the earlier ty-baseline.txt filter file (removed in #55368). Add a new <rule> = "ignore" there if CI surfaces a spurious ty category.