Build the floorplans on a builder that exists, and stop the silent rot - #7
Merged
Merged
Conversation
Every floorplan class referenced z2ui5_cl_ai_xml, a class that ships in no repository. abaplint reported 55 errors and the addon did not compile against abap2UI5 main; the check workflow last ran on 10 August and there is no scheduled run, so nothing reported it. Move the seven classes onto z2ui5_cl_ui5_view_builder, the core's released generic builder in src/02: open( ) -> ele( ), leaf( ) -> tag( ), and the as_bool( ) wrapper replaced by the attribute's own b = parameter. With the views readable again the linter reconstructs all eight of them, and it found real defects behind the broken reference: - five floorplans dispatched on check_on_init( ) alone, so nothing re-displayed when a called app handed control back and the browser kept showing the other app's view. Each now re-renders on check_on_navigated( ). - two check_on_navigated( ) branches pushed a model instead of displaying the view, which reaches nothing at that point. - z2ui5_cl_rap_test built its view inline in the init branch; extracted to render_view( ) so both branches can call it. - z2ui5_cl_rap_overview_page cleared the card data_refs after rendering, which render_page( ) needs bound. Load, render and clear now travel together in display( ). - dropped two obsolete view_model_update( ) calls, gave the icon-only refresh buttons a tooltip, and removed the unused public mv_search. abaplint reports 0 issues and abap2ui5lint no findings, with all eight views rendering headless. README and AGENTS.md carried the wrong builder name and the verbs open/leaf/shut throughout; both now describe the API the core actually releases. 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. abaplint ran through 'npx @abaplint/cli@latest', so every run was a different check. It is a devDependency now, pinned through the lockfile, and the view lint runs the same 'npx abap2ui5lint' as the rest of the ecosystem rather than a marketplace action pinned to a moving branch. The schedule is the point of this change for this repository in particular: its badge stayed green for ten days while nothing here compiled. 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
5 tasks
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
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.
This repository does not compile on
maintoday. Part of an audit across all thirteen abap2UI5 repositories; this was the finding that could not wait.What was wrong
Every one of the seven floorplan classes builds its views with
z2ui5_cl_ai_xml. That class ships in no repository — not in the core, not here, nowhere.abaplintreports 55 errors:Two things made it invisible:
abap2ui5lintwired up. Because the linter only readsz2ui5_cl_ui5_view_builder, its verdict here was "no checkable app classes" — and that is a pass. Green badge, zero coverage, code that does not build.The fix
The seven classes move to
z2ui5_cl_ui5_view_builder, the core's released generic builder insrc/02:open( )→ele( ),leaf( )→tag( ), and theas_bool( )wrapper replaced by the attribute's ownb =parameter.Breaking for subclasses: every
PROTECTEDrender hook that takes a builder handle (io_page,io_table,io_op, …) changes its type, and a redefining subclass has to move to the same verbs. README and AGENTS.md record it — they described the wrong builder and the verbsopen/leaf/shutthroughout, none of which exist.What the gate found once it could see
With the views readable, the linter reconstructs 8 documents, 143 controls of 37 types — and reported real defects that had been hiding behind the broken reference:
check_on_init( )alone. Nothing re-displayed when a called app handed control back, so the browser kept showing the other app's view. Each re-renders oncheck_on_navigated( )now.check_on_navigated( )branches pushed a model instead of displaying the view, which reaches nothing at that point.z2ui5_cl_rap_testbuilt its view inline in the init branch, so no other branch could call it — extracted torender_view( ).z2ui5_cl_rap_overview_pagecleared the carddata_refs after rendering, whichrender_page( )needs bound. Load, render and clear travel together indisplay( )now.view_model_update( )calls dropped, tooltips on the icon-only refresh buttons, and the unused publicmv_searchremoved.Keeping it from happening again
npx @abaplint/cli@latest, so every run was a different check.npx abap2ui5lintlike the rest of the ecosystem, instead of a marketplace action pinned to a moving branch.Verification
abaplint: 55 → 0.abap2ui5lint: 7 files, 0 failing, all 8 views rendering headless.Generated by Claude Code