Skip to content

Simplify module result metadata names - #4268

Merged
thomhurst merged 4 commits into
mainfrom
issue-4221-module-result-names
Aug 29, 2026
Merged

Simplify module result metadata names#4268
thomhurst merged 4 commits into
mainfrom
issue-4221-module-result-names

Conversation

@thomhurst

@thomhurst thomhurst commented Aug 28, 2026

Copy link
Copy Markdown
Owner

Summary

  • rename ModuleResult/IModuleResult metadata to Name, TypeName, Status, Duration, StartTime, and EndTime
  • align result JSON and distributed consumers with the v4 names
  • lowercase the public Success constructor and Deconstruct parameter names
  • add an exact API-surface contract test

Validation

  • ModularPipelines.Tests.slnf Release build (178 existing warnings, 0 errors)
  • ModuleResultContractTests: 23 passed
  • ModuleResultSerializerTests: 3 passed
  • Distributed, Testing, GitHub, SignalR, and Redis focused builds passed
  • individual touched-project formatting passed; the broader solution format reached the fixed 2 GB agent guard, so it was not retried with a higher limit

Closes #4221

Summary by CodeRabbit

  • Breaking Changes
    • Renamed module result metadata fields to concise names: Name, TypeName, Duration, StartTime, and EndTime.
    • Updated serialized JSON fields to use the new names; existing persisted or distributed JSON must be migrated.
    • Updated reports, summaries, dependency graphs, failure messages, caching, and distributed result handling to reflect the renamed metadata.

@coderabbitai

coderabbitai Bot commented Aug 28, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

Next included review available in 6 minutes.

View limit details

Limit details: You’ve used all 4 included reviews currently available.

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

Learn how review limits work.

Review configuration:

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 7ad7e292-16b5-4529-9868-aad7b56393aa

📥 Commits

Reviewing files that changed from the base of the PR and between ea9f106 and d712cc2.

📒 Files selected for processing (6)
  • RELEASE_NOTES_V4.md
  • src/ModularPipelines/Engine/Executors/ExecutionOrchestrator.cs
  • src/ModularPipelines/Models/ModuleResult.cs
  • src/ModularPipelines/PublicAPI.Shipped.txt
  • src/ModularPipelines/PublicAPI.Unshipped.txt
  • test/ModularPipelines.UnitTests/Modules/ModuleResultContractTests.cs

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 6ee14af9-db4c-4109-a286-a673ba90a4cd

📥 Commits

Reviewing files that changed from the base of the PR and between 7b6f12f and ea9f106.

📒 Files selected for processing (26)
  • RELEASE_NOTES_V4.md
  • src/ModularPipelines.GitHub/GitHubMarkdownSummaryGenerator.cs
  • src/ModularPipelines.Testing/ModuleTester.cs
  • src/ModularPipelines/Distributed/Serialization/ModuleResultSerializer.cs
  • src/ModularPipelines/Engine/DependencyGraphExporter.cs
  • src/ModularPipelines/Engine/Executors/ExecutionOrchestrator.cs
  • src/ModularPipelines/Engine/PipelineRunReportFactory.cs
  • src/ModularPipelines/Helpers/SpectreResultsPrinter.cs
  • src/ModularPipelines/Models/IModuleResult.cs
  • src/ModularPipelines/Models/ModuleResult.cs
  • test/ModularPipelines.Distributed.UnitTests/DependencyResultPropagationTests.cs
  • test/ModularPipelines.Distributed.UnitTests/Integration/DistributedPipelineIntegrationTests.cs
  • test/ModularPipelines.Distributed.UnitTests/Master/DistributedModuleExecutorTests.cs
  • test/ModularPipelines.Distributed.UnitTests/Master/DistributedResultCollectorTests.cs
  • test/ModularPipelines.Distributed.UnitTests/Master/DistributedWorkPublisherTests.cs
  • test/ModularPipelines.Distributed.UnitTests/ModuleCompletionSourceApplicatorTests.cs
  • test/ModularPipelines.Distributed.UnitTests/Serialization/ModuleResultSerializerTests.cs
  • test/ModularPipelines.UnitTests/Caching/ModuleCacheTests.cs
  • test/ModularPipelines.UnitTests/Compatibility/ModuleStatusCompatibilityTests.cs
  • test/ModularPipelines.UnitTests/Dependencies/DependsOnAllInheritingFromTests.cs
  • test/ModularPipelines.UnitTests/Dependencies/TimedDependencyTests.cs
  • test/ModularPipelines.UnitTests/Engine/DependencyGraphExporterTests.cs
  • test/ModularPipelines.UnitTests/Execution/EngineCancellationTokenTests.cs
  • test/ModularPipelines.UnitTests/Helpers/SpectreResultsPrinterTests.cs
  • test/ModularPipelines.UnitTests/Models/JsonSerializationTests.cs
  • test/ModularPipelines.UnitTests/Modules/ModuleResultContractTests.cs

