Case study

A release that failed on a dot

Jarvis v1.0.0 passed 900+ tests, then stopped in its own deployment rehearsal. The cause was a security check applied one place too many.

PythonDeploymentTestingJarvis
Owner-reported findings. Published Oct 26, 2026. Reviewed Oct 26, 2026.

Symptom

Jarvis Engine v1.0.0 had been tagged after an independent re-audit and a test suite of more than 900 passing tests. The deployment rehearsal stopped at its release-test gate.

What was actually happening

The deploy runner copies a release into a temporary staging folder first. For v1.0.0 that folder was named:

.staging-v1.0.0

Jarvis has a project-name validator for the AITOOLS projects it watches. One of its rules: names can’t begin with a dot. That’s a sensible rule for watched projects.

But Jarvis was also using that same validator when it read its own internal description file. Running from .staging-v1.0.0, its own folder failed the check, and the release tests stopped.

Root cause

Two different questions were sharing one answer:

  • “Is this a valid watched project?” (strict, security-relevant)
  • “Can I read my own bundled resource?” (should be about the application, not the folder name)

Fix (A1-06)

  • Separated internal resource access from watched-project validation.
  • Kept the strict project-name rules for real AITOOLS projects. The fix didn’t loosen the security check.
  • Added a release-name test that reproduces staging-folder conditions, so this fails in testing before it can fail in deployment.

The full suite on a staging copy afterward: 931 tests, 915 passed, 16 skipped, zero failures.

Takeaways

  • Tests ran from the development folder, and deployment ran from a staging folder. The difference only showed up in the rehearsal, which is exactly why there is a rehearsal.
  • When a security check blocks something legitimate, narrow where it applies. Don’t weaken it.
  • A release tag isn’t a release. The fix still goes back through an independent audit before v1.0.1.