feat(tools): #174 OData ALC probe — design, plan, and Phase 1 tooling#230
Conversation
Design for: trackedAssemblies-driven probe filter (captures OData ALC ownership), an in-session dump helper, a maintainer-run live-probe runbook (synthetic CI + manual live; Stage 2b auth deferred), and a workaround-first / preload-last adjudication framework for #174. Phase 1 (tooling + runbook + framework) is implementable now; the actual #174 resolution is Phase 2, gated on the probe evidence. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
Dependency Review✅ No vulnerabilities or license issues or OpenSSF Scorecard issues found.Scanned FilesNone |
Up to standards ✅🟢 Issues
|
| Category | Results |
|---|---|
| CodeStyle | 1 minor |
NEW Get contextual insights on your PRs based on Codacy's metrics, along with PR and Jira context, without leaving GitHub. Enable AI reviewer
TIP This summary will be updated as you push new changes.
There was a problem hiding this comment.
Pull request overview
Adds a design spec for the next workstream to gather runtime AssemblyLoadContext (ALC) evidence for the Microsoft.OData.* stack (focused on Az.Storage + ExchangeOnlineManagement) and to define an evidence-gated adjudication framework for issue #174.
Changes:
- Documents a Phase 1 plan to extend the existing runtime probe to use
build/dependency-policy.json’strackedAssemblies(capturing OData assemblies). - Specifies an in-session “loaded tracked assemblies” dump helper plus a maintainer-run live-probe runbook.
- Defines a workaround-first / preload-last decision framework for resolving #174 in a follow-up phase.
…A & B) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
… fragile) Maintainer's live test showed a multi-line function does not paste cleanly into interactive pwsh (ParserError). Component C now builds Component A first and the runbook calls the script via a one-line 'probe' helper; also notes the Constrained Language Mode dependency for the AppDomain/ALC APIs. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Task-by-task TDD plan for Component A (Get-DLLPickleLoadedTrackedAssembly), Component B (refactor snapshot tool to source filter from trackedAssemblies), unit tests, architecture map update, and the live-probe runbook handoff. Phase 2 (#174 resolution) out of scope. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…-session ALC dump)
…s (captures OData)
… scripts) The refactor's .DESCRIPTION had an em dash, which forced a UTF-8 BOM to satisfy PSUseBOMForUnicodeEncodedFile; the other tools/ scripts are ASCII + no-BOM. Normalize the em dash to '-' so the file stays ASCII/no-BOM and consistent. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
@codex review |
…no hard-coded runbook path) - Component B PolicyPath default is repo-root-relative via $PSScriptRoot (matches the shipped implementation), not CWD-relative. - Runbook resolves $RepoRoot via 'git rev-parse --show-toplevel' instead of a hard-coded user path. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 6 out of 6 changed files in this pull request and generated no new comments.
Comments suppressed due to low confidence (1)
tools/Get-DLLPickleRuntimeAssemblySnapshot.ps1:71
pwshis invoked as a child process, but the script doesn’t check$LASTEXITCODEand will return an empty array if the child terminates before producing JSON (e.g., missing helper/policy path). That can silently mask failures and look like “no tracked assemblies loaded”. Consider throwing on non-zero exit, and wrapping JSON parsing with a clearer error so probe failures are visible to the caller.
$Raw = & pwsh @ChildArguments
$Json = ($Raw | Out-String).Trim()
if ([string]::IsNullOrWhiteSpace($Json)) { return @() }
@($Json | ConvertFrom-Json)
Summary
Phase 1 of the #174 OData adjudication workstream: the runtime ALC-ownership probe tooling, plus the design spec and implementation plan it was built from. The actual #174 resolution is Phase 2 (evidence-gated, separate).
Design + plan (docs)
docs/superpowers/specs/2026-06-01-issue174-odata-alc-probe-design.md— the design (probe extension, runbook, workaround-first/preload-last adjudication framework).docs/superpowers/plans/2026-06-01-issue174-odata-alc-probe.md— the task-by-task implementation plan.Tooling (Phase 1)
tools/Get-DLLPickleLoadedTrackedAssembly.ps1: in-session dump of loaded assemblies whose name is intrackedAssemblies, with version + ALC (optional-NameLikepost-filter).tools/Get-DLLPickleRuntimeAssemblySnapshot.ps1refactored to source its filter fromtrackedAssembliesvia the shared helper + a new-PolicyPathparam (so it now capturesMicrosoft.OData.*/Microsoft.Spatial), replacing the hardcoded regex.tests/Unit/RuntimeAssemblyProbe.Tests.ps1— 5 unit tests for A and B.docs/Architecture.md§4 — component map lists the new tool.Validation
Invoke-Build Analyze,Test— 4 tasks, 0 errors (1 warning = the existingInvalidLibrary.dllnegative-test fixture); analyzer clean on src/tests/tools.Import-DPLibrary, the helper reports the 9 preloaded MSAL/IdentityModel assemblies (Default ALC) — end-to-end confirmation.No bundle paths touched (
tools//tests//docs/), so no PSGallery release on merge.🤖 Generated with Claude Code