Skip to content

Widen check_report_local_paths to the shapes a real-output scan found it missing - #119

Merged
abrignoni merged 1 commit into
mainfrom
fix/report-path-checker-third-audit
Sep 7, 2026
Merged

Widen check_report_local_paths to the shapes a real-output scan found it missing#119
abrignoni merged 1 commit into
mainfrom
fix/report-path-checker-third-audit

Conversation

@abrignoni

Copy link
Copy Markdown
Owner

Widens check_report_local_paths.py to the shapes a scan of real report output found it missing: 122 cells across four ALEAPP modules were publishing the tool's staging path while the check reported clean.

  • unique_files(context) is now a taint source.
  • or, and, conditional expressions, tuple unpacking, +=, := and subscript stores propagate the taint.
  • A module-level helper that returns a staged path, or records carrying one, is a source for its callers, tracked by tuple position so the other fields of a record stay untainted.

Precision is kept in step so correct code stays silent: a database row unpacked from a record is not a path, a comprehension is judged by its element, replace(x.data_folder, ...) is a reduction, a slice is a piece, and a name-hinted list that never reaches the report is not a row list. Zero findings on this core's merged tree; every previously caught shape still caught; fourteen new pinned tests, nine of which fail on the previous checker. Byte identical with the other four cores.

🤖 Generated with Claude Code

… it missing

A scan of report output found 122 cells across four ALEAPP modules publishing the
tool's staging path while this check reported clean. Three gaps, each pinned by a
test that fails on the previous checker and passes now:

- unique_files(context) was not a taint source, so a loop over it was untainted.
- or, and, and conditional expressions dropped the taint. Tuple unpacking in for
  and assignment, +=, := and subscript stores were not propagated either.
- Taint stopped at a function boundary. A module-level helper that returns a
  staged path, or records carrying one, is now a source for its callers, tracked
  by tuple position so a record's other fields stay untainted.

Precision kept in step: a database row unpacked from a record whose path position
is unknown is tracked but never reported, a comprehension is judged by its element,
replace(x.data_folder, ...) counts as a reduction, a slice of a path is a piece of
it, and a name-hinted list that never reaches the report is not a row list. Zero
findings on every core's merged tree; all previously caught shapes still caught.

Byte identical with the other four cores.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@abrignoni
abrignoni merged commit 9ec691c into main Sep 7, 2026
8 checks passed
@abrignoni
abrignoni deleted the fix/report-path-checker-third-audit branch September 7, 2026 03:44
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.

1 participant