Limit portable publish signing scope#305
Conversation
Code ReviewOverall this is a clean, well-motivated change. The diff is focused, the model/resolver/schema are kept in sync, and the new tests cover both the default and opt-in paths. A few things worth flagging: Breaking change — silent for existing usersThe default behavior flips from signing
Reflection on a private method in testsBoth new tests reach into var method = typeof(DotNetPublishPipelineRunner)
.GetMethod("TrySignOutput", BindingFlags.Instance | BindingFlags.NonPublic);This is already the pattern in the surrounding test class, so it is at least consistent. However, it silently breaks (returns A longer-term alternative would be marking
|
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: a62b4c2840
ℹ️ 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".
Code ReviewThe change is well-scoped and addresses a real performance problem (over-signing during portable releases). The model, resolver, schema, and tests are updated consistently. Here is my assessment: What looks good
Concerns1. Breaking change is silent for existing callersThe default flips from
2.
|
Code ReviewThe change is well-scoped and addresses a real performance problem (over-signing during portable releases). The model, resolver, schema, and tests are updated consistently. What looks good
Concerns1. Breaking change - silent for existing consumers The default behavior flips from signing *.exe + *.dll to signing *.exe only. Any caller that relied on DLLs being signed will silently stop getting them signed after upgrading, with no runtime warning. Suggestion: emit a one-time info/warn log when DLL files are present in the output directory but IncludeDlls is false. This makes the new default visible to existing users without blocking anything. 2. Tests skip silently on non-Windows Both new tests use an early-return guard. On Linux/macOS CI the tests pass vacuously - there is no signal that coverage was skipped. Consider using xUnit's Assert.Skip so the test run reports them as skipped rather than passed. This is a minor nit and is consistent with the existing test class pattern. 3. IncludeDlls = false in a patch is a reset, not a no-op The doc comment says "Set false to explicitly disable DLL signing even if the base profile enables it" - this is accurate, but worth noting that false is also the default, so omitting the field entirely has the same effect unless a base profile already set it true. Helps avoid confusion for future readers. SummaryNo blocking issues. The main item worth acting on before merge is the silent breaking change - a warn log when DLLs are detected but not opted into would be cheap to add and would protect existing users. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 44453b4f12
ℹ️ 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".
Summary
IncludeDllsopt-in on publish signing profiles and overridesWhy
During the signed IntelligenceX release rehearsal on April 6, 2026, a portable release spent an unreasonable amount of time inside token-backed signing because PowerForge was recursively signing the full portable payload. That is too expensive for normal desktop-app portable releases and does not match the common expectation of signing the app binary layer by default.
Validation
dotnet test .\PowerForge.Tests\PowerForge.Tests.csproj -c Release --filter DotNetPublishPipelineRunnerHardeningTestsdotnet build .\PowerForge.Cli\PowerForge.Cli.csproj -c Release -f net10.0dotnet build .\PSPublishModule\PSPublishModule.csproj -c Release -f net8.0dotnet build .\PSPublishModule\PSPublishModule.csproj -c Release -f net472