Skip to content

Restore and document the nvda-mathcat asset update pipeline #20716

Open
nvaccess/nvda-mathcat
#6

Description

@cary-rowen

Related issues, PRs or discussions

What is the current state of the codebase?

NVDA packages MathCAT's rule files and libmathcat_py.pyd through the include/nvda-mathcat submodule.

The Fetch Assets workflow in that repository is intended to run weekly. It downloads Rules.zip and the Python 3.13 64-bit Windows library from the latest MathCATForPython release, commits them to nvda-mathcat, and then opens a PR to bump the submodule in NVDA.

The workflow is currently reported by GitHub as disabled_inactivity. It has 32 recorded runs: 31 ended in failure and one in startup_failure; none completed successfully. A maintainer also noted during the original integration that the part which creates the NVDA PR was broken.

The workflow commits assets before attempting to update the NVDA submodule, so a failure in the later stage can leave nvda-mathcat updated without advancing NVDA's submodule pointer.

The nvda-mathcat README only describes the weekly asset fetch. It still names the old 32-bit Python 3.11 asset and does not document the NVDA PR stage, recovery after a failed run, or a manual update and verification procedure.

Why are changes required?

Without a working update path, fixes, language rules, and other upstream MathCAT changes do not reliably reach NVDA's built-in MathCAT. Updating the assets or bumping the submodule manually is easy to miss, and partial updates make it harder to establish which MathCAT release NVDA contains.

This is particularly visible for rule-only updates such as translations: the upstream rules may be complete and tested, while NVDA continues to ship an older rule set until someone notices and performs both repository updates manually.

A documented fallback is also needed so contributors without access to NV Access repository secrets can prepare a correct update PR and maintainers can recover the automation consistently.

What technical changes are required?

The exact implementation can be decided by the maintainers, but the update path should:

  • Restore an automated sync from a MathCATForPython release to nvda-mathcat, followed by an NVDA submodule-bump PR.
  • Use a durable trigger. Re-enabling the current schedule alone will allow GitHub to disable it again after another period of repository inactivity. Running the check from an active repository or triggering it from an upstream release are possible approaches.
  • Repair and verify the authentication, fork/branch, and PR creation steps using least-privilege credentials. Re-running the workflow should not create duplicate branches or PRs.
  • Treat Rules.zip and libmathcat_py.pyd as one release unit and record enough provenance to identify the source release.
  • Validate the required assets, expected Python version and architecture, rule directory layout, and a minimal MathCAT import/speech operation before proposing the NVDA bump.
  • Make the asset-sync and NVDA-PR stages separately observable and retryable so that a failure after the asset commit can be recovered.
  • Update the nvda-mathcat README with the current asset names, workflow ownership, manual update procedure, submodule-bump procedure, recovery steps, and verification checklist.
  • Re-enable and manually dispatch the workflow once the fixes are in place, then confirm that it either opens the expected NVDA PR or exits successfully when there is no update.

Are the proposed technical changes API breaking?

No.

Are there potential risks or issues with the proposed implementation?

The workflow downloads and distributes an upstream native binary, so release provenance and validation should remain visible in the resulting PR rather than making updates opaque or automatically merging them.

Cross-repository credentials can push to a fork and open PRs, so their scope, expiry, and ownership need to be documented and kept to the minimum required permissions.

Rules and the native library must not be updated independently. A failed or partially retried run should not produce a mixed release. The trigger also needs monitoring or a design that is not silently disabled when nvda-mathcat has no commits for an extended period.

Activity

  1. added
    triagedHas been triaged, issue is waiting for implementation.
    p5https://github.com/nvaccess/nvda/blob/master/projectDocs/issues/triage.md#priority
    on Aug 24, 2026
  2. CyrilleB79 commented on Aug 25, 2026

    @CyrilleB79
    Collaborator

    Does it mean that MathCAT is not updated in NVDA as it should?

    Is it the reason why some languages are not present in NVDA 2026.2rc1's MathCAT but in the latest beta version of the add-on (French, Greek)? If yes, it's a pity to have missed the deadline for 2026.2; can we at least target 2026.3 milestone? (cc @seanbudd)

  3. makhlwf commented on Aug 25, 2026

    @makhlwf
    Contributor

    The fix actually was really, really simple: change the repository author from NSoiffer to daisy in the GitHub Actions script. It worked on my fork.

  4. CyrilleB79 commented on Aug 25, 2026

    @CyrilleB79
    Collaborator

    @makhlwf wrote:

    The fix actually was really, really simple: change the repository author from NSoiffer to daisy in the GitHub Actions script. It worked on my fork.

    Would you mind open a PR for this?

  5. CyrilleB79 commented on Sep 4, 2026

    @CyrilleB79
    Collaborator

    @seanbudd given what I've written above, would you accept targeting this for 2026.3? So adding the milestone to track it and review nvaccess/nvda-mathcat#6.

  6. seanbudd commented on Sep 4, 2026

    @seanbudd
    Member

    I don't nvaccess/nvda-mathcat#6 will fix this, the workflow was failing before the repo was moved. There is a permission/token issue that needs to be resolved at the very least.

  7. seanbudd commented on Sep 4, 2026

    @seanbudd
    Member
  8. CyrilleB79 commented on Sep 4, 2026

    @CyrilleB79
    Collaborator

    OK @seanbudd, understood.

    Given it's not possible for this time, could we at least harden the process so that MathCAT be regularly updated for each release, e.g. as eSpeak is. It's a pity to have introduced a nice new feature (MathCAT) in 2026.1 but see that this feature is not followed with needed fixes or upgrades in subsequent releases.
    Thanks!

  9. CyrilleB79 commented on Oct 9, 2026

    @CyrilleB79
    Collaborator

    @seanbudd, any news regarding my previous comment #20716 (comment)?

    Can we ensure that MathCAT will be updated for 2027.1 (should be in the milestone), as well as for each future release as we do with other components such as CLDR, eSpeak, etc.?

    If this issue is blocked for another reason, can you explain?

  10. added this to the 2027.1 milestone on Oct 13, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    audience/nvda-devPR or issue is relevant to NVDA / Add-on developersfeature/mathp5https://github.com/nvaccess/nvda/blob/master/projectDocs/issues/triage.md#prioritytriagedHas been triaged, issue is waiting for implementation.

    Type

    No type

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions