get_relative_path: shorten data_folder everywhere it appears - #86
Conversation
The relative-source-paths fix shortened the returned source_path per
newline segment, but artifacts that join multiple absolute paths with
other separators (', ', '; ', ' ') only had the first path shortened:
startswith matches the head of the concatenated string, strips one
prefix, and the rest stayed absolute. Spotted by James Habben.
Replace the startswith branch with a global replacement of the
data_folder prefix, so every embedded occurrence is shortened regardless
of separator. All previous behaviors are preserved (exact path, literal
passthrough, already-relative, no data_folder) and covered by tests.
Verification summaryVetted this change against current Behavior is correct. Ran the old vs. new
The six non-concatenation cases are byte-identical old vs. new; only the three genuinely-broken joined-path cases change, which is exactly the intent. Complements the existing per-newline shortening in the Mechanics: current Two notes for the merger:
Touches core |
Follow-up to the relative-source-paths fix, prompted by @JamesHabben's question about concatenated source paths.
The gap: the decorator shortens
source_pathper newline segment. Artifacts that join multiple absolute paths with other separators (', ','; ',' ') only had the first path shortened —startswithmatches the head of the concatenated string, strips one prefix, and the rest stayed absolute:The fix:
Context.get_relative_pathnow globally replaces the data_folder prefix wherever it appears, separator-agnostic — same spirit as the oldfile_found.replace(seeker.data_folder, '')idiom. Artifacts that already relativize before joining (Oops-style, ~24 in iLEAPP) are unaffected: relative segments pass through untouched.Verified: unit tests cover exact path, path == data_folder, literals, already-relative, None, comma/semicolon/space-joined absolute paths, newline decorator path, and no-data_folder passthrough. pylint 10.00/10, byte-compile, PluginLoader smoke test all pass.
Affected artifacts that this transparently fixes: iLEAPP box, home_depot, idstatuscache, sysdiagnose (and skg_archive if its parts are paths); ALEAPP the FCM family, siminfo, wifiConfigstore2, wifiProfiles. All of those modules still exist as of 2026-08-09.
Correction to the original description (2026-08-09)
The line about RLEAPP and VLEAPP and "the four frameworks" was written on 2026-07-06 and is now wrong on both counts. There are five cores, and since this PR was opened DLEAPP and RLEAPP have received the global-replace fix independently. So this no longer keeps the cores identical, it restores that: iLEAPP, ALEAPP and VLEAPP are the three still carrying the
startswithversion.Re-verified on current main, 2026-08-09
Calling
Context.get_relative_pathdirectly with_data_folderset:Comma, semicolon and newline joins all leak; a single path and already-relative input are unaffected. What leaks is the examiner's own filesystem path into a source-path column that reaches the report.
Co-Authored-By: Claude Opus 5 noreply@anthropic.com