[docs] Update documentation for features from 2026-04-25#929
[docs] Update documentation for features from 2026-04-25#929danielmeppiel wants to merge 2 commits intomainfrom
Conversation
There was a problem hiding this comment.
Pull request overview
Updates the project changelog to document a recently merged Windows policy-cache bug fix (PRs #886 and #895) that was missing from the [Unreleased] section.
Changes:
- Add a
[Unreleased] -> Fixedchangelog entry describing the Windows policy cache path normalization fix.
Show a summary per file
| File | Description |
|---|---|
CHANGELOG.md |
Adds a new bullet under [Unreleased] documenting the Windows policy cache path resolution fix. |
Copilot's findings
- Files reviewed: 1/1 changed files
- Comments generated: 2
| ### Fixed | ||
|
|
||
| - `apm update` sanitises the subprocess environment before invoking the platform installer so the bundled PyInstaller `LD_LIBRARY_PATH` / `DYLD_*` no longer leak into system binaries (`curl`, `tar`, `sudo`) spawned by `install.sh`. Previously the installer's first `curl` call could abort with `libssl.so.3: version 'OPENSSL_3.2.0' not found` on distros whose system `libcurl` requires a newer OpenSSL ABI than the APM bundle ships (Debian trixie arm64 dev-containers, Fedora 43, and similar). Restoration uses PyInstaller's official `<VAR>_ORIG` protocol, preserving the user's own `LD_LIBRARY_PATH` exports. Closes #894 | ||
| - Policy cache path resolution on Windows: `discover_policy` now resolves `project_root` to its canonical long-name form before computing the cache path, preventing 8.3 short-name/long-name mismatches from triggering a false `PathTraversalError` on Windows. (#886, #895) |
There was a problem hiding this comment.
Under ## [Unreleased], ### Fixed appears twice (once at line 30 and again at line 40), which breaks the Keep a Changelog structure and makes entries easy to miss. Please consolidate into a single ### Fixed section and place this new bullet under that single section (also worth double-checking the rest of the file for any merge artifacts).
See below for a potential fix:
- `apm update` sanitises the subprocess environment before invoking the platform installer so the bundled PyInstaller `LD_LIBRARY_PATH` / `DYLD_*` no longer leak into system binaries (`curl`, `tar`, `sudo`) spawned by `install.sh`. Previously the installer's first `curl` call could abort with `libssl.so.3: version 'OPENSSL_3.2.0' not found` on distros whose system `libcurl` requires a newer OpenSSL ABI than the APM bundle ships (Debian trixie arm64 dev-containers, Fedora 43, and similar). Restoration uses PyInstaller's official `<VAR>_ORIG` protocol, preserving the user's own `LD_LIBRARY_PATH` exports. Closes #894
- Policy cache path resolution on Windows: `discover_policy` now resolves `project_root` to its canonical long-name form before computing the cache path, preventing 8.3 short-name/long-name mismatches from triggering a false `PathTraversalError` on Windows. (#886, #895)
### Removed
- CI: deleted `ci-integration-pr-stub.yml`. The four stubs were a holdover from the pre-merge-gate model where branch protection required each Tier 2 check name directly. After #867, branch protection requires only `gate`, so the stubs are dead weight. Reduced `EXPECTED_CHECKS` in `merge-gate.yml` to just `Build & Test (Linux)`.
| ### Fixed | ||
|
|
||
| - `apm update` sanitises the subprocess environment before invoking the platform installer so the bundled PyInstaller `LD_LIBRARY_PATH` / `DYLD_*` no longer leak into system binaries (`curl`, `tar`, `sudo`) spawned by `install.sh`. Previously the installer's first `curl` call could abort with `libssl.so.3: version 'OPENSSL_3.2.0' not found` on distros whose system `libcurl` requires a newer OpenSSL ABI than the APM bundle ships (Debian trixie arm64 dev-containers, Fedora 43, and similar). Restoration uses PyInstaller's official `<VAR>_ORIG` protocol, preserving the user's own `LD_LIBRARY_PATH` exports. Closes #894 | ||
| - Policy cache path resolution on Windows: `discover_policy` now resolves `project_root` to its canonical long-name form before computing the cache path, preventing 8.3 short-name/long-name mismatches from triggering a false `PathTraversalError` on Windows. (#886, #895) |
There was a problem hiding this comment.
The new entry says discover_policy resolves project_root before computing the cache path, but the actual fix (per #886/#895) is in _get_cache_dir() / ensure_path_within() path normalization. Consider rewording to describe the behavior change (policy cache path normalization on Windows) without attributing it to the wrong function name.
| - Policy cache path resolution on Windows: `discover_policy` now resolves `project_root` to its canonical long-name form before computing the cache path, preventing 8.3 short-name/long-name mismatches from triggering a false `PathTraversalError` on Windows. (#886, #895) | |
| - Policy cache path handling on Windows now normalises paths consistently, preventing 8.3 short-name/long-name mismatches from triggering a false `PathTraversalError`. (#886, #895) |
APM Review Panel VerdictDisposition: APPROVE Per-persona findingsPython Architect: This PR is a single-line documentation edit to OO/class diagram (problem-space of the documented fix): classDiagram
direction LR
class CHANGELOG {
<<Document>>
+Unreleased section
+Fixed entries
}
class discover_policy {
<<IOBoundary>>
+discover_policy(project_root) Policy
+_resolve_cache_path(project_root) Path
}
class PathSecurity {
<<Pure>>
+validate_path_segments(value, context) None
+ensure_path_within(path, base_dir) Path
}
CHANGELOG ..> discover_policy : documents fix in
discover_policy ..> PathSecurity : uses
class CHANGELOG:::touched
classDef touched fill:#fff3b0,stroke:#d47600
note for discover_policy "Before fix: 8.3 short-name vs long-name mismatch\ncaused false PathTraversalError on Windows"
Execution flow (CHANGELOG contribution path): flowchart TD
A[PR 929: add CHANGELOG Fixed entry] --> B["[I/O] edit CHANGELOG.md Unreleased/Fixed section"]
B --> C{Entry follows Keep-a-Changelog format?}
C -->|yes| D["[I/O] CHANGELOG.md persisted to main"]
D --> E[Release tooling reads Unreleased section]
E --> F[Windows cache path fix surfaces in release notes]
C -->|no| G[Review blocks merge]
Design patterns
Structural check: Entry is correctly placed under CLI Logging Expert: No changes to any output path, DevX UX Expert: No command surface, flag, help text, or error wording changed. The CHANGELOG entry itself is a user-facing artifact:
Assessment: lead outcome is clear, technical detail is accurate and warranted for a Windows-specific behavior change, and the fix improves reliability for Windows users without introducing any new friction. All review-lens checks pass (N/A for CLI surface changes). No concerns. Supply Chain Security Expert: Auth Expert: Not activated -- PR modifies only OSS Growth Hacker: Side-channel to CEO: the Unreleased block now contains two platform-reliability fixes in one window (#894 LD_LIBRARY_PATH PyInstaller fix, #886/#895 Windows cache path fix). This "we fix platform-specific edge cases fast" pattern is worth extracting as a theme in the next release narrative -- it differentiates APM from tools that treat Windows and ARM as second-class. Worth a one-line callout in the release post, not a blocker here. CEO arbitrationAll five mandatory specialists returned clean findings with no disagreements to arbitrate. Auth Expert was correctly excluded -- the PR does not touch any auth surface. The change is a well-formed, correctly placed CHANGELOG entry that follows the project's Keep a Changelog convention with accurate technical detail and proper PR attribution. The Growth Hacker's side-channel observation about cross-platform reliability as a release narrative theme is noted and will inform the next release post, but has no bearing on this PR. This is a clean approval. Required actions before mergeNone. Optional follow-ups
|
Documentation Updates - 2026-04-25
This PR updates the documentation based on features merged in the last 24 hours.
Features Documented
Changes Made
CHANGELOG.mdto add the missing### Fixedentry for PR Windows: _get_cache_dir flakes on tmpdir 8.3 short names (PathTraversalError) #886 (cherry-picked as fix(policy): resolve project_root before path-traversal check #895):discover_policynow resolvesproject_rootto its canonical long-name form before computing the cache path, preventing 8.3 short-name/long-name mismatches from triggering a falsePathTraversalErroron Windows.Merged PRs Referenced
fix(policy): resolve project_root before path-traversal checkNotes
The only code change merged in the last 24 hours was the cherry-pick of #886 as #895. The fix itself (a one-line
project_root = project_root.resolve()insrc/apm_cli/policy/discovery.py) was already present in the codebase, but the correspondingCHANGELOG.mdentry was missing from the[Unreleased]section. No other documentation files required changes as this is an internal bug fix with no user-facing API or command surface changes.