Skip to content

Repair the drift guard, then teach the API the framework actually ships - #15

Merged
oblomov-dev merged 3 commits into
mainfrom
claude/repo-analysis-structure-0wpt5q
Aug 18, 2026
Merged

Repair the drift guard, then teach the API the framework actually ships#15
oblomov-dev merged 3 commits into
mainfrom
claude/repo-analysis-structure-0wpt5q

Conversation

@oblomov-dev

Copy link
Copy Markdown
Member

Part of an ecosystem-wide audit of the abap2UI5 and cap2UI5 repositories.

The gate could not see the site's biggest defect

verify-refs.mjs reported OK against a real checkout while 13 of 33 pages taught z2ui5_cl_xml_view, a class this project does not carry at all. Two exemptions hid it: fenced code blocks were skipped wholesale ("examples, not claims"), and the class regex required a backtick immediately after the identifier, so `z2ui5_cl_xml_view.js` never matched. The gate also ran only in the deploy job — after the merge, where it cannot block anything.

So the order here is gate first, content second:

  1. 9e683e5 — fences are checked: every require("abap2UI5/<subpath>") is resolved through the exports map of core/package.json and onto a file that must exist; ?app_start= in fences too. The class pattern now matches a backticked span that starts with a class name. A check.yml runs npm run check on pull_request, and deploy.yml calls the same command instead of the script directly.
  2. 4afcf50 — with the repaired gate: 15 findings, 10 real defects. All 13 pages migrated to z2ui5_cl_ui5_view_builder, every method checked against the source file. Invented API removed (factory_popup(), xml_load(), view._z2ui5().approve_popover()). The non-existent 99 — Add-ons layer and z2ui5_cl_pop_* removed from reference/architecture.md, guide/project-structure.md and AGENTS.md — the core has only 00/ 01/ 02/. Model-path casing corrected (the code uppercases; the docs showed lowercase throughout). Binding semantics stated per release rather than as one claim: the pinned core is 1.142.0, where _bind is one-way and _bind_edit two-way; upstream merged them in 1.143.0; and this project does not carry upstream's frozen src/99 at all, so z2ui5_cl_xml_view is absent here, not deprecated. examples/hello-world.md claimed to quote a file it did not match — it now quotes it verbatim.
  3. b18cd87 — the published URL was in no file in the repository; npm install where CI says npm ci; npm run check unmentioned, so a contributor never found the only correctness gate. Plus favicon and og:image, package metadata, action pins raised to the same SHAs abap2UI5/docs uses (three were two majors behind), and a grouped dependabot config.

Also merged five pages of overlapping pitch into two before the Quickstart, and fixed the "six repositories" heading over a seven-row table.

After: verify-refs: OK and build complete, exit 0.


🤖 Generated with Claude Code

https://claude.ai/code/session_01PLDFPfAK1MGq6qHeC6KKWH


Generated by Claude Code

claude added 3 commits August 18, 2026 07:11
verify-refs skipped every fenced block as "examples, not claims" and required
a backtick immediately after a class name, so the docs could import a class
the framework no longer ships and nothing said a word. Fences are where an
API is taught, and an import line is a claim about the package:

- every require("abap2UI5/<subpath>") inside a fence is resolved through the
  exports map of core/package.json and onto a real file
- ?app_start= in a fence is checked like one in prose
- the class regex matches a backticked span that STARTS with a class name, so
  `z2ui5_cl_xml_view.js` and `z2ui5_cl_util.register_app_dir(dir)` count
- globs (`z2ui5_cl_smp_app_*`, require("abap2UI5/…")) stay shapes, not claims
- exceptions still go through docs/.verify-refs-ignore, still with a reason

The gate also ran too late: verify-refs lived only in deploy.yml, which runs
on push to main, so it first spoke after the merge. Add check.yml on
pull_request and let both workflows run `npm run check` — the same command
AGENTS.md gives contributors.

Co-Authored-By: Claude <noreply@anthropic.com>
The retired z2ui5_cl_xml_view was still the view builder on 13 of 33 pages,
including examples/hello-world.md, which named the shipped file
z2ui5_cl_ui5_app_hi_world.js and then showed an API that file has not used
for a long time. Every example now builds views with
z2ui5_cl_ui5_view_builder, checked method by method against
core/srv/z2ui5/02/z2ui5_cl_ui5_view_builder.js: factory / ele / tag / a /
end / stringify, and nothing else. hello-world quotes the real file verbatim.

Other claims corrected while migrating:

- z2ui5_cl_xml_view.factory_popup(), .xml_load() and view._z2ui5()
  .approve_popover() do not exist — popups and popovers are ordinary
  core:FragmentDefinition trees, and a static XML snippet is spliced into
  the stringified view
- there is no layer 99 and no 02/z2ui5_cl_pop_* in core/srv/z2ui5/ (00, 01,
  02 is the whole tree), so reference/architecture.md, guide/
  project-structure.md and this repo's AGENTS.md stop documenting one
- model paths are uppercased (/XX/NAME, {TITLE}); the docs showed them
  lowercase everywhere, which is a binding that silently resolves to nothing
- reference/protocol.md's sample roundtrip named a class that does not
  exist; it now uses the real hi_world app

Binding semantics are now stated per release rather than as "1:1 identical":
the pinned core is 1.142.0, where _bind is one-way and _bind_edit two-way;
upstream merged the two in 1.143.0 and cap2UI5 additionally does not carry
upstream's frozen legacy package at all. api/client.md, guide/vs-abap2ui5.md
and the landing page say so.

Guide consolidation: the pitch was spread over five pages before the
Quickstart — the Fiori-Elements-to-freestyle gap in four of them, the
abap2UI5 origin in four. server-driven-ui.md is merged into
what-is-cap2ui5.md (which now carries the pattern, the gap and the costs);
why-cap2ui5.md keeps only the project-level case; where-it-comes-from.md
keeps the origin and the pipeline and moves, with ecosystem.md, into a
Background section after the comparisons.

Also: ecosystem.md's "six repositories" heading sat over seven rows.

Co-Authored-By: Claude <noreply@anthropic.com>
- README: name the published site (cap2ui5.github.io/docs), say `npm ci`
  like CI and AGENTS.md do, and describe `npm run check` — a contributor had
  no way to find the only correctness gate this repo has. The Structure tree
  duplicated AGENTS.md and is now a pointer to it.
- config.mjs: a logo has been sitting in docs/public/ unused — it is now the
  favicon and the og:image, with the absolute URL link previews require and
  the real 790x790 dimensions (square, so a thumbnail card, not a banner).
- package.json: repository, bugs, homepage, license MIT and engines node>=22,
  matching the other repositories in the organisation.
- deploy.yml: the action pins were up to two majors behind abap2UI5/docs
  (checkout v5.1.0, setup-node v5.0.0, configure-pages v5, upload-pages-
  artifact v3.0.1, deploy-pages v4.0.5). Adopt the SHAs that repo uses.
- dependabot.yml: grouping, a PR limit and a fixed window, like the rest of
  the organisation — plus the reason the file matters here, since SHA pins
  are precisely the thing that goes stale without it.

Co-Authored-By: Claude <noreply@anthropic.com>
Copilot AI lite review requested due to automatic review settings August 18, 2026 08:14

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
oblomov-dev merged commit ee68591 into main Aug 18, 2026
1 check 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.

3 participants