The GitHub Actions job "CI" on tvm-ffi.git/junrushao/2026-07-12/tmp-squashed 
has failed.
Run started by GitHub user junrushao (triggered by junrushao).

Head commit for run:
e76c51e5637bae333922887132bc6e91bd35133b / Junru Shao <[email protected]>
feat(ffi)!: expand object, reflection, and dataclass support

Architecture:
- Make ObjectPtr<T> a first-class FFI value with retain/transfer semantics,
  runtime ancestry checks, and null-to-None encoding.
- Normalize unqualified Object subclasses to ObjectPtr storage across Array,
  List, Map, Dict, Tuple, Optional, Variant, and Expected while preserving
  shorthand and explicit interoperability with storage-compatible covariance.
- Separate py_class registration from owner-local annotation resolution so
  forward references, mixins, and mutually recursive classes resolve without
  merging inherited annotations.
- Placement-construct and destroy native object-valued fields in Python-defined
  objects so Python allocation follows the C++ field lifetime contract.
- Move IntEnum and StrEnum payload storage and lookup into native bases, with
  reflected type attributes handling conversion and JSON singleton restoration.

Public Interfaces:
- Add direct Any, reflected-field, parameter, and container support for
  ObjectPtr<T>. Qualified Object pointees remain unsupported, and
  Optional<ObjectPtr<T>> cannot distinguish absent from present-null over FFI.
- Export tvm_ffi.utils.init_property.
- Add ObjectDef::def_type_attr(), ObjectDef::def_convert<T>(), constant-valued
  TypeAttrDef::def(), and TypeAttrDef::def_convert<T>().
- Change @py_class structural_eq from opt-in to "tree" by default; explicit
  None now opts out.
- Make payload enum subclasses inherit ffi.IntEnum or ffi.StrEnum native
  storage and reject subclass-owned value fields.
- Accept device strings in typed conversion, expose ancestor-aware type
  attribute lookup, and broaden generated List and Dict input annotations to
  Sequence and Mapping.
- Keep the stable C ABI unchanged; compatibility changes affect public C++
  templates, reflected object behavior, and Python APIs.

UI/UX:
- none

Behavioral Changes:
- Preserve enum singleton identity through structural comparison, deep copy,
  JSON serialization, generated constructors, and reflected field assignment.
- Compute init_property values once after FFI initialization, store them in
  reflected native memory, and exclude them from initialization and structural
  identity.
- Route recognized __ffi_* hooks to type-attribute columns while allowing
  other marked FFI-prefixed and Python protocol methods.
- Preserve nested __ffi_convert__ failures and field paths in conversion
  diagnostics, and accept internal Device and DataType carriers without
  wrapper assumptions.
- Export ffi::Error on Windows and refine inline stubs and shared
  missing-value handling.

Docs:
- Document ObjectPtr ownership, container shorthand, qualifier limits,
  covariance, and null/optional semantics in the C++ language guide.
- Document tree-by-default structural equality and explicit opt-out.
- Document native payload-enum storage, singleton identity, deep-copy
  behavior, and scalar JSON round trips.
- Keep reflection-builder and init_property details covered by API/source
  documentation and tests rather than dedicated guides.

Tests:
- Executed: uv pip install --force-reinstall --verbose --group test -e .;
  runtime-residue smoke checks.
- Result: editable installation and smoke checks passed.
- Executed: .venv/bin/python -m pytest -vvs
  tests/python/test_dataclass_py_class.py
  tests/python/test_dataclass_c_class.py tests/python/test_object.py.
- Result: 508 tests passed.
- Executed: clean Debug build of tvm_ffi_tests and the full CTest suite.
- Result: the build passed; 444 enabled tests passed and 2 existing tests
  remained disabled.
- Executed: uv run tvm-ffi-stubgen python; targeted pre-commit hooks;
  pre-commit run check-asf-header --all-files; targeted clang-tidy on the three
  changed public headers and Dict/List tests; git diff --check; and
  git diff --cached --check.
- Result: all executed generation, lint, static-analysis, and diff checks
  passed.
- Executed for this removal: .venv/bin/python -m pytest -vvs
  tests/python/utils/test_filelock.py; targeted pre-commit hooks on all three
  restored Python paths; exact parent-blob comparison; git diff --check; and
  git diff --cached --check.
- Result: 5 tests passed, all hooks and diff checks passed, and every restored
  blob matched HEAD^ and 62ba9b4a exactly. This removal touched only Python
  files, so no rebuild was needed; the earlier build, 508-test Python run,
  444-test CTest run, and clang-tidy evidence remain valid.

Untested Edge Cases:
- Rust tests and the remainder of the Python test suite were not run locally.
- Windows/MSVC, free-threaded Python, and non-host architectures were not
  exercised locally; CI remains responsible for platform coverage.

BREAKING CHANGE: @py_class now uses structural_eq="tree" unless
structural_eq=None is passed explicitly. IntEnum and StrEnum subclasses must
stop declaring a value field and assign payloads through entry(value=) or
variant literals. Rebuild C++/Cython extensions so reflected behavior, enum
ancestry, and native payload storage match the updated implementation.

Refs: https://github.com/apache/tvm-ffi/pull/662

Report URL: https://github.com/apache/tvm-ffi/actions/runs/29269929536

With regards,
GitHub Actions via GitBox


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to