Predictika · Dependency pins for coding agents

An AI coding agent's Python package pins, checked before the lock file is written

An AI coding agent proposes the package versions to pin for a Python project. Before it edits the requirements and writes the lock file, it sends the pins to Predictika, which checks them against a declarative model of Python-version support, yanked releases, security advisories, license policy and version requirements between packages, then returns a verdict and every reason.

Scope: Python package pins (up to five per project) for 19 releases of 14 widely used packages, checked against the project's Python version and license policy. See everything this validator covers

This validator models the pins a coding agent proposes for a Python project: up to five package releases at a time, chosen from the catalog of releases it knows, together with the project's Python version (3.7 to 3.13) and whether the project is proprietary or open source.

  • Compatibility — each release must support the project's Python version, and every version another pinned package requires (for example, a pandas release that needs numpy below 2) must hold.
  • Safety — yanked releases and releases with a high-severity advisory are blocked; a moderate advisory needs security sign-off.
  • License policy — GPL and AGPL packages are blocked in a proprietary project and LGPL packages need legal sign-off; an open-source project may use them.
  • Consistency — the same package cannot be pinned twice.

Any pin set drawn from the catalog and these rules is in scope, not only the scenarios pictured here. Not covered: packages and releases outside the catalog, resolving a full dependency tree, scanning real vulnerability databases, or choosing versions for the agent. The version requirements follow the packages' published requirements; the advisory severities in the catalog are illustrative simplifications, not a security assessment of the real releases.

The AI coding agentChooses the package versions to pin and says they are ready to be written to the lock file.
Predictika validatorChecks every rule at once and returns the verdict, each finding, and the computed figures.

7 scenarios in 3 groups · each group runs from the agent’s first attempt to the outcome · click one to switch

What the agent proposes

The AI coding agent says

Illustrative agent statement. The validator receives the structured request below.

Proposing agent: AI coding agent (scripted)

Before sending, the agent must call Recorded run

Predictika validator


      
Waiting for the call.

Where a package installer alone falls short

Click to expand

Our assessment of what a typical Python installer or dependency resolver does with the same cases. It is a judgment about effort and reliability, not a claim that nothing can be built. This page produces no price or quote, so only the policy checks are compared.

What the validator caughtTypical installer or resolverPredictika
License policy for a proprietary project: block GPL and AGPL, send LGPL to legalOnly with workarounds
An installer does not apply a company license policy. It takes a separate license-scanning step and its own policy rules.
The license of every pin is checked against the project type in the same call as everything else.
A tiered advisory policy: block high severity, ask security to sign off on moderateOnly with workarounds
Advisory scanners report findings; turning them into block versus sign-off decisions before the lock file is written is extra tooling.
The severity tier decides block or needs approval, and the approval is recorded before the write is accepted.
Every problem returned in one answer before anything is writtenOnly with care
A resolver usually reports the first conflict it cannot satisfy; a license or advisory policy is checked elsewhere, so an agent meets the problems one step at a time.
All findings come back together, whatever order the pins arrived in.

What this validator catches: findings from its test cases

Click to expand

Every rule is checked on every call, in any order the choices arrive; one problem never hides another. Blocking findings stop the action; approval findings need a person to sign off; everything else is computed.

1The release does not support the project's Python version (for example, numpy 2.1 needs Python 3.10 or newer).
2The release was yanked from the index.
3The release has a high-severity advisory.
4A GPL or AGPL package in a proprietary project.
5Another pinned package falls outside the version range this release requires (for example, pandas 2.1 needs numpy below 2).
6The same package is pinned twice.
7The release has a moderate advisory: needs security sign-off or an upgrade.
8An LGPL package in a proprietary project: needs legal sign-off.

Scenarios and results

Click to expand

The recorded result of the validator for each scenario on this page: the request the AI agent sent, the verdict, and every finding, in the order they appear above.

1. pandas and numpy: pandas and numpy releases that cannot be installed together

The agent's request. Please pin pandas 2.1.4 and numpy 2.1.3 for the Python 3.12 project (license: proprietary) and write the lock file.

Verdict: Blocked.

  • Conflicts with another pinned package. pandas 2.1.4 requires numpy 1.22 or higher and below 2.0; the pinned version does not fit.
  • Pin set summary. 2 packages; 1 version conflict.

2. pandas and numpy: The agent resubmits after fixing the errors

The agent's request. Please pin pandas 2.2.3 and numpy 2.1.3 for the Python 3.12 project (license: proprietary) and write the lock file.

