Skip to content

NLPPlus v2.2.39 (engine v4.2.0) never reached PyPI: the Linux wheel job failed uploading its artifact (403) #38

Closed

Description

@ddehilster

What is wrong

PyPI's newest NLPPlus is 2.2.38, built on an engine from before v4.2.0. So pip install NLPPlus still gets an engine that cannot parse the empty string literal "" (nlp-engine #166, fixed in v4.2.0 by nlp-engine #743). Any analyzer containing "" fails to build under NLPPlus with no line number:

[RFA str action: Unhandled null case.]
[Error: Syntax error.]
[Nintern: Couldn't parse rules file.]
[Errors in loading analyzer.]

The same analyzer builds and runs under the VS Code extension's engine v4.2.0 (reported in VisualText/nlp-engine#744).

Where it broke: release, not engine

The percolation worked up to the last step:

Step Result
nlp-engine v4.2.0 released 2026-09-21 19:12, commit 7a4e604 ("Merge pull request #743 … feat/empty-string-literal")
Update nlp-engine & publish (repository_dispatch) success: fa5fcd6 "Bump nlp-engine submodule to 7a4e604 (v2.2.39)", tag v2.2.39 pushed
Build and upload to PyPI on v2.2.39 (run 35643462731) failure
↳ Build source distribution / MacOS / Windows wheels success
↳ Build wheels on Linux failure: every wheel compiled (cp310–cp313), then ##[error]Failed to FinalizeArtifact: Received non-retryable error: Failed request: (403) Forbidden
↳ upload_pypi, Make release skipped

Nothing is wrong with v2.2.39 itself. The Linux job built the wheels and then could not upload them as a workflow artifact (GitHub returned 403). Because upload_pypi needs every build job, nothing was published.

The same thing happened once before: v2.2.37's first Build and upload to PyPI run on 2026-09-14 failed, and a second run a minute later succeeded.

What needs to be done

  1. Re-run the failed jobs of run 35643462731 (Actions → the run → Re-run failed jobs). The Linux job should upload, and upload_pypi and Make release then publish NLPPlus 2.2.39 with engine v4.2.0.
  2. Check: pip install NLPPlus==2.2.39, then build an analyzer with L("a") = "";. It should build, which 2.2.38 does not.
  3. So this does not happen silently again: when Build and upload to PyPI fails on a v* tag, let the failure be seen (for example a retry of the artifact upload step, or a failure notice on the nlp-engine release). This failure went unnoticed for five days, and the successful Update nlp-engine & publish run made it look as though v4.2.0 had shipped.
  4. Then close NLPPlus 2.2.38 still rejects the empty string literal: release it on engine v4.2.0 nlp-engine#744, and #166 once the other packages carry the engine too.

Who is waiting on it

TEG's pipeline runs analyzers through NLPPlus (teg-doc-extractor pins 2.2.37). It will move its pin to 2.2.39 once the release is on PyPI.

Activity

  1. ddehilster commented on Sep 26, 2026

    @ddehilster
    MemberAuthor

    Re-ran the failed jobs of run 35643462731; all jobs passed and NLPPlus 2.2.39 (engine v4.2.0) is on PyPI. Verified: pip install NLPPlus==2.2.39, a pass with L("a") = ""; builds and outputs empty=[] resubst=[xy]. Step 3 (make failures visible) is in #39.

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

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions