Skip to content

Switch the view gate on, and bring CI up to the conventions - #19

Merged
oblomov-dev merged 4 commits into
mainfrom
claude/repos-audit-optimization-n9ozlk
Aug 20, 2026
Merged

oblomov-dev merged 4 commits into
mainfrom
claude/repos-audit-optimization-n9ozlk

Conversation

@oblomov-dev

Copy link
Copy Markdown
Member

Part of an audit across all thirteen abap2UI5 repositories. This one is the outlier in a good way: its views were already on z2ui5_cl_ui5_view_builder, so nothing here needed porting. What it did not have was a gate reading them.

Two real defects, found the moment one ran

src/00/z2ui5_cl_cci_sample_05.clas.abap
  102:21  error  sap.ui.core.Item key binds {BCID} relatively, but the control has no
                 binding context — the model resolves it against nothing and the
                 control renders empty                relative-binding-without-context
  104:21  error  sap.ui.core.Item text binds {TEXT} relatively, but the control has no
                 binding context …                    relative-binding-without-context

Plus four non-released-api warnings (the vendored AJSON copy in the core's src/00/01, which is internal and renamed without notice), two binding-type-mismatch on sap.m.StepInput where a character field is bound to a float property, and one layout hint. Nine findings in a repository whose CI was green.

They are recorded in abap2ui5lint-baseline.json rather than fixed here — fixing a binding is an app change and belongs in its own pull request. The baseline counts them and never lists them; a new finding fails the gate, and an entry whose finding is gone is stale and fails too, so the file only shrinks.

The render gate stays off

Deliberately, and this is the one repository where that is the right call — the header of check.yml has said so all along. The render gate loads every control from the UI5 distribution, and the controls this repository exists to ship (z2ui5_cci.cc.SignaturePad and the rest) are not in it: a custom control is invisible to UI5 metadata by definition. abap2ui5lint.jsonc now says it in the config, with that reason, instead of it being implicit in a workflow comment.

The property gate reads every view regardless — 12 files, 11 views, 197 controls of 32 types.

CI

  • The linter runs as a job in the existing check workflow, next to abaplint.
  • check was missing — CONVENTIONS §3 asks every repository for check and test, and this one had only test. npm run check runs lint, the view gate and the Node tests.
  • Actions pinned to a commit SHA with the version in a trailing comment, and Dependabot grouping the updates.
  • The first SECURITY.md, AGENTS.md, CLAUDE.md and CONTRIBUTING.md this repository has had.

A note for sql-console

That repository named z2ui5_cl_cc_spreadsheet — the name this one used before the move to the cci namespace — and has not compiled since. sql-console#24 moves it onto z2ui5_cl_cci_spreadsheet=>render( ), so the tag is owned here rather than hand-built there, which is what let the two drift apart.

Verification

npm run check passes; the view gate reports 12 files, 0 failing.


Generated by Claude Code

oblomov-dev and others added 2 commits August 20, 2026 07:26
Three things that had drifted, and one that was never there.

**The workflows follow the naming rule again** (CONVENTIONS §2): lower kebab
case, a verb prefix that means the same in every repository, and a `name:` a
reader can trace back to the file when they see a red check. This retitles
every required status check at once - branch protection has to be moved with
it.

**A weekly run.** The sibling repositories are resolved from their main branch
with no version pin, and not one workflow here had a schedule. A rename
upstream therefore broke this repository silently and stayed broken until
somebody happened to open a pull request. rap-ext spent ten days that way with
a green badge; this is the trigger that would have caught it.

**`check` and `test`.** CONVENTIONS §3 asks every repository for both, because
they are the two commands somebody types before reading anything - and `check`
runs what CI runs, so a contributor can reproduce it. abaplint is pinned
through the lockfile, actions are pinned to a commit with the version in a
trailing comment, and Dependabot groups the updates into one pull request.

**abap2ui5lint**, which is the new one. It reads an app class and the view it
builds together, and until the views moved onto the released builder it could
not read a line of this repository. What it finds today is frozen in
abap2ui5lint-baseline.json: those entries are counted and never listed, a NEW
finding fails the gate, and an entry whose finding is gone is stale and fails
too - so the file only shrinks.

The README badge block follows the samples layout: what the addon is, then the
workflows grouped by what they prove, then two shields.io endpoints the linter
rewrites on every run. Those two exist because a green workflow badge only says
the job exited zero - which was equally true when the linter had nothing here
it could check.

The render gate stays off, for the reason this repository has always given: it
loads every control from the UI5 distribution, and the controls this repository
exists to ship are not in it. The property gate is new, and it reads every view
- including the two sap.ui.core.Item bindings in sample_05 that resolve against
no binding context and render empty.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XUhL1rra5QZbr4hV14YZXM
CONVENTIONS §6 asks every repository for a README, an AGENTS.md, a CLAUDE.md
pointing at it, a CONTRIBUTING.md and a SECURITY.md. Between the eleven addons
there were four AGENTS.md, no CLAUDE.md at all, no CONTRIBUTING.md at all, and
six SECURITY.md.

The CONTRIBUTING.md is the one that earns its keep: it names the gates this
repository actually has, what each one proves, and how the abap2UI5-linter
baseline works - that a recorded finding is counted and never listed, that a
new one fails, and that an entry whose finding is gone is stale and fails too,
so the file only shrinks.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XUhL1rra5QZbr4hV14YZXM
Copilot AI lite review requested due to automatic review settings August 20, 2026 07:39

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

oblomov-dev and others added 2 commits August 20, 2026 08:41
The two shields.io endpoints the linter writes were sitting in a row of their
own at the bottom, next to a check-abap2ui5 workflow badge. samples arranges
them differently, and the arrangement carries the meaning:

- the CORPUS badge belongs in the identity row, beside the namespace. "2 apps ·
  2 views · 20 controls" is what this repository IS, not what a run made of it.
- the CHECKS badge REPLACES the check-abap2ui5 workflow badge instead of
  standing beside it. A workflow badge only says the job exited zero, which was
  equally true while the linter could not read a single view here; the endpoint
  says how many rules passed, and goes grey when there is nothing to check.
  Carrying both said the weaker thing twice.

Where the linter runs as one job of a broader `check` workflow rather than in a
dedicated one, that workflow badge stays - it reports abaplint and the build
gates too, which the endpoint does not.

Also fixed while rearranging: the ABAP badge was linking to `#install` in every
repository, and only three of them have such a section. It links to the real
heading where there is one and is a plain image where there is not - a badge
whose link goes nowhere being the thing this audit was about.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XUhL1rra5QZbr4hV14YZXM
The vendor and app2bsp gates have been red on main since 15 August, at their
"is up to date" steps. The cause is a local build committed by mistake:
app/webapp/cc/LibUrls.js carries the variant that vendors every library into
the BSP, which belongs on the `local` branch, while src/01/ still carried the
CDN one. app2bsp regenerated from app/ and got a different file than the
committed artefact, every run.

`npm run vendor && npm run app2bsp` restores the CDN build. That also lets two
library versions reach the shipped BSP, which is the whole point of the gate -
the CDN URLs are derived from package.json so that the URL a system loads and
the version this repository was tested against are the same by construction:

  chartjs-chart-venn  4.2.7  -> 4.3.7
  dompurify           3.1.6  -> 3.4.13

Running both generators again produces no further change.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XUhL1rra5QZbr4hV14YZXM
@oblomov-dev
oblomov-dev merged commit 25d59b5 into main Aug 20, 2026
5 checks passed
@oblomov-dev
oblomov-dev deleted the claude/repos-audit-optimization-n9ozlk branch August 20, 2026 09:07
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