Skip to content

fix(register): drop null JSON-Schema keywords so the E2E seed can create elements - #1295

Open
WilcoLouwerse wants to merge 3 commits into
developmentfrom
fix/register-null-schema-keywords
Open

WilcoLouwerse wants to merge 3 commits into
developmentfrom
fix/register-null-schema-keywords

Conversation

@WilcoLouwerse

@WilcoLouwerse WilcoLouwerse commented Oct 13, 2026 •

Copy link
Copy Markdown

Summary

The nightly quality run has been red since at least 2026-10-10, and so is the release PR #1269 (development → beta). The E2E job stops at Seed test data:

Creating element fixture e2e-gemma-standaard-digikoppeling failed (HTTP 403): {"error":"minimum must contain a valid number"}

That message comes from opis/json-schema's keyword parser. lib/Settings/softwarecatalogus_register.json declared 423 schema-property validation keywords as null (minimum, maximum, multipleOf, minItems, maxItems, minLength, maxLength) across ten schemas. The element schema runs with hardValidation, so no element object could be created.

Changes

  • fix(register): removes every null validation keyword. The parsed result equals the old file minus exactly those keys.
    • The register goes to 2.5.8, with a changelog entry.
    • Every touched schema is bumped. For catalogService, organization, usage and module the effective version comes from a register.d fragment (keepHighestSchemaVersions() keeps the highest one, and an equal version is skipped on upgrade), so those bumps are carried in publication-field-rules.json (catalogService 0.2.3, organization 0.5.4) and topdesk-cmdb-import.json (usage 1.5.7, module 0.3.9); the tests that pin those merged versions follow.
    • Adds tests/Unit/Settings/RegisterNullKeywordsTest.php, which fails when any schema in the register or its fragments carries a null validation keyword again.
  • docs(tests): tests/Integration/README.md names Guzzle 8.2+, matching composer.json after chore(deps-dev): bump guzzlehttp/guzzle from 7.15.2 to 8.2.0 #1035. This was a review finding on Release: merge development into beta #1269.

Verification

  • vendor/bin/phpunit tests/Unit/Settings/RegisterNullKeywordsTest.php passes, and fails on the old register file, listing the offending paths.
  • The E2E job does not run on pull_request (it is skipped there and runs nightly or on workflow_dispatch), so the seed is checked by a dispatched run of code-quality.yml on this branch: https://github.com/ConductionNL/stackiq/actions/runs/38451969024

🤖 Generated with Claude Code

WilcoLouwerse and others added 2 commits October 13, 2026 18:50
… the schemas

423 schema properties in softwarecatalogus_register.json carried null
validation keywords (minimum, maximum, multipleOf, minItems, maxItems,
minLength, maxLength). OpenRegister's validator (opis/json-schema) rejects a
null where it wants a number ("minimum must contain a valid number"), so a
schema with hardValidation, such as element, refused every object and the
E2E "Seed test data" step failed with HTTP 403.

The keys are removed (a null keyword never constrained anything), the ten
affected schemas get a patch version bump, the register goes to 2.5.8 with a
changelog entry, and RegisterNullKeywordsTest guards the register file and
its register.d fragments against the keys coming back.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The integration test README still said Guzzle 7.8+, but composer.json
require-dev has guzzlehttp/guzzle ^8.2 since the dependabot bump.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown
Contributor

Quality Report — ConductionNL/stackiq @ c8aee10

Check PHP Vue Security License Tests
lint ✅
phpcs ✅
phpmd ✅
psalm ✅
phpstan ✅
phpmetrics ✅
eslint ✅
stylelint ✅
build ✅
check-manifest ✅
check-vue-demi ✅
test-l10n ✅
format ✅
check-schema-l10n ✅
check-l10n-js ✅
composer ✅ ✅ 133/133
npm ✅ ✅ 807/807
app:check-code ⏭️
info.xml ✅
REUSE ❌
lockfile sync ✅
PHPUnit ❌ 1221/1224 · 20 skipped
Newman ⏭️
Playwright ⏭️ deferred: E2E runs locally and on the promotion path only. This pull request targets development, so the suite is asked once per promotion into beta and main rather than once per push per open pull request. Run it locally with npx playwright test, or from the Actions tab on a branch with no open pull request into development.
Hydra gates ✅

