A -U0 hunk for an insertion before line 1 starts at line 0, so two PRs
inserting at the top of one file produced a link to the nonexistent
line L0. hunks now clamps the start to line 1 and derives the end from
the clamped start. A test covers the clash range and the rendered link.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_012zyXkUzTZGh3nBwNMtrLaW
`return ::Fail();` and `else ::Fail();` call the global wrapper, but
QUALIFIED took the keyword for a qualifier name and counted the export
as done. The name before `::` must now be an identifier that is not a
keyword, or a template's closing `>`.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_012zyXkUzTZGh3nBwNMtrLaW
The key was the source path relative to the common parent of the build
directory and the source. With a build directory beside the checkout
that parent is above the checkout, so the key carried the checkout
directory name and no changed file matched. The key is now the source
path relative to the repository root.
unwrap_self refused a container when a non-load segment with no file data
sat exactly at the end of a PT_LOAD, as an empty PT_TLS does in Sifu
(PPSA03001): "segment 6 vaddr 0x88cb7a0 is in no PT_LOAD". The eboot and
36 of its 37 bundled modules carry such a segment. A segment of size zero
now matches the load segment it ends, so it is placed at that segment's end.
Add tests for check_conventions.py's pull request checks: a filled-in
copy of the real template passes, the untouched template reports every
gap, unchecked items are named for any list marker, AI-assisted and
Depends on accept only their documented answers, template comments do
not count as answers, sections need content, and titles must follow
Conventional Commits.
With batch ids in the trace, the digest gains a Largest GPU batches
section: for the longest GPU batch slices, the GPU ranges inside each and
the CPU slices carrying the same batch id, inclusive. --json carries it as
largest_gpu_batches. Traces without batch ids are digested as before.
Add --name / --symbol CLI option to tools/nid_names.py to compute the Sony SHA-1 NID for given symbol names from the command line without requiring a full database download. Support positional chaining and --json output format. Add unit test coverage in tools/tests/test_nid_names.py.
On Windows, piped or redirected output uses the ANSI code page, so a
trace whose thread or slice names are not in cp1252 (a Japanese thread
name, for example) made the markdown digest stop with
UnicodeEncodeError after the work was done. stdout is now set to UTF-8
when the tool runs from the command line, as check_conventions.py does.
The --json output was not affected because json.dumps escapes non-ASCII.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_012zyXkUzTZGh3nBwNMtrLaW
CONTRIBUTING.md says unimplemented exports call
NotImplemented_nid_no_patch(__func__), and 362 calls in core/ do. A stub
generated for a NID with a known name passed the NID string instead,
so its log line showed tNn5WBkta60 rather than sceAmprCommandBufferNop
and the output had to be edited by hand. Named stubs now use __func__;
stubs with an unknown name keep the NID, the only identifier they have.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_012zyXkUzTZGh3nBwNMtrLaW
The pr-template check only accepted "Depends on: #N" or "none" on the same
line, so a checklist answering it as a bulleted list failed CI although
pr_overlap reads exactly that form (test_pr_overlap_dependencies covers
"Depends on:
- #2
- #3"). Allow one list marker before the first answer;
an empty answer is still reported.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_012zyXkUzTZGh3nBwNMtrLaW
Check read every technical debt file and every changed file with its
own git show, so each run started one process per file: 99 git
processes for a typical pull request, 311 for a 118-file range, and the
count grew with docs/dev/debt. Process start-up dominates on Windows.
Read the blobs the checks use in one git cat-file --batch process,
keyed by the object ids ls-tree already returns, and batch the files
duplicates() inspects the same way. Paths that are not cached still go
through git show, so failures are unchanged.