Sorry for writing issue on the forum, but the Migen repo on GitHub is archived, and I can't create an issue on the Gitea server without an account.
I'm building Migen on Arch Linux in a fresh chroot environment with Python 3.14, and this error occurs on testing:
popenargs = (['/usr/bin/python', '/build/python-migen-git/src/migen/examples/basic/local_cd.py'],)
kwargs = {'stdout': -3}, retcode = 1
cmd = ['/usr/bin/python', '/build/python-migen-git/src/migen/examples/basic/local_cd.py']
def check_call(*popenargs, **kwargs):
"""Run command with arguments. Wait for command to complete. If
the exit code was zero then return, otherwise raise
CalledProcessError. The CalledProcessError object will have the
return code in the returncode attribute.
The arguments are the same as for the call function. Example:
check_call(["ls", "-l"])
"""
retcode = call(*popenargs, **kwargs)
if retcode:
cmd = kwargs.get("args")
if cmd is None:
cmd = popenargs[0]
> raise CalledProcessError(retcode, cmd)
E subprocess.CalledProcessError: Command '['/usr/bin/python', '/build/python-migen-git/src/migen/examples/basic/local_cd.py']' returned non-zero exit status 1.
/usr/lib/python3.14/subprocess.py:419: CalledProcessError
----------------------------- Captured stderr call -----------------------------
Traceback (most recent call last):
File "/build/python-migen-git/src/migen/examples/basic/local_cd.py", line 18, in <module>
mm = MultiMod()
File "/build/python-migen-git/src/migen/examples/basic/local_cd.py", line 14, in __init__
self.submodules.foo = CDM()
~~~^^
File "/build/python-migen-git/src/migen/examples/basic/local_cd.py", line 9, in __init__
self.clock_domains.cd_sys = ClockDomain(reset_less=True)
~~~~~~~~~~~^^^^^^^^^^^^^^^^^
File "/build/python-migen-git/src/migen/migen/fhdl/structure.py", line 726, in __init__
raise ValueError("Cannot extract clock domain name from code, need to specify.")
ValueError: Cannot extract clock domain name from code, need to specify.
Which is similar to an old issue on Python 3.11. While the index variable is 70:

I found out that after manually decoding the co_code, the correct index should be 98:
>>> co_code = b'\x80\x00\\\x01\x00\x00\x00\x00\x00\x00\x00\x00^\x054\x01\x00\x00\x00\x00\x00\x00V\x00P\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00n\x02\x00\x00\x00\x00\x00\x00\x00\x00\\\x07\x00\x00\x00\x00\x00\x00\x00\x00R\x01R\x027\x01\x00\x00\x00\x00\x00\x00V\x00P\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00n\x05\x00\x00\x00\x00\x00\x00\x00\x00R\x03#\x00'
>>> opname[co_code[98]]
'STORE_ATTR'
>>> int(co_code[98+1] )
5

I'm not familiar with the bytecode, but I assume it is caused by some changes in Python just like the last time.