potiuk opened a new pull request, #70957:
URL: https://github.com/apache/airflow/pull/70957

   Publishing the provider docs has failed since 2026-07-28. The last green run 
built with no `--python` flag; every run since passes `--python 3.12`. Nothing 
in the repo changed — only four commits sit between the last green and first 
red run (INTHEWILD.md, a secrets-backend change, a UI toggle, Helm docs). Two 
independent problems surface only on 3.12.
   
   ### 1. Samba fails to import, so the provider cannot be documented at all
   
   Python 3.12 added `__type_params__` to `functools.WRAPPER_ASSIGNMENTS`. 
`smbclient` is in `autodoc_mock_imports`, and a Sphinx mock returns another 
mock for that attribute rather than a tuple, so `functools` refuses the 
assignment:
   
   ```
   File ".../samba/hooks/samba.py", line 114, in SambaHook
       @wraps(smbclient.link)
   File "/usr/python/lib/python3.12/functools.py", line 56, in update_wrapper
       setattr(wrapper, attr, value)
   TypeError: __type_params__ must be set to a tuple
   ```
   
   Every `SambaHook` method wraps an `smbclient` callable, so the module dies 
at class-definition time. This is **not** a Sphinx regression — it reproduces 
identically on Sphinx 8.2.3, 9.0.4 and 9.1.0.
   
   All 24 wrapped methods now go through a helper that copies everything 
`functools` normally copies **except** `__type_params__`. None of the wrapped 
callables are PEP 695 generics, so nothing is lost — verified that `__doc__`, 
`__name__` and `__wrapped__` are still inherited from `smbclient` when it is 
not mocked.
   
   ### 2. Thirteen ambiguous cross-references
   
   `amazon`, `google` and `openlineage` raise "more than one target found for 
cross-reference" where two documented classes share a member name — `object` is 
a documented parameter of both `GCSObjectExistenceSensor` and 
`GCSObjectUpdateSensor`, `CommandType` exists in both the ECS and Lambda 
executor utils, and so on.
   
   These references live in autoapi-**generated** rst, so there is no place to 
write a qualified name, and the duplication is legitimate. 
`autodoc_typehints_format` does not help: most of these are `:param` names, not 
type annotations. Sphinx exposes no subtype narrower than `ref.python` for this 
message.
   
   **Reviewers should weigh this trade-off:** suppressing `ref.python` also 
means a genuinely unresolvable python reference will no longer fail the docs 
build. If that is unacceptable, the alternative is leaving the docs build red 
until each duplicate member name is renamed, which is a much larger change 
across three providers.
   
   ---
   
   ##### Was generative AI tooling used to co-author this PR?
   
   - [X] Yes — Claude Code (Opus 5)
   
   Generated-by: Claude Code (Opus 5) following [the 
guidelines](https://github.com/apache/airflow/blob/main/contributing-docs/05_pull_requests.rst#gen-ai-assisted-contributions)


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to