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

3.9 KiB

Quick Reference — "I See X, Do Y"

You see this Do this Details
serializers.JSONField() Create custom field class + @extend_schema_field(PydanticModel) serializer-fields.md
serializers.ListField() without child= Add child=serializers.CharField() (or appropriate type) serializer-fields.md
serializers.DictField() without child= Add child= with typed values serializer-fields.md
Any field without help_text Add help_text="..." describing purpose, format, constraints serializer-fields.md
CharField for a fixed set of values Change to ChoiceField(choices=[...]) serializer-fields.md
SerializerMethodField without annotation Add @extend_schema_field(...) on its get_* method serializer-fields.md
request: ValidatedRequest with typed DTO Use TypedRequest[MyDTO] for type-safe validated_data viewset-annotations.md
Plain ViewSet with serializer.is_valid() Replace with @validated_request decorator viewset-annotations.md
@action without @extend_schema Add @extend_schema(request=..., responses=...) above @action viewset-annotations.md
@extend_schema on class (not method) Move to the actual handler method (get, post, create, etc.) viewset-annotations.md
responses={400: OpenApiTypes.OBJECT} Use OpenApiResponse(description="...") viewset-annotations.md
Same serializer for read + write with read_only fields Split into separate read/write serializers viewset-annotations.md
Custom @action returning non-paginated data Set pagination_class=None on the action viewset-annotations.md
fields = "__all__" on ModelSerializer Explicitly list fields — __all__ leaks internal fields to the API General DRF practice
Endpoint returns raw dict/list (no response serializer) Create a response serializer so downstream types are generated viewset-annotations.md
Streaming/SSE endpoint Use @extend_schema(request=InputSerializer, responses={(200, "text/event-stream"): OpenApiTypes.STR}) viewset-annotations.md