fix(schema): bump exportJob past the version instances already carry - #219
Open
rubenvdlinde wants to merge 1 commit into
Open
fix(schema): bump exportJob past the version instances already carry#219rubenvdlinde wants to merge 1 commit into
rubenvdlinde wants to merge 1 commit into
Conversation
…ries The declared version was 0.1.0. Instances carry 1.0.0 — editing a schema once through the OpenRegister UI bumps it there — so `ImportHandler` version-skipped every import of this schema, and its escape hatch could not see the difference because it compares only properties/required/authorization (openregister#2525). The consequence was not cosmetic: the declared `x-openregister-lifecycle` never reached the running schema, so `TransitionEngine::transition()` found no state machine and did nothing. `RunExportJob` ran, its oc_jobs row was consumed, and the export sat at `status: queued` forever with no log line anywhere. Proven on a live instance — adding the lifecycle to the stored schema by hand took the object's `available-actions` from empty to `start → running`. 1.1.0 clears the stored 1.0.0. openregister#2525 is the real fix; this bump is what makes existing instances converge without it. Also teaches the e2e to name this cause instead of reporting the symptom: a job stuck at `queued` now reports the object's `available-actions`, and an empty list says the schema has no live lifecycle. The two explanations — "the worker never ran" and "the status could not move" — were indistinguishable from the status alone, which is what made this take eight CI iterations to find.
Contributor
Quality Report — ConductionNL/openbuild @
|
| Check | PHP | Vue | Security | License | Tests |
|---|---|---|---|---|---|
| lint | ✅ | ||||
| phpcs | ✅ | ||||
| phpmd | ✅ | ||||
| psalm | ✅ | ||||
| phpstan | ❌ | ||||
| phpmetrics | ✅ | ||||
| eslint | ✅ | ||||
| stylelint | ✅ | ||||
| build | ✅ | ||||
| check-manifest | ✅ | ||||
| test-l10n | ✅ | ||||
| check-gitignore | ✅ | ||||
| check-nc-floor | ✅ | ||||
| format | ❌ | ||||
| composer | ✅ | ✅ 106/106 | |||
| npm | ✅ | ✅ 626/626 | |||
| app:check-code | ⏭️ | ||||
| info.xml | ✅ | ||||
| REUSE | ❌ | ||||
| PHPUnit | ❌ | ||||
| Newman | ❌ | ||||
| Playwright | ❌ | ||||
| Hydra gates | ❌ |
Quality workflow — 2026-08-16 11:00 UTC
Download the full PDF report from the workflow artifacts.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Follow-up to #206, which merged with its export e2e still red. This is why it was red — and it is not a test problem.
What was wrong
exportJobdeclared schemaversion: 0.1.0. Instances carry 1.0.0 (editing a schema once through the OpenRegister UI bumps it there).ImportHandlerskips an import whenincoming <= existing, and its escape hatchschemaContentDiffers()compares onlyproperties,requiredandauthorization— so it could not see that the stored schema was missing an entire annotation block.The consequence is not cosmetic. The declared
x-openregister-lifecyclenever reached the running schema, soTransitionEngine::transition()found no state machine and returned without doing anything.RunExportJobran, itsoc_jobsrow was consumed, and the export sat atstatus: queuedforever, with no log line anywhere.Proven on a live instance: adding the lifecycle to the stored schema by hand took the job object's
available-actionsfrom empty tostart → running, and firing it moved the object torunning.The control case is in this same file:
applicationVersiondeclares 0.4.0, is deployed at 0.4.0, and carries its lifecycle correctly.What this changes
version: 0.1.0→1.1.0so the import clears the stored 1.0.0 and existing instances converge. fix(import): an annotation-only schema change must not be skipped openregister#2525 is the real fix — this bump is what makes instances converge without waiting for it.queuedhas two explanations that are indistinguishable from the status alone — "the worker never ran it" and "the status could not move" — and that ambiguity is what made this take eight CI iterations. The failure message now includes the object'savailable-actions; an empty list says the schema has no live lifecycle.Scope note
This fixes openbuild's own schema. The general defect — any schema whose deployed version is ≥ the declared one silently never receives an annotation-only change, across the whole 23-key vocabulary (
lifecycle,mcp,calculations,notifications,widgets, …) — is fixed in ConductionNL/openregister#2525.🤖 Generated with Claude Code