Included review availability: Your plan provides up to 4 included reviews per hour; 0 remain after this review.


📝 Walkthrough

Walkthrough

The PR renames five IModuleResult and ModuleResult metadata properties, updates custom JSON field names, changes the generic success parameter to value, and updates runtime consumers, documentation, and tests.

Changes

ModuleResult metadata contract

Layer / File(s) Summary
Result contract and variants
src/ModularPipelines/Models/IModuleResult.cs, src/ModularPipelines/Models/ModuleResult.cs, test/ModularPipelines.UnitTests/Modules/ModuleResultContractTests.cs
The result properties use Name, TypeName, Duration, StartTime, and EndTime. The generic success constructor and deconstructor use value.
Result JSON serialization
src/ModularPipelines/Models/ModuleResult.cs, src/ModularPipelines/Distributed/Serialization/ModuleResultSerializer.cs, test/ModularPipelines.UnitTests/Models/JsonSerializationTests.cs, test/ModularPipelines.Distributed.UnitTests/Serialization/ModuleResultSerializerTests.cs
JSON parsing and writing use the renamed fields. Deserialization requires Name.
Runtime and presentation consumers
src/ModularPipelines/Engine/..., src/ModularPipelines/Helpers/SpectreResultsPrinter.cs, src/ModularPipelines/GitHub/GitHubMarkdownSummaryGenerator.cs, src/ModularPipelines/Testing/ModuleTester.cs, RELEASE_NOTES_V4.md
Execution, reporting, graph export, result display, testing helpers, and release notes use the new metadata names.
Regression coverage
test/ModularPipelines.Distributed.UnitTests/..., test/ModularPipelines.UnitTests/...
Distributed, caching, compatibility, dependency, cancellation, graph, and printer tests use the renamed properties and updated JSON fixtures.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Merge Risk: 🟡 Moderate · up to ea9f1

This PR renames the result metadata in both the public API and persisted/distributed JSON. Mixed-version workers or existing cache entries can fail to deserialize results during rollout or rollback, so merging should wait for an explicit compatibility, deployment, and cache-invalidation plan.

Poem

