diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index 32f9787f..4aa8594f 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -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: @@ -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 diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index a0178536..d4899afb 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -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 @@ -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 diff --git a/AGENTS.md b/AGENTS.md index e75fa337..163ea6aa 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -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: | | | |---|---| @@ -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. @@ -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 @@ -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 diff --git a/CLAUDE.md b/CLAUDE.md index cfcc4f3a..e216a73f 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -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. diff --git a/README.md b/README.md index f602b1f7..56f0018b 100644 --- a/README.md +++ b/README.md @@ -15,18 +15,18 @@ 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 @@ -34,7 +34,7 @@ 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. diff --git a/docs/.vitepress/config.mjs b/docs/.vitepress/config.mjs index 4713c784..aa0861a2 100644 --- a/docs/.vitepress/config.mjs +++ b/docs/.vitepress/config.mjs @@ -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: [ @@ -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" }, diff --git a/docs/advanced/mcp_server.md b/docs/advanced/mcp_server.md index 15b1e240..88b25797 100644 --- a/docs/advanced/mcp_server.md +++ b/docs/advanced/mcp_server.md @@ -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) diff --git a/docs/advanced/vscode.md b/docs/advanced/vscode.md index e80c0232..3e77cb00 100644 --- a/docs/advanced/vscode.md +++ b/docs/advanced/vscode.md @@ -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 diff --git a/docs/get_started/next.md b/docs/get_started/next.md index 5aecdf2d..33bd62b6 100644 --- a/docs/get_started/next.md +++ b/docs/get_started/next.md @@ -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.  diff --git a/docs/get_started/tooling.md b/docs/get_started/tooling.md index 1e7a32d3..5f18607b 100644 --- a/docs/get_started/tooling.md +++ b/docs/get_started/tooling.md @@ -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. diff --git a/docs/index.md b/docs/index.md index 3d8e0e9a..0b4023e5 100644 --- a/docs/index.md +++ b/docs/index.md @@ -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: @@ -51,17 +51,19 @@ features: link: https://github.com/abap2UI5/abap2UI5/ --- - +