feat(core): add JSON:API v1.1 document model and validation - #9
Conversation
|
Note Reviews pausedIt 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 Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (1)
📝 WalkthroughWalkthroughPhase 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. ChangesJSON:API core model and validation
Estimated code review effort: 5 (Critical) | ~120 minutes 🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
There was a problem hiding this comment.
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
📒 Files selected for processing (51)
.agentWork/milestones/phase-1-1-spec-data-model.mdAGENTS.mdREADME.mddocs/conformance.mdjsonapi-java-core/README.mdjsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/internal/AdditionalMembers.javajsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/internal/MemberNames.javajsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/internal/OpenJsonValues.javajsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/internal/OrderedMaps.javajsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/internal/SyntaxValidators.javajsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/internal/package-info.javajsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/model/Attributes.javajsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/model/DocumentData.javajsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/model/ErrorObject.javajsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/model/ErrorSource.javajsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/model/JsonApiDocument.javajsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/model/JsonApiObject.javajsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/model/Link.javajsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/model/Links.javajsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/model/Meta.javajsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/model/Relationship.javajsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/model/RelationshipData.javajsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/model/Relationships.javajsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/model/ResourceIdentifier.javajsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/model/ResourceIdentity.javajsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/model/ResourceObject.javajsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/model/package-info.javajsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/validation/DocumentUsage.javajsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/validation/JsonApiDocumentValidator.javajsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/validation/JsonApiValidationException.javajsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/validation/LinksContext.javajsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/validation/LocalValidation.javajsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/validation/RelationshipCardinality.javajsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/validation/RelationshipPaginationKey.javajsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/validation/ValidationContext.javajsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/validation/ValidationRuleCode.javajsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/validation/package-info.javajsonapi-java-core/src/test/groovy/io/github/kazemek/jsonapi/core/SetupSpec.groovyjsonapi-java-core/src/test/groovy/io/github/kazemek/jsonapi/core/internal/MemberNamesSpec.groovyjsonapi-java-core/src/test/groovy/io/github/kazemek/jsonapi/core/internal/OpenJsonValuesSpec.groovyjsonapi-java-core/src/test/groovy/io/github/kazemek/jsonapi/core/internal/SyntaxValidatorsSpec.groovyjsonapi-java-core/src/test/groovy/io/github/kazemek/jsonapi/core/model/AttributesRelationshipsSpec.groovyjsonapi-java-core/src/test/groovy/io/github/kazemek/jsonapi/core/model/DocumentDataSpec.groovyjsonapi-java-core/src/test/groovy/io/github/kazemek/jsonapi/core/model/JsonApiDocumentSpec.groovyjsonapi-java-core/src/test/groovy/io/github/kazemek/jsonapi/core/model/JsonApiObjectSpec.groovyjsonapi-java-core/src/test/groovy/io/github/kazemek/jsonapi/core/model/LinkSpec.groovyjsonapi-java-core/src/test/groovy/io/github/kazemek/jsonapi/core/model/ModelCoverageSpec.groovyjsonapi-java-core/src/test/groovy/io/github/kazemek/jsonapi/core/model/RelationshipSpec.groovyjsonapi-java-core/src/test/groovy/io/github/kazemek/jsonapi/core/model/ResourceObjectSpec.groovyjsonapi-java-core/src/test/groovy/io/github/kazemek/jsonapi/core/validation/JsonApiDocumentValidatorSpec.groovyjsonapi-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
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]>
There was a problem hiding this comment.
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 | 🔵 TrivialVerify the repository quality gate before merge.
Based on learnings, completion requires
./gradlew clean build,spotlessApply,spotlessCheck, and SonarCloud analysis with the quality gate; withoutSONAR_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 winExercise both per-type pagination hints.
The
people/commentsrelationship has no pagination link, so itsTO_ONEhint is never consulted. A validator that incorrectly keyed hints only by relationship name would still pass this test. Add a paginatedpeoplecase and assert the expectedTO_ONEbehavior separately from the passingarticlescase.🤖 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 winAlign 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
📒 Files selected for processing (11)
.agentWork/milestones/phase-1-1-spec-data-model.mdREADME.mdjsonapi-java-core/README.mdjsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/internal/OpenJsonValues.javajsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/internal/OrderedMaps.javajsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/model/Links.javajsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/validation/JsonApiValidationException.javajsonapi-java-core/src/test/groovy/io/github/kazemek/jsonapi/core/internal/MemberNamesSpec.groovyjsonapi-java-core/src/test/groovy/io/github/kazemek/jsonapi/core/internal/OpenJsonValuesSpec.groovyjsonapi-java-core/src/test/groovy/io/github/kazemek/jsonapi/core/model/LinkSpec.groovyjsonapi-java-core/src/test/groovy/io/github/kazemek/jsonapi/core/validation/JsonApiDocumentValidatorSpec.groovy
|
Addressed the three outside-diff follow-up findings from the latest CodeRabbit review:
|
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]>
✅ Action performedComments resolved. Approval is disabled; enable |
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.
8862bdd to
87d7f62
Compare
There was a problem hiding this comment.
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
📒 Files selected for processing (52)
.agentWork/milestones/phase-1-1-spec-data-model.md.coderabbit.yamlAGENTS.mdREADME.mddocs/conformance.mdjsonapi-java-core/README.mdjsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/internal/AdditionalMembers.javajsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/internal/MemberNames.javajsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/internal/OpenJsonValues.javajsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/internal/OrderedMaps.javajsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/internal/SyntaxValidators.javajsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/internal/package-info.javajsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/model/Attributes.javajsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/model/DocumentData.javajsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/model/ErrorObject.javajsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/model/ErrorSource.javajsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/model/JsonApiDocument.javajsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/model/JsonApiObject.javajsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/model/Link.javajsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/model/Links.javajsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/model/Meta.javajsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/model/Relationship.javajsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/model/RelationshipData.javajsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/model/Relationships.javajsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/model/ResourceIdentifier.javajsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/model/ResourceIdentity.javajsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/model/ResourceObject.javajsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/model/package-info.javajsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/validation/DocumentUsage.javajsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/validation/JsonApiDocumentValidator.javajsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/validation/JsonApiValidationException.javajsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/validation/LinksContext.javajsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/validation/LocalValidation.javajsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/validation/RelationshipCardinality.javajsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/validation/RelationshipPaginationKey.javajsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/validation/ValidationContext.javajsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/validation/ValidationRuleCode.javajsonapi-java-core/src/main/java/io/github/kazemek/jsonapi/core/validation/package-info.javajsonapi-java-core/src/test/groovy/io/github/kazemek/jsonapi/core/SetupSpec.groovyjsonapi-java-core/src/test/groovy/io/github/kazemek/jsonapi/core/internal/MemberNamesSpec.groovyjsonapi-java-core/src/test/groovy/io/github/kazemek/jsonapi/core/internal/OpenJsonValuesSpec.groovyjsonapi-java-core/src/test/groovy/io/github/kazemek/jsonapi/core/internal/SyntaxValidatorsSpec.groovyjsonapi-java-core/src/test/groovy/io/github/kazemek/jsonapi/core/model/AttributesRelationshipsSpec.groovyjsonapi-java-core/src/test/groovy/io/github/kazemek/jsonapi/core/model/DocumentDataSpec.groovyjsonapi-java-core/src/test/groovy/io/github/kazemek/jsonapi/core/model/JsonApiDocumentSpec.groovyjsonapi-java-core/src/test/groovy/io/github/kazemek/jsonapi/core/model/JsonApiObjectSpec.groovyjsonapi-java-core/src/test/groovy/io/github/kazemek/jsonapi/core/model/LinkSpec.groovyjsonapi-java-core/src/test/groovy/io/github/kazemek/jsonapi/core/model/ModelCoverageSpec.groovyjsonapi-java-core/src/test/groovy/io/github/kazemek/jsonapi/core/model/RelationshipSpec.groovyjsonapi-java-core/src/test/groovy/io/github/kazemek/jsonapi/core/model/ResourceObjectSpec.groovyjsonapi-java-core/src/test/groovy/io/github/kazemek/jsonapi/core/validation/JsonApiDocumentValidatorSpec.groovyjsonapi-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
87d7f62 to
055c826
Compare
Enable request-changes workflow with auto-approve, PR summaries, and build-path filters so review behavior is explicit for this repo.
055c826 to
ebab411
Compare
|
|
@coderabbitai review |
✅ Action performedReview finished.
|



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