Todo list¶

Every pending item this project tracks, collected from the {todo} admonitions left in the documentation pages and in the docstrings autodoc renders. Each entry links back to where it is written, which is next to the code or the prose it acts on.

Most wait on an upstream release: the ticket named in an item is what closes it.

Todo

Delete the ccache.conf base_dir write once Nuitka#3996 ships. Check then whether the install into the project virtualenv can go too. It can only if the fix keeps Nuitka’s install path out of the hashed compiler arguments. The two other shims have no deadline. Nuitka#3909 shipped in 4.2 and retired nothing, because the fix reaches --project builds only. On Nuitka#3997 the maintainer has not declined the request: he asked how digests could stay current across architectures without breaking older releases whose downloads move, and said tooling for it would be welcome, so the unconditional macOS --disable-ccache stays until someone writes that.

(The original entry is located in /home/runner/work/repomatic/repomatic/docs/nuitka.md, line 129.)

Todo

Delete this module once mdformat-toc can express the exclusion in the ToC marker itself, through hukkin/mdformat-toc#17 or hukkin/mdformat-toc#20.

(The original entry is located in /home/runner/work/repomatic/repomatic/repomatic/awesome_toc.py:docstring of repomatic.awesome_toc, line 19.)

Todo

Delete this pruning pass once uv prunes stale exclude-newer-package entries natively: uv#18792.

(The original entry is located in /home/runner/work/repomatic/repomatic/repomatic/deps/uv.py:docstring of repomatic.deps.uv.prune_stale_exclude_newer_packages, line 3.)

Todo

Drop the py-walk dependency and parse .gitignore with wcmatch, already imported here for globbing, once it reads gitignore files natively: facelessuser/wcmatch#226. Pick another parser first if pacha/py-walk#11 ends with py-walk retired: sly, its only dependency, already is.

(The original entry is located in /home/runner/work/repomatic/repomatic/repomatic/file_inventory.py:docstring of repomatic.file_inventory, line 15.)

Todo

Go back to get_parser_from_file in FileInventory.gitignore_parser, and raise the py-walk floor to the release that carries the fix, once pacha/py-walk#10 ships.

(The original entry is located in /home/runner/work/repomatic/repomatic/repomatic/file_inventory.py:docstring of repomatic.file_inventory, line 25.)

Todo

Stop excluding Zsh once shfmt formats those constructs: mvdan/sh#1203.

(The original entry is located in /home/runner/work/repomatic/repomatic/repomatic/file_inventory.py:docstring of repomatic.file_inventory.FileInventory.shfmt_files, line 17.)

Todo

Swap the two reusable-workflow lanes in release.yaml to GitHub’s $/ self-repository syntax, and drop their suppression, once actionlint accepts the form: it rejects $/ as a malformed ref today, per rhysd/actionlint#711 and rhysd/actionlint#732. The publish-pypi step keeps ./ either way, since $/ resolves against the workflow’s own commit rather than the release commit it checks out.

(The original entry is located in /home/runner/work/repomatic/repomatic/repomatic/github/workflow_sync.py:docstring of repomatic.github.workflow_sync, line 26.)

Todo

Switch this parser back to whenever, the prior implementation, once it grows a humanizer: whenever#277.

(The original entry is located in /home/runner/work/repomatic/repomatic/repomatic/humanize.py:docstring of repomatic.humanize.parse_iso_datetime, line 16.)

Todo

Widen the JSON branch beyond an iterable of dict[str, str] and a flat dict[str, str], the two shapes it asserts on today, when a metadata key needs a richer one.

(The original entry is located in /home/runner/work/repomatic/repomatic/repomatic/metadata/core.py:docstring of repomatic.metadata.core.Metadata.format_github_value, line 21.)

Todo

Carry the creation day as a non-accruing attribute beside commit and release, so no star reading can collide with it, and let repomatic.metric_chart.render_chart() read a by-age origin from it. This is a store schema change: it adds a metric value that every consumer’s own store-shape test enumerates, so it lands with a note to downstream repositories rather than silently.

(The original entry is located in /home/runner/work/repomatic/repomatic/repomatic/metrics.py:docstring of repomatic.metrics.SOURCE_RANK, line 22.)

Todo

Declare the exemption once, instead of splicing it onto every frozen command line, as soon as uv grows a configuration or environment knob for --exclude-newer-package: uv#20995. Glob exemptions (astral-sh/uv#20788) and pin-based bypasses (astral-sh/uv#19864, astral-sh/uv#18921) could settle it too.

(The original entry is located in /home/runner/work/repomatic/repomatic/repomatic/release/prepare_release.py:docstring of repomatic.release.prepare_release.SELF_PIN_COOLDOWN_EXEMPTION, line 27.)

Todo

Drop the YAML-block fixup in the mdformat post-process callback once executablebooks/mdformat-myst#49 merges upstream. See _DIRECTIVE_YAML_OPTIONS_RE for the shape it repairs.

(The original entry is located in /home/runner/work/repomatic/repomatic/repomatic/tooling/tool_registry.py:docstring of repomatic.tooling.tool_registry, line 20.)

Todo

Drop the colon-fence fixup in the same callback once mdformat-myst ships colon-fence support, via either executablebooks/mdformat-myst#36 or executablebooks/mdformat-myst#48. See _ESCAPED_COLON_FENCE_RE for the shape it repairs.

(The original entry is located in /home/runner/work/repomatic/repomatic/repomatic/tooling/tool_registry.py:docstring of repomatic.tooling.tool_registry, line 27.)

Todo

Once lychee ships 0.25.0, the release expected to carry lycheeverse/lychee#2250, run the {#id} reproduction from lycheeverse/lychee#2249 through repomatic run lychee, and report the result there, as that comment commits to. The file:// docs-fragment entry in [tool.lychee] stays either way: lychee reads the Markdown source, which holds neither MyST (target)= labels nor the anchors directives generate at build time.

(The original entry is located in /home/runner/work/repomatic/repomatic/repomatic/tooling/tool_registry.py:docstring of repomatic.tooling.tool_registry, line 37.)

Todo

Move those integrity checks to __post_init__ if the registry ever becomes user-configurable: a test only covers the specs shipped here.

(The original entry is located in /home/runner/work/repomatic/repomatic/repomatic/tooling/tool_registry.py:docstring of repomatic.tooling.tool_registry.BinarySpec, line 16.)

Todo

Move those integrity checks to __post_init__ if the registry ever becomes user-configurable: a test only covers the specs shipped here.

(The original entry is located in /home/runner/work/repomatic/repomatic/repomatic/tooling/tool_registry.py:docstring of repomatic.tooling.tool_registry.ToolSpec, line 10.)

Todo

Give the mdformat entry a config_flag="--config" once mdformat accepts an explicit config path, so it stops relying on discovery from the working directory: hukkin/mdformat#432 and hukkin/mdformat#562.

(The original entry is located in /home/runner/work/repomatic/repomatic/repomatic/tooling/tool_registry.py:docstring of repomatic.tooling.tool_registry.TOOL_REGISTRY, line 7.)

Todo

Drop the [tool.X] translation layer for each tool that grows native pyproject.toml support, as lychee already has. The standing upstream requests, all still unshipped: actionlint#623, biome#9239, gitleaks#2066, zizmor#322. The same request for shfmt (sh#1268) was declined. Nuitka#3909 shipped in 4.2, but only for --project builds, which take their entry points from the project configuration. repomatic names one entry point per build on the command line, so the nuitka bridge stays.

(The original entry is located in /home/runner/work/repomatic/repomatic/docs/tool-runner.md, line 13.)

Todo

When sync-workflow-pins moves the uv pin of the setup-uv steps to 0.13.0 or later:

  • Delete the Force native ARM64 Python on Windows ARM64 step of tests.yaml, and the UV_PYTHON fallback in the Install Python step after it.

  • Rewrite the validate-arch comment of tests.yaml that says uv prefers an x86_64 interpreter on aarch64.

  • Build the two Windows binaries with --managed-python in a canary run of _release-engine.yaml. If both pass verify-binary and the self-tests, pass the flag on every platform.

  • Delete this entry, and the example that names the step in the repomatic-audit skill.

When a Python version has no native build, uv 0.13.0 falls back to x86_64 with no error. The explicit request of the step fails there. Python 3.10 has none, and the test matrix already excludes it on windows-11-arm.

(The original entry is located in /home/runner/work/repomatic/repomatic/docs/upstream.md, line 194.)

Todo

When a markdown-it-py release carries the fix for executablebooks/markdown-it-py#445, run the reproducer from hukkin/mdformat#599 through repomatic run mdformat. Then update this entry and A known mdformat defect to match the result.

(The original entry is located in /home/runner/work/repomatic/repomatic/docs/upstream.md, line 263.)

Todo

When sync-tool-versions moves the mdformat-web pin past 0.2.0, run the reproducer from hukkin/mdformat-web#8 through repomatic run mdformat. Then update this entry to match the result.

(The original entry is located in /home/runner/work/repomatic/repomatic/docs/upstream.md, line 271.)

Todo

When a Nuitka release carries the fix for Nuitka/Nuitka#4087, add it to the matrix of the ccache-type-description.yaml workflow in kdeldycke/nuitka-test, and run it. Then update this entry and Compile caching to match the result.

(The original entry is located in /home/runner/work/repomatic/repomatic/docs/upstream.md, line 281.)

Todo

Collapse the job’s two Ruff steps, check then format, into one invocation once Ruff unifies linting and formatting behind a single command: astral-sh/ruff#8232. The autopep8 step goes the same way once Ruff wraps long comments: astral-sh/ruff#7414.

(The original entry is located in /home/runner/work/repomatic/repomatic/docs/workflows.md, line 119.)