From 72caaf90b286dd12a5b7e55d61b140db2903dd67 Mon Sep 17 00:00:00 2001 From: Brad Barnett <127794626+bdbarnett@users.noreply.github.com> Date: Tue, 3 Nov 2026 16:21:32 -0600 Subject: [PATCH 1/2] Docstrings: Google sections and single-backtick cross-references --- binding/helpers.py | 2 +- binding/ir.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/binding/helpers.py b/binding/helpers.py index cdbf799..2c94b1e 100644 --- a/binding/helpers.py +++ b/binding/helpers.py @@ -11,7 +11,7 @@ # Prevent identifier names which are Python reserved words (add underscore in such case) def export_name(name, kind): - """Delegate to :mod:`binding.naming` for Python export identifiers.""" + """Delegate to `binding.naming` for Python export identifiers.""" from .naming import export_name as _export_name return _export_name(name, kind) diff --git a/binding/ir.py b/binding/ir.py index 6e30b3c..0c944cf 100644 --- a/binding/ir.py +++ b/binding/ir.py @@ -176,7 +176,7 @@ def callback_typedefs(self) -> Mapping[str, CType]: @dataclass(frozen=True) class DeclarationIndex: - """Read-only indexes and relationship queries over :class:`DeclarationIR`.""" + """Read-only indexes and relationship queries over `DeclarationIR`.""" ir: DeclarationIR functions_by_name: Mapping[str, CFunction] From 4954dc307bbacf6454117ada4bd3af37ab18aeaf Mon Sep 17 00:00:00 2001 From: Brad Barnett <127794626+bdbarnett@users.noreply.github.com> Date: Tue, 3 Nov 2026 16:21:32 -0600 Subject: [PATCH 2/2] Licence headers on every Python file --- binding/__init__.py | 4 ++++ binding/analyze.py | 4 ++++ binding/api_model.py | 4 ++++ binding/api_policy.py | 4 ++++ binding/api_report.py | 4 ++++ binding/artifacts.py | 4 ++++ binding/context.py | 4 ++++ binding/emit_backend.py | 4 ++++ binding/emit_c_cpython.py | 4 ++++ binding/emit_c_micropython_style.py | 4 ++++ binding/emit_circuitpython.py | 4 ++++ binding/emit_circuitpython_glue.py | 4 ++++ binding/emit_cpython.py | 4 ++++ binding/emit_cpython_glue.py | 4 ++++ binding/emit_cpython_native.py | 4 ++++ binding/emit_micropython.py | 4 ++++ binding/emit_pyi.py | 4 ++++ binding/emit_pyi_canonical.py | 4 ++++ binding/generate.py | 4 ++++ binding/generator.py | 4 ++++ binding/helpers.py | 4 ++++ binding/ir.py | 4 ++++ binding/naming.py | 4 ++++ binding/parse.py | 4 ++++ binding/preprocess.py | 4 ++++ binding/runtime.py | 4 ++++ binding/runtime_exports.py | 4 ++++ binding/util.py | 4 ++++ binding/verify_api.py | 4 ++++ binding/verify_namespace.py | 4 ++++ binding/verify_pyi.py | 4 ++++ docs/conf.py | 4 ++++ ports/circuitpython/manifest.py | 4 ++++ ports/circuitpython/tests/test_circuitpython_port.py | 4 ++++ ports/circuitpython/tests/test_lvgl_jpeg_decode.py | 4 ++++ ports/micropython/manifest.py | 4 ++++ ports/micropython/tests/test_gc_finaliser_flag.py | 4 ++++ ports/micropython/tests/test_micropython_port.py | 4 ++++ setup.py | 4 ++++ tests/test_api_model.py | 4 ++++ tests/test_api_policy.py | 4 ++++ tests/test_api_report.py | 4 ++++ tests/test_cpython_callback_references.py | 4 ++++ tests/test_cpython_gil_declaration.py | 4 ++++ tests/test_generation_tools.py | 4 ++++ tests/test_ir.py | 4 ++++ tests/test_nesting_export.py | 4 ++++ tests/test_pyi_canonical.py | 4 ++++ tests/test_pyi_generation.py | 4 ++++ tests/test_release_workflow.py | 4 ++++ tests/test_verify_api.py | 4 ++++ tests/test_verify_pyi.py | 4 ++++ tools/hash_artifacts.py | 4 ++++ tools/test_lvgl_smoke.py | 4 ++++ tools/verify_upstream_baseline.py | 4 ++++ 55 files changed, 220 insertions(+) diff --git a/binding/__init__.py b/binding/__init__.py index 46891a5..92b6b8f 100644 --- a/binding/__init__.py +++ b/binding/__init__.py @@ -1 +1,5 @@ +# SPDX-FileCopyrightText: 2026 Brad Barnett +# +# SPDX-License-Identifier: MIT + """LVGL binding generator: preprocess → analyze → emit (.c and .pyi).""" diff --git a/binding/analyze.py b/binding/analyze.py index b0e1084..f0660e9 100644 --- a/binding/analyze.py +++ b/binding/analyze.py @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2026 Brad Barnett +# +# SPDX-License-Identifier: MIT + """Walk preprocessed C AST; build func/object/enum/struct metadata for emit.""" from __future__ import print_function diff --git a/binding/api_model.py b/binding/api_model.py index 8197733..0b27890 100644 --- a/binding/api_model.py +++ b/binding/api_model.py @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2026 Brad Barnett +# +# SPDX-License-Identifier: MIT + """Target-neutral public API model built from the declaration IR. This module describes the API independently of any C runtime or binding diff --git a/binding/api_policy.py b/binding/api_policy.py index 81b66d0..1460f3d 100644 --- a/binding/api_policy.py +++ b/binding/api_policy.py @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2026 Brad Barnett +# +# SPDX-License-Identifier: MIT + """Auditable visibility and target-availability policy for the API model.""" from __future__ import annotations diff --git a/binding/api_report.py b/binding/api_report.py index af7196f..391d5ae 100644 --- a/binding/api_report.py +++ b/binding/api_report.py @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2026 Brad Barnett +# +# SPDX-License-Identifier: MIT + """Report canonical API inventory, target parity, and baseline compatibility. The report is deliberately observational. It validates the canonical model, diff --git a/binding/artifacts.py b/binding/artifacts.py index ac4a986..ea595a8 100644 --- a/binding/artifacts.py +++ b/binding/artifacts.py @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2026 Brad Barnett +# +# SPDX-License-Identifier: MIT + """Hash and compare generated binding artifacts.""" from __future__ import annotations diff --git a/binding/context.py b/binding/context.py index 089617a..f7e84ad 100644 --- a/binding/context.py +++ b/binding/context.py @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2026 Brad Barnett +# +# SPDX-License-Identifier: MIT + """Per-generation BindingContext; synced into runtime for analyze/emit.""" from __future__ import print_function diff --git a/binding/emit_backend.py b/binding/emit_backend.py index f2343b5..914149d 100644 --- a/binding/emit_backend.py +++ b/binding/emit_backend.py @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2026 Brad Barnett +# +# SPDX-License-Identifier: MIT + """Shared setup for target C-lowering runs. The individual emitters own VM-specific C output. This module owns only the diff --git a/binding/emit_c_cpython.py b/binding/emit_c_cpython.py index 9fd38e5..b415566 100644 --- a/binding/emit_c_cpython.py +++ b/binding/emit_c_cpython.py @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2026 Brad Barnett +# +# SPDX-License-Identifier: MIT + """Main CPython emit loop (PyObject* API); calls cpython_glue and cpython_native.""" from __future__ import print_function diff --git a/binding/emit_c_micropython_style.py b/binding/emit_c_micropython_style.py index 2475bd8..082aec1 100644 --- a/binding/emit_c_micropython_style.py +++ b/binding/emit_c_micropython_style.py @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2026 Brad Barnett +# +# SPDX-License-Identifier: MIT + """Main MP-style C emitter (mp_obj_t API); used by MicroPython and CircuitPython.""" from __future__ import print_function diff --git a/binding/emit_circuitpython.py b/binding/emit_circuitpython.py index 7946253..7d01728 100644 --- a/binding/emit_circuitpython.py +++ b/binding/emit_circuitpython.py @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2026 Brad Barnett +# +# SPDX-License-Identifier: MIT + """CircuitPython target entry: analyze → emit_c_micropython_style (target=circuitpython).""" from __future__ import print_function diff --git a/binding/emit_circuitpython_glue.py b/binding/emit_circuitpython_glue.py index 3ec3d78..5375760 100644 --- a/binding/emit_circuitpython_glue.py +++ b/binding/emit_circuitpython_glue.py @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2026 Brad Barnett +# +# SPDX-License-Identifier: MIT + """CircuitPython bookends: phase-2 enums and LVCP_MODULE_GLOBALS module table.""" from __future__ import print_function diff --git a/binding/emit_cpython.py b/binding/emit_cpython.py index eb8c2e8..89be20a 100644 --- a/binding/emit_cpython.py +++ b/binding/emit_cpython.py @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2026 Brad Barnett +# +# SPDX-License-Identifier: MIT + """CPython target entry: analyze → emit_c_cpython.""" from __future__ import print_function diff --git a/binding/emit_cpython_glue.py b/binding/emit_cpython_glue.py index 739b9b0..b3baeb7 100644 --- a/binding/emit_cpython_glue.py +++ b/binding/emit_cpython_glue.py @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2026 Brad Barnett +# +# SPDX-License-Identifier: MIT + """CPython bookends: phase-2 enum types and PyInit_lvgl / module registration.""" from __future__ import print_function diff --git a/binding/emit_cpython_native.py b/binding/emit_cpython_native.py index 171adf6..b2fc5f4 100644 --- a/binding/emit_cpython_native.py +++ b/binding/emit_cpython_native.py @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2026 Brad Barnett +# +# SPDX-License-Identifier: MIT + """CPython body codegen (phases 3–7): funcs, objects, structs, and callbacks.""" from __future__ import print_function diff --git a/binding/emit_micropython.py b/binding/emit_micropython.py index 32c7805..1deebb7 100644 --- a/binding/emit_micropython.py +++ b/binding/emit_micropython.py @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2026 Brad Barnett +# +# SPDX-License-Identifier: MIT + """MicroPython target entry: analyze → emit_c_micropython_style.""" from __future__ import print_function diff --git a/binding/emit_pyi.py b/binding/emit_pyi.py index 7634613..35c155a 100644 --- a/binding/emit_pyi.py +++ b/binding/emit_pyi.py @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2026 Brad Barnett +# +# SPDX-License-Identifier: MIT + """Generate the shared lvgl.pyi from the canonical API model.""" from __future__ import annotations diff --git a/binding/emit_pyi_canonical.py b/binding/emit_pyi_canonical.py index a1c52f0..7d9d0d8 100644 --- a/binding/emit_pyi_canonical.py +++ b/binding/emit_pyi_canonical.py @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2026 Brad Barnett +# +# SPDX-License-Identifier: MIT + """Emit the shared ``lvgl.pyi`` from the canonical API model.""" from __future__ import annotations diff --git a/binding/generate.py b/binding/generate.py index 5274d2c..476afe0 100644 --- a/binding/generate.py +++ b/binding/generate.py @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2026 Brad Barnett +# +# SPDX-License-Identifier: MIT + """Unified command for generating all LVGL binding artifacts.""" from __future__ import annotations diff --git a/binding/generator.py b/binding/generator.py index f39a21d..c21c8c2 100644 --- a/binding/generator.py +++ b/binding/generator.py @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2026 Brad Barnett +# +# SPDX-License-Identifier: MIT + """Shared analysis and target-backend orchestration.""" from __future__ import print_function diff --git a/binding/helpers.py b/binding/helpers.py index 2c94b1e..c591cfc 100644 --- a/binding/helpers.py +++ b/binding/helpers.py @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2026 Brad Barnett +# +# SPDX-License-Identifier: MIT + """Shared identifier sanitization, LVGL patterns, and export_name helpers.""" from __future__ import print_function diff --git a/binding/ir.py b/binding/ir.py index 0c944cf..efc0e87 100644 --- a/binding/ir.py +++ b/binding/ir.py @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2026 Brad Barnett +# +# SPDX-License-Identifier: MIT + """Target-neutral C declaration intermediate representation. The IR deliberately contains declarations only. Target runtime policy, diff --git a/binding/naming.py b/binding/naming.py index 5f80d54..9d0d495 100644 --- a/binding/naming.py +++ b/binding/naming.py @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2026 Brad Barnett +# +# SPDX-License-Identifier: MIT + """Established upstream-compatible Python export names.""" from __future__ import annotations diff --git a/binding/parse.py b/binding/parse.py index 16597b0..a242fb6 100644 --- a/binding/parse.py +++ b/binding/parse.py @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2026 Brad Barnett +# +# SPDX-License-Identifier: MIT + """Low-level pycparser AST helpers used by analyze and emit.""" from __future__ import print_function diff --git a/binding/preprocess.py b/binding/preprocess.py index df226f2..de8b21d 100644 --- a/binding/preprocess.py +++ b/binding/preprocess.py @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2026 Brad Barnett +# +# SPDX-License-Identifier: MIT + """Deterministic C preprocessing used by the binding generator.""" from __future__ import print_function diff --git a/binding/runtime.py b/binding/runtime.py index 381d23a..a201148 100644 --- a/binding/runtime.py +++ b/binding/runtime.py @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2026 Brad Barnett +# +# SPDX-License-Identifier: MIT + """Context-local state access for one binding generation run.""" from __future__ import print_function diff --git a/binding/runtime_exports.py b/binding/runtime_exports.py index 69cd3af..05ca206 100644 --- a/binding/runtime_exports.py +++ b/binding/runtime_exports.py @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2026 Brad Barnett +# +# SPDX-License-Identifier: MIT + """Select the canonical module-function surface for native registration.""" from __future__ import print_function diff --git a/binding/util.py b/binding/util.py index 234c28d..1d9a1c5 100644 --- a/binding/util.py +++ b/binding/util.py @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2026 Brad Barnett +# +# SPDX-License-Identifier: MIT + """Small utilities: memoize and stderr logging for analyze/emit.""" from __future__ import print_function diff --git a/binding/verify_api.py b/binding/verify_api.py index 502d84c..d51398e 100644 --- a/binding/verify_api.py +++ b/binding/verify_api.py @@ -1,4 +1,8 @@ #!/usr/bin/env python3 +# SPDX-FileCopyrightText: 2026 Brad Barnett +# +# SPDX-License-Identifier: MIT + """Validate the generated target-neutral API model and its content hash.""" from __future__ import annotations diff --git a/binding/verify_namespace.py b/binding/verify_namespace.py index c43c068..ecbf4a4 100755 --- a/binding/verify_namespace.py +++ b/binding/verify_namespace.py @@ -1,4 +1,8 @@ #!/usr/bin/env python3 +# SPDX-FileCopyrightText: 2026 Brad Barnett +# +# SPDX-License-Identifier: MIT + """Verify every native module namespace against the canonical API model.""" from __future__ import print_function diff --git a/binding/verify_pyi.py b/binding/verify_pyi.py index 28c3020..658e152 100644 --- a/binding/verify_pyi.py +++ b/binding/verify_pyi.py @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2026 Brad Barnett +# +# SPDX-License-Identifier: MIT + """Validate a generated pyi against the canonical API manifest.""" from __future__ import annotations diff --git a/docs/conf.py b/docs/conf.py index d279d26..d8fb220 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2026 Brad Barnett +# +# SPDX-License-Identifier: MIT + """Sphinx configuration for the LVGL documentation. Everything shared by the PyDevices documentation projects (theme, top bar, diff --git a/ports/circuitpython/manifest.py b/ports/circuitpython/manifest.py index f1e5899..c17271c 100644 --- a/ports/circuitpython/manifest.py +++ b/ports/circuitpython/manifest.py @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2026 Brad Barnett +# +# SPDX-License-Identifier: MIT + # Frozen Python helpers that ship with the LVGL CircuitPython integration: # fs_driver.py, kept once at the root of this repository in python/. LVGL's # PyDevices coordinator, display_driver.py, ships with pydevices (lib/): put diff --git a/ports/circuitpython/tests/test_circuitpython_port.py b/ports/circuitpython/tests/test_circuitpython_port.py index 814f9ff..9d1c361 100644 --- a/ports/circuitpython/tests/test_circuitpython_port.py +++ b/ports/circuitpython/tests/test_circuitpython_port.py @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2026 Brad Barnett +# +# SPDX-License-Identifier: MIT + from pathlib import Path diff --git a/ports/circuitpython/tests/test_lvgl_jpeg_decode.py b/ports/circuitpython/tests/test_lvgl_jpeg_decode.py index d6f6fe4..85f9429 100644 --- a/ports/circuitpython/tests/test_lvgl_jpeg_decode.py +++ b/ports/circuitpython/tests/test_lvgl_jpeg_decode.py @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2026 Brad Barnett +# +# SPDX-License-Identifier: MIT + """lv.image decodes jpegio's corpus on CircuitPython through the jpegio decoder shim. The CircuitPython half of jpegio's LVGL decoder: LVGL's diff --git a/ports/micropython/manifest.py b/ports/micropython/manifest.py index 7bcab98..2743301 100644 --- a/ports/micropython/manifest.py +++ b/ports/micropython/manifest.py @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2026 Brad Barnett +# +# SPDX-License-Identifier: MIT + # Frozen Python helpers that ship with the LVGL MicroPython usermod: fs_driver.py, # kept once at the root of this repository in python/. LVGL's PyDevices # coordinator, display_driver.py, ships with pydevices (lib/). diff --git a/ports/micropython/tests/test_gc_finaliser_flag.py b/ports/micropython/tests/test_gc_finaliser_flag.py index baa166c..0359442 100644 --- a/ports/micropython/tests/test_gc_finaliser_flag.py +++ b/ports/micropython/tests/test_gc_finaliser_flag.py @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2026 Brad Barnett +# +# SPDX-License-Identifier: MIT + """LVGL's allocations must not be flagged as having MicroPython finalisers. ``gc_alloc()``'s second argument is ``alloc_flags``, and 1 is diff --git a/ports/micropython/tests/test_micropython_port.py b/ports/micropython/tests/test_micropython_port.py index e51166a..c259c2e 100644 --- a/ports/micropython/tests/test_micropython_port.py +++ b/ports/micropython/tests/test_micropython_port.py @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2026 Brad Barnett +# +# SPDX-License-Identifier: MIT + from pathlib import Path diff --git a/setup.py b/setup.py index 8b4e1f8..0d8fcb4 100644 --- a/setup.py +++ b/setup.py @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2026 Brad Barnett +# +# SPDX-License-Identifier: MIT + """Build the lvgl CPython extension (generated/lvgl_python.c + LVGL sources). It sits at the repository root, not in ports/cpython/, because the wheel diff --git a/tests/test_api_model.py b/tests/test_api_model.py index a855a02..4506e6c 100644 --- a/tests/test_api_model.py +++ b/tests/test_api_model.py @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2026 Brad Barnett +# +# SPDX-License-Identifier: MIT + from binding.api_model import api_hash_for_dict, build_api_model from binding.ir import parse_source diff --git a/tests/test_api_policy.py b/tests/test_api_policy.py index 5818607..eda0be4 100644 --- a/tests/test_api_policy.py +++ b/tests/test_api_policy.py @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2026 Brad Barnett +# +# SPDX-License-Identifier: MIT + from pathlib import Path from binding.api_model import build_api_model diff --git a/tests/test_api_report.py b/tests/test_api_report.py index 4be5c8f..e82026e 100644 --- a/tests/test_api_report.py +++ b/tests/test_api_report.py @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2026 Brad Barnett +# +# SPDX-License-Identifier: MIT + from pathlib import Path import pytest diff --git a/tests/test_cpython_callback_references.py b/tests/test_cpython_callback_references.py index 53b0dbe..7db0c5e 100644 --- a/tests/test_cpython_callback_references.py +++ b/tests/test_cpython_callback_references.py @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2026 Brad Barnett +# +# SPDX-License-Identifier: MIT + """Every CPython callback trampoline owns what it touches during the call. A trampoline looks the Python callback up in a callback dict, which gives a diff --git a/tests/test_cpython_gil_declaration.py b/tests/test_cpython_gil_declaration.py index 832c043..a9d2f34 100644 --- a/tests/test_cpython_gil_declaration.py +++ b/tests/test_cpython_gil_declaration.py @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2026 Brad Barnett +# +# SPDX-License-Identifier: MIT + """The generated CPython module declares that it doesn't need the GIL. On a free-threaded build (3.13t and later) importing an extension that diff --git a/tests/test_generation_tools.py b/tests/test_generation_tools.py index 7f4a762..a40c50b 100644 --- a/tests/test_generation_tools.py +++ b/tests/test_generation_tools.py @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2026 Brad Barnett +# +# SPDX-License-Identifier: MIT + from __future__ import annotations import shutil diff --git a/tests/test_ir.py b/tests/test_ir.py index 6051d73..d25838e 100644 --- a/tests/test_ir.py +++ b/tests/test_ir.py @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2026 Brad Barnett +# +# SPDX-License-Identifier: MIT + from binding.ir import DeclarationIndex, parse_source diff --git a/tests/test_nesting_export.py b/tests/test_nesting_export.py index fd72bda..c9a74c1 100644 --- a/tests/test_nesting_export.py +++ b/tests/test_nesting_export.py @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2026 Brad Barnett +# +# SPDX-License-Identifier: MIT + """The generated MicroPython and CircuitPython modules export ``lv._nesting``. ``_nesting`` is not an LVGL declaration: it is a binding-internal callback diff --git a/tests/test_pyi_canonical.py b/tests/test_pyi_canonical.py index 0de23e6..0b2cdf3 100644 --- a/tests/test_pyi_canonical.py +++ b/tests/test_pyi_canonical.py @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2026 Brad Barnett +# +# SPDX-License-Identifier: MIT + import ast import json from io import StringIO diff --git a/tests/test_pyi_generation.py b/tests/test_pyi_generation.py index e61cb73..e6cee3e 100644 --- a/tests/test_pyi_generation.py +++ b/tests/test_pyi_generation.py @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2026 Brad Barnett +# +# SPDX-License-Identifier: MIT + """End-to-end regression tests for canonical stub generation.""" from __future__ import annotations diff --git a/tests/test_release_workflow.py b/tests/test_release_workflow.py index 1595abe..174fde6 100644 --- a/tests/test_release_workflow.py +++ b/tests/test_release_workflow.py @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2026 Brad Barnett +# +# SPDX-License-Identifier: MIT + from pathlib import Path diff --git a/tests/test_verify_api.py b/tests/test_verify_api.py index 52584cf..48e8da5 100644 --- a/tests/test_verify_api.py +++ b/tests/test_verify_api.py @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2026 Brad Barnett +# +# SPDX-License-Identifier: MIT + from binding.api_model import api_hash_for_dict from binding.verify_api import validate_api_data diff --git a/tests/test_verify_pyi.py b/tests/test_verify_pyi.py index fdb3cdb..ae4c205 100644 --- a/tests/test_verify_pyi.py +++ b/tests/test_verify_pyi.py @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2026 Brad Barnett +# +# SPDX-License-Identifier: MIT + import ast import json from io import StringIO diff --git a/tools/hash_artifacts.py b/tools/hash_artifacts.py index 31d08ce..fc7f618 100644 --- a/tools/hash_artifacts.py +++ b/tools/hash_artifacts.py @@ -1,4 +1,8 @@ #!/usr/bin/env python3 +# SPDX-FileCopyrightText: 2026 Brad Barnett +# +# SPDX-License-Identifier: MIT + """Print or validate a manifest of generated LVGL binding artifacts.""" from __future__ import annotations diff --git a/tools/test_lvgl_smoke.py b/tools/test_lvgl_smoke.py index 89efcc6..5792168 100755 --- a/tools/test_lvgl_smoke.py +++ b/tools/test_lvgl_smoke.py @@ -1,4 +1,8 @@ #!/usr/bin/env python3 +# SPDX-FileCopyrightText: 2026 Brad Barnett +# +# SPDX-License-Identifier: MIT + """Unified LVGL binding smoke tests for MicroPython, CircuitPython, and CPython. Run with the target interpreter after building that port, for example: diff --git a/tools/verify_upstream_baseline.py b/tools/verify_upstream_baseline.py index dc49b00..7ec98c2 100644 --- a/tools/verify_upstream_baseline.py +++ b/tools/verify_upstream_baseline.py @@ -1,4 +1,8 @@ #!/usr/bin/env python3 +# SPDX-FileCopyrightText: 2026 Brad Barnett +# +# SPDX-License-Identifier: MIT + """Verify the compact historical baseline against pinned upstream output.""" from __future__ import annotations