Skip to content

fix(version): version PrestaShop portée par chaque objet (plus de cache statique) - #112

Merged
PrestaEdit merged 11 commits into
devfrom
fix/version-per-instance
Oct 2, 2026
Merged

PrestaEdit merged 11 commits into
devfrom
fix/version-per-instance

Conversation

@PrestaEdit

Copy link
Copy Markdown
Contributor

Pourquoi

La version de PrestaShop vivait dans un statique du trait Traits\Version, partagé entre les pages, et même entre back-office et front-office avant PHP 8.3. La dernière page construite imposait donc sa version aux autres, et getMajorVersion() retombait silencieusement sur '8' en mettant ce repli en cache. Le comportement changeait selon la version de PHP : vert en 8.4 en local, rouge en 8.1 et 8.2 en CI.

Changements de comportement

  1. Version par objet (page, suite, scénario) : il n'y a plus de statique partagé, et le comportement est identique de PHP 8.1 à 8.4.
  2. Plus de repli silencieux sur '8'. Une page construite sans patchVersion ni PS_VERSION dans ses globals lève InvalidVersionException. C'est aussi le cas de tout objet sans version, au premier appel à getMajorVersion().
  3. Le patchVersion passé au constructeur d'une page est respecté. Avant, il était ignoré.
  4. importPage() prend le namespace vX et la version de la page au même endroit : globals['PATCH_VERSION'], sinon la version de l'appelant. Une classe de page introuvable lève InvalidVersionException.
  5. TestsSuite::__construct(loadGlobals: false) résout sa version, dans cet ordre : onVersion, puis $psVersion, puis l'env, sinon 8.1.0.
  6. setVersions() est typé array et ne garde que les trois clés. Scenario analyse PATCH_VERSION au lieu de remplacer le tableau par une chaîne.
  7. Le tag visuel auto-vX-… suit la version de la page. Le contournement « globals d'abord » est retiré.
  8. Un format refusé (ex. 8.1.10) lève bien InvalidVersionException. Avant, l'exception n'était pas importée et produisait une erreur « classe introuvable ».
  9. Nouvelle API : Version::parseVersions() (statique). CommonPage::initVersion() est protected.

Les noms et signatures publics des getters et setters sont conservés (getMajorVersion, setMajorVersion, exctractVersions…). Les formats de version acceptés sont inchangés.

Tests

  • Nouveaux : PageVersionInitTest, PageVersionIsolationTest, ScenarioVersionTest, plus des cas dans SuiteVersionWiringTest.
  • Retirés : le hack de sauvegarde et restauration du statique dans BackOfficeGoToMenuTest, et le test « globals d'abord » du tag visuel.
  • phpunit : 542 tests verts sous PHP 8.1, 8.2, 8.3 et 8.4, et sous trois ordres aléatoires en 8.1.

Impact pour l'app

Aucun changement de code n'est nécessaire. Après la montée de version de la lib, il faut vérifier que l'éditeur de suite liste toujours les pages. SuiteController::buildPagesFromAst construit les pages avec PS_VERSION, qui est maintenant lu : une valeur hors motif masquerait la page.

Spec : docs/superpowers/specs/2026-10-02-version-per-instance-design.md. Plan : docs/superpowers/plans/2026-10-02-version-per-instance.md.

🤖 Generated with Claude Code

PrestaEdit and others added 11 commits October 2, 2026 14:25
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…i sur 8

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… patch

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ne version sans pages

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… à jour

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant