Problem/Motivation
The last release, 4.0.0-alpha6, was tagged 2024-12-11. Since then the 4.x branch has picked up fixes that are not in any release, the queue has accumulated 18 RTBC issues, and users keep asking for a new release tagged — see #2830988-56: [meta] 4.0.0 release roadmap, #2830988-57: [meta] 4.0.0 release roadmap and #2830988-59: [meta] 4.0.0 release roadmap.
The roadmap issue #2830988: [meta] 4.0.0 release roadmap has been open since 2016 and 22 of its 26 listed items are closed, which makes it hard to see what actually stands between us and a release. The gate set for beta in #2830988-19: [meta] 4.0.0 release roadmap — that the remaining API-breaking changes should be resolved first — referred to #2830989: Use services instead of global functions, which was closed fixed in March 2024.
This issue tracks the short list of work needed to get 4.0.0-beta1 out. It does not replace #2830988: [meta] 4.0.0 release roadmap, which remains the longer roadmap to stable.
Proposed resolution
Tag 4.0.0-beta1 — not another alpha, and not stable.
Why beta and not another alpha: the API-breaking work that gated beta is done, GitLab CI is green on 4.x HEAD, and beta correctly signals that no further API breaks are planned for 4.0.0.
Why not stable yet:
- #3344587: Support for field hidden by condition losing its required status still needs a semantics decision: should a field hidden by a condition validate as required? Either answer changes existing behaviour and should be settled before stable.
- A stable release activates security advisory coverage. The project is opted in per #2830988-36: [meta] 4.0.0 release roadmap, while beta releases are not covered. That is premature while #1561272: Conditionally required fields are not required remains critical and the XSS concern raised in #3377983-8: Comparison of WYSIWYG field values fail because of HTML tags involved is unreviewed.
Remaining tasks
1. Finish regressions and incomplete behaviour that should not ship in beta1
- #3573010: "Reset the target to its default values when the form is submitted if the dependency is not triggered." checkbox does not work after v4.0.0-alpha6 — major regression since alpha6. The ″Reset the target to its default values when the form is submitted if the dependency is not triggered″ option stopped working. The
options.resetpath has since been reworked inf3e3d0a, so retest against current 4.x and close if that fixed it; otherwise finish the repair. #3573010-10: "Reset the target to its default values when the form is submitted if the dependency is not triggered." checkbox does not work after v4.0.0-alpha6 reports MR !93 failing withCall to a member function getDefaultValue() on null. A documented reset option should work before beta1 ships. - #3463882: Select list fields is not emptied with "Empty" Action and #3613279: "Filled"/"Emptied" conditions never work when the dependee is an optional select field (_none misread as a value) — two reports of the remaining Empty/Filled handling gap.
state:emptynow assignsoptions.value ?? '', but a select whose empty option is_nonerejects an empty string as an invalid choice and keeps its previous value. These should be resolved together in the handler before beta1.
2. Land the RTBC backlog
18 issues are Reviewed and tested by the community, most of them small crash, warning, or validation fixes. Where an issue only has a patch, roll it into a merge request first so the pipeline runs. Merge in batches and re-run the test suite between batches.
Regression against the current release, highest priority:
- #3501575: TypeError: NestedArray::getValue(): Argument #2 ($parents) must be of type array, null given in ConditionalFieldsFormHelper::formFieldGetValues() — major, MR !81
Critical and major:
- #3574101: Field dependency Edit/Delete links point to wrong entity type — major, MR !96
- #3507266: Empty action sets field value to "undefined" — major, needs MR; requested for the roadmap in #2830988-57: [meta] 4.0.0 release roadmap
Warnings, type errors and validation bugs:
- #3495402: Warning: Trying to access array offset on value of type null in Drupal\conditional_fields\ConditionalFieldsFormHelper::formFieldGetValues() — MR !67
- #3505514: Undefined array key "#type" in ConditionalFieldsFormHelper.php on line 618 — MR !71
- #3512213: Wrong validation of required integer fields with value of "0" — MR !72
- #3438997: Field data array cannot be retrieved from form array by field name — MR !100
- #3443731: Warning: Undefined array key "regex" in ConditionalFieldsFormHelper::evaluateDependency() — MR !46
- #3245121: Store the 'Set of values' setting as a sequence to match its config schema — MR !94
- #3308745: Entity reference conditionals store null values — Needs review
- #3503448: Interdependent field conditions not working: "Undefined" value set — Might be fixed by #3507266: Empty action sets field value to "undefined"
Performance, deprecations and one feature:
- #3573139: Plugin definitions not cached causing full annotation discovery on every request — MR !92
- #3374313: Allow to statically cache more than one DependencyHelper — needs MR
- #3494204: Call to deprecated function watchdog_exception(). — MR !65
Postponed, not blocking beta1:
- #3499371: Error addStateToGroup(): Argument #1 ($new_states) must be of type array, null given — postponed pending more information. No path in 4.x passes
NULLtoaddStateToGroup(), and the reported backtrace does not match the branch history. Re-rated Normal; see #3499371-5: Error addStateToGroup(): Argument #1 ($new_states) must be of type array, null given. Revisit if a reproduction against unpatched 4.x-dev is provided.
3. Close out the remaining beta gates from the old roadmap
- #3207751: URL validation of link field doesn't work — the committed ″dirty fix″ was reopened because it causes validation errors on fields hidden by a condition. Proposal: do not treat the committed workaround as sufficient for beta1. Finish the current fix so hidden dependents have their values and errors handled correctly, while leaving the broader required-field semantics decision to #3344587: Support for field hidden by condition losing its required status before stable.
- #2859667: Conditional Required Field not Evaluating on Save with Autocomplete widget — Needs work and dormant since February 2025. Proposal: not a beta blocker; move it to the stable list.
4. Release
- Confirm the pipeline is green on 4.x after the merges.
- Update #2830988: [meta] 4.0.0 release roadmap to remove closed items and show the remaining path to stable.
- Tag 4.0.0-beta1 and write the release notes.
Not blocking beta1
These remain on #2830988: [meta] 4.0.0 release roadmap as work for stable:
- #3344587: Support for field hidden by condition losing its required status — needs a documented semantics decision plus FunctionalJavascript coverage.
- #1561272: Conditionally required fields are not required — critical.
- #3105263: Support for Layout Builder — feature; the MR is at Needs review and still has open questions around reusable versus inline blocks.
- #3377983: Comparison of WYSIWYG field values fail because of HTML tags involved — the XSS concern raised in #3377983-8: Comparison of WYSIWYG field values fail because of HTML tags involved should move to a private security issue before the MR lands.
- #2859667: Conditional Required Field not Evaluating on Save with Autocomplete widget — see above.
Core-version housekeeping is already resolved: Drupal 9 support was dropped in #3617070: Drop Drupal 9 support and require Drupal >= 10.3, and MR !107 from #3596497: Automated Drupal 12 compatibility fixes for conditional_fields 4.x-dev is green and merged, so Drupal 12 support will be included in beta1.
Comments
Comment #2
joelpittetComment #3
joelpittetComment #4
joelpittetDropping the following from beta1 target.
All four are normal-priority, none is a crash, and none has an MR that is both current and correct:
find()bug.Comment #5
joelpittetAdding
And some issue summary clean-up
Comment #6
joelpittetComment #7
joelpittet