Skip to content

Use the current custom-controls API, move onto the released view builder - #24

Merged
oblomov-dev merged 4 commits into
mainfrom
claude/repos-audit-optimization-n9ozlk
Aug 20, 2026
Merged

Use the current custom-controls API, move onto the released view builder#24
oblomov-dev merged 4 commits into
mainfrom
claude/repos-audit-optimization-n9ozlk

Conversation

@oblomov-dev

Copy link
Copy Markdown
Member

This repository does not compile on main today. Part of an audit across all thirteen abap2UI5 repositories.

The four errors

src/abap/z2ui5_sql_cl_app_01.clas.abap[383, 68]  - Class or type "z2ui5_cl_cc_spreadsheet" not found (check_syntax) [E]
src/abap/z2ui5_sql_cl_app_01.clas.abap[506, 74]  - Class z2ui5_cl_cc_spreadsheet not found (check_syntax) [E]
src/native/zcl_2ui5_native_sql_console.clas.abap[100, 94] - Class z2ui5_cl_cc_spreadsheet not found (check_syntax) [E]
…locals_imp.abap[592, 121]                        - Class or type "z2ui5_cl_cc_spreadsheet" not found (check_syntax) [E]

custom-controls renamed the class to z2ui5_cl_cci_spreadsheet when it moved to the cci namespace. This repository was never updated, and with no scheduled run and no pull request in between, nothing said so.

The fix, and why it is more than a rename

The export control's XML element was being built here by handtag( n = 'ExportSpreadsheet' ns = 'z2ui5' ) with its attributes — while custom-controls owned the JavaScript. That is what let the two drift apart in the first place: a rename on one side could not reach the other.

z2ui5_cl_cci_spreadsheet=>render( ) owns the tag now. The exporter's JavaScript, which used to be injected into an html:script tag through _cc_plain_xml( z2ui5_cl_cc_spreadsheet=>get_js( ) ), arrives with the custom-controls BSP instead — get_js( ) no longer exists, and the manual injection is the old delivery mechanism.

NEW z2ui5_cl_cc_spreadsheet( ) as a JSON filter becomes NEW z2ui5_cl_cci_json_filter( ).

The views

Both app classes move from z2ui5_cl_xml_view (frozen, src/99, outside the released API) to z2ui5_cl_ui5_view_builder (src/02). The translation was derived from the old class's own source — which control each of its 455 methods stands for, which parameter becomes which attribute, which went through boolean_abap_2_json( ).

Two things the old builder did silently: it declared the namespaces itself, and it turned a boolean into true/false. The new root declares xmlns:editor, xmlns:layout, xmlns:table and xmlns:z2ui5 by hand — a prefix used but not declared makes the view fail to parse — and booleans go into b =, where abap_false renders as false rather than the empty string UI5 reads as true.

CI

  • Workflow names follow CONVENTIONS §2: ABAP_CLOUD.yamlabap-cloud.yaml, rename_test.yamlcheck-rename.yaml, build_rename.yamlbuild-rename.yaml. ⚠️ This retitles every required status check.
  • A weekly schedule — the change that would have caught the break above. Nothing here had one.
  • check and test; three dead README badges removed (ABAP_702, auto_cloud, auto_downport — workflows this repository does not have).
  • abap2ui5lint, which now reconstructs and renders 3 views, 45 controls of 24 types, with 11 findings baselined.

Verification

abaplint over all eleven addon repositories at once, before and after: 285 findings → 271, the difference entirely findings that are gone — these four among them. The view gate reports 2 files, 0 failing.


Generated by Claude Code

oblomov-dev and others added 3 commits August 20, 2026 07:16
The frozen z2ui5_cl_xml_view carries one method per control; the released
z2ui5_cl_ui5_view_builder in the core's src/02 has five generic verbs. The
translation was derived from the old class's own source - which control each of
its 455 methods stands for, which parameter becomes which attribute, which of
those went through the boolean conversion, and whether the method descended
into the new element or stayed put - so it reproduces that class's behaviour
rather than a guess about it.

Two things the old builder hid had to be carried by hand:

- it collected the namespace prefixes a view used and wrote the xmlns
  declarations onto the root itself. The new one declares them by hand, and a
  prefix that is used but not declared makes the view fail to parse.
- a boolean went through boolean_abap_2_json( ). The new a( ) has its own b =
  for that; with v = an abap_false renders as an empty string, which UI5 reads
  as true.

Verified against the whole addon set at once: abaplint over all eleven
repositories together reports the same findings as before the change, minus
four - nothing new, nothing masked. abap2ui5lint, which could not read a line
of these views before, now reconstructs and renders them.

This repository did not compile: it named z2ui5_cl_cc_spreadsheet, which
custom-controls renamed to z2ui5_cl_cci_spreadsheet when it moved to the cci
namespace. abaplint had been reporting four errors, and the last run predates
the rename.

The export control's XML element is no longer built here by hand - that is what
let the two drift apart. z2ui5_cl_cci_spreadsheet=>render( ) owns the tag, and
the exporter's JavaScript, which used to be injected into an html:script tag
through _cc_plain_xml( ), now arrives with the custom-controls BSP.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XUhL1rra5QZbr4hV14YZXM
Three things that had drifted, and one that was never there.

**The workflows follow the naming rule again** (CONVENTIONS §2): lower kebab
case, a verb prefix that means the same in every repository, and a `name:` a
reader can trace back to the file when they see a red check. This retitles
every required status check at once - branch protection has to be moved with
it.

**A weekly run.** The sibling repositories are resolved from their main branch
with no version pin, and not one workflow here had a schedule. A rename
upstream therefore broke this repository silently and stayed broken until
somebody happened to open a pull request. rap-ext spent ten days that way with
a green badge; this is the trigger that would have caught it.

**`check` and `test`.** CONVENTIONS §3 asks every repository for both, because
they are the two commands somebody types before reading anything - and `check`
runs what CI runs, so a contributor can reproduce it. abaplint is pinned
through the lockfile, actions are pinned to a commit with the version in a
trailing comment, and Dependabot groups the updates into one pull request.

**abap2ui5lint**, which is the new one. It reads an app class and the view it
builds together, and until the views moved onto the released builder it could
not read a line of this repository. What it finds today is frozen in
abap2ui5lint-baseline.json: those entries are counted and never listed, a NEW
finding fails the gate, and an entry whose finding is gone is stale and fails
too - so the file only shrinks.

The README badge block follows the samples layout: what the addon is, then the
workflows grouped by what they prove, then two shields.io endpoints the linter
rewrites on every run. Those two exist because a green workflow badge only says
the job exited zero - which was equally true when the linter had nothing here
it could check.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XUhL1rra5QZbr4hV14YZXM
CONVENTIONS §6 asks every repository for a README, an AGENTS.md, a CLAUDE.md
pointing at it, a CONTRIBUTING.md and a SECURITY.md. Between the eleven addons
there were four AGENTS.md, no CLAUDE.md at all, no CONTRIBUTING.md at all, and
six SECURITY.md.

The CONTRIBUTING.md is the one that earns its keep: it names the gates this
repository actually has, what each one proves, and how the abap2UI5-linter
baseline works - that a recorded finding is counted and never listed, that a
new one fails, and that an entry whose finding is gone is stale and fails too,
so the file only shrinks.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XUhL1rra5QZbr4hV14YZXM
Copilot AI lite review requested due to automatic review settings August 20, 2026 07:37

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 was unable to review this pull request because the user who requested the review has reached their quota limit.

The two shields.io endpoints the linter writes were sitting in a row of their
own at the bottom, next to a check-abap2ui5 workflow badge. samples arranges
them differently, and the arrangement carries the meaning:

- the CORPUS badge belongs in the identity row, beside the namespace. "2 apps ·
  2 views · 20 controls" is what this repository IS, not what a run made of it.
- the CHECKS badge REPLACES the check-abap2ui5 workflow badge instead of
  standing beside it. A workflow badge only says the job exited zero, which was
  equally true while the linter could not read a single view here; the endpoint
  says how many rules passed, and goes grey when there is nothing to check.
  Carrying both said the weaker thing twice.

Where the linter runs as one job of a broader `check` workflow rather than in a
dedicated one, that workflow badge stays - it reports abaplint and the build
gates too, which the endpoint does not.

Also fixed while rearranging: the ABAP badge was linking to `#install` in every
repository, and only three of them have such a section. It links to the real
heading where there is one and is a plain image where there is not - a badge
whose link goes nowhere being the thing this audit was about.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XUhL1rra5QZbr4hV14YZXM
@oblomov-dev
oblomov-dev merged commit fbc3b46 into main Aug 20, 2026
4 of 6 checks passed
@oblomov-dev
oblomov-dev deleted the claude/repos-audit-optimization-n9ozlk branch August 20, 2026 09:08
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.

2 participants