Repository navigation
Bring controls newer than UI5 1.71 into scope and port their 48 samples - #276
Merged
Merged
Conversation
Maintainer decision: a sample whose control is newer than UI5 1.71 is no longer out of scope. Its port keeps the control 1:1 and declares it as a POST_171 deviation naming the control, which files it under src/02. - generate-coverage: scopeOf drops the 'newer' verdict; a port of a post-1.71 control without a POST_171 deviation now fails the gate - scaffold: writes that POST_171 deviation and files the port in src/02 - scope-of: reports such controls IN_SCOPE with the POST_171 note - lib-packages: the release level reads POST_171 only; the scope-exceptions path for post-1.71 controls is gone, and the four 'newer' entries (apps 136, 141, 165, 203 - all carry POST_171) with it - AGENTS, README, TRAINING, generation prompt and skills updated The backlog grows by 48 samples (coverage 621 / 669). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PTMAfPJZ78qd9zmLoHGZwx
Stubs only - the views are rebuilt in the following commits. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PTMAfPJZ78qd9zmLoHGZwx
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PTMAfPJZ78qd9zmLoHGZwx
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PTMAfPJZ78qd9zmLoHGZwx
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PTMAfPJZ78qd9zmLoHGZwx
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PTMAfPJZ78qd9zmLoHGZwx
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PTMAfPJZ78qd9zmLoHGZwx
Batches b52 Avatar, b53 IllustratedMessage, b54 DynamicDateRange and ExpandableText, b55 p13n and VariantManagement, b56 UploadSetwithTable (sap.m), b49 AvatarGroup, SidePanel and ProductSwitch, b50 HeroBanner (sap.f). Every port declares its control as POST_171 and lives in src/02. Also: app 649's label 'Peter Mueller' restored to the original 'Peter Müller' (with 649/668/671 added to the 7bit_ascii exclusions); the scaffolder no longer clips GROUP-nested sample names to an identical 'sap.m...' description; generated @summary/@keywords/@origin headers and artefacts regenerated. Coverage 669 / 669. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PTMAfPJZ78qd9zmLoHGZwx
- view-gates ADVISORY_BUDGET follows what the originals carry: missing-accessibility 93 -> 107, editable-control-without-binding 343 -> 356, event-on-disabled-control 7 -> 8; unused-namespace- declaration ratchets down to 100 - CAPABILITIES.md: new row for registering an illustration set - docs/history.md: the journal entry for the scope change and batch Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PTMAfPJZ78qd9zmLoHGZwx
This was referenced Oct 20, 2026
The e2e harness serves UI5 from the @openui5 packages, which ship the themes as .less only, so every port runs unthemed. sap.f.AvatarGroup sizes itself from its own CSS: unthemed it measures unstyled avatars, re-renders with fewer and loops until 'Rendering has been re-started too many times' (e2e_pr red on app 662). With the theme CSS it renders once. A sidecar 'e2e_smoke': { theme: true, reason } now boots a port with the theme CSS from sdk.openui5.org. It is verified like the other declared exceptions: the port is booted unthemed as well, and a declaration whose port passes that way too fails as stale. validate-meta guards the schema; the e2e-debugging guide records the case. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PTMAfPJZ78qd9zmLoHGZwx
Member
Author
|
The copies in the other consumers are in abap2UI5/samples#884 and abap2UI5/protocol#10. samples-stack still needs the same one-line copy. I could not reach that repository from this session.
Generated by Claude Code |
…cator The interaction waited for the global BusyIndicator to read hidden before firing the drop. UI5 shows it only after its show delay, so under the load of a full-corpus run it still read hidden while a drag-start probe was in flight, the drop was swallowed and the run failed (1 of 676). It now counts the backend POSTs and fires once none has been in flight for 500 ms. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PTMAfPJZ78qd9zmLoHGZwx
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PTMAfPJZ78qd9zmLoHGZwx
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PTMAfPJZ78qd9zmLoHGZwx
The WIP snapshots skipped the pre-commit hook, so the closed LIVE_TESTs of apps 625/638/670 were not reflected in the generated artefacts and meta_valid failed. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PTMAfPJZ78qd9zmLoHGZwx
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PTMAfPJZ78qd9zmLoHGZwx
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PTMAfPJZ78qd9zmLoHGZwx
DynamicDateRange.toDates returns sap.ui.core.date.UniversalDate objects, so
apps 639/640/642 sent {oDate, sCalendarType} instead of a date and the
binding_call filter dropped every row (found by the new e2e interactions).
Each date is now sent as .getJSDate(), the second one guarded because
FROM/TO yield a single date.
App 638 arms its countdown tick with START_TIMER's no-busy flag, so a slow
backend does not flash the busy overlay over the countdown.
Also: e2e interaction modules for 639-642 (641 closed, themed boot), and
WIP modules of the agents still running.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PTMAfPJZ78qd9zmLoHGZwx
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PTMAfPJZ78qd9zmLoHGZwx
abap_true is a character value and t_arg is a string table, so the VALUE #( ) of the previous commit failed check_syntax on all three targets (abap-cloud red). The demo app's carousel timer passes the same flag as `X`. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PTMAfPJZ78qd9zmLoHGZwx
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PTMAfPJZ78qd9zmLoHGZwx
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PTMAfPJZ78qd9zmLoHGZwx
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PTMAfPJZ78qd9zmLoHGZwx
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PTMAfPJZ78qd9zmLoHGZwx
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PTMAfPJZ78qd9zmLoHGZwx
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PTMAfPJZ78qd9zmLoHGZwx
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PTMAfPJZ78qd9zmLoHGZwx
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PTMAfPJZ78qd9zmLoHGZwx
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PTMAfPJZ78qd9zmLoHGZwx
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PTMAfPJZ78qd9zmLoHGZwx
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PTMAfPJZ78qd9zmLoHGZwx
…2-656 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PTMAfPJZ78qd9zmLoHGZwx
… 644/646/647 closed App 651: update_items deletes the variants by replace( ) instead of translate( ), whose FROM set the transpiled runtime turns into an unescaped regex class - ']' broke it and no variant was ever deleted. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PTMAfPJZ78qd9zmLoHGZwx
- 645/648/649: a sap.m.p13n.Popup declared in the view leaks its panels when it is never opened (Popup.exit destroys only the Dialog open() creates), and the next-but-one re-render died on a duplicate panel id. The Popup is now a popup_display fragment, built per press and popup_destroy'ed on close, as Engine.show() does. - 650: event args no longer use JSON.stringify (no JSON global in XML event-handler expressions, so no request was ever sent); the panels' getP13nData() travels as is and a small printer reproduces the original's JSON.stringify(..., null, ' ') output. - 651: static VariantItems instead of a bound template (on 1.152 the favourites list filtered every item away); renames and favourite/execute changes travel with the manage event. - 644: a new view is 'View ' + (views + 1), as the original counts the container's own default view. - LIVE_TESTs of 639/640/642/645/648/649/650/651 closed - all 12 touched ports green on a rebuilt backend. - Interaction modules of 351/353/demo_004 compare origins instead of naming port 3000, so they pass under --port. - e2e-debugging guide records the lessons. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PTMAfPJZ78qd9zmLoHGZwx
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.
Why
Coverage read 100 % only because 48 demo kit samples were excluded by the rule "the control must exist since UI5 1.71".
src/02already holds 221 ports that need a newer runtime for a member, so excluding a newer control was inconsistent. The maintainer decision is to drop that exclusion.Coverage is now 669 / 669 (12 hold-outs reserved). The only samples left unported are 20 on deprecated controls, 37 that are not app views (OPA5, routing, view templating) and 3 demo apps without a control.
Rule change
generate-coverage.mjs:scopeOfno longer returnsnewer. A port of a post-1.71 control must carry aPOST_171deviation naming the control (the gate fails otherwise); that deviation files it undersrc/02.scaffold.mjs: writes that deviation and scaffolds straight intosrc/02. It also no longer clips GROUP-nested names to an identicalsap.m...description.scope-of.mjsreports such a controlIN_SCOPE.lib-packages.mjsreads the release level fromPOST_171only, so the fournewerentries ofui5/scope-exceptions.jsonare gone.Ports: apps 624–671, all in
src/02sap.m.Avatarsap.m.IllustratedMessagesap.m.DynamicDateRange,sap.m.ExpandableTextsap.m.p13nContainer/Engine/Popup,sap.m.VariantManagementsap.m.plugins.UploadSetwithTablesap.f.AvatarGroup,SidePanel,ProductSwitchsap.f.HeroBannerWhat could not be ported 1:1 is declared in the sidecars:
IllustrationPool.registerIllustrationSet, so 630 and 635–638 show noCustom/tntillustration. This is a new ❌ row in CAPABILITIES.md.p13n.Popup.reset,FilterPanel.itemFactory,itemValidationHandler,customPageContentHandlerand app-writtenDynamicDateOptionsubclasses have no equivalent.beforeUploadStarts; the backend adds the row.Live verification
Every new port now has an e2e interaction module, and all 25 LIVE_TESTs are closed. STATUS.md shows 0 open. The interactions found and fixed real defects:
toDates()returnsUniversalDateobjects, so every row was filtered away. The dates are now sent as.getJSDate().p13n.Popupleaks its panels in UI5, and the second re-render died on a duplicate id.JSON.stringifyis not available in event-handler expressions, so no request was ever sent.translate()failed on the transpiled runtime.e2e harness
e2e_smoke.theme(new sidecar opt-in): boots a port with the theme CSS.sap.f.AvatarGroup(662) loops when unthemed; with the theme it passes. The opt-in is re-verified each run and fails as stale if the port also passes unthemed (641 uses it too).Shared changes
view-gates.mjsADVISORY_BUDGET: follows what the originals carry (+14 missing-accessibility, +13 editable-control-without-binding, +1 event-on-disabled-control).7bit_ascii: the excludes gain 649, 668 and 671 (Müller,€). The source rule set changes first in app-rules: exclude samples-controls apps 649/668/671 from 7bit_ascii abap2UI5#2928, andcheck-app-rulesstays red until that PR is merged. Copies are in abaplint: exclude samples-controls apps 649/668/671 from 7bit_ascii samples#884 and conformance apps: exclude samples-controls apps 649/668/671 from 7bit_ascii protocol#10; samples-stack still needs the same line.docs/history.md, and the e2e-debugging guide records the lessons above.Validation
npm run gates: green.npm test: 64/64.view-gates --strictwith render: 670 ports, 0 failing.abap-702: green.🤖 Generated with Claude Code
https://claude.ai/code/session_01PTMAfPJZ78qd9zmLoHGZwx