From 187e666ac00e0633a2fcc9d81fdcf231e34bbfa3 Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 22 Oct 2026 20:27:28 +0000 Subject: [PATCH 1/2] view-chain-layout: take the source copy - a layout fix is whitespace-only by construction, not by a check The abap2UI5 repository is the source of this skill; its paragraph on what the linter checks claimed a verification that @abap2ui5/linter 0.9.0 does not perform. Co-Authored-By: Claude Fable 5.1 Claude-Session: https://claude.ai/code/session_01Qid1F6VFxWyQLPvqsr1woq --- .claude/skills/view-chain-layout/SKILL.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/.claude/skills/view-chain-layout/SKILL.md b/.claude/skills/view-chain-layout/SKILL.md index 2f9aa6d..3be2893 100644 --- a/.claude/skills/view-chain-layout/SKILL.md +++ b/.claude/skills/view-chain-layout/SKILL.md @@ -126,9 +126,10 @@ first child is another `ele( )`, blank before every `end( )`, none after an The rule is the abap2UI5-linter's **`chain-house-layout`**. It checks rules 1-4 and carries fixes, so `--fix` reformats a drifted chain. The rewrite only ever touches whitespace *between* chain segments and the indent of a continuation -line that is not itself content, and it verifies that collapsing every run of -code-whitespace leaves the source identical — **a layout fix can never change -what the view builds.** Rules 5-7 and the blank lines stay reviewer-enforced. +line that is not itself content — **by construction, not by a check**: the +fixes run to a fixed point and nothing re-parses the result against the +source, so read the diff of a `--fix` run before committing it. Rules 5-7 and +the blank lines stay reviewer-enforced. It is the linter's one **opt-in** rule (`OPT_IN` in its `findings.mjs`): it is not emitted at all until a config asks for it, because it encodes one house From 6c9b85ced48dbef8cb37206fd539561ea3c6bf23 Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 22 Oct 2026 20:27:28 +0000 Subject: [PATCH 2/2] Drop a client message in the shape of the WebSocket handler's own connection markers __NEW_CONNECTION__ and __CLOSED__ are what on_start and on_close broadcast; a client that typed one counted as a joined or left connection on every other screen. Co-Authored-By: Claude Fable 5.1 Claude-Session: https://claude.ai/code/session_01Qid1F6VFxWyQLPvqsr1woq --- src/07/z2ui5_cl_smps_app_489_ws.clas.abap | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/07/z2ui5_cl_smps_app_489_ws.clas.abap b/src/07/z2ui5_cl_smps_app_489_ws.clas.abap index afa2152..e53842d 100644 --- a/src/07/z2ui5_cl_smps_app_489_ws.clas.abap +++ b/src/07/z2ui5_cl_smps_app_489_ws.clas.abap @@ -49,7 +49,14 @@ CLASS z2ui5_cl_smps_app_489_ws IMPLEMENTATION. " in a short dump that names the exception's text, but RAISE SHORTDUMP " only exists from 7.53 on, and this package runs from 7.50 TRY. - send( i_message->get_text( ) ). + DATA(text) = i_message->get_text( ). + " the two markers are the handler's own words (on_start, on_close) - + " a client that typed one would count as a joined or left connection + " on every other screen, so a message in that shape is dropped + IF text CP `__*__`. + RETURN. + ENDIF. + send( text ). CATCH cx_root INTO DATA(error). MESSAGE error TYPE 'X'. ENDTRY.