Repair the drift guard, then teach the API the framework actually ships - #15
Merged
Merged
Conversation
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>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Part of an ecosystem-wide audit of the abap2UI5 and cap2UI5 repositories.
The gate could not see the site's biggest defect
verify-refs.mjsreported OK against a real checkout while 13 of 33 pages taughtz2ui5_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:
9e683e5— fences are checked: everyrequire("abap2UI5/<subpath>")is resolved through the exports map ofcore/package.jsonand 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. Acheck.ymlrunsnpm run checkonpull_request, anddeploy.ymlcalls the same command instead of the script directly.4afcf50— with the repaired gate: 15 findings, 10 real defects. All 13 pages migrated toz2ui5_cl_ui5_view_builder, every method checked against the source file. Invented API removed (factory_popup(),xml_load(),view._z2ui5().approve_popover()). The non-existent99 — Add-onslayer andz2ui5_cl_pop_*removed fromreference/architecture.md,guide/project-structure.mdandAGENTS.md— the core has only00/ 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_bindis one-way and_bind_edittwo-way; upstream merged them in 1.143.0; and this project does not carry upstream's frozensrc/99at all, soz2ui5_cl_xml_viewis absent here, not deprecated.examples/hello-world.mdclaimed to quote a file it did not match — it now quotes it verbatim.b18cd87— the published URL was in no file in the repository;npm installwhere CI saysnpm ci;npm run checkunmentioned, so a contributor never found the only correctness gate. Plus favicon and og:image, package metadata, action pins raised to the same SHAsabap2UI5/docsuses (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: OKandbuild complete, exit 0.🤖 Generated with Claude Code
https://claude.ai/code/session_01PLDFPfAK1MGq6qHeC6KKWH
Generated by Claude Code