Skip to content

fix(e2e): the seed must refuse a truncated listing, not call it missing - #454

Merged
rubenvdlinde merged 1 commit into
developmentfrom
fix/e2e-seed-refuses-a-truncated-listing
Sep 5, 2026
Merged

fix(e2e): the seed must refuse a truncated listing, not call it missing#454
rubenvdlinde merged 1 commit into
developmentfrom
fix/e2e-seed-refuses-a-truncated-listing

Conversation

@rubenvdlinde

Copy link
Copy Markdown
Contributor

What

The seed's schema verification now refuses a truncated listing instead of reporting the rows it never fetched as missing.

The bug

It verified required schemas against a paged listing and treated absence from the page as absence from the instance. On a shared instance holding 1,997 schemas, a _limit=1000 request returns the first page — and a slug that fell off it reads exactly like a slug the import never created:

::error::… schemas missing after import: ['contactPerson', 'catalogContract']

Both existed. Both were in the app's own register schema list.

That failure mode is worse than a wrong answer. The message names the import as the culprit, so the obvious next move is to go and debug an import that worked perfectly. It cost a full seed-and-suite cycle on stackiq before I thought to count the rows.

The fix

  • Page size to 10,000 schemas and 2,000 registers.
  • Compare len(items) against the response's total and refuse when they differ, rather than judging a population from a page.

The second part matters more than the first. A limit that is generous today is not generous forever, and the next person to grow this instance should get "the listing is truncated, raise the limit" rather than a fabricated missing slug.

Found by sweeping the fleet

After hitting this twice — opencatalogi (#1426) and stackiq — I checked every ci-seed.sh:

app was now
opencatalogi fixed earlier today 10000 + guard
stackiq 1000 10000 + guard
dossiq 1000 10000 + guard
planninq 1000 10000 + guard
buildiq 1000 10000 + guard
portaliq 1000 10000 + guard
shillinq 5000 (headroom today, no guard) 10000 + guard

Four were actively broken against a loaded instance. shillinq had headroom but no guard, which is the same bug waiting for the instance to grow.

Verification

The shape was verified per app rather than assumed — portaliq's block lower-cases its slugs and needed its own patch. Every seed passes bash -n, and stackiq's now reports schemas present (1293 of 1293) and exits 0 against the loaded rig.

The seed verified its required schemas against a paged listing and treated
absence-from-the-page as absence-from-the-instance. On a shared instance
holding 1,997 schemas a `_limit=1000` request returns the first page, and a
slug that fell off it reads exactly like a slug the import never created.

That failure mode is worse than a wrong answer: the message names the import as
the culprit, so the obvious next move is to debug an import that worked
perfectly. It cost a full seed-and-suite cycle on stackiq before I thought to
count the rows.

Two changes:

  - Raise the page to 10,000 schemas and 2,000 registers.
  - Compare `len(items)` against the response `total` and REFUSE when they
    differ, rather than judging a population from a page.

The second matters more. A limit that is generous today is not generous
forever, and the next person to grow this instance should get "the listing is
truncated, raise the limit" instead of a fabricated missing slug.

Found by sweeping every ci-seed.sh in the fleet after hitting it twice:
opencatalogi (#1426) and stackiq. Four more were paging at 1000 against 1997,
and shillinq had headroom today but no guard.
@rubenvdlinde
rubenvdlinde merged commit db982f6 into development Sep 5, 2026
33 checks passed
@github-actions

github-actions Bot commented Sep 5, 2026

Copy link
Copy Markdown
Contributor

Quality Report — ConductionNL/portaliq @ 2b5a7a3

Check PHP Vue Security License Tests
lint
phpcs
phpmd
psalm
phpstan
phpmetrics
eslint
stylelint
build
check-specs
check-manifest
format
check-l10n-js
check-schema-l10n
composer ✅ 105/105
npm ✅ 867/867
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 21:00 UTC

Download the full PDF report from the workflow artifacts.

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