Protocol 2: specification, schemas, backend and frontend conformance suites - #1
Merged
Merged
Conversation
The first version of the abap2UI5 protocol repository: - spec/: the core protocol (transport, request, response, actions, sessions, navigation, errors, versioning), derived from abap2UI5 1.146.0 with every normative statement traced to its source file and method; accidental behaviour recorded as implementation notes - profiles/: the UI5 profile, the portable profile v1 (61 controls + 4 layout-data elements from the census of 247 core apps, machine-readable as portable-v1.json, coverage curve, Web Components mapping) and the semantic profile (agent snapshot v1, moved here from mcp-server) - schema/: JSON Schemas 2020-12 for request, response, snapshot and the portable profile - conformance/backend: abap2ui5-conformance backend --url ... with 75 checks (core + ui5 profile) and a library API; conformance/frontend reserved and described - conformance/apps: the Z2UI5_CL_CONF_* apps in ABAP (abapGit, abaplint-clean) and as cap2UI5 apps; hosts for @abap2ui5/node-runtime and cap2UI5 - traffic/: recorded traffic of both backends (suite, the UI5 frontend's request code, the agent client) - every message validates - node:test gate and CI on Node 22/24 running the suite against both reference backends: node-runtime 75/75, cap2ui5 74/75 (one SHOULD warning, filed in conformance/RESULTS.md) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Kz1J78phfNKbqUaq3VcP4U
- conformance/frontend: the suite that plays the backend - a scripted HTTP server answering from the recorded traffic (traffic/node-runtime) plus synthetic edge cases (PROTOCOL 3, no PROTOCOL, 500 with markup, a CSRF token layer, an unknown follow-up action, NEST slots, a model push of another app); 81 checks (66 MUST, 15 SHOULD; core, portable, ui5, semantic) over the request side and the response handling; every request validated against schema/request.schema.json, an unscripted request fails the check - adapters: the UI5 SPA (abap2UI5 app/webapp) in Chromium via Playwright, real controls, UI5 from the @openui5 npm packages (no CDN); the agent client of abap2UI5/mcp-server (vendored at ea4e9fa, scripts/vendor-agent-client.mjs); the Web Components frontend (dist/abap2ui5-wc.js); a documented stub for the headless ABAP simulator, which has no HTTP seam - CLI: abap2ui5-conformance frontend --adapter ... [--profile] [--json]; library runFrontendSuite (also @abap2ui5/protocol/frontend) - results (conformance/RESULTS.md): the UI5 SPA passes every MUST but portable.box-details - message box details stay empty on OpenUI5 >= 1.120 (expandBoxDetails shows the FormattedText MessageBox fills only on the link press); the agent client fails 5 MUSTs (no PROTOCOL check, no sap-contextid, overlapping acts, popups kept across an app change, error markup stripped); the Web Components frontend lacks the router - spec revision 0.2: the frontend rules made explicit with their sources and frontend checks - raw JSON event arguments, the app start names its class, MODEL carries edited attributes only, __delta SHOULD, session id kept by every HTTP frontend, one roundtrip at a time for programs too, a PROTOCOL mismatch adopts nothing, error bodies verbatim, box details shown; the portable profile no longer calls the UI5 frontend portable "by construction" (it fails a view on an element it cannot load) - spec/open-questions.md: current decision and alternatives for the NEST rule, the new draft id, the URL in the error body, boolean arguments for non-ABAP backends, the app error detail, and five more - tests: mock, runner, vendored copy, CLI, the agent result pinned, the UI5 SPA in Chromium when a checkout and a browser are there; CI job frontend runs it against abap2UI5 b812079 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Kz1J78phfNKbqUaq3VcP4U
b812079 is reachable only through refs/pull/2837/head; app/webapp is identical at main 5d7e91f. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Kz1J78phfNKbqUaq3VcP4U
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 PR writes down the abap2UI5 "UI5 over the wire" protocol, version 2, as it is implemented today, and adds conformance suites that test backends and frontends against it.
Specification (
spec/, revision 0.2)ui5: today's frontend.portablev1: 61 controls, chosen by a census of the sample repos.semantic: the agent snapshot.schema/for the request and the response.spec/open-questions.md: 10 decisions for the maintainer. Each has its current default and the alternatives.Backend conformance (
conformance/backend/)Z2UI5_CL_CONF_*in ABAP, plus their cap2UI5 twins.traffic/.Frontend conformance (
conformance/frontend/)schema/request.schema.json.ui5,agentandwebcomponent.headlessis a documented stub: it needs an HTTP seam in headless-frontend first.ui5(abap2UI5app/webapp, OpenUI5 1.144, Chromium)agent(mcp-server appclient)webcomponent(snapshot of a frontend still in development)ui5failure is a real frontend bug: message box details are empty on OpenUI5 1.120 and later (expandBoxDetails).conformance/RESULTS.md.CI
testjob runsnpm test.frontendjob runs Chromium against abap2UI5app/webapp, checked out sparsely at main5d7e91f.Validation
npm testpasses locally: 44/44, including the UI5 run in Chromium.🤖 Generated with Claude Code
https://claude.ai/code/session_01Kz1J78phfNKbqUaq3VcP4U
Generated by Claude Code