• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

wol-soft / php-json-schema-model-generator / 31640503194
99%
master: 99%

Build:
Build:
LAST BUILD BRANCH: claude/mr-74-review-adoption-3p8hdm
DEFAULT BRANCH: master
Ran 12 Aug 2026 09:02PM UTC
Jobs 1
Files 187
Run time 1min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

12 Aug 2026 09:00PM UTC coverage: 98.88% (+0.07%) from 98.811%
31640503194

Pull #166

github

wol-soft
Fix defects found while reviewing the object-shape work

Four crashes and false rejections, each verified against master to separate
regressions from pre-existing behaviour.

An allOf branch whose declared type is a LIST containing "object" was rejected
as conflicting with an object-asserting sibling. assertNoObjectScalarTypeConflict()
inferred "scalar branch" from the absence of a nested schema, but a multi-type
branch has none either: createMultiTypeProperty() puts it on the object
sub-property it builds, which is unreachable from the branch. That rejected
`allOf: [<object>, {"type": ["object", "null"]}]` - the ordinary "referenced
type, but nullable" shape - as unsatisfiable. The check now reads the branch's
declared type. Deliberately not routed through ObjectShapeResolver: that answers
whether a branch ASSERTS object-ness, which a multi-type branch does not, while
the question here is the weaker "can an object satisfy this branch at all".

Two cross-file reference shapes broke. checkObjectRepresentability() ran before
generateModel() registered the schema, and its $ref peek re-enters
processTopLevelSchema() for cross-file targets, so parseExternalFile()'s dedup
short-circuit could not fire: two files referencing each other recursed until the
stack was exhausted, and a target referencing back built a second render job
("File X.php already exists"). Both registrations now happen before the check.
ObjectShapeResolver's own cycle guard cannot cover this - it is local to one
classify() call and cannot see re-entrancy through the SchemaProcessor.

A composition keyword given as a JSON object rather than an array made every
branch-numbering site compute $index + 1 on a string key, and a branch that is
not a schema was indexed into as an array. Both now raise a SchemaException
naming the offending keyword and branch. `not` and if/then/else crashed the same
way on a scalar branch - pre-existing rather than a regression, but hardened
alongside, since rejec... (continued)
Pull Request #166: Fix crashes and silent misvalidation in object-implied compositions, reject non-representable ones

453 of 457 new or added lines in 15 files covered. (99.12%)

7947 of 8037 relevant lines covered (98.88%)

594.55 hits per line

Uncovered Changes

Lines Coverage ∆ File
2
99.2
0.09% src/SchemaProcessor/SchemaProcessor.php
1
99.48
-0.1% src/Model/Validator/Factory/Composition/AbstractCompositionValidatorFactory.php
1
98.89
src/PropertyProcessor/ObjectShape/ObjectShapeResolver.php
Jobs
ID Job ID Ran Files Coverage
1 Unit - 31640503194.1 12 Aug 2026 09:02PM UTC 187
98.88
GitHub Action Run
Source Files on build 31640503194
  • Tree
  • List 187
  • Changed 18
  • Source Changed 16
  • Coverage Changed 17
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • Github Actions Build #31640503194
  • Pull Request #166
  • PR Base - master (#31429899973)
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc