Repository navigation
Description
Is there an existing issue for this?
- I have searched the existing issues. GitHub search for explicitNulls in this repository returned no matches. This concerns a serializer-policy reasoning false positive, separate from the wildcard-discovery counterexample in ππ§βπ» - Review claims a unittest module never runs despite wildcard discovery and actual CI executionΒ #806.
Which actions are affected?
Pull Request
Which platforms are affected?
Linux
Description
Bugbot recommends removing the explicitNulls=false condition from input optionality, claiming that the compiled Kotlin decoder always requires nullable properties without defaults. That recommendation would reject inputs that the actual corresponding Kotlin decoder accepts.
The cited existing negative test executes serverWireJson with explicitNulls=true. It does not establish behavior for the false policy. The generator currently accounts for the policy correctly; no generator production change is needed.
Reproducing the issue
Observed finding: https://github.com/vypdev/geckocv/pull/42#discussion_r4423890160
Review workflow: https://github.com/vypdev/geckocv/actions/runs/41059078157
Reviewed source: 1b5e3a0ade73d21c749bceba004230fc97f2713e.
Additional compiled controls and audit: https://github.com/vypdev/geckocv/commit/f017a52
The existing compiled probe contains:
@Serializable
private data class WireShapeProbe(
@SerialName("candidate_name") val candidateName: String,
val requiredNullable: String?,
// Other fields have defaults.
)With the repository's installed runtime and Json(serverWireJson) { explicitNulls = false }, decoding {"candidate_name":"Synthetic"} succeeds and requiredNullable is null. It equals decoding the same object with requiredNullable explicitly null. Decoding {} still throws for the missing non-nullable candidate_name. With serverWireJson's explicitNulls=true, omitting requiredNullable throws.
The new actual compiled serializer control passes with the seven existing controls: eight tests, zero failures/errors/skips. The actual export still has the original frozen proposal SHA-256 111bcafb260579ec2489f8386117a531ec8498e73a90f271f9a3e4c795d65dd7. The generator remains byte-for-byte unchanged.
The real TypeScript 5.9.3 campaign also compiles omission of requiredNullable under the compiled implicit-null fixture. Its existing negative control rejects that omission under the explicit-null fixture. All 64 typed-contract tooling cases pass, retaining all nine source floors of 90% lines and branches.
Official semantics: https://kotlinlang.org/api/kotlinx.serialization/kotlinx-serialization-json/kotlinx.serialization.json/-json-builder/explicit-nulls.html
The documentation explicitly covers absence becoming null for nullable properties without defaults when the flag is disabled. Actual repository runtime execution independently confirms it.
copilot Version
Observed review uses published vypdev/copilot@v3 at f5e5a4c / 3.10.6. No conclusion is drawn about an unexecuted newer release or the internal cause of this reasoning error.
Relevant Log Output
The finding asserts: "for valid evidence with explicitNulls: false, the generated input type permits omission that the corresponding Kotlin serializer rejects." The real decoder accepts that omission. Its suggested change would narrow the TypeScript input surface incorrectly.
Additional context and comments
Please cover both flag values in review grounding/evaluation, including required non-nullable controls and nullable fields with/without defaults. Follow the actual Json instance used by the cited test rather than transferring conclusions between policies. This report does not dismiss actual request-validation issues or ask to reduce review gates.
The reporter has not started an upstream branch, changed the correct consumer generator, reduced the SDD scope, lowered thresholds, deployed or published a release. Genuine malformed administrative-body defects remain open separately in GeckoCV #49. Please handle this through the Copilot team's normal workflow.
Metadata
Metadata
Assignees
Labels
Type
Projects
- StatusShow more project fieldsDone
Activity
[-]Review false positive: implicit-null input requiredness contradicts the actual Kotlin decoder[/-][+]π - Review false positive implicit null input requiredness contradicts the actual Kotlin decoder[/+]vypbot commentedon Oct 30, 2026
Hi! Iβm @vypbot, the Copilot assistant for this repository.
I can answer questions, explain the codebase, propose implementation and test plans, review issues and pull requests for potential bugs or security problems, and help authorized maintainers apply changes.
Try
/copilot helpto see the available commands, or mention @vypbot with your question.[-]π - Review false positive implicit null input requiredness contradicts the actual Kotlin decoder[/-][+]ππ§βπ» - Review false positive implicit null input requiredness contradicts the actual Kotlin decoder[/+]vypbot commentedon Oct 30, 2026
Implementation plan
Acceptance: The Bugbot evaluation passes cases for both explicitNulls values, including compiled-decoder controls for required non-nullable properties and nullable properties with and without defaults, and the existing source coverage floors remain at or above 90% for lines and branches.
Need something else? Mention the bot with a question or use
/copilot help.vypbot commentedon Oct 30, 2026
Issue closed β historical progress
Current status: closed as completed.
The last estimate is retained below as history. Closure does not certify a new percentage, tests, or branch alignment.
Action required: none for this closed issue. If work continues, reopen the issue; a fresh assessment can update this same card.
Last assessment before closure (historical)
Merge pull request #818 from vypdev/bugfix/807-review-false-positive-β¦