A rabbit reviewed each name in the row
Name and Duration now neatly glow
StartTime and EndTime march in line
JSON fields follow the same design
“Hop hop,” says the rabbit, “the contracts align!”

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 7.89% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 76 functions across 25 files. (1 skipped: … 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 describes the primary change: simplifying module result metadata names.
Linked Issues check ✅ Passed The changes implement the linked issue requirements [#4221]. They rename the redundant metadata properties, align timing names, preserve the existing fallback accessors, rename the generic Success con…
Out of Scope Changes check ✅ Passed All changes support the linked issue [#4221]. The release notes, implementation updates, consumer updates, serialization changes, and tests are related to the metadata rename and API compatibility req…
Full details: Linked Issues check

Explanation

The changes implement the linked issue requirements [#4221]. They rename the redundant metadata properties, align timing names, preserve the existing fallback accessors, rename the generic Success constructor and Deconstruct parameter to value, and update serialization, consumers, and contract tests.

Full details: Out of Scope Changes check

Explanation

All changes support the linked issue [#4221]. The release notes, implementation updates, consumer updates, serialization changes, and tests are related to the metadata rename and API compatibility requirements.

Full details: Docstring Coverage

Explanation

Docstring coverage is 7.89% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 76 functions across 25 files. (1 skipped: 1 unsupported.)

✨ Finishing Touches 💡 1
📝 Generate docstrings 💡
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch issue-4221-module-result-names

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

@greptile-apps

greptile-apps Bot commented Aug 28, 2026

Copy link
Copy Markdown

Greptile Summary

The PR renames ModuleResult metadata across the public API, serialization, distributed processing, reports, and tests.

  • Replaces the five Module-prefixed metadata members with concise v4 names.
  • Emits the renamed JSON fields while retaining legacy-key deserialization.
  • Updates public API baselines and adds API-surface and serialization coverage.

Confidence Score: 5/5

The PR appears safe to merge because no blocking failure remains.

No blocking failure remains.

Important Files Changed

Filename Overview
src/ModularPipelines/Models/ModuleResult.cs Renames result metadata and updates generic and non-generic converters to emit new keys while reading both key sets.
src/ModularPipelines/Models/IModuleResult.cs Replaces the five Module-prefixed public metadata members with their concise v4 names.
RELEASE_NOTES_V4.md Adds the public member and serialized-field migration mapping.
test/ModularPipelines.UnitTests/Modules/ModuleResultContractTests.cs Adds exact public API contract and legacy JSON compatibility coverage.
src/ModularPipelines/Distributed/Serialization/ModuleResultSerializer.cs Aligns distributed type metadata normalization with the renamed TypeName member.

Reviews (6): Last reviewed commit: "fix(api): baseline renamed result member..." | Re-trigger Greptile

Comment thread src/ModularPipelines/Models/IModuleResult.cs

@chatgpt-codex-connector chatgpt-codex-connector 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: e2f1a8142f

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

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".

Comment thread src/ModularPipelines/Models/ModuleResult.cs

@claude claude 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.

Code review

Reviewed the mechanical rename of IModuleResult/ModuleResult metadata (ModuleNameName, ModuleTypeNameTypeName, ModuleDurationDuration, ModuleStartStartTime, ModuleEndEndTime) plus the lowercased Success/Deconstruct parameter names. This matches issue #4221 exactly, and I spot-checked every call site across src/ and test/ (production code, distributed serializer, GitHub summary generator, Spectre printer, dependency graph exporter, and all the affected test projects) — the rename is complete and consistent; I found no leftover references to the old names and no stale Value:-named arguments against the now-lowercase constructor/Deconstruct parameter. The new ModuleResultContractTests.MetadataSurface_UsesConciseNames test is a good addition that locks the public surface down via reflection so this can't silently regress.

One real gap, consistent with what Greptile's automated pass already flagged independently:

Missing RELEASE_NOTES_V4.md entry for this breaking rename. Every other breaking change in this v4 cycle (ExecutionModeFailureMode, ExecutionTypeExecutionHint, PipelineBuilderOptionsPipelineBuilderSettings, ArgumentPlacementCommandLinePhase, etc.) has a corresponding section in RELEASE_NOTES_V4.md with before/after names and, where relevant, a migration snippet. This PR renames five public IModuleResult members and changes the wire JSON field names (ModuleResultNonGenericJsonConverter/ModuleResultJsonConverter<T> in src/ModularPipelines/Models/ModuleResult.cs) but adds no corresponding entry. That's inconsistent with the established pattern in this exact file and leaves consumers — including anyone reading persisted/distributed ModuleResult JSON directly — without documented migration guidance, unlike the precedent set by keeping a "ModuleStatus" read-compat case for the earlier Status rename in the same converters.

Suggest adding a short section to RELEASE_NOTES_V4.md alongside the existing entries, listing the five renamed members (and the JSON field rename) so consumers migrating to v4 have one place to look, matching how every other breaking change in this file is documented.

@thomhurst
thomhurst force-pushed the issue-4221-module-result-names branch from e2f1a81 to ea9f106 Compare August 28, 2026 20:34
@thomhurst

Copy link
Copy Markdown
Owner Author

Addressed the blocking review in ea9f106: RELEASE_NOTES_V4.md now lists all five IModuleResult/ModuleResult member renames and the matching JSON field migration. Rebased onto current main. Exact-head validation: core/tests Release build passed (178 existing warnings, 0 errors); ModuleResultContractTests passed 23/23.

@claude claude 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.

Code review

Re-reviewed at HEAD ea9f1060. This PR is a mechanical rename of IModuleResult/ModuleResult metadata (ModuleNameName, ModuleTypeNameTypeName, ModuleDurationDuration, ModuleStartStartTime, ModuleEndEndTime) plus lowercasing the Success constructor/Deconstruct parameter. I re-checked every call site touched across src/ and test/ — production code, the distributed serializer, GitHub summary generator, Spectre printer, dependency graph exporter, and all affected test projects — and the rename is complete and consistent, matching issue #4221. The ModuleResultContractTests.MetadataSurface_UsesConciseNames reflection test is a good guard against future regressions.

Previously flagged and now resolved: my prior review blocked on the missing RELEASE_NOTES_V4.md entry. Commit ea9f1060 ("docs: describe module result migration") adds a "Module result metadata" section listing all five renames, consistent with how every other v4 breaking change in that file is documented. That gap is closed.

Still open — legacy JSON key compatibility (flagged by the automated codex-connector review, not addressed):

ModuleResultNonGenericJsonConverter.Read and ModuleResultJsonConverter<T>.Read in src/ModularPipelines/Models/ModuleResult.cs only recognize the new property names (Name, TypeName, Duration, StartTime, EndTime) when deserializing. Unlike Status, which explicitly keeps case "ModuleStatus": alongside case "Status": for read-compat with a prior rename, none of these five new names got the same treatment. A JSON payload written by a pre-v4 build (ModuleName, ModuleTypeName, ModuleDuration, ModuleStart, ModuleEnd) will silently fail to populate name, and the converter throws "Name is required but was not found in the JSON." on read.

This converter backs ModuleResultSerializer in src/ModularPipelines/Distributed/Serialization/ModuleResultSerializer.cs, i.e. cross-process distributed communication and any persisted result payloads. Because the existing ModuleStatus case already establishes the project's pattern for this exact scenario (rename a field, keep the old JSON key readable), leaving the other four unhandled is an inconsistency rather than a deliberate decision — it reads as an oversight in an otherwise careful rename, not a "this is fine because it's a major version" call. Concretely, it breaks:

  • Rolling/mixed-version distributed deployments (old worker → new master, or vice versa) exchanging ModuleResult JSON mid-upgrade.
  • Any consumer that persists ModuleResult JSON across process restarts/upgrades (e.g. caching, custom result repositories) and now gets a hard JsonException instead of a value with defaulted/renamed fields.

Suggest adding case "ModuleName":, case "ModuleTypeName":, case "ModuleDuration":, case "ModuleStart":, case "ModuleEnd": fallthroughs next to the new names in both converters' Read methods (writers should continue to emit only the new names, matching the existing Status/ModuleStatus precedent). This keeps the rename purely additive on the read side, matches the project's own established compatibility contract for this type, and avoids a silent breaking change for anyone with in-flight or persisted v3 payloads.

@thomhurst

Copy link
Copy Markdown
Owner Author

Addressed the legacy JSON compatibility review at 2913c7b9ec.

Both ModuleResult converters now accept ModuleName, ModuleTypeName, ModuleDuration, ModuleStart, and ModuleEnd while writers continue emitting only Name, TypeName, Duration, StartTime, and EndTime. Added generic and non-generic regression coverage for every legacy key.

Validation:

  • ModuleResultContractTests: 25/25
  • Release core build: 0 warnings, 0 errors
  • targeted formatting: clean

@claude claude 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.

Code review

Reviewed the metadata rename (ModuleNameName, ModuleTypeNameTypeName, ModuleDurationDuration, ModuleStartStartTime, ModuleEndEndTime, and the lowercase Success/Deconstruct parameter) across IModuleResult, ModuleResult, the JSON converters, and all runtime/distributed/test consumers.

What I checked:

  • Grepped src/ and test/ for any remaining .ModuleName/.ModuleDuration/.ModuleStart/.ModuleEnd accesses on IModuleResult/ModuleResult — none found. The other hits (IModuleContext.ModuleName, PlannedModule.ModuleName, ModuleAssignment.ModuleTypeName, Ansible's ModuleName) are distinct, unrelated types and correctly untouched.
  • Grepped for the old capitalized Success(Value: ...) / Deconstruct(Value: out ...) named-argument usage — none remain, so the parameter-name rename is complete.
  • Confirmed docs/docs/** references to ModuleName/ModuleTypeName (hooks, command-line planning, distributed Redis schema, Ansible) refer to unrelated types, not IModuleResult, so no docs are stale.
  • The JSON converters (ModuleResultNonGenericJsonConverter, ModuleResultJsonConverter<T>) read both the new and legacy property names on deserialize, but only ever write the new names — this is a deliberate, documented one-way breaking change (RELEASE_NOTES_V4.md), and the new Generic_Result_Reads_Legacy_Metadata_Keys/NonGeneric_Result_Reads_Legacy_Metadata_Keys tests plus the head commit (fix(json): read legacy result metadata) show this was added specifically to address the wire-compat concern CodeRabbit raised earlier in the thread. Worth calling out for anyone doing a live/rolling distributed upgrade (old workers can't parse new-format JSON), but that's already spelled out in the release notes, so I'm not blocking on it.
  • ModuleResultContractTests.MetadataSurface_UsesConciseNames locks the public surface via reflection, which is a good guardrail against future drift back to the verbose names.

Minor, non-blocking observation:

  • The await using refactor in test/ModularPipelines.UnitTests/Caching/ModuleCacheTests.cs (collapsing a block-scoped await using (...) { } into a using-declaration) is unrelated to the metadata rename. It's a harmless, behavior-preserving cleanup, just flagging it as out-of-scope churn in an otherwise tightly-scoped PR.

No correctness issues or CLAUDE.md violations found. This is a clean, mechanical rename with good regression coverage.

@thomhurst

Copy link
Copy Markdown
Owner Author

Current red jobs are downstream of the stale core public-API baselines introduced by #4251 after #4267. PR #4262 now carries the shared baseline repair and is awaiting CI/review; duplicating it here before #4262 merges would incorrectly remove APIs that still exist on this branch. This PR should be rebased after #4262 lands, then only its ModuleResult rename delta needs baselining.

@thomhurst
thomhurst force-pushed the issue-4221-module-result-names branch from 2913c7b to 7658b0d Compare August 28, 2026 22:19
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Aug 28, 2026

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review Completed 2026-08-28T23:59:38.056704Z d712cc2 New commits
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@claude claude 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.

Code review

Re-reviewed at HEAD 7658b0d6. The prior review history on this PR shows the commit SHAs changed (e2f1a814ea9f10602913c7b97658b0d6), but that's a rebase onto the latest main (past #4270 "Tidy exception hierarchy and contracts" and #4251 "Baseline public APIs"), not new content — I diffed the current PR against the last reviewed state and confirmed the changed file set (26 files) and every hunk are identical in substance to what was already reviewed and cleared.

Verified still in place from the prior CLEAR review:

  • The metadata rename (ModuleNameName, ModuleTypeNameTypeName, ModuleDurationDuration, ModuleStartStartTime, ModuleEndEndTime, plus lowercase Success/Deconstruct parameter) is complete and consistent across src/ and test/ — no leftover old-name references on IModuleResult/ModuleResult.
  • ModuleResultNonGenericJsonConverter.Read and ModuleResultJsonConverter<T>.Read in src/ModularPipelines/Models/ModuleResult.cs (lines 690-712, 864-886) read both new and legacy property names (ModuleName, ModuleTypeName, ModuleDuration, ModuleStart, ModuleEnd), matching the existing Status/ModuleStatus compat pattern. Writers emit only the new names — a deliberate, documented one-way wire change.
  • RELEASE_NOTES_V4.md has the "Module result metadata" section documenting all five renames.
  • ModuleResultContractTests.MetadataSurface_UsesConciseNames locks the public surface via reflection, and the new Generic_Result_Reads_Legacy_Metadata_Keys/NonGeneric_Result_Reads_Legacy_Metadata_Keys tests exercise the legacy-key read path end-to-end (verified the RenameMetadataProperties helper's string replacements target only the intended JSON keys, with no accidental substring collisions like "Name": matching inside "TypeName":).

No correctness issues or CLAUDE.md violations found. This is a clean, mechanical rename with good regression coverage; nothing new to flag since the last review.

Align ModuleResult metadata with CommandResult and remove redundant Module prefixes before the v4 release.
Accept the five pre-v4 module result metadata keys during deserialization while continuing to emit the concise v4 names.
@thomhurst
thomhurst force-pushed the issue-4221-module-result-names branch from 7658b0d to ebb47b6 Compare August 28, 2026 23:29

@claude claude 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.

Code review

Re-reviewed at HEAD ebb47b64 (another rebase — commit SHAs shifted again, but I diffed this PR's 28 changed files against the last reviewed/cleared state and the substance is identical).

Verified still in place, independently re-checked (not just trusted from history):

  • The metadata rename (ModuleNameName, ModuleTypeNameTypeName, ModuleDurationDuration, ModuleStartStartTime, ModuleEndEndTime, plus lowercase Success/Deconstruct value parameter) is complete and consistent across src/ and test/ — no stale references to the old names on IModuleResult/ModuleResult.
  • ModuleResultNonGenericJsonConverter.Read and ModuleResultJsonConverter<T>.Read in src/ModularPipelines/Models/ModuleResult.cs accept both the new and legacy JSON property names (case "Name": case "ModuleName":, etc.) for all five renamed fields, matching the established Status/ModuleStatus compat pattern. Writers emit only the new names — a deliberate, documented one-way wire change.
  • RELEASE_NOTES_V4.md has the "Module result metadata" section documenting all five renames and the JSON migration note.
  • ModuleResultContractTests.MetadataSurface_UsesConciseNames locks the public surface via reflection, and Generic_Result_Reads_Legacy_Metadata_Keys/NonGeneric_Result_Reads_Legacy_Metadata_Keys exercise the legacy-key read path end-to-end. I checked the RenameMetadataProperties test helper's ordered string replacements by hand — "Name": does not collide with "TypeName": (no quote immediately precedes Name inside TypeName), so the test fixture actually produces the intended legacy JSON rather than accidentally double-renaming.

No correctness issues or CLAUDE.md violations found. This remains a clean, mechanical, well-tested rename; nothing new to flag on this rebase.

@thomhurst

Copy link
Copy Markdown
Owner Author

@claude review

@claude claude 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.

Code review

Re-reviewed at HEAD d712cc2b. This is another rebase point on top of the previously cleared ebb47b64 state; the only new commit is d712cc2b ("fix(api): baseline renamed result members"), which updates PublicAPI.Shipped.txt/PublicAPI.Unshipped.txt to match the metadata rename.

Verified the new commit specifically:

  • It moves the five renamed IModuleResult/ModuleResult members (Name, TypeName, Duration, StartTime, EndTime) plus the lowercase-parameter Success(T value)/Deconstruct(out T value) from Shipped.txt into Unshipped.txt, and removes the old PascalCase-parameter/old-name entries — exactly the delta this rename introduces, and exactly what a prior review comment on this PR asked for (rebase after #4262, then baseline only the ModuleResult rename delta).
  • Cross-checked src/ModularPipelines/Models/ModuleResult.cs: the Success record's constructor and Deconstruct both use the lowercase value parameter, matching the new baseline entries.
  • No duplicate or cross-file (Shipped vs Unshipped) entries introduced.
  • Built ModularPipelines.slnx (Release) at this HEAD: succeeded, 0 errors, only the 12 pre-existing RS0026 warnings (unrelated optional-parameter-overload analyzer, present before this PR). No RS0016/RS0017 public-API-mismatch diagnostics, confirming the new baseline entries now match the compiled API surface.

Everything previously verified in this rename (JSON legacy-key compat readers, release notes, contract tests) is untouched by this commit. No correctness issues or CLAUDE.md violations found.

@thomhurst
thomhurst merged commit 56a3e4d into main Aug 29, 2026
15 checks passed
@thomhurst
thomhurst deleted the issue-4221-module-result-names branch August 29, 2026 00:30
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.

v4: drop the Module* prefix stutter on ModuleResult and align timing names with CommandResult

1 participant