Verdict: Allowed.

  • Pin set summary. 2 packages; 0 version conflicts.

3. Security advisory: A release with a moderate security advisory

The agent's request. Please pin requests 2.31.0 and urllib3 2.2.3 for the Python 3.11 project (license: proprietary) and write the lock file.

Verdict: Needs approval.

  • Moderate advisory needs sign-off. requests 2.31.0 has a moderate advisory - needs security sign-off or an upgrade.
  • Pin set summary. 2 packages; 0 version conflicts.

4. Security advisory: The agent resubmits after fixing the errors

The agent's request. Please pin requests 2.32.3 and urllib3 2.2.3 for the Python 3.11 project (license: proprietary) and write the lock file.

Verdict: Allowed.

  • Pin set summary. 2 packages; 0 version conflicts.

5. Python version, license and conflicts: Three problems in one set of pins

The agent's request. Please pin numpy 2.1.3, pandas 2.1.4, PyQt5 5.15.11, requests 2.32.3 and urllib3 2.2.3 for the Python 3.9 project (license: proprietary) and write the lock file.

Verdict: Blocked.

  • Python version not supported. numpy 2.1.3 supports Python 3.10 to 3.13; the project runs Python 3.9.
  • License not allowed in a proprietary project. PyQt5 5.15.11 is GPL-licensed - not allowed in a proprietary project.
  • Conflicts with another pinned package. pandas 2.1.4 requires numpy 1.22 or higher and below 2.0; the pinned version does not fit.
  • Pin set summary. 5 packages; 1 version conflict.

6. Python version, license and conflicts: The agent resubmits after fixing the errors

The agent's request. Please pin numpy 1.26.4, pandas 2.1.4, PyQt5 5.15.11, requests 2.32.3 and urllib3 2.2.3 for the Python 3.9 project (license: proprietary) and write the lock file.

Verdict: Blocked.

  • License not allowed in a proprietary project. PyQt5 5.15.11 is GPL-licensed - not allowed in a proprietary project.
  • Pin set summary. 5 packages; 0 version conflicts.

7. Python version, license and conflicts: The agent resubmits after fixing the errors

The agent's request. Please pin numpy 1.26.4, pandas 2.1.4, requests 2.32.3 and urllib3 2.2.3 for the Python 3.9 project (license: proprietary) and write the lock file.

Verdict: Allowed.

  • Pin set summary. 4 packages; 0 version conflicts.

Narration transcript

Click to expand

The text of the narrated walkthrough, step by step.

  1. Welcome to a demo of Predictika's Validator. An AI coding agent proposes the package versions to pin for a Python project. Before it edits the requirements and writes the lock file, it sends the pins to Predictika, which checks them against a declarative model of Python-version support, yanked releases, security advisories, license policy and version requirements between packages, then returns a verdict and every reason.
  2. I will start with the first request by the agent.
  3. The agent says. Please pin numpy 2.1.3, pandas 2.1.4, PyQt5 5.15.11, requests 2.32.3 and urllib3 2.2.3 for the Python 3.9 project (license: proprietary) and write the lock file.
  4. Before it goes out, the agent calls the validator.
  5. Blocked, with three findings, all in one answer. Numpy 2.1.3 supports Python 3.10 to 3.13; the project runs Python 3.9. PyQt5 5.15.11 is GPL-licensed - not allowed in a proprietary project. Pandas 2.1.4 requires numpy 1.22 or higher and below 2.0; the pinned version does not fit.
  6. The validator returned three blocking findings in one answer. A check that reads one field at a time would pass most of this; it shows only when the choices in the pin set are checked against each other.
  7. What this shows: for license policy for a proprietary project: block GPL and AGPL, send LGPL to legal, an installer or resolver can do this only with workarounds.
  8. Now the agent resubmits.
  9. The corrected request. It changes the pin 1 to numpy 1.26.4.
  10. It calls the validator again.
  11. Still blocked, with one finding, all in one answer. PyQt5 5.15.11 is GPL-licensed - not allowed in a proprietary project.
  12. Two findings cleared. Still blocking: license not allowed in a proprietary project.
  13. The agent resubmits once more.
  14. The revised request. It changes the pin 3 to requests 2.32.3 and the pin 4 to urllib3 2.2.3. It removes the pin 5.
  15. It calls the validator once more.
  16. This time the validator clears it.
  17. The earlier finding is cleared.
  18. Three problems caught in one call, fixed in two passes, and a clean request. That is the value of Predictika's validator: catching mistakes before the action runs. Now you can try the other scenarios yourself.