Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 5 additions & 12 deletions .github/workflows/check.yml
Original file line number Diff line number Diff line change
Expand Up @@ -40,10 +40,11 @@ jobs:
path: .samples
fetch-depth: 1

# The other two catalogues, for the counts on resources/samples.md. Only
# SAMPLES.md is needed, so only SAMPLES.md is fetched — and an unreachable
# repository costs one verified figure, never the run: check:counts skips
# what it cannot read and says which ones those were.
# The other two catalogues, for the figures generate-llms.mjs counts
# into llms.txt during docs:build. Only SAMPLES.md is needed, so only
# SAMPLES.md is fetched — and an unreachable repository costs one
# counted figure, never the run: the generator leaves a number it
# cannot count out of the line it writes.
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
continue-on-error: true
with:
Expand Down Expand Up @@ -105,11 +106,3 @@ jobs:
- name: sample links
if: ${{ !cancelled() }}
run: npm run check:samples

# the four figures on resources/samples.md - three per-repository counts
# and the total they add up to - against the catalogues themselves. The
# generated llms.txt leaves a number out when it cannot count it; a prose
# page cannot, so the number stays and this is what holds it
- name: corpus counts
if: ${{ !cancelled() }}
run: npm run check:counts
7 changes: 2 additions & 5 deletions .github/workflows/deploy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -68,8 +68,8 @@ jobs:
sparse-checkout: SAMPLES.md
sparse-checkout-cone-mode: false
# samples-stack was missing here while generate-llms.mjs counts three
# catalogues and check:counts holds four figures against them. The deploy
# therefore published a total it had counted two thirds of.
# catalogues into the llms.txt it publishes. The deploy therefore
# published a list it had counted two thirds of.
- name: Sample catalogues (stack)
continue-on-error: true
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
Expand Down Expand Up @@ -106,9 +106,6 @@ jobs:
- name: sample links
if: ${{ !cancelled() }}
run: npm run check:samples
- name: corpus counts
if: ${{ !cancelled() }}
run: npm run check:counts

# …and only then the thing that gets published. `docs:build` is itself
# one of the gates - a page that does not build is a page nobody can
Expand Down
28 changes: 15 additions & 13 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,16 +19,16 @@ person reads the page. Do not put "as an AI, …" prose back into `docs/`.
| `scripts/generate-llms.mjs` | Builds `llms.txt` / `llms-full.txt` / per-page markdown from the sidebar. Runs inside `docs:build`, so the deploy publishes them |
| `scripts/check-version.mjs` | The release number in the nav bar, the deprecations page and the changelog, against the newest release tag of the framework |
| `docs/.vitepress/playground.mjs` | Decides which fenced ABAP example gets a **Run** button, and wraps the fence; `theme/playground.js` is the browser half |
| `scripts/lib/catalogue.mjs` | Parses a sample catalogue's rows; pinned by `test/catalogue.test.mjs`, because it has stopped matching twice and both times answered wrongly instead of failing |
| `scripts/lib/catalogue.mjs` | Parses and counts a sample catalogue's rows, for `link-samples.mjs` and for the figures `generate-llms.mjs` writes into `llms.txt`; pinned by `test/catalogue.test.mjs`, because it has stopped matching twice and both times answered wrongly instead of failing |

## Build & verify — run before every commit

```bash
npm run check # test + check:version + docs:build + check:examples + check:samples + check:counts
npm run check # test + check:version + docs:build + check:examples + check:samples
```

A documentation repository has no compiler for its prose, but six things in it
are decidable, and all six are decided before a merge:
A documentation repository has no compiler for its prose, but five things in it
are decidable, and all five are decided before a merge:

| | |
|---|---|
Expand All @@ -37,9 +37,8 @@ are decidable, and all six are decided before a merge:
| `docs:build` | a page that does not build is a page nobody can read |
| `check:examples` | the ABAP in the fenced blocks, against the real framework: does it compile, and does the view it builds name controls and properties that exist on the UI5 floor this documentation targets |
| `check:samples` | the **Working Samples** blocks, against [abap2UI5/samples](https://github.com/abap2UI5/samples) |
| `check:counts` | the four figures on `resources/samples.md` — one count per sample repository and the total they add up to — against the catalogues themselves |

`.github/workflows/check.yml` runs the same six, in the same order. Keep the
`.github/workflows/check.yml` runs the same five, in the same order. Keep the
two in step: a step that exists only in `package.json` is a step no pull
request has to pass, which is how `npm test` — the pin added *because* the
catalogue parser broke twice in silence — went a release without CI.
Expand All @@ -49,12 +48,15 @@ clone it as a sibling. Without one it *skips* rather than fails, so verify the
output says what you think it says. CI checks out `abap2UI5/samples@main`
explicitly for this reason.

`check:counts` reads all three catalogues the same way, and skips per
repository: with only `samples` at hand it verifies that one figure, says the
other two were not verified, and leaves the total alone (it needs all three).
CI sparse-checks out `SAMPLES.md` from `samples-controls` and `samples-stack`
so the page is fully checked; both are `continue-on-error`, because an
unreachable repository must cost a figure and not the run.
There used to be a sixth, `check:counts`, holding four figures on a
`resources/samples.md` page against the catalogues themselves. That page is
gone — the home page opens [the samples page](https://abap2ui5.github.io/samples/)
directly and each catalogue introduces itself — and with it the only prose
copy of a number this repository does not own. `generate-llms.mjs` still counts
the three catalogues into `llms.txt`, which is why CI sparse-checks out
`SAMPLES.md` from `samples-controls` and `samples-stack`; both are
`continue-on-error`, because an unreachable repository must cost a figure and
not the run, and a generated line can simply leave the number out.

## What the site publishes for machines

Expand Down Expand Up @@ -110,7 +112,7 @@ The code travels in the playground's URL fragment, read out of the rendered
block at click time — so nothing is hosted here, and the example that runs is
the text on the page rather than a copy of it.

**This is the seventh decidable thing in this repository and the only one CI
**This is the sixth decidable thing in this repository and the only one CI
cannot decide.** Whether an example runs is a question only a playground can
answer, and a playground is a three-minute build of another repository. So the
rules in `docs/.vitepress/playground.mjs` are an approximation, they fail
Expand Down
2 changes: 1 addition & 1 deletion CLAUDE.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# CLAUDE.md

All project guidance lives in **[AGENTS.md](AGENTS.md)** — the single source of
truth for this repository (how the site is built, the six gates, the playground rule engine, and what may be written where).
truth for this repository (how the site is built, the five gates, the playground rule engine, and what may be written where).

Read `AGENTS.md` before making any change.
16 changes: 8 additions & 8 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,26 +15,26 @@ Every contribution makes the documentation better for the community!
```sh
npm ci
npm run docs:dev # the site, with hot reload
npm run check # what CI runs, all six steps
npm run check # what CI runs, all five steps
```

### What CI checks

A documentation repository has no compiler for its prose, but six things in it
are decidable, and `npm run check` decides all six before a merge — the prose
A documentation repository has no compiler for its prose, but five things in it
are decidable, and `npm run check` decides all five before a merge — the prose
builds (`docs:build`), the fenced ABAP examples compile and the views they
build name real UI5 API (`check:examples`), the sample links and the sample
counts still match the sample repositories (`check:samples`, `check:counts`),
the release number in the nav bar still matches the framework
(`check:version`), and the catalogue parser still parses (`test`).
build name real UI5 API (`check:examples`), the sample links still match the
sample repositories (`check:samples`), the release number in the nav bar still
matches the framework (`check:version`), and the catalogue parser still parses
(`test`).
`.github/workflows/check.yml` runs the same list in the same order, so a green
`npm run check` locally is a green pull request — and `deploy.yml` runs it
again before it publishes, so the site is only ever built from a tree that
passed. Several of these go stale without anybody touching this repository (a
release is published elsewhere, a sample class is renamed elsewhere), which is
why the deploy re-runs them rather than trusting the merge.

**[AGENTS.md](AGENTS.md) describes each of the six**, what a failure means and
**[AGENTS.md](AGENTS.md) describes each of the five**, what a failure means and
which of them need a sibling checkout to say anything at all — read it before
changing anything beyond prose.

Expand Down
17 changes: 8 additions & 9 deletions docs/.vitepress/config.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -138,8 +138,8 @@ export default defineConfig({
// sample catalogues on top of them, which meant nine entries in two
// groups and a reader scanning for "where is the code" reading past
// half of it first. The catalogues are a reading destination and are
// linked where a reader looks for one — /resources/samples in the
// sidebar, and the cookbook chapters; this menu answers the other
// linked where a reader looks for one — the button under the home
// page grid, and the cookbook chapters; this menu answers the other
// question, which repository to clone.
text: "Links",
items: [
Expand Down Expand Up @@ -539,13 +539,12 @@ export default defineConfig({
collapsed: true,
items: [
{ text: "References", link: "/resources/references" },
// Several hundred working apps in three repositories, and until this
// page the only way to find out which one to open was to know all
// three existed. The cookbook links individual samples per chapter;
// this says which CATALOGUE answers which question. The figures live
// on the page itself, where check:counts verifies them against the
// catalogues - do not repeat one here, where nothing would.
{ text: "Sample Catalogues", link: "/resources/samples" },
// No "Sample Catalogues" entry here any more. A page that only
// described the three catalogues put a stop between the reader and
// the corpus, and had to be kept true about counts and facets it
// did not own. The catalogue pages introduce themselves and link
// one another; the home page opens the first of them directly, and
// the cookbook links individual samples per chapter.
{ text: "Who Uses abap2UI5?", link: "/resources/who_uses" },
{ text: "Release Notes", link: "/resources/changelog" },
{ text: "Deprecations", link: "/resources/deprecations" },
Expand Down
6 changes: 4 additions & 2 deletions docs/advanced/mcp_server.md
Original file line number Diff line number Diff line change
Expand Up @@ -90,8 +90,10 @@ thing here. It answers *"has somebody already built a value help, a tree,
navigation between two apps?"* out of **614 working apps in three
repositories**, and hands back a class to read rather than a snippet to trust.
Any one of the three catalogues is enough to start; a missing clone is reported
in the answer, not fatal. See [Sample Catalogues](/resources/samples) for what
each one covers.
in the answer, not fatal. Each catalogue says what it covers on its own page —
[Learn](https://abap2ui5.github.io/samples/),
[Controls](https://abap2ui5.github.io/samples-controls/),
[Stack](https://abap2ui5.github.io/samples-stack/).

### Level 3 — see the running app (a browser, and time)

Expand Down
4 changes: 2 additions & 2 deletions docs/advanced/vscode.md
Original file line number Diff line number Diff line change
Expand Up @@ -248,8 +248,8 @@ can help while the chain is being written rather than after it:
with run, preview and check on it: the list that says which thirty apps a
repository has.
- **Show Examples for this Control** — put the cursor on an `ele( )` call and
the [sample catalogues](/resources/samples) are searched for working uses of
that control, richest first, opening at the line. It reads the catalogues
the [sample catalogues](https://abap2ui5.github.io/samples/) are searched for
working uses of that control, richest first, opening at the line. It reads the catalogues
from `abap2ui5.mcp.reposRoot`, so it needs those checkouts.

### Starting from a template
Expand Down
2 changes: 1 addition & 1 deletion docs/get_started/next.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ You've installed abap2UI5 and built your first app. From here, pick the directio
## Sample Apps
Hundreds of working apps, and the fastest way to learn abap2UI5 is to read one that already does what you are about to write. They live in three repositories, each with a page that searches it — [**Learn**](https://abap2ui5.github.io/samples/) is the one to start on: the path from the smallest app that runs to files, devices and custom CSS, one idea per sample.

Looking for one in particular? Search the page, or `Ctrl+F` the [catalogue](https://github.com/abap2UI5/samples/blob/main/SAMPLES.md) for `f4`, `tree` or `nav_app_call`. [Sample Catalogues](/resources/samples) tells the three repositories apart, and the [Cookbook](/cookbook/overview) links the same apps from the page that explains the pattern.
Looking for one in particular? Search the page, or `Ctrl+F` the [catalogue](https://github.com/abap2UI5/samples/blob/main/SAMPLES.md) for `f4`, `tree` or `nav_app_call`. [**Controls**](https://abap2ui5.github.io/samples-controls/) is the UI5 demo kit rebuilt control by control and [**Stack**](https://abap2ui5.github.io/samples-stack/) the samples that need something from your system — each page links the other two at its top. The [Cookbook](/cookbook/overview) links the same apps from the page that explains the pattern.

![Sample apps overview showing tables, lists, trees, and other UI5 controls](/get_started/image-1.png)

Expand Down
8 changes: 4 additions & 4 deletions docs/get_started/tooling.md
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ Three repositories, each with a searchable page of its own:
control does what?”*, and [**Stack**](https://abap2ui5.github.io/samples-stack/)
for *“Will my system run it?”*.

[Sample Catalogues](/resources/samples) is the page that tells the three apart
— what each one holds, how many, and which to search for what you are asking.
All three install with abapGit and carry an overview app that lists everything
they contain.
Each page says what its own corpus holds, how many apps that is, and carries
the search and the filters for it — and links the other two in the bar at its
top, so any one of the three is a way in to all of them. All three install with
abapGit and carry an overview app that lists everything they contain.
24 changes: 13 additions & 11 deletions docs/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,10 +32,10 @@ hero:
# card not spent on a journey.
#
# Samples are NOT a card either, and that is the one deliberate gap: the
# catalogues are a reading destination of their own, and a card that looks
# like the three around it and then hands you a corpus is the card people
# click by accident. They sit below the grid instead, as a single button, set
# apart, where leaving the grid is the obvious thing to be doing.
# catalogue is a reading destination of its own, and a card that looks like
# the three around it and then hands you a corpus is the card people click by
# accident. It sits below the grid instead, as a single button, set apart,
# where leaving the grid — and this site — is the obvious thing to be doing.
features:
- title: Cookbook
icon: <i class="fa-solid fa-book"></i>
Expand All @@ -51,17 +51,19 @@ features:
link: https://github.com/abap2UI5/abap2UI5/
---

<!-- Below the feature grid, off on its own: one button to the page that
introduces the three sample catalogues. No figure here on purpose —
check:counts verifies the counts on resources/samples.md against the
catalogues themselves, and a second copy on this page is one nothing
would check. -->
<!-- Below the feature grid, off on its own: one button, straight to the
sample page itself rather than to a page here describing it. That page
names its own corpus, carries the search and the filters, and links the
other two catalogues in the bar at its top — everything the page here
used to say, said where the samples are. No figure on purpose: the count
is on that page, kept by the repository that owns it, and a second copy
here is one nothing would check. -->
<div class="a2ui5-catalogues">

Looking for a working app to copy? The sample catalogues are searchable in the browser — nothing to install.
Looking for a working app to copy? Hundreds of them are searchable in the browser — nothing to install.
{.a2ui5-catalogues-lead}

[Browse the Samples](/resources/samples)
[Browse the Samples](https://abap2ui5.github.io/samples/)
{.a2ui5-catalogues-links}

</div>
Loading