Skip to content

Spec revision 0.3 (maintainer decisions), error.no-reflection, Adaptive Cards renderer - #2

Merged
oblomov-dev merged 3 commits into
mainfrom
claude/abap2ui5-project-brainstorm-nt7ifs
Oct 3, 2026
Merged

oblomov-dev merged 3 commits into
mainfrom
claude/abap2ui5-project-brainstorm-nt7ifs

Conversation

@oblomov-dev

Copy link
Copy Markdown
Member

This PR records the maintainer's decisions on the ten open questions as spec revision 0.3, adds an Adaptive Cards renderer as a second portable renderer, and moves the agent client to the version that follows the protocol's frontend rules.

Spec revision 0.3: the open questions are decided

spec/open-questions.md now marks all ten as "Decided (revision 0.3)", each with its rationale and the alternatives considered. A summary table sits at the top.

# Topic Decision
1 NEST/NEST2 Portable renderers tolerate them; portable apps must not use them (the abap2UI5 linter's portable-app rule)
2 New draft id Unchanged
3 Request URL in the 500 body A backend MUST NOT reflect request data it did not validate. New backend check error.no-reflection
4 Boolean event arguments Unchanged
5 Error detail Unchanged
6 UI5 frontend vs the tolerance rule Unchanged
7 Message box details Shown expanded
8 One roundtrip at a time A programmatic frontend SHOULD queue a second call, and MAY refuse it
9 sap-contextid Every HTTP frontend MUST keep it
10 Navigation actions portable-v1.json gets an additive actions object: api (what an app may call) and wire (what a renderer receives)

Q10 detail: frontendActions stays and the profile version stays 1, so existing consumers keep working. portable.md section 6 has a generated table of client-API names against what arrives on the wire.

error.no-reflection currently fails on both reference backends. Both run the released @abap2ui5/node-runtime 1.146.0. The core fix is in a separate abap2UI5 PR. The failure is pinned exactly in test/lib/expected.mjs, so npm test turns red once the check starts passing and the pin has to be removed.

Adaptive Cards renderer (renderers/adaptive-cards/)

  • How it works: pure Node with no dependencies, built on the vendored viewxml/snapshot modules.
    • It turns a response into an Adaptive Card 1.5 and maps all 65 controls of portable profile v1.
    • An Action.Submit payload becomes the next protocol request: event, args, and the changed inputs as the model delta.
    • host.mjs is a minimal host that speaks the protocol over HTTP.
    • demo.mjs prints card JSON for the Adaptive Cards designer.
  • Unknown controls render as a placeholder and are listed in unsupported, following the portable tolerance rule.
  • The README mapping table is generated from mapping.mjs, and a test fails if it is stale.
  • Tests: seven golden cards (six recorded responses plus a synthetic sampler), a structural check against card schema 1.5, the payload-to-request direction, the host against the scripted backend, and full mapping coverage.
    • The golden cards also validate with zero issues in the official Adaptive Cards JS SDK 3.0.6, checked by hand.
  • New conformance adapter adaptive-cards: 65 pass / 0 fail / 0 warn / 16 skip at profile portable.
    • The skips are checks that need a URL, a DOM, focus, a document title or programmatic model edits, plus the UI5 and semantic profiles.

Agent client and frontend results

  • Agent client: re-vendored at mcp-server a4d9f07, which is now at 61 pass / 0 fail / 0 warn / 20 skip. The five former MUST deviations are recorded as fixed.
  • Web Components (410d607): 68 pass / 0 fail / 0 warn / 13 skip.
    • One check, model.number-and-boolean, failed intermittently (1 of 4 full runs). Its StepInput value was missing from MODEL, apparently because the press arrives before the input commits the value. It is filed for that repo.
  • UI5 pin: now accepts portable.box-details as passing too, since the abap2UI5 fix is in flight.

Gates (local)

  • npm test: 59/59 pass, including the UI5 run in Chromium.
  • npm run generate: no diff. CI now fails when it leaves a diff.
  • npm run lint:abap: 0 issues.
  • Backend suite:
    • node-runtime: 75 pass, 1 fail.
    • cap2UI5: 74 pass, 1 fail, 1 warn (error.details).
    • The fail on both is the pinned error.no-reflection.

🤖 Generated with Claude Code

https://claude.ai/code/session_01Kz1J78phfNKbqUaq3VcP4U


Generated by Claude Code

claude added 3 commits October 3, 2026 18:00
…ve Cards renderer

- spec/open-questions.md: all ten questions decided, each with decision
  and rationale; the decisions applied to spec/errors.md, transport.md,
  actions.md and profiles/portable.md (NEST tolerated by renderers,
  forbidden in portable apps - the abap2UI5 linter's portable rule)
- new backend check error.no-reflection (MUST): request data the backend
  did not validate is not reflected into the error body; both reference
  backends fail it (abap2UI5 1.146.0 [H] request_context_info), pinned in
  test/lib/expected.mjs, suite traffic recorded again
- portable-v1.json: actions.api (client API) apart from actions.wire (what
  a renderer receives: ROUTER + options, folded names, T_CUSTOM / .eF);
  additive, frontendActions kept; schema, generators, generated table
- renderers/adaptive-cards: response -> Adaptive Card 1.5, Action.Submit
  payload -> request, all 65 portable controls mapped (README table
  generated from mapping.mjs), card host, demo, golden cards
- frontend adapter adaptive-cards: 65 pass / 0 fail / 16 skip, pinned;
  UI5 pin accepts portable.box-details passing (fix under way)
- CI: generate check, adaptive-cards report; README, AGENTS, RESULTS,
  CHANGELOG

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Kz1J78phfNKbqUaq3VcP4U
…ults

- vendor/mcp-server at a4d9f07 (PR #44): the agent client follows every
  frontend rule that applies - 61 pass / 0 fail / 0 warn / 20 skip at
  profile semantic; the pin in test/frontend.test.mjs follows
- RESULTS.md: agent row and findings (fixed), Web Components row at its
  main 410d607 (68 pass / 0 fail / 13 skip; model.number-and-boolean
  intermittent), open questions 8 and 9 note the fix

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Kz1J78phfNKbqUaq3VcP4U
…pected)

error.no-reflection fails on both reference backends until a node-runtime
release carries the core fix; npm test pins it, the raw report steps did
not. run-conformance --expected exits 0 only when the failures are exactly
test/lib/expected.mjs - another failure or a pinned check that passes now
still fails the step.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Kz1J78phfNKbqUaq3VcP4U
@oblomov-dev
oblomov-dev merged commit 604d267 into main Oct 3, 2026
3 checks passed
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