I believe I'm -0 for modifying the existing add() and +0 for a new function.
By the way, a good phrasing of the general mutating/non-mutating convention opens the built-in types section of the docs:
"Some collection classes are mutable. The methods that add, subtract, or rearrange their members in place, and don’t return a specific item, never return the collection instance itself but None."
Note the use of the word item, rather than any return value.
Out of curiosity though, were we to change set.add(), how could we keep backwards compatibility in the c-api?
On the Python level, we might find people do "val = set.add(i) or i", or even "any(set.add(i) for i in range (10))" which would break. I myself wrote the former quite often with "list.append" etc.
On the c-api, the problem might be worse -
I wouldn't be surprised if people use PyCheckExact or pointer comparison for the results of both PySet_Add and set_add of the set object.
Is there a way to maintain compatibility on the c-api that I'm not aware of?