Skip to content

Specification revision 0.4: re-derived from abap2UI5 1.148.0, hosts on node-runtime 1.148.0 and cap2UI5 0.5.0 - #12

Open
oblomov-dev wants to merge 4 commits into
mainfrom
claude/great-mendel-aiaiwu
Open

oblomov-dev wants to merge 4 commits into
mainfrom
claude/great-mendel-aiaiwu

Conversation

@oblomov-dev

Copy link
Copy Markdown
Member

What

The specification was derived from abap2UI5 1.146.0 and conformance/RESULTS.md recorded the cap2UI5 host at plugin 0.4.0. Four commits:

  1. Reference hosts moved to @abap2ui5/node-runtime 1.148.0 and @cap2ui5/cds-plugin 0.5.0; traffic re-recorded. The node-runtime host is rebuilt on the package's own recipe (abap2ui5-transpile, importing host.mjs), because 1.148.0 deprecates loading apps/index.mjs; the transpiler pin moves to 2.14.5 as the package requires.
  2. New backend check route.app-state-names-no-app (77 checks now): an app-state hash without ?app_start= restores its draft — a new SHOULD in spec/navigation.md.
  3. Renamed references fixed: z2ui5_cl_frontend_sim, and two method citations that moved into z2ui5_cl_ui5_util_context.
  4. Spec revision 0.4, re-derived from the 1.148.0 release commit.

What changed on the wire, 1.146.0 → 1.148.0

All of it landed in 1.147.0; c_protocol stays 2, the schemas, the portable profile and the action vocabulary are unchanged.

  • Error body: the request URL is stripped to an allow-list — error.no-reflection passes on both hosts now, so its pin is removed (test/lib/expected.mjs pins nothing).
  • App start from an app-state hash (the new check above).
  • Session block: S_UI5 may arrive alone and is merged, not replaced.
  • Event arguments: a binding context travels as {PATH, OBJECT}, $event as {ID, SOURCE, PARAMETERS}.
  • Follow-up actions: the UI5 frontend resolves ${/PATH} arguments against the model — recorded as description only, with open question 11 on whether it becomes a rule for every frontend.
  • Embedded frontends (ownsPage), the devtools bundle GET, the host guard of serve().

Not in the spec, deliberately: windowed tables, set_app_full_width, cross_app_nav_get_links and the removal of the invisible custom controls are on abap2UI5 main but not in 1.148.0; the CHANGELOG names them as unreleased.

Decisions worth a look

  • Suite runs start the node-runtime host with allowedHosts: "*": with the host's own guard on, a foreign-Origin POST gets the host's 403 before the framework's CSRF gate, so transport.csrf-origin would no longer test the framework. npm run serve:node-runtime keeps the guard.
  • The frontend check request.config-cadence flagged a static block sent for the first time; it now flags only blocks the backend already has.
  • CI: the frontend job pins the 1.148.0 release commit; the cache path moved.

Verified

Command Result
npm run lint:abap 0 issues, 18 files
PROTOCOL_REQUIRE_BROWSER=1 npm test (both backends, UI5 SPA in Chromium) 89 pass, 0 fail, 0 skipped
npm run generate && git diff --exit-code clean
backend conformance, node-runtime 77 passed, 0 failed, 0 warnings
backend conformance, cap2ui5 76 passed, 0 failed, 1 warning (error.details, the known SHOULD)
frontend suite, UI5 SPA of 1.148.0 77 pass, 0 fail, 4 skip
frontend suite, agent / adaptive-cards / terminal 61 / 66 / 72 pass, 0 fail

Not verified

  • The CI workflow edits have not run on GitHub.
  • The Web Components frontend was not re-run; its RESULTS row is still the 2026-10-03 run.
  • No ABAP system, as before.
  • The cap2UI5 host runs runtime 1.147.0 (what plugin 0.5.0 pins), not 1.148.0 — RESULTS.md states the split.
  • The frontend-side statements (${/PATH} resolution, ownsPage, event marshalling, late S_UI5) are confirmed in the 1.148.0 source only; no recorded scenario exercises them.
  • Left alone: the docs name the vendored agent client as a4d9f07 while vendor/mcp-server/source.json says 82b75d8.

Generated by Claude Code

….5.0

- @abap2ui5/node-runtime 1.146.0 -> 1.148.0, @abaplint/transpiler-cli
  2.13.93 -> 2.14.5 (the transpiler the package names), @cap2ui5/cds-plugin
  0.4.0 -> 0.5.0 (which pins the runtime 1.147.0); both lockfiles
- node-runtime host: the package's new recipe for a host's own classes -
  one transpile of the framework and the conformance apps by
  abap2ui5-transpile, served through the output's host.mjs; loading
  apps/index.mjs next to the package's output is deprecated in 1.148.0
- node-runtime host: the suite runs and the recorder start it with
  allowedHosts "*" - from 1.147.0 on serve() answers a foreign Origin with
  a 403 of its own before the framework's CSRF gate sees the request, so
  transport.csrf-origin no longer tested the framework; the CLI keeps the
  guard
- error.no-reflection passes on both hosts (abap2UI5 strips the request URL
  in the 500 body since 1.147.0): unpinned, test/lib/expected.mjs pins
  nothing
- traffic recorded again from both hosts, with the UI5 frontend of the
  1.148.0 release commit and the vendored agent client: node-runtime 76
  passed, cap2ui5 75 passed and one SHOULD warning
- CI: the two git libraries of the transpile are cached under
  node_modules/.cache, the frontend job pins abap2UI5 610d9ae (Release
  1.148.0)

Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014YZFmCjdbLvb757NWCFVeA
- spec/navigation.md: #/z2ui5-xapp-state=<DRAFT> names the app as well - a
  request with the hash and no class restores that draft, and ends on the
  start app with a toast when the draft is gone (abap2UI5 from 1.147.0 on,
  [H] main_begin, [ACT] factory_first_start; up to 1.146.0 the start app
  answered and the saved state was dropped)
- new backend check route.app-state-names-no-app (SHOULD, core) - 77
  checks; both reference hosts pass
- check list regenerated, traffic recorded again

Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014YZFmCjdbLvb757NWCFVeA
- [HF] is abap2UI5/headless-frontend src/z2ui5_cl_frontend_sim.clas.abap
  (z2ui5_cl_frontend_simulator was renamed in its 8f37e54); the headless
  adapter stub names the class the same way
- profiles/ui5.md: [EV] escape_js_string and [HTTP] _check_etag_match no
  longer exist - abap2UI5 1.148.0 moved both into
  z2ui5_cl_ui5_util_context; the statements cite the methods of the named
  files that call them ([EV] get_t_arg, [HTTP] _http_get, _get_etag)

Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014YZFmCjdbLvb757NWCFVeA
What moved on the wire between abap2UI5 1.146.0 (b812079) and the release
commit of 1.148.0 (610d9ae), each confirmed in the release's source or in
the recorded traffic. Protocol 2 stays; the schemas and the portable
profile are unchanged.

- request: S_UI5 travels alone with the first request that finds it loaded
  and the backend merges it; numbers of the session block the backend
  cannot hold are read as absent; a binding context and the UI5 event are
  marshalled to plain data; an embedded frontend whose host handed the URL
  back sends HASH
- errors: the request URL in the 500 body is stripped to an allow-list
  ([H] context_info_url_safe) - open question 3 is fixed in the reference
- actions: the UI5 frontend resolves a ${/PATH} argument of a queued
  follow-up action against the model - recorded, not required; open
  question 11
- transport, response, UI5 profile: the host guard of serve(), the
  devtools bundle (GET ?z2ui5-bundle=devtools), control characters escaped
  in the response text, a raw wire argument with unbalanced braces quoted
- frontend check request.config-cadence flags only a static block the
  backend already has - a block that goes out late for the first time is
  no repeat
- README, RESULTS and CHANGELOG: the results measured on 2026-11-15 -
  node-runtime 77 of 77, cap2ui5 76 of 77 and one SHOULD warning, the UI5
  SPA of 1.148.0 77 pass and 4 skip; what is not in 1.148.0 (windowed
  tables, set_app_full_width, cross_app_nav_get_links, the removal of the
  invisible custom controls) is named as unreleased

Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014YZFmCjdbLvb757NWCFVeA
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