Skip to content

feat(core): add JSON:API v1.1 document model and validation - #9

Merged
kazemek merged 2 commits into
mainfrom
feature/spec-data-model
Jul 28, 2026
Merged

kazemek merged 2 commits into
mainfrom
feature/spec-data-model

Conversation

@kazemek

@kazemek kazemek commented Jul 28, 2026 •

Copy link
Copy Markdown
Collaborator

Preserve wire-visible absence/null states and enforce document invariants so Phase 2.1 can build the Jackson codec on a strict, dependency-free core.

Summary by CodeRabbit

  • New Features
    • Added an immutable JSON:API v1.1 document model covering top-level documents, primary data variants, resources, relationships, links, errors, and meta, with defensive copying.
    • Introduced local and document-wide validation with stable rule codes and JSON Pointer-like diagnostics, plus a configurable validation context.
    • Added RFC-oriented syntax validation for URIs, link relations, language tags, media types, and extension/profile URIs.
  • Documentation
    • Expanded READMEs, added contributor/documentation guidance, and introduced a JSON:API conformance checklist.
  • Tests
    • Added comprehensive Spock test coverage for model validation, deep-copy behavior, and syntax validators; removed a placeholder test.

@coderabbitai

coderabbitai Bot commented Jul 28, 2026 •

Copy link
Copy Markdown

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: f4bd83ac-be46-4a5d-9131-b92516f5861a

📥 Commits

Reviewing files that changed from the base of the PR and between 87d7f62 and ebab411.

📒 Files selected for processing (1)
  • .coderabbit.yaml

📝 Walkthrough

Walkthrough

Phase 1.1 adds a zero-dependency JSON:API v1.1 document model, local and aggregate validation, stable diagnostics, defensive-copy utilities, extensive Spock coverage, conformance documentation, and CodeRabbit review configuration.

Changes

JSON:API core model and validation

Layer / File(s) Summary
Internal syntax and copying utilities
jsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/internal/*
Adds member-name, URI, media-type, language-tag, open-value, ordered-map, and additional-member validation/copy helpers.
Document and resource model types
jsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/model/*
Adds immutable records, classes, and sealed types for documents, resources, identifiers, relationships, links, metadata, attributes, and errors.
Contextual document validation
jsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/validation/*
Adds validation contexts and policies, stable diagnostic codes, aggregate validation, identity/linkage resolution, namespace checks, and pagination validation.
Model and validator coverage
jsonapi-java-core/src/test/groovy/io/github/kazemek/jsonapi/core/*
Adds Spock tests for model invariants, copying, syntax rules, diagnostics, linkage, identities, namespaces, pagination, and compound-document validation.
Project, conformance, and review configuration
.agentWork/milestones/phase-1-1-spec-data-model.md, AGENTS.md, README.md, docs/conformance.md, jsonapi-java-core/README.md, .coderabbit.yaml
Marks Phase 1.1 complete, documents the module and conformance status, and configures automated review behavior.

Estimated code review effort: 5 (Critical) | ~120 minutes

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 7.30% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly matches the main change: adding the JSON:API v1.1 document model and validation in core.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feature/spec-data-model

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 12

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In @.agentWork/milestones/phase-1-1-spec-data-model.md:
- Around line 136-138: Update the “In-branch amendment” wording in the module
documentation to remove the stale “still open / unmerged” status and explicitly
describe it as historical, consistent with the milestone being marked Complete.

In `@jsonapi-java-core/README.md`:
- Around line 15-20: Update the minimal usage example around
JsonApiDocument.withData to either declare and construct the required resource
and include necessary imports, making the snippet compilable, or explicitly
label it as pseudocode assuming a previously constructed ResourceObject.

In
`@jsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/internal/OpenJsonValues.java`:
- Line 164: Update the recursive map-copy logic around copy(entry.getValue(),
...) in OpenJsonValues to JSON Pointer-escape each map key before appending it
to path: replace "~" with "~0" and "/" with "~1", in that order. Preserve
existing path formatting and add regression coverage for nested keys containing
both characters.

In
`@jsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/model/Links.java`:
- Line 41: Update OrderedMaps.requireNoCollisions to accept Map<String, ?> for
both map parameters, since it only compares keys. Then remove the unchecked raw
Map cast at the call site in Links and pass linkCopy and
castLinks(additionalCopy) directly, preserving the existing collision-check
behavior.

In
`@jsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/validation/JsonApiValidationException.java`:
- Around line 4-14: Update JsonApiValidationException by declaring an explicit
serialVersionUID, and add a constructor overload that accepts a Throwable cause
while preserving the existing ruleCode, jsonPointer, and message initialization.
Ensure the new overload passes the cause to RuntimeException.

In
`@jsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/validation/LocalValidation.java`:
- Around line 11-31: Change LocalValidation.fail to return the
JsonApiValidationException it creates instead of throwing it, then update every
fail-on-error call site, including requireNonNull, copyRequiredList, and
ResourceIdentifier, to explicitly throw LocalValidation.fail(...). Preserve the
existing rule codes, paths, messages, and successful return behavior while
making all failure branches visibly non-returning to the compiler.

In
`@jsonapi-java-core/src/test/groovy/io/github/kazemek/jsonapi/core/internal/MemberNamesSpec.groovy`:
- Around line 11-45: Extend the parameterized tests for MemberNames.isValid,
isExtensionMember, and isAtMember to cover null inputs and the
trailing-separator cases "name " and "name-". Add an extension-member case
containing a second colon to verify isValidExtensionMember rejects multi-colon
names, while preserving the existing valid and invalid expectations.

In
`@jsonapi-java-core/src/test/groovy/io/github/kazemek/jsonapi/core/model/AttributesRelationshipsSpec.groovy`:
- Around line 68-89: Update the “non-reserved resource field names” attribute
and relationship specs to expect rejection of the `lid` key, while retaining
acceptance of `meta` and `links`. Extend the validators used by
`Attributes.ofAttributes` and `Relationships.ofRelationships` to reject `lid`
alongside the existing reserved `type` and `id` names.

In
`@jsonapi-java-core/src/test/groovy/io/github/kazemek/jsonapi/core/validation/JsonApiDocumentValidatorSpec.groovy`:
- Around line 126-133: Extract a private spec helper for the repeated
seven-argument ValidationContext construction, defaulting namespaces, profiles,
permittedNames, and hints while preserving RESPONSE_OR_OTHER, false, and
TOP_LEVEL. Replace the visible literal and the other repeated call sites in
JsonApiDocumentValidatorSpec with the helper, passing arguments only where
non-default values are needed.
- Around line 562-569: Update the test "invalid profile link relation name is
rejected even when allow-listed" to create a ValidationContext whose
profile-permitted names include has_underscore, then invoke the validator's
validate method on the document containing that link and assert the
INVALID_LINK_RELATION rule. Do not rely solely on Links.ofLinks local
validation; if this spec cannot access the required validator flow, move the
case to the appropriate model spec.
- Around line 266-287: Rename the test method "inconsistent local identifiers
are rejected" to describe duplicate resource identity rejection, while leaving
its setup and DUPLICATE_RESOURCE_IDENTITY assertion unchanged.

In `@README.md`:
- Line 9: Update the README project description and status line to consistently
reflect that only the dependency-free core is currently available and Jackson
codec/domain mapping is planned rather than implemented. Preserve the existing
description of completed Gradle, CI, architecture, and Phase 1.1 work while
removing the contradiction about Jackson functionality.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 79821fb7-7544-4846-8e68-10a95b348d3b

📥 Commits

Reviewing files that changed from the base of the PR and between 5c5ea20 and a3c95c9.

📒 Files selected for processing (51)
  • .agentWork/milestones/phase-1-1-spec-data-model.md
  • AGENTS.md
  • README.md
  • docs/conformance.md
  • jsonapi-java-core/README.md
  • jsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/internal/AdditionalMembers.java
  • jsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/internal/MemberNames.java
  • jsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/internal/OpenJsonValues.java
  • jsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/internal/OrderedMaps.java
  • jsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/internal/SyntaxValidators.java
  • jsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/internal/package-info.java
  • jsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/model/Attributes.java
  • jsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/model/DocumentData.java
  • jsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/model/ErrorObject.java
  • jsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/model/ErrorSource.java
  • jsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/model/JsonApiDocument.java
  • jsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/model/JsonApiObject.java
  • jsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/model/Link.java
  • jsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/model/Links.java
  • jsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/model/Meta.java
  • jsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/model/Relationship.java
  • jsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/model/RelationshipData.java
  • jsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/model/Relationships.java
  • jsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/model/ResourceIdentifier.java
  • jsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/model/ResourceIdentity.java
  • jsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/model/ResourceObject.java
  • jsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/model/package-info.java
  • jsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/validation/DocumentUsage.java
  • jsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/validation/JsonApiDocumentValidator.java
  • jsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/validation/JsonApiValidationException.java
  • jsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/validation/LinksContext.java
  • jsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/validation/LocalValidation.java
  • jsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/validation/RelationshipCardinality.java
  • jsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/validation/RelationshipPaginationKey.java
  • jsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/validation/ValidationContext.java
  • jsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/validation/ValidationRuleCode.java
  • jsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/validation/package-info.java
  • jsonapi-java-core/src/test/groovy/io/github/kazemek/jsonapi/core/SetupSpec.groovy
  • jsonapi-java-core/src/test/groovy/io/github/kazemek/jsonapi/core/internal/MemberNamesSpec.groovy
  • jsonapi-java-core/src/test/groovy/io/github/kazemek/jsonapi/core/internal/OpenJsonValuesSpec.groovy
  • jsonapi-java-core/src/test/groovy/io/github/kazemek/jsonapi/core/internal/SyntaxValidatorsSpec.groovy
  • jsonapi-java-core/src/test/groovy/io/github/kazemek/jsonapi/core/model/AttributesRelationshipsSpec.groovy
  • jsonapi-java-core/src/test/groovy/io/github/kazemek/jsonapi/core/model/DocumentDataSpec.groovy
  • jsonapi-java-core/src/test/groovy/io/github/kazemek/jsonapi/core/model/JsonApiDocumentSpec.groovy
  • jsonapi-java-core/src/test/groovy/io/github/kazemek/jsonapi/core/model/JsonApiObjectSpec.groovy
  • jsonapi-java-core/src/test/groovy/io/github/kazemek/jsonapi/core/model/LinkSpec.groovy
  • jsonapi-java-core/src/test/groovy/io/github/kazemek/jsonapi/core/model/ModelCoverageSpec.groovy
  • jsonapi-java-core/src/test/groovy/io/github/kazemek/jsonapi/core/model/RelationshipSpec.groovy
  • jsonapi-java-core/src/test/groovy/io/github/kazemek/jsonapi/core/model/ResourceObjectSpec.groovy
  • jsonapi-java-core/src/test/groovy/io/github/kazemek/jsonapi/core/validation/JsonApiDocumentValidatorSpec.groovy
  • jsonapi-java-core/src/test/groovy/io/github/kazemek/jsonapi/core/validation/ValidatorCoverageSpec.groovy
💤 Files with no reviewable changes (1)
  • jsonapi-java-core/src/test/groovy/io/github/kazemek/jsonapi/core/SetupSpec.groovy

Comment thread .agentWork/milestones/phase-1-1-spec-data-model.md Outdated
Comment thread jsonapi-java-core/README.md
Comment thread jsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/model/Links.java Outdated
Comment thread README.md
kazemek added a commit that referenced this pull request Jul 28, 2026
Escape open-JSON diagnostic pointers, reserve serialVersionUID,
tighten docs/examples, and correct misleading tests; skip incorrect
lid-field reservation and pure style nits.

Co-authored-by: Cursor <[email protected]>

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (3)
jsonapi-java-core/src/test/groovy/io/github/kazemek/jsonapi/core/validation/JsonApiDocumentValidatorSpec.groovy (3)

18-20: 📐 Maintainability & Code Quality | 🔵 Trivial

Verify the repository quality gate before merge.

Based on learnings, completion requires ./gradlew clean build, spotlessApply, spotlessCheck, and SonarCloud analysis with the quality gate; without SONAR_TOKEN, completion must be reported as blocked. The supplied context does not show those results.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@jsonapi-java-core/src/test/groovy/io/github/kazemek/jsonapi/core/validation/JsonApiDocumentValidatorSpec.groovy`
around lines 18 - 20, Before considering the change complete, run ./gradlew
clean build, spotlessApply, spotlessCheck, and SonarCloud analysis with the
quality gate for JsonApiDocumentValidatorSpec. If SONAR_TOKEN is unavailable,
report completion as blocked rather than claiming the quality gate passed.

Source: Learnings


224-264: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Exercise both per-type pagination hints.

The people/comments relationship has no pagination link, so its TO_ONE hint is never consulted. A validator that incorrectly keyed hints only by relationship name would still pass this test. Add a paginated people case and assert the expected TO_ONE behavior separately from the passing articles case.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@jsonapi-java-core/src/test/groovy/io/github/kazemek/jsonapi/core/validation/JsonApiDocumentValidatorSpec.groovy`
around lines 224 - 264, The test “same relationship name can have different
cardinalities per resource type” must exercise both pagination hints: add a
pagination link to the people/comments relationship so its TO_ONE hint is
consulted, then validate the articles and people cases separately, asserting the
articles TO_MANY case succeeds and the people TO_ONE case produces the expected
validation behavior.

49-68: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Align the linkage fixtures with their test names.

The “duplicate included resources” case has only one included resource and is actually a primary/included duplicate, which is covered again later. The “non-transitive orphan beyond one hop” case has no relationship at all and is only a direct orphan. Rename or repurpose these fixtures so the suite tests distinct scenarios.

Also applies to: 355-371

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@jsonapi-java-core/src/test/groovy/io/github/kazemek/jsonapi/core/validation/JsonApiDocumentValidatorSpec.groovy`
around lines 49 - 68, Update the “duplicate included resources are rejected”
fixture so the included collection itself contains two resources with the same
identity, rather than duplicating the primary resource; keep the assertion
focused on the included duplicate. Also revise the “non-transitive orphan beyond
one hop” fixture to define a relationship chain that makes the orphan reachable
after more than one hop, ensuring these tests cover distinct linkage scenarios.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Outside diff comments:
In
`@jsonapi-java-core/src/test/groovy/io/github/kazemek/jsonapi/core/validation/JsonApiDocumentValidatorSpec.groovy`:
- Around line 18-20: Before considering the change complete, run ./gradlew clean
build, spotlessApply, spotlessCheck, and SonarCloud analysis with the quality
gate for JsonApiDocumentValidatorSpec. If SONAR_TOKEN is unavailable, report
completion as blocked rather than claiming the quality gate passed.
- Around line 224-264: The test “same relationship name can have different
cardinalities per resource type” must exercise both pagination hints: add a
pagination link to the people/comments relationship so its TO_ONE hint is
consulted, then validate the articles and people cases separately, asserting the
articles TO_MANY case succeeds and the people TO_ONE case produces the expected
validation behavior.
- Around line 49-68: Update the “duplicate included resources are rejected”
fixture so the included collection itself contains two resources with the same
identity, rather than duplicating the primary resource; keep the assertion
focused on the included duplicate. Also revise the “non-transitive orphan beyond
one hop” fixture to define a relationship chain that makes the orphan reachable
after more than one hop, ensuring these tests cover distinct linkage scenarios.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: e5dac793-2dee-41f9-aa33-9136772cfade

📥 Commits

Reviewing files that changed from the base of the PR and between a3c95c9 and 494816d.

📒 Files selected for processing (11)
  • .agentWork/milestones/phase-1-1-spec-data-model.md
  • README.md
  • jsonapi-java-core/README.md
  • jsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/internal/OpenJsonValues.java
  • jsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/internal/OrderedMaps.java
  • jsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/model/Links.java
  • jsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/validation/JsonApiValidationException.java
  • jsonapi-java-core/src/test/groovy/io/github/kazemek/jsonapi/core/internal/MemberNamesSpec.groovy
  • jsonapi-java-core/src/test/groovy/io/github/kazemek/jsonapi/core/internal/OpenJsonValuesSpec.groovy
  • jsonapi-java-core/src/test/groovy/io/github/kazemek/jsonapi/core/model/LinkSpec.groovy
  • jsonapi-java-core/src/test/groovy/io/github/kazemek/jsonapi/core/validation/JsonApiDocumentValidatorSpec.groovy

@kazemek

kazemek commented Jul 28, 2026

Copy link
Copy Markdown
Collaborator Author

Addressed the three outside-diff follow-up findings from the latest CodeRabbit review:

  1. Per-type pagination hints — split into separate TO_MANY (allows first) and TO_ONE (rejects first with PAGINATION_REQUIRES_COLLECTION) cases so both hints are consulted.
  2. Fixture alignment — duplicate included resources now duplicates within included (/included/1); non-transitive orphan beyond one hop is article→comment with an unreachable included author.
  3. Quality-gate reminder — skipped as process-only; Spotless, ./gradlew clean build, and Sonar Quality Gate re-verified green after this change.

kazemek added a commit that referenced this pull request Jul 28, 2026
Exercise per-type TO_ONE pagination hints and align included-duplicate
and non-transitive-orphan fixtures with their claimed scenarios.

Co-authored-by: Cursor <[email protected]>
@coderabbitai

coderabbitai Bot commented Jul 28, 2026

Copy link
Copy Markdown
✅ Action performed

Comments resolved. Approval is disabled; enable reviews.request_changes_workflow to allow explicit top-level @coderabbitai resolve or @coderabbitai approve commands.

Preserve wire-visible absence/null states and enforce document invariants
so Phase 2.1 can build the Jackson codec on a strict, dependency-free core.
@kazemek
kazemek force-pushed the feature/spec-data-model branch from 8862bdd to 87d7f62 Compare July 28, 2026 20:33

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In @.coderabbit.yaml:
- Around line 11-15: Remove the auto_approve configuration entry from the
reviews settings in .coderabbit.yaml, while preserving request_changes_workflow
and its surrounding configuration.
- Around line 26-29: Move the summary configuration from the `summary` block
into the `reviews` configuration, exposing `high_level_summary` and
`sequence_diagrams` directly under `reviews`; remove the unsupported
`summary.enabled` setting.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 8e67e732-0442-4a58-9c10-d00961c45138

📥 Commits

Reviewing files that changed from the base of the PR and between 8862bdd and 87d7f62.

📒 Files selected for processing (52)
  • .agentWork/milestones/phase-1-1-spec-data-model.md
  • .coderabbit.yaml
  • AGENTS.md
  • README.md
  • docs/conformance.md
  • jsonapi-java-core/README.md
  • jsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/internal/AdditionalMembers.java
  • jsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/internal/MemberNames.java
  • jsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/internal/OpenJsonValues.java
  • jsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/internal/OrderedMaps.java
  • jsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/internal/SyntaxValidators.java
  • jsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/internal/package-info.java
  • jsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/model/Attributes.java
  • jsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/model/DocumentData.java
  • jsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/model/ErrorObject.java
  • jsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/model/ErrorSource.java
  • jsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/model/JsonApiDocument.java
  • jsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/model/JsonApiObject.java
  • jsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/model/Link.java
  • jsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/model/Links.java
  • jsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/model/Meta.java
  • jsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/model/Relationship.java
  • jsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/model/RelationshipData.java
  • jsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/model/Relationships.java
  • jsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/model/ResourceIdentifier.java
  • jsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/model/ResourceIdentity.java
  • jsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/model/ResourceObject.java
  • jsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/model/package-info.java
  • jsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/validation/DocumentUsage.java
  • jsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/validation/JsonApiDocumentValidator.java
  • jsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/validation/JsonApiValidationException.java
  • jsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/validation/LinksContext.java
  • jsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/validation/LocalValidation.java
  • jsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/validation/RelationshipCardinality.java
  • jsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/validation/RelationshipPaginationKey.java
  • jsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/validation/ValidationContext.java
  • jsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/validation/ValidationRuleCode.java
  • jsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/validation/package-info.java
  • jsonapi-java-core/src/test/groovy/io/github/kazemek/jsonapi/core/SetupSpec.groovy
  • jsonapi-java-core/src/test/groovy/io/github/kazemek/jsonapi/core/internal/MemberNamesSpec.groovy
  • jsonapi-java-core/src/test/groovy/io/github/kazemek/jsonapi/core/internal/OpenJsonValuesSpec.groovy
  • jsonapi-java-core/src/test/groovy/io/github/kazemek/jsonapi/core/internal/SyntaxValidatorsSpec.groovy
  • jsonapi-java-core/src/test/groovy/io/github/kazemek/jsonapi/core/model/AttributesRelationshipsSpec.groovy
  • jsonapi-java-core/src/test/groovy/io/github/kazemek/jsonapi/core/model/DocumentDataSpec.groovy
  • jsonapi-java-core/src/test/groovy/io/github/kazemek/jsonapi/core/model/JsonApiDocumentSpec.groovy
  • jsonapi-java-core/src/test/groovy/io/github/kazemek/jsonapi/core/model/JsonApiObjectSpec.groovy
  • jsonapi-java-core/src/test/groovy/io/github/kazemek/jsonapi/core/model/LinkSpec.groovy
  • jsonapi-java-core/src/test/groovy/io/github/kazemek/jsonapi/core/model/ModelCoverageSpec.groovy
  • jsonapi-java-core/src/test/groovy/io/github/kazemek/jsonapi/core/model/RelationshipSpec.groovy
  • jsonapi-java-core/src/test/groovy/io/github/kazemek/jsonapi/core/model/ResourceObjectSpec.groovy
  • jsonapi-java-core/src/test/groovy/io/github/kazemek/jsonapi/core/validation/JsonApiDocumentValidatorSpec.groovy
  • jsonapi-java-core/src/test/groovy/io/github/kazemek/jsonapi/core/validation/ValidatorCoverageSpec.groovy
💤 Files with no reviewable changes (1)
  • jsonapi-java-core/src/test/groovy/io/github/kazemek/jsonapi/core/SetupSpec.groovy
🚧 Files skipped from review as they are similar to previous changes (47)
  • jsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/validation/DocumentUsage.java
  • jsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/internal/package-info.java
  • jsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/validation/RelationshipCardinality.java
  • jsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/validation/package-info.java
  • jsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/model/ResourceIdentity.java
  • jsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/validation/JsonApiValidationException.java
  • AGENTS.md
  • docs/conformance.md
  • jsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/model/ErrorSource.java
  • jsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/model/DocumentData.java
  • jsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/validation/LinksContext.java
  • jsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/model/Meta.java
  • jsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/validation/LocalValidation.java
  • jsonapi-java-core/src/test/groovy/io/github/kazemek/jsonapi/core/model/JsonApiObjectSpec.groovy
  • jsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/model/Attributes.java
  • jsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/validation/ValidationContext.java
  • jsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/model/ResourceIdentifier.java
  • jsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/model/ErrorObject.java
  • jsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/validation/RelationshipPaginationKey.java
  • jsonapi-java-core/src/test/groovy/io/github/kazemek/jsonapi/core/internal/SyntaxValidatorsSpec.groovy
  • jsonapi-java-core/src/test/groovy/io/github/kazemek/jsonapi/core/internal/MemberNamesSpec.groovy
  • jsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/validation/ValidationRuleCode.java
  • jsonapi-java-core/src/test/groovy/io/github/kazemek/jsonapi/core/model/ResourceObjectSpec.groovy
  • jsonapi-java-core/src/test/groovy/io/github/kazemek/jsonapi/core/model/DocumentDataSpec.groovy
  • jsonapi-java-core/src/test/groovy/io/github/kazemek/jsonapi/core/model/ModelCoverageSpec.groovy
  • jsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/model/RelationshipData.java
  • jsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/internal/MemberNames.java
  • jsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/model/JsonApiDocument.java
  • jsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/internal/AdditionalMembers.java
  • jsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/model/JsonApiObject.java
  • jsonapi-java-core/src/test/groovy/io/github/kazemek/jsonapi/core/internal/OpenJsonValuesSpec.groovy
  • jsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/model/Relationship.java
  • jsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/model/Link.java
  • jsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/model/Relationships.java
  • jsonapi-java-core/src/test/groovy/io/github/kazemek/jsonapi/core/model/RelationshipSpec.groovy
  • jsonapi-java-core/src/test/groovy/io/github/kazemek/jsonapi/core/validation/ValidatorCoverageSpec.groovy
  • jsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/internal/OrderedMaps.java
  • jsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/model/ResourceObject.java
  • jsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/model/Links.java
  • README.md
  • .agentWork/milestones/phase-1-1-spec-data-model.md
  • jsonapi-java-core/src/test/groovy/io/github/kazemek/jsonapi/core/model/LinkSpec.groovy
  • jsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/internal/OpenJsonValues.java
  • jsonapi-java-core/src/test/groovy/io/github/kazemek/jsonapi/core/model/AttributesRelationshipsSpec.groovy
  • jsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/validation/JsonApiDocumentValidator.java
  • jsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/internal/SyntaxValidators.java
  • jsonapi-java-core/src/test/groovy/io/github/kazemek/jsonapi/core/validation/JsonApiDocumentValidatorSpec.groovy

Comment thread .coderabbit.yaml Outdated
Comment thread .coderabbit.yaml Outdated
@kazemek
kazemek force-pushed the feature/spec-data-model branch from 87d7f62 to 055c826 Compare July 28, 2026 20:43
coderabbitai[bot]
coderabbitai Bot previously approved these changes Jul 28, 2026
Enable request-changes workflow with auto-approve, PR summaries, and
build-path filters so review behavior is explicit for this repo.
@sonarqubecloud

Copy link
Copy Markdown

@kazemek

kazemek commented Jul 28, 2026

Copy link
Copy Markdown
Collaborator Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Jul 28, 2026 •

Copy link
Copy Markdown
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

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