From 9a616fa58e9d5761dac7da7a2992e6e984c5e13a Mon Sep 17 00:00:00 2001 From: Eli Fine Date: Wed, 30 Sep 2026 10:14:11 +0000 Subject: [PATCH 1/5] Copier update from copier-base-template 9265e964 Co-Authored-By: Claude Opus 5.5 --- .config/.copier-answers.yml | 2 +- .config/pyrefly.toml | 1 + .devcontainer/devcontainer.json | 4 +-- extensions/context.py | 21 +++++++------- pyproject.toml | 2 +- template/.config/pyrefly.toml | 1 + .../.devcontainer/devcontainer.json.jinja | 2 +- uv.lock | 28 +++++++++---------- 8 files changed, 32 insertions(+), 29 deletions(-) diff --git a/.config/.copier-answers.yml b/.config/.copier-answers.yml index 6dc5626d..f0bb1f6e 100644 --- a/.config/.copier-answers.yml +++ b/.config/.copier-answers.yml @@ -1,5 +1,5 @@ # Changes here will be overwritten by Copier -_commit: v0.1.9 +_commit: v0.1.9-11-g9265e964 _src_path: gh:LabAutomationAndScreening/copier-base-template.git copier_answers_directory: .config description: Copier template for creating Python libraries and executables diff --git a/.config/pyrefly.toml b/.config/pyrefly.toml index cfd348d8..40fffc16 100644 --- a/.config/pyrefly.toml +++ b/.config/pyrefly.toml @@ -33,6 +33,7 @@ ignore-errors-in-generated-code = true # not sure yet how effective this is no-access = "ignore" # (already covered by ruff SLF001) untyped-import = "ignore" # equivalent of reportMissingTypeStubs=false in pyright unannotated-return = "ignore" # ruff ANN2xx already requires this, but with suppress-none-returning so that None-returning functions don't need the noise. pyrefly has no equivalent option---the error kind is all-or-nothing. +implicit-reexport = "ignore" # only matters for distributed libraries, whose public API must be deliberate; everything else is imported solely from within its own repo, where requiring __all__ or redundant aliases is pure bookkeeping [[sub-config]] matches = "../**/tests/**" diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index ec9e6a90..fdecaf77 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -30,7 +30,7 @@ // Python "-ms-python.vscode-pylance", // pyrefly is the language server for this project; ms-python.python auto-installs Pylance via its extension pack, and Pylance then warns on every boot that it's disabled "ms-python.python@2026.5.2026052901", - "meta.pyrefly@1.3.1", + "meta.pyrefly@1.3.2", "ms-vscode-remote.remote-containers@0.414.0", "charliermarsh.ruff@2026.84.0", @@ -67,5 +67,5 @@ "initializeCommand": "sh .devcontainer/initialize-command.sh", "onCreateCommand": "sh .devcontainer/on-create-command.sh", "postStartCommand": "sh .devcontainer/post-start-command.sh" - // Devcontainer context hash (do not manually edit this, it's managed by a pre-commit hook): 6950b8fc # spellchecker:disable-line + // Devcontainer context hash (do not manually edit this, it's managed by a pre-commit hook): 0b1abb95 # spellchecker:disable-line } diff --git a/extensions/context.py b/extensions/context.py index 81bbf500..df779d74 100644 --- a/extensions/context.py +++ b/extensions/context.py @@ -32,31 +32,32 @@ def hook( # noqa: PLR0915 # yes, this is a lot of statements, but it's all just context["copier_version"] = "==9.18.2" context["copier_template_extensions_version"] = "==0.3.3" context["sphinx_version"] = "9.0.4" - context["pulumi_version"] = ">=3.261.0" - context["pulumi_aws_version"] = ">=7.44.0" - context["pulumi_aws_native_version"] = ">=1.77.0" + context["pulumi_version"] = ">=3.265.0" + context["pulumi_aws_version"] = ">=7.48.0" + context["pulumi_aws_native_version"] = ">=1.81.0" context["pulumi_command_version"] = ">=1.2.1" - context["pulumi_github_version"] = ">=6.13.1" + context["pulumi_github_version"] = ">=6.14.0" context["pulumi_okta_version"] = ">=6.6.0" context["boto3_version"] = ">=1.43.88" - context["ephemeral_pulumi_deploy_version"] = ">=0.0.7" + context["ephemeral_pulumi_deploy_version"] = ">=0.0.8" context["pydantic_version"] = ">=2.13.5" + context["typing_extensions_version"] = ">=4.16.0" context["pyinstaller_version"] = ">=6.22.3" context["setuptools_version"] = "80.7.1" context["strawberry_graphql_version"] = "==0.298.0" context["fastapi_version"] = ">=0.141.1" context["fastapi_offline_version"] = ">=1.7.7" - context["starlette_version"] = ">=1.6.0" + context["starlette_version"] = ">=1.7.0" context["uvicorn_version"] = ">=0.53.0" - context["lab_auto_pulumi_version"] = ">=0.2.3" + context["lab_auto_pulumi_version"] = ">=0.3.0" context["ariadne_codegen_version"] = ">=0.18.0" - context["pytest_mock_version"] = ">=3.15.1" + context["pytest_mock_version"] = ">=3.16.0" context["uuid_utils_version"] = ">=1.0.0" context["syrupy_version"] = ">=6.1.1" context["structlog_version"] = ">=26.1.0" context["httpx_version"] = ">=0.28.1" context["httpx2_version"] = ">=2.13.0" - context["python_kiota_bundle_version"] = ">=1.12.3" + context["python_kiota_bundle_version"] = ">=1.14.1" context["vcrpy_version"] = ">=8.3.0" context["pytest_recording_version"] = ">=0.13.4" context["pytest_asyncio_version"] = ">=1.4.0" @@ -65,7 +66,7 @@ def hook( # noqa: PLR0915 # yes, this is a lot of statements, but it's all just context["python_faker_version"] = ">=40.39.0" context["mutmut_version"] = ">=3.8.0" context["pyright_version"] = ">=1.1.414" - context["pyrefly_version"] = ">=1.3.1" + context["pyrefly_version"] = ">=1.3.2" context["vacuum_openapi_version"] = "0.30.0" context["default_node_version"] = "24.11.1" diff --git a/pyproject.toml b/pyproject.toml index c1cd5b72..64b1e947 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -20,7 +20,7 @@ dependencies = [ "pytest-cov>=7.1.0", "pytest-randomly>=5.0.0", "faker>=40.39.0", - "pyrefly>=1.3.1", + "pyrefly>=1.3.2", "copier==9.18.2", "copier-template-extensions==0.3.3" ] diff --git a/template/.config/pyrefly.toml b/template/.config/pyrefly.toml index cfd348d8..40fffc16 100644 --- a/template/.config/pyrefly.toml +++ b/template/.config/pyrefly.toml @@ -33,6 +33,7 @@ ignore-errors-in-generated-code = true # not sure yet how effective this is no-access = "ignore" # (already covered by ruff SLF001) untyped-import = "ignore" # equivalent of reportMissingTypeStubs=false in pyright unannotated-return = "ignore" # ruff ANN2xx already requires this, but with suppress-none-returning so that None-returning functions don't need the noise. pyrefly has no equivalent option---the error kind is all-or-nothing. +implicit-reexport = "ignore" # only matters for distributed libraries, whose public API must be deliberate; everything else is imported solely from within its own repo, where requiring __all__ or redundant aliases is pure bookkeeping [[sub-config]] matches = "../**/tests/**" diff --git a/template/.devcontainer/devcontainer.json.jinja b/template/.devcontainer/devcontainer.json.jinja index 93c0cbef..209ff26b 100644 --- a/template/.devcontainer/devcontainer.json.jinja +++ b/template/.devcontainer/devcontainer.json.jinja @@ -42,7 +42,7 @@ // Python "-ms-python.vscode-pylance", // pyrefly is the language server for this project; ms-python.python auto-installs Pylance via its extension pack, and Pylance then warns on every boot that it's disabled "ms-python.python@2026.5.2026052901", - "meta.pyrefly@1.3.1", + "meta.pyrefly@1.3.2", "ms-vscode-remote.remote-containers@0.414.0", "charliermarsh.ruff@2026.84.0",{% endraw %}{% endif %}{% raw %} {% endraw %}{% if is_child_of_copier_base_template is not defined and template_uses_vuejs is defined and template_uses_vuejs is sameas(true) %}{% raw %} diff --git a/uv.lock b/uv.lock index f10339af..bff5b8a7 100644 --- a/uv.lock +++ b/uv.lock @@ -63,7 +63,7 @@ requires-dist = [ { name = "copier", specifier = "==9.18.2" }, { name = "copier-template-extensions", specifier = "==0.3.3" }, { name = "faker", specifier = ">=40.39.0" }, - { name = "pyrefly", specifier = ">=1.3.1" }, + { name = "pyrefly", specifier = ">=1.3.2" }, { name = "pytest", specifier = ">=9.1.1" }, { name = "pytest-cov", specifier = ">=7.1.0" }, { name = "pytest-randomly", specifier = ">=5.0.0" }, @@ -374,21 +374,21 @@ wheels = [ [[package]] name = "pyrefly" -version = "1.3.1" +version = "1.3.2" source = { registry = "https://pypi.org/simple/" } -sdist = { url = "https://files.pythonhosted.org/packages/4c/7e/082cc1b392318bacfbc087732524f3e089e9e7fe45b7645c4649b6f1f1e9/pyrefly-1.3.1.tar.gz", hash = "sha256:b774f1dfac82867fc16fe2175d80a630e2a72a6835d5b7e492568d6bfb6b05e7", size = 6679145, upload-time = "2026-09-15T05:09:34.49Z" } +sdist = { url = "https://files.pythonhosted.org/packages/4d/78/b6ec12acb586606618c71ebe1008af59e1ca50e667895f1946fa7b656619/pyrefly-1.3.2.tar.gz", hash = "sha256:30a68ff5429a1546ec08a2d913dfe442c9553a2940d274de18833d8eda939b5e", size = 6679591, upload-time = "2026-09-28T22:10:06.292Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/6b/bc/f09b5bd7eed796349bd93627aa2c3086df7ed0a114dafc3d2b2841599ee7/pyrefly-1.3.1-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:0a2a7dfed824fb066aa8a7c8d856c152b98e998fb84b954d5f892fb9834c0bd1", size = 15090117, upload-time = "2026-09-15T05:08:58.477Z" }, - { url = "https://files.pythonhosted.org/packages/78/24/a31e7de8e0f310c9f0753826d0df8b6a8ff86793941a6bd88ba24b735633/pyrefly-1.3.1-py3-none-macosx_11_0_arm64.whl", hash = "sha256:37a1a1fb41e7190fe3964a877875dd809d6ee2887809e2c3d6e5f25a69805bfd", size = 14430773, upload-time = "2026-09-15T05:09:01.67Z" }, - { url = "https://files.pythonhosted.org/packages/75/e1/022352beb186f36d6213a95a975c42676ee418ff5e730629378d25564c5e/pyrefly-1.3.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45b7650bc651a5a784701f2fb4f579da9a421c4d1b5fd91f9048f4529e46093c", size = 14877762, upload-time = "2026-09-15T05:09:04.767Z" }, - { url = "https://files.pythonhosted.org/packages/19/2c/d62a1b445aad1fd46375b83393b8a67da53883aeeba73d269ce71b3e8fd1/pyrefly-1.3.1-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ad57f38bc73679c14a5f62995a2bd3bc43649b7270c858487e2eab78a6f95362", size = 16118225, upload-time = "2026-09-15T05:09:07.828Z" }, - { url = "https://files.pythonhosted.org/packages/32/67/3c3fa8a13e3ce8d8322ffb3627255a41a52261f17793e1a24e9214f10857/pyrefly-1.3.1-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3506b1252e9f5d755d0693c5a46d46b85579d36534f6e22a41eb8e098d0dde90", size = 16051197, upload-time = "2026-09-15T05:09:10.81Z" }, - { url = "https://files.pythonhosted.org/packages/19/d1/84f81b9e32288b5d11c75e006f67e0f6b78b85da575673bd1a21524c8172/pyrefly-1.3.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:39d5a17c1ad655e5f93a6e8e0be90b8db28c6015fe07d6ed4e054891c9e14ef8", size = 15440062, upload-time = "2026-09-15T05:09:14.641Z" }, - { url = "https://files.pythonhosted.org/packages/46/3c/2aa0c5ad6a2957a728bb38cfab70d1e9cafad21b0b1c1d92df74a3cf22bd/pyrefly-1.3.1-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:c61e9dcf888beb81ca0e0c60ea4442640fdcf2f1f65bfe3d9f5d89b85516eb03", size = 14898534, upload-time = "2026-09-15T05:09:17.823Z" }, - { url = "https://files.pythonhosted.org/packages/03/5d/2974f249fb2e285f966485719d977c5a2248cc4866403af94d935775ff15/pyrefly-1.3.1-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:a78eed1c53f37807f0e2997be8edbe833b91eb9915f2cb553a1bdcd599e7105c", size = 15477758, upload-time = "2026-09-15T05:09:20.964Z" }, - { url = "https://files.pythonhosted.org/packages/68/79/d31f8f0abf5b0610ec24183286ee8a1ee5b76c9aaaa91091399d7e1aaf60/pyrefly-1.3.1-py3-none-win32.whl", hash = "sha256:ea0d0349f1bc80fe8e00a7b3640e40db7486398b685f87b9bd5d2207063668f0", size = 14133005, upload-time = "2026-09-15T05:09:25.03Z" }, - { url = "https://files.pythonhosted.org/packages/3f/23/1859f47f536314755d80c4ec2a76d2698435ae8b73604bcd1dfa57ecb39b/pyrefly-1.3.1-py3-none-win_amd64.whl", hash = "sha256:4c24e7d99df9237916c33be23714219a7c8eaf22bad2ac0c3e1d45adcf7df8fb", size = 15066557, upload-time = "2026-09-15T05:09:28.265Z" }, - { url = "https://files.pythonhosted.org/packages/92/2a/73e3721921c2bb2c950a9f8c362ee5e2367556b5d4416eb4f8f88503e66f/pyrefly-1.3.1-py3-none-win_arm64.whl", hash = "sha256:1ed85e2b957a78e93353125d890ce3668ce450e49b74025a15c87b6e8ec7f3d1", size = 14348209, upload-time = "2026-09-15T05:09:31.422Z" }, + { url = "https://files.pythonhosted.org/packages/24/01/144a78839822abad55628881bcb45f8173e6d8b87976897c9105884b5a6b/pyrefly-1.3.2-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:626dbaee16ae1169a10a4ba3293583b5ab0320102f35efaad9e03457a2fc646c", size = 15088488, upload-time = "2026-09-28T22:09:40.743Z" }, + { url = "https://files.pythonhosted.org/packages/23/aa/599756bd42e6533ee9261ebd288f846ab453b00debaef2b4789893967809/pyrefly-1.3.2-py3-none-macosx_11_0_arm64.whl", hash = "sha256:2d5fc704dbf0e990dc4f15cb1ead64f1a325ae27383a50c76cfcaf0387f926bb", size = 14429996, upload-time = "2026-09-28T22:09:43.316Z" }, + { url = "https://files.pythonhosted.org/packages/90/0c/4b0678889136b1514ecd25cec11974d5bfdaeaaf9f5fe8a766ca45ec4ab5/pyrefly-1.3.2-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:89dbe8a33e735fa96023c33ce5dfd81af9b0bdd2ee771e8d69b2ebffc7e0fbc7", size = 14871810, upload-time = "2026-09-28T22:09:45.42Z" }, + { url = "https://files.pythonhosted.org/packages/a6/4e/a96236391c6bb0d8b50af85e0ea6c0c56206f739931ac3031f9e000325ee/pyrefly-1.3.2-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3ec0c31715d48bff279f548b85a93b5bc43d2c7bd1492a8cd703a9185cb089e5", size = 16113462, upload-time = "2026-09-28T22:09:47.619Z" }, + { url = "https://files.pythonhosted.org/packages/ad/c3/d4d0966aa7008ebd8481a6d05aa53202ad40c9597705eeee87ba6e0e2025/pyrefly-1.3.2-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b3de468bed691e40dc6271284c8dcc05e649d7ed45280ef3d07332741efe34c", size = 16043341, upload-time = "2026-09-28T22:09:50.083Z" }, + { url = "https://files.pythonhosted.org/packages/4f/d1/52d9ea1b7048c7316d9ff7594c170b1c06d37547a75d140c8deea7b9ddfd/pyrefly-1.3.2-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cb94365fe5f854cb4fe82f600c4e2453160d328610b12981004851ee0b6e8aeb", size = 15437183, upload-time = "2026-09-28T22:09:52.56Z" }, + { url = "https://files.pythonhosted.org/packages/08/ec/24f83e4a397fa9d5c416bb4d378ee1bb18fe48bdd5698fe541636f5352f3/pyrefly-1.3.2-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:4f730d2e515ac25827fc68f343a7aa02b1072e0062df6a430346a4ffdfb5db2f", size = 14892976, upload-time = "2026-09-28T22:09:54.916Z" }, + { url = "https://files.pythonhosted.org/packages/29/c7/a473f8e9ec31ba0682ebe44f4e51167a22a4cbdc8bfd87365b9aca23be20/pyrefly-1.3.2-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:60f440e1626bd5cc4a41ee90cecba80796ed01ebd6c15d9f933efb8d07ffe2b8", size = 15469689, upload-time = "2026-09-28T22:09:57.541Z" }, + { url = "https://files.pythonhosted.org/packages/d0/df/779092365e8e469fc8e7349e1c26c35b8a73df9e6be80a00265fc26a2b2b/pyrefly-1.3.2-py3-none-win32.whl", hash = "sha256:b31684189de44a25a5bf00bdf3ad16be44a7b14654702d6018bce1043357202c", size = 14135550, upload-time = "2026-09-28T22:09:59.757Z" }, + { url = "https://files.pythonhosted.org/packages/9d/20/466333e7f2891f8c357b5c226559c39ba8dde4f90be09189ecc771a086f5/pyrefly-1.3.2-py3-none-win_amd64.whl", hash = "sha256:693960cdb247d1f76b9e09b3f2554dae20034f7d442ccd4e9b3e8962a3622363", size = 15067523, upload-time = "2026-09-28T22:10:02.099Z" }, + { url = "https://files.pythonhosted.org/packages/18/32/ee66df92c692c0686d82c9ecef3876ccb0386aa318bf507016f0121a8f78/pyrefly-1.3.2-py3-none-win_arm64.whl", hash = "sha256:f7424b21331670522980ff13e08bd143659879a4d92f4832282c7d7c41a9b5d6", size = 14348271, upload-time = "2026-09-28T22:10:04.253Z" }, ] [[package]] From 005e8b71dd5ca3b5a1bbf4ef78a7b66754ae95a5 Mon Sep 17 00:00:00 2001 From: Eli Fine Date: Wed, 30 Sep 2026 10:15:05 +0000 Subject: [PATCH 2/5] Keep pyrefly implicit-reexport enabled for generated Python packages Packages generated from this template are distributed libraries, so their public API should stay deliberate. The template repo's own .config/pyrefly.toml keeps the ignore, since it is not a distributed library. Co-Authored-By: Claude Opus 5.5 --- template/.config/pyrefly.toml | 1 - 1 file changed, 1 deletion(-) diff --git a/template/.config/pyrefly.toml b/template/.config/pyrefly.toml index 40fffc16..cfd348d8 100644 --- a/template/.config/pyrefly.toml +++ b/template/.config/pyrefly.toml @@ -33,7 +33,6 @@ ignore-errors-in-generated-code = true # not sure yet how effective this is no-access = "ignore" # (already covered by ruff SLF001) untyped-import = "ignore" # equivalent of reportMissingTypeStubs=false in pyright unannotated-return = "ignore" # ruff ANN2xx already requires this, but with suppress-none-returning so that None-returning functions don't need the noise. pyrefly has no equivalent option---the error kind is all-or-nothing. -implicit-reexport = "ignore" # only matters for distributed libraries, whose public API must be deliberate; everything else is imported solely from within its own repo, where requiring __all__ or redundant aliases is pure bookkeeping [[sub-config]] matches = "../**/tests/**" From c45f386f1378a6635caf859fe4d842c06be5b43b Mon Sep 17 00:00:00 2001 From: Eli Fine Date: Wed, 30 Sep 2026 12:36:33 +0000 Subject: [PATCH 3/5] Keep implicit-reexport explicit as error in template pyrefly config Documents the intentional divergence from the upstream template's "ignore" so a future copier update does not silently revert it: generated packages are distributed libraries whose public API must be deliberate. Co-Authored-By: Claude Opus 5.5 --- template/.config/pyrefly.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/template/.config/pyrefly.toml b/template/.config/pyrefly.toml index cfd348d8..5312ba17 100644 --- a/template/.config/pyrefly.toml +++ b/template/.config/pyrefly.toml @@ -33,6 +33,7 @@ ignore-errors-in-generated-code = true # not sure yet how effective this is no-access = "ignore" # (already covered by ruff SLF001) untyped-import = "ignore" # equivalent of reportMissingTypeStubs=false in pyright unannotated-return = "ignore" # ruff ANN2xx already requires this, but with suppress-none-returning so that None-returning functions don't need the noise. pyrefly has no equivalent option---the error kind is all-or-nothing. +implicit-reexport = "error" # intentionally diverges from the upstream template's "ignore": packages generated from this template are distributed libraries, whose public API must be deliberate (via __all__ or redundant aliases) [[sub-config]] matches = "../**/tests/**" From c55d3849d3853861606a59d34a58ad1e57bb72e7 Mon Sep 17 00:00:00 2001 From: Eli Fine Date: Wed, 30 Sep 2026 12:43:17 +0000 Subject: [PATCH 4/5] Copier update from copier-base-template v0.1.10 Co-Authored-By: Claude Opus 5.5 --- .config/.copier-answers.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.config/.copier-answers.yml b/.config/.copier-answers.yml index f0bb1f6e..78a63281 100644 --- a/.config/.copier-answers.yml +++ b/.config/.copier-answers.yml @@ -1,5 +1,5 @@ # Changes here will be overwritten by Copier -_commit: v0.1.9-11-g9265e964 +_commit: v0.1.10 _src_path: gh:LabAutomationAndScreening/copier-base-template.git copier_answers_directory: .config description: Copier template for creating Python libraries and executables From 9f662874f91a71b51ef48150a61dbc43a99b8e2a Mon Sep 17 00:00:00 2001 From: Eli Fine Date: Wed, 30 Sep 2026 12:48:52 +0000 Subject: [PATCH 5/5] fix comment --- template/.config/pyrefly.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/template/.config/pyrefly.toml b/template/.config/pyrefly.toml index 5312ba17..5a9bc5c5 100644 --- a/template/.config/pyrefly.toml +++ b/template/.config/pyrefly.toml @@ -33,7 +33,7 @@ ignore-errors-in-generated-code = true # not sure yet how effective this is no-access = "ignore" # (already covered by ruff SLF001) untyped-import = "ignore" # equivalent of reportMissingTypeStubs=false in pyright unannotated-return = "ignore" # ruff ANN2xx already requires this, but with suppress-none-returning so that None-returning functions don't need the noise. pyrefly has no equivalent option---the error kind is all-or-nothing. -implicit-reexport = "error" # intentionally diverges from the upstream template's "ignore": packages generated from this template are distributed libraries, whose public API must be deliberate (via __all__ or redundant aliases) +implicit-reexport = "error" # intentionally diverges from the upstream template's "ignore": this repo is for distributed libraries, whose public API must be deliberate (via __all__ or redundant aliases) [[sub-config]] matches = "../**/tests/**"