Skip to content

Follow the upstream 2026-08 rename wave and unbreak the sync pipeline - #20

Merged
oblomov-dev merged 1 commit into
mainfrom
claude/cap2ui5-update-2a3vu5
Aug 15, 2026
Merged

Follow the upstream 2026-08 rename wave and unbreak the sync pipeline#20
oblomov-dev merged 1 commit into
mainfrom
claude/cap2ui5-update-2a3vu5

Conversation

@oblomov-dev

Copy link
Copy Markdown
Member

All three nightly pipelines have been red since 2026-07-30, so core/ stopped moving — and with it the published CAP app. update_cap downstream 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 parse

Upstream construct Was emitted Now
TRY … CLEANUP … ENDTRY try { with no catch/finally catch-and-rethrow, or the else branch of the multi-CATCH chain when the TRY has handlers
REF #( tab[ … ] OPTIONAL ) (… optional) the same lowering VALUE #( ) already had
DEFAULT 1 in an interface method z2ui5_if_client=>1 literals are no longer qualified with the interface

2. mirror_samples cloned a branch that no longer exists

abap2UI5/samples deleted its cloud branch 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 — the framework layer was renamed underneath the port

Upstream renamed z2ui5_cl_core_*z2ui5_cl_ui5_*, z2ui5_cl_a2ui5_*z2ui5_cl_ui5_util_*, z2ui5_cl_app_*_jsz2ui5_cl_ui5f_* and moved the shipped apps into 01/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 package exports map, the transpiler's require resolution, the jest module mapper, the app-lookup search paths and the web registry. z2ui5_cl_http_handler stays reachable as a re-export — upstream keeps the class as a compat subclass, and the entry point is a service function here, which an INHERITING FROM transpile cannot extend.

Transpiler fixes the renamed classes needed to actually run

The new z2ui5_cl_ui5_view_builder is transpiled (not hand-ported) and used by 102 samples, so its gaps were load-bearing:

  • table/structure aware IS INITIAL!x is wrong for an empty table (truthy in JS) and for an all-initial structure; now z2ui5_cl_util.abap_is_initial( )
  • PREFERRED PARAMETER call style for the view builder — view->ele( \Shell` )` is positional; the existing pop-factory shim now also wraps prototype methods
  • offset/length access on an attributecls=>const(1) is a substring, not a call (abaplint types the hugging ( distinctly, same rule ABAP parses by)
  • INITIAL values for unpassed OPTIONAL parameters — except where the body tests IS SUPPLIED, which must stay undefined
  • builtins: concat_lines_of (positional), shift_left/shift_right, substring_after/substring_before

The client hand-port gains get_event( ), the new interface shortcut 14 samples call.

Also: the browser bundle has been broken since async_hooks entered the user-exit class

adapters/web now shims AsyncLocalStorage (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.

  • apps-smoke: 8 of 104 — same failures as the old 13 of 208 wherever the sample survived; no new failure category.
  • upstream-units: 25 → 128 entries. The new ones are honest port gaps, not noise: upstream API the JS port does not implement yet (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 test 230/230 · ratchet-update --check clean · npm run lint 0 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

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
Copilot AI lite review requested due to automatic review settings August 15, 2026 14:03

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot wasn't able to review this pull request because it exceeds the maximum number of files (300). Try reducing the number of changed files and requesting a review from Copilot again.

@oblomov-dev
oblomov-dev merged commit db0610c into main Aug 15, 2026
1 check passed
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.

3 participants