343 commits in all time Dec 17, 2025 17:34 – Mar 17, 2026 17:34 UTC
Merge 1d6f006820a443ac3fccc3840aec1f2011557de9 into 52d094d416ea0f4e0196f0a063df49646ee2d094
Git Commit fdb16af4 Branch pull/263/merge Document 85/3,172 ++ 181 --
refactor: consolidate 211 schema files into 3 modules
Replace per-class file structure (algod/82 files + indexer/72 files +
kmd/54 files + 3 __init__.py) with one module per client (algod.py,
indexer.py, kmd.py).

Benefits:
- 211 files → 3 files
- Eliminates __init__.py boilerplate (imports, model_rebuild, __all__)
- Eliminates forward reference strings — topological sort enables
  direct class references
- from __future__ import annotations handles remaining edge cases
- No ruff per-file overrides needed (was 9 suppressed rules)
- Import paths unchanged: `from tests.fixtures.schemas.algod import X`

Generator improvements:
- Topological sort of schemas by dependency order
- PascalCase class names (ed25519PublicKey → Ed25519PublicKey)
- Docstring escaping and truncation for ruff compliance
- Cleaner module assembly — shared imports at top
Git Commit 1d6f0068 Branch refactor/schema-validation Document 216/2,325 ++ 3,131 --
Merge 37871cd0b9b9959f2187b7f7fb70a4b588f632f9 into 52d094d416ea0f4e0196f0a063df49646ee2d094
Git Commit 57f46652 Branch pull/263/merge Document 85/3,172 ++ 181 --
refactor: consolidate 211 schema files into 3 modules
Replace per-class file structure (algod/82 files + indexer/72 files +
kmd/54 files + 3 __init__.py) with one module per client (algod.py,
indexer.py, kmd.py).

Benefits:
- 211 files → 3 files
- Eliminates __init__.py boilerplate (imports, model_rebuild, __all__)
- Eliminates forward reference strings — topological sort enables
  direct class references
- from __future__ import annotations handles remaining edge cases
- No ruff per-file overrides needed (was 9 suppressed rules)
- Import paths unchanged: `from tests.fixtures.schemas.algod import X`

Generator improvements:
- Topological sort of schemas by dependency order
- PascalCase class names (ed25519PublicKey → Ed25519PublicKey)
- Docstring escaping and truncation for ruff compliance
- Cleaner module assembly — shared imports at top
Git Commit 37871cd0 Branch refactor/schema-validation Document 216/2,325 ++ 3,131 --
Merge 130d33fa3caa7105703e2ac10c41764969ddb4aa into 52d094d416ea0f4e0196f0a063df49646ee2d094
Git Commit c1f20446 Branch pull/263/merge Document 293/3,978 ++ 181 --
fix: update snapshots for enum serialization (repr → value)
Snapshots now use enum .value ("noop") instead of repr
("<OnCompletion.NOOP: 'noop'>") to match the corrected
_dataclass_to_dict serializer. Only enum formatting changed —
no mock server data diffs.
Git Commit 130d33fa Branch refactor/schema-validation Document 7/45 ++ 45 --
Merge d4c571d6034f33e64718a0a3d4fe6bc44b158a28 into 52d094d416ea0f4e0196f0a063df49646ee2d094
Git Commit 449a2dd2 Branch pull/263/merge Document 300/4,023 ++ 226 --
chore: deduplicate RootModel templates, fix missing newlines at EOF
- Refactor generate_schema() to extract _root_model() and
  _is_byte_array() helpers, eliminating 3 copies of identical
  RootModel[str] template
- Fix missing newline at EOF in 6 docs/config files (pre-commit)
Git Commit 2bb3361b Branch refactor/schema-validation Document 7/26 ++ 37 --
chore: deduplicate RootModel templates, fix missing newlines at EOF
- Refactor generate_schema() to extract _root_model() and
  _is_byte_array() helpers, eliminating 3 copies of identical
  RootModel[str] template
- Fix missing newline at EOF in 6 docs/config files (pre-commit)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Git Commit d4c571d6 Branch refactor/schema-validation Document 7/26 ++ 37 --
feat: add schema validation to polytests, aligned with TS approach
Mirrors the TypeScript variant's pattern of calling Schema.parse(result)
in every polytest to validate real API responses against OAS-generated
schemas, closing the gap between spec and implementation.

Schema generator improvements:
- Use IdentifierSanitizer-compatible _to_snake() for field naming
  (handles camelCase, Python builtins, x-algokit-field-rename)
- Handle string/enum types as RootModel[str]
- Handle byte arrays (uint8[]) as RootModel[str] (base64)
- Handle opaque empty schemas as RootModel[str]

Polytest changes:
- Added validate_with_schema() to 55 polytests across algod, indexer,
  and kmd clients
- Serializer now handles Python Enum values correctly
- Updated snapshots for enum serialization changes
- 1 known OAS spec mismatch documented (apps-local-states required
  but API returns null)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Git Commit 6d383618 Branch refactor/schema-validation Document 122/478 ++ 258 --
feat: add schema validation to polytests, aligned with TS approach
Mirrors the TypeScript variant's pattern of calling Schema.parse(result)
in every polytest to validate real API responses against OAS-generated
schemas, closing the gap between spec and implementation.

Schema generator improvements:
- Use IdentifierSanitizer-compatible _to_snake() for field naming
  (handles camelCase, Python builtins, x-algokit-field-rename)
- Handle string/enum types as RootModel[str]
- Handle byte arrays (uint8[]) as RootModel[str] (base64)
- Handle opaque empty schemas as RootModel[str]

Polytest changes:
- Added validate_with_schema() to 55 polytests across algod, indexer,
  and kmd clients
- Serializer now handles Python Enum values correctly
- Updated snapshots for enum serialization changes
- 1 known OAS spec mismatch documented (apps-local-states required
  but API returns null)
Git Commit 4866b7c1 Branch refactor/schema-validation Document 122/478 ++ 258 --
fix: enforce required fields, fix docs, restore targeted lint rules
- Generator: required fields no longer get default=None (Pydantic
  actually validates them now)
- Generator: only emit `from typing import Any` when used
- Generator: add timeout and error handling to fetch_spec
- Docs: fix stale import paths in README.md and VALIDATION.md after
  schema move to tests/fixtures/
- Lint: revert global PLC0415/FBT001/FBT002/PLW1641 suppression,
  restore targeted noqa comments on specific lines
- Tests: provide all required fields, add test_missing_required_fields
- Snapshots: update mock server snapshots to match current HAR data

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Git Commit 0b3d8c33 Branch refactor/schema-validation Document 216/522 ++ 736 --
fix: enforce required fields, fix docs, restore targeted lint rules
- Generator: required fields no longer get default=None (Pydantic
  actually validates them now)
- Generator: only emit `from typing import Any` when used
- Generator: add timeout and error handling to fetch_spec
- Docs: fix stale import paths in README.md and VALIDATION.md after
  schema move to tests/fixtures/
- Lint: revert global PLC0415/FBT001/FBT002/PLW1641 suppression,
  restore targeted noqa comments on specific lines
- Tests: provide all required fields, add test_missing_required_fields
- Snapshots: update mock server snapshots to match current HAR data
Git Commit c6865646 Branch refactor/schema-validation Document 216/522 ++ 736 --
fix: unblock check-python after alpha merge
Git Commit d7a24ffa Branch refactor/schema-validation Document 8/20 ++ 13 --
chore: move schemas to tests folder to avoid polluting prod packages exposed to end users
Git Commit f314538e Branch refactor/schema-validation Document 219/298 ++ 63 --
chore: generate the validation schemas
Git Commit 8f42ef53 Branch refactor/schema-validation Document 214/3,088 ++ 27 --
feat: adds runtime validation using Pydantic schemas
Implements runtime validation of API client responses using Pydantic schemas.
This provides an additional layer of sanity checks on top of generated API clients.

The schemas are generated from OpenAPI specifications using a new script.
Adds a new `poe` task to easily regenerate schemas.
Adds tests to validate the generated schemas.

Pydantic is added as a development dependency.

Validation schemas are optional, requiring `pydantic>=2.0` to be installed.
Git Commit 89938be5 Branch refactor/schema-validation Document 8/509 ++ 10 --
Merge f0916359d904f0619de3ba09dc07626258a97889 into 52d094d416ea0f4e0196f0a063df49646ee2d094
Git Commit 2125bd5a Branch pull/263/merge Document 245/5,301 ++ 657 --
fix: remove stale generated algod model
Git Commit f0916359 Branch refactor/schema-validation Document 1/0 ++ 29 --
fix: unblock check-python after alpha merge
Git Commit 51048153 Branch refactor/schema-validation Document 8/20 ++ 13 --
Merge branch 'alpha' into refactor/schema-validation
Git Commit 0d484e6c Branch refactor/schema-validation Document 300/54,686 ++ 13,448 --
joe-p algokit-utils-py
Merge cdfa3f68cda3ea3a6e6fb01e297c01a4393ef87f into 52d094d416ea0f4e0196f0a063df49646ee2d094
Git Commit 3e615762 Branch pull/266/merge Document 11/2,286 ++ 1,164 --
joe-p algokit-utils-py
chore: rm hash
Git Commit cdfa3f68 Branch alpha-feat/crypto Document 1/0 ++ 0 --
Merge a146f3d41c7013c1ac3ad3b7aea782a48f63b846 into 6971b957fbe298facdda00dca158c0a7eb9690df
Git Commit 973ef240 Branch pull/281/merge Document 2/9 ++ 9 --
chore(deps): bump setuptools from 80.9.0 to 82.0.1
Bumps [setuptools](https://github.com/pypa/setuptools) from 80.9.0 to 82.0.1.
- [Release notes](https://github.com/pypa/setuptools/releases)
- [Changelog](https://github.com/pypa/setuptools/blob/main/NEWS.rst)
- [Commits](https://github.com/pypa/setuptools/compare/v80.9.0...v82.0.1)

---
updated-dependencies:
- dependency-name: setuptools
  dependency-version: 82.0.1
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Git Commit a146f3d4 Branch dependabot/pip/setuptools-82.0.1 Document 2/9 ++ 9 --