Quality workflow — 2026-10-13 17:27 UTC

Download the full PDF report from the workflow artifacts.

…effective version

The base bumps of catalogService, organization, usage and module went above
their register.d fragments, which broke three tests that pin the merged
usage (1.5.6) and module (0.3.8) versions. The loader keeps the highest
version per schema, so the bump belongs in the fragment that carries it:
publication-field-rules.json (catalogService 0.2.3, organization 0.5.4)
and topdesk-cmdb-import.json (usage 1.5.7, module 0.3.9). The base keeps
its own +1 bumps; the 2.5.8 changelog entry and the three pins follow.

Closes the review finding "PHPUnit red: base bumps exceed pinned fragment
versions" on #1295.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown
Contributor

Quality Report — ConductionNL/stackiq @ 844c7fb

Check PHP Vue Security License Tests
lint ✅
phpcs ✅
phpmd ✅
psalm ✅
phpstan ✅
phpmetrics ✅
eslint ✅
stylelint ✅
build ✅
check-manifest ✅
check-vue-demi ✅
test-l10n ✅
format ✅
check-schema-l10n ✅
check-l10n-js ✅
composer ✅ ✅ 133/133
npm ✅ ✅ 807/807
app:check-code ⏭️
info.xml ✅
REUSE ❌
lockfile sync ✅
PHPUnit ✅ 1224/1224 · 20 skipped
Newman ⏭️
Playwright ⏭️ deferred: E2E runs locally and on the promotion path only. This pull request targets development, so the suite is asked once per promotion into beta and main rather than once per push per open pull request. Run it locally with npx playwright test, or from the Actions tab on a branch with no open pull request into development.
Hydra gates ✅

Quality workflow — 2026-10-13 19:10 UTC

Download the full PDF report from the workflow artifacts.

Comment thread tests/Unit/Settings/TopdeskCmdbFragmentTest.php

@WilcoLouwerse WilcoLouwerse left a comment

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Verdict: APPROVE (Standard) — self-review posted as COMMENT (GitHub blocks self-APPROVE)

The null JSON-Schema keywords are gone, and the PHPUnit blocker this review found, caused by this PR's own version bumps, was fixed before posting. CI is green on 23c2003. Whether the E2E seed now passes is shown by a dispatched run of code-quality.yml on this branch (run 38451969024), because the E2E job is skipped on pull requests.

✅ Fixed before posting (2)

  • PHPUnit red: the base bumps went above the pinned fragment versions — tests/Unit/Settings/TopdeskCmdbFragmentTest.php:68. Fixed in 23c2003: the bumps sit in the fragments that hold the effective version, and the three pins follow.
  • The PR body said this PR's CI proves the seed — corrected: the E2E job does not run on pull_request, and the body now links the dispatched run.

✅ Verified clean

  • Every removed key was null and a validation keyword. Per schema, the old file minus those keys equals the new file apart from version.
  • No null validation keyword is left in the register or any register.d fragment.
  • The effective versions of catalogService, organization, usage and module are each one above development (0.2.3, 0.5.4, 1.5.7, 0.3.9), so existing installs re-import them. OpenRegister's schemaContentDiffers also counts a removed null key as a change.
  • The guard test RegisterNullKeywordsTest fails on the old register and lists the paths.

Gates: CI quality / Hydra Gates ✅, PHPUnit (PHP 8.3, NC stable35, pgsql) ✅, Quality Report ✅ on 23c2003.
Before the next round: fix rules on (fix-induced 1 + missed-sibling 0 ≥ new 1).

This branch has not been deployed

No deployments
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