Skip to content

feat(setup): ask which example data to load, as cards, instead of a bare Run button - #1843

Merged
rubenvdlinde merged 1 commit into
developmentfrom
feat/example-data-cards
Sep 5, 2026
Merged

feat(setup): ask which example data to load, as cards, instead of a bare Run button#1843
rubenvdlinde merged 1 commit into
developmentfrom
feat/example-data-cards

Conversation

@rubenvdlinde

Copy link
Copy Markdown
Contributor

The problem, and it is not only cosmetic

The demo-data step was a Run button under a paragraph. The paragraph said the data is safe to load and safe to delete. Neither said what was about to land in the operator's register.

And there was no way to say no. This app implements a skip-demo-data action that no manifest step could reach — the only step was the run-action that installs. So an operator who did not want example data could not record that, demo-data stayed done: false, and CnAppRoot reopens the wizard while any optional step is outstanding: over every page, on every fresh browser profile, until they imported data they did not want.

Measured across the fleet on 2026-09-05: fifteen apps implement that action and not one declares a step that can post it.

What the step asks now

Two cards, read from the server:

None, I will set this up myself Nothing is imported. You start with an empty app.
Example data Sample values for every schema this app supplies, with the object count the descriptor actually carries.

Picking one is an answer. none closes both steps without importing anything.

The list comes from GET /api/setup/status as datasets: the step declares optionsSource and carries no options of its own, so nothing in the manifest can disagree with what will be imported. The count is read from the descriptor file, so the card promises the number that lands.

The card's description carries no number, deliberately. The wizard translates a description by literal lookup, so an interpolated count would leave a Dutch operator reading English. The count travels as objectCount and renders as a stat with a label the library translates.

Compatibility

install-demo-data still works and still means "the dataset this app ships", so a runbook or script that posts it keeps working. skip-demo-data now writes both keys instead of only the decision flag.

Verification

  • 21 PHPUnit tests pass, 9 of them new: the offered list, declining, an unknown dataset refused, loading without a choice refused, the legacy action, and a failure leaving the step undecided.
  • PHPCS, ESLint and prettier clean.
  • All 75 applicable hydra gates green.

Depends on

Follows ConductionNL/decidiq#1152 and ConductionNL/filinq#1010.

🤖 Generated with Claude Code

…are Run button

The demo-data step was a Run button under a paragraph. The paragraph said the
data was safe to load and safe to delete. Neither said what was about to land
in the operator's register, and there was no way to say no.

## Declining was unsayable, and that reopened the wizard for ever

This app implements a `skip-demo-data` action. No manifest step could reach it:
the only step was the run-action that INSTALLS. So an operator who did not want
example data had no way to record that, `demo-data` stayed `done: false`, and
CnAppRoot reopens the wizard while any optional step is outstanding. On every
fresh browser profile, over every page, until they imported data they did not
want.

Measured across the fleet on 2026-09-05: fifteen apps implement that action and
not one declares a step that can post it.

## What the step asks now

Two cards, read from the server: "None, I will set this up myself" and the
dataset this app ships, with its object count. Picking one is an answer, and
`none` closes both steps without importing anything.

The list comes from `GET /api/setup/status` as `datasets` — the step declares
`optionsSource` and carries no options of its own, so nothing in the manifest
can disagree with what will actually be imported. The count is read from the
descriptor file, so the card promises the number that lands.

The card's description carries NO number, deliberately: the wizard translates a
description by literal lookup, so an interpolated count would leave a Dutch
operator reading English. The count travels as `objectCount` and the card
renders it as a stat with a label the library translates.

## Compatibility

`install-demo-data` still works and still means "the dataset this app ships",
so a runbook or script that posts it keeps working. `skip-demo-data` now writes
both keys rather than only the decision flag.

## Verification

21 PHPUnit tests pass, 9 of them new. PHPCS clean, ESLint clean, prettier
clean. All 75 applicable hydra gates green.

Requires @conduction/nextcloud-vue with CnChoiceCards and hydra-gates >=
v1.15.0 for manifest schema 2.33.0.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@github-actions

github-actions Bot commented Sep 5, 2026

Copy link
Copy Markdown
Contributor

Quality Report — ConductionNL/integriq @ eb3151b

Check PHP Vue Security License Tests
lint
phpcs
phpmd
psalm
phpstan
phpmetrics
eslint
stylelint
build
build
check-specs
test-l10n
format
check-schema-l10n
check-l10n-js
composer ✅ 141/141
npm ✅ 537/537
app:check-code ⏭️
info.xml
REUSE
PHPUnit
Newman
Playwright ⏭️ deferred — runs on the promotion into beta/main, not on a pull request into development
Hydra gates

Quality workflow — 2026-09-05 09:42 UTC

Download the full PDF report from the workflow artifacts.

@rubenvdlinde
rubenvdlinde merged commit 538815e into development Sep 5, 2026
51 checks passed
@rubenvdlinde
rubenvdlinde deleted the feat/example-data-cards branch September 5, 2026 09:42
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.

1 participant