Repository navigation
Preserve generic class source rows and distinguish null collections - #7453
Conversation
|
Warning Review limit reachedYou've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. Next included review available in 2 minutes. View limit details
No actionable comments were generated in the recent review. Walkthrough
Merge Risk:
|
|
@codex review |
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
Review of #7453I read the diff and found no blocking problems. The null-collection handling and the fresh-factory-values fix both look correct. What I checked
Suggestions (non-blocking)
The tests are good: 7 new fixtures run in both modes, the engine integration tests cover each factory shape, and the PublicAPI scrubber fix has its own test. I did not run the tests myself. I'm relying on the PR's reported results and on CI for the Engine.Tests legs. |
|
Codex Review: Didn't find any major issues. What shall we delve into next? Reviewed commit: ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
If Codex has suggestions, it will comment; otherwise it will react with 👍. Codex can also answer questions or update the PR. Try commenting "@codex address that feedback". |
[Medium impact] The PR appears safe to merge; no actionable defects were found. SummaryThe PR separates null collections from null data rows and preserves factory-backed constructor data.
|
|
Reviewed all review surfaces for 4bb1b38: Claude and Codex have positive verdicts, Greptile reports no actionable issues, and there are no inline threads. Disposition of Claude’s nonblocking suggestions: retain the current implementation. Generated emission supplies fresh source instances, as ConfigureInferredSource documents, so mutation is confined to owned instances. The nested inference expression preserves the existing declared-type precedence; extracting a helper or introducing an interface is an optional refactor with no correctness fix needed here. First-fetch caching and subsequent factory invocation are intentional to provide fresh test objects, documented on StaticDataSourceAttribute.FirstFetchRows and RowFactories. These suggestions do not block promotion. Marking ready for CI; draft CI skips are expected. Auto-merge must wait for the ready-for-review Claude run and its review to complete. |
4bb1b38 to
6dc7ac9
Compare
|
@codex review Rebased onto current main to resolve DataSourceFactories conflicts. Retained main’s tuple-preserving row conversion, runtime-value dispatch, and null-task/null-async-source guards; applied this PR’s null-collection guards to the shared and instance collection factories. Reviewed the range-diff for lost changes. Validation on SDK 10.0.403/net10.0: DataSourceCollectionTests 17 passed; DataSourceFactoriesRuntimeValueTests 3 passed; GenericClassSourceRuntimeTests 8 passed. No generator output or reflection path changed by the conflict resolution. Prior integration, PublicAPI and AOT validation is recorded in the PR body; Engine.Tests remains for CI per repository instructions. The earlier promotion was immediately reverted when GitHub finished calculating mergeability and reported conflicts. Keeping this new head draft pending fresh Claude and Codex review. |
|
Codex Review: Didn't find any major issues. What shall we delve into next? Reviewed commit: ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
If Codex has suggestions, it will comment; otherwise it will react with 👍. Codex can also answer questions or update the PR. Try commenting "@codex address that feedback". |
Review of #7453Overall this is a solid, well-tested change. The null-collection handling is consistent across sync, Task, ValueTask and async-enumerable factories. The fresh-factory-per-row behavior is covered in both modes, and the AOT validation is a good sign. I found no blocking bugs. These are design concerns for you to weigh:
Nit: Overall: approve, pending CI on the other runtime legs and Engine.Tests. |
|
Run 41585626517 passed for current head 6dc7ac9. Re-read all conversation comments, reviews and inline threads: Claude and Codex approve this head, Greptile has no findings, and there are no review threads. Disposition of Claude's latest nonblocking suggestions: retain the implementation. The split inference representation and helper extraction are optional refactors. Setting SkipIfEmpty=false repeatedly is idempotent; these generated-code sources are configured for row-backed violations, and reusing that entry does not change their shape. A Task null intentionally remains a scalar null row: its declared type supplies no evidence that it is a collection. Caching GetTaskResultType is a possible optimization, without measurements showing a regression here. ConfigureInferredSource already documents first-fetch reuse, and StaticDataSourceAttribute documents subsequent fresh factory invocation. Its arrays are built together by reflection discovery; no index mismatch was identified. The generator integration remains explicitly tracked by open #7446. Promoting this reviewed head to start CI. The ready-for-review Claude run must pass and its comment must be read before auto-merge is armed. |
|
Promotion verified: ready for review, unchanged head 6dc7ac9, mergeable. Waiting for ready-for-review Claude run 41587253901 and CI. Read that run's review before arming auto-merge; the earlier draft review passed but does not replace the promotion review. No code changes or external prerequisite are needed, and no hold label is appropriate. |
Review of #7453I read the diff and the surrounding code. I did not run the tests. The null-collection fix and the fresh-factory change look correct, and the new fixtures cover both. I have a few design notes, none of them blocking. What looks good
Design notes
The PublicAPI snapshots look consistent. The |
6dc7ac9 to
1ea0b76
Compare
|
@codex review Run 41587253901 completed successfully; that earlier blocker is gone. The subsequent .NET run 41587253149 failed on four stale mock-generator snapshots on all three operating systems. Rebasing onto current main d9e9e66 removes those stale differences without changing this PR's runtime patch (range-diff is identical). All 232 mock-generator tests now pass locally. Addressed the latest Claude review in commit 1ea0b76: extracted RowInfers with the same precedence and copied FilterClassRows/InferredClassTypeArguments in ToInstanceVariant. Added a regression proving conversion retains the settings and filters an all-null external row. The other design notes retain their prior disposition: generated sources are owned instances, repeated SkipIfEmpty assignment is idempotent, and no measured performance regression warrants changing the small LINQ check. The requested focused coverage already exists in Inferred_Null_Row_Is_Retained_Only_For_Own_Class and Constraint_Violations_Report_Only_Actual_Source_Rows; both passed again. Validation on SDK 10.0.403/net10.0: mock generator 232 passed; GenericClassSourceRuntimeTests 9 passed; #7445 fixtures 7 passed generated and 7 passed reflection; PublicAPI 20 passed. No snapshot updates were needed. Existing build warnings are tracked by #7410, #7412, #7413, #7419 and #7438. Engine.Tests remains for CI, per repository instructions. Prior Native AOT validation is recorded in the PR body; this update adds no reflection calls or generator output changes. The PR is back in draft for fresh reviews on head 1ea0b76. After both reviewers approve this head, promote it, read the ready-for-review Claude result, and arm auto-merge through Enable-AutoMerge.ps1. |
Review of #7453I read the diff but did not build it or run any tests. I found no blocking issues. The change is well scoped and well tested. What looks good
Suggestions (non-blocking)
Overall: nice work, and the test coverage is good. |
|
Codex Review: Didn't find any major issues. What shall we delve into next? Reviewed commit: ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
If Codex has suggestions, it will comment; otherwise it will react with 👍. Codex can also answer questions or update the PR. Try commenting "@codex address that feedback". |
|
The earlier wait on run 41587253901 is resolved. Rechecked all review surfaces on head 1ea0b76: Claude's current draft run 41591895040 passed with no blocking findings, Codex's completed summary and receipt approve this exact head, Greptile reports no actionable defects, and there are no inline comments or review threads. The rework budget is not exceeded (4 Claude rounds, 2 force pushes). Disposition of the latest nonblocking suggestions: retain the current implementation. RowInfers already extracts precedence into a named helper; replacing the inference storage with an interface is a broader optional refactor. ConfigureInferredSource documents generated-only usage and its fresh-instance ownership; repeated SkipIfEmpty=false in row-backed constraint metadata is idempotent. The null-task reflection walk occurs only for null results and has no demonstrated performance regression. SourcePathPattern already has an XML explanation and focused regression coverage, so further regex refactoring is optional. No code change is required for these suggestions. Promoting the reviewed, mergeable head for CI. The new ready-for-review Claude run must complete and its review must be read before Enable-AutoMerge.ps1 can arm auto-merge. No external prerequisite or hold label is needed. |
|
Promotion verified: PR is ready for review and MERGEABLE at unchanged head 1ea0b76. Ready-for-review Claude run 41593222410 is queued, and CI has started. Read that run's review after it completes, then arm auto-merge with Enable-AutoMerge.ps1 if it has no blocking findings and the current head is unchanged. The earlier run 41587253901 succeeded and is no longer the blocker. No code change or linked prerequisite is needed; this is a workflow wait, with no hold label. |
Review of #7453I read the runtime changes in What looks right
Suggestions (non-blocking)
Overall this is a well-scoped extraction, and the tests cover both generated and reflection modes. The notes above are cleanups only. 🤖 Generated with Claude Code |
|
The earlier blocker is resolved: ready-for-review Claude run 41593222410 passed on unchanged head 1ea0b76. Read its promotion review and all conversation comments, reviews, inline comments and review threads. Codex's completed summary approves this exact head, Greptile reports no actionable defects, and there are no inline comments or review threads. All current CI checks pass, including the three Engine.Tests and Native AOT legs. Rework remains within budget (5 Claude rounds, 2 force pushes). Disposition of the promotion review's nonblocking cleanups: retain the implementation. RowInfers already names the precedence logic; replacing the inference storage with an interface is an optional refactor. HasNonNullValues is already shared by both modes; its call sites apply different source/partition rules, and the matching-mode tests now pass in CI. The LINQ and evaluatedItems suggestions identify no correctness failure or measured regression, so they do not justify a performance change without measurement. Generated-only sources are fresh instances, and repeating SkipIfEmpty=false is idempotent, as previously dispositioned. CodeRabbit's docstring percentage is an advisory tool threshold, not a repository requirement; the generated-code API has XML documentation and no actionable defect was reported. No linked prerequisite, replacement, stale scope or human decision remains. Proceeding through Merge-Pr.ps1's fresh, head-pinned gate rather than deferring the completed workflow wait. |
Null collections returned by generated data-source factories were converted into a null constructor row. Treat null collections as empty across synchronous, Task, ValueTask and async-enumerable factories, including instance variants, while retaining null elements and scalar null values.
Extract the runtime support from #7422: inferred class-source filtering and constructor-position type mapping, fresh factory values for subsequent reflection-built tests, and row-backed constraint violations. The new generated-code configuration method and optional violation sources are intentional additive public APIs on EditorBrowsable(Never) types. Keep the current generator and reflection inference rules; #7446 owns enabling the remaining inference feature. Include the independent PublicAPI scrubber correction for wrapped
.csextensions.Closes #7445
Validation:
Native publishing reports existing fixture warnings. Generic AutoFixture annotation warnings are tracked in #7452; generated hook warnings are already tracked in #7430. No warnings name the changed runtime paths.
Summary by CodeRabbit