Build every floorplan view with z2ui5_cl_ai_xml, add CI and an AGENTS.md - #5
Merged
Merged
Conversation
The repo had no CI, no tests and no documented verification step - an agent could not tell whether a change compiles. abaplint now runs on every push and PR; locally the same single command gates a change. The config's errorNamespace moves from . to ^Z: the wrapper deliberately reads CDS annotations via on-prem DDIC APIs (cl_dd_ddl_annotation_service, DDSTRUCOBJNAME) that the steampunk-2305 dependency does not ship, and with . every such reference was a false 'not found' error (16 issues); ^Z keeps the own namespace fully checked and now lints clean at 0 issues. AGENTS.md documents the verify command, the on-prem target platform (no RTTI-to-XCO or annotation-API 'modernization'), the PROTECTED escape-hatch methods as public API, the abapGit serialization rules, and that the ecosystem's AI tooling (abap2UI5-linter, ai-mcp) cannot see this repo because it builds on z2ui5_cl_xml_view. .gitattributes pins LF line endings after a CRLF import once broke the .asddls round-trip. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GXEXigpuJbj1qBc4mK2c4R
All seven classes move off the frozen fluent builder z2ui5_cl_xml_view to the generic builder z2ui5_cl_ai_xml (open/leaf/a/shut/stringify). The point is not style: the abap2UI5-linter only reconstructs ai_xml views, so until now nothing could check this repo's UI at all. It can now - the property gate plus a real headless XMLView.create run over every view the floorplans build, including the parts built inside the render hooks. BREAKING for subclasses: the render hooks that take a builder handle (io_page, io_table, io_columns, io_cells, io_op, io_actions, io_parent, io_container) are now typed TYPE REF TO z2ui5_cl_ai_xml. Parameter names and the set of hooks are unchanged, so a redefining subclass only has to switch to the four verbs. The README escape-hatch example shows the new form and the change is called out there. Translation is 1:1: same controls, attributes, order, events and bindings. Notable details: property names are now the real UI5 camelCase ones the old builder mapped internally (showNavButton, growingThreshold, ...); abap_bool expressions go through z2ui5_cl_ai_xml=>as_bool( ); the obsolete _bind_edit( ) calls became _bind( ); the root mvc:View keeps the displayBlock=true height=100% that the old factory( ) stamped on it, and the popup fragments keep their core:FragmentDefinition root. Also added: abap2ui5lint.jsonc with the repo's linter settings and a view_lint CI job next to abaplint. AGENTS.md rewritten where it said this repo is outside the AI tooling, and now records what the view gate can and cannot see here. Verified: abaplint 0 issues (23 files), abap2UI5-linter 7 files 0 failing with the render gate on (2 accessibility hints left as they were). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GXEXigpuJbj1qBc4mK2c4R
…ot exist The breaking-change note referenced a Validate section the README did not have. Added it with both offline gates. Also: z2ui5_cl_fp_list_report was added to the core and removed again days later, so the README pointed readers at a class that is not there - now stated as such. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GXEXigpuJbj1qBc4mK2c4R
… floor to 1.77 The migration dropped sap.uxap.ObjectPageSubSection showTitle="false" because it is @SInCE 1.77 and the repo's linter floor was 1.71 - a deviation from the 1:1 translation. The attribute is back and the floor moves to 1.77, which is exactly what the code needs: it is the only post-1.71 member in the whole repo. The floor stays at the minimum on purpose - a floor above what is used stops the gate from reporting members that are missing on the systems users run. Verified: abaplint 0 issues, view gate 7 files 0 failing (render on). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GXEXigpuJbj1qBc4mK2c4R
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.
Part of a cross-repo pass on making the abap2UI5 ecosystem workable for AI agents. This repo had no CI, no tests and no documented way to verify anything — an agent (or a human) could not tell whether a change even compiles.
All seven classes move off the frozen fluent builder
z2ui5_cl_xml_viewto the genericz2ui5_cl_ai_xml(open/leaf/a/shut/stringify). The render hooks that take a builder handle —io_page,io_table,io_columns,io_cells,io_op,io_actions,io_parent,io_container— are now typedTYPE REF TO z2ui5_cl_ai_xml. Parameter names and the set of hooks are unchanged, so a redefining subclass only has to switch to the four verbs. The README escape-hatch example shows the new form and the change is called out there.The point is not style: the abap2UI5-linter only reconstructs
ai_xmlviews, so until now nothing could check this repo's UI at all. It can now — the property gate plus a real headlessXMLView.createover every view the floorplans build, including the parts built inside the render hooks.Translation is 1:1: same controls, attributes, order, events and bindings. Details worth knowing:
showNavButton,growingThreshold, …)abap_boolexpressions go throughz2ui5_cl_ai_xml=>as_bool( )_bind_edit( )calls became_bind( )mvc:Viewkeeps thedisplayBlock="true" height="100%"the oldfactory( )stamped on it; the popup fragments keep theircore:FragmentDefinitionrootsap.uxap.ObjectPageSubSection showTitle="false"is kept (it is@since 1.77), so the linter floor inabap2ui5lint.jsoncis 1.77 — the only post-1.71 member in the repo. The floor stays at the minimum on purpose: a floor above what the code uses stops the gate from reporting members missing on the systems users run.Verification, where there was none
.github/workflows/check.ymlruns abaplint and the abap2UI5-linter on every push and PR.abaplint.jsonc'serrorNamespacemoves from.to^Z: the wrapper deliberately reads CDS annotations through on-prem DDIC APIs (cl_dd_ddl_annotation_service,DDSTRUCOBJNAME) that the steampunk-2305 dependency does not ship, so every such reference was a false "not found" error (16 issues). With^Zthe own namespace stays fully checked and the repo lints clean at 0 issues.abap2ui5lint.jsoncpins the view-gate settings;.gitattributespins LF after a CRLF import once broke the.asddlsround-trip.Current state: abaplint 0 issues (23 files), abap2UI5-linter 7 files 0 failing with the render gate on (2 accessibility hints, left as they were).
AGENTS.md
New: the verification commands, the on-prem target platform (with an explicit "do not modernize RTTI to XCO or swap the annotation API"), the
PROTECTEDescape-hatch methods as a public contract, abapGit conventions, and what the view gate can and cannot see here.Two corrections while writing it: the README promised a core class
z2ui5_cl_fp_list_reportthat was added upstream and removed again days later, and the README had no "Validate" section at all.Best merged after abap2UI5-linter#6 — the CI job uses that action from
main, and the reconstruction fixes there are what make these views checkable.Generated by Claude Code