Repository navigation
Merge master into release/650; preserve 6.5 test fixes - #2011
Merged
Merged
Conversation
Co-authored-by: Armaan Gupta <armaang@Armaans-MacBook-Pro.local>
#1949) Co-authored-by: Armaan Gupta <armaang@Armaans-MacBook-Pro.local>
…bordered cells) (#1950) * feat(table): add AEM Style System variant support for table component (striped rows) * added border theme variant for the table component --------- Co-authored-by: Armaan Gupta <armaang@Armaans-MacBook-Pro.local>
* feat(FormContainer): emit fd:setPropertyBehaviour form property
Exposes the new form-level property `fd:setPropertyBehaviour` ('async' default |
'eager') from the v2 form container, mirroring how `fd:changeEventBehaviour` is
wired. The base getCustomProperties() strips the `fd:` prefix, so a node-authored
value needs explicit emission: adds the ReservedProperties constant (auto-registered
as reserved via reflection), a @ValueMapValue field, and an emit in getProperties().
No feature-toggle-driven default (unlike changeEventBehaviour) — the af-core runtime
defaults to the backward-compatible 'async', so the property is pure opt-in: a form
sets 'eager' to get read-after-write for setProperty / rule-node writes.
Pairs with af2-web-runtime #780 (runtime support) and the af2-docs spec addition.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* chore(deps): bump @aemforms/af-core and @aemforms/af-formatters to ^1.0.4
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* chore: re-trigger CI (flaky telephoneinput authoring test, unrelated to change)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* test(telephoneinput): fix flaky "Adding removing patterns from design policy"
The test mutates a shared, persistent design policy (adds allowedCustomFormats/item0
+ allowedFormat3 and saves it) but never cleaned up, so any second execution — a
Cypress retry, a re-run, or the spec running after a prior partial run — started from
a dirty policy. With item0 already present, the design dialog's Coral multifield
misbehaves (the racy "Cannot create property '_namespace'" upgrade error fires) and
[name="./allowedCustomFormats/item0/customFormatKey"] never renders → 10s timeout.
Reset the policy to baseline in beforeEach via an authenticated sling @delete POST
(using the app's jQuery so the session cookie is carried, like enableOrDisableTutorials),
so every run/retry starts clean. Verified locally: pre-dirtied policy + 4 consecutive
runs all pass (was deterministically failing on the 2nd run before).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
…ing feature (#1934) * added mobile layout handling * fixed mobile layout css * added sorting feature in mobile layout * resolved merge conflicts * moved the css part from the core components to the theme canvas * fix: address table mobile layout review comments (PR #1934) - rename _mobileSortOverlay/_mobileFilterOverlay to _mobileSortSheet/_mobileFilterSheet and cmp-adaptiveform-table__sort-overlay to __sort-scrim, avoiding collision with AEM's own /apps-over-/libs "overlay" terminology - add Table.selectors.headerCell/.sortButton and Table.SORT_ASC/SORT_DESC constants, replacing repeated selector and "asc"/"desc" string literals - localize the mobile sort/filter bar strings via FormView.LanguageUtils.getTranslatedString, add corresponding en.json keys, and fix Table never setting this.lang (was always falling back to English regardless of form locale) - add focus trap and focus-restore-to-trigger for the mobile sort/filter sheets * i18n: add table mobile-bar translations for all supported locales Moves the 11 new table i18n keys (sortTable, filterTable, sort, filter, sortOptions, sortBy, sortColumns, sortOrder, sortDirection, ascending, descending) to the end of en.json to match the file's append convention, and adds translations for de, es, fr, it, ja, ko-kr, pt-br, zh-cn, zh-tw so non-English forms render localized text instead of the English fallback. --------- Co-authored-by: Armaan Gupta <armaang@Armaans-MacBook-Pro.local>
…gin (#1981) exec-maven-plugin invoked node_modules/.bin/jsdoc directly, which requires a global node binary on PATH via its #!/usr/bin/env shebang. In build environments without a global Node install (e.g. Cloud Manager), this fails with exit 127: "/usr/bin/env: 'node': No such file or directory". Route the jsdoc generation through frontend-maven-plugin's npm goal instead, which correctly uses the locally-installed node/npm it manages, matching the pattern already used by other modules in this repo (e.g. ui.frontend).
FORMS-24568 Adding aep submit action for Submission service
Adds handling for the v3 site-key type across the recaptcha component:
- Client-side widget rendering and edit-dialog logic treat v3 the same
as an invisible/score-based key, since v3 has no visible challenge.
- customFunctions.js fetches the v3 token locally (classic, non-enterprise
grecaptcha namespace) since af-core's upstream fetchCaptchaToken only
handles turnstile and Enterprise score-based keys.
- submitForm() is overridden to auto-fetch the captcha token before
submit for v3 as well, matching the existing turnstile/Enterprise
behavior.
- For XFA-rendered forms, the token is applied via
globals.functions.dispatchEvent(field, 'custom:setProperty', {value})
instead of a direct field.value assignment: @aemforms/af-core-xfa's
rule-node proxy only implements a get trap (unlike af-core's, which
also implements set), so a direct assignment invokes the real value
setter with `this` bound to the proxy and crashes on internal
`this.parent` access. Dispatching the update looks the field up by id
on the raw form and applies it directly, avoiding the proxy entirely.
…load Auto-fetch captcha (invisible reCAPTCHA v2, enterprise-score, and v3) failed on XFA-backed adaptive forms embedded without an iframe: clicking Submit logged "fetchCaptchaToken is not defined" and no token was fetched. The frontend ships two runtime bundles - non-XFA (@aemforms/af-core) and XFA (@aemforms/af-core-xfa) - each with its own FunctionRuntime. customFunctions were only registered via setupFormContainer against the non-XFA runtime (window.FormView), while the XFA form's rule engine runs in af-core-xfa and never received fetchCaptchaToken (af-core-xfa ships no default for it), so its built-in submitForm errored. Register customFunctions at bundle load in the shared entry so each bundle populates its own FunctionRuntime - in main-xfa.js this happens before the XFA form instance (and its function-table snapshot) is created. registerFunctions is idempotent, so the later setupFormContainer registration is unaffected. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ts under XFA The container view's submitSuccess/submitError/saveSuccess/saveError handlers read action.target.getState().events, but the XFA runtime's getState() omits `events`, so the handlers threw "Cannot read properties of undefined" on submit/save. This was previously masked by an earlier captcha error and surfaced once captcha submit succeeds on no-iframe XFA embeds. Guard the access with optional chaining; a missing events object means no rule is configured, so the default handler runs (thank-you / error UX). No-op for the non-XFA runtime where events is always present. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ode + tests Address review feedback on reCAPTCHA v3 support: - RecaptchaImpl.getCaptchaDisplayMode() returns "invisible" for v3 so af-core's built-in submitForm auto-fetches the token natively (both af-core and af-core-xfa runtimes), removing the need to override submitForm. - Remove the customFunctions.js submitForm override and its helpers (isArrayValue/valueOf/toStringOrEmpty), which only existed to support it. - Add Cypress authoring + runtime specs for v3 and the v3 IT fixtures (cloud config + sample page). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…unctions Collapse the local fetchCaptchaToken wrapper to a plain re-export of cf.fetchCaptchaToken now that v3 support lives upstream in @aemforms/af-custom-functions, removing the duplicated v3 grecaptcha.execute logic. Requires an @aemforms/af-custom-functions release that includes v3 support plus a matching dependency bump; until that lands, v3 relies on a local symlink to the updated package. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Add "submission should pass for reCAPTCHA v3" runtime test plus the updateRecaptchaV3Config helper (secret injected via the RECAPTCHA_V3_API_KEY env var; low threshold for headless reliability). - Set the real v3 site key in the v3 cloud config fixture (site keys are public; the secret stays out of git). - Gitignore ui.tests/test-module/cypress.env.json so the local secret is never committed. Verified end-to-end locally: v3 form submit -> POST /adobe/forms/af/submit -> 200. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…container
On the addon build CI runs, the Threshold Score field is nested inside the
enterprise-fields container which is display:none for a v3 config, so Cypress
refused to clear/type into it ("element is not visible"), failing the v3
submission test. Use {force: true} — a hidden input is still submitted on save —
so the threshold is applied and the v3 submit flow runs.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…test
The v3 threshold field is a coral-numberinput nested in the hidden
enterprise-fields container, so the wrapper is never upgraded to a
clearable element and cy.clear() fails even with {force:true}. Target
the inner native input, which is always clearable regardless of the
wrapper's visibility/upgrade state, and syncs to the field on save.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…HA v3 1.0.18 (published to npm) contains the v3 token-fetch fix that routes v3 site keys through the classic grecaptcha namespace. customFunctions.js already delegates to cf.fetchCaptchaToken, so this makes the branch CI-safe now that the version is available in the registry. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Switch the v3 site/secret key to Google's published test pair, which always returns a constant score of 0.9 server-side regardless of domain. This makes the submission test deterministic and removes the retry-until-success loop and the RECAPTCHA_V3_API_KEY dependency that were needed to work around real scoring variability in headless CI browsers. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Google does not publish an official test key pair for v3 score-based verification (the public 6LeIx... pair is documented for v2 checkbox only and does not reliably render the v3 invisible badge). Restore the real site key in the v3 cloud config fixture and the RECAPTCHA_V3_API_KEY-based secret in the Cypress test, and drop the threshold to 0 so a real headless- browser score still passes verification. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Mirror the enterprise-score failure test for v3: set the threshold to 1.0 (above any real headless-browser score) so server-side verification always rejects the token, deterministically asserting the 400 + CAPTCHA-validation error. Gated on isLatestAddon like the other failure tests. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Reverts the index.js bundle-load registerFunctions call added for reCAPTCHA v3. The `fetchCaptchaToken is not defined` failure it worked around was traced to the XFA runtime clientlib (core.forms.components.runtime.all.xfa) being loaded on pages that have no XFA form, which creates a second FunctionRuntime singleton that setupFormContainer never populates. The proper fix is to stop importing the XFA clientlib when no XFA form is present, which makes this bundle-load registration unnecessary. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The reCAPTCHA v3 test cases are gated behind FT_FORMS-27648. Add it to the IT DynamicToggleProviderImpl enabledToggles so the toggle is on when the Cypress v3 submission tests (success and failure) run on CI. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
reCAPTCHA v3 is gated behind FT_FORMS-27648, so the v3 test cases (render, submission pass, submission fail) should only run when that toggle is on and the latest addon is in use. Fetch the enabled toggles in before() and guard each v3 test with cy.af.isLatestAddon() && toggle_array.includes(FT_RECAPTCHA_V3), matching the existing hCaptcha pattern. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Add reCAPTCHA v3 to the supported-versions list (invisible/badge-only, token auto-fetched at submit, gated behind FT_FORMS-27648) and note that recaptchaSize does not apply to v3. Addresses PR review feedback. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
feat(recaptcha): support reCAPTCHA v3 in adaptive forms
Sync dev into master
#1989) * Add Next Gen Dynamic Media (NGDM) support to the StaticImage component Ports the NGDM asset support from adobe/aem-core-wcm-components#2481 to the Adaptive Forms StaticImage (form/image v1) component. When the fileReference is an NGDM asset (/urn:...) and the NextGenDynamicMediaConfig OSGi service is enabled, the delivery URL is built directly instead of resolving a DAM rendition. Bumps aem-sdk-api to 2023.9.13665 to pick up the NextGenDynamicMediaConfig API, and enables the NGDM asset picker on the component's file upload dialog field. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * Extract NGDM logic to utils, add exporter test, fix review findings - Extract Next Gen Dynamic Media (NGDM) URL-resolution logic out of StaticImageImpl into a shared NgdmImageUtils class - Add a Sling Model JSON-exporter test proving the resolved NGDM delivery URL is exposed as "value" and fd:repoPath is correctly absent - Fix multi-dot seo-name filenames (e.g. "product.hero.png") resolving to the wrong delivery URL/extension by splitting on the last dot, not the first - Tighten isNgdmImageReference() to require a non-empty asset-id and seo-name segment, avoiding a NoSuchElementException on malformed references - Mark com.adobe.cq.ui.wcm.commons.config as an optional OSGi import so the bundle still resolves on installations without this Cloud Service API * Gate NGDM image picker behind FT_FORMS-26424 feature toggle - Add FT_NGDM_IMAGE_PICKER (FT_FORMS-26424) constant, following the existing FeatureToggleConstants pattern - Split the Image dialog's file widget into two mutually-exclusive variants gated by granite:rendercondition/featuretoggle: NGDM picker enabled shows the Pick (Local/Remote) UI, disabled shows the original Browse Assets/Upload UI - Gate StaticImageImpl's NGDM URL resolution and fd:repoPath exclusion behind the same toggle via ComponentUtils.isToggleEnabled(), so a saved NGDM reference is treated as a plain fileReference when the toggle is off - Add toggle-enabled/disabled test coverage, following the same System.setProperty/@AfterEach pattern already used in FragmentImplTest * Move NgdmImageUtils to internal.form package, use StringUtils for parsing Addresses outstanding review feedback from rismehta on PR #1965: - NgdmImageUtils was sitting under internal.models.v1.form; move it to internal.form alongside FeatureToggleConstants, since it's a shared helper, not a component model - Replace manual indexOf/substring parsing with StringUtils.substringBefore/After(Last) in isNgdmImageReference() and buildNgdmImageSrc() Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * Add Cypress test for NGDM file picker dialog UI (FT_FORMS-26424) Addresses review comment from rismehta asking for test coverage of the image dialog change: when FT_FORMS-26424 is enabled the "file" widget renders a Pick dropdown with Local/Remote options, and when disabled the "fileLegacy" widget renders a plain Pick button with no dropdown. Verified end-to-end with a real Cypress run against a local AEM instance in both toggle states (dropdown present/absent as expected). Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Pankaj Parashar <pankajpr+adobe@adobe.com> Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com> Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
feat(webmcp): register the WebMCP tool catalog on form load
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
feat(webmcp): register the WebMCP tool catalog on form load Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Reuse the existing telephone field with the same default policy, wait for policy save and verify persisted custom patterns before editor navigation, and clean up prepared policy attempts. Keep shared insertion commands unchanged. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Preserve insertion of a new telephone field into the blank form. Await policy persistence, actual layer transitions and insertion events; query only the visible insertion dialog and re-query its search input after clearing. Preserve original assertions and wait for the edit dialog to close before cleanup. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Retry opening the Insert dialog after lost actions, target only visible dialog controls, and wait for layer, insertion and replacement refreshes. Restore the original replace-group policy state using existing editor helpers and named actions. Add a deterministic lost-Insert-click regression with delayed persistence responses. Validation: five Chrome repeats (25 passing), Electron Sites/Forms replacement tests (11 passing), and PR-branch Chrome replacement/telephone-input tests (11 passing), all with test retries disabled. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…endly Replace duplicated telephone policy layer/insertion sequencing with existing helpers. Scope insertion to guideSelectors.insertComponentDialog.dialog and replacement to the Forms content hook; policy controls use cq-dialog and value hooks rather than Coral element tags. Document shared helper reuse. Validate 10 authoring specs: 67 passing and 2 pre-existing skipped tests. One Button cancel-dialog assertion used its existing retry; a standalone rerun passed all 6 active Button tests on their first attempt. Insertion and layer synchronization checks passed across Forms, Sites, fields, layouts, nested wizard panels and Footer. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Fix/telephoneinput policy test
…2009) Add runtime-only coverage for the legacy _options.parent._setProperty chain. Use the maintained IT page so repeated previews retain working custom-function registration. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* fix(tests): isolate telephone policy authoring from component insertion Reuse the existing telephone field with the same default policy, wait for policy save and verify persisted custom patterns before editor navigation, and clean up prepared policy attempts. Keep shared insertion commands unchanged. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * fix(tests): synchronize blank-page telephone policy authoring Preserve insertion of a new telephone field into the blank form. Await policy persistence, actual layer transitions and insertion events; query only the visible insertion dialog and re-query its search input after clearing. Preserve original assertions and wait for the edit dialog to close before cleanup. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Fix shared authoring synchronization and flaky Sites replacement tests Retry opening the Insert dialog after lost actions, target only visible dialog controls, and wait for layer, insertion and replacement refreshes. Restore the original replace-group policy state using existing editor helpers and named actions. Add a deterministic lost-Insert-click regression with delayed persistence responses. Validation: five Chrome repeats (25 passing), Electron Sites/Forms replacement tests (11 passing), and PR-branch Chrome replacement/telephone-input tests (11 passing), all with test retries disabled. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Reuse shared insertion flow and make authoring selectors backport-friendly Replace duplicated telephone policy layer/insertion sequencing with existing helpers. Scope insertion to guideSelectors.insertComponentDialog.dialog and replacement to the Forms content hook; policy controls use cq-dialog and value hooks rather than Coral element tags. Document shared helper reuse. Validate 10 authoring specs: 67 passing and 2 pre-existing skipped tests. One Button cancel-dialog assertion used its existing retry; a standalone rerun passed all 6 active Button tests on their first attempt. Insertion and layer synchronization checks passed across Forms, Sites, fields, layouts, nested wizard panels and Footer. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * fix: consume af-core 1.0.10 and cover legacy custom-function access (#2009) Add runtime-only coverage for the legacy _options.parent._setProperty chain. Use the maintained IT page so repeated previews retain working custom-function registration. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Preserve release/650 versions, SDK configuration, and existing XFA exclusions. Keep release/650 versions of conflicting Cypress tests and support commands while bringing in master runtime updates. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Restore CAPTCHA implementation, tests, documentation, and custom-functions dependency to release/650. Remove reCAPTCHA v3 fixtures and its feature toggle while retaining WebMCP and the af-core compatibility fix. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Lighthouse scores (desktop)
|
Lighthouse scores (mobile)
|
Accessibility Violations Found
|
Lighthouse scores (mobile)
|
Lighthouse scores (desktop)
|
Accessibility Violations Found
|
Codecov Report✅ All modified and coverable lines are covered by tests. 📢 Thoughts on this report? Let us know! |
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.
Description
Merge
adobe/masterat62086332528e34157d92d4ac263a8c14cbd30d33intorelease/650, based ondbb146aca7f02f570a2ccb35381acae661bb1b18.Bring in the published
@aemforms/af-core1.0.10 compatibility fix, WebMCP integration, and associated tests and documentation.All incoming CAPTCHA changes are excluded because the new CAPTCHA functionality is not implemented for 6.5. CAPTCHA Java models, component scripts, tests, exporter fixtures, and documentation match the release baseline; the new v3 sample/configuration fixtures and
FT_FORMS-27648toggle are excluded. The CAPTCHA-specific@aemforms/af-custom-functionsbump is also excluded, retaining release/650's 1.0.17.Conflict resolution preserves the
1.1.85-SNAPSHOTversion, 6.5 SDK and OSGi configuration, release-specific compatibility documentation, and existing XFA exclusions. All five conflicting Cypress test/support files are retained exactly fromrelease/650:ui.tests/test-module/libs/support/commands.jsui.tests/test-module/specs/recaptcha/recaptcha.runtime.cy.jsui.tests/test-module/specs/replaceaction/replacelayout-sites.authoring.cy.jsui.tests/test-module/specs/ruleeditor/authoring/ruleEditor.authoring.cy.jsui.tests/test-module/specs/telephoneinput/telephoneinput.authoring.cy.jsThe incoming WebMCP Java exporter tests are retained alongside the release-specific Java model behavior. Non-conflicting incoming tests are included.
Related Issue
FORMS-28607, via #2009. This is a broader master-to-release synchronization, not only that fix.
Motivation and Context
Synchronize the 6.5 release branch with current master while preserving its recent authoring-test stabilization and platform-specific adaptations. In particular, consume the runtime fix that restores deprecated legacy custom-function access; migration to public model APIs or supported helpers remains preferred.
How Has This Been Tested?
Validation was run in an isolated worktree with its own frontend dependencies on macOS, using Node.js 22.19.0, npm 10.9.3, Maven 3.9.8, and Java 11.0.24 for Maven.
npm --prefix ui.frontend test -- --runInBand --silent— passed: 7 suites, 45 tests after excluding CAPTCHA changes.npm --prefix ui.frontend run build:prod— passed; webpack reported three bundle-size/performance warnings.JAVA_HOME=$(/usr/libexec/java_home -v 11) mvn -B -ntp -pl bundles/af-core -am -Dtest=FormContainerImplTest,RecaptchaImplTest -Dsurefire.failIfNoSpecifiedTests=false test— passed: 94 tests, zero failures, errors, or skips after restoring the original CAPTCHA model/tests.JAVA_HOME=$(/usr/libexec/java_home -v 11) mvn -B -ntp -DskipTests validate— passed across the complete 19-project reactor.git diff --cached --check— passed before both commits.Changed JavaScript syntax and XML/JSON parsing were checked, and exact preservation of the five conflicting Cypress files was verified. Both upstream branch tips are ancestors of the merge commit.
The complete Java unit suite, live AEM deployment, and Cypress end-to-end execution were not run. CI results are pending.
Screenshots (if appropriate):
Not applicable.
Types of changes
Checklist: