Follow the upstream 2026-08 rename wave and unbreak the sync pipeline - #20
Merged
Conversation
The three nightly pipelines have been red since 2026-07-30, so the core package — and with it the published CAP app — stopped moving while upstream reworked its class names and the samples repository restructured. Three independent breaks, all fixed here. 1. transpile_abap2ui5 failed: three upstream constructs produced JS that does not parse — TRY … CLEANUP … ENDTRY (now a catch-and-rethrow, or the else branch of the multi-CATCH chain), REF #( tab[ … ] OPTIONAL ) (same lowering VALUE #( ) already had) and a DEFAULT literal in an interface method (qualifying `1` as z2ui5_if_client=>1). 2. mirror_samples cloned the `cloud` branch, which upstream deleted on 2026-08-12 — ABAP Cloud systems install `main` itself now. The mirror follows `main` and skips the two packages upstream itself strips from its published build (00/97 experimental, 00/98 testing). 3. build_core failed on the ratchets because the whole framework layer was renamed (z2ui5_cl_core_* → z2ui5_cl_ui5_*, z2ui5_cl_a2ui5_* → z2ui5_cl_ui5_util_*, z2ui5_cl_app_*_js → z2ui5_cl_ui5f_*, the framework apps into 01/04) while the hand-ported port layer kept the old names, so the transpiler filled in raw transpiles beside orphaned hand-ports. The 47 hand-ports follow the rename, and the exports map, the transpiler's require resolution, the jest module mapper, the app lookup paths and the web registry follow them. Making the renamed classes actually run needed five transpiler fixes: table and structure aware IS INITIAL (an empty table is truthy in JS), the PREFERRED PARAMETER call style for the new view builder (its ele( )/tag( ) chain is called positionally), offset/length access on an attribute (cls=>const(1) is not a call), INITIAL values for unpassed OPTIONAL parameters, and the concat_lines_of / shift_left / shift_right / substring_after / substring_before builtins. The client hand-port gains get_event( ), the new interface shortcut 14 samples use. Also fixes the browser bundle, which has been broken since async_hooks entered the user-exit class: adapters/web now shims AsyncLocalStorage. Both known-failure baselines are rebased onto the new names. apps-smoke is comparable to before (8 of 104 samples, same failures as the old 13 of 208 where the sample survived); upstream-units grew from 25 to 128 entries, the new ones recording upstream API the JS port does not implement yet (get_event_client_json, session_merge) and tests asserting on abap-internal state the port models differently. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VHRfng5K6Yc8c4j7hBytXo
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.
All three nightly pipelines have been red since 2026-07-30, so
core/stopped moving — and with it the published CAP app.update_capdownstream stayed green the whole time because it kept mirroring an unchanged core and reported "app unchanged", which is why nothing looked broken.Three independent breaks, all fixed here.
1.
transpile_abap2ui5— three constructs produced JS that does not parseTRY … CLEANUP … ENDTRYtry {with nocatch/finallyelsebranch of the multi-CATCHchain when the TRY has handlersREF #( tab[ … ] OPTIONAL )(… optional)VALUE #( )already hadDEFAULT 1in an interface methodz2ui5_if_client=>12.
mirror_samplescloned a branch that no longer existsabap2UI5/samplesdeleted itscloudbranch on 2026-08-12 — ABAP Cloud systems installmainitself now. The mirror followsmainand skips the two packages upstream itself strips from its published build (00/97experimental,00/98testing).3.
build_core— the framework layer was renamed underneath the portUpstream renamed
z2ui5_cl_core_*→z2ui5_cl_ui5_*,z2ui5_cl_a2ui5_*→z2ui5_cl_ui5_util_*,z2ui5_cl_app_*_js→z2ui5_cl_ui5f_*and moved the shipped apps into01/04, while the hand-ported port layer kept the old names. The transpiler stopped recognising them as hand-ported and filled in raw transpiles beside orphaned ports.The 47 hand-ports follow the rename (
git mv, so the diff stays reviewable), and everything that keys on those names follows them: the packageexportsmap, the transpiler's require resolution, the jest module mapper, the app-lookup search paths and the web registry.z2ui5_cl_http_handlerstays reachable as a re-export — upstream keeps the class as a compat subclass, and the entry point is a service function here, which anINHERITING FROMtranspile cannot extend.Transpiler fixes the renamed classes needed to actually run
The new
z2ui5_cl_ui5_view_builderis transpiled (not hand-ported) and used by 102 samples, so its gaps were load-bearing:IS INITIAL—!xis wrong for an empty table (truthy in JS) and for an all-initial structure; nowz2ui5_cl_util.abap_is_initial( )view->ele( \Shell` )` is positional; the existing pop-factory shim now also wraps prototype methodscls=>const(1)is a substring, not a call (abaplint types the hugging(distinctly, same rule ABAP parses by)IS SUPPLIED, which must stayundefinedconcat_lines_of(positional),shift_left/shift_right,substring_after/substring_beforeThe client hand-port gains
get_event( ), the new interface shortcut 14 samples call.Also: the browser bundle has been broken since
async_hooksentered the user-exit classadapters/webnow shimsAsyncLocalStorage(a page answers one roundtrip at a time, so a single current-store slot is exact). This surfaced only now because the adapter smoke tests skip when the adapter is not installed.Baselines
Both known-failure baselines are rebased onto the new names, reasons carried over where an entry maps 1:1.
get_event_client_json,session_merge) and tests asserting on abap-internal state the idiomatic port models differently. Worth a follow-up, out of scope here.The smoke sanity floor drops from 150 to 80 — the catalog is ~105 apps now.
Verification
npm test230/230 ·ratchet-update --checkclean ·npm run lint0 errors · samples smoke 96/104.The Playwright smoke of the web adapter needs the OpenUI5 CDN, which this sandbox cannot reach — CI runs it.
Merge first — builder-cap2UI5 mirrors this core.
🤖 Generated with Claude Code
https://claude.ai/code/session_01VHRfng5K6Yc8c4j7hBytXo
Generated by Claude Code