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

Retire each shim as its ticket ships: the --python-flag=-m computation on Nuitka#3879, the symlink-free staging copy on Nuitka#3994 (Nuitka 4.3 at the earliest), and the ccache.conf base_dir write on Nuitka#3996. The sloppiness and CCACHE_SLOPPINESS settings need no edit on Nuitka#3998: they start working on their own. Two shims have no deadline at all. 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 97.)

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.

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

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

Drop the per-entry-point --python-flag=-m workaround computed below, and compile a __main__.py entry point through Nuitka’s own --main-entry-point, once Nuitka#3879 ships. Nuitka#4024 gates this too: the entry point derived from [project.scripts] usually carries its package’s name, and Nuitka’s generated launcher then shadows that package.

(The original entry is located in /home/runner/work/repomatic/repomatic/repomatic/metadata/matrix.py:docstring of repomatic.metadata.matrix.MatrixMetadata.nuitka_matrix, line 33.)

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 a main module 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-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 248.)

Todo

Replace the UnresolvedAnchors handler in docs/conf.py with the click_extra_fail_on_warnings = ["myst.xref_missing"] line, once a click-extra release ships that option and clears the one-week minimum-release-age cooldown. Both fail the build on an unresolved fragment link, so the swap changes no behavior.

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

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 116.)