A new select input of the Build workflow limits the Linux and Windows jobs
to the test executables and tests whose build inputs the merged pull
requests change. Push builds of main always build and run everything and
save the test graph of their tree; dispatched runs with select restore the
latest graph and fall back to a full run without one.
tools/select_tests.py dump walks the ninja graph of every test executable
(order-only dependencies included, so prx libraries loaded at run time are
in it) plus the header dependencies of its objects, the CMake files that
register each test, the source files its command line names, and its
fixtures. select picks the tests whose closure, registration or arguments
contain a changed file, and every test that is not a native executable of
the tree; files no build reads select the tests under their directory;
changes to the root build, cmake/, 3rdparty/, the workflow or the tool run
everything. Tests added since the graph was written always run. ctest gets
the selection as -I indices through the tool, which keeps the cmd shell on
Windows and stays under its command line limit.
Co-Authored-By: Claude <[email protected]>
Backslash names and MS-DOS attributes from an MS-DOS host, a .. escape written with backslashes, and a Unix-host name with a backslash.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
load_summary returned None for a missing file whether the path was the
default aps5-summary.jsonl next to the trace or one named with
--summary. A mistyped --summary path was therefore silently ignored:
the digest printed "no summary line found" and, without the window end,
dropped the last frame of the window. Report an explicitly named file
that does not exist as a usage error; the default stays optional.
The ci-gate check read a job's needs and if only two spaces deeper
than the job name. In a workflow indented by four spaces those keys
were never found, so a job gated with needs: eligibility and an if on
its outputs was reported as ungated. Read the keys at the indentation
of the job's first child instead.
The comment check looked at each added .py, .cmake and CMakeLists.txt
line on its own and treated any # outside a string closed on that line
as a comment. A # inside a Python triple-quoted string or a CMake
quoted or bracket argument that spans lines was reported, so adding an
#include to the C++ held in PatchSpirvTools.cmake's [=[ ]=] arguments
failed the check. An escaped \# in CMake was reported too, while the
inner lines of a multi-line #[[ ]] bracket comment were not.
Find comments over the whole file instead: Python COMMENT tokens from
tokenize, and a CMake scan that skips quoted and bracket arguments and
escapes and covers every line of a bracket comment. A Python file that
does not tokenize keeps the previous per-line check.
main() resolved the base before running --fetch, so an explicit base on a
remote that was never fetched failed with "no base ref found" and never
fetched. The fetch is now a local helper and runs first when --base is
given; the default base still resolves first, then fetches.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
changed() diffed the working tree against the tip of the base, so files
changed only on upstream main since the branch point were reported and
compiled. It now diffs against the merge base of the base and HEAD.
A regression test covers a base-only change.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Axis labels and grid lines were drawn only at data points, so a Monday
without a commit lost its label. The label loop now walks every calendar
day between the first and last point. A test covers a series that skips
several Mondays.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
main() rejected --nid values carrying the #lib#mod suffix that load_db and
import_audit already strip and USAGE.md documents. The suffix is now removed
from each --nid value before validation, so lookup and output use the bare NID.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
When a decrypted SELF contains a non-PT_LOAD segment (such as PT_TLS for pure TBSS) with p_filesz == 0 whose virtual address lies outside any PT_LOAD memory range, unwrap_self previously refused the container with 'segment N vaddr 0x... is in no PT_LOAD'.
Allow zero-size segments without a matching PT_LOAD host to be placed with source offset 0 and new offset 0, preserving valid ELF headers for titles like Unity/IL2CPP PS5 builds.
Also allow file-empty PT_LOAD segments with stale out-of-file source offsets to skip the segment-extent bounds check, preserving memory sizes, addresses and alignments without reading container metadata.
Co-authored-by: simonbronk <[email protected]>