diff --git a/docs/releases/6.5.0.contributions.json b/docs/releases/6.5.0.contributions.json index 62ead8178..b899689b6 100644 --- a/docs/releases/6.5.0.contributions.json +++ b/docs/releases/6.5.0.contributions.json @@ -9,9 +9,7 @@ "sha": "0ecf3f2438ec96a6b543942869808018e8d84452", "subject": "perf(mcp): keep Playwright and type-only imports off MCP startup (#1691)", "body": "perf(mcp): keep Playwright and type-only imports off MCP startup (#1691)\n\n* fix(build): emit no runtime imports for type-only bindings\n\nUnder verbatimModuleSyntax, an import whose specifiers all carry inline\n`type` modifiers compiles to `import {} from \"...\"`, a side-effect import\nthat still resolves and evaluates the module. 78 compiled modules carried\none, including `import {} from \"playwright-core\"` in the browser scenario\nsession, which loaded Playwright's module graph at MCP startup.\n\nUse top-level `import type` for these bindings and enable oxlint's\ntypescript/no-import-type-side-effects rule so the pattern cannot return.\n\nRefs #1685\n\nCo-Authored-By: Claude Opus 5.5 \n\n* perf(mcp): load Playwright when a scenario launches, not at startup\n\nThe browser scenario and Electron active providers are constructed before\nthe stdio server serves, and both bound Playwright's launchers at module\nload. Resolve `chromium` and `_electron` from playwright-core when a\ncapture opens instead, as the web module resolver already does.\n\nMCP startup now resolves 1,312 modules (4,902 resolutions) instead of\n1,598 (6,076) before reading the first request, and no longer loads\nplaywright-core. Provider construction, the tool catalog, and capability\ninventory are unchanged.\n\nA boundary test spawns the stdio server, initializes, lists tools, and\nasserts playwright-core and isomorphic-git were not resolved; the CLI\nprobe now exercises the real launch path to prove detection.\n\nCloses #1685\n\nCo-Authored-By: Claude Opus 5.5 \n\n---------\n\nCo-authored-by: Claude Opus 5.5 ", - "parents": [ - "a56f7bb668ab23fec8d33f7af353ac7ed2fe1895" - ], + "parents": ["a56f7bb668ab23fec8d33f7af353ac7ed2fe1895"], "authors": [ { "name": "Kaoru0822", @@ -30,17 +28,13 @@ } } ], - "pullRequests": [ - 1691 - ] + "pullRequests": [1691] }, { "sha": "57c5acac2e13fd7f0e3832bc147c7ceda8c314f2", "subject": "docs(setup): confirm published 6.4.0 client support", "body": "docs(setup): confirm published 6.4.0 client support\n\nVerify all 17 automatic client IDs through isolated npm package dry runs and confirm the OpenCode configuration directory override. Replace obsolete npm 6.3.0 warnings with the verified release checkpoint.\n\nFixes #1650.\n", - "parents": [ - "0ecf3f2438ec96a6b543942869808018e8d84452" - ], + "parents": ["0ecf3f2438ec96a6b543942869808018e8d84452"], "authors": [ { "name": "morluto", @@ -57,9 +51,7 @@ "sha": "4353089c670070ef918f88f7b131ed240feb83dd", "subject": "style(website): kbd, install-node width and nested collapsible indentation (#1699)", "body": "style(website): kbd, install-node width and nested collapsible indentation (#1699)\n\nStyle keys, cap the Get started Node.js help section at the lede\nwidth, and indent open .evidence-details content with a subtle left\nborder so nested collapsibles step in at any depth.\n\nCo-authored-by: Claude Opus 5.5 ", - "parents": [ - "57c5acac2e13fd7f0e3832bc147c7ceda8c314f2" - ], + "parents": ["57c5acac2e13fd7f0e3832bc147c7ceda8c314f2"], "authors": [ { "name": "Kaoru0822", @@ -78,17 +70,13 @@ } } ], - "pullRequests": [ - 1699 - ] + "pullRequests": [1699] }, { "sha": "13e03e94363a007353fcb5dfedec764de12fc927", "subject": "perf(evidence): fuse streamed JSON token handling (#1694)", "body": "perf(evidence): fuse streamed JSON token handling (#1694)\n\nFuse upstream JSON parsing, scalar packing, heap admission, and value assembly into synchronous token stages while retaining asynchronous file reads and existing capacity, cancellation, decoding, identity, and typed-error semantics. Declare stream-chain 4.2.6 directly.\n\nValidation: 30 focused tests; check:fast, Knip and formatting; actual Flameox paired full-content oracles; real Linux evidence replay and Windows source-built package/Ghidra snapshot recovery; final-head CI 31/31 success.\n\nRefs #1065, #1680.", - "parents": [ - "4353089c670070ef918f88f7b131ed240feb83dd" - ], + "parents": ["4353089c670070ef918f88f7b131ed240feb83dd"], "authors": [ { "name": "Ysopwnable", @@ -99,17 +87,13 @@ } } ], - "pullRequests": [ - 1694 - ] + "pullRequests": [1694] }, { "sha": "5f4c7ff6df0735d5a4461b5d0e6f2e466b888be0", "subject": "perf(tests): reuse stateless workflows and immutable fixtures", "body": "perf(tests): reuse stateless workflows and immutable fixtures\n", - "parents": [ - "13e03e94363a007353fcb5dfedec764de12fc927" - ], + "parents": ["13e03e94363a007353fcb5dfedec764de12fc927"], "authors": [ { "name": "morluto", @@ -126,9 +110,7 @@ "sha": "a82d14e4db4dca989ffa2e7dbe78fd43551da256", "subject": "perf(cli): defer command-specific modules until dispatch", "body": "perf(cli): defer command-specific modules until dispatch\n", - "parents": [ - "5f4c7ff6df0735d5a4461b5d0e6f2e466b888be0" - ], + "parents": ["5f4c7ff6df0735d5a4461b5d0e6f2e466b888be0"], "authors": [ { "name": "morluto", @@ -145,9 +127,7 @@ "sha": "d3088c3795f6c37cb3b6aec0bb0c371dd0640ee8", "subject": "perf(javascript): reuse collected callable identities for returns", "body": "perf(javascript): reuse collected callable identities for returns\n", - "parents": [ - "a82d14e4db4dca989ffa2e7dbe78fd43551da256" - ], + "parents": ["a82d14e4db4dca989ffa2e7dbe78fd43551da256"], "authors": [ { "name": "morluto", @@ -164,9 +144,7 @@ "sha": "693ed332b58d05192f55b8192d2c0c4bc4f4824a", "subject": "perf(tests): remove timed output and synchronize browser fixtures", "body": "perf(tests): remove timed output and synchronize browser fixtures\n", - "parents": [ - "d3088c3795f6c37cb3b6aec0bb0c371dd0640ee8" - ], + "parents": ["d3088c3795f6c37cb3b6aec0bb0c371dd0640ee8"], "authors": [ { "name": "morluto", @@ -183,9 +161,7 @@ "sha": "29ff887f6558cf00c0d6392889b890ed8a702a6f", "subject": "perf(domain): avoid duplicate readiness bundle validation", "body": "perf(domain): avoid duplicate readiness bundle validation\n\nAvoid reparsing the already validated Evidence bundle in readiness reports; retain semantic ID, graph and manifest authentication. Reuse canonical digest ownership and remove an unused verifier temporary directory.\n\nRefs #1065.", - "parents": [ - "693ed332b58d05192f55b8192d2c0c4bc4f4824a" - ], + "parents": ["693ed332b58d05192f55b8192d2c0c4bc4f4824a"], "authors": [ { "name": "Ysopwnable", @@ -196,17 +172,13 @@ } } ], - "pullRequests": [ - 1707 - ] + "pullRequests": [1707] }, { "sha": "01762b10c6a40370996e6dfa3a96ffcb27148f97", "subject": "perf(tests): consolidate TypeScript dialect producer checks", "body": "perf(tests): consolidate TypeScript dialect producer checks\n", - "parents": [ - "29ff887f6558cf00c0d6392889b890ed8a702a6f" - ], + "parents": ["29ff887f6558cf00c0d6392889b890ed8a702a6f"], "authors": [ { "name": "morluto", @@ -223,9 +195,7 @@ "sha": "8be7ad496c9a52a9986c4d3f6596de279b52df7e", "subject": "docs(website): highlight the setup guide on the homepage (#1714)", "body": "docs(website): highlight the setup guide on the homepage (#1714)\n\nShow the hero's Setup guide link as a secondary button and add a link\nto the step-by-step setup guide under the Set up REA panel.\n\nCo-authored-by: Claude Opus 5.5 ", - "parents": [ - "01762b10c6a40370996e6dfa3a96ffcb27148f97" - ], + "parents": ["01762b10c6a40370996e6dfa3a96ffcb27148f97"], "authors": [ { "name": "Kaoru0822", @@ -244,17 +214,13 @@ } } ], - "pullRequests": [ - 1714 - ] + "pullRequests": [1714] }, { "sha": "d9b4ae182d60dfd7fd5ba5bb539716413cbfdca6", "subject": "fix(native): retain failed command cleanup owners", "body": "fix(native): retain failed command cleanup owners\n\nRetain failed native command owners through both xcrun resolution and command capture. Retry all owned cleanup failures before new commands and after consumers join their launched work at close; preserve partial output and every resource diagnostic.\n\nRefs #740.", - "parents": [ - "8be7ad496c9a52a9986c4d3f6596de279b52df7e" - ], + "parents": ["8be7ad496c9a52a9986c4d3f6596de279b52df7e"], "authors": [ { "name": "Ysopwnable", @@ -265,17 +231,13 @@ } } ], - "pullRequests": [ - 1713 - ] + "pullRequests": [1713] }, { "sha": "91f6840c35e99e5f23612920d790a30d324ac115", "subject": "ci: parallelize native verification and share test artifacts", "body": "ci: parallelize native verification and share test artifacts\n", - "parents": [ - "d9b4ae182d60dfd7fd5ba5bb539716413cbfdca6" - ], + "parents": ["d9b4ae182d60dfd7fd5ba5bb539716413cbfdca6"], "authors": [ { "name": "morluto", @@ -292,9 +254,7 @@ "sha": "966dc3acde2880a0f94b2658e2a02180d505cafa", "subject": "perf(evidence): reuse authenticated file snapshots during session import (#1721)", "body": "perf(evidence): reuse authenticated file snapshots during session import (#1721)\n\nSeal file-backed MCP imports at the session boundary while preserving mutable\nordinary file reads. Validate internally constructed ledger candidates directly\nwith the existing immutable bundle constructor.\n\nAssisted-by: Suika (gensokyo-skills:suika-scatter-gather-planning)", - "parents": [ - "91f6840c35e99e5f23612920d790a30d324ac115" - ], + "parents": ["91f6840c35e99e5f23612920d790a30d324ac115"], "authors": [ { "name": "Ysopwnable", @@ -305,17 +265,13 @@ } } ], - "pullRequests": [ - 1721 - ] + "pullRequests": [1721] }, { "sha": "3f4ea3218929baba0c30c2cb7eb7e7a829a1fc21", "subject": "ci: reduce macOS runner contention", "body": "ci: reduce macOS runner contention\n", - "parents": [ - "966dc3acde2880a0f94b2658e2a02180d505cafa" - ], + "parents": ["966dc3acde2880a0f94b2658e2a02180d505cafa"], "authors": [ { "name": "morluto", @@ -332,9 +288,7 @@ "sha": "092de8f4b336b537579bd48d7d30135b7114371d", "subject": "perf(snapshot): restore large legacy caches within live memory bounds", "body": "perf(snapshot): restore large legacy caches within live memory bounds\n\nStream legacy snapshot cache rows independently, authenticate complete Evidence once, and restore exact immutable payloads without assembling duplicate full graphs. Preserve the existing file format, provenance, resource admission, cancellation and cache export isolation.\n\nVerified through real Linux SDK MCP import of the original 83 MB Ghidra snapshot and full 41 MB bundle hash, actual Windows CLI/MCP PE recovery and the installed Windows large-file decoder boundary, focused tests and static checks.\n\nFixes #1680. Refs #1065.", - "parents": [ - "3f4ea3218929baba0c30c2cb7eb7e7a829a1fc21" - ], + "parents": ["3f4ea3218929baba0c30c2cb7eb7e7a829a1fc21"], "authors": [ { "name": "Ysopwnable", @@ -345,17 +299,13 @@ } } ], - "pullRequests": [ - 1716 - ] + "pullRequests": [1716] }, { "sha": "e36c82becdd613787bcc59903f8b5fe14eb2f105", "subject": "fix(artifacts): preserve emitted ZIP entry identity", "body": "fix(artifacts): preserve emitted ZIP entry identity\n\nReject duplicate ZIP filenames before an emitted entry source lookup can be overwritten. Preserve valid repeated enumeration, case-distinct paths and typed inventory path failures.\n\nCloses #1725. Related: #1480.", - "parents": [ - "092de8f4b336b537579bd48d7d30135b7114371d" - ], + "parents": ["092de8f4b336b537579bd48d7d30135b7114371d"], "authors": [ { "name": "Ysopwnable", @@ -366,17 +316,13 @@ } } ], - "pullRequests": [ - 1726 - ] + "pullRequests": [1726] }, { "sha": "844fa52772c1533f7358a71a764da780503775a3", "subject": "fix(evaluation): authenticate delivered Evidence citations", "body": "fix(evaluation): authenticate delivered Evidence citations\n\nAuthenticate completed successful REA Evidence records for citation accounting and shared fixture grading. Preserve genuine structured and complete text-only delivery, including authenticated inventory substeps.\n\nCloses #1728.", - "parents": [ - "e36c82becdd613787bcc59903f8b5fe14eb2f105" - ], + "parents": ["e36c82becdd613787bcc59903f8b5fe14eb2f105"], "authors": [ { "name": "Ysopwnable", @@ -387,17 +333,13 @@ } } ], - "pullRequests": [ - 1734 - ] + "pullRequests": [1734] }, { "sha": "21650455a9c90a26e725c3505a3c17054cc4516c", "subject": "fix(evidence): normalize unknown revisions and preserve mutation intent (#1733)", "body": "fix(evidence): normalize unknown revisions and preserve mutation intent (#1733)\n\nNormalize generated revision fields before hashing and retain complete typed\ncreation/update requests in a shared mutation Evidence producer. Keep imported\nrevision authentication and canonical persisted identity/digests unchanged.\n\nFixes #1723\nFixes #1724\n\nAssisted-by: Suika (gensokyo-skills:suika-scatter-gather-planning)", - "parents": [ - "844fa52772c1533f7358a71a764da780503775a3" - ], + "parents": ["844fa52772c1533f7358a71a764da780503775a3"], "authors": [ { "name": "Ysopwnable", @@ -408,17 +350,13 @@ } } ], - "pullRequests": [ - 1733 - ] + "pullRequests": [1733] }, { "sha": "81dc64e3cd13dc8bfcac8898386717ece9721da1", "subject": "fix(managed): distinguish .NET Standard targets from runtimes", "body": "fix(managed): distinguish .NET Standard targets from runtimes\n\nPreserve .NET Standard as an API compatibility target while leaving the runtime family unknown unless independent markers identify it. Keep real DLL metadata and existing runtime-marker precedence intact.\n\nCloses #1736.\n\nCo-authored-by: AC ", - "parents": [ - "21650455a9c90a26e725c3505a3c17054cc4516c" - ], + "parents": ["21650455a9c90a26e725c3505a3c17054cc4516c"], "authors": [ { "name": "Alex", @@ -437,17 +375,13 @@ } } ], - "pullRequests": [ - 1743 - ] + "pullRequests": [1743] }, { "sha": "062723e44e937c1e1df865e9ae16184b41e70ae8", "subject": "fix(browser): retain effective source-map response urls", "body": "fix(browser): retain effective source-map response urls\n\nPreserve source-map response identity and legacy omission, admit identities before body reading, and retain completed results and cleanup causes within the existing output budget. Price fixed envelopes once.\n\nCloses #1729.\nCloses #1738.\n\nCo-authored-by: allisaid ", - "parents": [ - "81dc64e3cd13dc8bfcac8898386717ece9721da1" - ], + "parents": ["81dc64e3cd13dc8bfcac8898386717ece9721da1"], "authors": [ { "name": "clyde", @@ -458,17 +392,13 @@ } } ], - "pullRequests": [ - 1742 - ] + "pullRequests": [1742] }, { "sha": "6ff4d4a0500e5f9fb7601e1c5ae5dbbd85796d91", "subject": "docs: celebrate 80,000 GitHub stars 🎉 (#1752)", "body": "docs: celebrate 80,000 GitHub stars 🎉 (#1752)\n\nCo-authored-by: Claude Opus 5.5 ", - "parents": [ - "062723e44e937c1e1df865e9ae16184b41e70ae8" - ], + "parents": ["062723e44e937c1e1df865e9ae16184b41e70ae8"], "authors": [ { "name": "Kaoru0822", @@ -487,17 +417,13 @@ } } ], - "pullRequests": [ - 1752 - ] + "pullRequests": [1752] }, { "sha": "953a0ce5bd3a8b44051eb9c16d8c9a20cad29e7c", "subject": "docs(i18n): celebrate 80,000 GitHub stars in translated READMEs (#1758)", "body": "docs(i18n): celebrate 80,000 GitHub stars in translated READMEs (#1758)\n\nCo-authored-by: Claude Opus 5.5 ", - "parents": [ - "6ff4d4a0500e5f9fb7601e1c5ae5dbbd85796d91" - ], + "parents": ["6ff4d4a0500e5f9fb7601e1c5ae5dbbd85796d91"], "authors": [ { "name": "Kaoru0822", @@ -516,17 +442,13 @@ } } ], - "pullRequests": [ - 1758 - ] + "pullRequests": [1758] }, { "sha": "e5699d23b173bbd0b68e3ab177d0b7583d6df345", "subject": "fix(mcp): cancel evidence imports before session mutation", "body": "fix(mcp): cancel evidence imports before session mutation\n\nPropagate request cancellation through immutable JSON bundle reading and\ncheck it before committing session state. Preserve failed-close ownership.\n\nFixes #1746\n\nAssisted-by: Suika (gensokyo-skills:suika-scatter-gather-planning)", - "parents": [ - "953a0ce5bd3a8b44051eb9c16d8c9a20cad29e7c" - ], + "parents": ["953a0ce5bd3a8b44051eb9c16d8c9a20cad29e7c"], "authors": [ { "name": "Ysopwnable", @@ -537,17 +459,13 @@ } } ], - "pullRequests": [ - 1755 - ] + "pullRequests": [1755] }, { "sha": "857a1b7b04da4488db2b224c270ad78998c6b6c7", "subject": "fix(process): aggregate incomplete trace-spec diagnostics", "body": "fix(process): aggregate incomplete trace-spec diagnostics\n\nSummarize incomplete trace-specification pair declarations with exact counts and the first undeclared pair. Preserve complete pair coverage, successful Evidence and independent validation errors; remove temporary pair-scan copies and sorting.\n\nCloses #1753.", - "parents": [ - "e5699d23b173bbd0b68e3ab177d0b7583d6df345" - ], + "parents": ["e5699d23b173bbd0b68e3ab177d0b7583d6df345"], "authors": [ { "name": "Ysopwnable", @@ -558,17 +476,13 @@ } } ], - "pullRequests": [ - 1756 - ] + "pullRequests": [1756] }, { "sha": "58e91e14bd5659dd57acbb91e56b5fc6a6963c80", "subject": "fix(setup): preserve unrelated Hermes YAML line formatting", "body": "fix(setup): preserve unrelated Hermes YAML line formatting\n\nPreserve unrelated long YAML scalars when editing an existing Hermes configuration.\n\nCo-authored-by: Zayd ", - "parents": [ - "857a1b7b04da4488db2b224c270ad78998c6b6c7" - ], + "parents": ["857a1b7b04da4488db2b224c270ad78998c6b6c7"], "authors": [ { "name": "zayd / cold", @@ -584,17 +498,13 @@ "user": null } ], - "pullRequests": [ - 1754 - ] + "pullRequests": [1754] }, { "sha": "713db4dc2665c964707cb0e937e8794cbe73534e", "subject": "fix(process): align capture Evidence provider admission", "body": "fix(process): align capture Evidence provider admission\n\nUse the canonical current and supported legacy process-provider rule for authenticated capture Evidence at both CLI and MCP admission boundaries. Preserve successful Evidence and distinguish provider input errors from digest authentication failures.\n\nCloses #1757.", - "parents": [ - "58e91e14bd5659dd57acbb91e56b5fc6a6963c80" - ], + "parents": ["58e91e14bd5659dd57acbb91e56b5fc6a6963c80"], "authors": [ { "name": "Ysopwnable", @@ -605,17 +515,13 @@ } } ], - "pullRequests": [ - 1760 - ] + "pullRequests": [1760] }, { "sha": "6d5d71fab5e135c687f7aa2f797da19b4c2a1c1e", "subject": "fix(javascript): index repeated graph observations before final sorting", "body": "fix(javascript): index repeated graph observations before final sorting\n\nRetain stable live nodes and observation arrays while avoiding quadratic\ncollection rebuilds. Preserve duplicate handling and canonical output.\n\nFixes #1748\n\nAssisted-by: Suika (gensokyo-skills:suika-scatter-gather-planning)", - "parents": [ - "713db4dc2665c964707cb0e937e8794cbe73534e" - ], + "parents": ["713db4dc2665c964707cb0e937e8794cbe73534e"], "authors": [ { "name": "Ysopwnable", @@ -626,17 +532,13 @@ } } ], - "pullRequests": [ - 1759 - ] + "pullRequests": [1759] }, { "sha": "cf692072b56903b60426e4b301b3c48fd31ee0fd", "subject": "fix(ida): declare GUI navigation for attached legacy analysis (#1764)", "body": "fix(ida): declare GUI navigation for attached legacy analysis (#1764)\n\nAttached IDA mode always uses the legacy 1.4 producer, whose\ndisassemble_function jumps to the function and whose decompile_function\nopens or reuses a pseudocode view whenever an IDA window is active.\nSession discovery still advertised may_show_ui: false for every\noperation.\n\nDeclare the UI effect for the attached operations that reach those\ntools: pseudocode, assembly, raw function instructions and the function\ndossier. Headless operations and the other attached operations keep\nfalse. A conformance check now compares each declaration with the\nupstream tools the operation actually calls.\n\nFixes #1712\n\nCo-authored-by: Claude Opus 5.5 ", - "parents": [ - "6d5d71fab5e135c687f7aa2f797da19b4c2a1c1e" - ], + "parents": ["6d5d71fab5e135c687f7aa2f797da19b4c2a1c1e"], "authors": [ { "name": "Kaoru0822", @@ -655,17 +557,13 @@ } } ], - "pullRequests": [ - 1764 - ] + "pullRequests": [1764] }, { "sha": "e8528cedcdfb1ca1d769304afdc353936e8e0d70", "subject": "fix(hopper): let failed one-shot commands exit while retaining a lease (#1763)", "body": "fix(hopper): let failed one-shot commands exit while retaining a lease (#1763)\n\n* fix(hopper): let failed one-shot commands exit while retaining a lease\n\nA Hopper target lease retained after unconfirmed cleanup kept its\nlistening socket referenced, so a one-shot CLI emitted its final\ncleanup_incomplete result but never exited, and its live lease rejected\nevery retry for the same target as already open.\n\nUnreference the lease listener. A live MCP process still holds the\nlease for as long as it runs; a completed CLI exits with status 1, and\nthe stale socket it leaves is recovered by the next acquirer.\n\nFixes #1751\n\nCo-Authored-By: Claude Opus 5.5 \n\n* test(hopper): remove only this test's stale lease sockets\n\nCo-Authored-By: Claude Opus 5.5 \n\n---------\n\nCo-authored-by: Claude Opus 5.5 ", - "parents": [ - "cf692072b56903b60426e4b301b3c48fd31ee0fd" - ], + "parents": ["cf692072b56903b60426e4b301b3c48fd31ee0fd"], "authors": [ { "name": "Kaoru0822", @@ -684,17 +582,13 @@ } } ], - "pullRequests": [ - 1763 - ] + "pullRequests": [1763] }, { "sha": "40b37aeee10e89d85ee8b7747cbdcd3ad1a34db4", "subject": "ci: balance test shards and reuse package download caches", "body": "ci: balance test shards and reuse package download caches\n", - "parents": [ - "e8528cedcdfb1ca1d769304afdc353936e8e0d70" - ], + "parents": ["e8528cedcdfb1ca1d769304afdc353936e8e0d70"], "authors": [ { "name": "morluto", @@ -711,9 +605,7 @@ "sha": "4daea941bfeeb426886f2d048aed7f3cb2dbf97b", "subject": "fix(cli): retry retained browser scenario cleanup", "body": "fix(cli): retry retained browser scenario cleanup\n\nRetry retained browser scenario cleanup before the one-shot CLI exits. Preserve primary failures, partial observations and completed Evidence when shutdown fails.\n\nCloses #1771.", - "parents": [ - "40b37aeee10e89d85ee8b7747cbdcd3ad1a34db4" - ], + "parents": ["40b37aeee10e89d85ee8b7747cbdcd3ad1a34db4"], "authors": [ { "name": "Ysopwnable", @@ -724,17 +616,13 @@ } } ], - "pullRequests": [ - 1773 - ] + "pullRequests": [1773] }, { "sha": "914ba833ded5f8604345de4e4f6d306de0a38c4e", "subject": "fix(javascript): report JSON status for imported package manifests", "body": "fix(javascript): report JSON status for imported package manifests\n\nUse the existing JSON-text status checker for explicit package.json imports while retaining separate package-metadata validity. Preserve malformed/unavailable status and partial facts after cancellation.\n\nCo-authored-by: Immanuel Tikhonov <122638311+immanuwell@users.noreply.github.com>", - "parents": [ - "4daea941bfeeb426886f2d048aed7f3cb2dbf97b" - ], + "parents": ["4daea941bfeeb426886f2d048aed7f3cb2dbf97b"], "authors": [ { "name": "Immanuel Tikhonov", @@ -745,17 +633,13 @@ } } ], - "pullRequests": [ - 1740 - ] + "pullRequests": [1740] }, { "sha": "ae95e68ba5fa95cf2ec0453b50ffd217cabf5359", "subject": "fix(apktool): run Windows batch launchers through cmd.exe (#1777)", "body": "fix(apktool): run Windows batch launchers through cmd.exe (#1777)\n\nOn Windows, Node refuses to spawn .bat and .cmd files without a shell\n(CVE-2024-27980), so REA_APKTOOL_COMMAND pointing at Chocolatey's\napktool.bat or a java -jar wrapper failed its version probe with EINVAL,\nreported as \"did not report a usable version\".\n\nMove Ghidra's conservative cmd.exe invocation (no AutoRun, no delayed\nexpansion, every token quoted, interpreter metacharacters rejected) into\nsrc/process/WindowsBatchCommand.ts. Ghidra keeps its error type, wording\nand length limit. apktool now uses it for both the version probe and the\ndecode run when the launcher is a batch file on Windows. A launcher that\ncmd.exe would reinterpret reports launcher_unsupported (not_configured)\nwith remediation instead of version_unresolved.\n\nFixes #1774\n\nCo-authored-by: Claude Opus 5.5 ", - "parents": [ - "914ba833ded5f8604345de4e4f6d306de0a38c4e" - ], + "parents": ["914ba833ded5f8604345de4e4f6d306de0a38c4e"], "authors": [ { "name": "Kaoru0822", @@ -774,17 +658,13 @@ } } ], - "pullRequests": [ - 1777 - ] + "pullRequests": [1777] }, { "sha": "a4dd4e8e8700ce350e1a0c612ebd61b91ca5e585", "subject": "perf(cli): defer command-specific analysis implementations", "body": "perf(cli): defer command-specific analysis implementations\n\nLoad application and Electron workflow implementations only when their commands execute. Keep command schemas and catalog registration eager, and extend the startup import boundary to cover the deferred services.\n", - "parents": [ - "ae95e68ba5fa95cf2ec0453b50ffd217cabf5359" - ], + "parents": ["ae95e68ba5fa95cf2ec0453b50ffd217cabf5359"], "authors": [ { "name": "morluto", @@ -801,9 +681,7 @@ "sha": "ff57b75e226028767b86aa3d4271c2c2f56342db", "subject": "test: bound CLI validation subprocess concurrency", "body": "test: bound CLI validation subprocess concurrency\n\nRun the 22 malformed process scenarios in pairs instead of starting 22 compiled CLI runtimes simultaneously. Retain every CLI/MCP error assertion and the no-launch check, and document nested subprocess limits.\n", - "parents": [ - "a4dd4e8e8700ce350e1a0c612ebd61b91ca5e585" - ], + "parents": ["a4dd4e8e8700ce350e1a0c612ebd61b91ca5e585"], "authors": [ { "name": "morluto", @@ -820,9 +698,7 @@ "sha": "a2d3338e90a3a11385e2f63bedaa9750612f8719", "subject": "feat(website): add multilingual editions and translation workflow", "body": "feat(website): add multilingual editions and translation workflow\n", - "parents": [ - "ff57b75e226028767b86aa3d4271c2c2f56342db" - ], + "parents": ["ff57b75e226028767b86aa3d4271c2c2f56342db"], "authors": [ { "name": "N0zoM1z0", @@ -833,17 +709,13 @@ } } ], - "pullRequests": [ - 1779 - ] + "pullRequests": [1779] }, { "sha": "a956275d8d0249c16dad282a3fb5d7da48fb2d6f", "subject": "fix(website): clarify translated terminology and RTL flows", "body": "fix(website): clarify translated terminology and RTL flows\n", - "parents": [ - "a2d3338e90a3a11385e2f63bedaa9750612f8719" - ], + "parents": ["a2d3338e90a3a11385e2f63bedaa9750612f8719"], "authors": [ { "name": "N0zoM1z0", @@ -854,17 +726,13 @@ } } ], - "pullRequests": [ - 1779 - ] + "pullRequests": [1779] }, { "sha": "d981a58d7f5344c3ab2117b6384aece4d1c35480", "subject": "fix(website): incorporate multilingual contributor refinements", "body": "fix(website): incorporate multilingual contributor refinements\n\nAdapt CJK font stacks, original copy-button label restoration, accessibility wording and Traditional Chinese onboarding improvements from PR #1737. Protect the complete APK filename and correct setup terminology.\n\nCo-authored-by: Kaoru0822 <208281322+kaoru0822-kitauji@users.noreply.github.com>\n", - "parents": [ - "a956275d8d0249c16dad282a3fb5d7da48fb2d6f" - ], + "parents": ["a956275d8d0249c16dad282a3fb5d7da48fb2d6f"], "authors": [ { "name": "N0zoM1z0", @@ -883,17 +751,13 @@ } } ], - "pullRequests": [ - 1779 - ] + "pullRequests": [1779] }, { "sha": "c9136eef716aa8d32e0301189fbf5a511ff62d5d", "subject": "fix(docs): validate translated README website destinations", "body": "fix(docs): validate translated README website destinations\n\nUse the website language inventory when comparing README links. Accept the matching localized page while retaining checks for wrong locales, changed destinations, fragments and query parameters.\n", - "parents": [ - "d981a58d7f5344c3ab2117b6384aece4d1c35480" - ], + "parents": ["d981a58d7f5344c3ab2117b6384aece4d1c35480"], "authors": [ { "name": "N0zoM1z0", @@ -904,17 +768,13 @@ } } ], - "pullRequests": [ - 1779 - ] + "pullRequests": [1779] }, { "sha": "6e38529333a7a0704690a087c7cb054fb7385d25", "subject": "test(docs): type README drift scenarios as fixed pairs", "body": "test(docs): type README drift scenarios as fixed pairs\n", - "parents": [ - "c9136eef716aa8d32e0301189fbf5a511ff62d5d" - ], + "parents": ["c9136eef716aa8d32e0301189fbf5a511ff62d5d"], "authors": [ { "name": "N0zoM1z0", @@ -925,17 +785,13 @@ } } ], - "pullRequests": [ - 1779 - ] + "pullRequests": [1779] }, { "sha": "0bdc7a40ac171a05971b287f2aab0376e2f14358", "subject": "fix(ida): wait out a transient busy worker health in headless sessions (#1778)", "body": "fix(ida): wait out a transient busy worker health in headless sessions (#1778)\n\n* test(ida): expect a transient busy worker health to be waited out\n\n* fix(ida): wait out a transient busy worker health before reading identity\n\n* docs(ida): record the verified macOS arm64 headless workflow and the busy-health wait\n\n* test(ida): pin the busy wait deadline, cause and reported tool, and assert clean release\n\n* fix(ida): repeat only a tool-name-shaped busy tool and keep the wait in its own module\n\n* test(ida): drive the busy wait with a virtual clock and pin its bound and cancellation\n\n* fix(ida): stop the busy wait at its deadline without another read and honour a late abort\n\n* docs(ida): state when the busy wait times out, cancels or reports an unknown tool", - "parents": [ - "6e38529333a7a0704690a087c7cb054fb7385d25" - ], + "parents": ["6e38529333a7a0704690a087c7cb054fb7385d25"], "authors": [ { "name": "Mykola Dementiev", @@ -946,17 +802,13 @@ } } ], - "pullRequests": [ - 1778 - ] + "pullRequests": [1778] }, { "sha": "aaeadf2d4c4e3f0d0581af2dca33c5bfdc2bcb0e", "subject": "fix(cli): await browser scenario cleanup on interrupts", "body": "fix(cli): await browser scenario cleanup on interrupts\n\nTranslate browser scenario CLI interrupts into cancellation and await owned provider cleanup. Preserve authenticated observations and cancelled steps with conventional exit codes 130/143.\n\nRefs #1771.", - "parents": [ - "0bdc7a40ac171a05971b287f2aab0376e2f14358" - ], + "parents": ["0bdc7a40ac171a05971b287f2aab0376e2f14358"], "authors": [ { "name": "Ysopwnable", @@ -967,17 +819,13 @@ } } ], - "pullRequests": [ - 1780 - ] + "pullRequests": [1780] }, { "sha": "42951bbbbe8d98ebde1783450d130fdddb5ba889", "subject": "test: reuse identical JavaScript analysis fixtures", "body": "test: reuse identical JavaScript analysis fixtures\n", - "parents": [ - "aaeadf2d4c4e3f0d0581af2dca33c5bfdc2bcb0e" - ], + "parents": ["aaeadf2d4c4e3f0d0581af2dca33c5bfdc2bcb0e"], "authors": [ { "name": "morluto", @@ -994,9 +842,7 @@ "sha": "85ccef34de1cddcf71037ccea93acdf709f94965", "subject": "test: reuse validators for identical MCP schemas", "body": "test: reuse validators for identical MCP schemas\n", - "parents": [ - "42951bbbbe8d98ebde1783450d130fdddb5ba889" - ], + "parents": ["42951bbbbe8d98ebde1783450d130fdddb5ba889"], "authors": [ { "name": "morluto", @@ -1013,9 +859,7 @@ "sha": "817aef406861c2ce3f87ad3c912ea6c235bcdf12", "subject": "fix(apple): validate build-version tool records within cmdsize (#1784)", "body": "fix(apple): validate build-version tool records within cmdsize (#1784)", - "parents": [ - "85ccef34de1cddcf71037ccea93acdf709f94965" - ], + "parents": ["85ccef34de1cddcf71037ccea93acdf709f94965"], "authors": [ { "name": "Ysopwnable", @@ -1026,17 +870,13 @@ } } ], - "pullRequests": [ - 1784 - ] + "pullRequests": [1784] }, { "sha": "e365f3715f0e9856218f0b2878bfe2144c821d9a", "subject": "fix(javascript): bound self-alias mutation paths that never prune", "body": "fix(javascript): bound self-alias mutation paths that never prune\n\nDetect unprunable repeated self-alias prefixes at the JavaScript mutation owner, record conservative escape effects, and reuse settled repeated-prefix checks. Preserve finite-path precision and deeper-write uncertainty.\n\nRefs #1665.\n\nCo-authored-by: Martin Klein <36695017+flitzrrr@users.noreply.github.com>", - "parents": [ - "817aef406861c2ce3f87ad3c912ea6c235bcdf12" - ], + "parents": ["817aef406861c2ce3f87ad3c912ea6c235bcdf12"], "authors": [ { "name": "Martin Klein", @@ -1047,17 +887,13 @@ } } ], - "pullRequests": [ - 1767 - ] + "pullRequests": [1767] }, { "sha": "e4027e4afccc6316cd9cfc27c7b0427e66ceb91f", "subject": "feat(update): update Bun global installations (#1735)", "body": "feat(update): update Bun global installations (#1735)\n\n* feat(update): update Bun global installations\n\n`rea update` only recognized npm global installations and looked up\nreleases with `npm view`, so a `bun add --global rea-agents` install on a\nmachine without npm failed with `spawn npm ENOENT`.\n\nDetect the running package inside Bun's global directory\n(BUN_INSTALL_GLOBAL_DIR, $BUN_INSTALL/install/global,\n$XDG_CACHE_HOME/.bun/install/global, ~/.bun/install/global), resolve the\nlatest release with `bun info`, install with\n`bun add --global --ignore-scripts`, then verify the installed entry point\nand plan integration maintenance exactly as for npm.\n\nBun commands run inside the owning global directory with\nBUN_INSTALL_GLOBAL_DIR pinned, so the caller's current project is never\nselected. A global directory without package.json is not treated as an\nowned installation: Bun then installs into the nearest ancestor project.\nnpm installations keep their existing commands and messages.\n\n* fix(update): gate Bun self-updates on supported CLI versions\n\n---------\n\nCo-authored-by: morluto <76467478+morluto@users.noreply.github.com>", - "parents": [ - "e365f3715f0e9856218f0b2878bfe2144c821d9a" - ], + "parents": ["e365f3715f0e9856218f0b2878bfe2144c821d9a"], "authors": [ { "name": "xeropresence", @@ -1076,17 +912,13 @@ } } ], - "pullRequests": [ - 1735 - ] + "pullRequests": [1735] }, { "sha": "6bcfeb0e55a6fcc3ed586e5744f2aa1c270cac31", "subject": "test(cli): cache subprocess compilation within each worker", "body": "test(cli): cache subprocess compilation within each worker\n", - "parents": [ - "e4027e4afccc6316cd9cfc27c7b0427e66ceb91f" - ], + "parents": ["e4027e4afccc6316cd9cfc27c7b0427e66ceb91f"], "authors": [ { "name": "morluto", @@ -1103,9 +935,7 @@ "sha": "262efe6c54d8f179e9f9515d96025871ae45806a", "subject": "test(native): skip the DMG EACCES diagnostic as root (#1584)", "body": "test(native): skip the DMG EACCES diagnostic as root (#1584)", - "parents": [ - "6bcfeb0e55a6fcc3ed586e5744f2aa1c270cac31" - ], + "parents": ["6bcfeb0e55a6fcc3ed586e5744f2aa1c270cac31"], "authors": [ { "name": "Aravind Rao", @@ -1116,17 +946,13 @@ } } ], - "pullRequests": [ - 1584 - ] + "pullRequests": [1584] }, { "sha": "41544fb952aef84fcf6ff5d9a5284cf2b2985053", "subject": "perf(javascript): skip the repeated-prefix scan on first capture visits (#1789)", "body": "perf(javascript): skip the repeated-prefix scan on first capture visits (#1789)\n\nReview follow-up. Only a capture already on the alias chain can repeat a prefix, so a first visit no longer slices and serializes every suffix of its path.", - "parents": [ - "262efe6c54d8f179e9f9515d96025871ae45806a" - ], + "parents": ["262efe6c54d8f179e9f9515d96025871ae45806a"], "authors": [ { "name": "Martin Klein", @@ -1137,17 +963,13 @@ } } ], - "pullRequests": [ - 1789 - ] + "pullRequests": [1789] }, { "sha": "e90acaea674f5f7f9f17ea472104afdc1422ada6", "subject": "fix(update): resolve Bun global directories before changing cwd", "body": "fix(update): resolve Bun global directories before changing cwd\n", - "parents": [ - "41544fb952aef84fcf6ff5d9a5284cf2b2985053" - ], + "parents": ["41544fb952aef84fcf6ff5d9a5284cf2b2985053"], "authors": [ { "name": "morluto", @@ -1164,9 +986,7 @@ "sha": "044c0a92d5c86faa9965669680935d4f552977b1", "subject": "test: reuse application analysis across comparison directions", "body": "test: reuse application analysis across comparison directions\n\nReuse immutable source graphs for both export comparison orientations and obtain rest-argument seeds from the existing public CLI Evidence. Retain all direction-specific assertions while removing nine repeated application analyses.\n\nValidation: 75 focused tests; covered locations and hit status unchanged across all 1137 source files in controlled before/after coverage runs. Comparison file execution fell from 19.2s to 15.3s locally. Static and generated-document checks passed.\n", - "parents": [ - "e90acaea674f5f7f9f17ea472104afdc1422ada6" - ], + "parents": ["e90acaea674f5f7f9f17ea472104afdc1422ada6"], "authors": [ { "name": "morluto", @@ -1183,9 +1003,7 @@ "sha": "8fa11751eaab94eaa5b8de8c1ecd143ef0066cd6", "subject": "ci: reuse portable build cache in native package jobs", "body": "ci: reuse portable build cache in native package jobs\n\nTransfer the build job Turbo cache to the four native package runners within the same workflow. Keep the normal build, prepack, pack, fresh installation, updater, and Inspector verification commands. Native artifacts and dependencies remain host-local.\n\nValidation: actionlint 1.7.7, check:ci and docs:check passed. A fresh independent checkout restored 1124 byte-identical files from 1.64 MB of compile/skills cache in 163 ms; a source change invalidated compile and skills entries. Full package and real Node Inspector verifiers passed on macOS arm64. Cross-platform CI timing remains to be measured.\n", - "parents": [ - "044c0a92d5c86faa9965669680935d4f552977b1" - ], + "parents": ["044c0a92d5c86faa9965669680935d4f552977b1"], "authors": [ { "name": "morluto", @@ -1202,9 +1020,7 @@ "sha": "a077e81becd430708e8e273484c503108c5613db", "subject": "chore(scripts): merge duplicate node:fs import in scan-todos (#1790)", "body": "chore(scripts): merge duplicate node:fs import in scan-todos (#1790)\n\nUpdate scan-todos.mjs", - "parents": [ - "8fa11751eaab94eaa5b8de8c1ecd143ef0066cd6" - ], + "parents": ["8fa11751eaab94eaa5b8de8c1ecd143ef0066cd6"], "authors": [ { "name": "Nik1313132", @@ -1215,17 +1031,13 @@ } } ], - "pullRequests": [ - 1790 - ] + "pullRequests": [1790] }, { "sha": "ce845ba428e9b23d6b74eae1e25e17c37532adac", "subject": "fix(javascript): preserve and resolve complete source-map URLs (#1788)", "body": "fix(javascript): preserve and resolve complete source-map URLs (#1788)\n\nKeep line-comment URL declarations intact and percent-decode local URL paths\nonce, preserving raw Evidence identity and artifact-root confinement.\n\nFixes #1781. Fixes #1782.\n\nAssisted-by: Suika (gensokyo-skills:suika-scatter-gather-planning)", - "parents": [ - "a077e81becd430708e8e273484c503108c5613db" - ], + "parents": ["a077e81becd430708e8e273484c503108c5613db"], "authors": [ { "name": "Ysopwnable", @@ -1236,17 +1048,13 @@ } } ], - "pullRequests": [ - 1788 - ] + "pullRequests": [1788] }, { "sha": "12c416005f9d2abf438f4df4447972424d781b65", "subject": "feat(javascript): recover code-split bundles from multiple inputs (#1686)", "body": "feat(javascript): recover code-split bundles from multiple inputs (#1686)\n\n* feat(javascript): recover code-split bundles from multiple inputs\n\nrecover_javascript_sources accepted a single path, and\nvalidateModuleSet bound every module's provenance to that one snapshot.\nA code-split app (runtime + chunks, or an Electron main/preload/renderer\nset) had to be recovered one file per call, and modules recovered alone\ncould not resolve imports across chunks: cross-chunk require(id)\nreferences stayed as numeric ids with property reads.\n\nAdd an optional additional_paths input. The listed files are\nconcatenated, in order after path, into the single engine snapshot, so\none Wakaru run sees every module and cross-chunk imports resolve.\nvalidateModuleSet's single-snapshot binding is unchanged. Module\nprovenance is attributed back to the input file its first extraction\nrange starts in, with byte ranges rebased to that file's own offsets;\na module whose ranges cross an input boundary keeps the concatenated\nsnapshot identity and offsets, recorded as an explicit limitation.\nSingle-path behavior is byte-for-byte unchanged (one segment,\noffset 0).\n\nFixes #1605\n\n* fix(javascript): preserve source identity in multi-input recovery\n\n---------\n\nCo-authored-by: JingHao-Leon \nCo-authored-by: morluto <76467478+morluto@users.noreply.github.com>", - "parents": [ - "ce845ba428e9b23d6b74eae1e25e17c37532adac" - ], + "parents": ["ce845ba428e9b23d6b74eae1e25e17c37532adac"], "authors": [ { "name": "JingHao-Leon", @@ -1270,17 +1078,13 @@ } } ], - "pullRequests": [ - 1686 - ] + "pullRequests": [1686] }, { "sha": "a00c34dcb155e5993bda8ad0f51bf3b13e289760", "subject": "ci: reuse portable Turbo outputs across verification runs", "body": "ci: reuse portable Turbo outputs across verification runs\n", - "parents": [ - "12c416005f9d2abf438f4df4447972424d781b65" - ], + "parents": ["12c416005f9d2abf438f4df4447972424d781b65"], "authors": [ { "name": "morluto", @@ -1297,9 +1101,7 @@ "sha": "847a1a3f25f69e1b3808fb0a53e5f1415a7ed058", "subject": "test: share native keyed archive integer fixture generation", "body": "test: share native keyed archive integer fixture generation\n", - "parents": [ - "a00c34dcb155e5993bda8ad0f51bf3b13e289760" - ], + "parents": ["a00c34dcb155e5993bda8ad0f51bf3b13e289760"], "authors": [ { "name": "morluto", @@ -1316,9 +1118,7 @@ "sha": "3ad5782dfdc8864879a887dc63fef682ffeb5839", "subject": "fix(javascript): honor package exports before sibling files", "body": "fix(javascript): honor package exports before sibling files\n\nResolve package exports before sibling-file fallback, preserve explicit export blocking, and retain precise CommonJS package self-reference behavior and caller provenance.\n\nFixes #1761.\n\nCo-authored-by: Yann Roberto <165009858+shoyann@users.noreply.github.com>", - "parents": [ - "847a1a3f25f69e1b3808fb0a53e5f1415a7ed058" - ], + "parents": ["847a1a3f25f69e1b3808fb0a53e5f1415a7ed058"], "authors": [ { "name": "Yann Roberto", @@ -1329,17 +1129,13 @@ } } ], - "pullRequests": [ - 1762 - ] + "pullRequests": [1762] }, { "sha": "951c2aae3be1c357df9f23558d8c09680e64c2cb", "subject": "fix(native): raise default PE resource entry budget to 16384 (#1703)", "body": "fix(native): raise default PE resource entry budget to 16384 (#1703)\n\ninspect-pe-resources rejected stock Windows resource images because their\ntables exceed the 4096-entry default. Windows 11 25H2 SystemResources\nmeasures imageres.dll.mun at 6476 examined entries, shell32.dll.mun at 5903\nand wmploc.DLL.mun at 5440, so the default budget now admits each of them\nwith headroom while the maximum stays 65536. The independent 8 MiB metadata\nbudget still bounds allocation, and exceeding any budget still fails without\npartial results.\n\nThe stable filesystem boundary test now emits a 6476-entry table through a\nlarger fixture section and asserts that the default budgets report complete\ncoverage, covering stock-image scale without a real Windows file.", - "parents": [ - "3ad5782dfdc8864879a887dc63fef682ffeb5839" - ], + "parents": ["3ad5782dfdc8864879a887dc63fef682ffeb5839"], "authors": [ { "name": "Jason Cat", @@ -1350,17 +1146,13 @@ } } ], - "pullRequests": [ - 1703 - ] + "pullRequests": [1703] }, { "sha": "ba7df3f0f7ee63e6350d5fbdddc8ed945a6b141d", "subject": "perf(ci): share bytecode across fresh Apple artifact subprocesses", "body": "perf(ci): share bytecode across fresh Apple artifact subprocesses\n", - "parents": [ - "951c2aae3be1c357df9f23558d8c09680e64c2cb" - ], + "parents": ["951c2aae3be1c357df9f23558d8c09680e64c2cb"], "authors": [ { "name": "morluto", @@ -1377,9 +1169,7 @@ "sha": "40d9c7b836a3aca5d589c0a65c7d02b3ea5cd36b", "subject": "test(native): skip the EACCES directory diagnostic as root (#1394)", "body": "test(native): skip the EACCES directory diagnostic as root (#1394)\n\nRoot bypasses the mode-0 file permission this test relies on, so\ninventory succeeds and the expected EACCES failure never occurs. Match\nthe root guard used by the other permission-dependent boundary tests.\n\n\nClaude-Session: https://claude.ai/code/session_01XPY2GmufMNGQKoEgRUx1pd\n\nCo-authored-by: Claude ", - "parents": [ - "ba7df3f0f7ee63e6350d5fbdddc8ed945a6b141d" - ], + "parents": ["ba7df3f0f7ee63e6350d5fbdddc8ed945a6b141d"], "authors": [ { "name": "Marnix Pluim", @@ -1398,17 +1188,13 @@ } } ], - "pullRequests": [ - 1394 - ] + "pullRequests": [1394] }, { "sha": "3a17882cc469515e562df9ecc7d154f30a5a9205", "subject": "fix(javascript): retain unbound CommonJS semantic imports", "body": "fix(javascript): retain unbound CommonJS semantic imports\n\nCollect unbound literal CommonJS dependencies at the semantic module-link owner, retain null binding names and source provenance, and avoid duplicate links for calls already represented by bindings or re-exports. Preserve distinct nested calls, shadowing exclusions, dynamic binding uncertainty, and existing static asset references.\n\nFixes #1793.", - "parents": [ - "40d9c7b836a3aca5d589c0a65c7d02b3ea5cd36b" - ], + "parents": ["40d9c7b836a3aca5d589c0a65c7d02b3ea5cd36b"], "authors": [ { "name": "Ysopwnable", @@ -1419,17 +1205,13 @@ } } ], - "pullRequests": [ - 1799 - ] + "pullRequests": [1799] }, { "sha": "d412def7225a556e6d2140176dc9ab4bd34af0f3", "subject": "fix(setup): register a stable launcher when run through bunx (#1731)", "body": "fix(setup): register a stable launcher when run through bunx (#1731)\n\nSetup run through bunx or bun x registered the bin inside bun's temporary\npackage cache. Detect bun's package-runner launch from npm_command=exec\nwith a bun user agent and register the pinned bunx launcher, wrapped in\ncmd.exe on Windows like the npx launcher. Doctor, update maintenance and\nuninstall recognize it as REA-owned, and setup's printed commands name\nthe runner that launched it.\n\nRead the runner variables case-insensitively on Windows, where the CLI\nenvironment snapshot upper-cases variable names and setup run through\nnpx also fell back to the cache path.\n\nCo-authored-by: morluto <76467478+morluto@users.noreply.github.com>", - "parents": [ - "3a17882cc469515e562df9ecc7d154f30a5a9205" - ], + "parents": ["3a17882cc469515e562df9ecc7d154f30a5a9205"], "authors": [ { "name": "xeropresence", @@ -1448,17 +1230,13 @@ } } ], - "pullRequests": [ - 1731 - ] + "pullRequests": [1731] }, { "sha": "66c21572defc97fe277cad49d3173bd4073d1f58", "subject": "fix(bun): report the real runtime and enforce worker memory budgets on Windows (#1730)", "body": "fix(bun): report the real runtime and enforce worker memory budgets on Windows (#1730)\n\n* fix(bun): report the real runtime and enforce worker memory budgets on Windows\n\nUnder Bun, REA recorded Node/V8 identity it did not observe and its JavaScript helper processes ran without a memory bound, because Bun ignores the V8 heap flags REA passes. Source-map trace Evidence claimed runtime node-v8 with Bun's synthetic V8 heap limit (the decoder then rejected that limit, so trace_web_source_location always failed), analysis resource failures reported heap limits Bun does not enforce, the HAR decoder claimed a fixed 192 MiB heap, and doctor reported Bun's Node.js compatibility version as the Node version.\n\nIdentify the runtime once from process.versions. Source-map reports record id bun with the Bun and Node.js compatibility versions and a null v8_heap_limit_bytes; the decoder checks the heap budget only for V8 reports and rejects a report from a runtime other than the launching one. The analysis worker reports a null heap limit under Bun, HAR limitations and failures omit heap sizes under Bun, and the doctor node check reports Bun and passes when its Node.js compatibility version is supported.\n\nOn Windows under Bun, each helper's owned Job Object now carries a commit limit of its heap budget plus a measured 512 MiB Bun runtime reserve (704 MiB for the codec and HAR decoder, 1536 MiB for the default analyzer). The native addon accepts an optional page-aligned job memory limit on process_spawn, verifies it by readback, associates a private completion port before the child is created, and reports a sticky memoryLimitReached and peak job commit on each poll; inspect reports jobMemoryLimit. A requested limit with an artifact lacking the control refuses the launch, and non-Windows launchers refuse a limit.\n\nReaching the limit is classified by the job notification rather than Bun's exit status: the analyzer fails the current source with a memory resource failure reporting worker_process_memory_limit_bytes, the codec returns a memory resource failure, and the HAR decoder returns its memory failure with process_memory_limit_bytes. Bun source-map Evidence records process_memory_limit_bytes, verified against the launcher. Node.js launches and outputs are unchanged.\n\n* fix(windows): drain memory notifications after observing exit\n\n---------\n\nCo-authored-by: morluto <76467478+morluto@users.noreply.github.com>", - "parents": [ - "d412def7225a556e6d2140176dc9ab4bd34af0f3" - ], + "parents": ["d412def7225a556e6d2140176dc9ab4bd34af0f3"], "authors": [ { "name": "xeropresence", @@ -1477,17 +1255,13 @@ } } ], - "pullRequests": [ - 1730 - ] + "pullRequests": [1730] }, { "sha": "ed084b3dbb13ec9dee1adc8f5b76e784b52c00bb", "subject": "fix(process): observe already-due trailing callbacks before settling the capture journal (#1700)", "body": "fix(process): observe already-due trailing callbacks before settling the capture journal (#1700)\n\nA stalled event loop can leave the settle wake-up and a trailing observation\ncallback due at the same resume. The earlier wake-up runs first, declares\nsilence, and the capture becomes immutable before the trailing callback\nappends its observation.\n\nDrain the loop turn after the quiet sleep so timer and poll callbacks that\nwere already due run before silence is judged, and cover the stalled-loop\ncase with a deterministic regression test.\n\nFixes #1697", - "parents": [ - "66c21572defc97fe277cad49d3173bd4073d1f58" - ], + "parents": ["66c21572defc97fe277cad49d3173bd4073d1f58"], "authors": [ { "name": "Jason Cat", @@ -1498,17 +1272,13 @@ } } ], - "pullRequests": [ - 1700 - ] + "pullRequests": [1700] }, { "sha": "0153b4d95bdf38eddee91d5ce08181030fb955b4", "subject": "perf(test): batch compatible client profile lifecycles", "body": "perf(test): batch compatible client profile lifecycles\n\nKeep individual dry-run and scoped doctor checks for all eight profile cases. Share approved setup, idempotency, and uninstall for compatible roots; isolate Devin XDG and default OpenCode environments.\n\nReduce fresh CLI launches from 41 to 26. A bounded Flameox comparison measured 16.3s before and 12.0s after. All 40 focused client tests, static checks, and test discovery pass.\n", - "parents": [ - "ed084b3dbb13ec9dee1adc8f5b76e784b52c00bb" - ], + "parents": ["ed084b3dbb13ec9dee1adc8f5b76e784b52c00bb"], "authors": [ { "name": "morluto", @@ -1525,9 +1295,7 @@ "sha": "e4407dbed5dc24851f47532f5e3d75d5627d3e7d", "subject": "feat(ghidra): admit bounded PSP ELF through installed Allegrex (#1599)", "body": "feat(ghidra): admit bounded PSP ELF through installed Allegrex (#1599)\n\n* feat(ghidra): admit bounded PSP ELF through installed Allegrex\n\nBuild on merged generic MIPS without weakening its policy. Bind caller-installed processor files into the analysis profile, check them again before launch, force and verify PSP language selection, retain limitations, and extend the public CLI/MCP verifier with source-owned PSP and target-switching checks. Local actual focused Vitest: 102 passed, one existing permission skip. Hosted static and real-provider results are pending.\n\n* fix(ghidra): validate PSPSDK ABI records in PSP admission\n\n* test(ghidra): bind PSP ABI verification to snapshot profiles\n\n* test(ghidra): declare independent PSP ABI reader contract\n\n* test(ghidra): retain the PSP fixture discriminated type\n\n* test(ghidra): contextually type PSP metadata as the MIPS target variant\n\n* test(ghidra): keep carved firmware checks scoped to generic MIPS fixtures\n\n* style(ghidra): format PSP language-override guard\n\n* style(test): format PSP language override regressions\n\n* fix(ghidra): bound PSP extension enumeration before allocation\n\n---------\n\nCo-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>\nCo-authored-by: morluto <76467478+morluto@users.noreply.github.com>", - "parents": [ - "0153b4d95bdf38eddee91d5ce08181030fb955b4" - ], + "parents": ["0153b4d95bdf38eddee91d5ce08181030fb955b4"], "authors": [ { "name": "Jay-Alexander Elliot", @@ -1554,17 +1322,13 @@ } } ], - "pullRequests": [ - 1599 - ] + "pullRequests": [1599] }, { "sha": "ffaf2c12f1793c7c451e66dc09c3074544a4c086", "subject": "feat(wasm): inspect local artifacts with WABT (#1533)", "body": "feat(wasm): inspect local artifacts with WABT (#1533)\n\n* feat(wasm): inspect local artifacts with WABT\n\n* fix(wasm): preserve custom names and failed cleanup ownership\n\n---------\n\nCo-authored-by: morluto <76467478+morluto@users.noreply.github.com>", - "parents": [ - "e4407dbed5dc24851f47532f5e3d75d5627d3e7d" - ], + "parents": ["e4407dbed5dc24851f47532f5e3d75d5627d3e7d"], "authors": [ { "name": "Thang Luu", @@ -1583,17 +1347,13 @@ } } ], - "pullRequests": [ - 1533 - ] + "pullRequests": [1533] }, { "sha": "2e223300375101558f90b6e78ef9612c55626673", "subject": "fix(build): preserve resource controls in strict Turbo tasks (#1809)", "body": "fix(build): preserve resource controls in strict Turbo tasks (#1809)", - "parents": [ - "ffaf2c12f1793c7c451e66dc09c3074544a4c086" - ], + "parents": ["ffaf2c12f1793c7c451e66dc09c3074544a4c086"], "authors": [ { "name": "Ysopwnable", @@ -1604,17 +1364,13 @@ } } ], - "pullRequests": [ - 1809 - ] + "pullRequests": [1809] }, { "sha": "031d7781f0f6c99e5f14e67f56cb89a88d6af3eb", "subject": "fix(build): preserve LF text checkouts on Windows (#1807)", "body": "fix(build): preserve LF text checkouts on Windows (#1807)\n\nPin text checkouts to LF so Git for Windows with core.autocrlf=true\ndoes not make the repository formatting gate fail on a clean clone.\nKeep command fixtures in CRLF and retain automatic binary detection.", - "parents": [ - "2e223300375101558f90b6e78ef9612c55626673" - ], + "parents": ["2e223300375101558f90b6e78ef9612c55626673"], "authors": [ { "name": "CmsChase", @@ -1625,17 +1381,13 @@ } } ], - "pullRequests": [ - 1807 - ] + "pullRequests": [1807] }, { "sha": "cdd9fe716774c9e5abd121b70e9fd5e1eb91d2b8", "subject": "feat(native): expose typed incoming references at exact addresses (#1715)", "body": "feat(native): expose typed incoming references at exact addresses (#1715)", - "parents": [ - "031d7781f0f6c99e5f14e67f56cb89a88d6af3eb" - ], + "parents": ["031d7781f0f6c99e5f14e67f56cb89a88d6af3eb"], "authors": [ { "name": "Arthas", @@ -1646,17 +1398,13 @@ } } ], - "pullRequests": [ - 1715 - ] + "pullRequests": [1715] }, { "sha": "a8a9c4d8173b63fb42d343a8ca043927970ea4ce", "subject": "fix(mcp): express inspect_analysis_view selector constraints in the contract schema (#1705)", "body": "fix(mcp): express inspect_analysis_view selector constraints in the contract schema (#1705)\n\nThe item view advertised its four selector alternatives independently of the\nselected collection, while collection-specific constraints lived only in a\nsuperRefine that does not survive JSON Schema conversion. Clients validating\nagainst tools/list could not discover that modules accept only path/node_id\nand sections/symbols accept only index/name.\n\nReplace the refined object with a discriminated union on collection so the\nconverted draft-2020-12 schema rejects the same combinations the MCP server\nrejects. Runtime selection semantics are unchanged.\n\nFixes #1695\n\nCo-authored-by: Saim Shafique ", - "parents": [ - "cdd9fe716774c9e5abd121b70e9fd5e1eb91d2b8" - ], + "parents": ["cdd9fe716774c9e5abd121b70e9fd5e1eb91d2b8"], "authors": [ { "name": "Saim Shafique", @@ -1672,17 +1420,13 @@ "user": null } ], - "pullRequests": [ - 1705 - ] + "pullRequests": [1705] }, { "sha": "0a6b46d5b0299f76c0d268f7b70395f9b6fbd68e", "subject": "test(ci): stabilize JADX recovery and ignore generated reports (#1668)", "body": "test(ci): stabilize JADX recovery and ignore generated reports (#1668)", - "parents": [ - "a8a9c4d8173b63fb42d343a8ca043927970ea4ce" - ], + "parents": ["a8a9c4d8173b63fb42d343a8ca043927970ea4ce"], "authors": [ { "name": "You Wish", @@ -1693,17 +1437,13 @@ } } ], - "pullRequests": [ - 1668 - ] + "pullRequests": [1668] }, { "sha": "b2da21abe11ac43a4cc24b233bd52ce10995e4a1", "subject": "test(evidence): cover workflow question whitespace normalization (#1739)", "body": "test(evidence): cover workflow question whitespace normalization (#1739)", - "parents": [ - "0a6b46d5b0299f76c0d268f7b70395f9b6fbd68e" - ], + "parents": ["0a6b46d5b0299f76c0d268f7b70395f9b6fbd68e"], "authors": [ { "name": "林桉", @@ -1714,17 +1454,13 @@ } } ], - "pullRequests": [ - 1739 - ] + "pullRequests": [1739] }, { "sha": "f2150eb9a7ed76748238009ca6666efa52de5271", "subject": "feat(harmony): project HarmonyOS package inventory evidence (#1447)", "body": "feat(harmony): project HarmonyOS package inventory evidence (#1447)\n\n* feat(harmony): project HarmonyOS package inventory evidence\n\nFirst HarmonyOS increment from #1431: HAP, HSP, and App Pack roots are\nclassified through the hardened ZIP reader and projected into an\nexecution-free application graph with packaging-model hints, exact\ncomponent paths and hashes, App Pack children by path, runtime-family\nhints, and path-based N-API bridge hypotheses. HarmonyOS .har stays\nunclassified by suffix because .har also names HTTP Archive JSON.\n\nAdds the project_harmony_application_graph tool (CLI and MCP), synthetic\ncomposition coverage, a pinned real-package verify lane, and docs.\n\n* refactor(domain): share application graph projection scaffolding\n\nThe HarmonyOS projection mirrors the Android and Apple projections by\ndesign, which pushed jscpd duplication over its 2.5 percent budget.\nExtract the identical pieces (inventory input schema, projected\ncomponent schema and occurrence flattening, bridge candidate schema\nfactory, coverage assembly, comparator, canonical digest) into\ndomain/mobileApplicationGraphProjection.ts and route all three\nprojections plus the composition fixtures through it. Duplication drops\nfrom 2.52 to 2.49 percent with no behavior change: projection ids,\nclassifications, and limitations are byte-identical.\n\n* fix(harmony): address review, stable app-pack roots, and rotated fixture\n\n- rebased onto main; the shared projection scaffolding now keeps main's\n nativeRuntimeConvention loop and the harmony runtime families adopt the\n same react-native/flutter/unity path conventions\n- the .app App Pack suffix is now a root-input rule only (verified ZIP\n magic in classifyRootFormat and BinaryTargetResolver); nested .app ZIP\n members inside other packages keep the generic zip classification, with\n a regression test, so existing inventories do not change\n- the signing limitation now states that an empty signing list does not\n mean unsigned because packaging-tool signatures live in the ZIP signing\n block, and the app-pack root rule is disclosed as suffix-based\n- repinned the real-package fixture to the current VHome 2.6.14-beta asset\n after the upstream deleted v5.0.111-beta and replaced the v2.6.14-beta\n asset within hours; the pin records both observed digests\n\n---------\n\nCo-authored-by: morluto <76467478+morluto@users.noreply.github.com>", - "parents": [ - "b2da21abe11ac43a4cc24b233bd52ce10995e4a1" - ], + "parents": ["b2da21abe11ac43a4cc24b233bd52ce10995e4a1"], "authors": [ { "name": "BaaRai", @@ -1743,17 +1479,13 @@ } } ], - "pullRequests": [ - 1447 - ] + "pullRequests": [1447] }, { "sha": "30787297d49bf93e67f62a9ec42f896188d57a20", "subject": "fix(managed): charge retained member facts instead of decoding bounds (#1768)", "body": "fix(managed): charge retained member facts instead of decoding bounds (#1768)\n\n* fix(managed): charge retained member facts instead of decoding bounds\n\ninspect_managed_members returned no types or methods for ordinary\nassemblies: Newtonsoft.Json 13.0.3 (netstandard2.0, 705 KB) exceeded\nthe 64 MiB representation budget. Each method body reserved 256 bytes\nper IL byte and each signature 256 bytes per blob byte before decoding,\nand those worst-case bounds were never returned, so the budget scaled\nwith total IL size rather than with the retained output. The final\nprojection admission also charged every decoded string at six bytes per\ncharacter and every scalar at 32 bytes, about eight times its JSON size.\n\nBound IL, exception-clause and signature decoding with a transient\nadmission that does not consume capacity, then reserve the decoded body\nor signature that is actually retained. Projection admission now\ncharges the exact UTF-8 JSON bytes of decoded strings, keys and scalars;\nescaped and multibyte text still counts at its encoded size.\n\nNewtonsoft.Json now yields 496 types, 4185 methods and 18846 call\nedges. Assemblies whose retained facts exceed the budget, such as the\n2.3 MB System.Private.ServiceModel 4.7.0, remain unavailable.\n\n* fix(managed): bound concurrent decoding and count JSON bytes in place\n\nReview follow-up. A method's IL bound and its exception-section bounds\nwere each checked against the same remaining capacity although their\nbookkeeping is live at the same time, so 40 MiB of IL plus 40 MiB of\nexception clauses passed a 64 MiB budget. Transient admissions now\naccumulate until the method body or signature is built, and reserve\nrespects bounds that are still live.\n\nProjection admission also serialized each decoded string to measure it,\nwhich could allocate about six times a near-limit string before the\ncheck. It now counts the exact escaped UTF-8 bytes without building the\nJSON text.\n\n* fix(managed): admit derived call and field edges as they are built\n\nReview follow-up. Released IL bounds no longer stand in for the call and field-access records that edges() derives from anchors. Each record is now admitted before the graph grows further, so a crafted assembly cannot materialize the whole derived graph before the representation guard fails.\n\n* fix(managed): admit derived caller names before building them\n\nReview follow-up. The caller name of call and field-access records was interpolated per anchor before any admission saw it. It is now built once per method, after its exact JSON size, counted from the type and member names, has been admitted.", - "parents": [ - "f2150eb9a7ed76748238009ca6666efa52de5271" - ], + "parents": ["f2150eb9a7ed76748238009ca6666efa52de5271"], "authors": [ { "name": "Martin Klein", @@ -1764,17 +1496,13 @@ } } ], - "pullRequests": [ - 1768 - ] + "pullRequests": [1768] }, { "sha": "f178bf1c00139e1b7fe2d14fcfe1f558fe08fbe2", "subject": "perf(test): reuse CLI boundary worker module graphs", "body": "perf(test): reuse CLI boundary worker module graphs\n\nShare CLI boundary module evaluation in bounded forks while preserving fresh command instances and child processes. Keep module-mocked cleanup tests and source/compiled product catalog verification isolated, and update focused artifact selection.\n\nFlameox full cohort with V8 coverage: 102.8s to 96.6s; 290 passed and two existing skips. Statement, function and branch coverage maps and hit sets match across all 1,153 source files. After syncing main, 75 focused tests, typecheck, lint, docs checks and formatting pass; all 834 test files are discovered exactly once.\n", - "parents": [ - "30787297d49bf93e67f62a9ec42f896188d57a20" - ], + "parents": ["30787297d49bf93e67f62a9ec42f896188d57a20"], "authors": [ { "name": "morluto", @@ -1791,9 +1519,7 @@ "sha": "ef5f9aa2d7769b32d9f88211812ae11456a88267", "subject": "perf(test): reuse the CI scope Git baseline", "body": "perf(test): reuse the CI scope Git baseline\n\nCopy a pristine repository into each case-owned workspace instead of repeating init, add, commit and rev-parse for 47 identical baselines. Keep every scenario mutation and real planner invocation, with seed cleanup owned by the file.\n", - "parents": [ - "f178bf1c00139e1b7fe2d14fcfe1f558fe08fbe2" - ], + "parents": ["f178bf1c00139e1b7fe2d14fcfe1f558fe08fbe2"], "authors": [ { "name": "morluto", @@ -1810,9 +1536,7 @@ "sha": "43dafb5abe60ee21be4f6a6b6de482cd7a5bab0a", "subject": "perf(test): share stdio analysis for comparison fixtures", "body": "perf(test): share stdio analysis for comparison fixtures\n\nProduce two comparison scenarios through the existing real MCP session while retaining fresh CLI comparisons, all authored source variants and native execution oracles. Keep the capture-lifetime case as a complete CLI analysis-to-comparison journey.\n\nValidation: 92 tests pass with identical source coverage maps and hit sets across 1,156 files. The covered two-file cohort improved locally from 40.6s to 35.4s including the Git baseline optimization. Typecheck, lint and formatting pass.\n", - "parents": [ - "ef5f9aa2d7769b32d9f88211812ae11456a88267" - ], + "parents": ["ef5f9aa2d7769b32d9f88211812ae11456a88267"], "authors": [ { "name": "morluto", @@ -1829,9 +1553,7 @@ "sha": "76e4153d346b14ef194222bbeef240cf8a16dc99", "subject": "perf(mcp): reduce Windows startup module resolution (#1814)", "body": "perf(mcp): reduce Windows startup module resolution (#1814)\n\nperf(mcp): bundle internal modules to reduce Windows startup I/O", - "parents": [ - "43dafb5abe60ee21be4f6a6b6de482cd7a5bab0a" - ], + "parents": ["43dafb5abe60ee21be4f6a6b6de482cd7a5bab0a"], "authors": [ { "name": "Ysopwnable", @@ -1842,17 +1564,13 @@ } } ], - "pullRequests": [ - 1814 - ] + "pullRequests": [1814] }, { "sha": "91f843bf38b0e4ec8576f41f3140488b4ee8ff32", "subject": "fix(artifacts): mark Windows host executables by extension (#1823)", "body": "fix(artifacts): mark Windows host executables by extension (#1823)\n\nWindows has no POSIX execute bit; Node reports file modes from the\nread-only attribute alone, so every host file, including PE images,\nreported `executable: false` while the same occurrence reported\n`artifact_kind: executable`. Derive the host executable marking once:\nPOSIX permission bits stay authoritative, and Windows marks regular\nfiles with the CreateProcess/cmd launchable extensions.\n\nFixes #1819\n\nCo-authored-by: Claude Opus 5.5 ", - "parents": [ - "76e4153d346b14ef194222bbeef240cf8a16dc99" - ], + "parents": ["76e4153d346b14ef194222bbeef240cf8a16dc99"], "authors": [ { "name": "Kaoru0822", @@ -1871,17 +1589,13 @@ } } ], - "pullRequests": [ - 1823 - ] + "pullRequests": [1823] }, { "sha": "6ac5c36503492d3b6da4fcf2a5dee87aff60fc8c", "subject": "fix(javascript): follow bundler namespace interop for Electron APIs (#1827)", "body": "fix(javascript): follow bundler namespace interop for Electron APIs (#1827)\n\n* fix(javascript): follow bundler namespace interop for Electron APIs\n\nRolldown/tsdown emit `let electron = require(\"electron\"); electron =\n__toESM(electron);` and esbuild/tsc emit `__toESM(require(\"electron\"))`\nor `__importStar(require(\"electron\"))` for namespace imports. The\nreassignment or the helper call hid the Electron origin, so bundled\nmain processes reported zero BrowserWindows and preloads.\n\nLocally declared, never reassigned interop helpers recognized by name\nnow pass the module through, and a binding's rewrap of its own value is\nnot treated as a reassignment. Other writes stay unresolved.\n\nFixes #1802\n\nCo-Authored-By: Claude Opus 5.5 \n\n* fix(javascript): require emitted interop helper definitions\n\nOnly trust an interop helper name when it has a single program-scope\nfunction definition, and state that helper bodies are not evaluated.\n\nCo-Authored-By: Claude Opus 5.5 \n\n---------\n\nCo-authored-by: Claude Opus 5.5 ", - "parents": [ - "91f843bf38b0e4ec8576f41f3140488b4ee8ff32" - ], + "parents": ["91f843bf38b0e4ec8576f41f3140488b4ee8ff32"], "authors": [ { "name": "Kaoru0822", @@ -1900,17 +1614,13 @@ } } ], - "pullRequests": [ - 1827 - ] + "pullRequests": [1827] }, { "sha": "0b4ce83618bb800627264ae6221e2e35140417b5", "subject": "fix(windows): retain failed native inspection ownership (#1826)", "body": "fix(windows): retain failed native inspection ownership (#1826)", - "parents": [ - "6ac5c36503492d3b6da4fcf2a5dee87aff60fc8c" - ], + "parents": ["6ac5c36503492d3b6da4fcf2a5dee87aff60fc8c"], "authors": [ { "name": "Ysopwnable", @@ -1921,17 +1631,13 @@ } } ], - "pullRequests": [ - 1826 - ] + "pullRequests": [1826] }, { "sha": "ed1519ddee02739f57136e356786f64c7f74fed0", "subject": "fix(managed): report ExportedType rows in managed member inspection (#1828)", "body": "fix(managed): report ExportedType rows in managed member inspection (#1828)\n\n* fix(managed): report ExportedType rows in managed member inspection\n\nFacade assemblies such as System.Runtime.dll provide their types only\nthrough ExportedType rows (type forwarders), which member inspection\nnever read, so they reported complete coverage with no types. Report\neach row as declared with its flags, forwarder bit, TypeDefId hint, and\nimplementation token, and record invalid or null implementation coded\nindexes as partial coverage. Comparisons now state that exported types\nare not compared when either side has them.\n\nFixes #1812\n\nCo-Authored-By: Claude Opus 5.5 \n\n* fix(managed): read earlier member Evidence without exported types\n\nMember Evidence recorded before ExportedType rows were read omits the\nfield. Parse it as null (not examined) instead of rejecting it, and\nstate in comparisons that such an observation's exported types are\nunknown.\n\nCo-Authored-By: Claude Opus 5.5 \n\n* fix(managed): leave exported types unknown when metadata is unavailable\n\nCo-Authored-By: Claude Opus 5.5 \n\n---------\n\nCo-authored-by: Claude Opus 5.5 ", - "parents": [ - "0b4ce83618bb800627264ae6221e2e35140417b5" - ], + "parents": ["0b4ce83618bb800627264ae6221e2e35140417b5"], "authors": [ { "name": "Kaoru0822", @@ -1950,17 +1656,13 @@ } } ], - "pullRequests": [ - 1828 - ] + "pullRequests": [1828] }, { "sha": "5876779013726964deef748120c48f5fa0155546", "subject": "docs: celebrate 90,000 GitHub stars 🎉 (#1858)", "body": "docs: celebrate 90,000 GitHub stars 🎉 (#1858)\n\nUpdate the star milestone in the English README and all 18 translated\nREADMEs, keeping each locale's number formatting.\n\nCo-authored-by: Claude Opus 5.5 ", - "parents": [ - "ed1519ddee02739f57136e356786f64c7f74fed0" - ], + "parents": ["ed1519ddee02739f57136e356786f64c7f74fed0"], "authors": [ { "name": "Kaoru0822", @@ -1979,17 +1681,13 @@ } } ], - "pullRequests": [ - 1858 - ] + "pullRequests": [1858] }, { "sha": "ee5275cd9fae8db64f945a0c8b59e1c19ac402c3", "subject": "fix(artifacts): count a changed partial-inventory root once (#1854)", "body": "fix(artifacts): count a changed partial-inventory root once (#1854)\n\nWhen partial inventories omitted node details, the root got an unknown\navailability row and the differing manifest root digests appended a\nsecond, changed content row, so one logical path was counted as both\nchanged and unknown. Fold the manifest content change into an existing\nunknown or changed root row instead, keeping its dimensions, occurrence\nand artifact identities, and citations; contradiction and presence rows\nare left as they are.\n\nFixes #1844\n\nCo-authored-by: Claude Opus 5.5 ", - "parents": [ - "5876779013726964deef748120c48f5fa0155546" - ], + "parents": ["5876779013726964deef748120c48f5fa0155546"], "authors": [ { "name": "Kaoru0822", @@ -2008,17 +1706,13 @@ } } ], - "pullRequests": [ - 1854 - ] + "pullRequests": [1854] }, { "sha": "069308bbe6d73b1d87038b43c9121658325042a9", "subject": "fix(hopper): preserve startup failures and recover denied launches", "body": "fix(hopper): preserve startup failures and recover denied launches\n\nPreserve the primary Hopper startup failure and launcher diagnostics while retaining resources when cleanup cannot be confirmed. Reauthenticate matching external application sessions before document cleanup, keep the Python bridge available for bounded reconnects, and expose the provider-owned Hopper startup deadline.\n\nReal headless Linux Hopper semantic analysis and 65 focused configuration, handshake, cleanup, and bridge tests passed. macOS authorization/crash causes and saved-HOP behavior require their own real-provider verification.\n\nRefs #1808\n\nCo-authored-by: N0zoM1z0 <161784452+N0zoM1z0@users.noreply.github.com>\nCo-authored-by: Kaoru0822 <208281322+kaoru0822-kitauji@users.noreply.github.com>", - "parents": [ - "ee5275cd9fae8db64f945a0c8b59e1c19ac402c3" - ], + "parents": ["ee5275cd9fae8db64f945a0c8b59e1c19ac402c3"], "authors": [ { "name": "morluto", @@ -2045,17 +1739,13 @@ } } ], - "pullRequests": [ - 1817 - ] + "pullRequests": [1817] }, { "sha": "1f531fc257f71731624cbd6b595208adacf59108", "subject": "fix(managed): decode generic, array, fnptr, and modifier signatures (#1835)", "body": "fix(managed): decode generic, array, fnptr, and modifier signatures (#1835)\n\n* fix(managed): decode generic, array, fnptr, and modifier signatures\n\nMember signatures using GENERICINST, ARRAY, FNPTR, CMOD_REQD/CMOD_OPT,\nor TYPEDBYREF were reported as unsupported, leaving their types unknown\nand turning otherwise complete inspections partial. Decode them with an\nexplicit stack so nested signatures stay recursion-free, keep encoded\nTypeDefOrRefOrSpec values, and report malformed shapes as malformed.\n\nFixes #1832\n\nCo-Authored-By: Claude Opus 5.5 \n\n* fix(managed): bound array rank before rendering dimensions\n\nCo-Authored-By: Claude Opus 5.5 \n\n* fix(managed): keep modifier order and reject non-method fnptr headers\n\nCo-Authored-By: Claude Opus 5.5 \n\n* fix(managed): reject corrupt fnptr flags and misplaced typed references\n\nCo-Authored-By: Claude Opus 5.5 \n\n* fix(managed): decode signature elements by grammar position\n\nTrack whether each element is a field type, return type, parameter,\nnested Type, or pointee. VOID is valid only as a return type or\npointee, TYPEDBYREF only as a return type or parameter, and BYREF only\nat the top of a return type, parameter, or ref field; other placements\nare malformed. Function pointer items are parsed as a return type then\nparameters, and generic arguments as Types.\n\nCo-Authored-By: Claude Opus 5.5 \n\n---------\n\nCo-authored-by: Claude Opus 5.5 ", - "parents": [ - "069308bbe6d73b1d87038b43c9121658325042a9" - ], + "parents": ["069308bbe6d73b1d87038b43c9121658325042a9"], "authors": [ { "name": "Kaoru0822", @@ -2074,17 +1764,13 @@ } } ], - "pullRequests": [ - 1835 - ] + "pullRequests": [1835] }, { "sha": "cf7477eb4642bc07228fa33ccc4c87656e6e3003", "subject": "fix(hopper): wait for late bridges during cleanup (#1866)", "body": "fix(hopper): wait for late bridges during cleanup (#1866)", - "parents": [ - "1f531fc257f71731624cbd6b595208adacf59108" - ], + "parents": ["1f531fc257f71731624cbd6b595208adacf59108"], "authors": [ { "name": "morluto", @@ -2095,17 +1781,13 @@ } } ], - "pullRequests": [ - 1866 - ] + "pullRequests": [1866] }, { "sha": "37a9eb9d65a088209f962e5094f6bc67eacbbaf9", "subject": "fix(javascript): preserve namespace re-export relationships (#1833)", "body": "fix(javascript): preserve namespace re-export relationships (#1833)\n\n* fix(javascript): preserve namespace re-export relationships\n\n* fix(javascript): exclude erased namespace type exports", - "parents": [ - "cf7477eb4642bc07228fa33ccc4c87656e6e3003" - ], + "parents": ["cf7477eb4642bc07228fa33ccc4c87656e6e3003"], "authors": [ { "name": "Yann Roberto", @@ -2116,17 +1798,13 @@ } } ], - "pullRequests": [ - 1833 - ] + "pullRequests": [1833] }, { "sha": "ca11162d027a0d3e3b5a65a54825b00d5689fb80", "subject": "perf(browser): parse captured module URLs once per lookup (#1829)", "body": "perf(browser): parse captured module URLs once per lookup (#1829)\n\nCo-authored-by: Shayan Ali <217162076+shayanxcyber@users.noreply.github.com>", - "parents": [ - "37a9eb9d65a088209f962e5094f6bc67eacbbaf9" - ], + "parents": ["37a9eb9d65a088209f962e5094f6bc67eacbbaf9"], "authors": [ { "name": "Shayan Ali", @@ -2145,17 +1823,13 @@ } } ], - "pullRequests": [ - 1829 - ] + "pullRequests": [1829] }, { "sha": "554cb45f7ff967884c9d1fdf706c20803d76a6df", "subject": "fix(managed): bound transient CIL by decoded instruction count (#1822)", "body": "fix(managed): bound transient CIL by decoded instruction count (#1822)\n\nfix(managed): charge transient CIL by decoded instructions", - "parents": [ - "ca11162d027a0d3e3b5a65a54825b00d5689fb80" - ], + "parents": ["ca11162d027a0d3e3b5a65a54825b00d5689fb80"], "authors": [ { "name": "jhuang-tw", @@ -2166,17 +1840,13 @@ } } ], - "pullRequests": [ - 1822 - ] + "pullRequests": [1822] }, { "sha": "d3e9ee5505251f760666bb8e1e6c295b6d6aedb2", "subject": "fix(ida): report a procedure IDA cannot resolve as invalid input (#1785)", "body": "fix(ida): report a procedure IDA cannot resolve as invalid input (#1785)\n\n* test(ida): expect a missing procedure to be reported as invalid input\n\n* test(ida): name the invalid_request code and its category for a missing procedure\n\n* fix(ida): report a procedure IDA cannot resolve as invalid input\n\n* test(ida): pin the missing-procedure issue shape and the lookups that stay unreadable\n\n* fix(ida): treat a lookup answer for another query as a producer fault\n\n* test(ida): expect an argument-independent issue path and pin legacy error replies and escaping\n\n* fix(ida): report a missing procedure without naming an argument path\n\n* test(ida): expect provider-derived selectors to stay producer faults in composed workflows\n\n* fix(ida): keep provider-derived procedure selectors out of the caller's input errors\n\n* test(ida): cover session forwarding, parameter hygiene and structured derived-node errors\n\n* docs(ida): describe when procedure resolution blames the caller", - "parents": [ - "554cb45f7ff967884c9d1fdf706c20803d76a6df" - ], + "parents": ["554cb45f7ff967884c9d1fdf706c20803d76a6df"], "authors": [ { "name": "Mykola Dementiev", @@ -2187,17 +1857,13 @@ } } ], - "pullRequests": [ - 1785 - ] + "pullRequests": [1785] }, { "sha": "7e2f79ab45a23ab844f89fb93c9cdf202230c73f", "subject": "fix(setup): retain symlinked data roots during uninstall (#1821)", "body": "fix(setup): retain symlinked data roots during uninstall (#1821)", - "parents": [ - "d3e9ee5505251f760666bb8e1e6c295b6d6aedb2" - ], + "parents": ["d3e9ee5505251f760666bb8e1e6c295b6d6aedb2"], "authors": [ { "name": "Yann Roberto", @@ -2208,17 +1874,13 @@ } } ], - "pullRequests": [ - 1821 - ] + "pullRequests": [1821] }, { "sha": "bcd350c365030a5d210208c0a8dc238302c43303", "subject": "fix(artifacts): preserve physical ZIP member identities (#1865)", "body": "fix(artifacts): preserve physical ZIP member identities (#1865)\n\nBind each ZIP occurrence independently of its filename so engine metadata\ninspection can read repeated resources without replacing retained sources.\nKeep logical-path collision checks in artifact inventory.\n\nCloses #1860\n\nCo-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>\nCo-authored-by: Kaoru0822 <208281322+kaoru0822-kitauji@users.noreply.github.com>", - "parents": [ - "7e2f79ab45a23ab844f89fb93c9cdf202230c73f" - ], + "parents": ["7e2f79ab45a23ab844f89fb93c9cdf202230c73f"], "authors": [ { "name": "Ysopwnable", @@ -2245,17 +1907,13 @@ } } ], - "pullRequests": [ - 1865 - ] + "pullRequests": [1865] }, { "sha": "96547d373fcdc672058b29774d6c634f4e9cc1bd", "subject": "docs: sync French, Indonesian and Italian READMEs with English (#1861)", "body": "docs: sync French, Indonesian and Italian READMEs with English (#1861)\n\nAdd the missing Bun update documentation (bun add --global install\nvariant, Bun 1.2.17 version requirement, bunx one-off command), the\nmissing WASM artifact table row, and the IDA provider mention (fr).\nAlso fix small translation issues: it Quick start heading, approvale\ntypo, fr moteur précis/filières wording.\n\nCo-authored-by: peter-research ", - "parents": [ - "bcd350c365030a5d210208c0a8dc238302c43303" - ], + "parents": ["bcd350c365030a5d210208c0a8dc238302c43303"], "authors": [ { "name": "Peter", @@ -2274,17 +1932,13 @@ } } ], - "pullRequests": [ - 1861 - ] + "pullRequests": [1861] }, { "sha": "fb94d9dde0ccda83ae520ac6fb22b1d283562cf3", "subject": "fix(errors): stop recommending retries for non-retryable failures (#1869)", "body": "fix(errors): stop recommending retries for non-retryable failures (#1869)\n\n* fix(errors): stop recommending retries for non-retryable failures\n\nUnreadable output and provider adapter failures project retryable=false,\nbut their standard message and remediation said \"Retry once\", so a\nfirmware run whose expected report was never published told callers to\nrepeat a non-retryable operation. Point those failures at `rea doctor`\nand the reported details instead, leaving retryability decided once by\nthe projected error code.\n\nFixes #1855\n\nCo-Authored-By: Claude Opus 5.5 \n\n* fix(errors): align Hopper remote failure guidance with retryability\n\nCo-Authored-By: Claude Opus 5.5 \n\n---------\n\nCo-authored-by: Claude Opus 5.5 ", - "parents": [ - "96547d373fcdc672058b29774d6c634f4e9cc1bd" - ], + "parents": ["96547d373fcdc672058b29774d6c634f4e9cc1bd"], "authors": [ { "name": "Kaoru0822", @@ -2303,17 +1957,13 @@ } } ], - "pullRequests": [ - 1869 - ] + "pullRequests": [1869] }, { "sha": "ea40f717b26392000f989a8b500f6774b5e85091", "subject": "fix(windows): bring the real Windows Ghidra verifiers up to date (#1863)", "body": "fix(windows): bring the real Windows Ghidra verifiers up to date (#1863)", - "parents": [ - "fb94d9dde0ccda83ae520ac6fb22b1d283562cf3" - ], + "parents": ["fb94d9dde0ccda83ae520ac6fb22b1d283562cf3"], "authors": [ { "name": "pablodiazjorge", @@ -2324,17 +1974,13 @@ } } ], - "pullRequests": [ - 1863 - ] + "pullRequests": [1863] }, { "sha": "efbc25fbea1b6ade2a284a4916644c791f83bf49", "subject": "fix(android): preserve executable static initializer evidence (#1876)", "body": "fix(android): preserve executable static initializer evidence (#1876)\n\nReturn the exact static initializer disassembly before Java projection can\nlose field assignments. Retain byte limits and representation markers, and\nverify fully folded and mixed initialization through the real CLI/MCP lane.\n\nCloses #1846\n\nCo-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>\nCo-authored-by: Kaoru0822 <208281322+kaoru0822-kitauji@users.noreply.github.com>", - "parents": [ - "ea40f717b26392000f989a8b500f6774b5e85091" - ], + "parents": ["ea40f717b26392000f989a8b500f6774b5e85091"], "authors": [ { "name": "Ysopwnable", @@ -2361,17 +2007,13 @@ } } ], - "pullRequests": [ - 1876 - ] + "pullRequests": [1876] }, { "sha": "fa9a7e5ec026c5a4e8426f0f36c2c4555be9c9f0", "subject": "fix(evidence): reject NUL bytes in subject and snapshot paths (#1873)", "body": "fix(evidence): reject NUL bytes in subject and snapshot paths (#1873)\n\nEvidence subject local_path and analysis-snapshot subject path accepted\nany string, so a caller-supplied inline Evidence record could carry a NUL\nbyte into the observation and bundle output even though every other\nselected-path boundary already refuses it. Both fields now use the shared\nNUL-free local-path schema: the snapshot path keeps its nonempty rule,\nand the Evidence local_path stays free to be empty because network\ncapture Evidence uses an empty path as a deliberate sentinel.\n\nlocalPath.ts now exports the NUL-free base schema separately so the\nnonempty rule is composed rather than duplicated; the advertised pattern\nand minLength for existing localPathStringSchema consumers are unchanged.\n\nValidation: new unit cases reject a NUL local_path and snapshot path while\nadmitting an empty Evidence path and an ordinary path; domain suite\n126 files / 1704 tests pass, evidence bundle and retained-evidence MCP\nboundaries pass, localToolContracts NUL harness passes, toolSchemaValidity\npasses with a regenerated catalog, typecheck, oxlint, oxfmt.", - "parents": [ - "efbc25fbea1b6ade2a284a4916644c791f83bf49" - ], + "parents": ["efbc25fbea1b6ade2a284a4916644c791f83bf49"], "authors": [ { "name": "Dery Ferdika", @@ -2382,17 +2024,13 @@ } } ], - "pullRequests": [ - 1873 - ] + "pullRequests": [1873] }, { "sha": "29d2624b3475586356c27f518bf6b823030268fb", "subject": "fix(ghidra): report progress while startup is pending (#1877)", "body": "fix(ghidra): report progress while startup is pending (#1877)\n\nForward Ghidra startup waiting observations through the existing progress reporter. Count emitted MCP status notifications and omit the unknown total to keep progress strictly increasing.\n\nVerified with focused tests, type/lint/docs checks, packaging and actual installed Windows timeout/recovery workflows. Native first-query speed and large-target memory remain open under #1065.\n\nCo-authored-by: Kaoru0822 <208281322+kaoru0822-kitauji@users.noreply.github.com>", - "parents": [ - "fa9a7e5ec026c5a4e8426f0f36c2c4555be9c9f0" - ], + "parents": ["fa9a7e5ec026c5a4e8426f0f36c2c4555be9c9f0"], "authors": [ { "name": "Ysopwnable", @@ -2411,17 +2049,13 @@ } } ], - "pullRequests": [ - 1877 - ] + "pullRequests": [1877] }, { "sha": "d3e83b089943e2941dace3546a068a59bd0a335e", "subject": "fix(test): wait for Hopper reconnect listener readiness (#1885)", "body": "fix(test): wait for Hopper reconnect listener readiness (#1885)\n\nThe socket path exists after bind but before listen. Wait up to two seconds\nfor the initial connection on ConnectionRefusedError, closing each failed\nsocket. Propagate other errors and keep reconnect attempts immediate.\nPreserve authentication, lost replies, expiry, cleanup and thread assertions.\n\nCo-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>\nCo-authored-by: Kaoru0822 <208281322+kaoru0822-kitauji@users.noreply.github.com>", - "parents": [ - "29d2624b3475586356c27f518bf6b823030268fb" - ], + "parents": ["29d2624b3475586356c27f518bf6b823030268fb"], "authors": [ { "name": "Ysopwnable", @@ -2448,17 +2082,13 @@ } } ], - "pullRequests": [ - 1885 - ] + "pullRequests": [1885] }, { "sha": "7c207c79512f6baa70f4ed9d7d5334ab2d62f3ac", "subject": "feat(native): admit raw binaries with caller-supplied architecture and entry (#1868)", "body": "feat(native): admit raw binaries with caller-supplied architecture and entry (#1868)\n\n* feat(native): admit raw binaries with caller-supplied architecture and entry\n\n* fix(native): honor raw-binary preparation and entry identity\n\n* fix(ghidra): stream raw snapshot attestation with cancellation\n\n* fix(native): preserve and validate raw lifecycle entries\n\n---------\n\nCo-authored-by: morluto <76467478+morluto@users.noreply.github.com>", - "parents": [ - "d3e83b089943e2941dace3546a068a59bd0a335e" - ], + "parents": ["d3e83b089943e2941dace3546a068a59bd0a335e"], "authors": [ { "name": "Matt Van Horn", @@ -2477,17 +2107,13 @@ } } ], - "pullRequests": [ - 1868 - ] + "pullRequests": [1868] }, { "sha": "499ac180115de7c9de3f1adc55159ffa6e9bb40e", "subject": "fix(web): reject NUL bytes in web tool local path inputs", "body": "fix(web): reject NUL bytes in web tool local path inputs\n\nFour web tools accepted caller-selected local paths as plain strings, so\na NUL byte passed contract validation and reached filesystem calls. The\nservices only checked isAbsolute, and isAbsolute admits a NUL, so the\nfailure surfaced later as a raw ERR_INVALID_ARG_VALUE instead of a named\ninput constraint. Every other local-input tool already refuses NUL through\nthe shared local-path schema, and the existing OS-invalid-local-input\nharness covers those but not these web tools.\n\ninspect_web_network_capture.capture_path, export_web_scripts.capture_path\nand output_directory, trace_web_source_location.manifest_path and\nsource_map.path, and trace_web_module_imports.manifest_path and\nimport_map.path now use localPathStringSchema. Each field already required\na nonempty string, so the advertised pattern and minLength stay the same\nand only the NUL refusal is added.\n\nValidation: a new schema test rejects NUL in all seven fields while\naccepting ordinary absolute paths; the four tools are added to the\nOS-invalid-local-input harness and reject NUL through the real advertised\nMCP contracts; typecheck, oxlint, oxfmt, and toolSchemaValidity with a\nregenerated catalog. Two webScriptExport boundary cases fail identically\nwith and without this change on this Windows host (symlink EPERM and\nprivate-runtime-root authority), so they are environmental.\n", - "parents": [ - "7c207c79512f6baa70f4ed9d7d5334ab2d62f3ac" - ], + "parents": ["7c207c79512f6baa70f4ed9d7d5334ab2d62f3ac"], "authors": [ { "name": "DeryFerd", @@ -2498,17 +2124,13 @@ } } ], - "pullRequests": [ - 1899 - ] + "pullRequests": [1899] }, { "sha": "b5b73019f946e5edc0df506c9f8f4bb28afa6590", "subject": "test(web): remove duplicate path schema cases", "body": "test(web): remove duplicate path schema cases\n", - "parents": [ - "499ac180115de7c9de3f1adc55159ffa6e9bb40e" - ], + "parents": ["499ac180115de7c9de3f1adc55159ffa6e9bb40e"], "authors": [ { "name": "morluto", @@ -2525,9 +2147,7 @@ "sha": "23d50ea3bec186b4459d36c04854a92276accdf1", "subject": "fix(managed): bind row budget charges to metadata identities (#1897)", "body": "fix(managed): bind row budget charges to metadata identities (#1897)\n\nCharge fixed row bookkeeping once per table and row within an admitted\nmetadata layout. Repeated owner lookups no longer permanently consume\ncapacity for temporary cursors; distinct rows and failed admissions retain\nthe existing representation limit and typed failure behavior.\n\nVerify repeated local attribute-constructor lookups through public CLI\nmetadata/member inspection and preserve the remaining capacity guards.\n\nCloses #1878\n\nCo-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>\nCo-authored-by: Kaoru0822 <208281322+kaoru0822-kitauji@users.noreply.github.com>", - "parents": [ - "7c207c79512f6baa70f4ed9d7d5334ab2d62f3ac" - ], + "parents": ["7c207c79512f6baa70f4ed9d7d5334ab2d62f3ac"], "authors": [ { "name": "Ysopwnable", @@ -2554,17 +2174,13 @@ } } ], - "pullRequests": [ - 1897 - ] + "pullRequests": [1897] }, { "sha": "38539a2f4a522243d6fc369ae34ef30e2a2f80cc", "subject": "fix(process): retain owned command cleanup diagnostics (#1907)", "body": "fix(process): retain owned command cleanup diagnostics (#1907)\n\nPreserve per-member verification failures and sweep uncertainty across\nsupervisor stop and owned-command failures. Report the observed token\nmismatch with its PID coordinates instead of implying PID reuse.\n\nKeep unresolved ownership unsignaled and retain the supervisor for a later\nverified stop. Exercise cancellation, timeout and cleanup revalidation with\nsource-owned process fixtures and cooperative settlement.\n\nCloses #1856\n\nCo-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>\nCo-authored-by: Kaoru0822 <208281322+kaoru0822-kitauji@users.noreply.github.com>", - "parents": [ - "23d50ea3bec186b4459d36c04854a92276accdf1" - ], + "parents": ["23d50ea3bec186b4459d36c04854a92276accdf1"], "authors": [ { "name": "Ysopwnable", @@ -2591,17 +2207,13 @@ } } ], - "pullRequests": [ - 1907 - ] + "pullRequests": [1907] }, { "sha": "898d5096f94fe1ed3ea7d091455e638cc7d23bfd", "subject": "perf(javascript): index source-map ignore lists per leaf (#1905)", "body": "perf(javascript): index source-map ignore lists per leaf (#1905)", - "parents": [ - "38539a2f4a522243d6fc369ae34ef30e2a2f80cc" - ], + "parents": ["38539a2f4a522243d6fc369ae34ef30e2a2f80cc"], "authors": [ { "name": "cyanseek", @@ -2612,17 +2224,13 @@ } } ], - "pullRequests": [ - 1905 - ] + "pullRequests": [1905] }, { "sha": "176941700118cc33c86e07373cd6950f30548386", "subject": "fix(firmware): name missing extractor dependencies in partial extraction (#1879)", "body": "fix(firmware): name missing extractor dependencies in partial extraction (#1879)\n\nUnblob reports a missing external extractor as an\nExtractorDependencyNotFoundReport nested inside a chunk or multi-file\nreport, and normalizeUnblobReport forwarded that value verbatim into\ndiagnostics as { input_path, report }. A caller that reached partial\ncoverage therefore had to decode the raw producer report to learn which\nextractor was absent and at which stage, even though the report already\nnames the dependencies.\n\nExtraction diagnostics now normalize those entries: the named\ndependencies are collected from the report and any nested value, the\nproducing handler is recorded as the stage, and the original report stays\nretained for provenance. Entries without a dependency report keep their\nprevious shape.\n\nValidation: FirmwareReports unit cases cover the chunk-nested and\nmulti-file-nested dependency reports and the retained raw report;\nfirmware suite passes; typecheck, oxlint and oxfmt on changed files. Real\nUnblob extraction is unverified here because it needs the external\nextractor stack.", - "parents": [ - "898d5096f94fe1ed3ea7d091455e638cc7d23bfd" - ], + "parents": ["898d5096f94fe1ed3ea7d091455e638cc7d23bfd"], "authors": [ { "name": "Dery Ferdika", @@ -2633,17 +2241,13 @@ } } ], - "pullRequests": [ - 1879 - ] + "pullRequests": [1879] }, { "sha": "9b3e59804db71072ed023f109342f96063c57b45", "subject": "fix(javascript): prove namespace interop before attributing Electron APIs (#1857)", "body": "fix(javascript): prove namespace interop before attributing Electron APIs (#1857)\n\n* fix(javascript): prove Electron module namespace conversion\n\n* refactor(javascript): share AST child field metadata\n\nCo-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>\nCo-authored-by: Kaoru0822 <208281322+kaoru0822-kitauji@users.noreply.github.com>\n\n* fix(javascript): retain destructured intrinsic writes\n\nShare one pattern-target walker across lexical definitions, member mutation\ntracking and Electron identity writes. Keep overwritten globals unresolved\nwithout treating property keys or shadowed locals as global replacements.\n\nCo-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>\nCo-authored-by: Kaoru0822 <208281322+kaoru0822-kitauji@users.noreply.github.com>\n\n* fix(javascript): preserve intrinsic projections and fresh target identity\n\nResolve known mutators through static binding projections and prove stable\nidentifier chains to fresh literals before widening unknown mutation targets.\nKeep reassigned, uninitialized and member-projected targets conservative.\nCover both review regressions through source tests and inert CLI/MCP fixtures.\n\nCo-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>\nCo-authored-by: Kaoru0822 <208281322+kaoru0822-kitauji@users.noreply.github.com>\n\n* fix(javascript): retain fresh function and class target identity\n\nRecognize stable local function, undecorated class and RegExp targets before\nwidening intrinsic mutations. Keep decorated classes opaque because their\nbinding value can be replaced, and preserve class-initialization writes.\nCover fresh targets and replacement decorators in inert CLI/MCP fixtures.\n\nCo-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>\nCo-authored-by: Kaoru0822 <208281322+kaoru0822-kitauji@users.noreply.github.com>\n\n* fix(javascript): preserve intrinsic alias capture timing\n\nValidate each alias read after initialization and retain the original function capture across copies. Share declaration initializer facts with RPC and Electron analysis, including class declarations used for fresh-target identity. Accept single-statement control blocks while keeping lexical roles and added operations checked. Cover the capture regressions through inert source and public CLI/MCP workflows.\n\n* fix(javascript): respect hoisted fresh function declarations\n\nFunction declarations provide fresh targets before their textual position. Retain initialization-order checks for variable and class values, including aliases. Cover the reviewed regression with source controls and the public CLI/MCP fixture.\n\n* fix(javascript): preserve proven interop result projections\n\n* fix(javascript): retain stable declarations and bound intrinsic writes\n\nKeep repeated variable declarations with one unconditional initializer while\nrejecting assignments, conditional initialization and multiple values.\nNormalize known intrinsic calls, aliases and bound argument prefixes at the\nsemantic owner, retaining opaque targets without tainting unused bindings or\nfresh local objects. Cover both regressions through source and CLI/MCP tests.\n\nCo-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>\nCo-authored-by: Kaoru0822 <208281322+kaoru0822-kitauji@users.noreply.github.com>\n\n* fix(javascript): retain bound intrinsic mutation effects\n\n* fix(javascript): preserve bound receivers for intrinsic invocation\n\n* fix(javascript): prove generic binding and invocation effects\n\n* fix(javascript): retain Reflect set receiver effects\n\n---------\n\nCo-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>\nCo-authored-by: Kaoru0822 <208281322+kaoru0822-kitauji@users.noreply.github.com>\nCo-authored-by: morluto <76467478+morluto@users.noreply.github.com>", - "parents": [ - "176941700118cc33c86e07373cd6950f30548386" - ], + "parents": ["176941700118cc33c86e07373cd6950f30548386"], "authors": [ { "name": "Ysopwnable", @@ -2678,17 +2282,13 @@ } } ], - "pullRequests": [ - 1857 - ] + "pullRequests": [1857] }, { "sha": "7a0140b4aa43276368058ab98826b77e040ea14f", "subject": "fix(android): bound inline search Evidence with retained inventory provenance (#1890)", "body": "fix(android): bound inline search Evidence with retained inventory provenance (#1890)\n\nFocused and zero-match search_android_classes responses embedded every\nexamined class name: JadxSession records each raw list_classes page into\nobserved calls, those calls ride into Evidence raw_result on the\nregistration path, and the complete inline Evidence is serialized into\nevery tool response (issue #1850: 382,435 bytes for one match).\n\nWhen the server session retains Evidence, record the complete raw-call\nrecord first, then deliver a summary Evidence that keeps the pagination\naudit (totals, offsets, page sizes, elided item counts), the unchanged\nnormalized matches and truthful coverage metadata, and links the\nretained complete inventory by Evidence ID. Sessions without retention\nkeep the complete inline delivery, so complete CLI JSON output is\nunchanged and no provenance is discarded.\n\n🤖 Generated with AI assistance (disclosure voluntary per repo policy)", - "parents": [ - "9b3e59804db71072ed023f109342f96063c57b45" - ], + "parents": ["9b3e59804db71072ed023f109342f96063c57b45"], "authors": [ { "name": "akushonkamen", @@ -2699,17 +2299,13 @@ } } ], - "pullRequests": [ - 1890 - ] + "pullRequests": [1890] }, { "sha": "0b7fc40eeef03b06de08d886572c2862331d8947", "subject": "fix(contracts): mark foreign execution and device mutation destructive (#1904)", "body": "fix(contracts): mark foreign execution and device mutation destructive (#1904)\n\nMCP annotations derived destructiveHint only from mayDiscardData, so tools\nthat run the analysis target or a caller-selected executable\n(capture_process_scenario, observe_native_calls) and tools that change an\nattached Android device (install/uninstall/push/start/stop) advertised\ndestructiveHint: false.\n\nAdd explicit executesForeignCode and mutatesDevice effect flags, audit them\nacross all 170 tool effect records, and derive\ndestructiveHint = mayDiscardData || executesForeignCode || mutatesDevice.\nreadOnlyHint semantics are unchanged.\n\nHopper/Ghidra metadata writers (set_address_name, set_addresses_names,\nset_bookmark, set_comment, set_inline_comment, annotate_native_function)\ncan replace or clear existing analyst names and comments, so they now\ndeclare mayDiscardData as well.\n\nA contract test pins the destructive set and requires every tool whose\ndescription mentions running, launching, executing, starting, installing or\nuninstalling to declare one of the new flags or carry a reasoned exception,\nso wording and effects cannot silently drift. The binary_session effects\noutput schema carries the new flags.", - "parents": [ - "7a0140b4aa43276368058ab98826b77e040ea14f" - ], + "parents": ["7a0140b4aa43276368058ab98826b77e040ea14f"], "authors": [ { "name": "Lluís Ariño", @@ -2720,17 +2316,13 @@ } } ], - "pullRequests": [ - 1904 - ] + "pullRequests": [1904] }, { "sha": "e4ac7bbfc2f8c631ba1c60f507d85253e122d4c8", "subject": "fix: order remaining outputs independently of host locale (#1867)", "body": "fix: order remaining outputs independently of host locale (#1867)\n\n* fix: order remaining outputs independently of host locale\n\nString.prototype.localeCompare without a pinned collation follows the\nhost's ICU default locale, so the same input could be ordered differently\non different machines. 614fb768 moved canonical domain projections to\ncompareUnicodeCodePoints; provider, application, catalog, and setup\norderings still used locale collation.\n\nOrder every remaining source site by Unicode code point, including Mach-O\nsymbols, firmware extraction paths, ASAR entries (previously pinned to\n\"en\" collation), evidence ID sets, browser and Electron target, script,\nand resource inventories, reconstruction obligations, capability and\nprovider listings, and setup environment details.\n\nThe current tool and prompt catalog names order identically under both\ncomparators, so the catalog identity digest is unchanged.\n\n* fix(artifacts): order ASAR entries by their portable path\n\n@electron/asar lists host-spelled paths, so code-point order over the raw\nspelling still differed by host: \"a\\b\" sorts after \"a0\" on Windows while\n\"a/b\" sorts before it on POSIX. Pair each listing with its portable\narchive path once, order by that path, and keep the host spelling for\n@electron/asar calls and adapter keys.", - "parents": [ - "0b7fc40eeef03b06de08d886572c2862331d8947" - ], + "parents": ["0b7fc40eeef03b06de08d886572c2862331d8947"], "authors": [ { "name": "Itoje Dollar", @@ -2741,17 +2333,13 @@ } } ], - "pullRequests": [ - 1867 - ] + "pullRequests": [1867] }, { "sha": "097f0d54afceb3ce61dbaa24dd6736658d1fce06", "subject": "perf(javascript): skip nested callables during fingerprint traversal (#1871)", "body": "perf(javascript): skip nested callables during fingerprint traversal (#1871)", - "parents": [ - "e4ac7bbfc2f8c631ba1c60f507d85253e122d4c8" - ], + "parents": ["e4ac7bbfc2f8c631ba1c60f507d85253e122d4c8"], "authors": [ { "name": "cyanseek", @@ -2762,17 +2350,13 @@ } } ], - "pullRequests": [ - 1871 - ] + "pullRequests": [1871] }, { "sha": "e8491e023a255f790ae9850225084d7495e9ade0", "subject": "fix(artifacts): mark Windows launchable files as host executables (#1824)", "body": "fix(artifacts): mark Windows launchable files as host executables (#1824)\n\nHost-file occurrences derived `executable` from POSIX execute bits, which\nWindows never reports, so every Windows host file (including PE .exe\nimages classified as executable) reported `executable: false`.\n\nDerive the fact once through hostExecutable: POSIX hosts keep the execute\nbits; Windows marks regular files with the extensions it launches directly\n(.exe, .com, .bat, .cmd), without reading the ambient PATHEXT.\n\nFixes #1819\n\nCo-authored-by: morluto <76467478+morluto@users.noreply.github.com>", - "parents": [ - "097f0d54afceb3ce61dbaa24dd6736658d1fce06" - ], + "parents": ["097f0d54afceb3ce61dbaa24dd6736658d1fce06"], "authors": [ { "name": "Itoje Dollar", @@ -2791,17 +2375,13 @@ } } ], - "pullRequests": [ - 1824 - ] + "pullRequests": [1824] }, { "sha": "d28b41ea4e93bb4c4d360a3bf2291ca83bb2b378", "subject": "feat(javascript): resolve exact package import aliases (#1862)", "body": "feat(javascript): resolve exact package import aliases (#1862)\n\n* feat(javascript): resolve exact package import aliases\n\nResolve exact #alias specifiers against the importer's enclosing\npackage.json imports map using the shared condition, array, and null\ntarget selection. Nested packages keep their own maps; missing keys,\nexplicit nulls, and out-of-scope aliases report a precise reason.\nWildcard, recursive, and external-package import targets remain\nunresolved.\n\n* fix(javascript): keep nested import aliases in CLI graphs\n\nBound nested #alias requires produce application-graph require edges\nfrom the enclosing package. Node reports MODULE_NOT_FOUND when a nested\npackage.json has no imports field, without inheriting the ancestor map.\n\n* fix(javascript): resolve literal package import keys before path admission\n\n* fix(javascript): preserve import keys and invalid-target fallback\n\n* fix(javascript): preserve unmatched package target arrays\n\n* fix(javascript): retain package target refusal evidence\n\n* test(browser): match real verifier startup budget\n\n---------\n\nCo-authored-by: morluto <76467478+morluto@users.noreply.github.com>", - "parents": [ - "e8491e023a255f790ae9850225084d7495e9ade0" - ], + "parents": ["e8491e023a255f790ae9850225084d7495e9ade0"], "authors": [ { "name": "Matt Van Horn", @@ -2820,17 +2400,13 @@ } } ], - "pullRequests": [ - 1862 - ] + "pullRequests": [1862] }, { "sha": "9d8e42bdd6f1bf8a984da1e06e1d76a1dbb9a7ed", "subject": "fix(javascript): follow actual receivers in nested intrinsic calls (#1912)", "body": "fix(javascript): follow actual receivers in nested intrinsic calls (#1912)\n\nConsume arguments per generic function invocation rather than property-chain\ndepth. Preserve the callable receiver through call/apply, Reflect.apply and\nbound invocation. Cover nested mutations and fresh targets through source\nanalysis and inert production CLI/MCP fixtures.\n\nFixes #1909.\n\nCo-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>\nCo-authored-by: Kaoru0822 <208281322+kaoru0822-kitauji@users.noreply.github.com>\nCo-authored-by: morluto <76467478+morluto@users.noreply.github.com>", - "parents": [ - "d28b41ea4e93bb4c4d360a3bf2291ca83bb2b378" - ], + "parents": ["d28b41ea4e93bb4c4d360a3bf2291ca83bb2b378"], "authors": [ { "name": "Ysopwnable", @@ -2865,17 +2441,13 @@ } } ], - "pullRequests": [ - 1912 - ] + "pullRequests": [1912] }, { "sha": "486b56724c4eaba50719177bcb9eae84d6907297", "subject": "fix(browser): compare only observed HTTP response facts", "body": "fix(browser): compare only observed HTTP response facts\n", - "parents": [ - "9d8e42bdd6f1bf8a984da1e06e1d76a1dbb9a7ed" - ], + "parents": ["9d8e42bdd6f1bf8a984da1e06e1d76a1dbb9a7ed"], "authors": [ { "name": "morluto", @@ -2892,9 +2464,7 @@ "sha": "1dfb933e47db0156cf1cb61f28715b81e740c57b", "subject": "fix(javascript): share TypeScript emitted import resolution", "body": "fix(javascript): share TypeScript emitted import resolution\n", - "parents": [ - "486b56724c4eaba50719177bcb9eae84d6907297" - ], + "parents": ["486b56724c4eaba50719177bcb9eae84d6907297"], "authors": [ { "name": "morluto", @@ -2911,9 +2481,7 @@ "sha": "bb508134efbba392a404b651d6ec05be8b7eac1e", "subject": "fix(setup): verify independently selected skill destinations", "body": "fix(setup): verify independently selected skill destinations\n", - "parents": [ - "1dfb933e47db0156cf1cb61f28715b81e740c57b" - ], + "parents": ["1dfb933e47db0156cf1cb61f28715b81e740c57b"], "authors": [ { "name": "morluto", @@ -2930,9 +2498,7 @@ "sha": "f598bab488e38c378d69346fa3c106f9e18529ed", "subject": "fix(apple): preserve ARM64E X1 architecture identity", "body": "fix(apple): preserve ARM64E X1 architecture identity\n", - "parents": [ - "bb508134efbba392a404b651d6ec05be8b7eac1e" - ], + "parents": ["bb508134efbba392a404b651d6ec05be8b7eac1e"], "authors": [ { "name": "morluto", @@ -2949,9 +2515,7 @@ "sha": "2976fac30d4088c1f1ba383261eb3eff5e95bce6", "subject": "test(architecture): consolidate import boundary verification", "body": "test(architecture): consolidate import boundary verification\n", - "parents": [ - "f598bab488e38c378d69346fa3c106f9e18529ed" - ], + "parents": ["f598bab488e38c378d69346fa3c106f9e18529ed"], "authors": [ { "name": "morluto", @@ -2968,9 +2532,7 @@ "sha": "369cd3dfdc47709cc34d01c50f645a885c70ded7", "subject": "fix(javascript): normalize package URLs before array selection (#1916)", "body": "fix(javascript): normalize package URLs before array selection (#1916)", - "parents": [ - "2976fac30d4088c1f1ba383261eb3eff5e95bce6" - ], + "parents": ["2976fac30d4088c1f1ba383261eb3eff5e95bce6"], "authors": [ { "name": "morluto", @@ -2981,17 +2543,13 @@ } } ], - "pullRequests": [ - 1916 - ] + "pullRequests": [1916] }, { "sha": "a95795c6ed3cb149e03460f4c818ad12e0c670d9", "subject": "fix(managed): resolve member ownership through pointer tables (#1886)", "body": "fix(managed): resolve member ownership through pointer tables (#1886)\n\nCo-authored-by: LouisChen <3361008+chqcjq@users.noreply.github.com>", - "parents": [ - "369cd3dfdc47709cc34d01c50f645a885c70ded7" - ], + "parents": ["369cd3dfdc47709cc34d01c50f645a885c70ded7"], "authors": [ { "name": "LouisChen", @@ -3010,17 +2568,13 @@ } } ], - "pullRequests": [ - 1886 - ] + "pullRequests": [1886] }, { "sha": "f8513a42dc44451a621127f06edde5d38bc93f69", "subject": "fix(javascript): keep TypeScript substitution out of runtime paths", "body": "fix(javascript): keep TypeScript substitution out of runtime paths\n", - "parents": [ - "a95795c6ed3cb149e03460f4c818ad12e0c670d9" - ], + "parents": ["a95795c6ed3cb149e03460f4c818ad12e0c670d9"], "authors": [ { "name": "morluto", @@ -3037,9 +2591,7 @@ "sha": "6407718f3020a34cc087163492e3f9a465e2e841", "subject": "test(managed): use the current attribute fixture contract", "body": "test(managed): use the current attribute fixture contract\n", - "parents": [ - "f8513a42dc44451a621127f06edde5d38bc93f69" - ], + "parents": ["f8513a42dc44451a621127f06edde5d38bc93f69"], "authors": [ { "name": "morluto", @@ -3056,9 +2608,7 @@ "sha": "dfe31172ca0a090be3f40bc134f54d69c08e31d8", "subject": "fix(test): audit static Wasm and Harmony tool wording (#1917)", "body": "fix(test): audit static Wasm and Harmony tool wording (#1917)\n\nAccount for explicit nonexecution wording in the existing tool-effects audit.\nWABT validates and decompiles the module; Harmony projects inventory Evidence.\nRetain declared effects and stale-exception checks.\n\nCo-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>\nCo-authored-by: Kaoru0822 <208281322+kaoru0822-kitauji@users.noreply.github.com>\nCo-authored-by: morluto <76467478+morluto@users.noreply.github.com>", - "parents": [ - "6407718f3020a34cc087163492e3f9a465e2e841" - ], + "parents": ["6407718f3020a34cc087163492e3f9a465e2e841"], "authors": [ { "name": "Ysopwnable", @@ -3093,17 +2643,13 @@ } } ], - "pullRequests": [ - 1917 - ] + "pullRequests": [1917] }, { "sha": "601814ed0e4a0c57d6e045da0e6cf8ee2f29bb7f", "subject": "fix(hopper): preserve observed process failures across requests (#1927)", "body": "fix(hopper): preserve observed process failures across requests (#1927)\n\n* fix(hopper): preserve observed process failures across requests\n\n* test(hopper): consolidate retained cleanup and recover failed helper fixtures\n\n* docs(hopper): clarify first-use demo prompt and startup recovery", - "parents": [ - "dfe31172ca0a090be3f40bc134f54d69c08e31d8" - ], + "parents": ["dfe31172ca0a090be3f40bc134f54d69c08e31d8"], "authors": [ { "name": "morluto", @@ -3114,17 +2660,13 @@ } } ], - "pullRequests": [ - 1927 - ] + "pullRequests": [1927] }, { "sha": "c32d84622fb3952823c6cfc25c557aec08c1788c", "subject": "test(clients): verify native Claude Code integration on Windows (#1926)", "body": "test(clients): verify native Claude Code integration on Windows (#1926)\n\nThe Claude Code client lane asserted POSIX, although nothing in it depends\non it. Remove the assertion, tell Windows users to select claude.exe when\nthe default command cannot be spawned (npm installs put only a claude.cmd\nshim on PATH), and record 2.1.296 as verified on native Windows in\ndocs/testing.md.\n\nFixes #1923\n\nCo-authored-by: Claude Opus 5.5 ", - "parents": [ - "601814ed0e4a0c57d6e045da0e6cf8ee2f29bb7f" - ], + "parents": ["601814ed0e4a0c57d6e045da0e6cf8ee2f29bb7f"], "authors": [ { "name": "pablodiazjorge", @@ -3143,17 +2685,13 @@ } } ], - "pullRequests": [ - 1926 - ] + "pullRequests": [1926] }, { "sha": "0485cd3bce29c977bae05a4fdce5436f3e3d7913", "subject": "fix(javascript): preserve graphs within parent capacity (#1921)", "body": "fix(javascript): preserve graphs within parent capacity (#1921)\n\nReserve the next sequential static checkpoint using its protocol size and\nexisting retained-expansion accounting instead of 80% of the parent budget.\nPreserve total/live heap protections and explain parent admission failures\nwith effective capacity, retention estimates and usable retained facts.\n\nFixes #1911\n\nCo-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>\nCo-authored-by: Kaoru0822 <208281322+kaoru0822-kitauji@users.noreply.github.com>", - "parents": [ - "c32d84622fb3952823c6cfc25c557aec08c1788c" - ], + "parents": ["c32d84622fb3952823c6cfc25c557aec08c1788c"], "authors": [ { "name": "Ysopwnable", @@ -3180,17 +2718,13 @@ } } ], - "pullRequests": [ - 1921 - ] + "pullRequests": [1921] }, { "sha": "fb43dd9716fe113effa14a03b603b72ca7d9097c", "subject": "fix(managed): honor metadata ExtraData before table decoding (#1893)", "body": "fix(managed): honor metadata ExtraData before table decoding (#1893)\n\nCo-authored-by: LouisChen <3361008+chqcjq@users.noreply.github.com>\nCo-authored-by: morluto <76467478+morluto@users.noreply.github.com>", - "parents": [ - "0485cd3bce29c977bae05a4fdce5436f3e3d7913" - ], + "parents": ["0485cd3bce29c977bae05a4fdce5436f3e3d7913"], "authors": [ { "name": "LouisChen", @@ -3217,17 +2751,13 @@ } } ], - "pullRequests": [ - 1893 - ] + "pullRequests": [1893] }, { "sha": "b07e54a10e66319d90815313fae93350257e1655", "subject": "docs(readme): remove CI status badge", "body": "docs(readme): remove CI status badge\n", - "parents": [ - "fb43dd9716fe113effa14a03b603b72ca7d9097c" - ], + "parents": ["fb43dd9716fe113effa14a03b603b72ca7d9097c"], "authors": [ { "name": "morluto", @@ -3244,9 +2774,7 @@ "sha": "3298219d8cd905897ec9a96bf639602a273d4a9b", "subject": "docs(readme): remove CI badges from translations", "body": "docs(readme): remove CI badges from translations\n", - "parents": [ - "b07e54a10e66319d90815313fae93350257e1655" - ], + "parents": ["b07e54a10e66319d90815313fae93350257e1655"], "authors": [ { "name": "morluto", @@ -3263,9 +2791,7 @@ "sha": "3b490a743fd56a8a27b1356f7b2d1284db8848ef", "subject": "test(apple): consolidate keyed archive integer verification (#1933)", "body": "test(apple): consolidate keyed archive integer verification (#1933)", - "parents": [ - "3298219d8cd905897ec9a96bf639602a273d4a9b" - ], + "parents": ["3298219d8cd905897ec9a96bf639602a273d4a9b"], "authors": [ { "name": "morluto", @@ -3276,17 +2802,13 @@ } } ], - "pullRequests": [ - 1933 - ] + "pullRequests": [1933] }, { "sha": "d0edeec1009f1149956ee2a95dc5941aff8f78b5", "subject": "test(native): skip the inaccessible-directory diagnostic as root (#1900)", "body": "test(native): skip the inaccessible-directory diagnostic as root (#1900)\n\nThe artifact directory diagnostic makes a bundle member unreadable with\nmode 000 and expects inventory_artifact to report its path and EACCES.\nRoot ignores the mode, so the read succeeds and the test fails when the\nsuite runs as uid 0 (for example in a container). Skip it there with the\nsame process.getuid?.() === 0 condition the DMG EACCES diagnostic uses.", - "parents": [ - "3b490a743fd56a8a27b1356f7b2d1284db8848ef" - ], + "parents": ["3b490a743fd56a8a27b1356f7b2d1284db8848ef"], "authors": [ { "name": "Lluís Ariño", @@ -3297,9 +2819,7 @@ } } ], - "pullRequests": [ - 1900 - ] + "pullRequests": [1900] }, { "sha": "0b2aa6953123ef006a1fa9d4651552b7f18eeb70", @@ -3325,9 +2845,7 @@ "sha": "b6651cb99fba8fec3fd3efcb6794ae32b8a1525d", "subject": "fix(javascript): retain completed facts through cancellation (#1934)", "body": "fix(javascript): retain completed facts through cancellation (#1934)", - "parents": [ - "0b2aa6953123ef006a1fa9d4651552b7f18eeb70" - ], + "parents": ["0b2aa6953123ef006a1fa9d4651552b7f18eeb70"], "authors": [ { "name": "morluto", @@ -3338,17 +2856,13 @@ } } ], - "pullRequests": [ - 1934 - ] + "pullRequests": [1934] }, { "sha": "72489a9445299f695d793f004fed88e1bac0a557", "subject": "fix(javascript): report available parent result budget in coverage limits (#1915)", "body": "fix(javascript): report available parent result budget in coverage limits (#1915)\n\n* fix(javascript): size the future static reserve by remaining sources\n\nThe parent reserved 80% of its result budget for future static facts\nwhenever any source remained, so one tiny later file could discard an\nearlier file's completed semantic graph. Reserve at most one bounded\nstatic checkpoint's retained size per remaining source, within the same\nshared pool, so many remaining sources keep the previous protection.\nParent-budget rejections now report the effective admission budget and\nexplain that the CLI/MCP process heap, not max_heap_mb, bounds them.\n\nRefs #1911\n\nCo-Authored-By: Claude Opus 5.5 \n\n* fix(javascript): make parent budget remediation and its test runtime-aware\n\nCo-Authored-By: Claude Opus 5.5 \n\n* fix(javascript): suggest a concrete parent heap size in remediation\n\nCo-Authored-By: Claude Opus 5.5 \n\n* fix(javascript): let parent budget rejections state their retained facts\n\nCo-Authored-By: Claude Opus 5.5 \n\n---------\n\nCo-authored-by: Claude Opus 5.5 ", - "parents": [ - "b6651cb99fba8fec3fd3efcb6794ae32b8a1525d" - ], + "parents": ["b6651cb99fba8fec3fd3efcb6794ae32b8a1525d"], "authors": [ { "name": "Kaoru0822", @@ -3367,17 +2881,13 @@ } } ], - "pullRequests": [ - 1915 - ] + "pullRequests": [1915] }, { "sha": "0f4992fb9e5bfe1fafe75c35b7f20ad411595573", "subject": "perf(ghidra): compile bundle activator with bridge scripts (#1931)", "body": "perf(ghidra): compile bundle activator with bridge scripts (#1931)\n\nInclude the no-op OSGi lifecycle class in the packaged source bundle so\nGhidra does not generate and compile an extra activator afterward.\nCheck the selected activator in the real packaged Windows verifier.\n\nCo-authored-by: Kaoru0822 <208281322+kaoru0822-kitauji@users.noreply.github.com>", - "parents": [ - "72489a9445299f695d793f004fed88e1bac0a557" - ], + "parents": ["72489a9445299f695d793f004fed88e1bac0a557"], "authors": [ { "name": "Ysopwnable", @@ -3396,17 +2906,13 @@ } } ], - "pullRequests": [ - 1931 - ] + "pullRequests": [1931] }, { "sha": "d802304c542b20bc86e22cc492718e89a8a5579b", "subject": "fix(install): describe automatic setup and guard truncated downloads (#1902)", "body": "fix(install): describe automatic setup and guard truncated downloads (#1902)\n\n* fix(install): describe automatic setup and guard truncated downloads\n\nThe help text said the installer only installs the CLI and that\n`rea setup` must be run separately, but the installer starts\n`rea setup` interactively whenever a terminal is available. Describe\nthat behaviour and the --no-setup/--no-prompt opt-out.\n\nWrap the installer body in `main` and call it on the last line, so a\ntruncated `curl | bash` download fails to parse instead of executing a\npartial script. Behaviour is otherwise unchanged.\n\nAdd an installer scenario that runs a copy truncated right after the\nnpm install line and requires that it prints nothing and never invokes\nnpm; it fails against the previous script.\n\nValidation: bash -n, shellcheck 0.10.0, installScript boundary tests.\n\n* fix(install): require the closing token before running main\n\nWrapping the installer in main() kept a truncated download from running\na partial body, but the last line was a bare `main \"$@\"`. If the piped\ndownload stopped right after `main` (or `main `), bash saw a complete\ncommand at EOF and ran main with no positional parameters. Under the\ndocumented `curl ... | bash -s -- --dry-run` (or --version / --no-setup)\npath that silently dropped the caller's flags, so a dry run could resolve\nthe latest release, run npm, and start setup.\n\nThe call now sits in a brace group:\n\n {\n main \"$@\"\n exit $?\n }\n\nBash does not run the group until it has read the closing brace, so\nevery truncation inside it is a syntax error and nothing executes; a\ntruncation before the group leaves only function definitions. A comment\nin install.sh records why the bare call is not enough.\n\nValidation: a new boundary test pipes install.sh to `bash -s --\n--dry-run` truncated at every byte offset from the end of main() to EOF\nand asserts that npm and the rea binary are never invoked; offsets\ninside the group must exit non-zero with a bash parse error and no\nstdout, offsets before it must print nothing, and the complete group\nmust finish the dry run. Reproduced the original bug by cutting the old\nscript after `main`: the dry run invoked npm install. `bash -n` and\nshellcheck 0.11.0 are clean.\n\n* fix(install): wrap the whole script in the truncation guard\n\nThe previous guard only wrapped the final `main \"$@\"` invocation, so the\npreamble streamed on the `curl ... | bash` path before any incomplete\ncompound command was open. A download cut off right after the bytes\n`set` reached EOF with a complete, argument-less `set`, which prints every\nshell variable, so inherited tokens could reach stdout.\n\nThe brace group now opens on line 2, directly after the shebang, and\ncloses on the last line, enclosing `set -euo pipefail`, the constants, the\nfunctions and the final `main \"$@\"` / `exit $?`. Bash must therefore read\nthe whole file before running anything; any earlier cut is a syntax error\nat EOF. `set -euo pipefail` still applies inside the group (checked\nmanually for `false`, an unbound variable, and a failing function body),\nand shellcheck 0.11.0 and `bash -n` are clean.\n\nThe truncation test now pipes every prefix of install.sh, from byte 0 to\nEOF (about 6,100 cuts, run 16 at a time with a minimal environment that\nincludes a sentinel variable), into `bash -s -- --dry-run`. Before the\ngroup opens it must exit quietly; inside the group it must fail with a\nsyntax error; in every case stdout stays empty and neither npm nor rea is\ninvoked. Only the complete script performs the dry run.", - "parents": [ - "0f4992fb9e5bfe1fafe75c35b7f20ad411595573" - ], + "parents": ["0f4992fb9e5bfe1fafe75c35b7f20ad411595573"], "authors": [ { "name": "Lluís Ariño", @@ -3417,17 +2923,13 @@ } } ], - "pullRequests": [ - 1902 - ] + "pullRequests": [1902] }, { "sha": "e59db2f5deefb1c5e74f01e19631f6d75cfaa25a", "subject": "fix(session): verify retained client liveness on open fast path", "body": "fix(session): verify retained client liveness on open fast path\n\nVerify retained provider operation health before reusing the same target and profile. Retire failed Hopper clients through existing owned cleanup, preserve healthy reuse and cancellation, and start replacement children lazily on the next query.\n\nRefs #1719. Actual headless Linux Hopper child-death/reopen recovery and 85 related tests passed against the current-main merge tree; Ghidra/IDA liveness and the historical snapshot report remain outside this verification.\n\nCo-authored-by: sx4im \nCo-authored-by: N0zoM1z0 <161784452+N0zoM1z0@users.noreply.github.com>\nCo-authored-by: Kaoru0822 <208281322+kaoru0822-kitauji@users.noreply.github.com>", - "parents": [ - "d802304c542b20bc86e22cc492718e89a8a5579b" - ], + "parents": ["d802304c542b20bc86e22cc492718e89a8a5579b"], "authors": [ { "name": "Saim Shafique", @@ -3462,17 +2964,13 @@ } } ], - "pullRequests": [ - 1776 - ] + "pullRequests": [1776] }, { "sha": "12ee785e5e61132898adecf9424ce6706a2e754a", "subject": "feat(website): follow the system dark mode and fix small-screen text (#1894)", "body": "feat(website): follow the system dark mode and fix small-screen text (#1894)\n\n* fix(website): keep text inside small screens and tidy small type and spacing\n\nFrom a layout audit of the built pages:\n\n- Long terminal prompts and code-header buttons wrap instead of being cut\n off at 320px (WCAG 1.4.10).\n- Headings and table cells break long words, so the 1.4.12 text-spacing\n test no longer widens pages past 320px.\n- Header and footer links get a 24px minimum height (2.5.8).\n- Labels that rendered under 12px now render at 12px or more, and inline\n code never drops under 0.75rem.\n- The home page's hero and definition rows share one column gap and align\n on the first baseline, and stacked boxes share one corner size.\n- Highlight chips get room around the text, and the active run in a step\n listing is one band instead of a box per line.\n\nColors are unchanged.\n\n🤖 Generated with Claude Code (Sonnet 5.5) 🦊\n\n* feat(website): follow the system dark mode\n\nThe site was light only, so a reader with a dark system still got a white\npage. Add one prefers-color-scheme: dark block to the stylesheet that swaps\nthe six color variables to Catppuccin Mocha (MIT) and overrides the fixed\ncolors that would break on a dark page: selection, buttons, tinted\nhighlights, flow nodes and arrows, and a visible border on the agent\nterminal.\n\nAdd a dark theme-color tag beside the light one in the page template and\nthe 17 pages, and a Dark column to the style guide's color table.\n\nLight colors are unchanged. The SVG figures follow in the next commit; the\nblog page's inline strokes, the dinosaur game and the social card are left\nas they are.\n\n🤖 Generated with Claude Code (Sonnet 5.5) 🦊\n\n* feat(website): give the five SVG figures a dark scheme\n\nPages load the figures with , so page CSS cannot reach inside them.\nEach figure now carries its own @media (prefers-color-scheme: dark) block\nof attribute-selector overrides that map every light color to a Catppuccin\nMocha color, with one shared map across all five. No markup, labels,\nshapes or positions change, and nothing uses !important.\n\nFour figures also paint a mantle canvas so \"Open figure\" works on its own;\nanalyst-thinking.svg stays transparent, since it sits on the page rather\nthan in a figure box.\n\n🤖 Generated with Claude Code (Sonnet 5.5) 🦊\n\n* chore(website): refresh translation source references\n\nThe theme-color tags move the page lines that the catalogs cite, so\npython3 scripts/website.py translations extract rewrites the source\nreferences in messages.pot and the 18 PO files. No message text changes.\nThe same run moves the \"Main navigation\" entry to its new position in each\ncatalog.\n\n🤖 Generated with Claude Code (Sonnet 5.5) 🦊\n\n* fix(website): keep inline step highlights inline\n\nThe full-width band for the active step now applies only to code-step\nblocks. The inline parameter highlights in the dx-ball and th04\nsignatures stay inline again.\n\n🤖 Generated with Claude Code (Opus 5.5) 🦊\n\n* test(website): check every page offers light and dark theme colors\n\nEach authored reading page, and its built copy in every language,\nmust carry one theme-color tag for light and one for dark. The\nstylesheet must keep its dark color scheme block. On the commit before\ndark mode, this test fails on every page.\n\n🤖 Generated with Claude Code (Opus 5.5) 🦊\n\n* fix(website): draw the dinosaur game in the page colors\n\nIn dark mode the game box turned dark, but the game still drew with\nits light colors, so the dinosaur, cacti and text fell to about 2:1\ncontrast. The canvas now reads five colors from CSS variables on\n.dino-stage. Light values are the old ones, so light mode draws the\nsame pixels. Dark values are Catppuccin Mocha: 8.3:1 for the\ndinosaur, 7.9:1 for cacti and text, 7.6:1 for the crash color.\n\nThe moved lines in dino-demo.js shift the translation catalog\nreferences, so the catalogs are refreshed too (reference comments\nonly).\n\n🤖 Generated with Claude Code (Opus 5.5) 🦊\n\n* fix(website): recolor the Touhou flywheel arrows in dark mode\n\nThe inline flywheel SVG on the Touhou article hard-codes its stroke\ncolors, so on the dark page its connectors fell to about 2:1. Two\ndark-only rules map those strokes to the page accent and muted colors\n(7.8:1 and 7.4:1). Light mode is unchanged.\n\n🤖 Generated with Claude Code (Opus 5.5) 🦊\n\n* fix(website): redraw the dinosaur game when the system theme changes\n\nThe canvas reads its colors only when it draws, so an idle, paused or\ncrashed game kept the old palette after a theme switch. Each demo now\nredraws on a prefers-color-scheme change.\n\nThe added lines shift the translation catalog references, so the\ncatalogs are refreshed too (reference comments only).\n\n🤖 Generated with Claude Code (Opus 5.5) 🦊\n\n---------\n\nCo-authored-by: Claude Sonnet 5.5 \nCo-authored-by: Claude Opus 5.5 ", - "parents": [ - "e59db2f5deefb1c5e74f01e19631f6d75cfaa25a" - ], + "parents": ["e59db2f5deefb1c5e74f01e19631f6d75cfaa25a"], "authors": [ { "name": "Cassie_Fox", @@ -3493,17 +2991,13 @@ "user": null } ], - "pullRequests": [ - 1894 - ] + "pullRequests": [1894] }, { "sha": "9878bb7296c13c2b4838be76f6128e5fc31eda3c", "subject": "feat(ghidra): apply validated analyzer overrides before analysis", "body": "feat(ghidra): apply validated analyzer overrides before analysis\n\nApply caller-selected analyzer opt-outs before Ghidra analysis, reject unknown or ineffective names, and commit raw/header imports to the same analyzer profile. Use supported x86 raw compiler specs and cover the real analyzer/readback and raw workflows.\n\nAdopts the original implementation from #1800 with validated corrections. Refs #1783, #1836.\n\nCo-authored-by: akushonkamen <74654766+akushonkamen@users.noreply.github.com>\nCo-authored-by: N0zoM1z0 <161784452+N0zoM1z0@users.noreply.github.com>\nCo-authored-by: Kaoru0822 <208281322+kaoru0822-kitauji@users.noreply.github.com>", - "parents": [ - "12ee785e5e61132898adecf9424ce6706a2e754a" - ], + "parents": ["12ee785e5e61132898adecf9424ce6706a2e754a"], "authors": [ { "name": "Ysopwnable", @@ -3530,17 +3024,13 @@ } } ], - "pullRequests": [ - 1913 - ] + "pullRequests": [1913] }, { "sha": "0d8b728d2470a9b51239d61986944bacaf9a8708", "subject": "docs(agents): require related brittleness cleanup in bug fixes", "body": "docs(agents): require related brittleness cleanup in bug fixes\n", - "parents": [ - "9878bb7296c13c2b4838be76f6128e5fc31eda3c" - ], + "parents": ["9878bb7296c13c2b4838be76f6128e5fc31eda3c"], "authors": [ { "name": "morluto", @@ -3557,9 +3047,7 @@ "sha": "85c1d2587a7d42c6e2108405c802fe7f7b046c15", "subject": "feat(javascript): analyze selected application sources", "body": "feat(javascript): analyze selected application sources\n\nAnalyze exact selected sources in first-request order before unrelated\nstatic scopes, preserving full artifact identity and byte verification.\nRetain selection in CLI/MCP Evidence and summaries, with explicit unknowns\nand partial coverage for unselected sources. Keep default full analysis.\n\nFixes #1848\n\nCo-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>\nCo-authored-by: Kaoru0822 <208281322+kaoru0822-kitauji@users.noreply.github.com>", - "parents": [ - "0d8b728d2470a9b51239d61986944bacaf9a8708" - ], + "parents": ["0d8b728d2470a9b51239d61986944bacaf9a8708"], "authors": [ { "name": "Ysopwnable", @@ -3586,17 +3074,13 @@ } } ], - "pullRequests": [ - 1944 - ] + "pullRequests": [1944] }, { "sha": "14935e4d470be318fdee442d279d6acb7d441119", "subject": "fix(javascript): preserve package and source-map boundary identity (#1939)", "body": "fix(javascript): preserve package and source-map boundary identity (#1939)\n\n* fix(javascript): preserve bare package specifier suffixes\n\n* fix(javascript): resolve ESM package self references\n\n* fix(javascript): recover retained prefixed source maps\n\n* test(javascript): cover suffixed ESM self references\n\n* fix(javascript): retain legacy ESM package suffix behavior\n\n* fix(javascript): reject legacy ESM directory and extension fallback\n\n* refactor(javascript): consolidate package resolution and workflow coverage\n\n* fix(javascript): report exact ESM package subpath misses\n\n* fix(javascript): compare parsed names for ESM self references\n\n* refactor(javascript): parse bare package requests once\n\n* fix(javascript): derive ESM dependency lookup from package URLs\n\n---------\n\nCo-authored-by: hhang <169027046+xu91102@users.noreply.github.com>", - "parents": [ - "85c1d2587a7d42c6e2108405c802fe7f7b046c15" - ], + "parents": ["85c1d2587a7d42c6e2108405c802fe7f7b046c15"], "authors": [ { "name": "morluto", @@ -3615,17 +3099,13 @@ } } ], - "pullRequests": [ - 1939 - ] + "pullRequests": [1939] }, { "sha": "c2cf7dcb86e11350214f82e5c51de7ca6ee3d27a", "subject": "fix(managed): index attribute constructor owners once per layout (#1943)", "body": "fix(managed): index attribute constructor owners once per layout (#1943)\n\nEach CustomAttribute whose constructor is a local MethodDef scanned the\nTypeDef table to find the declaring type, so inspect_managed_artifact did\nO(attributes x types) row decoding. A 584 KB assembly with 16,000 types\nand 16,000 such attributes blocked for about 38 s.\n\nBuild a first-match owner index once per metadata layout. Already-owned\nlist positions are skipped, so overlapping malformed method lists keep\ntheir previous first-match owner in near-linear time. The index is\ncharged to the decode budget, and a build failure is cached like the\nmember pointer lookup.\n\nCo-authored-by: Claude Opus 5.5 ", - "parents": [ - "14935e4d470be318fdee442d279d6acb7d441119" - ], + "parents": ["14935e4d470be318fdee442d279d6acb7d441119"], "authors": [ { "name": "Kaoru0822", @@ -3644,17 +3124,13 @@ } } ], - "pullRequests": [ - 1943 - ] + "pullRequests": [1943] }, { "sha": "0ae38e1e31414c67a3be09231d208f0726c035f8", "subject": "fix(ida): preserve non-x86 call edges and workflow uncertainty (#1906)", "body": "fix(ida): preserve non-x86 call edges and workflow uncertainty (#1906)\n\n* test(ida): expect callee edges from the call graph on non-x86 targets\n\n* fix(ida): read callee edges from the call graph on non-x86 targets\n\n* test(ida): pin address order of call graph additions\n\n* docs(ida): describe the call graph source for non-x86 callees\n\n* test(ida): pin the x86 baseline, the call graph reader and its failure modes\n\n* fix(ida): check the call graph root, scope truncation to the root and degrade without callgraph\n\n* test(ida): expect managed PE off the x86 path, possible-truncation wording and a complete ARM64 traversal\n\n* fix(ida): keep managed PE and x86 reads off the call graph path and qualify truncation\n\n* test(ida): answer only expected leaf roots and assert the requested call graph roots\n\n* test(ida): expect a call graph the producer cannot give consistently to fail the callee read\n\n* fix(ida): fail the callee read when the call graph cannot be obtained consistently\n\n* fix(ida): preserve call edge authority and workflow uncertainty\n\n* fix(ida): preserve explicit root call graph caps\n\n---------\n\nCo-authored-by: morluto <76467478+morluto@users.noreply.github.com>", - "parents": [ - "c2cf7dcb86e11350214f82e5c51de7ca6ee3d27a" - ], + "parents": ["c2cf7dcb86e11350214f82e5c51de7ca6ee3d27a"], "authors": [ { "name": "Mykola Dementiev", @@ -3673,17 +3149,13 @@ } } ], - "pullRequests": [ - 1906 - ] + "pullRequests": [1906] }, { "sha": "7cdb7981c3612bc42bd0153fddd9c33b639918ed", "subject": "fix(apktool): name host requirements in configuration refusals (#1946)", "body": "fix(apktool): name host requirements in configuration refusals (#1946)\n\nA missing apktool launcher projected the generic \"unavailable for the\ncurrent target\" message and remediation, leaving the actual reason only\nin details.reason. A relative REA_APKTOOL_COMMAND escaped as UNKNOWN\nbecause command selection ran before the try that maps configuration\nfailures.\n\nResolve the selection inside that try for both execution and\navailability, and pass the refusal reason as userMessage, as JADX and\nthe adapters fixed in #1224 do.\n\nCo-authored-by: Claude Opus 5.5 ", - "parents": [ - "0ae38e1e31414c67a3be09231d208f0726c035f8" - ], + "parents": ["0ae38e1e31414c67a3be09231d208f0726c035f8"], "authors": [ { "name": "Kaoru0822", @@ -3702,17 +3174,13 @@ } } ], - "pullRequests": [ - 1946 - ] + "pullRequests": [1946] }, { "sha": "1449e8e05138bf0c86d5fe6f4c93122b4b93b2b1", "subject": "fix(mcp): provide native evidence paging continuation", "body": "fix(mcp): provide native evidence paging continuation\n\nSupply schema-validated inspect_analysis_view arguments after completed native function Evidence is recorded and exceeds MCP delivery capacity. Preserve the full canonical result and its provenance. Verify exact source paging, export and following-call usability through real Ghidra stdio MCP.\n\nFixes #1849\n\nCo-authored-by: Minghang Chamling <133689405+cold-atom@users.noreply.github.com>\nCo-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>\nCo-authored-by: Kaoru0822 <208281322+kaoru0822-kitauji@users.noreply.github.com>", - "parents": [ - "7cdb7981c3612bc42bd0153fddd9c33b639918ed" - ], + "parents": ["7cdb7981c3612bc42bd0153fddd9c33b639918ed"], "authors": [ { "name": "Minghang Chamling", @@ -3739,17 +3207,13 @@ } } ], - "pullRequests": [ - 1910 - ] + "pullRequests": [1910] }, { "sha": "52e76c5d39b58d1685bb5e22bd40d19524dfa2cb", "subject": "fix(managed): share first-match member ownership indexes", "body": "fix(managed): share first-match member ownership indexes\n\nResolve fields, methods, and attribute constructors through one budgeted index per layout. Preserve malformed-list first-match ownership without per-member TypeDef scans; remove the superseded lookup implementations.\n\nValidate pointer identity and malformed ranges through production parsers, including a 40,000-type/method case and allocation admission. Managed source tests and CLI/MCP pointer acceptance pass. Refs #1953.\n", - "parents": [ - "1449e8e05138bf0c86d5fe6f4c93122b4b93b2b1" - ], + "parents": ["1449e8e05138bf0c86d5fe6f4c93122b4b93b2b1"], "authors": [ { "name": "morluto", @@ -3766,9 +3230,7 @@ "sha": "c42232f566d55fe7191763649755148c768eef9f", "subject": "fix(adb): share actionable provider configuration refusals", "body": "fix(adb): share actionable provider configuration refusals\n\nCatch binary selection failures at the adapter boundary and share the domain error projection with apktool. Missing and relative adb paths now report capability_unavailable with host configuration guidance in both message and remediation.\n\nValidation: ADB/apktool provider suites and public CLI refusal suites pass. No connected-device behavior changed or verified. Refs #1952.\n", - "parents": [ - "52e76c5d39b58d1685bb5e22bd40d19524dfa2cb" - ], + "parents": ["52e76c5d39b58d1685bb5e22bd40d19524dfa2cb"], "authors": [ { "name": "morluto", @@ -3785,9 +3247,7 @@ "sha": "f64790bfc32db330b2be5bdff61af555a9d26067", "subject": "refactor(javascript): reuse validated source-map decoding", "body": "refactor(javascript): reuse validated source-map decoding\n\nPass typed map objects into the codec and reuse validated TraceMap instances for regular and indexed lookups. Remove whole-map serialization, duplicate leaf decoding, an array-copy wrapper, and the unused offset-validation mode in artifact declaration collection.\n\nValidation: source-map and browser consumer suites (126 tests), declaration tests, and artifact reconstruction boundaries pass. Section overlap checks and raw source declarations remain intact.\n", - "parents": [ - "c42232f566d55fe7191763649755148c768eef9f" - ], + "parents": ["c42232f566d55fe7191763649755148c768eef9f"], "authors": [ { "name": "morluto", @@ -3804,9 +3264,7 @@ "sha": "09b68285166bef2b7633402c8adf7eb25823b47e", "subject": "fix(process): cancel run-token reads during sampling", "body": "fix(process): cancel run-token reads during sampling\n\nPropagate the sample AbortSignal through readProcessRunId to host environment inspection so cancellation can settle a blocked ownership-token read.\n\nValidation: ownership and capture lifecycle suites pass, including an abort-waiting host regression. Native provider runtime behavior was not exercised.\n", - "parents": [ - "f64790bfc32db330b2be5bdff61af555a9d26067" - ], + "parents": ["f64790bfc32db330b2be5bdff61af555a9d26067"], "authors": [ { "name": "morluto", @@ -3823,9 +3281,7 @@ "sha": "3d8313598785359c424d7305f503cb69fc8639a6", "subject": "fix(reference): verify symlink identity around target reads", "body": "fix(reference): verify symlink identity around target reads\n\nBracket symlink target observation with the identity captured during enumeration. Report replacements and disappearing links as changed, and keep cancellation and I/O mapping at one owner boundary.\n\nRemove duplicate target-error wrappers and unreachable external-target handling. Validation: reference reader filesystem suite passes, including deterministic replacement during observation.\n", - "parents": [ - "09b68285166bef2b7633402c8adf7eb25823b47e" - ], + "parents": ["09b68285166bef2b7633402c8adf7eb25823b47e"], "authors": [ { "name": "morluto", @@ -3842,9 +3298,7 @@ "sha": "dc303a8ee8a2ceaae37e4da4ac4ed64035793d59", "subject": "test(javascript): classify artifact workflows as boundary tests", "body": "test(javascript): classify artifact workflows as boundary tests\n\nMove the six JavaScript application suites that read production artifacts or launch compiled analysis workers out of composition. Focused test planning now prepares their runtime prerequisites instead of treating them as source-only tests.\n\nValidation: all six relocated suites and adjacent artifact/reference suites pass (70 tests across eight files); discovery finds every test exactly once.\n", - "parents": [ - "3d8313598785359c424d7305f503cb69fc8639a6" - ], + "parents": ["3d8313598785359c424d7305f503cb69fc8639a6"], "authors": [ { "name": "morluto", @@ -3861,9 +3315,7 @@ "sha": "12fa8fd9f986dbd4ff58165c3ec71a46dc8a8a3b", "subject": "fix(ida): recover cleanup after worker sessions are reaped", "body": "fix(ida): recover cleanup after worker sessions are reaped\n\nAccept the supervisor absent-session response only for the owned session, then independently verify session and private-input absence before releasing the workspace. Keep failed inventory verification retryable without resending a completed close.\n\nValidation: 59 focused source tests passed, including live private-input peers, unavailable inventory, and mismatched session IDs. Real IDA engine behavior remains unverified. Fixes #1710.\n", - "parents": [ - "dc303a8ee8a2ceaae37e4da4ac4ed64035793d59" - ], + "parents": ["dc303a8ee8a2ceaae37e4da4ac4ed64035793d59"], "authors": [ { "name": "morluto", @@ -3880,9 +3332,7 @@ "sha": "c2b56e3e1c9619beab15de8e1f200422473caf30", "subject": "test: classify filesystem and process workflows by boundary", "body": "test: classify filesystem and process workflows by boundary\n\nMove artifact inventory, application projection, runtime reconciliation, and TODO scanner suites into their real boundary lanes. Extract Hopper process/socket cleanup cases while keeping injected session cleanup cases in composition.\n\nValidation: all 56 focused tests passed; discovery finds all 876 test files exactly once. Test assertions and provider verification scope are unchanged.\n", - "parents": [ - "12fa8fd9f986dbd4ff58165c3ec71a46dc8a8a3b" - ], + "parents": ["12fa8fd9f986dbd4ff58165c3ec71a46dc8a8a3b"], "authors": [ { "name": "morluto", @@ -3899,9 +3349,7 @@ "sha": "a82e37c8065cc200a0ca3e14e7c4f85e4e468580", "subject": "fix(browser): retain module resolver cleanup ownership", "body": "fix(browser): retain module resolver cleanup ownership\n\nSerialize resolution with shutdown, retain the owned browser after close failures, and retry cleanup before another launch. Wire cleanup through the shared service and CLI/MCP lifecycles, preserving primary failures and completed native reports alongside cleanup diagnostics.\n\nSeparate the browser resolution workflow from lifecycle ownership. Validation: seven resolver source tests, eleven application tests, MCP shutdown retry, public CLI parity, and full static/architecture checks passed. Real Chromium behavior remains unverified.\n", - "parents": [ - "c2b56e3e1c9619beab15de8e1f200422473caf30" - ], + "parents": ["c2b56e3e1c9619beab15de8e1f200422473caf30"], "authors": [ { "name": "morluto", @@ -3918,9 +3366,7 @@ "sha": "918713af376e307ecf24d75e6a0dd9d1b544545b", "subject": "fix(artifacts): bind directory reads to captured file state", "body": "fix(artifacts): bind directory reads to captured file state\n\nCapture exact filesystem identity and nanosecond timestamps, validate descriptor/path state before and after streaming, and enforce the captured byte count. Bound growing files to their captured size plus one byte using precise positional reads; keep unrepresentable display sizes explicitly unknown.\n\nReuse the captured-state comparison around Apple assetutil and retain existing reader cleanup ownership. Validation: focused reader and affected consumer suites, full static/architecture checks, and a compiled directory-read probe on Bun 1.3.14 passed. Includes same-size mutation, growth, truncation, cancellation, FIFO replacement, cleanup retry, ZIP identity forgery, ASAR and Mach-O coverage.\n", - "parents": [ - "a82e37c8065cc200a0ca3e14e7c4f85e4e468580" - ], + "parents": ["a82e37c8065cc200a0ca3e14e7c4f85e4e468580"], "authors": [ { "name": "morluto", @@ -3937,9 +3383,7 @@ "sha": "804c287e441dcaa3876429f026ac89f6482f9699", "subject": "test: classify filesystem application workflows as boundaries", "body": "test: classify filesystem application workflows as boundaries\n", - "parents": [ - "918713af376e307ecf24d75e6a0dd9d1b544545b" - ], + "parents": ["918713af376e307ecf24d75e6a0dd9d1b544545b"], "authors": [ { "name": "morluto", @@ -3956,9 +3400,7 @@ "sha": "5ba1642a7d891a60493b2195e55149b0f3197fb4", "subject": "test: strengthen archive and resource cleanup assertions", "body": "test: strengthen archive and resource cleanup assertions\n\nReplace duplicate path-helper checks with real ZIP inventory coverage and replace global memory sampling with bounded-chunk assertions while retaining 64 MiB digest coverage. Await artifact client cleanup, preserve Hopper lease ownership during teardown, and expose typed application failures.\n", - "parents": [ - "804c287e441dcaa3876429f026ac89f6482f9699" - ], + "parents": ["804c287e441dcaa3876429f026ac89f6482f9699"], "authors": [ { "name": "morluto", @@ -3975,9 +3417,7 @@ "sha": "5e219de44134d34f5a07a9cd1911fb2295bf1d88", "subject": "feat(ghidra): admit soft-float MIPS32r2 ELF with integer-register float storage (#1949)", "body": "feat(ghidra): admit soft-float MIPS32r2 ELF with integer-register float storage (#1949)\n\n* feat(ghidra): admit soft-float MIPS32r2 ELF with integer-register float storage\n\nSoft-float o32 executables (Linux kernel builds, bare-metal firmware) were\nrefused because their ABI flags record declares no CPR1 and FP ABI 3.\nGhidra's MIPS32 compiler specifications model only hard-float o32, so typed\nfloat/double signatures (DWARF) would be bound to $f12/$f14/$f0 and the\ndecompiler loses the real dataflow: `return sel ? a : b` decompiled to\n`return in_f0;`, and callers passed phantom FPU inputs.\n\nAdmit ELF32 ET_EXEC o32 MIPS32r2 targets whose ABI record declares soft-float\nwith no CPR1, and commit `mips_soft_float_storage: o32-integer-registers-v1`\nin their analysis profile only (hard-float profile digests are unchanged).\nReaGhidraMipsSoftFloat.java runs after auto-analysis and, for each function\nwith a float/double formal type, either keeps the types with the storage\nGhidra's o32 model assigns to a same-size integer (pair alignment, stack\nspill), or, for auto-parameters such as hidden struct-return pointers, swaps\nfloat types for same-size integers under dynamic storage. No function is left\non hard-float storage. The report is written last; the provider client\nrequires it exactly when the profile commits the policy and refuses the\nsession before any operation otherwise.\n\nVerification: real Ghidra 12.1.4 lane (verify:ghidra:mips) now builds\nhard- and soft-float fixtures in both byte orders and checks exact\nparameter/return storage through inspect_native_api, caller constants,\nsnapshot profile and Evidence outcome; test:fast, verify:package and an\ninstalled-tarball soft-float run pass.\n\n* fix(ghidra): model soft-float MIPS as a prototype for every typed callable\n\nReview feedback on #1949: rewriting storage per Function left external\nfunctions and indirect calls through typed function pointers on Ghidra's\nhard-float o32 prototype, which still read $f12/$f14/$f0 while the session\nreported success. A negative control confirms it: without the change,\n`(*rea_mips_soft_callback)(8.5f, 9.5f, sel)` decompiles to\n`(*rea_mips_soft_callback)(in_f12, in_f14, sel)`.\n\nReaGhidraMipsSoftFloat.java now derives a `__rea_soft_float` prototype from\nthe program's own default o32 model (encoded, float pentries and\nfloat-consuming rules removed, so byte-order-specific aggregate rules and the\nhidden struct-return pointer are kept), installs it as a specification\nextension, and assigns it with dynamic storage to every non-thunk function,\nexternal function and function-pointer definition whose formal types use\nfloat or double. Thunks follow their targets. Float types are kept\neverywhere, so the integer-retype fallback is removed. The script fails\nwithout writing its report if the derived prototype or any reassigned\nfunction still uses an FPU register.\n\nThe policy becomes `o32-soft-float-prototype-v1` with a\n{functions, definitions} report. The soft-float fixture adds an indirect\ncall through a typed pointer; the real-Ghidra lane requires its constants\nwith no FPU inputs and the struct return's `float scale` in $a1.\n\n* test(ghidra): pin ODDSPREG acceptance for soft-float MIPS ABI records\n\nReview on #1949 suggested requiring flags1 == 0 for soft-float, since MIPS_AFL_FLAGS1_ODDSPREG names CPR1 registers. GCC 5.2 kernel modules, LLVM/Rust firmware and Clang -msoft-float objects all record flags1 = 1 with FP ABI soft-float: it is the MIPS32 o32 toolchain default and selects nothing without CPR1. Keep accepting it, say why at the check, and test that soft-float with ODDSPREG is admitted while any other general flag is refused.", - "parents": [ - "5ba1642a7d891a60493b2195e55149b0f3197fb4" - ], + "parents": ["5ba1642a7d891a60493b2195e55149b0f3197fb4"], "authors": [ { "name": "Aurelio Bernal", @@ -3988,17 +3428,13 @@ } } ], - "pullRequests": [ - 1949 - ] + "pullRequests": [1949] }, { "sha": "290d301ec770955f313c2d48678ed0ae3b9f8a73", "subject": "feat(ghidra): admit relocatable MIPS32r2 ELF objects (#1950)", "body": "feat(ghidra): admit relocatable MIPS32r2 ELF objects (#1950)\n\n* feat(ghidra): admit soft-float MIPS32r2 ELF with integer-register float storage\n\nSoft-float o32 executables (Linux kernel builds, bare-metal firmware) were\nrefused because their ABI flags record declares no CPR1 and FP ABI 3.\nGhidra's MIPS32 compiler specifications model only hard-float o32, so typed\nfloat/double signatures (DWARF) would be bound to $f12/$f14/$f0 and the\ndecompiler loses the real dataflow: `return sel ? a : b` decompiled to\n`return in_f0;`, and callers passed phantom FPU inputs.\n\nAdmit ELF32 ET_EXEC o32 MIPS32r2 targets whose ABI record declares soft-float\nwith no CPR1, and commit `mips_soft_float_storage: o32-integer-registers-v1`\nin their analysis profile only (hard-float profile digests are unchanged).\nReaGhidraMipsSoftFloat.java runs after auto-analysis and, for each function\nwith a float/double formal type, either keeps the types with the storage\nGhidra's o32 model assigns to a same-size integer (pair alignment, stack\nspill), or, for auto-parameters such as hidden struct-return pointers, swaps\nfloat types for same-size integers under dynamic storage. No function is left\non hard-float storage. The report is written last; the provider client\nrequires it exactly when the profile commits the policy and refuses the\nsession before any operation otherwise.\n\nVerification: real Ghidra 12.1.4 lane (verify:ghidra:mips) now builds\nhard- and soft-float fixtures in both byte orders and checks exact\nparameter/return storage through inspect_native_api, caller constants,\nsnapshot profile and Evidence outcome; test:fast, verify:package and an\ninstalled-tarball soft-float run pass.\n\n* fix(ghidra): model soft-float MIPS as a prototype for every typed callable\n\nReview feedback on #1949: rewriting storage per Function left external\nfunctions and indirect calls through typed function pointers on Ghidra's\nhard-float o32 prototype, which still read $f12/$f14/$f0 while the session\nreported success. A negative control confirms it: without the change,\n`(*rea_mips_soft_callback)(8.5f, 9.5f, sel)` decompiles to\n`(*rea_mips_soft_callback)(in_f12, in_f14, sel)`.\n\nReaGhidraMipsSoftFloat.java now derives a `__rea_soft_float` prototype from\nthe program's own default o32 model (encoded, float pentries and\nfloat-consuming rules removed, so byte-order-specific aggregate rules and the\nhidden struct-return pointer are kept), installs it as a specification\nextension, and assigns it with dynamic storage to every non-thunk function,\nexternal function and function-pointer definition whose formal types use\nfloat or double. Thunks follow their targets. Float types are kept\neverywhere, so the integer-retype fallback is removed. The script fails\nwithout writing its report if the derived prototype or any reassigned\nfunction still uses an FPU register.\n\nThe policy becomes `o32-soft-float-prototype-v1` with a\n{functions, definitions} report. The soft-float fixture adds an indirect\ncall through a typed pointer; the real-Ghidra lane requires its constants\nwith no FPU inputs and the struct return's `float scale` in $a1.\n\n* test(ghidra): pin ODDSPREG acceptance for soft-float MIPS ABI records\n\nReview on #1949 suggested requiring flags1 == 0 for soft-float, since MIPS_AFL_FLAGS1_ODDSPREG names CPR1 registers. GCC 5.2 kernel modules, LLVM/Rust firmware and Clang -msoft-float objects all record flags1 = 1 with FP ABI soft-float: it is the MIPS32 o32 toolchain default and selects nothing without CPR1. Keep accepting it, say why at the check, and test that soft-float with ODDSPREG is admitted while any other general flag is refused.\n\n* feat(ghidra): admit relocatable MIPS32r2 ELF objects\n\nLinux MIPS kernel modules (.ko) and other ELF32 o32 MIPS32r2 ET_REL objects\nwere refused by the Ghidra MIPS lane. Ghidra's ELF loader already places each\nallocated section and applies REL relocations; this admits ET_REL alongside\nET_EXEC (ET_DYN and PRX stay refused) under its own support lane,\n`elf32-rel-o32-arch32r2-standard-v1`, so executable targets keep theirs.\nRelocatable sessions carry limitations: addresses are analysis coordinates,\nundefined symbols live in Ghidra's EXTERNAL block, and HI16 relocations report\nPARTIAL because Ghidra applies them with their paired LO16.\n\nVerification: new `verify:ghidra:mips-relocatable` real-Ghidra lane builds\n-c -G0 objects in both byte orders plus a soft-float -mlong-calls module\nvariant. GNU readelf supplies sections, symbols and REL entries; every\nrelocation in an allocated section must encode S + A in the loaded word\n(S from Ghidra placement, A from original bytes), with HI16/LO16 checked as\nthe effective address each LO16 forms, and coverage of a shared HI16, a LO16\ncarry, external code/data and R_MIPS_32 is asserted. The executable lane,\nunit suites pass, and on 30 real .ko files 54,972 relocations matched (93 reference empty sections and are not checkable).\n\n* fix(ghidra): verify every MIPS HI16 and archive-typed soft-float externals\n\nReview feedback on #1950:\n\n- The relocation oracle kept one pending HI16, so a second HI16 before the\n LO16 that resolves both overwrote the first, and unrelated relocations\n cleared it; the earlier site's high half and carry were never compared\n with S + A. Every HI16 now waits for the next LO16 of its symbol, which\n checks all of them; later LO16s reuse those HI16s, and a HI16 left\n unresolved at a section end fails. On 30 real soft-float kernel modules,\n 24 contain several HI16s per LO16; all 54,972 placed relocations match.\n- External callees with float prototypes: the relocatable fixture now calls\n powf, whose prototype Ghidra's C library archive applies by name. Every\n variant must decompile `powf(1.5,2.5)` without FPU inputs, and the\n soft-float module variant must report that __rea_soft_float covered it\n (with the external step removed it decompiles as `powf(param_1,param_2)`).\n `-fno-builtin` keeps the call from being folded.\n\nAlso updates the module variant's expected soft-float policy to\n`o32-soft-float-prototype-v1`.\n\n---------\n\nCo-authored-by: morluto <76467478+morluto@users.noreply.github.com>", - "parents": [ - "5e219de44134d34f5a07a9cd1911fb2295bf1d88" - ], + "parents": ["5e219de44134d34f5a07a9cd1911fb2295bf1d88"], "authors": [ { "name": "Aurelio Bernal", @@ -4017,17 +3453,13 @@ } } ], - "pullRequests": [ - 1950 - ] + "pullRequests": [1950] }, { "sha": "eb97da33881e3d1472d97a7d788ee35944fb6b07", "subject": "fix(artifacts): retain ASAR resources through cleanup failures", "body": "fix(artifacts): retain ASAR resources through cleanup failures\n\nGive snapshot capture, header admission, packed members, and container streams one file-handle owner. Serialize adoption with reader shutdown, retain failed closes for retry, and remove snapshots only after descriptor cleanup succeeds.\n\nCover unread members, pending opens, zero-byte members, and paired format/cleanup failures. Keep intentionally unrecoverable test fixtures hygienic and strengthen managed identity and process cleanup-authority expectations.\n\nValidation: full npm run check; 99 targeted tests and temporary-directory hygiene; exact discovery of 877 test files. No real vendor-provider verification was performed.\n", - "parents": [ - "290d301ec770955f313c2d48678ed0ae3b9f8a73" - ], + "parents": ["290d301ec770955f313c2d48678ed0ae3b9f8a73"], "authors": [ { "name": "morluto", @@ -4044,9 +3476,7 @@ "sha": "7d92d93a550f3be221d7cf1da07c37ea1770e922", "subject": "fix(managed): share first-match member list ownership (#1955)", "body": "fix(managed): share first-match member list ownership (#1955)\n\nInventory attribute lookups and the members inspector each interpreted\nTypeDef member-list ownership. The members lookup binary-searched ordered\nranges but fell back to a per-member scan of every type when malformed\nlists were unordered, which was quadratic (8 s for 100,000 types).\n\nBoth now use firstMatchListOwners, one near-linear first-match index over\none-based list positions. Remove the ordered/fallback split and the\nproduction declaringType scan, which remains only as the test oracle. The\ninventory reserves only its retained index.\n\nCo-authored-by: Claude Opus 5.5 \nCo-authored-by: morluto <76467478+morluto@users.noreply.github.com>", - "parents": [ - "eb97da33881e3d1472d97a7d788ee35944fb6b07" - ], + "parents": ["eb97da33881e3d1472d97a7d788ee35944fb6b07"], "authors": [ { "name": "Kaoru0822", @@ -4073,17 +3503,13 @@ } } ], - "pullRequests": [ - 1955 - ] + "pullRequests": [1955] }, { "sha": "39418ea173763ca55d4f116992ee903bcaeb1898", "subject": "fix(adb): share host configuration refusals with apktool (#1954)", "body": "fix(adb): share host configuration refusals with apktool (#1954)\n\nThe ADB provider, which the apktool provider mirrors, had the same two\ndefects: a relative REA_ADB_PATH escaped as UNKNOWN because selection\nran before the try that maps configuration failures, and a missing adb\nbinary projected generic target advice instead of its reason.\n\nMove the configuration-failure-to-refusal mapping into one\nproviderConfigurationRefusal helper used by both providers, resolve the\nADB selection inside the mapped try, and share the CLI refusal assertion.\n\nCo-authored-by: Claude Opus 5.5 \nCo-authored-by: morluto <76467478+morluto@users.noreply.github.com>", - "parents": [ - "7d92d93a550f3be221d7cf1da07c37ea1770e922" - ], + "parents": ["7d92d93a550f3be221d7cf1da07c37ea1770e922"], "authors": [ { "name": "Kaoru0822", @@ -4110,17 +3536,13 @@ } } ], - "pullRequests": [ - 1954 - ] + "pullRequests": [1954] }, { "sha": "c2407689cb04df082e8db0b6afa8f8d022f6bcd1", "subject": "fix(setup): preserve skill files and report rollback failures", "body": "fix(setup): preserve skill files and report rollback failures\n\nTrack attempted writes, preserve original content and modes from one regular-file observation, and continue rollback after individual failures. Return tagged failure details and retained backup paths through setup.\n\nValidation: setup filesystem and recovery tests, combined compile/typecheck/lint/format/metadata/architecture checks. Filesystem fault injection covers backup, ambiguous publication, and rollback failures.\n", - "parents": [ - "39418ea173763ca55d4f116992ee903bcaeb1898" - ], + "parents": ["39418ea173763ca55d4f116992ee903bcaeb1898"], "authors": [ { "name": "morluto", @@ -4137,9 +3559,7 @@ "sha": "2260887f2092be6a3d9c79509e4ae4a3e52fce7f", "subject": "fix(artifacts): close mounted directory resources before DMG detach", "body": "fix(artifacts): close mounted directory resources before DMG detach\n\nWait for directory operations, close owned streams and traversal handles, and retain the mounted reader when cleanup fails so close can retry before detach. Consolidate stable-artifact filesystem regressions into the boundary suite.\n\nValidation: 35 artifact tests and temporary-directory hygiene, including real hdiutil diagnostics. Directory-close and traversal races use injected faults.\n", - "parents": [ - "c2407689cb04df082e8db0b6afa8f8d022f6bcd1" - ], + "parents": ["c2407689cb04df082e8db0b6afa8f8d022f6bcd1"], "authors": [ { "name": "morluto", @@ -4156,9 +3576,7 @@ "sha": "c002b89e2d8130a3c07e25e5fd604876be18c703", "subject": "fix(snapshot): bind replayed subjects to the selected target path", "body": "fix(snapshot): bind replayed subjects to the selected target path\n\nRebind display paths only for matching artifact identities in primitive and composed replay. Preserve semantic Evidence IDs, payloads, and historical snapshot provenance. Classify snapshot filesystem workflows as boundary tests.\n\nValidation: cache, direct workflow, MCP replay, and Evidence tests; combined checks and temporary-directory hygiene. Provider interactions are simulated for replay verification.\n", - "parents": [ - "2260887f2092be6a3d9c79509e4ae4a3e52fce7f" - ], + "parents": ["2260887f2092be6a3d9c79509e4ae4a3e52fce7f"], "authors": [ { "name": "morluto", @@ -4175,9 +3593,7 @@ "sha": "a8d4984404b611e60b88bc42289c0ba07eee4578", "subject": "fix(browser): preserve uncertainty in malformed network observations", "body": "fix(browser): preserve uncertainty in malformed network observations\n\nRequire observed request method and initiator metadata instead of inventing defaults. Preserve valid redirect history while excluding later events for malformed reused IDs. Keep unavailable or invalid encoded lengths unknown and retain valid zero values.\n\nValidation: 57 CDP boundary tests plus temporary-directory hygiene and combined checks. Protocol events come from the fake CDP server; no live browser verification is claimed.\n", - "parents": [ - "c002b89e2d8130a3c07e25e5fd604876be18c703" - ], + "parents": ["c002b89e2d8130a3c07e25e5fd604876be18c703"], "authors": [ { "name": "morluto", @@ -4194,9 +3610,7 @@ "sha": "108b5f94254281639badd25b1f448cca35dc89a2", "subject": "fix(native): reject ambiguous otool load-command framing", "body": "fix(native): reject ambiguous otool load-command framing\n\nValidate Mach command counts, byte totals, scalar uniqueness, section counts, and build-tool counts before claiming exhaustive evidence. Preserve raw output in typed parsing failures and distinguish dylib commands from the dynamic loader. Correct inconsistent handcrafted fixtures and label their provenance.\n\nValidation: 38 native tests, combined checks, and temporary-directory hygiene. Multiline dylib-name ambiguity was reproduced with the host Apple otool; regression workflows use captured output and injected command runners.\n", - "parents": [ - "a8d4984404b611e60b88bc42289c0ba07eee4578" - ], + "parents": ["a8d4984404b611e60b88bc42289c0ba07eee4578"], "authors": [ { "name": "morluto", @@ -4213,9 +3627,7 @@ "sha": "beb80a07bafc0847600eb635e0323068a386c811", "subject": "test(cli): consolidate schema coverage and assert input refusals", "body": "test(cli): consolidate schema coverage and assert input refusals\n\nRemove 30 redundant truthy-JSON schema checks. Validate advertised groups and property parity across every primary command, retain required-field checks, and assert structured malformed-input errors. Exercise JEB positional validation rather than an unknown flag.\n\nValidation: 13 public CLI adapter tests, combined checks, and temporary-directory hygiene. Host configuration refusal coverage from main is preserved.\n", - "parents": [ - "108b5f94254281639badd25b1f448cca35dc89a2" - ], + "parents": ["108b5f94254281639badd25b1f448cca35dc89a2"], "authors": [ { "name": "morluto", @@ -4232,9 +3644,7 @@ "sha": "9eee709f0cc4064808579c225814898a475ca388", "subject": "fix(wasm): accept unpadded WABT section rows (#1963)", "body": "fix(wasm): accept unpadded WABT section rows (#1963)\n\n* fix(wasm): accept unpadded WABT section rows\n\nWABT 1.0.42 right-aligns section names in a nine-column field. DataCount\nfills that field, so its objdump row has no leading whitespace. Accept\nthat legal row. Header recognition, the required field shape, and section\nrange checks still reject malformed output.\n\nFixes #1956\n\n* fix(ci): refresh MIPS expectations and Windows test paths\n\nAssert admitted soft-float ABI metadata and its committed storage policy through the public target resolver, retain FP64 rejection, and point the curated Windows lane at the moved filesystem reconstruction tests.\n\nValidation: reproduced all four prior failures; 97 focused tests and check:ci pass. Native Windows and real Ghidra execution were not performed locally.\n\n---------\n\nCo-authored-by: morluto <76467478+morluto@users.noreply.github.com>", - "parents": [ - "beb80a07bafc0847600eb635e0323068a386c811" - ], + "parents": ["beb80a07bafc0847600eb635e0323068a386c811"], "authors": [ { "name": "Nithilan Kumaran", @@ -4253,17 +3663,13 @@ } } ], - "pullRequests": [ - 1963 - ] + "pullRequests": [1963] }, { "sha": "1d4c4eb0308b4cb5761a91533edeb33fcfb442f2", "subject": "fix(adb): reject unsafe host file names when pulling one device file (#1962)", "body": "fix(adb): reject unsafe host file names when pulling one device file (#1962)\n\npull_adb_file derived its host file name from the last path segment of a\ncaller-supplied device path and joined it to the output directory without\nchecking that the name is usable on the host. A device path ending in a\nseparator, a dot segment, a control character, a Windows reserved device\nname, a trailing dot or space, or a ':' alternate-data-stream marker could\nresolve to an unexpected host path or fail opaquely after the transfer.\n\nThe single-file path now derives the name with POSIX semantics and refuses\nany non-portable segment as invalid_request before creating a directory or\nrunning adb pull. This matches the package path's pending host-name policy\nand never renames a device-reported file.\n\nCo-authored-by: morluto <76467478+morluto@users.noreply.github.com>", - "parents": [ - "9eee709f0cc4064808579c225814898a475ca388" - ], + "parents": ["9eee709f0cc4064808579c225814898a475ca388"], "authors": [ { "name": "Dery Ferdika", @@ -4282,17 +3688,13 @@ } } ], - "pullRequests": [ - 1962 - ] + "pullRequests": [1962] }, { "sha": "b777e5d4d8a7b60edad7d5c0eaa56408a4b3f610", "subject": "fix(wasm): preserve debug module names in WABT output (#1967)", "body": "fix(wasm): preserve debug module names in WABT output (#1967)\n\n* fix(wasm): preserve debug module names in WABT output\n\n* fix(native): accept otool dylib-use options\n\nPreserve modern dylib options while requiring one encoding metadata row and retaining duplicate and multiline-output checks. Share field parsing between preservation and validation.\n\nVerify delayed dylibs through real macOS CLI/MCP workflows and refresh the high-address golden with the provider's -h -l capture. Validated 85 focused native tests, npm run check, and verify:macos-bundle on macOS arm64.\n\n---------\n\nCo-authored-by: morluto <76467478+morluto@users.noreply.github.com>", - "parents": [ - "1d4c4eb0308b4cb5761a91533edeb33fcfb442f2" - ], + "parents": ["1d4c4eb0308b4cb5761a91533edeb33fcfb442f2"], "authors": [ { "name": "Arthas", @@ -4311,17 +3713,13 @@ } } ], - "pullRequests": [ - 1967 - ] + "pullRequests": [1967] }, { "sha": "f1924cf9c1910d5d29d11e7bf634b51af8d738cf", "subject": "fix(plist): decode formatted XML dictionary keys", "body": "fix(plist): decode formatted XML dictionary keys\n", - "parents": [ - "b777e5d4d8a7b60edad7d5c0eaa56408a4b3f610" - ], + "parents": ["b777e5d4d8a7b60edad7d5c0eaa56408a4b3f610"], "authors": [ { "name": "Aliciawque", @@ -4338,9 +3736,7 @@ "sha": "9c8511409c0706f9979c2b68dd56aaaf9f21e191", "subject": "fix(analysis): preserve relationship coverage across evidence and replay", "body": "fix(analysis): preserve relationship coverage across evidence and replay\n\nSeparate observed relationship coverage from general provider caveats. Authenticate and replay coverage without changing legacy Evidence IDs; expose unknown and capped relationship sets through CLI/MCP graphs and traces.\n\nValidated focused domain, snapshot, IDA/Ghidra boundary, MCP, schema, package and static checks. Provider fixtures establish contract behavior; licensed engine behavior was not reverified.\n", - "parents": [ - "f1924cf9c1910d5d29d11e7bf634b51af8d738cf" - ], + "parents": ["f1924cf9c1910d5d29d11e7bf634b51af8d738cf"], "authors": [ { "name": "morluto", @@ -4357,9 +3753,7 @@ "sha": "dcfc5d403ac997c2b08bee4753e57a1a4a8a8538", "subject": "fix(setup): retain regular-file cleanup ownership through workflows", "body": "fix(setup): retain regular-file cleanup ownership through workflows\n\nThread the existing resource scope through skill and client configuration reads. Keep failed-close handles owned, wait for admitted reads, and surface unresolved cleanup alongside doctor, uninstall and update results.\n\nValidated focused setup/doctor/update and filesystem boundary checks, temporary-file hygiene, packaged setup/update/uninstall workflows, and static checks. No external provider installation was performed.\n", - "parents": [ - "9c8511409c0706f9979c2b68dd56aaaf9f21e191" - ], + "parents": ["9c8511409c0706f9979c2b68dd56aaaf9f21e191"], "authors": [ { "name": "morluto", @@ -4376,9 +3770,7 @@ "sha": "74d7da6ced0f869936ee0316b00616931b088066", "subject": "fix(artifacts): preserve ZIP identities and partial managed metadata", "body": "fix(artifacts): preserve ZIP identities and partial managed metadata\n\nReject malformed UTF-8 ZIP filenames at the decoding boundary while retaining CP437, Unicode Path overrides and leading U+FEFF. Preserve valid CustomAttribute parent and value facts when constructor identity is invalid, with an explicit partial-coverage issue.\n\nValidated ZIP integrity and filesystem-provider workflows, managed producer cases, temporary-file hygiene, package and static checks. Removed the superseded producer-only invalid-constructor regression.\n", - "parents": [ - "dcfc5d403ac997c2b08bee4753e57a1a4a8a8538" - ], + "parents": ["dcfc5d403ac997c2b08bee4753e57a1a4a8a8538"], "authors": [ { "name": "morluto", @@ -4395,9 +3787,7 @@ "sha": "264615059ce6c89badcc7288e8c67bb8dd1ce0dd", "subject": "refactor(mcp): trust validated inputs and tighten contract fixtures", "body": "refactor(mcp): trust validated inputs and tighten contract fixtures\n\nRemove repeated MCP input parsing after the SDK has validated named contracts. Reject unmodeled fixture operations and locate prompt contracts by name so unrelated catalog ordering cannot select a contract.\n\nValidated focused browser, Electron, runtime-observation and MCP workflow tests, advertised schemas, packaged MCP and static checks. Application-boundary validation remains in place.\n", - "parents": [ - "74d7da6ced0f869936ee0316b00616931b088066" - ], + "parents": ["74d7da6ced0f869936ee0316b00616931b088066"], "authors": [ { "name": "morluto", @@ -4414,9 +3804,7 @@ "sha": "55b61485e9f7568b69597eef8696ff6abfe53cfd", "subject": "fix(adb): preserve device paths and prevent destination collisions", "body": "fix(adb): preserve device paths and prevent destination collisions\n\nInterpret device paths once as POSIX paths and apply only the selected host's filename constraints. Preserve original PM paths and diagnostics, reject duplicate destinations before pulls, and use exact-name filesystem reservations to detect case and Unicode aliases without guessing volume rules.\n\nConsolidate failed-package cleanup ownership and strengthen no-output assertions. Validated 44 provider fixture tests, 47 filename/parser tests, six compiled CLI tests, static/docs checks, and package checks. No Android hardware was used.\n", - "parents": [ - "264615059ce6c89badcc7288e8c67bb8dd1ce0dd" - ], + "parents": ["264615059ce6c89badcc7288e8c67bb8dd1ce0dd"], "authors": [ { "name": "morluto", @@ -4433,9 +3821,7 @@ "sha": "0677468877465c8dfbe25c72f142a7b5bc8a3212", "subject": "fix(android): preserve decoded values and duplicate class inventories", "body": "fix(android): preserve decoded values and duplicate class inventories\n\nParse Apktool YAML and XML at the producer boundary, preserving scalar spelling, XML text and partial string coverage. Retain repeated JADX inventory rows with explicit duplicate-name counts and lookup ambiguity. Make the Apktool verifier report cleanup failures.\n\nValidation: parser, provider and JADX fixture boundary tests; typecheck, lint and documentation checks. Real Apktool and JADX engines were not exercised.\n\nRefs #1978\n", - "parents": [ - "55b61485e9f7568b69597eef8696ff6abfe53cfd" - ], + "parents": ["55b61485e9f7568b69597eef8696ff6abfe53cfd"], "authors": [ { "name": "morluto", @@ -4452,9 +3838,7 @@ "sha": "8bd5ba2d234cbd9a5bb9dd5daeaa191c3a1cad24", "subject": "fix(native): clarify Mach-O offset origins and reject partial ELF tables", "body": "fix(native): clarify Mach-O offset origins and reject partial ELF tables\n\nExpose the selected Mach-O slice and its container offset, derive that identity once, and map entrypoint and nonempty segment Evidence to container coordinates. Reject relocation sections whose byte length is not divisible by the entry size instead of silently accepting a floored count.\n\nValidation: native parser and selected-architecture boundaries, actual public CLI and stdio MCP on a compiled universal Mach-O, and a pyelftools 0.33 malformed-table probe. Full Linux pwntools bridge verification was unavailable on this host.\n\nRefs #1973\n", - "parents": [ - "0677468877465c8dfbe25c72f142a7b5bc8a3212" - ], + "parents": ["0677468877465c8dfbe25c72f142a7b5bc8a3212"], "authors": [ { "name": "morluto", @@ -4471,9 +3855,7 @@ "sha": "7285e15839a4fecf9940683699b781a60ccc4775", "subject": "fix(workflows): retain staged output ownership and cancellation semantics", "body": "fix(workflows): retain staged output ownership and cancellation semantics\n\nGive atomic Evidence and snapshot writes an explicit resource owner, preserve primary failures and completed publication receipts, and retry retained staging cleanup at the owning lifecycle. Verify inode identity before publishing or deleting; unknown path disappearance remains a cleanup failure. Keep snapshot admission reusable when a session closes and reopens.\n\nConsolidate JavaScript source-scope classification so cancellation cannot fabricate failures for unselected files. Classify configuration failures as invalid input. Remove stale assertions and reuse shared test cleanup ownership.\n\nValidation: 266 focused tests before final ownership tightening, 108 affected tests afterward, static and documentation checks, actual invalid-configuration CLI behavior, and isolated test temporary-directory hygiene.\n\nRefs #1968\n", - "parents": [ - "8bd5ba2d234cbd9a5bb9dd5daeaa191c3a1cad24" - ], + "parents": ["8bd5ba2d234cbd9a5bb9dd5daeaa191c3a1cad24"], "authors": [ { "name": "morluto", @@ -4490,9 +3872,7 @@ "sha": "89f5e489adac69af2937fabc1a5ba283191d630a", "subject": "test(native): replay complete dylib-use provider output", "body": "test(native): replay complete dylib-use provider output\n\nReplay the complete real Apple dylib-use output through the native provider boundary and retain rejection of an empty repeated options field. Align skill-install Result assertions and CDP initiator prerequisites with current contracts. The producing parser fix is already retained from main.\n\nRefs #1970\n\nCo-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>\nCo-authored-by: Kaoru0822 <208281322+kaoru0822-kitauji@users.noreply.github.com>", - "parents": [ - "7285e15839a4fecf9940683699b781a60ccc4775" - ], + "parents": ["7285e15839a4fecf9940683699b781a60ccc4775"], "authors": [ { "name": "Ysopwnable", @@ -4519,17 +3899,13 @@ } } ], - "pullRequests": [ - 1972 - ] + "pullRequests": [1972] }, { "sha": "1f17ac82282dfda1ae2dc87d99e66a8a039c0259", "subject": "feat(target): explain static WASM inspection after native rejection", "body": "feat(target): explain static WASM inspection after native rejection\n\nExplain recognized WASM v1 native-admission rejection with an exact call to the existing static inspection tool and its caller-supplied WABT prerequisites. Preserve selected paths, explicit raw-binary choices, typed missing-tool outcomes and connection usability.\n\nRefs #1852\n\nCo-authored-by: SII-YDD <38822679+SII-YDD@users.noreply.github.com>\nCo-authored-by: Ysopwnable <161784452+N0zoM1z0@users.noreply.github.com>\nCo-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>\nCo-authored-by: Kaoru0822 <208281322+kaoru0822-kitauji@users.noreply.github.com>", - "parents": [ - "89f5e489adac69af2937fabc1a5ba283191d630a" - ], + "parents": ["89f5e489adac69af2937fabc1a5ba283191d630a"], "authors": [ { "name": "SII-YDD", @@ -4564,17 +3940,13 @@ } } ], - "pullRequests": [ - 1872 - ] + "pullRequests": [1872] }, { "sha": "6395e8d3007d5ee453477460e7ee1c51cff76be0", "subject": "perf(mcp)!: compact repeated session discovery facts (#1988)", "body": "perf(mcp)!: compact repeated session discovery facts (#1988)\n\nGroup repeated session tool availability and provider capability facts, preserve complete named contracts and ordered limitations, and remove duplicate catalog descriptors. Update consumers and migration guidance.\n\nValidated by all 31 CI jobs, focused source checks, and actual Claude Code/Linux Hopper/native Windows Ghidra small-target workflows on the current integration tree.\n\nRefs #723.\n\nBREAKING CHANGE: binary_session no longer includes server_identity.catalog.tools; tool_availability and provider capabilities use grouped facts documented in docs/mcp-contracts.md.\n\nCo-authored-by: Kaoru0822 <208281322+kaoru0822-kitauji@users.noreply.github.com>", - "parents": [ - "1f17ac82282dfda1ae2dc87d99e66a8a039c0259" - ], + "parents": ["1f17ac82282dfda1ae2dc87d99e66a8a039c0259"], "authors": [ { "name": "Ysopwnable", @@ -4593,17 +3965,13 @@ } } ], - "pullRequests": [ - 1988 - ] + "pullRequests": [1988] }, { "sha": "e9fe6437a7da381f0aa5aa77571dcf03317122e7", "subject": "feat(ghidra): admit verified MIPS16 shared ELF images", "body": "feat(ghidra): admit verified MIPS16 shared ELF images\n\nAdmit the verified ELF32 o32 MIPS32r2 MIPS16 shared-image profile after complete source load and relocation inspection. Preserve caller-selected bytes, pin the endian-matched language, and report per-address decoder context. Refuse unverified relocation shapes with explicit reasons.\n\nVerified on Linux x64 with Ghidra 12.1.4: eight source-owned public CLI/MCP controls, original-artifact instruction/pseudocode/export replay, snapshot restore and owned cleanup. 152 integrated focused tests, static checks and documentation checks passed.\n\nFixes #1851\n\nCo-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>\nCo-authored-by: Kaoru0822 <208281322+kaoru0822-kitauji@users.noreply.github.com>", - "parents": [ - "6395e8d3007d5ee453477460e7ee1c51cff76be0" - ], + "parents": ["6395e8d3007d5ee453477460e7ee1c51cff76be0"], "authors": [ { "name": "Ysopwnable", @@ -4630,17 +3998,13 @@ } } ], - "pullRequests": [ - 1991 - ] + "pullRequests": [1991] }, { "sha": "f28f3382836f8dd8629c25b1bf5455d29b28d41d", "subject": "fix(targets): remove path advice for format refusals", "body": "fix(targets): remove path advice for format refusals\n\nReadable executable format refusals report their source format reason and an unsupported-target category instead of misleading missing-path advice. Preserve actual path/permission errors, WASM static recovery, and native target source inspection.\n\nVerified on Linux x64 through actual CLI/fresh stdio MCP: three NE/LE/LX controls, exact canonical projection parity, unchanged bytes, responsiveness and a missing-path control. 103 focused tests across nine files, full static gate and generated documentation passed.\n\nFixes #1979\nRefs #1852\n\nCo-authored-by: Ha1baraA11 <243105435+Ha1baraA11@users.noreply.github.com>\nCo-authored-by: Ysopwnable <161784452+N0zoM1z0@users.noreply.github.com>\nCo-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>\nCo-authored-by: Kaoru0822 <208281322+kaoru0822-kitauji@users.noreply.github.com>", - "parents": [ - "e9fe6437a7da381f0aa5aa77571dcf03317122e7" - ], + "parents": ["e9fe6437a7da381f0aa5aa77571dcf03317122e7"], "authors": [ { "name": "Ha1baraA1", @@ -4675,17 +4039,13 @@ } } ], - "pullRequests": [ - 1987 - ] + "pullRequests": [1987] }, { "sha": "a149d183efd08b0ad7c2a35c99f2394d905621d5", "subject": "feat(managed): select declaring types in inspect_managed_members", "body": "feat(managed): select declaring types in inspect_managed_members\n\nSelect exact declaring types before managed signatures and CIL bodies are decoded, preserving caller choices in CLI/MCP Evidence. Keep unmatched names and selected coverage explicit; comparisons and graphs retain unknowns outside their observed scope. Reuse existing metadata ownership/accounting and advertise unique selections through the actual SDK Schema.\n\nValidated with 229 focused tests across 21 files, 11 managed conformance controls, fullstatic/docs checks and real Linux CLI and fresh MCP inspection of two unchanged DLLs. All 118 selected CIL hashes matched original PE-mapped bytes; result/caller-argument parity and unmatched controls passed. Full artifact/native-boundary metadata is complete; whole-assembly members retain the unchanged 64 MiB resource constraint. No target code executes.\n\nRefs #1878\n\nCo-authored-by: skared <190618464+skoodster@users.noreply.github.com>\nCo-authored-by: Claude Opus 5.5 \nCo-authored-by: Ysopwnable <161784452+N0zoM1z0@users.noreply.github.com>\nCo-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>\nCo-authored-by: Kaoru0822 <208281322+kaoru0822-kitauji@users.noreply.github.com>", - "parents": [ - "f28f3382836f8dd8629c25b1bf5455d29b28d41d" - ], + "parents": ["f28f3382836f8dd8629c25b1bf5455d29b28d41d"], "authors": [ { "name": "skoodster", @@ -4736,17 +4096,13 @@ } } ], - "pullRequests": [ - 1706 - ] + "pullRequests": [1706] }, { "sha": "43f9c39dfbdfaa6e5bc260b037a506cd1f56fe6d", "subject": "fix(setup): configure an empty Hermes config.yaml (#1983)", "body": "fix(setup): configure an empty Hermes config.yaml (#1983)\n\n* fix(setup): treat an empty Hermes config.yaml as a new document\n\nYAML parses an empty file to null, so Hermes configuration was checked\nas an object before the shared empty-file rule and rejected. Setup then\nfailed its readback gate for a zero-byte config.yaml, although a missing\nfile is configured and the Hermes serializer already writes a fresh\ndocument for empty original text. Apply the empty-file rule before the\nHermes YAML parse, as #1117 did for JSON clients.\n\n* test(setup): configure an empty Hermes config.yaml\n\nConfigure zero-byte and newline-only config.yaml files through the\nreal filesystem workflow, then read the registration back as aligned.", - "parents": [ - "a149d183efd08b0ad7c2a35c99f2394d905621d5" - ], + "parents": ["a149d183efd08b0ad7c2a35c99f2394d905621d5"], "authors": [ { "name": "Vinícius Andrade", @@ -4757,17 +4113,13 @@ } } ], - "pullRequests": [ - 1983 - ] + "pullRequests": [1983] }, { "sha": "0d11f71e0dc5cf95d3bea093355f7edc09089a68", "subject": "fix(managed): admit ReadyToRun images built for non-Windows hosts (#1985)", "body": "fix(managed): admit ReadyToRun images built for non-Windows hosts (#1985)\n\nReadyToRun images compiled for Linux, macOS or the BSDs store the COFF machine XORed with IMAGE_FILE_MACHINE_NATIVE_OS_OVERRIDE (dotnet/runtime src/coreclr/inc/pedecoder.h). Every framework assembly in a Linux .NET install has machine 0xFD1D, so target admission and the managed PE reader rejected them as an unsupported architecture.\n\nDecode the PE machine once in src/domain/peMachine.ts, replacing the two duplicated switches, and accept an OS override only on images with a CLI directory.", - "parents": [ - "43f9c39dfbdfaa6e5bc260b037a506cd1f56fe6d" - ], + "parents": ["43f9c39dfbdfaa6e5bc260b037a506cd1f56fe6d"], "authors": [ { "name": "Jeremy Levartovsky", @@ -4778,17 +4130,13 @@ } } ], - "pullRequests": [ - 1985 - ] + "pullRequests": [1985] }, { "sha": "4b653fe6ad1d25a2d9a69d5e93610380c0c09a34", "subject": "fix(native): accept universal binaries with LIB64 x86_64 slices (#1982)", "body": "fix(native): accept universal binaries with LIB64 x86_64 slices (#1982)\n\n* fix(native): apply printed lipo capability bits to CPU subtypes\n\nlipo -detailed_info prints a slice's capability byte separately from its\nsymbolic subtype: CPU_SUBTYPE_LIB64 for x86_64 and ppc64, and other bits\nas hex. Only the arm64e pointer-auth form was applied, so a LIB64 x86_64\nslice normalized to subtype 3 while its FAT entry carries 0x80000003,\nand slice validation rejected the universal binary as an integrity\nmismatch. Fold the printed capability byte into the subtype code.\n\n* fix(native): leave lipo CPU subtypes unknown without capability bits\n\nThe lipo shipped with macOS 26 prints an empty capabilities line for\nx86_64 slices whose FAT capability byte is 0x80 as well as 0x00, so a\nsymbolic subtype alone does not identify the slice's CPU subtype. The\nparser assumed no capability bits and still reported subtype 3 for\nLIB64 slices, which made universal applications such as Sublime Text\nfail slice validation. Report the subtype code as unknown when lipo\nprints no capability byte, as arm64e already does; slice validation\nthen relies on the remaining physical facts.\n\n* test(native): cover printed and blank lipo capability bits\n\nFold CPU_SUBTYPE_LIB64 and hex capability bytes into x86_64 subtype\ncodes, and keep the code unknown for the blank capabilities line that\nmacOS 26 lipo prints.\n\n* test(native): match a LIB64 x86_64 slice with blank lipo capabilities\n\nRead a universal image whose x86_64 FAT entry carries 0x80000003 while\nlipo reports CPU_SUBTYPE_X86_ALL with a blank capabilities line, as\nmacOS 26 lipo does, and expect both slices instead of an integrity\nfailure.\n\n* fix(native): compare named lipo subtype bits without capability bytes\n\nA blank capabilities line leaves the subtype code unknown, and slice\nmatching then skipped the subtype entirely. A FAT entry whose named\nsubtype differs, such as CPU_SUBTYPE_ARM64_V8 recorded by lipo as\nCPU_SUBTYPE_ARM64_ALL, was accepted. Keep comparing the complete\nsubtype when lipo printed its capability byte, and otherwise compare\nthe subtype bits its record names.\n\n* test(native): share LIB64 slice reader setup\n\nRead the LIB64 universal fixture through one helper that takes the\nx86_64 subtype lipo reports, so further cases reuse the same image and\nlipo record. The existing expectation is unchanged.\n\n* test(native): reject a blank-capability lipo subtype naming other bits\n\nWith the capabilities line blank, a lipo record naming\nCPU_SUBTYPE_X86_64_H for the x86_64 LIB64 slice still disagrees with\nthe FAT entry's subtype bits and fails slice validation.", - "parents": [ - "0d11f71e0dc5cf95d3bea093355f7edc09089a68" - ], + "parents": ["0d11f71e0dc5cf95d3bea093355f7edc09089a68"], "authors": [ { "name": "Vinícius Andrade", @@ -4799,17 +4147,13 @@ } } ], - "pullRequests": [ - 1982 - ] + "pullRequests": [1982] }, { "sha": "1febc22907f1cc8035dd1450616233121bd7f19d", "subject": "fix(wasm): inspect modules whose custom section names contain NUL (#1981)", "body": "fix(wasm): inspect modules whose custom section names contain NUL (#1981)\n\n* fix(wasm): frame custom section names at their displayed NUL\n\nwasm-objdump prints a custom section name with printf's %.*s, so an\nembedded NUL ends the displayed name, as it does for module names.\nThe section row was compared with the complete name decoded from WAT,\nso a valid module whose custom section name contains U+0000 failed\ninspection with \"WABT custom-section header does not match decoded\nWAT\". Compare the row with the displayed prefix instead.\n\n* test(wasm): cover NUL-terminated custom section names\n\nFrame the real objdump golden with a decoded custom section name that\ncontinues after a NUL, and keep rejecting a displayed prefix that\ndiffers from the decoded name.\n\n* test(wasm): verify a NUL-containing custom section name with real WABT\n\nAdd a custom section named \"visible\\0hidden\" to the real-tool custom\nname fixture. WABT 1.0.42 decodes it as an escaped WAT name and\ndisplays \"visible\" in wasm-objdump, so the verifier expects that\ndescription through the compiled CLI and MCP.\n\n* refactor(wasm): share WABT's NUL-terminated name display\n\nModule-name preamble lines and custom-section rows each truncated the\ndecoded name at its first NUL. Keep that display rule in one helper so\nboth framings follow the same producer behavior. Output is unchanged.", - "parents": [ - "4b653fe6ad1d25a2d9a69d5e93610380c0c09a34" - ], + "parents": ["4b653fe6ad1d25a2d9a69d5e93610380c0c09a34"], "authors": [ { "name": "Vinícius Andrade", @@ -4820,17 +4164,13 @@ } } ], - "pullRequests": [ - 1981 - ] + "pullRequests": [1981] }, { "sha": "eaf88aca2af2b8ad7a277c09d0b45f6e2de8ac4a", "subject": "test(ghidra): require pending multi-HI16 coverage in the real MIPS relocatable lane (#1974)", "body": "test(ghidra): require pending multi-HI16 coverage in the real MIPS relocatable lane (#1974)\n\n* test(ghidra): require pending multi-HI16 coverage in the real MIPS relocatable lane\n\nPost-merge review on #1950: the relocation oracle exposes coverage.multiple_hi16, but the real-Ghidra lane never required it, and Clang's C output never produces a LO16 that resolves several pending HI16s. Ghidra's loader could therefore mishandle that stream while the lane still passed, although most GCC-built kernel modules checked contain it.\n\nThe relocatable fixture adds an assembly block with two lui %hi(rea_mips_rel_carry); LLVM's relocation sort then leaves one HI16 pending until a later LO16 that resolves it together with another HI16, including the carry. The lane now requires multiple_hi16: false on the previous fixture, true for all three variants (LE, BE, soft-float module) on real Ghidra 12.1.4.\n\n* test(ghidra): make the MIPS multi-HI16 fixture independent of relocation sorting\n\nReview on #1974: the block used two %lo of rea_mips_rel_carry, a symbol with other %lo uses, so the relocation stream depended on the assembler's HI16/LO16 sort. Clang 21 happened to leave a HI16 pending; Clang 17 (per review) and GNU as 2.45 (checked here: HI@4 LO@8 HI@0 LO@10) pair each HI16 with its own LO16, so multiple_hi16 stays false and the lane fails.\n\nUse a dedicated symbol with two %hi and exactly one %lo. Any assembler that orders each HI16 before a matching LO16 must then emit both HI16s ahead of that single LO16: Clang 21 gives HI@0 HI@4 LO@8, GNU as 2.45 gives HI@4 HI@0 LO@8. The real-Ghidra lane passes for LE, BE and the soft-float module variant with multiple_hi16 true.", - "parents": [ - "1febc22907f1cc8035dd1450616233121bd7f19d" - ], + "parents": ["1febc22907f1cc8035dd1450616233121bd7f19d"], "authors": [ { "name": "Aurelio Bernal", @@ -4841,17 +4181,13 @@ } } ], - "pullRequests": [ - 1974 - ] + "pullRequests": [1974] }, { "sha": "976c2c083eee1fdd9e89a1a720f768a6ee6df277", "subject": "fix(contracts): reject OS-invalid local paths in binary and artifact tools (#1925)", "body": "fix(contracts): reject OS-invalid local paths in binary and artifact tools (#1925)\n\n* fix(contracts): reject OS-invalid local paths in binary and artifact tools\n\nEnforce localPathStringSchema across inspect_pe_resources,\ninspect_binary_layout, inspect_recorded_crash, inspect_wasm_artifact,\nand inspect_evm_interface input schemas to reject embedded NUL bytes at\nthe contract boundary instead of failing later during filesystem\noperations.\n\nAdd corresponding acceptance test cases to the advertised MCP contracts\nmatrix in localToolContracts.test.ts.\n\nSigned-off-by: Vinícius DS Andrade <95101505+viniciusdsandrade@users.noreply.github.com>\n\n* style(contracts): wrap pe resources path description under print width\n\nWrap the inspectPeResourcesInputSchema path property description to keep lines within the 80-column oxfmt limit.\n\nSigned-off-by: Vinícius DS Andrade <95101505+viniciusdsandrade@users.noreply.github.com>\n\n---------\n\nSigned-off-by: Vinícius DS Andrade <95101505+viniciusdsandrade@users.noreply.github.com>", - "parents": [ - "eaf88aca2af2b8ad7a277c09d0b45f6e2de8ac4a" - ], + "parents": ["eaf88aca2af2b8ad7a277c09d0b45f6e2de8ac4a"], "authors": [ { "name": "Vinícius Andrade", @@ -4862,17 +4198,13 @@ } } ], - "pullRequests": [ - 1925 - ] + "pullRequests": [1925] }, { "sha": "ed6af7eb8cf052c52fec8bfdc5d509377cb30a1a", "subject": "fix(call-path): preserve relationship coverage from analysis (#2001)", "body": "fix(call-path): preserve relationship coverage from analysis (#2001)\n\nForward observed relationship coverage into function Evidence and use its typed completeness when searching call paths. Preserve contextual limitations, legacy fallback, provenance, and unknown outcomes.\n\nAvoid argument-spread exhaustion on large valid limitation lists. Cover the public MCP producer/consumer chain, metadata tampering, terminal and unreachable coverage, and large-list capacity.\n\nRelated to #1964; separate get_call_graph and trace_call_path work is not included. AI-assisted with Hermes (Nous Research).", - "parents": [ - "976c2c083eee1fdd9e89a1a720f768a6ee6df277" - ], + "parents": ["976c2c083eee1fdd9e89a1a720f768a6ee6df277"], "authors": [ { "name": "Dmitry Khanukov", @@ -4883,17 +4215,13 @@ } } ], - "pullRequests": [ - 2001 - ] + "pullRequests": [2001] }, { "sha": "091cb81fc3ca2b8ec96df7a534934388a6b882cd", "subject": "fix(process): report the Swift compiler outcome with bounded diagnostics (#1999)", "body": "fix(process): report the Swift compiler outcome with bounded diagnostics (#1999)\n\n* fix(process): report the Swift compiler outcome with bounded diagnostics\n\n* fix(process): keep a signaled compiler's null exit code", - "parents": [ - "ed6af7eb8cf052c52fec8bfdc5d509377cb30a1a" - ], + "parents": ["ed6af7eb8cf052c52fec8bfdc5d509377cb30a1a"], "authors": [ { "name": "pablo", @@ -4904,17 +4232,13 @@ } } ], - "pullRequests": [ - 1999 - ] + "pullRequests": [1999] }, { "sha": "adde8a80921b199ddd7105998f3760d345b468fc", "subject": "fix(native): reject required otool fields truncated before their value (#1995)", "body": "fix(native): reject required otool fields truncated before their value (#1995)\n\n* fix(native): reject required otool fields truncated before their value\n\n#1967 let requireUniqueField count a label at end of line so an empty\ndylib-use options row is present. That applied to every required field,\nso truncated output such as a bare vmaddr, vmsize, uuid or entryoff line\npassed the presence check while parseField dropped it, and the value\nsilently became null.\n\nLet parseField decide which labeled line carries a value: the single\nmatching line must parse as that field. The empty options row remains\nthe only valueless field parseField admits.\n\nCo-Authored-By: Claude Opus 5.5 \n\n* fix(native): admit the empty segname of Mach-O object files\n\nMH_OBJECT files put their sections in one segment whose name is empty,\nand otool -l prints it as a bare segname label. Requiring a value for\nevery scalar field rejected valid object-file output as unreadable.\n\nLet parseField admit an empty segname like the empty dylib-use options\nrow, and keep projecting an empty or absent segment name as \"unknown\",\nas main did.\n\nCo-Authored-By: Claude Opus 5.5 \n\n* fix(native): admit all-NUL Mach-O section names\n\nAn all-NUL section_64.sectname prints as a bare sectname label, like an\nempty segname. Admit it in parseField and keep projecting the empty name\nas \"unknown\", as main did.\n\nCo-Authored-By: Claude Opus 5.5 \n\n---------\n\nCo-authored-by: Claude Opus 5.5 ", - "parents": [ - "091cb81fc3ca2b8ec96df7a534934388a6b882cd" - ], + "parents": ["091cb81fc3ca2b8ec96df7a534934388a6b882cd"], "authors": [ { "name": "Kaoru0822", @@ -4933,17 +4257,13 @@ } } ], - "pullRequests": [ - 1995 - ] + "pullRequests": [1995] }, { "sha": "f889a69fb9efe42dd0120c96ff44b4298c1c7c6c", "subject": "fix(build): resolve rolldown from the npm registry in package-lock.json (#1986)", "body": "fix(build): resolve rolldown from the npm registry in package-lock.json (#1986)\n\nThe rolldown 1.2.12 entry resolved from mirrors.cloud.tencent.com while\nevery other entry uses registry.npmjs.org, so npm ci failed in\nenvironments that can reach the npm registry but not that mirror.\nVersion and integrity are unchanged.\n\n\nClaude-Session: https://claude.ai/code/session_01Q3rXQaLacJ7gNBRkp7DovF\n\nCo-authored-by: Claude ", - "parents": [ - "adde8a80921b199ddd7105998f3760d345b468fc" - ], + "parents": ["adde8a80921b199ddd7105998f3760d345b468fc"], "authors": [ { "name": "balkan16", @@ -4962,17 +4282,13 @@ } } ], - "pullRequests": [ - 1986 - ] + "pullRequests": [1986] }, { "sha": "aada0ca8126bf14c60750a4ccd4a79667770a1e4", "subject": "fix(evidence): validate closure projections and browser body coverage", "body": "fix(evidence): validate closure projections and browser body coverage\n\nShare ledger status, coverage, reports, graphs, Evidence links and closure commitments between the producer and readiness validation. Preserve limitation-driven unknown results and reject stale or inconsistent projections.\n\nDistinguish malformed CDP response envelopes from unavailable JSON payload shapes. Validate required encoding flags and preserve partial request facts.\n\nValidation: 116 focused tests, static and architecture checks, documentation checks. Browser regression coverage uses controlled CDP responses.\n", - "parents": [ - "f889a69fb9efe42dd0120c96ff44b4298c1c7c6c" - ], + "parents": ["f889a69fb9efe42dd0120c96ff44b4298c1c7c6c"], "authors": [ { "name": "morluto", @@ -4989,9 +4305,7 @@ "sha": "b5ededd0f9c28d0f696a205103066928117368ee", "subject": "fix(providers): retain native parsing and compiler failure diagnostics", "body": "fix(providers): retain native parsing and compiler failure diagnostics\n\nParse otool field occurrences once and reject valueless required fields while retaining empty dylib options. Preserve compiler exit outcomes and stderr through capture errors and nested Ghidra causes, with explicit UTF-8 truncation after redaction.\n\nStrengthen provider failure assertions and document the manual Ghidra 12.1.4 macOS x64 decompiler build using upstream instructions.\n\nValidation: focused producer tests, nine fake-compiler preparation and cancellation tests, temporary-directory hygiene, static and documentation checks. No real Swift or Ghidra compilation was run locally.\n", - "parents": [ - "aada0ca8126bf14c60750a4ccd4a79667770a1e4" - ], + "parents": ["aada0ca8126bf14c60750a4ccd4a79667770a1e4"], "authors": [ { "name": "morluto", @@ -5008,9 +4322,7 @@ "sha": "e19879328a11fe38b49b6b133a8ebde908ea980e", "subject": "refactor: prune obsolete provider and verification code", "body": "refactor: prune obsolete provider and verification code\n\nRemove unused imports, private inferred types, superseded limit constants and a duplicate MCP assertion. Preserve intentional field omissions while deleting unused local bindings.\n\nValidation: typecheck, lint, formatting, unused-code and architecture checks pass. Runtime behavior is unchanged.\n", - "parents": [ - "b5ededd0f9c28d0f696a205103066928117368ee" - ], + "parents": ["b5ededd0f9c28d0f696a205103066928117368ee"], "authors": [ { "name": "morluto", @@ -5027,9 +4339,7 @@ "sha": "6611bcf6e86630c775c24e6afa00d7239c64e70e", "subject": "test(android): verify duplicate class inventory behavior on empty discovery queries (#1984)", "body": "test(android): verify duplicate class inventory behavior on empty discovery queries (#1984)\n\nAssert that search_android_classes preserves duplicate class-name rows and reports duplicate_names when querying with an empty string on an APK reporting duplicated class inventories.", - "parents": [ - "e19879328a11fe38b49b6b133a8ebde908ea980e" - ], + "parents": ["e19879328a11fe38b49b6b133a8ebde908ea980e"], "authors": [ { "name": "Vinícius Andrade", @@ -5040,17 +4350,13 @@ } } ], - "pullRequests": [ - 1984 - ] + "pullRequests": [1984] }, { "sha": "d93fbda390c6b8b2741c552bd194b50c3e08e0c1", "subject": "perf(cli): bundle runtime entries to reduce Windows startup I/O (#1996)", "body": "perf(cli): bundle runtime entries to reduce Windows startup I/O (#1996)\n\nBundle ordinary CLI and output entries to reduce Windows module filesystem resolution while preserving source URLs, lazy loading and worker resources. Keep release identity in its shared owning module.\n\nCo-authored-by: Kaoru0822 <208281322+kaoru0822-kitauji@users.noreply.github.com>", - "parents": [ - "6611bcf6e86630c775c24e6afa00d7239c64e70e" - ], + "parents": ["6611bcf6e86630c775c24e6afa00d7239c64e70e"], "authors": [ { "name": "Ysopwnable", @@ -5069,17 +4375,13 @@ } } ], - "pullRequests": [ - 1996 - ] + "pullRequests": [1996] }, { "sha": "87b9793c53caf70a9f3a516214856899ca2d7cf8", "subject": "fix(javascript): trace wrapped Electron IPC paths in large bundles (#1874)", "body": "fix(javascript): trace wrapped Electron IPC paths in large bundles (#1874)\n\nCo-authored-by: David <17119984+fengdwx@users.noreply.github.com>", - "parents": [ - "d93fbda390c6b8b2741c552bd194b50c3e08e0c1" - ], + "parents": ["d93fbda390c6b8b2741c552bd194b50c3e08e0c1"], "authors": [ { "name": "David", @@ -5098,17 +4400,13 @@ } } ], - "pullRequests": [ - 1874 - ] + "pullRequests": [1874] }, { "sha": "b38429cb6a0de8f4bb5ae01633e24abe2d7cde46", "subject": "fix(native): preserve universal Mach-O container identity", "body": "fix(native): preserve universal Mach-O container identity\n\nKeep FAT container format distinct from selected slice architecture through target admission, Evidence, snapshots, and CLI/MCP lifecycle results. Preserve native, Hopper, Ghidra, extraction, and dylib routing for the Mach-O family.\n\nReject selected FAT ranges overlapping their table or too short for a Mach-O header. Replace empty-slice fixtures with in-bounds executable headers and cover thin, universal, single-slice, FAT64, and swapped containers.\n\nValidation: static and architecture checks, generated docs, targeted producer and public MCP tests. Provider routing uses controlled fixtures; no live Hopper, IDA, JADX, or Ghidra analysis was performed for this change.\n", - "parents": [ - "87b9793c53caf70a9f3a516214856899ca2d7cf8" - ], + "parents": ["87b9793c53caf70a9f3a516214856899ca2d7cf8"], "authors": [ { "name": "morluto", @@ -5125,9 +4423,7 @@ "sha": "5dfb9d050c2cc44a61b183dae765bef4d22a53b7", "subject": "fix(analysis)!: scope call-graph caveats to their observed relationships", "body": "fix(analysis)!: scope call-graph caveats to their observed relationships\n\nReturn deduplicated execution caveats once and preserve provider-owned relationship diagnostics and completeness on graph nodes. Keep complete relationship reads exhaustive despite contextual caveats, including portable call-path reconstruction.\n\nPreserve omitted diagnostic fields in historical Evidence and bind reported diagnostics into semantic identity. Revise graph workflow and Ghidra adapter profiles so old cached representations cannot replay under the new contracts.\n\nRemove stale duplicate-lookup test claims and redundant fixture validation. Prune million-entry duplicate cases while retaining argument-stack and deep-chain regressions; bounded Flameox captures identified validation and canonical hashing costs.\n\nValidation: static and architecture checks, generated docs, 364 focused tests before pruning, 21 call-path tests after pruning, public MCP schema validation and targeted profile tests. Real engine behavior was not locally exercised.\n\nBREAKING CHANGE: get_call_graph normalized_result now contains { graph, limitations }; traversal-depth groups are under graph.\n", - "parents": [ - "b38429cb6a0de8f4bb5ae01633e24abe2d7cde46" - ], + "parents": ["b38429cb6a0de8f4bb5ae01633e24abe2d7cde46"], "authors": [ { "name": "morluto", @@ -5144,9 +4440,7 @@ "sha": "edf46248f2a44b4e5776518489fee09d0fc4516b", "subject": "fix(targets): project invalid raw-binary loads as caller input (#2004)", "body": "fix(targets): project invalid raw-binary loads as caller input (#2004)\n\n* fix(targets): project invalid raw-binary loads as caller input\n\n* fix(targets): name real load options and cover DOS COM kind pairing", - "parents": [ - "5dfb9d050c2cc44a61b183dae765bef4d22a53b7" - ], + "parents": ["5dfb9d050c2cc44a61b183dae765bef4d22a53b7"], "authors": [ { "name": "pablo", @@ -5157,17 +4451,13 @@ } } ], - "pullRequests": [ - 2004 - ] + "pullRequests": [2004] }, { "sha": "b8fab7429771bb17a7ca0297661de3c9935212af", "subject": "fix(javascript): preserve execution and invocation provenance", "body": "fix(javascript): preserve execution and invocation provenance\n\nKeep direct empty bridge objects observed, reject unexecuted initializers,\ninvalidate modified bootstrap tables and Electron identities, and retain\nselection predicates through symbolic values and wrapper paths. Track lexical\nbinding identity and completed activation boundaries without leaking analysis\norder into earlier reads.\n\nSeparate wrapper invocation provenance from the underlying IPC source range\nso repeated registrations remain ambiguous through transfer and graph joins.\nUse the same offered transfer budget for module preflight and final writing.\n\nIndex static literal properties once instead of rescanning every member. Keep\nthe original 10,001-member capacity fixture; Flameox confirmed the repeated\nlookup cost and the optimized fixture completes in under one second locally.\nPrune the stale compact-schema tool inventory assertion and update the public\ncall-graph registration expectation to its declared result envelope.\n\nValidation: build, check, docs:check, 83 focused tests, 10 Electron identity\nacceptance cases, 2 full-scale finding-capacity cases, and 7 compact-schema\ntransport tests. No real Electron runtime execution is claimed.\n", - "parents": [ - "edf46248f2a44b4e5776518489fee09d0fc4516b" - ], + "parents": ["edf46248f2a44b4e5776518489fee09d0fc4516b"], "authors": [ { "name": "morluto", @@ -5184,9 +4474,7 @@ "sha": "42b0ed126df7d5b908ac369715378d5e519051b7", "subject": "fix(javascript): retain guards without duplicating observed IPC calls", "body": "fix(javascript): retain guards without duplicating observed IPC calls\n\nInclude enclosing control-flow predicates when deciding whether symbolic\nwrapper facts can be reported without guards. Preserve the guarded paths\nand unresolved coverage instead of inventing unconditional exposures or\nchannel pairing candidates.\n\nKeep fully observed renderer transmissions singular when tracing an exposed\ncallback. Distinct wrapper registrations still retain invocation identities.\nThis fixes the Electron package baseline's doubled transmission count.\n\nValidation: check; 43 exact source and public CLI/MCP tests; existing artifact,\nextraction, Electron analysis and routed-analysis verifier against the built\nCLI. Installed-package platform coverage remains with CI.\n", - "parents": [ - "b8fab7429771bb17a7ca0297661de3c9935212af" - ], + "parents": ["b8fab7429771bb17a7ca0297661de3c9935212af"], "authors": [ { "name": "morluto", @@ -5203,9 +4491,7 @@ "sha": "2ff850de68dc9b05c6faf2bbfd26d56bc2d5d27c", "subject": "fix(session): attribute selected-provider capabilities to the resolved identity (#2013)", "body": "fix(session): attribute selected-provider capabilities to the resolved identity (#2013)\n\nProfile resolution gives Ghidra and Hopper a concrete version, but the\nselected candidate's capabilities and the session route kept the\nprovider's static identity with a null version. binary_session therefore\ngrouped capability sets under a different identity than the binding and\nthe selected candidate.\n\nThe registry now rebinds the selected provider's capabilities to the\nresolved identity once, on the binding, and the route uses them. Evidence\nprovenance already compensated downstream by substituting the profile\nidentity; that repair is removed because the route now carries the\nresolved identity.\n\nFixes #2009\n\nCo-authored-by: Claude Opus 5.5 ", - "parents": [ - "42b0ed126df7d5b908ac369715378d5e519051b7" - ], + "parents": ["42b0ed126df7d5b908ac369715378d5e519051b7"], "authors": [ { "name": "Kaoru0822", @@ -5224,17 +4510,13 @@ } } ], - "pullRequests": [ - 2013 - ] + "pullRequests": [2013] }, { "sha": "64b71b180a88a2df1b0b61e803c1c322ee59c5e1", "subject": "docs: clarify ownership and interpretation boundaries", "body": "docs: clarify ownership and interpretation boundaries\n", - "parents": [ - "2ff850de68dc9b05c6faf2bbfd26d56bc2d5d27c" - ], + "parents": ["2ff850de68dc9b05c6faf2bbfd26d56bc2d5d27c"], "authors": [ { "name": "morluto", @@ -5251,9 +4533,7 @@ "sha": "880a603fe89db2132fd05a35b33a8c459673beda", "subject": "feat(mcp): derive an API surface view from retained web network captures (#1891)", "body": "feat(mcp): derive an API surface view from retained web network captures (#1891)\n\n* feat(mcp): derive an API surface view from retained web network captures\n\n* fix(mcp): fail closed on sensitive parents and budget api-surface path expansion\n\n* fix(mcp): keep recorded api-surface paths and budget only templated segments\n\n* fix(mcp): read api-surface paths only from canonical URLs and charge new values once\n\n* fix(mcp): reject authority-less api-surface URLs and key groups by rule positions\n\n* fix(mcp): label api-surface confidence from all groups and cap transient path memory\n\n* fix(mcp): budget api-surface dedup sets and narrow detail outputs\n\nCharge retained deduplication sets before allocation, advertise only\neach analysis operation's summary from its detail output, and document\nthat any templated group makes every API-surface page inferred.\n\n* fix(mcp): bound api-surface path text and record limitations\n\nCharge retained literal path copies before allocation, publish only\nvalid media-type essences, and deduplicate examined record limitations\nonto the view.\n\n* fix(mcp): keep api-surface refusals and path splits inside the reply budget\n\nSensitive-parent refusals now use the token sensitive_values_unretained so declared literals are not echoed. A later path split is charged against bytes already retained, and the published example includes the HAR record limitation with its matching digest.\n\n* fix(mcp): budget api-surface method text before group keys\n\nCharge method and origin text against the reply budget before the group key is serialized. Document that samples merge only when method, origin, and exact segment rules match.\n\n* fix(mcp): bound api-surface copies and control-character authorities\n\nReject authorities containing a tab or newline so WHATWG cannot move userinfo into the recorded path. Charge four path copies, two method and origin copies, and each distinct content type against bytes already retained.\n\n* fix(mcp): preflight combined api-surface group charges\n\nTotal path, method, origin, and segment charges before retaining a new group. Track content types in a set so distinct MIME essences are not compared quadratically.\n\n* fix(mcp): charge api-surface content-type sets on first use\n\nCreate the per-group content-type set when the first essence is retained, and charge it before allocation. Groups with no content type no longer keep an empty set.\n\n* refactor(analysis): centralize API-surface ownership and admission\n\nOwn grouping, deduplication, and combined retained/temporary resource admission in one accumulator. Charge fixed group storage before allocation and materialize only the requested page.\n\nShare recorded URL parsing between capture redaction and projection, preserving source paths and excluding ambiguous credential fields. Cover resource admission invariants and the compiled HAR-to-view workflow.\n\n* fix(analysis): admit capture schema clone before parsing\n\n* fix(javascript): share Electron mutation proof with wrapped calls\n\n* test(mcp): align graph and catalog checks with current contracts\n\n* fix(analysis): admit and validate portable capture views\n\n---------\n\nCo-authored-by: Matt Van Horn <455140+mvanhorn@users.noreply.github.com>\nCo-authored-by: Cursor Agent \nCo-authored-by: morluto <76467478+morluto@users.noreply.github.com>", - "parents": [ - "64b71b180a88a2df1b0b61e803c1c322ee59c5e1" - ], + "parents": ["64b71b180a88a2df1b0b61e803c1c322ee59c5e1"], "authors": [ { "name": "Matt Van Horn", @@ -5288,17 +4568,13 @@ } } ], - "pullRequests": [ - 1891 - ] + "pullRequests": [1891] }, { "sha": "04089d5bec11d6e0411e7c35d0168bbae63d7e7d", "subject": "test(clients): verify native Gemini CLI integration on Windows (#1936)", "body": "test(clients): verify native Gemini CLI integration on Windows (#1936)\n\n* test(clients): verify native Gemini CLI integration on Windows\n\nThe Gemini CLI client lane asserted POSIX. On Windows it also needs the npm install's JavaScript entry point, because only a gemini.cmd shim reaches PATH, and two setup-plan checks compared paths with a hard-coded slash. Remove the assertion, run a selected .js, .mjs or .cjs entry point under the verifier's Node, build those prefixes with path.sep, name the entry point in the Windows preflight error, and record 0.63.0 as verified on native Windows in docs/testing.md.\n\nFixes #1935\n\n* test(clients): resolve the selected Gemini CLI entry point once\n\nThe preflight runs from the caller's directory and the client run from the disposable workspace, so a relative REA_VERIFY_GEMINI_COMMAND passed the preflight and then failed with Cannot find module. Resolve a selected JavaScript entry point to an absolute path before both launches.", - "parents": [ - "880a603fe89db2132fd05a35b33a8c459673beda" - ], + "parents": ["880a603fe89db2132fd05a35b33a8c459673beda"], "authors": [ { "name": "pablodiazjorge", @@ -5309,17 +4585,13 @@ } } ], - "pullRequests": [ - 1936 - ] + "pullRequests": [1936] }, { "sha": "d9d2a173819ce8e2e7f09eb584ec6ff7b4ee3480", "subject": "feat(setup): register DeepSeek Harness through setup, doctor and uninstall (#1929)", "body": "feat(setup): register DeepSeek Harness through setup, doctor and uninstall (#1929)\n\n* feat(setup): register DeepSeek Harness through setup, doctor and uninstall\n\nDeepSeek Harness registers MCP clients through a Cordis YAML patch\nsequence in the home patch rather than a server table, so setup could\nnot configure it and users had to append the documented entry by hand.\n\nAdd a dsh client: the home patch $DSH_HOME/cordis.patch.yml\n(~/.dsh/cordis.patch.yml when unset) is parsed as a patch list, the REA\nentry owns the stable rea-mcp id, and setup appends or replaces exactly\nthat entry while preserving unrelated patches and comments in place.\nDoctor reports the registration through the same entry, and uninstall\nremoves it, dropping insert operations it emptied. Skill destinations\nfollow ~/.agents/skills ($DSH_AGENTS_HOME/skills when configured), the\nhome the rest of the client machinery already uses.\n\nFixes #1839\n\n* fix(setup): carry environment and identity validation into DSH registrations\n\nAddress review: the DSH entry discarded discovered provider overrides;\nconfig.env is now emitted and retained like the other dialects. An entry\ncarrying the rea-mcp id under a wrong or missing package name, or\nduplicated entries, reads back as absent so setup rewrites exactly one\ncanonical entry instead of reporting unchanged. Doctor now requires\nserverName rea and stdio transport before calling a DSH registration\naligned, and the Harness skill identifier in the docs matches the\ninstalled reverse-engineer-anything skill.\n\n* fix(setup): apply Cordis patch order and collapse DSH registrations\n\nAddress review: a later direct { id, config } operation replaces the\nrow's config under the native patch DSL, so the registration view now\napplies patches in order instead of only reading insert operations;\ndoctor reports the effective command rather than the inserted one.\nSetup rewrites exactly one canonical entry: duplicate id-matching rows\ncollapse to the first, direct patches to the entry are dropped from the\ndocument and from the edited YAML, and uninstall removes them with the\nentry. The client-location test fixture now clears DSH_HOME and\nDSH_AGENTS_HOME so a developer environment cannot point the suite at\nreal Harness homes.\n\n* fix(setup): repair direct-only registrations and preserve Cordis entry state\n\nSerialize now edits the first insertion carrying rea-mcp in place, so a\ngrouped entry keeps its scope, neighbors, and comments instead of moving\nto a fresh root-level insertion, and later carrying insertions and direct\npatches collapse away. Entry-level disabled state projects into the\nregistration the doctor and setup compare, so a disabled row reads as\nstale and the repair re-enables it. A direct-only registration no longer\nsuppresses the canonical insert append, and an update retains the\nregistration environment. Duplicate entries collapse across operations,\nnot only within one.\n\n* fix(setup): preserve Harness row state through identity and refresh repairs\n\nA wrong-package row still reads back as a server record carrying its\nenvironment and caller fields, projected with a package marker the\nalignment path treats as stale, instead of vanishing and dropping\nconfig.env from the repair. A direct Cordis patch without a preceding\ninsertion configures nothing, so a direct-only registration reads as\nabsent even when its config matches and the repair appends the insert.\nCaller-owned config fields beyond the REA-owned keys, such as the cwd\nthe native verifier sets, survive a refresh instead of being silently\ndropped.\n\n* fix(setup): preserve Cordis tags and collapse aligned Harness rows\n\nA refresh rebuilt Harness config from parsed values, so a caller !!js\nexpression was written back as a literal. Owned keys are now overlaid on\nthe winning config node and other nodes stay in place. Two already-aligned\nrea-mcp insertions read as stale, so setup collapses them to one row, and\nthe bundled skill lists dsh with the other clients.\n\n* fix(setup): drop the unused DSH configuration type\n\nKnip reports DshConfigurationFormat as an unused export. The format union\ndoes not depend on that alias.\n\n* fix(setup): keep Harness env tags and comment-only patches\n\nA refresh replaced the whole env map, so a caller !!js value was written\nback as a literal. Environment entries now stay in place unless the value\nchanged. A comment-only cordis.patch.yml parses as an empty patch list and\nkeeps those comments when the registration is appended. Docs describe\nplain rea uninstall, which scans supported clients and has no --client flag.\n\n* fix(setup): own Harness rows by entry id and expression state\n\nUninstall removes a rea-mcp row even when the launcher is stale or the\npatch never established a server record. A non-boolean disabled value,\nincluding a Cordis expression, reads as stale. Expression text on a known\nenvironment setting is not validated as a literal path, so a refresh can\nkeep the tag.\n\n* fix(setup): collapse aliased Harness insertions\n\nAn anchored insert followed by an alias parses as two rea-mcp rows, but\nthe YAML edit kept the alias, so readback stayed duplicated and setup\nrestored the file. Aliases that resolve to the owned entry are now\ndropped, including an alias of the entry inside one insert. Aliases of\nother patches stay.\n\n* fix(setup): resolve aliased Harness lists and config maps\n\nAn insert value that aliases another entry list still loaded a second\nrea-mcp row after the operation-level alias collapse. That alias is now\ndropped once the anchored list is rewritten. A config: *cfg map is\nresolved and cloned before the refresh, so a caller !!js field on the\naliased map is not rewritten as a plain literal.\n\n* fix(setup): follow Harness aliases for ids, lists, and env tags\n\nAn insert alias whose anchor is not another insert is copied so\nunrelated rows stay while the owned row is rewritten. An aliased\nentry id is resolved before ownership checks, and an environment alias\nof an unchanged !!js scalar is left in place.\n\n* fix(setup): keep aliased Harness env maps through uninstall\n\nAn env alias is cloned before a refresh so tagged values are not rebuilt\nas literals, and expression-key scans follow aliases before path checks.\nInsert aliases that carry REA are recorded before uninstall empties their\nanchor, so the later alias is dropped instead of dangling.\n\n* fix(setup): follow root Harness aliases and mark dsh as main-only\n\nWinning-config walks resolve a root alias before patch order, so a replayed direct config's !!js env is not validated as a literal path. Root aliases that own rea-mcp are recorded before uninstall empties their anchor. An insert whose only owned member is an external alias is cloned so Cordis tags survive. Docs state dsh is not in npm 6.4.0.\n\n* fix(setup): keep rows behind inert Harness aliases\n\nA root alias whose anchor is not a loaded operation is copied and only the owned row is edited, so unrelated rows stay active. Entry id aliases become a scalar before their anchor patch is dropped. Root-alias ownership follows insert-list aliases, so a replay is removed instead of dangling after uninstall.\n\n* refactor(setup): centralize Cordis source ownership\n\n* fix(javascript): share Electron mutation proof with wrapped calls\n\n* test(mcp): align graph and catalog checks with current contracts\n\n* fix(setup): separate Cordis ownership from editability\n\n* docs: clarify ownership and interpretation boundaries\n\n* fix(setup): preserve Cordis applicability and caller metadata\n\n---------\n\nCo-authored-by: Cursor Agent \nCo-authored-by: morluto <76467478+morluto@users.noreply.github.com>", - "parents": [ - "04089d5bec11d6e0411e7c35d0168bbae63d7e7d" - ], + "parents": ["04089d5bec11d6e0411e7c35d0168bbae63d7e7d"], "authors": [ { "name": "BaaRai", @@ -5346,17 +4618,13 @@ } } ], - "pullRequests": [ - 1929 - ] + "pullRequests": [1929] }, { "sha": "c0904b4c1aabfccf2f0ab12f44960a0a1fbbbfae", "subject": "fix(javascript): apply loader-owned module lookup rules", "body": "fix(javascript): apply loader-owned module lookup rules\n\nKeep relative ESM imports exact, restrict Node legacy probes to .js/.json/.node, and treat empty package main as absent. Stop Node package-main lookup before nested package reinterpretation, while retaining generic artifact inference.\n\nReplace stale recursive and .cjs probe expectations. Verify CLI and MCP graph results against real Node 24 runtime controls, including exact suffixes, index fallback, and nested package main refusal.\n\nRefs #2020, #2021, #2022\n", - "parents": [ - "d9d2a173819ce8e2e7f09eb584ec6ff7b4ee3480" - ], + "parents": ["d9d2a173819ce8e2e7f09eb584ec6ff7b4ee3480"], "authors": [ { "name": "morluto", @@ -5373,9 +4641,7 @@ "sha": "ee50ed121e38cc6e1a2ff0dc8b789f15f71c5402", "subject": "fix(sourcemaps)!: preserve nullable source declarations", "body": "fix(sourcemaps)!: preserve nullable source declarations\n\nAccept absent map-level sourcesContent and preserve null source-name slots alongside known originals and aligned content. Represent unnamed local declarations explicitly, retain leaf-local and flattened indices, and preserve declared indexed-section order across consumers.\n\nAccount for added indices before browser output allocation. Accept legacy retained rows without indices. Consolidate public CLI/MCP source-map fixtures and update the stale named-source-only assertion.\n\nBREAKING CHANGE: Browser source-map original and mapping rows expose null for unavailable source names instead of inventing an unknown-source string. New index fields are optional when reading older retained evidence.\n\nRefs #2023, #2024\n", - "parents": [ - "c0904b4c1aabfccf2f0ab12f44960a0a1fbbbfae" - ], + "parents": ["c0904b4c1aabfccf2f0ab12f44960a0a1fbbbfae"], "authors": [ { "name": "morluto", @@ -5392,9 +4658,7 @@ "sha": "9f67e44e5d451d705bae9a579ad9802d5c9f097c", "subject": "fix(javascript): preserve loader-specific package ancestry", "body": "fix(javascript): preserve loader-specific package ancestry\n\nRequire a package directory for bare ESM imports. Continue CommonJS root and subpath lookup through ancestor packages after ordinary misses, while keeping exports authority, unavailable metadata, and failed nonempty main entrypoints terminal.\n\nCarry failed-main ownership in the internal resolution result and retain the nearest local miss after exhausting ancestors. Consolidate package selection at its owning boundary and qualify loader differences with real Node 24, CLI, and MCP regressions.\n", - "parents": [ - "ee50ed121e38cc6e1a2ff0dc8b789f15f71c5402" - ], + "parents": ["ee50ed121e38cc6e1a2ff0dc8b789f15f71c5402"], "authors": [ { "name": "morluto", @@ -5411,9 +4675,7 @@ "sha": "bd74c7af2bec952c2eea7a17feedd05e6675b719", "subject": "test(sourcemaps): assert semantic evidence and actual output admission", "body": "test(sourcemaps): assert semantic evidence and actual output admission\n\nReplace stale closed-property expectations with assertions for the evidence under test. Verify compiler coordinates and declaration indices separately in the real-browser workflow.\n\nConsolidate duplicate 50000-map admission cases and derive admission from exact serialized bytes rather than IP-address-specific output shapes. Retain capacity, omission, and aggregate-byte coverage. A bounded Flameox CPU profile completed in about 1.4 seconds and showed no producer bottleneck; targeted admission and real Chrome CLI/MCP verification pass.\n", - "parents": [ - "9f67e44e5d451d705bae9a579ad9802d5c9f097c" - ], + "parents": ["9f67e44e5d451d705bae9a579ad9802d5c9f097c"], "authors": [ { "name": "morluto", @@ -5430,9 +4692,7 @@ "sha": "a1b5d51a8dfb7fff6272d91270c16b95555c2643", "subject": "feat(go): inspect embedded binary build metadata (#1363)", "body": "feat(go): inspect embedded binary build metadata (#1363)\n\n* feat(go): inspect embedded binary build metadata\n\n* fix(go): preserve byte metadata and validate container mappings\n\n* fix(go): support moduleless legacy build metadata\n\nRecognize optional module string headers in declared zero-filled memory while rejecting ambiguous and unmapped pointers. Preserve the original module-pointer field as the zero-byte source anchor.\n\nClassify initial symlink-loop and overlong-path failures as invalid input, with CLI and MCP regressions.\n\n* fix(go): reject undersized PE optional headers\n\n* fix(native): stabilize ELF memory checks and clean up exec wrappers\n\nUse existing parent/group/run-token ownership for caller-selected Python launchers, which can exec through a shell or prlimit. Add cancellation regressions for the valid wrapper and wrong-parent/token cases.\n\nReplace the timing-dependent 30,000-section memory workload with a valid 32 MiB padded ELF under a 64 MiB address-space limit. Check the same image successfully through CLI and MCP before requiring a typed memory failure, preserving the production timeout and all error assertions.\n\nValidation: npm run check and check:fast passed; 61 focused tests passed including Go CLI/MCP and session snapshots. Real decoder probes with pinned packages passed on Python 3.12.3 and 3.12.14. The full local ELF verifier is blocked by this container's procps/process-ownership boundary; the exact pushed head requires GitHub's real-binary-layout lane.\n\n* test: repair Electron fixtures and stabilize catalog startup checks\n\nDeclare Electron imports in option, preload override, and path-resolution fixtures after upstream began requiring proven API provenance. Retain all option and preload assertions and adjust exact source ranges for the added import line.\n\nUse the existing bounded acceptance timeout for the cold catalog lifecycle test instead of a separate 15-second ceiling. This retains the coverage allowance and all catalog, error, and cleanup assertions without retries.\n\nValidation: npm run check, final check:fast, formatting and diff checks passed. Source path regression and Go boundary/MCP/service checks passed. All 20 Go CLI cases and both supported-host runtime cases passed on rerun; two macOS-only cases skipped on Linux. A prior contended local run timed out once in a Go CLI diagnostic; that case passed on rerun. Electron process-boundary verification is blocked locally by procps namespace inspection and requires fresh CI.\n\n* test(mcp): isolate nested schema references between tool contracts\n\nClear Ajv's non-meta schema registry after each root, including compilation failures. Disabling root registration alone leaves nested IDs available to later tools and can let a dangling reference pass the catalog gate.\n\nAdd regressions for leakage after successful and failed compilation while retaining shared meta-schema validators. The regression failed before the fix; all 11 schema cases and full npm run check pass. Reviewed independently.\n\n* test(ci): align Go effects and source-map verification contracts\n\nAudit the Go inspector wording as static metadata inspection. Assert retained source declaration indexes in BOM reconstruction and the compiler-derived nested-map oracle. Keep a 45,000-map admission control below the 32 MiB output budget and the 50,000-map overflow case above it with the expanded representation.\n\nValidation: reproduced all four failing assertions, then passed 120 focused tests and the final admission suite. npm run check and real Chrome 154 / esbuild 0.25.10 source-map verification passed, including all four nested-map scenarios and verified process lineage.\n\n---------\n\nCo-authored-by: morluto <76467478+morluto@users.noreply.github.com>", - "parents": [ - "bd74c7af2bec952c2eea7a17feedd05e6675b719" - ], + "parents": ["bd74c7af2bec952c2eea7a17feedd05e6675b719"], "authors": [ { "name": "You Wish", @@ -5451,17 +4711,13 @@ } } ], - "pullRequests": [ - 1363 - ] + "pullRequests": [1363] }, { "sha": "d0249282c64882329a6acab8f3b477552da53499", "subject": "docs(install): explain Claude Code upfront tool loading on third-party endpoints (#2029)", "body": "docs(install): explain Claude Code upfront tool loading on third-party endpoints (#2029)\n\nClaude Code turns MCP tool search off when ANTHROPIC_BASE_URL points to a\nnon-first-party host, so every REA tool definition is sent with every\nrequest. On main at 04089d5be the forwarded names, descriptions and input\nschemas measure about 496 KB (~120k tokens) with the full profile and about\n290 KB (~68k tokens) with the compact profile. When Claude Code assumes a\nsmaller window than the model has, as with `deepseek-v4-flash` without the\n`[1m]` suffix, autocompact thrashes because compaction cannot remove tool\ndefinitions.\n\nDocument the window, tool-search and compact-profile remedies, and that\nDeepSeek's Anthropic API does not list `tool_reference` blocks.\n\nRefs #2019\n\nCo-authored-by: Claude Opus 5.5 ", - "parents": [ - "a1b5d51a8dfb7fff6272d91270c16b95555c2643" - ], + "parents": ["a1b5d51a8dfb7fff6272d91270c16b95555c2643"], "authors": [ { "name": "Kaoru0822", @@ -5480,17 +4736,13 @@ } } ], - "pullRequests": [ - 2029 - ] + "pullRequests": [2029] }, { "sha": "4a4d36f881861bbab3c734b0dd459f805766caec", "subject": "fix(evidence): retain unreadable PE and Darwin process facts", "body": "fix(evidence): retain unreadable PE and Darwin process facts\n\nDistinguish absent CLI directories from unreadable directory counts and truncated slots while preserving known PE headers and readable CLI data.\n\nRetain environment-entry coverage in the Darwin parser and classify restricted empty, unavailable and ambiguous environments at the native boundary. Keep cleanup fail-closed; code-signing flags do not establish ownership.\n\nValidation: 116 managed source tests, 13 ownership tests, native Swift parser probe and two live Darwin run-token tests; build, static checks and docs checks pass. Restricted-flag cases use parser fixtures; no real restricted capture is claimed. Related to #2035.\n", - "parents": [ - "d0249282c64882329a6acab8f3b477552da53499" - ], + "parents": ["d0249282c64882329a6acab8f3b477552da53499"], "authors": [ { "name": "morluto", @@ -5507,9 +4759,7 @@ "sha": "b7f563e15f854061dc1507896181b7b24ac3b5f0", "subject": "test: strengthen public input and module lookup controls", "body": "test: strengthen public input and module lookup controls\n\nIncorporate the independent query-bearing ESM and cjs-only directory cases from #2031 and #2032 into existing Node-backed CLI/MCP tests. Their production patches are already superseded on main.\n\nMake invalid Swift-symbol validation prove it precedes artifact access, and bound the test child so failures retain output before the outer test deadline. Clarify that network API content types project only the type/subtype essence.\n\nValidation: module lookup CLI/MCP and native demangle CLI tests pass. A bounded Flameox reproduction passed in under one second; the CI timeout was not reproduced and no provider hang fix is claimed.\n\nCo-authored-by: hhang <169027046+xu91102@users.noreply.github.com>\n", - "parents": [ - "4a4d36f881861bbab3c734b0dd459f805766caec" - ], + "parents": ["4a4d36f881861bbab3c734b0dd459f805766caec"], "authors": [ { "name": "morluto", @@ -5534,9 +4784,7 @@ "sha": "21eff3bae10f58711a35ad44f86e9f96f9bb4790", "subject": "fix(setup): preserve Cordis ownership across uncertain patch structure", "body": "fix(setup): preserve Cordis ownership across uncertain patch structure\n\nSeparate stable registration ownership from setup editability. Keep group-owned rows removable, retain expression-backed structures without edits, and reject malformed literal patches before setup writes. Preserve foreign rows and backups during uninstall.\n\nCorrect stale alias fixtures to use valid Harness patch rows and remove redundant alias coverage. Validation: 78 configuration boundary tests, 6 public setup/uninstall CLI tests, full static checks, and docs checks passed. Harness behavior was verified from pinned source; no real Harness runtime verification is claimed.\n", - "parents": [ - "b7f563e15f854061dc1507896181b7b24ac3b5f0" - ], + "parents": ["b7f563e15f854061dc1507896181b7b24ac3b5f0"], "authors": [ { "name": "morluto", @@ -5553,9 +4801,7 @@ "sha": "0d78c99c11efee66570772efe6eb88dfd0e1c694", "subject": "docs: celebrate 110,000 GitHub stars 🎉 (#2042)", "body": "docs: celebrate 110,000 GitHub stars 🎉 (#2042)\n\nUpdate the star milestone in the English README and all 18 translated\nREADMEs, keeping each locale's number formatting.\n\nCo-authored-by: Claude Opus 5.5 ", - "parents": [ - "21eff3bae10f58711a35ad44f86e9f96f9bb4790" - ], + "parents": ["21eff3bae10f58711a35ad44f86e9f96f9bb4790"], "authors": [ { "name": "Kaoru0822", @@ -5574,17 +4820,13 @@ } } ], - "pullRequests": [ - 2042 - ] + "pullRequests": [2042] }, { "sha": "538f8cc7224dba44b728cf6c000920f911957fc4", "subject": "docs(cli): add a managed assembly inspection workflow (#2037)", "body": "docs(cli): add a managed assembly inspection workflow (#2037)", - "parents": [ - "0d78c99c11efee66570772efe6eb88dfd0e1c694" - ], + "parents": ["0d78c99c11efee66570772efe6eb88dfd0e1c694"], "authors": [ { "name": "Alessandro Costa", @@ -5595,17 +4837,13 @@ } } ], - "pullRequests": [ - 2037 - ] + "pullRequests": [2037] }, { "sha": "1c64fe3eff48679c6880f42d2f0a4af46686ade7", "subject": "fix(session): invalidate snapshots before metadata write dispatch", "body": "fix(session): invalidate snapshots before metadata write dispatch\n\nStop cached metadata replay before a provider write starts, including while its reply is pending or fails after applying the mutation. Keep snapshot import and export disabled until the target is reopened.\n\nValidate failed replies, conflicting provider identity, and overlapping reads through the shared session boundary.\n", - "parents": [ - "538f8cc7224dba44b728cf6c000920f911957fc4" - ], + "parents": ["538f8cc7224dba44b728cf6c000920f911957fc4"], "authors": [ { "name": "morluto", @@ -5622,9 +4860,7 @@ "sha": "6fb3a345fe952b8e8f59221aec993acc37ccbf31", "subject": "fix(analysis): preserve producer identity and partial evidence", "body": "fix(analysis): preserve producer identity and partial evidence\n\nReconcile Mach-O UUID observations without hiding malformed or conflicting sources. Require source-map identity digests to be supported by consistent observations. Keep truncated Android manifests as partial raw evidence, validate WABT section framing, and reject missing JEB inventories or error-marked success replies.\n\nConsolidate native UUID parsing and simplify capacity and malformed-input fixtures. Focused source and public workflow checks pass, including native arm64e inspection and real WABT framing probes; a successful real JEB GUI project opening remains unverified.\n", - "parents": [ - "1c64fe3eff48679c6880f42d2f0a4af46686ade7" - ], + "parents": ["1c64fe3eff48679c6880f42d2f0a4af46686ade7"], "authors": [ { "name": "morluto", @@ -5641,9 +4877,7 @@ "sha": "48c352b6bfa34c820a530272cd36600158c37b1e", "subject": "fix(cli): reuse firmware and web module input constraints", "body": "fix(cli): reuse firmware and web module input constraints\n\nDerive extraction limits and web module fields from the shared contracts. Reject empty or NUL-containing local paths before CLI path resolution, preserve firmware relative-path handling, and apply the advertised extraction defaults.\n\nValidate advertised JSON Schemas with Ajv and check the registered parser defaults; prune redundant schema-shape and description assertions.\n", - "parents": [ - "6fb3a345fe952b8e8f59221aec993acc37ccbf31" - ], + "parents": ["6fb3a345fe952b8e8f59221aec993acc37ccbf31"], "authors": [ { "name": "morluto", @@ -5660,9 +4894,7 @@ "sha": "e55ef7213515ba204c3d88a4487b4ee6a2773b06", "subject": "fix(runtime)!: preserve unknown debugger attachment state", "body": "fix(runtime)!: preserve unknown debugger attachment state\n\nKeep omitted discovery attachment state as null through Node, browser, Electron, and reconciliation evidence. Report the uncertainty while retaining Node observation unless discovery explicitly marks the target attached. Reject worker TargetInfo records missing the required boolean with partial coverage.\n\nValidate omitted and explicit states through provider, CLI, and MCP boundaries and real Node 24 Inspector workflows. Consolidate Electron regression coverage into the existing list-and-inspect workflow.\n\nBREAKING CHANGE: attached fields in JavaScript runtime, browser, and Electron target discovery and inspection results may be null when discovery does not report attachment state.\n", - "parents": [ - "48c352b6bfa34c820a530272cd36600158c37b1e" - ], + "parents": ["48c352b6bfa34c820a530272cd36600158c37b1e"], "authors": [ { "name": "morluto", @@ -5679,9 +4911,7 @@ "sha": "783fcb06a4bd0444be214822fed60a3786932782", "subject": "test(javascript): consolidate module lookup regressions (#2031)", "body": "test(javascript): consolidate module lookup regressions (#2031)\n\nfix(javascript): resolve relative ESM URLs as exact files\n\nCo-authored-by: hhang <169027046+xu91102@users.noreply.github.com>", - "parents": [ - "e55ef7213515ba204c3d88a4487b4ee6a2773b06" - ], + "parents": ["e55ef7213515ba204c3d88a4487b4ee6a2773b06"], "authors": [ { "name": "hhang", @@ -5700,17 +4930,13 @@ } } ], - "pullRequests": [ - 2031 - ] + "pullRequests": [2031] }, { "sha": "83a4445f440fab978ad9376b4260acae3f5fb189", "subject": "test(sourcemap): consolidate source map regressions (#2034)", "body": "test(sourcemap): consolidate source map regressions (#2034)\n\nfix(sourcemap): retain named originals beside unknown source names\n\nCo-authored-by: hhang <169027046+xu91102@users.noreply.github.com>", - "parents": [ - "783fcb06a4bd0444be214822fed60a3786932782" - ], + "parents": ["783fcb06a4bd0444be214822fed60a3786932782"], "authors": [ { "name": "hhang", @@ -5729,17 +4955,13 @@ } } ], - "pullRequests": [ - 2034 - ] + "pullRequests": [2034] }, { "sha": "3bcc68c037e9415c78093cb286069c1fcca6a2f8", "subject": "fix(evidence): enforce managed identity and cancel bundle reads", "body": "fix(evidence): enforce managed identity and cancel bundle reads\n\nValidate managed reconstruction through the shared artifact and MVID scope boundary, including known/unknown identity contradictions. Forward MCP comparison cancellation into both bundle reads and consolidate pre-cancel coverage.\n\nVerified managed graph/reconstruction and filesystem/MCP cancellation workflows. A controlled missing-signal mutation reads 130 chunks instead of the expected one; cancellation leaves the session unchanged and retry succeeds.\n", - "parents": [ - "83a4445f440fab978ad9376b4260acae3f5fb189" - ], + "parents": ["83a4445f440fab978ad9376b4260acae3f5fb189"], "authors": [ { "name": "morluto", @@ -5756,9 +4978,7 @@ "sha": "3bdc8730bd98e073522bcb8ba86527be402c0cbe", "subject": "fix(adb): preserve directory identities and share byte capture", "body": "fix(adb): preserve directory identities and share byte capture\n\nUse Android 8-compatible batched find/stat with NUL-framed names and raw symlink targets. Preserve malformed or invalid UTF-8 records as partial evidence with exact source bytes. List hidden direct children without synthetic navigation entries.\n\nShare process byte capture with UTF-8 callers and screenshots, removing duplicate timeout and cancellation supervision. Verified 35 focused process, ADB, CLI and MCP tests; compatibility checked against AOSP Oreo sources. Live Android device/emulator verification was not run.\n", - "parents": [ - "3bcc68c037e9415c78093cb286069c1fcca6a2f8" - ], + "parents": ["3bcc68c037e9415c78093cb286069c1fcca6a2f8"], "authors": [ { "name": "morluto", @@ -5775,9 +4995,7 @@ "sha": "69e097a8ca256ab97ee4b2883739447784a5f90e", "subject": "fix(scripts, install): honor test:fast \"without build\" promise and orient Node.js engine mismatches (#2026)", "body": "fix(scripts, install): honor test:fast \"without build\" promise and orient Node.js engine mismatches (#2026)\n\n* fix(scripts): defer dist/ imports in verifier helpers so test:fast runs without build\n\nTwo helpers under scripts/lib/ reached into ../../dist/ at module load even\nthough the top-level import was only needed by one of their exports. That\nturned mocked, dist-free tests into failing tests under `npm run test:fast`,\nwhich docs/testing.md § test scripts explicitly promises runs \"without build\":\n\n- tests/conformance/providers/hopper/realHopperSemantic.test.ts only calls\n requireCurrentDocument and resolveFixtureProcedure (both mock-only), but\n scripts/lib/real-hopper-semantic.mjs eagerly imported\n requireFunctionDossierOracle from dist/application/RealHopperAssertions.js.\n Moved the dist-dependent dossier oracle into a lazy loader called from\n verifyRealHopperFixture, which is where it is actually used (against the\n real Hopper bridge, after build:cached).\n\n- tests/evaluation/package/packagePlatformDiagnostics.test.ts only uses\n assertLinuxPackageProviderFailure, which depends on `json`, but\n scripts/lib/verify-package-core.mjs eagerly re-exported helpers from\n mcp-verifier-results.mjs, which in turn pulls four dist/ modules. Moved\n that import into verifyCompleteToolCatalog (the only consumer in this\n file). Downstream scripts (verify-recorded-crash.mjs, verify-package-mcp.mjs,\n verify-windows-package.mjs) are unaffected because they already run after\n build:cached.\n\nReproduction before fix:\n rm -rf dist && npm run test:fast → 2 failed (both import-time errors)\n\nReproduction after fix:\n rm -rf dist && npm run test:fast → 388 passed, 4924 tests, 0 failed\n npm run build:cached && npm run test:fast → 388 passed, 4924 tests, 0 failed\n\nCo-Authored-By: Claude Opus 4.7 \n\n* fix(install): orient Node.js version mismatch failures with actionable remediation\n\ninstall.sh previously told operators \"use Node.js 22.x (>=22.19), 24.x (>=24.11),\nor 26+\" without saying how to install one. The curl|bash onboarding path then\nleft the operator to guess between nvm, fnm, n, Volta, system packages, or\nnodejs.org — a lookup that bounces across search engines for a first-time user.\n\nReplace the one-line failure with a block that:\n- Names the detected Node.js version (so the operator confirms it is theirs).\n- Shows the three most common install paths (nvm, fnm, direct tarball).\n- Pins the Node.js release line (24) that satisfies the engine, so copy-paste\n commands produce a supported runtime instead of whichever \"latest\" is on top.\n- Maps uname -m / uname -s to the Node.js tarball label pair for this host\n (e.g. darwin/arm64, linux/x64), so the operator can grab the right archive\n from https://nodejs.org/dist/latest-v24.x/ without a second lookup.\n\nVerified with four Node.js versions (24.18 compatible, 25.9/20.11 outside the\nsupported ranges, 22.18 below the minor floor) that remediation triggers only\non real mismatches and names the host labels correctly. shellcheck install.sh\nand npm run check:fast remain clean.\n\nCo-Authored-By: Claude Opus 4.7 \n\n---------\n\nCo-authored-by: Claude Opus 4.7 ", - "parents": [ - "3bdc8730bd98e073522bcb8ba86527be402c0cbe" - ], + "parents": ["3bdc8730bd98e073522bcb8ba86527be402c0cbe"], "authors": [ { "name": "astralyx0129", @@ -5796,17 +5014,13 @@ } } ], - "pullRequests": [ - 2026 - ] + "pullRequests": [2026] }, { "sha": "4573e8cf35de822bfc5feabcc89ec3717c247c8c", "subject": "fix(ghidra): recover stale clients on same-target reopen (#2014)", "body": "fix(ghidra): recover stale clients on same-target reopen (#2014)\n\n* fix(ghidra): recover stale clients on same-target reopen\n\n* test(ghidra): allow supervised shutdown in health regression\n\n* fix(ghidra): read process exit without diagnostic snapshots\n\nHealth and startup exit checks called the supervisor snapshot, which\nconcatenates retained launcher output only to read the exit code.\n\n* test(adb): align fixtures with literal output and directory commands\n\n---------\n\nCo-authored-by: Cursor Agent \nCo-authored-by: morluto <76467478+morluto@users.noreply.github.com>", - "parents": [ - "69e097a8ca256ab97ee4b2883739447784a5f90e" - ], + "parents": ["69e097a8ca256ab97ee4b2883739447784a5f90e"], "authors": [ { "name": "lyly", @@ -5833,17 +5047,13 @@ } } ], - "pullRequests": [ - 2014 - ] + "pullRequests": [2014] }, { "sha": "6bae774328724403255590aa2ddad4d7a2aa727f", "subject": "fix(evidence): authenticate identities and retain extraction provenance", "body": "fix(evidence): authenticate identities and retain extraction provenance\n\nAuthenticate residual unknown IDs against their immutable identity fields. Permit valid empty ZIP extraction manifests and join firmware child provenance to parent-owned chunk and multi-file reports without inventing missing source ranges.\n\nValidated with focused identity, archive, cleanup, and firmware normalization tests. Firmware joins were checked against the pinned Unblob producer; no real Unblob extraction was run.\n", - "parents": [ - "4573e8cf35de822bfc5feabcc89ec3717c247c8c" - ], + "parents": ["4573e8cf35de822bfc5feabcc89ec3717c247c8c"], "authors": [ { "name": "morluto", @@ -5860,9 +5070,7 @@ "sha": "966f7cc84b4a8bb0043641cb64d7a7aaf8715e05", "subject": "fix(browser): preserve body API provenance through script export", "body": "fix(browser): preserve body API provenance through script export\n\nLabel new captured response bytes as Playwright body API results and retain the possibility of a credentialed follow-up load. Preserve legacy representations and source limitations through export without treating body-origin uncertainty as missing event coverage.\n\nValidated source and filesystem boundary tests plus real Chrome CLI and MCP network workflows covering binary, compressed, empty, unfinished, and same-URL responses and profile cleanup.\n", - "parents": [ - "6bae774328724403255590aa2ddad4d7a2aa727f" - ], + "parents": ["6bae774328724403255590aa2ddad4d7a2aa727f"], "authors": [ { "name": "morluto", @@ -5879,9 +5087,7 @@ "sha": "e4532b537663026c3e5b784380eecd009c959a36", "subject": "fix(javascript): preserve TypeScript loader and dependency semantics", "body": "fix(javascript): preserve TypeScript loader and dependency semantics\n\nShare loader selection across static findings and module relationships: CTS static imports and re-exports use CommonJS lookup while dynamic imports retain ESM lookup. Retain runtime import-equals dependencies, bindings, and exported names; do not resolve require file-URL strings as local artifacts. Restore import-map descriptions in CLI help.\n\nValidated resolver and semantic tests, application reconstruction boundaries, and CLI help. Installed TypeScript NodeNext emission and Node require behavior were checked independently. Refs #2056, #2057, #2058, #2053.\n", - "parents": [ - "966f7cc84b4a8bb0043641cb64d7a7aaf8715e05" - ], + "parents": ["966f7cc84b4a8bb0043641cb64d7a7aaf8715e05"], "authors": [ { "name": "morluto", @@ -5898,9 +5104,7 @@ "sha": "d8c76b629639bda4405afa9ae2f7676b694f2f10", "subject": "fix(io): retain cleanup ownership and honor cancellation", "body": "fix(io): retain cleanup ownership and honor cancellation\n\nKeep failed JSON read handles in the existing server resource scope and fail admission until cleanup succeeds. Thread cancellation through every process CLI input read and replace timer-driven cancellation checks with a shared first-read gate.\n\nClassify authenticated standalone Evidence as wrong-kind input while preserving tampered-record integrity failures and actionable messages across ledger, CLI, and MCP consumers. Record unrelated CS_RESTRICT process neighbors as unverified without weakening related-process ownership checks. Update stale ADB fixtures for the actual shell protocol.\n\nValidated focused CLI, MCP, filesystem, ownership, and error projection tests; static, docs, and duplication gates pass. The host-level CS_RESTRICT load reproduction was not run. Refs #2050, #2035, #2064.\n", - "parents": [ - "e4532b537663026c3e5b784380eecd009c959a36" - ], + "parents": ["e4532b537663026c3e5b784380eecd009c959a36"], "authors": [ { "name": "morluto", @@ -5917,9 +5121,7 @@ "sha": "4a5aec8ad6d54444b2a2c2313fbc506b17ff91aa", "subject": "docs: add responsible-use disclaimer", "body": "docs: add responsible-use disclaimer\n", - "parents": [ - "d8c76b629639bda4405afa9ae2f7676b694f2f10" - ], + "parents": ["d8c76b629639bda4405afa9ae2f7676b694f2f10"], "authors": [ { "name": "morluto", @@ -5936,9 +5138,7 @@ "sha": "d864ad54717d92fe4b512ce1170717d9904c1f00", "subject": "fix(docs): synchronize disclaimer links across translations", "body": "fix(docs): synchronize disclaimer links across translations\n", - "parents": [ - "4a5aec8ad6d54444b2a2c2313fbc506b17ff91aa" - ], + "parents": ["4a5aec8ad6d54444b2a2c2313fbc506b17ff91aa"], "authors": [ { "name": "morluto", @@ -5955,9 +5155,7 @@ "sha": "fa87dd2aac3eaeb49875c54e93ec18c98cc92e4d", "subject": "docs: shorten responsible-use notices across languages", "body": "docs: shorten responsible-use notices across languages\n", - "parents": [ - "d864ad54717d92fe4b512ce1170717d9904c1f00" - ], + "parents": ["d864ad54717d92fe4b512ce1170717d9904c1f00"], "authors": [ { "name": "morluto", @@ -5974,9 +5172,7 @@ "sha": "e9970855ba16ba711816ac30212c5ca17ae085cd", "subject": "fix(evidence): preserve trace uncertainty and partial provider observations", "body": "fix(evidence): preserve trace uncertainty and partial provider observations\n\nDistinguish an unresolved goal from an exhausted call graph and preserve provider failures through cancellation. Retain completed IDA replies and post-operation identity observations as partial Evidence without claiming a verified final binding. Remove source-wide bundler cache-name heuristics and stale expectations.\n", - "parents": [ - "fa87dd2aac3eaeb49875c54e93ec18c98cc92e4d" - ], + "parents": ["fa87dd2aac3eaeb49875c54e93ec18c98cc92e4d"], "authors": [ { "name": "morluto", @@ -5993,9 +5189,7 @@ "sha": "98d8470d36cfbf7cd25820a4ed430aebae20c0c5", "subject": "fix(io): consolidate managed snapshots and retain cleanup ownership", "body": "fix(io): consolidate managed snapshots and retain cleanup ownership\n\nReuse managed snapshot admission and hashing in sequential path comparisons, retaining caller paths and completed inspection Evidence on later failure. Preserve exact failed-close owners alongside typed read and cancellation failures, and retry them through caller-owned resource scopes. Require canonical Hopper lease identities, remove signed offset coercion, and repair stale setup cleanup expectations that failed CI.\n", - "parents": [ - "e9970855ba16ba711816ac30212c5ca17ae085cd" - ], + "parents": ["e9970855ba16ba711816ac30212c5ca17ae085cd"], "authors": [ { "name": "morluto", @@ -6012,9 +5206,7 @@ "sha": "9b780c47bca039939dd5f73b78541f3ea566a7dd", "subject": "fix(browser): isolate script URLs with empty query or fragment (#2074)", "body": "fix(browser): isolate script URLs with empty query or fragment (#2074)", - "parents": [ - "98d8470d36cfbf7cd25820a4ed430aebae20c0c5" - ], + "parents": ["98d8470d36cfbf7cd25820a4ed430aebae20c0c5"], "authors": [ { "name": "xin zhuang", @@ -6025,17 +5217,13 @@ } } ], - "pullRequests": [ - 2074 - ] + "pullRequests": [2074] }, { "sha": "d4e8ef74999666cdb735b49eb8fea367f8f86489", "subject": "fix(ghidra): retain launcher command outcome in launch failure diagnostics (#2011)", "body": "fix(ghidra): retain launcher command outcome in launch failure diagnostics (#2011)\n\n* fix(ghidra): retain launcher command outcome in launch failure diagnostics\n\nGhidra headless launch failures surfaced only the GhidraLaunchError name\nand a generic message, dropping the launcher command's exit code/signal\nand JVM stderr. Retain the failed command outcome on GhidraLaunchError in\nthe shared captured-output envelope and project it as launch_outcome in\nthe session failure_cause, mirroring the compiler_outcome diagnostics.\n\nFixes #1992\n\n* test(ghidra): skip POSIX JVM fixture tests on Windows\n\nThe bin/java fixture is an extensionless POSIX shell script handed to\nexecFile, which Windows cannot execute. Follow the repo pattern\n(test.skipIf) so the suite is a named Windows skip.", - "parents": [ - "9b780c47bca039939dd5f73b78541f3ea566a7dd" - ], + "parents": ["9b780c47bca039939dd5f73b78541f3ea566a7dd"], "authors": [ { "name": "Saim Shafique", @@ -6046,17 +5234,13 @@ } } ], - "pullRequests": [ - 2011 - ] + "pullRequests": [2011] }, { "sha": "b3dec005bcb89b5afe6e0aa41e5251f8a3a31de7", "subject": "test(hopper): align startup fixtures with cleanup and lease contracts", "body": "test(hopper): align startup fixtures with cleanup and lease contracts\n\nInspect the typed primary startup failure retained by aggregate cleanup errors. Materialize isolated targets before real lease acquisition so launcher scenarios reach the behavior under test. Repairs the Linux shard and Windows curated test failures without weakening cleanup retention coverage.\n", - "parents": [ - "d4e8ef74999666cdb735b49eb8fea367f8f86489" - ], + "parents": ["d4e8ef74999666cdb735b49eb8fea367f8f86489"], "authors": [ { "name": "morluto", @@ -6073,9 +5257,7 @@ "sha": "75a4a14fa05d352762ffaefd3cd2e16515842b03", "subject": "fix(artifacts): compare package signatures without ASCII folding (#2069)", "body": "fix(artifacts): compare package signatures without ASCII folding (#2069)", - "parents": [ - "b3dec005bcb89b5afe6e0aa41e5251f8a3a31de7" - ], + "parents": ["b3dec005bcb89b5afe6e0aa41e5251f8a3a31de7"], "authors": [ { "name": "xin zhuang", @@ -6086,17 +5268,13 @@ } } ], - "pullRequests": [ - 2069 - ] + "pullRequests": [2069] }, { "sha": "974f11d010570c0a18423cd1cc93e9a5203df1b6", "subject": "docs: clarify responsible use and preserve third-party notices (#2082)", "body": "docs: clarify responsible use and preserve third-party notices (#2082)\n\nShip the responsible-use statement, third-party attribution records and\npreserved license texts in npm packages. Clarify historical-version and\nchannel coverage without changing existing licenses or installation behavior.\n\nAssisted-by: Eiki (gensokyo-skills:eiki-rule-review)\nAssisted-by: Aya (gensokyo-skills:aya-source-investigation)", - "parents": [ - "75a4a14fa05d352762ffaefd3cd2e16515842b03" - ], + "parents": ["75a4a14fa05d352762ffaefd3cd2e16515842b03"], "authors": [ { "name": "Ysopwnable", @@ -6107,17 +5285,13 @@ } } ], - "pullRequests": [ - 2082 - ] + "pullRequests": [2082] }, { "sha": "79156e5bed1d72b83ade0483246f457b337b7e59", "subject": "test(cli): preserve Windows runtime paths and failure diagnostics", "body": "test(cli): preserve Windows runtime paths and failure diagnostics\n\nSupply the system root and temporary directory in isolated Windows CLI environments, while preserving explicit caller overrides. Include captured command output in web acceptance exit-code failures so startup and codec errors remain diagnosable.\n", - "parents": [ - "974f11d010570c0a18423cd1cc93e9a5203df1b6" - ], + "parents": ["974f11d010570c0a18423cd1cc93e9a5203df1b6"], "authors": [ { "name": "morluto", @@ -6134,9 +5308,7 @@ "sha": "d1dcebce2c0820469ed63e33497a14258971b710", "subject": "fix(evidence): preserve literal keys and response body ownership", "body": "fix(evidence): preserve literal keys and response body ownership\n\nRetain exact empty and computed literal keys in JavaScript observations. Bind CDP response bodies to request occurrences, account for late responses, and validate the target after final progress callbacks.\n", - "parents": [ - "79156e5bed1d72b83ade0483246f457b337b7e59" - ], + "parents": ["79156e5bed1d72b83ade0483246f457b337b7e59"], "authors": [ { "name": "morluto", @@ -6153,9 +5325,7 @@ "sha": "0d5033ad12e12abe78fc3c0ba81622b410d22aa1", "subject": "fix(checks): order artifact-backed lint after compilation", "body": "fix(checks): order artifact-backed lint after compilation\n\nPrevent import resolution from racing with dist cleanup in build-backed gates while retaining the source-only fast check.\n", - "parents": [ - "d1dcebce2c0820469ed63e33497a14258971b710" - ], + "parents": ["d1dcebce2c0820469ed63e33497a14258971b710"], "authors": [ { "name": "morluto", @@ -6172,9 +5342,7 @@ "sha": "07b36c148946f46b99a4ce04e55726e97d0ee03a", "subject": "fix(mcp): keep prompt completion within ready provider sessions", "body": "fix(mcp): keep prompt completion within ready provider sessions\n\nAvoid lazy provider startup for document and procedure completion. Propagate MCP cancellation through completers, cancel lookups during session transitions, and share provider result projection with ordinary operations. Cover cold, starting, warm, queued, cancelled, and closed sessions through MCP composition and provider boundaries.\n", - "parents": [ - "0d5033ad12e12abe78fc3c0ba81622b410d22aa1" - ], + "parents": ["0d5033ad12e12abe78fc3c0ba81622b410d22aa1"], "authors": [ { "name": "morluto", @@ -6191,9 +5359,7 @@ "sha": "c22111eca2c4bc84a084f12711f405b3e7422a40", "subject": "fix(process): return private runtime ownership at allocation", "body": "fix(process): return private runtime ownership at allocation\n\nUse POSIX mkdtemp owner-only allocation directly instead of adding a fallible permission rewrite and rollback before returning the cleanup owner. Respect restrictive umasks, assert privacy and real scratch access, and align provider documentation.\n", - "parents": [ - "07b36c148946f46b99a4ce04e55726e97d0ee03a" - ], + "parents": ["07b36c148946f46b99a4ce04e55726e97d0ee03a"], "authors": [ { "name": "morluto", @@ -6210,9 +5376,7 @@ "sha": "621cee192d582c87ca3d254d4cb22c9d209d3aea", "subject": "test(mcp): ready providers before live prompt completion checks (#2137)", "body": "test(mcp): ready providers before live prompt completion checks (#2137)\n\n07b36c148 made document and procedure completion read only from an\nalready-started provider client. Two checks still completed right after\nopening a target, so they observed an empty cold result:\n\n- promptCompletion.test.ts used a fixture client without executeIfReady\n and never ran an ordinary operation, so the composite provider had not\n created a client yet.\n- The packaged MCP smoke expected live completions on non-Linux hosts\n immediately after open_binary, before current_document started Hopper.\n\nBoth now assert the cold result is empty, ready the provider through an\nordinary operation, and then assert the unchanged live candidates.\n\nFixes #2123\n\nCo-authored-by: Claude Opus 5.5 ", - "parents": [ - "c22111eca2c4bc84a084f12711f405b3e7422a40" - ], + "parents": ["c22111eca2c4bc84a084f12711f405b3e7422a40"], "authors": [ { "name": "Kaoru0822", @@ -6231,17 +5395,13 @@ } } ], - "pullRequests": [ - 2137 - ] + "pullRequests": [2137] }, { "sha": "abc8c6dadf4f11b67de1cc2ee96bb55047416d71", "subject": "fix(wasm): preserve leading BOM in custom section names (#2102)", "body": "fix(wasm): preserve leading BOM in custom section names (#2102)", - "parents": [ - "621cee192d582c87ca3d254d4cb22c9d209d3aea" - ], + "parents": ["621cee192d582c87ca3d254d4cb22c9d209d3aea"], "authors": [ { "name": "xin zhuang", @@ -6252,17 +5412,13 @@ } } ], - "pullRequests": [ - 2102 - ] + "pullRequests": [2102] }, { "sha": "fe4b94a661054cef7603a3f07aae71f1df0a701a", "subject": "test(mcp): align completion checks with provider readiness", "body": "test(mcp): align completion checks with provider readiness\n\nExercise cold and warm completion through ordinary provider operations. Bind fixture observations to the selected analysis profile so the warm-up call satisfies session validation, and make package completion candidates explicit with useful failure diagnostics.\n", - "parents": [ - "abc8c6dadf4f11b67de1cc2ee96bb55047416d71" - ], + "parents": ["abc8c6dadf4f11b67de1cc2ee96bb55047416d71"], "authors": [ { "name": "morluto", @@ -6279,9 +5435,7 @@ "sha": "672bdea21fd943688e081d209a993e234c45507f", "subject": "fix(target): recognize binary plists by magic under any extension (#2133)", "body": "fix(target): recognize binary plists by magic under any extension (#2133)\n\nTarget resolution admitted a property list only when its name ended in\n.plist, so keyed archives with other extensions (for example .archive)\nwere rejected as an unsupported binary format before any plist tool ran.\nClassify bplist00 bytes as a plist, as the artifact inventory already does.\n\nFixes #2129\n\nCo-authored-by: Claude Opus 5.5 ", - "parents": [ - "fe4b94a661054cef7603a3f07aae71f1df0a701a" - ], + "parents": ["fe4b94a661054cef7603a3f07aae71f1df0a701a"], "authors": [ { "name": "Kaoru0822", @@ -6300,17 +5454,13 @@ } } ], - "pullRequests": [ - 2133 - ] + "pullRequests": [2133] }, { "sha": "60259a91d9a58cbd313ad7f3d321acc2deb65d2e", "subject": "fix(managed): validate CLI type selections with the member contract (#2125)", "body": "fix(managed): validate CLI type selections with the member contract (#2125)\n\n`inspect-managed-members --type` accepted repeated and empty names that\nthe MCP contract rejects. The provider's contract parse then threw, and\nthe CLI reported execution_failure with advice to run `rea doctor`.\nReuse the contract's type_names schema so the CLI rejects them as a\nvalidation error on --type.\n\nFixes #2121\n\nCo-authored-by: Claude Opus 5.5 ", - "parents": [ - "672bdea21fd943688e081d209a993e234c45507f" - ], + "parents": ["672bdea21fd943688e081d209a993e234c45507f"], "authors": [ { "name": "Kaoru0822", @@ -6329,17 +5479,13 @@ } } ], - "pullRequests": [ - 2125 - ] + "pullRequests": [2125] }, { "sha": "5190843f8f09ac17cbf79561bd1f708c509cda78", "subject": "fix(setup): name each skill directory in the uninstall summary (#2118)", "body": "fix(setup): name each skill directory in the uninstall summary (#2118)\n\nUninstall checks every skill destination but labeled each result only as\n\"skill\" (or \"Claude Code skill\"), so a retained or failed destination\ncould not be located. Label each result with the directory it refers to.\n\nFixes #2111\n\nCo-authored-by: Claude Opus 5.5 ", - "parents": [ - "60259a91d9a58cbd313ad7f3d321acc2deb65d2e" - ], + "parents": ["60259a91d9a58cbd313ad7f3d321acc2deb65d2e"], "authors": [ { "name": "Kaoru0822", @@ -6358,17 +5504,13 @@ } } ], - "pullRequests": [ - 2118 - ] + "pullRequests": [2118] }, { "sha": "4f46eac453965efde3bc782aebfeec198551afc4", "subject": "ci: narrow native-host lane selection and reuse build caches (#2131)", "body": "ci: narrow native-host lane selection and reuse build caches (#2131)\n\n* ci: narrow native-host lane selection and reuse build caches\n\nUnowned src/ and bridge/ files no longer fall back to the full baseline.\nThey run the Linux suite plus the Linux x64 installed-package/Inspector\nbaseline. New apple and package scopes own the Apple artifact lane, the\npackage matrix and the Windows curated lane, including the test files those\nlanes invoke. Manual-only verifier entrypoints run static checks and the\nLinux suite. CHANGELOG, SECURITY, GitHub templates and the native Windows\nREADME are documentation-only.\n\nPull requests omit the macOS x64 package host unless labelled ci:full.\nThe Windows and Apple lanes restore the shared Turbo build cache, the\nWindows lane drops its duplicate typecheck, and the Linux suite uses six\nshards. Main pushes keep the full baseline.\n\nCo-Authored-By: Claude Opus 5.5 \n\n* ci: match package script entrypoints against scope globs\n\nScript-only package.json edits resolved their entrypoint with literal\nequality, so glob-owned verifiers such as scripts/verify/apple/** and\nscripts/verify/inspector/** fell back to the full baseline instead of\nselecting their owning lane.\n\nCo-Authored-By: Claude Opus 5.5 \n\n---------\n\nCo-authored-by: Claude Opus 5.5 ", - "parents": [ - "5190843f8f09ac17cbf79561bd1f708c509cda78" - ], + "parents": ["5190843f8f09ac17cbf79561bd1f708c509cda78"], "authors": [ { "name": "Kaoru0822", @@ -6387,17 +5529,13 @@ } } ], - "pullRequests": [ - 2131 - ] + "pullRequests": [2131] }, { "sha": "315973259732544a597b8b17d25c69735910e72e", "subject": "fix(cli): report an invalid REA_LOG_LEVEL as configuration (#2140)", "body": "fix(cli): report an invalid REA_LOG_LEVEL as configuration (#2140)\n\ncreateCli parsed REA_LOG_LEVEL with a throwing schema, so an invalid or\nuppercase value crashed every command, including doctor and --help, with\na ZodError stack trace. Parse it into a ConfigurationError result and have\nthe executable print the same configuration message as the MCP adapter\nand exit 1 before building the CLI.\n\nFixes #2135\n\nCo-authored-by: Claude Opus 5.5 ", - "parents": [ - "4f46eac453965efde3bc782aebfeec198551afc4" - ], + "parents": ["4f46eac453965efde3bc782aebfeec198551afc4"], "authors": [ { "name": "Kaoru0822", @@ -6416,17 +5554,13 @@ } } ], - "pullRequests": [ - 2140 - ] + "pullRequests": [2140] }, { "sha": "58fb372071e56da9c5df0e37593ee3f0da6b64bc", "subject": "feat(analysis): add opt-in retained inventory and WASM views (#2122)", "body": "feat(analysis): add opt-in retained inventory and WASM views (#2122)\n\nAdd opt-in retained inventory and WASM Evidence views with exact nested output contracts and a small static WASM descriptor. Preserve old complete CLI/MCP workflows, producer choices, original authenticated Evidence and cleanup ownership.\n\nValidated with real public applications, genuine old Evidence migration, 123 focused assertions, 11 synchronized description checks and 42 installed-package WABT cases. Detailed generated experiment JSON stays outside the final tree; concise findings and reproduction inputs remain. Main-existing completion/package CI failures are separately attributed and left unchanged.\n\nRefs #2016\n\nCo-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>", - "parents": [ - "315973259732544a597b8b17d25c69735910e72e" - ], + "parents": ["315973259732544a597b8b17d25c69735910e72e"], "authors": [ { "name": "Ysopwnable", @@ -6445,17 +5579,13 @@ } } ], - "pullRequests": [ - 2122 - ] + "pullRequests": [2122] }, { "sha": "df2c08b546d4f40103e11b8b31dbfc3d41ee687b", "subject": "fix(jeb): confine an invalid REA_JEB_MCP_URL to the JEB tools (#2145)", "body": "fix(jeb): confine an invalid REA_JEB_MCP_URL to the JEB tools (#2145)\n\nJebProvider throws when REA_JEB_MCP_URL fails endpoint validation, and the\ncomposition built it eagerly for the CLI and every MCP connection. A\nmalformed value, or http://localhost:8425/mcp, therefore crashed every CLI\ncommand with a stack trace and failed every MCP connection with an\ninternal server error. The composition now parses the endpoint first and,\nwhen it is unusable, returns a JEB port that reports not_configured\navailability and a ConfigurationError naming REA_JEB_MCP_URL.\n\nFixes #2143\n\nCo-authored-by: Claude Opus 5.5 ", - "parents": [ - "58fb372071e56da9c5df0e37593ee3f0da6b64bc" - ], + "parents": ["58fb372071e56da9c5df0e37593ee3f0da6b64bc"], "authors": [ { "name": "Kaoru0822", @@ -6474,17 +5604,13 @@ } } ], - "pullRequests": [ - 2145 - ] + "pullRequests": [2145] }, { "sha": "90e37f4152990be721784006a820a3794920213c", "subject": "fix(managed): report malformed PE layouts as invalid input (#2194)", "body": "fix(managed): report malformed PE layouts as invalid input (#2194)\n\n* fix(managed): report malformed PE layouts as invalid input\n\nreadManagedPeLayout raises ManagedReaderFailure for DOS, COFF and section\nheader failures such as section data past EOF. Those escaped the managed\ninspectors, so ManagedStaticProvider wrapped them as ProviderAdapterError\nand the CLI and MCP reported execution_failure with advice to run rea\ndoctor. Map format failures to an invalid_format input issue carrying the\nreader's detail, as inspect-pe-resources and inspect-go-binary do.\n\nFixes #2191\n\nCo-Authored-By: Claude Opus 5.5 \n\n* fix(managed): route unmappable PE layouts through one input error\n\ninspect-managed-native-boundaries caught a layout-level ManagedReaderFailure\nitself and returned an empty malformed inspection with exit 0, while the\nother managed operations now report the same bytes as invalid input. Let\nthe layout failure reach the provider's invalid_format mapping; metadata\nfailures after a readable layout still return malformed coverage.\n\nCo-Authored-By: Claude Opus 5.5 \n\n---------\n\nCo-authored-by: Claude Opus 5.5 ", - "parents": [ - "df2c08b546d4f40103e11b8b31dbfc3d41ee687b" - ], + "parents": ["df2c08b546d4f40103e11b8b31dbfc3d41ee687b"], "authors": [ { "name": "Kaoru0822", @@ -6503,17 +5629,13 @@ } } ], - "pullRequests": [ - 2194 - ] + "pullRequests": [2194] }, { "sha": "51367cae6f4e6ef9b9dcb28dc21fe6c92d1dd6f8", "subject": "fix(setup): name structural problems in client configurations (#2154)", "body": "fix(setup): name structural problems in client configurations (#2154)\n\nA client configuration that parses but whose root or MCP server table is\nnot an object (for example {\"mcpServers\": null} or []) made setup print a\nraw Zod issue dump and made uninstall claim the file was not valid JSON.\nparseClientConfiguration now raises a ClientConfigurationShapeError naming\nthe root or the servers key, which setup reports as the malformed detail\nand uninstall reports instead of a syntax error.\n\nFixes #2152\n\nCo-authored-by: Claude Opus 5.5 ", - "parents": [ - "90e37f4152990be721784006a820a3794920213c" - ], + "parents": ["90e37f4152990be721784006a820a3794920213c"], "authors": [ { "name": "Kaoru0822", @@ -6532,17 +5654,13 @@ } } ], - "pullRequests": [ - 2154 - ] + "pullRequests": [2154] }, { "sha": "d35035780a643e38301b8eaea03f01bb506e9df9", "subject": "fix(setup): remove emptied skill directories on uninstall (#2182)", "body": "fix(setup): remove emptied skill directories on uninstall (#2182)\n\n* fix(setup): remove emptied skill directories on uninstall\n\nUninstall removes only the managed skill files so user files survive,\nbut it left every emptied reverse-engineer-anything directory and its\nreferences/ subdirectory behind. After the ownership manifest is removed,\nremove the managed directories deepest first with a non-recursive rmdir,\nwhich keeps any directory that still holds user files.\n\nFixes #2159\n\nCo-Authored-By: Claude Opus 5.5 \n\n* fix(setup): report emptied skill directories that cannot be removed\n\nOnly a directory that still holds user files, is already absent, or is no\nlonger a directory is kept silently. Any other rmdir failure, such as a\nparent that denies deletion, now fails the skill item with the directory\npath instead of reporting the skill as removed.\n\nCo-Authored-By: Claude Opus 5.5 \n\n---------\n\nCo-authored-by: Claude Opus 5.5 ", - "parents": [ - "51367cae6f4e6ef9b9dcb28dc21fe6c92d1dd6f8" - ], + "parents": ["51367cae6f4e6ef9b9dcb28dc21fe6c92d1dd6f8"], "authors": [ { "name": "Kaoru0822", @@ -6561,17 +5679,13 @@ } } ], - "pullRequests": [ - 2182 - ] + "pullRequests": [2182] }, { "sha": "7c9c1ebdb77662f6276ef2f7250e7df414bd03ca", "subject": "fix(mcp): keep shared optional providers open across discarded probes (#2205)", "body": "fix(mcp): keep shared optional providers open across discarded probes (#2205)\n\nstartMcpTransport loads optional observation providers once per process\nand passes them to every server instance the SDK constructs. Each\ninstance's closeProviders also closed the shared browser scenario\nprovider, so when the SDK discarded a server/discover probe instance for a\nlegacy initialize, every later capture_browser_scenario call failed with\n\"Browser scenario provider is closing.\" Server instances no longer close\nthe caller-supplied provider; the transport returns\ncloseOptionalProviders and process shutdown closes it once.\n\nFixes #2195\n\nCo-authored-by: Claude Opus 5.5 ", - "parents": [ - "d35035780a643e38301b8eaea03f01bb506e9df9" - ], + "parents": ["d35035780a643e38301b8eaea03f01bb506e9df9"], "authors": [ { "name": "Kaoru0822", @@ -6590,17 +5704,13 @@ } } ], - "pullRequests": [ - 2205 - ] + "pullRequests": [2205] }, { "sha": "0b7145361ec02d27260eb1f5bc0be955c9374a96", "subject": "feat(wasm): add opt-in first-call summary delivery (#2193)", "body": "feat(wasm): add opt-in first-call summary delivery (#2193)\n\nAdd explicit first-call WASM summary delivery while preserving omitted/complete MCP requests, CLI output, original Evidence identity and provider inputs. Reuse exact retained export views and schema-based capability discovery.\n\nNine paired public SDK comparisons and ten actual Codex CLI answers preserve selected facts and source references. Record token reductions alongside mixed latency and unverified final resource-counter conditions. Current-main integration passes seven relevant WASM MCP workflows, a fresh real-WABT SQLite workflow and required static gates. Refs #2016.\n\nCo-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>", - "parents": [ - "7c9c1ebdb77662f6276ef2f7250e7df414bd03ca" - ], + "parents": ["7c9c1ebdb77662f6276ef2f7250e7df414bd03ca"], "authors": [ { "name": "Ysopwnable", @@ -6619,17 +5729,13 @@ } } ], - "pullRequests": [ - 2193 - ] + "pullRequests": [2193] }, { "sha": "4a4ae9b2b9712f7ac16f2d23c71b5c29b0c23d2f", "subject": "feat: add Frida instrumentation support (#1359)", "body": "feat: add Frida instrumentation support (#1359)\n\n* feat: add Frida instrumentation support\n\n* fix: resolve Frida CI checks\n\n* test: cover Frida contract validation branches\n\n* docs: link Frida instrumentation guide\n\n* fix(frida): handle cancellation cleanup safely\n\n* fix(frida): address PR review findings\n\n* fix(frida): preserve resume and message observations\n\n* fix(ci): use canonical registry for rolldown\n\n* fix(frida): declare foreign code effects\n\n* fix(frida): retain failed startup resources for cleanup retries\n\nKeep failed startup session and spawn handles owned until detach, resume,\nand remote lease cleanup complete. Serialize retries and release each\nremote reference once. Await CLI provider cleanup while preserving the\nprimary failure and any completed observations.\n\nAdd regressions for retained startup resources, concurrent cleanup,\nshared remote leases, and CLI cleanup outcomes.\n\nValidation: 41 focused tests pass on the PR head and its latest-main\nintegration; serial static and docs checks pass. Real Linux Frida 17.23.2\nworkflows and the native spawn/controlled-failure cleanup probe pass.\n\nAssisted-by: Kogasa (gensokyo-skills:kogasa-surprise-testing)\n\n---------\n\nCo-authored-by: N0zoM1z0 <1705004398@qq.com>", - "parents": [ - "0b7145361ec02d27260eb1f5bc0be955c9374a96" - ], + "parents": ["0b7145361ec02d27260eb1f5bc0be955c9374a96"], "authors": [ { "name": "Daniel Gonçalves Araujo", @@ -6648,17 +5754,13 @@ } } ], - "pullRequests": [ - 1359 - ] + "pullRequests": [1359] }, { "sha": "10400fdb57e4226c5ce15af17968a664f35498ce", "subject": "fix(ida): thin the selected FAT slice into the private headless input (#2201)", "body": "fix(ida): thin the selected FAT slice into the private headless input (#2201)\n\nUniversal Mach-O admission reported the selected slice architecture while the IDA provider's private input copy handed the whole FAT container to upstream idalib, which then picked its own slice (x86_64 for /bin/cat) while Evidence labeled the session arm64. FAT parsing now exports the selected slice's byte range as universalSlice, and the private input copy writes exactly those bytes: the whole source digest still anchors the copy against admission-time changes, and the thinned result anchors the post-operation identity check.\n\nThin targets keep the whole-file copy, and mach-o-universal remains the container format across Evidence, snapshots, and provider routing.\n\nValidation: typecheck, oxlint (no new warnings), oxfmt, and targeted vitest runs — ida adapters 12 files/116 tests, domain and services projects 60 files/736 tests, ghidra/hopper behavior 2 files/50 tests, filesystem and universal-extraction boundary 2 files/49 tests, native signature MCP 1 file/2 tests, plus a new thinning suite (5 tests, red before the fix: 3 failed). The thinned product was verified byte-identical to the `clang -arch arm64` input of a `lipo -create` universal fixture. Controlled fixtures only; no live IDA analysis was performed for this change.\n\nCloses #2139", - "parents": [ - "4a4ae9b2b9712f7ac16f2d23c71b5c29b0c23d2f" - ], + "parents": ["4a4ae9b2b9712f7ac16f2d23c71b5c29b0c23d2f"], "authors": [ { "name": "akushonkamen", @@ -6669,17 +5771,13 @@ } } ], - "pullRequests": [ - 2201 - ] + "pullRequests": [2201] }, { "sha": "7ae3c50a9d49c480035855de9fcc4484befacd92", "subject": "docs: correct drift and reorganize English guides (#2207)", "body": "docs: correct drift and reorganize English guides (#2207)\n\nPut setup, developer commands, MCP replies, and investigation recipes before\nclient details and implementation references. Preserve existing guide anchors,\nexamples, provenance, partial-result recovery, and provider restrictions.\n\nCorrect verified documentation drift, synchronize the Ghidra capability\nwording, and regenerate metadata for skill version 40. Keep uncertain platform\nand lifecycle findings unchanged. Refs #2156.\n\nValidation: 56 focused tests, check:fast, docs:check, VitePress production build,\nformat and link/example checks. Real isolated CLI/MCP probes cover Ghidra,\nNativeAOT, HAR, cancellation, Chrome, large ELF delivery, native type limits,\nand the new JS/managed/process/setup recipes. Heavy work uses two CPUs;\na resource-heavy DOM probe was stopped and replaced by a smaller real CDP\npayload-limit control. Windows, macOS GUI, ADB, and the full CI matrix were\nnot executed.\n\nCo-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>", - "parents": [ - "10400fdb57e4226c5ce15af17968a664f35498ce" - ], + "parents": ["10400fdb57e4226c5ce15af17968a664f35498ce"], "authors": [ { "name": "Ysopwnable", @@ -6698,17 +5796,13 @@ } } ], - "pullRequests": [ - 2207 - ] + "pullRequests": [2207] }, { "sha": "e4d3e1399d9cd4932653e7015a1bf8589e56029d", "subject": "feat(flutter): identify Dart snapshot builds and inspect AOT payloads by pure APK parsing (#1582)", "body": "feat(flutter): identify Dart snapshot builds and inspect AOT payloads by pure APK parsing (#1582)\n\n* feat(flutter): identify Dart snapshot builds by pure APK parsing\n\nAdd a flutter-provider family with one operation, identify_flutter_build,\nthat reads an APK's lib//libapp.so and libflutter.so through the\nhardened ZIP reader and reports build facts as observations:\n\n- The Dart VM snapshot hash, read 20 bytes after every snapshot magic\n (f5f5dcdc). The vm and isolate sections are cross-checked: agreeing\n sections collapse to one snapshot_hash, disagreeing sections keep every\n candidate with snapshot_hash null and partial coverage.\n- Per-ABI library digests and byte sizes, plus the engine library's GNU\n build-id note and any labeled 'Dart VM version' or Android clang/LLVM\n toolchain strings, verbatim; release builds without a version string\n report null rather than a guess.\n- The APK is digested before parsing so Evidence binds the observation to\n the exact input, and a target with no libapp.so reports not-detected\n with complete coverage.\n\nThe scanner is streaming with explicit pending-magic and rescan\nbookkeeping, so chunk boundaries cannot double-count or drop sections, and\nmagic-free streams never accumulate. No engine, no external lookups: the\nhash-to-SDK mapping stays with external datasets by design.\n\nVerified against Flutter Gallery 2.9.2 (112 MB, three ABIs): every ABI\nreports the same agreeing hash 65817c30a78bb44c3dc3771876b6010a from two\nsections, per-ABI build-ids, and the clang toolchain line; a plain\naapt2-built APK reports not-detected with complete coverage. Scanner\ngoldens come from the same libraries. READMEs carry the new 'Flutter apps'\nrow in every supported language.\n\n* feat(flutter): inspect Dart AOT snapshots through the ELF symbol table\n\nAdd inspect_dart_aot to the flutter family: for one ABI's libapp.so it\nlocates the four _kDart*Snapshot* symbols through the ELF dynamic symbol\ntable (ELF32 and ELF64 little-endian, bounds-checked reads; a payload\nwithout exported symbols is refused), reports each section's offset and\nsize, validates data-section headers (magic, kind, length; instructions\nsections honestly report nulls for the fields their layout does not\ncarry), and projects a bounded string pool from the isolate data section:\ndistinct package: source URIs (the app's dependency inventory), dart: SDK\nURIs, and identifier-shaped tokens, each with counts, bounds, and partial\ncoverage when truncated.\n\nThe string pool is labeled as a byte-pattern projection, not deserialized\ncluster semantics: typed class and function recovery remains an\nSDK-specific parser, which the snapshot hash now unlocks. The ABI is\ncaller-selected with a deterministic default (arm64-v8a, x86_64, then\nfirst available).\n\nVerified against Flutter Gallery 2.9.2: all four symbols on both ELF64\n(arm64-v8a) and ELF32 (armeabi-v7a) images, header validation, hash\nagreement with identify_flutter_build, and a 756 package: / 201 dart:\nURI pool from the isolate data section; goldens in DartElf.test.ts come\nfrom the same libraries.\n\n* fix(flutter): own snapshots, bound image reads, and preserve cancellation\n\nMirror the ownership bar the maintainers applied across the merged JEB,\nADB, and Apktool PRs:\n\n- Copy the admitted APK into a provider-owned, read-only snapshot (EXCL\n create, chmod 0400) before digesting and parsing; every later read uses\n the snapshot, so a concurrently modified original cannot mix into one\n observation. The result reports the snapshot's byte size and digest.\n- Retain failed snapshot-root cleanup in a provider set and retry it on\n close(), throwing an aggregate error when a root is still owned; root\n removal is injectable so the retention is testable.\n- Allocate the AOT image buffer at exactly the declared library size\n before reading (bounded before allocation, not concat-after-stream),\n keep the 256 MiB ceiling, and check cancellation between digest and\n stream chunks through a captured abort reason.\n- Accept APK paths containing spaces (covered by a fixture test) and\n escape the ABI pattern's dash for v-mode regex compatibility.\n\nAlso add tests for cleanup retention with close retry and for\ncancellation before any snapshot root is created.\n\n* docs(flutter): cover the Italian README with the Flutter row\n\nThe Italian translation landed between the merged feature PRs; its table\nnow carries every merged row plus this one, keeping its documentation-link\nset identical to README.md.\n\n* fix(flutter): make the ABI pattern portable for v-mode validators\n\nUse a hex-escaped hyphen in the ABI character class, matching the form\nthe ADB portability fix uses, so clients compiling advertised schemas in\nunicodeSets mode accept the inspect_dart_aot input schema.\n\n* refactor(flutter): reuse shared harnesses and deduplicate the vertical\n\nThe duplicate-detection gate (jscpd, 2.5% threshold) tipped to 2.51% with\nthe flutter files added. Reuse the existing machinery instead of repeating\nit:\n\n- FlutterBuildAnalysisService delegates to executeProviderOperation, the\n shared admission/Evidence composition, instead of restating its body.\n- The CLI registers both commands from one table-driven spec.\n- Boundary tests use the shared serveCli and assertAdvertisedMcpContracts\n harnesses rather than hand-rolled equivalents.\n- The provider test consolidates the four payload-shape cases into one\n table-driven case; the service test uses one admission table and\n distinct phrasings.\n\nDuplicate lines fall from 2.51% to 2.48%, back under the gate.\n\n* fix(flutter): address review findings from real-app verification\n\nCassieFox23 verified the PR against three real F-Droid Flutter apps and\na control app, and found five gaps. All are fixed and re-verified against\ncone (info.tangential.cone), one of the tested apps:\n\n- Build-id: the scanner now reads the descriptor length from the note\n header instead of assuming 20 bytes, so 8-byte ids from older\n toolchains parse; the schema accepts 8-128 hex characters. Verified\n against cone's readelf-reported ids on all three ABIs.\n- Compiler line: the toolchain capture bound rises from 200 to 500\n characters, keeping cone's 262-character clang line verbatim.\n- Zero-byte libapp.so: the extraction target is created before streaming,\n so an empty entry yields a clean unsupported_target refusal for\n inspect_dart_aot and elf_header_valid: false with partial coverage for\n identify_flutter_build, instead of a raw ENOENT with code UNKNOWN.\n- Truncated library: identify_flutter_build marks fewer than two snapshot\n sections as partial coverage with a limitation naming the count, and a\n missing ELF magic gets its own limitation.\n- Docs: the default ABI preference now matches the code exactly\n (arm64-v8a, x86_64, x86, armeabi-v7a, then the rest alphabetically).\n\nAlso: every test that read the author's /tmp/opencode goldens now builds\na self-contained synthetic ELF64 image with dynsym, four snapshot\nsymbols, two snapshot sections, and a string pool, so the suite runs\nanywhere; the verify lane now requires a present hex build-id per ABI\ninstead of accepting null.\n\n* fix(flutter): address the Codex review findings\n\nEight findings, all applied:\n\n- P1: SnapshotHashScanner keeps candidates in a Set (no quadratic\n Array.includes) with a 64-distinct-hash cap, so a hostile payload of\n magic+hash records cannot stall the scan or bloat the response.\n- P1: projectStringPool stops admitting new distinct entries once each\n category reaches twice its projection bound and reports\n collectionCapped; allocation and sorting now track the response, not\n the payload.\n- P2: ZIP reader rejections during entry iteration or entry streaming\n map into the typed error algebra (cancellation vs input refusal)\n instead of escaping as unhandled exceptions in both operations.\n- P2: magic_valid now marks coverage only for the *Data symbols; a\n complete four-symbol image with valid data magics reports complete\n coverage (the instruction symbols intentionally lack the magic).\n- P2: the MCP server closes the Flutter provider during shutdown, so a\n retained snapshot root is retried and reported, not leaked.\n- P2: LabeledStringScanner commits matches only when a printable run is\n delimiter-terminated; the carry grows to 600 bytes so a 500-character\n toolchain line survives any chunk boundary untruncated.\n- P2: both Flutter tool effects declare writesFilesystem: true; the\n owned APK snapshot and extracted libapp.so are temporary writes.\n- P2: the verify lane asserts every ABI agrees on exactly one snapshot\n hash instead of discarding the computed set.\n\n* fix(flutter): address the second Codex review round\n\nNine findings on the first-round fixes:\n\n- P1: identify_flutter_build enforces a cumulative extraction budget\n (768 MiB) across every library entry, not just per library, so an APK\n with many ABIs cannot stream an unbounded total.\n- P1: a single NUL-free printable run stops materializing at 1024 bytes\n and marks the pool capped, so an adversarial one-run section cannot\n allocate unbounded strings.\n- P1: ELF cString bounds the NUL-terminator scan to the name maximum\n plus one, so malformed symbol tables cannot scan the whole image per\n entry.\n- P2: mapReaderFailure distinguishes ArtifactReaderFailure texts —\n budget/limit rejections map to resource constraints, integrity\n failures (CRC/overlap/signature) to their own input refusal — instead\n of collapsing all reader failures into one message.\n- P2: the labeled-string carry is cleared when a delimiter commits a\n run, so consecutive toolchain lines are never concatenated.\n- P2: string-pool counts are renamed *_count_at_least and documented as\n lower bounds, because capped collection discards values beyond twice\n the projection bound.\n- P2: inspect_dart_aot marks hash disagreements, non-pair source counts,\n and candidate-cap saturation as partial coverage.\n- P2: only valid lowercase-hex hash records count as snapshot sources;\n complete magic records with non-hex fields do not inflate agreement.\n- P2: the per-entry size refusal in inspect_dart_aot moves after ABI\n selection, so an oversized unselected ABI no longer refuses a small\n request.\n\n* fix(flutter): address the third Codex review round\n\nFive findings:\n\n- P2: the owned snapshot revalidates the source after the copy (size,\n mtime, inode), so an in-place replacement or swap mid-copy refuses\n the observation instead of publishing mixed bytes.\n- P2: a failed ZipArtifactReader close retains the snapshot root for\n close() retry instead of silently swallowing the descriptor leak,\n in both operations.\n- P2: snapshot headers are parsed within their symbol bounds and a\n symbol smaller than the 16-byte header reports magic_valid false,\n so trailing-image bytes can no longer fake a valid data section.\n- P2: the verify lane counts provider.close() cleanup failures as\n lane failures instead of certifying a run with retained roots.\n- P2: LabeledStringScanner reports toolchain_capped when further\n distinct matching lines are observed past the 4-line projection;\n identify marks such results partial with a naming limitation.\n\n* fix(flutter): address rounds three and four of the Codex review\n\nRound three (one missed finding) plus round four (five findings):\n\n- P2: the GNU build-id note descriptor size is decoded from all four\n bytes of the little-endian field, rejecting nonzero high bytes\n instead of masking them to 16 bits.\n- P1: the Flutter MCP handlers route through createContractToolHandler\n and the session's analysisAdmission, so close_binary and snapshot\n operations drain in-flight Flutter calls instead of racing them.\n- P2: the owned-snapshot copy is a streamed, abort-checked write (no\n copyFile), so cancellation stops the write promptly while the\n source-identity revalidation (size, mtime, inode) still guards\n against mid-copy replacement.\n- P2: identify marks any snapshot_hash_sources value other than exactly\n two as partial, matching the inspection path's pair requirement.\n- P2: the verify lane refuses to run without --apk (exit 2) instead of\n printing a false-green pass, and the engine check requires every\n libapp-carrying ABI to have a present libflutter with a valid hex\n build-id rather than filtering missing engines away vacuously.\n\n* fix(flutter): address the fifth Codex review round\n\nSix findings plus the upstream duplication baseline:\n\n- P2: the flutter-provider kind reports available in the capability\n inventory, so binary_session no longer lists always-registered\n Flutter tools as provider_missing.\n- P2: printable runs that exceed the 1024-byte cap are discarded at\n their delimiter instead of emitting their truncated prefix as a\n fabricated observation.\n- P2: ELF symbols must fit inside the file-backed portion of their\n PT_LOAD segment (p_filesz), so addresses in gaps or BSS are refused\n instead of accepting unrelated bytes.\n- P2: the build-id carry spans the complete 80-byte maximum note\n (16-byte header + 64-byte descriptor) so chunk-boundary splits\n cannot drop the first byte.\n- P2: the labeled-string carry is sized for the toolchain pattern's\n true 605-byte maximum, not the previous 600.\n- P2: the AOT completeness predicate requires exactly two sources and\n one candidate unconditionally, so zero-source images with valid data\n magics report partial instead of complete.\n\nAlso: the shared ELF fixture builder and snapshot-section helper moved\nto a dedicated FlutterTestFixtures module, eliminating cross-file test\nduplication; jscpd now passes at 2.50% while main sits at 2.52%.\n\n* fix(flutter): address the sixth Codex review round\n\nFive findings:\n\n- P2: snapshot-hash scanning is bounded to the exported data symbols'\n byte ranges, so decoy or stale magic/hash sequences elsewhere in the\n image cannot inflate source counts or contribute candidates.\n- P2: labeled-string runs longer than the carry bound are rejected\n instead of truncated, preventing a regex prefix from being published\n as a verbatim source string.\n- P2: the AOT image reread checks cancellation between file reads and\n before the synchronous parsing stage, so a cancelled caller cannot\n receive a success from a completed 256 MiB read.\n- P2: the verify lane requires exactly two snapshot sources per ABI,\n matching the provider's pair requirement, instead of accepting any\n count >= 2.\n- P2: ELF section and program header entry sizes are validated against\n the class-defined minimum widths before walking either table, so\n undersized entries cannot cause field reads to cross into\n neighboring bytes.\n\n* fix(flutter): address the seventh Codex review round\n\nSix findings:\n\n- P2: data-symbol ranges are deduplicated by offset and size, so aliased\n symbols mapping to the same bytes are scanned once and the result\n marks partial coverage with a limitation naming the shared range.\n- P2: openEntrySafely forwards return/throw to the underlying Readable's\n iterator, so an early for-await exit closes the ZIP entry stream and\n releases its producer instead of leaking a backpressured pipe.\n- P2: inspect_dart_aot now reports snapshot_hash_candidates and\n snapshot_hash_sources alongside snapshot_hash, so a null hash from\n conflicting evidence is distinguishable from missing hash data.\n- P2: overlong printable runs only set toolchain_capped when they begin\n with a recognized label prefix (Dart VM version: or Android (); other\n long strings such as license text are skipped without marking partial.\n- P2: readElfSymbol falls back to PT_DYNAMIC/DT_SYMTAB when section\n headers are absent (e_shnum 0, ET_DYN), so stripped Flutter libraries\n with exported snapshot symbols are no longer refused; the dynamic\n table is bounded by DT_STRSZ, DT_SYMENT, and the image end.\n- P2: the verify lane exercises inspect_dart_aot for every ABI carrying\n libapp.so, not just the preferred default.\n\n* fix(flutter): address the eighth Codex review round\n\nFive findings:\n\n- P2: each data-symbol range gets a fresh SnapshotHashScanner so the\n carry from one noncontiguous slice cannot fabricate a record spanning\n into the next; results are aggregated after scanning.\n- P2: dynsym name lookups are bounded to the linked string table —\n st_name offsets outside the table and terminators beyond it are\n rejected instead of reading unrelated payload bytes as symbol names,\n in both the section-header and PT_DYNAMIC paths.\n- P2: identify_flutter_build routes its reader.entries and reader.open\n calls through the same collectEntriesSafely and openEntrySafely\n wrappers as inspect_dart_aot, so malformed ZIPs surface as input\n refusals instead of AnalysisProtocolError.\n- P2: mapReaderFailure recognizes ArtifactReaderFailure texts carrying\n a cancelled reason, mapping them to AnalysisCancelledError instead\n of AnalysisInputError.\n- P2: the cumulative extraction cap is enforced inside the chunk loop,\n not after each library completes, so refusal happens before the\n remaining bytes are streamed and hashed.\n\n* fix(flutter): harden streaming, sizes, and cancellation after self-review\n\nFour issues found in a systematic self-audit across all bug classes\nfrom eight Codex rounds:\n\n- createReadStream in both the digest function and the owned-snapshot\n copy now receives the AbortSignal directly, so cancellation aborts\n the filesystem read at the source instead of waiting for the next\n chunk to arrive on a slow filesystem.\n- The owned snapshot enforces a 2 GiB APK-level size cap before any\n copy I/O, so a path pointing at an enormous file is refused before\n disk usage grows.\n- identify_flutter_build preflights the sum of declared entry sizes\n against the 768 MiB cumulative budget, refusing before any ZIP\n extraction when the declared total already exceeds it.\n- The LabeledStringScanner triple result() call is collapsed to a\n single invocation (the previous code called result() three times in\n the emission, relying on end() being idempotent).\n\nNo behavior change for valid inputs; all 36 tests, check:fast, and\nthe cone verify lane pass unchanged.\n\n* fix(flutter): require structurally parseable ELF headers for complete coverage\n\nCassieFox23's third corrupt-header case: an ELF with valid magic but\nzeroed section/program header offsets passes the 4-byte magic check\nand the byte scanner still finds hash patterns in the data sections,\nso identify_flutter_build reports complete coverage for a structurally\nbroken file.\n\nThe elf_header_valid check now also verifies beyond the magic:\ne_type must be a known value (ET_REL/ET_EXEC/ET_DYN), at least one\nof e_shoff/e_phoff must be non-zero, and at least one of\ne_shnum/e_phnum must be non-zero. A file with valid magic but zeroed\nstructure reports partial coverage with the existing ELF-magic\nlimitation.\n\n* fix(flutter): validate ELF and snapshot coverage\n\nShare bounded ELF header parsing between identification and inspection. Accumulate headers across ZIP chunks and validate table entry widths and extents before claiming complete identification coverage.\n\nBind AOT hashes to the exported VM and isolate headers, validate stored snapshot lengths including the magic bytes, and preserve partial evidence for missing, malformed, aliased, or overlapping data headers.\n\nPreserve native stream cancellations and APK resource constraints across both operations. Bound snapshot copies while streaming and retain useful input-failure diagnostics and lower-bound count wording.\n\nValidation: 72 focused tests; check:fast; check including formatting; docs:check; test discovery; jscpd; real cone APK and non-Flutter control on Linux. Verified CLI/MCP parity for valid and corrupted ELF headers and AOT inspection across three ABIs. Native Windows and macOS were not run.\n\n* fix(flutter): unify artifact ownership and bound ELF evidence\n\n* fix(flutter): preserve ELF provenance and partial coverage\n\nRead GNU build IDs only from bounded ELF note ranges and retain conflicting candidates. Preserve source versus owned storage failures and honor cancellation through parsing and final cleanup.\n\nSeparate snapshot structure from string-pool coverage. Verify every Gallery ABI with digest-bound engine labels and URI counts, and document the supported snapshot-kind layout.\n\n---------\n\nCo-authored-by: REA Contributor \nCo-authored-by: morluto <76467478+morluto@users.noreply.github.com>", - "parents": [ - "7ae3c50a9d49c480035855de9fcc4484befacd92" - ], + "parents": ["7ae3c50a9d49c480035855de9fcc4484befacd92"], "authors": [ { "name": "Quentin Limo", @@ -6732,17 +5826,13 @@ } } ], - "pullRequests": [ - 1582 - ] + "pullRequests": [1582] }, { "sha": "51d6c87cdbf5f11eaf3cb1862befe704a81827c5", "subject": "feat(clients): register ZCode during setup (#1564)", "body": "feat(clients): register ZCode during setup (#1564)\n\n* feat(clients): register ZCode during setup\n\n- SupportedClients: zcode definition (~/.zcode/cli/config.json, format\n zcode, personal skills at ~/.zcode/skills)\n- ClientConfigurationDocument: zcode dialect reads/writes the nested\n mcp.servers table; withClientServers now tolerates a missing outer\n table for fresh documents\n- docs: add ZCode to the supported-clients table with configuration notes\n- tests: zcodeClientConfiguration.test.ts (path resolution, nested\n upsert, fresh/empty configs, uninstall)\n\nVerified: tsc --noEmit clean; vitest run\ntests/boundary/filesystem/zcodeClientConfiguration.test.ts 6/6.\n\n* fix(clients): preserve ZCode fallback servers and honor enable flag\n\nReview follow-up (#1564), two integration gaps:\n\n- ZCode reads the user-scope ~/.agents/mcp.json fallback only while the\n native .zcode config defines no servers at all, with no merging. Setup\n now copies the fallback's mcpServers entries into the native table when\n writing the first native server, so registrations that only live in\n the fallback keep loading; the fallback file is left untouched. A\n malformed fallback fails setup closed (configure and preflight)\n instead of being silently suppressed.\n- ZCode disables a server with \"enable\": false on its entry, which the\n generic status parsing (disabled/enabled) did not recognize: doctor\n reported such a registration as aligned although ZCode never starts\n it. The ZCode dialect now treats enable: false as disabled (state\n stale) and setup rewrites the entry on rerun.\n\nDocs describe both behaviors; the bundled REA skill's supported client\nlist includes zcode.\n\nVerified: tsc --noEmit clean; vitest run\ntests/boundary/filesystem/zcodeClientConfiguration.test.ts 10/10;\nnpm run check:fast green; npm run verify:test-discovery 733 files.\n\n* fix(clients): reject non-regular ZCode fallback files before reading\n\nResolve the fallback through the client-config transaction path and the\nregular-file admission before parsing it, so a FIFO or other non-regular\nfile at ~/.agents/mcp.json fails setup closed instead of blocking the\nread indefinitely. Directory and FIFO fallback cases are covered in\ntests, and the preflight remediation names unreadable fallbacks too.\n\n---------\n\nCo-authored-by: morluto <76467478+morluto@users.noreply.github.com>", - "parents": [ - "e4d3e1399d9cd4932653e7015a1bf8589e56029d" - ], + "parents": ["e4d3e1399d9cd4932653e7015a1bf8589e56029d"], "authors": [ { "name": "Iven Koo", @@ -6761,17 +5851,13 @@ } } ], - "pullRequests": [ - 1564 - ] + "pullRequests": [1564] }, { "sha": "bfa805decf83744bd3ecb0d1402667cf3ed5c3b2", "subject": "feat(clients): register Trae during setup (#1573)", "body": "feat(clients): register Trae during setup (#1573)\n\n* feat(clients): register Trae during setup\n\n- SupportedClients: trae definition (VS Code-style user directory,\n User/mcp.json, format json)\n- Trae documents mcpServers as the top-level server table with\n command/args/env and stdio as the default transport; it has no\n personal skills directory, so setup skips the skill copy\n- tests: traeClientConfiguration.test.ts (per-platform user directory\n resolution, upsert preserving unrelated settings, fresh/empty\n configs, uninstall)\n\nVerified: tsc --noEmit clean; vitest run\ntests/boundary/filesystem/traeClientConfiguration.test.ts 6/6.\n\n* fix(clients): install Trae's personal REA skill\n\nReview follow-up (#1573): the Trae Skills documentation lists global\nskills under ~/.trae/skills on macOS/Linux and %userprofile%/.trae/skills\non Windows, so the definition now carries that skillPath and setup\ninstalls the bundled skill copy there. The installation docs no longer\nclaim Trae has no personal skills directory, and the bundled REA\nskill's supported client list includes trae.\n\nVerified: tsc --noEmit clean; vitest run\ntests/boundary/filesystem/traeClientConfiguration.test.ts 7/7.\n\n* docs(clients): qualify Trae configuration path evidence\n\n---------\n\nCo-authored-by: morluto <76467478+morluto@users.noreply.github.com>", - "parents": [ - "51d6c87cdbf5f11eaf3cb1862befe704a81827c5" - ], + "parents": ["51d6c87cdbf5f11eaf3cb1862befe704a81827c5"], "authors": [ { "name": "Iven Koo", @@ -6790,17 +5876,13 @@ } } ], - "pullRequests": [ - 1573 - ] + "pullRequests": [1573] }, { "sha": "109769319a4a3a5f85e8a43bb419d04aefff66a4", "subject": "feat(clients): register Qoder CLI during setup (#1572)", "body": "feat(clients): register Qoder CLI during setup (#1572)\n\n* feat(clients): register Qoder CLI during setup\n\n- SupportedClients: qoder definition (~/.qoder/settings.json, format\n json, QODER_CONFIG_DIR override honored)\n- Qoder CLI documents mcpServers as the user-scope server table with\n command/args/env and stdio as the default transport; no personal\n skills directory is documented, so setup skips the skill copy\n- tests: qoderClientConfiguration.test.ts (path resolution and\n QODER_CONFIG_DIR override, upsert preserving unrelated settings,\n fresh/empty configs, uninstall)\n\nVerified: tsc --noEmit clean; vitest run\ntests/boundary/filesystem/qoderClientConfiguration.test.ts 6/6.\n\n* fix(clients): install Qoder CLI's personal REA skill\n\nReview follow-up (#1572): the Qoder CLI Skills documentation lists\n~/.qoder/skills/{skill-name}/SKILL.md with automatic discovery, so the\ndefinition now carries skillPath following Qoder's configuration\nlocation (QODER_CONFIG_DIR honored) and setup installs the bundled\nskill copy there. The installation docs no longer claim Qoder has no\npersonal skills directory, and the bundled REA skill's supported\nclient list includes qoder.\n\nVerified: tsc --noEmit clean; vitest run\ntests/boundary/filesystem/qoderClientConfiguration.test.ts 7/7.\n\n---------\n\nCo-authored-by: morluto <76467478+morluto@users.noreply.github.com>", - "parents": [ - "bfa805decf83744bd3ecb0d1402667cf3ed5c3b2" - ], + "parents": ["bfa805decf83744bd3ecb0d1402667cf3ed5c3b2"], "authors": [ { "name": "Iven Koo", @@ -6819,17 +5901,13 @@ } } ], - "pullRequests": [ - 1572 - ] + "pullRequests": [1572] }, { "sha": "86de439ba4c9297f721abc60c715fe30fb6ff3df", "subject": "fix(frida): name the argument each Frida input error rejects (#2217)", "body": "fix(frida): name the argument each Frida input error rejects (#2217)\n\nFrida session lookups, script lookups, unreadable script files and the\ninstrument-with-frida PID and script checks returned invalid_request with\nno issues, while the remediation told callers to correct the listed\narguments. Attach the session_id, script_id, path, target or script issue\nwith the reason so CLI and MCP callers can see what to fix.\n\nFixes #2213\n\nCo-authored-by: Claude Opus 5.5 ", - "parents": [ - "109769319a4a3a5f85e8a43bb419d04aefff66a4" - ], + "parents": ["109769319a4a3a5f85e8a43bb419d04aefff66a4"], "authors": [ { "name": "Kaoru0822", @@ -6848,17 +5926,13 @@ } } ], - "pullRequests": [ - 2217 - ] + "pullRequests": [2217] }, { "sha": "ae412654d5947f3841c191e92f3ad6b73d6f894b", "subject": "docs: preserve the native guide title anchor (#2224)", "body": "docs: preserve the native guide title anchor (#2224)\n\nKeep the former native-ui-and-dispatch-investigation fragment after the\npage title was changed in #2207. The old and current fragments resolve to\nthe same heading position in the generated page.\n\nValidation: VitePress production build, generated-document checks, format\nand link checks, and real Chrome navigation to both fragments.\nRefs #2156.\n\nCo-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>", - "parents": [ - "86de439ba4c9297f721abc60c715fe30fb6ff3df" - ], + "parents": ["86de439ba4c9297f721abc60c715fe30fb6ff3df"], "authors": [ { "name": "Ysopwnable", @@ -6877,17 +5951,13 @@ } } ], - "pullRequests": [ - 2224 - ] + "pullRequests": [2224] }, { "sha": "c9aecde580d26d4e7745c2623a4efa327a27367e", "subject": "fix(frida): reject an unreadable script file before starting a session (#2211)", "body": "fix(frida): reject an unreadable script file before starting a session (#2211)\n\n* fix(frida): reject an unreadable script file before starting a session\n\nThe shared instrument_with_frida workflow started the Frida session, which\nattaches or spawns the target, before the provider read a file script\nsource. A missing script file then failed loadScript with a bare\ninvalid_request, and session cleanup resumed the paused spawn, so the\ntarget ran without instrumentation. Check that the selected file is a\nreadable regular file first and report the path, or access_denied for\nEACCES/EPERM, before any device effect.\n\nFixes #2209\n\nCo-Authored-By: Claude Opus 5.5 \n\n* fix(frida): let cancellation win over the script file check\n\nAn already-aborted request with an unreadable file source returned the\ninput or access-denied error instead of AnalysisCancelledError. Check the\nsignal before the script file preflight and again after it, so file\nsources keep the existing cancellation semantics.\n\nCo-Authored-By: Claude Opus 5.5 \n\n* refactor(frida): keep the pre-start checks out of instrument\n\nCo-Authored-By: Claude Opus 5.5 \n\n---------\n\nCo-authored-by: Claude Opus 5.5 ", - "parents": [ - "ae412654d5947f3841c191e92f3ad6b73d6f894b" - ], + "parents": ["ae412654d5947f3841c191e92f3ad6b73d6f894b"], "authors": [ { "name": "Kaoru0822", @@ -6906,17 +5976,13 @@ } } ], - "pullRequests": [ - 2211 - ] + "pullRequests": [2211] }, { "sha": "7711b0000592aa80c7b0412004150313f78feabc", "subject": "fix(apple): preflight XML plist nesting before keyed archive decoding (#2161)", "body": "fix(apple): preflight XML plist nesting before keyed archive decoding (#2161)\n\n* fix(apple): preflight XML plist nesting before keyed archive decoding\n\ninspect_keyed_archive documented a 128-level nesting limit, but the XML\nplist path reached recursive decoding before any depth check: plist and\nthe prototype-key traversal in parseXmlPropertyList recurse once per\nnesting level, so a ~75 KiB, 3000-level XML plist exhausted the call\nstack and reported Maximum call stack size exceeded instead of the\nbounded-resource limit that shallower over-limit documents (129, 200)\nalready produced. The CLI classified both as truncated, so no crash or\nclassification bypass was involved; the diagnostic was the defect.\n\nReject excessive nesting in parseXmlPropertyList before any recursive\npass, using the projection's own limit (MAX_PLIST_DEPTH) so the error is\nidentical to the one projectPlistValue raises: callers keep the\nlimit/truncated classification with no error-handler translation. Depth\ncounts values the way the projection does - container members nest one\nlevel deeper, dictionary keys name members rather than nesting, and a\nself-closing element is the value at its own level - so the guard\nrejects exactly the documents the projection rejected, at the same\nboundary, and every in-limit document decodes unchanged. The guard sits\nat the shared decoder boundary, so Interface Builder, app Info.plist\nresolution and native inspect_plist gain the same deterministic limit;\nthe binary plist path keeps its existing expansion preflight.\n\nBinary plist behavior, ordinary XML decode, __proto__ omission counting,\nand archive digest/Evidence provenance are unchanged. OpenStep\nautodetection is untouched by this guard, as the existing Interface\nBuilder preflight also scopes its depth check to XML.\n\nRegression coverage: decoder unit tests at and just past the limit for\ndictionary and array nesting with self-closing and opaque markup,\nmodule tests through decodeKeyedArchiveBytes including a valid\nNSKeyedArchiver XML envelope at the limit, a production-boundary test\nthrough inspectBundleKeyedArchive, and the compiled public CLI\nreporting code truncated / reason limit for a 3000-level plist.\n\n* fix(apple): check XML nesting against parsed element structure\n\nReuse the iterative XML decoder document for depth preflight and prototype-key lookup. Bound recursive plist wrappers alongside dictionaries and arrays without interpreting markup inside attributes or DOCTYPE declarations as values.\n\nValidated with 104 focused tests including compiled CLI, MCP prototype-key, and Interface Builder coverage; npm run check and verify:test-discovery passed. No real-provider verification was run.\n\n---------\n\nCo-authored-by: Zburgers \nCo-authored-by: morluto <76467478+morluto@users.noreply.github.com>", - "parents": [ - "c9aecde580d26d4e7745c2623a4efa327a27367e" - ], + "parents": ["c9aecde580d26d4e7745c2623a4efa327a27367e"], "authors": [ { "name": "nakshatra k", @@ -6943,17 +6009,13 @@ } } ], - "pullRequests": [ - 2161 - ] + "pullRequests": [2161] }, { "sha": "b1bf4a70d44191348ca20a91a52fb663da4daed0", "subject": "fix(setup): name invalid client config shape errors clearly (#2157)", "body": "fix(setup): name invalid client config shape errors clearly (#2157)\n\n* fix(setup): name invalid client config shape errors clearly\n\nSetup was dumping raw Zod issues for non-object roots or server tables,\nand uninstall always claimed the file was not valid JSON. Report the\nstructural problem instead, and reserve parse failures for real syntax errors.\n\nFixes #2152\n\nCo-authored-by: Cursor \n\n* fix(setup): preserve client configuration record validation\n\nKeep descriptive shape errors while retaining Zod record validation and its own-property copy. Reject tagged YAML objects before setup or uninstall writes and prevent inherited JSONC properties from fabricating client registrations.\n\nAdd production-boundary regressions for tagged YAML roots and server tables, plus inherited Cursor and OpenCode settings. All 91 focused tests, npm run check, verify:test-discovery, verify:package, and npm pack --dry-run passed.\n\n---------\n\nCo-authored-by: Beqa Ksovreli \nCo-authored-by: Cursor \nCo-authored-by: morluto <76467478+morluto@users.noreply.github.com>", - "parents": [ - "7711b0000592aa80c7b0412004150313f78feabc" - ], + "parents": ["7711b0000592aa80c7b0412004150313f78feabc"], "authors": [ { "name": "BeqaKs", @@ -6985,17 +6047,13 @@ } } ], - "pullRequests": [ - 2157 - ] + "pullRequests": [2157] }, { "sha": "ac6ef95e12335bdc054ccaaa96c32474cf8789ea", "subject": "docs: define contribution scope and simplify proposal forms", "body": "docs: define contribution scope and simplify proposal forms\n\nDefine REA contribution scope and fail closed on unresolved integration boundaries.\n\nMake proposal forms easier to complete with structured choices, explicit unknowns, and optional technical details; welcome exploratory drafts while retaining maintainer review before integration.", - "parents": [ - "b1bf4a70d44191348ca20a91a52fb663da4daed0" - ], + "parents": ["b1bf4a70d44191348ca20a91a52fb663da4daed0"], "authors": [ { "name": "Ysopwnable", @@ -7006,17 +6064,13 @@ } } ], - "pullRequests": [ - 2229 - ] + "pullRequests": [2229] }, { "sha": "94153f1c757e07a6d092e00903aa8b125d4a0afa", "subject": "fix(uninstall): label YAML configuration syntax failures correctly", "body": "fix(uninstall): label YAML configuration syntax failures correctly\n\nReport malformed Hermes and DeepSeek Harness documents as YAML. Carry the\ncompiled setup/uninstall diagnostics coverage from #2153 onto the existing\nvalidation from #2157, including unchanged files and no backup writes.\nAdd malformed YAML scenarios for both clients.\n\nValidation: 174 focused tests, npm run check, test discovery, package\nverification, and npm pack --dry-run.\n\nCo-authored-by: Jax367 <239124526+Jax367@users.noreply.github.com>\n", - "parents": [ - "ac6ef95e12335bdc054ccaaa96c32474cf8789ea" - ], + "parents": ["ac6ef95e12335bdc054ccaaa96c32474cf8789ea"], "authors": [ { "name": "morluto", @@ -7041,9 +6095,7 @@ "sha": "428eee00fdd0406cdf2b734c9ea14a2bb02da279", "subject": "ci: keep validation fresh and preserve failed-shard reports (#2210)", "body": "ci: keep validation fresh and preserve failed-shard reports (#2210)\n\nRun the existing README consistency and Python producer guards from their\nCI owners. Execute full local validation fresh while preserving cached\npreparation, and permit scoped reuse of earlier portable build entries.\n\nCollect failed-shard diagnostics before enforcing success and publish\ncompact, portable timing history only after a complete successful merge.\nPreserve installer truncation failure across supported Bash versions.\n\nKeep cancellation tests focused on the called MCP tool, observe server\nprogress before timing target readiness, and retain delayed-startup,\ncancellation, cleanup, and live follow-up request assertions.\n\nValidation: all 32 CI jobs and the separate Go lane passed; 935 files,\n9,630 cases, 9,544 passed, 86 skipped, zero failed. Controlled regressions\nand fault/restoration probes are recorded in PR #2210.\n\nRefs #2190.\n\nAssisted-by: Kogasa (gensokyo-skills:kogasa-surprise-testing)", - "parents": [ - "94153f1c757e07a6d092e00903aa8b125d4a0afa" - ], + "parents": ["94153f1c757e07a6d092e00903aa8b125d4a0afa"], "authors": [ { "name": "Ysopwnable", @@ -7054,17 +6106,13 @@ } } ], - "pullRequests": [ - 2210 - ] + "pullRequests": [2210] }, { "sha": "1770f38cfc6cbe87491d0de8b8730c305c5cf8ea", "subject": "test(native): verify real PE and DOS entry views", "body": "test(native): verify real PE and DOS entry views\n\nRecord real Ghidra/MCP and Codex CLI verification of shipped ShareX native PE and FreeDOS DOS MZ entry views. Preserve original Evidence provenance, separate run-specific references from facts, and reject stale/colliding producer identities or unsupported model claims.\n\nSixteen focused experiment regression cases, original public-reply/transcript replays, and CI run 38273269072 pass for head 0667f7cb7c85f134311c7470ff4ee99ef9cc45f4. No production API/default change or general native speedup claim; final resource counters remain unknown. Continues #2016.\n\nCo-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>", - "parents": [ - "428eee00fdd0406cdf2b734c9ea14a2bb02da279" - ], + "parents": ["428eee00fdd0406cdf2b734c9ea14a2bb02da279"], "authors": [ { "name": "Ysopwnable", @@ -7083,17 +6131,13 @@ } } ], - "pullRequests": [ - 2216 - ] + "pullRequests": [2216] }, { "sha": "0baad58e606f12a8dc6cef06253f85350378e5b1", "subject": "feat(ghidra): admit RISC-V ELF analysis through a pinned generic lane (#2151)", "body": "feat(ghidra): admit RISC-V ELF analysis through a pinned generic lane (#2151)\n\n* feat(ghidra): admit RISC-V ELF analysis through a pinned generic lane\n\nRefs #2063.\n\nRecognize `EM_RISCV` (243) as a provider-neutral family that carries its own ELF\nfacts, and bound the first Ghidra lane to little-endian `ET_EXEC` images that\ndeclare the double-float ABI, pinned to `RISCV:LE:32:default` or\n`RISCV:LE:64:default` with the `gcc` compiler specification.\n\nGhidra 12.1.4 is not reliable without the pin: its `riscv.opinion` pins\n`variant=\"default\"` for the 64-bit constraint and leaves the 32-bit constraint\nwith the comment that the loader \"must choose between 'default' and 'AndeStar'\nvariants\". Measured on the installed release tree, a source-owned generic RV32\nELF with no Andes declaration imports as `RISCV:LE:32:AndeStar_v5:gcc`, while\nRV64 resolves to `RISCV:LE:64:default:gcc`. The lane therefore states the\nlanguage per width and refuses any caller-selected processor outside it instead\nof inheriting the header guess.\n\nRefusals name the declaration rather than falling back to a guessed profile:\nbig-endian images (Ghidra 12.1.4 ships no big-endian RISC-V language),\nnon-`ET_EXEC` images, `EF_RISCV_RVE`, `EF_RISCV_TSO`, and every float ABI other\nthan double, which the pinned generic compiler specifications model. The raw\ne_flags bits stay in Evidence as declarations, not as instruction semantics.\n\nFamily recognition now has one owner for the ELF-metadata families:\n`ELF_METADATA_ARCHITECTURES`, `isElfMetadataArchitecture`, and\n`HeaderArchitecture` replace ten `Exclude` sites that\nwould each have needed a second hand-edited member. `ghidraPinnedLanguage` is\nthat owner for the import commitment: the session readback previously re-derived\nonly the MIPS pin, so a profile committing any second pinned language failed with\na language-mismatch error before the bridge started.\n\nHopper and IDA refuse RISC-V by name, matching the MIPS wording. Caller-supplied\nraw-binary entry keeps its existing four-family list; this lane is ELF-header\nadmission only.\n\nVerification on macOS 15.7.7 arm64, Node 24.18.0, Ghidra 12.1.4 PUBLIC and JDK\n21.0.12.1, with the host decompiler built from the release sources for\n`os/mac_arm_64`: `npm run check` passes; `npm run test:fast` passes 396 test\nfiles; `npm run verify:test-discovery` discovers all 917 test files exactly once.\nSource-owned RV32 and RV64 double-float `ET_EXEC` fixtures complete\n`rea analyze --provider ghidra` and `rea decompile rea_riscv_entry`, committing\n`RISCV:LE:32:default` and `RISCV:LE:64:default` with `language_selection:\nprovider-pinned-v1`; the soft-float RV64 shape is refused with the named\nfloat-ABI reason, and the full refusal matrix including the RV32 and\nwidth-mismatch shapes is covered by unit tests. No `verify:ghidra:riscv` lane\nscript is included in this change; the runs above were performed manually against\nthe installed engine. Fork pull requests receive no CI check runs, so the\nreal-provider scope above is the evidence available for review.\n\n* fix(ghidra): bound the RISC-V lane by declared flags and document it\n\nAddress review feedback on #2151.\n\n`e_flags` bits outside `EF_RISCV_RVC | EF_RISCV_FLOAT_ABI` are now refused with\nthe offending value named, so a reserved or newer producer declaration cannot\nenter the verified generic lane by falling through the RVE, TSO and float-ABI\nchecks.\n\nAdmission reads `e_type` only, so the refusal text no longer calls `ET_EXEC`\nstatic: a fixed-address declaration does not establish static linkage, and\n`PT_INTERP` and dynamic dependencies are not inspected. The session records that\nboundary as a limitation rather than inferring a load model.\n\nAdd `docs/ghidra-riscv.md` in the shape of the MIPS lane guide (admission\nboundary, refusal table, why the language is pinned per class, Evidence fields,\nand what the fixtures do not establish), and correct\n`docs/firmware-analysis.md`, which still told users that MIPS and RISC-V\ndecompilation had not been added.\n\nVerification after the change: `npm run check` and `npm run docs:check` pass; the\nRISC-V module tests pass (17 lane cases plus 9 parser cases); on Ghidra 12.1.4\nwith JDK 21.0.12.1 the RV32 and RV64 double-float fixtures still analyze and\ndecompile with `RISCV:LE:32:default` / `RISCV:LE:64:default` and\n`language_selection: provider-pinned-v1`, the soft-float fixture is still refused\nby name, and the new linkage limitation appears in the emitted Evidence.\n\n* fix(ghidra): align RISC-V pinning with admission\n\nReuse the complete lane admission boundary when selecting a language, retain unsigned unsupported flag bits in diagnostics, and derive float ABI metadata from the source declaration.\n\n* test(ghidra): verify RISC-V CLI and MCP workflows\n\nBuild source-owned RV32/RV64 fixtures with Clang and LLD, establish independent ELF and symbol facts with LLVM readelf, and verify real provider evidence, instruction bytes, calls, decompilation, schema projections, snapshot replay, refusal diagnostics, source immutability and cleanup.\n\nVerified on macOS ARM64 with Ghidra 12.1.4, JDK 21 and LLVM/LLD 23.1.2. Dynamic linkage, big-endian, Andes and RVE/TSO workflows remain unverified; ISA attributes are not inspected.\n\n---------\n\nCo-authored-by: morluto <76467478+morluto@users.noreply.github.com>", - "parents": [ - "1770f38cfc6cbe87491d0de8b8730c305c5cf8ea" - ], + "parents": ["1770f38cfc6cbe87491d0de8b8730c305c5cf8ea"], "authors": [ { "name": "The one -Niu", @@ -7112,17 +6156,13 @@ } } ], - "pullRequests": [ - 2151 - ] + "pullRequests": [2151] }, { "sha": "7724edbdd3fa0acd94c8210a30dceba501fcdbe8", "subject": "fix(process): report single empty settlement observation as unverifiable (#2232)", "body": "fix(process): report single empty settlement observation as unverifiable (#2232)\n\nobserveSettlement classified a group as alive_at_deadline when the settlement\nbudget expired after one empty observation, though no live member was ever\nseen. Track observed liveness and return unverifiable when the deadline ends\nobservation with only empty rounds. The two-consecutive-empty rule for\nquiesced is unchanged, and the cleanup_outcome projection for non-quiesced\nsettlements stays cleaned.\n\nFixes #2170.", - "parents": [ - "0baad58e606f12a8dc6cef06253f85350378e5b1" - ], + "parents": ["0baad58e606f12a8dc6cef06253f85350378e5b1"], "authors": [ { "name": "Saim Shafique", @@ -7133,17 +6173,13 @@ } } ], - "pullRequests": [ - 2232 - ] + "pullRequests": [2232] }, { "sha": "85c5477930d504cfd8b72334b48255d8e746a85e", "subject": "docs(readiness): align required stage identifier and checks with evaluator (#2200)", "body": "docs(readiness): align required stage identifier and checks with evaluator (#2200)", - "parents": [ - "7724edbdd3fa0acd94c8210a30dceba501fcdbe8" - ], + "parents": ["7724edbdd3fa0acd94c8210a30dceba501fcdbe8"], "authors": [ { "name": "Luis Araya", @@ -7154,17 +6190,13 @@ } } ], - "pullRequests": [ - 2200 - ] + "pullRequests": [2200] }, { "sha": "d80b55e11bc47c6f999dac7dcb8382219d65739a", "subject": "fix(adb): preserve existing bugreport archives (#2221)", "body": "fix(adb): preserve existing bugreport archives (#2221)\n\n* fix(adb): preserve existing bugreport archives\n\n* fix(adb): retain bugreports after publication failure\n\nRecord acquired archive facts before publishing, preserve the staging archive when the exclusive copy fails, and keep retained evidence out of automatic cleanup. Reuse the same observation through publication and digest failures.\n\nAdd a real-filesystem ENOSPC regression covering error projection, existing evidence, subsequent collection and provider shutdown. Verified 96 focused tests, static checks and docs on macOS with simulated ADB; no real-device verification.\n\n---------\n\nCo-authored-by: morluto <76467478+morluto@users.noreply.github.com>", - "parents": [ - "85c5477930d504cfd8b72334b48255d8e746a85e" - ], + "parents": ["85c5477930d504cfd8b72334b48255d8e746a85e"], "authors": [ { "name": "Lucien", @@ -7183,17 +6215,13 @@ } } ], - "pullRequests": [ - 2221 - ] + "pullRequests": [2221] }, { "sha": "8e004522f232ec698c77536235853088a851e6b5", "subject": "docs: define performance priorities for analysis workflows (#2245)", "body": "docs: define performance priorities for analysis workflows (#2245)\n\nSet agent tokens and context first, analysis time second, and CPU and memory\nthird while preserving correctness, Evidence and existing contracts.\n\nCo-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>", - "parents": [ - "d80b55e11bc47c6f999dac7dcb8382219d65739a" - ], + "parents": ["d80b55e11bc47c6f999dac7dcb8382219d65739a"], "authors": [ { "name": "Ysopwnable", @@ -7212,17 +6240,13 @@ } } ], - "pullRequests": [ - 2245 - ] + "pullRequests": [2245] }, { "sha": "59be866719e8fe8ec060515044d427a3b0a57649", "subject": "fix(ghidra): encode Java probe output as UTF-8 (#2206)", "body": "fix(ghidra): encode Java probe output as UTF-8 (#2206)\n\n* fix(ghidra): encode Java probe output as UTF-8\n\n* fix(ghidra): preserve Unicode Java homes across supported JDKs\n\n* test(ghidra): verify snapshot rejection without matching prose\n\n---------\n\nCo-authored-by: morluto <76467478+morluto@users.noreply.github.com>", - "parents": [ - "8e004522f232ec698c77536235853088a851e6b5" - ], + "parents": ["8e004522f232ec698c77536235853088a851e6b5"], "authors": [ { "name": "Ha1baraA1", @@ -7241,17 +6265,13 @@ } } ], - "pullRequests": [ - 2206 - ] + "pullRequests": [2206] }, { "sha": "8cbd57cafaf1cfacbe832bae593589cf211442ef", "subject": "fix(website): prioritize getting started across language editions", "body": "fix(website): prioritize getting started across language editions\n", - "parents": [ - "59be866719e8fe8ec060515044d427a3b0a57649" - ], + "parents": ["59be866719e8fe8ec060515044d427a3b0a57649"], "authors": [ { "name": "N0zoM1z0", @@ -7262,17 +6282,13 @@ } } ], - "pullRequests": [ - 2250 - ] + "pullRequests": [2250] }, { "sha": "d96550f2f61647ffa150597de73363fa90c4e169", "subject": "ci: summarize static checks and retain complete reports (#2242)", "body": "ci: summarize static checks and retain complete reports (#2242)\n\nKeep static feedback concise while retaining complete diagnostic reports,\nvisible lint errors, module-boundary checks, and the 3% duplication gate.\nUpload complete reports after static failures and restore their outputs\nfrom Turbo caches. Preserve unambiguous, checkout-relative clone locations.\n\nBind both lint caches to the website, documentation configuration and\nexperiment sources actually scanned by oxlint, including ignore policy.\nGuard this ownership by comparing live checker discovery with resolved\nTurbo inputs. A real website syntax error now invalidates a cached pass.\n\nValidation: full current-head CI and the separate Go lane passed. Seven\nreal-checker regressions passed; failure-status and stale-report mutations\nwere rejected, and restored source passed. Actual Turbo restored both\nreports byte-for-byte; full static/docs/workflow checks passed.\n\nCloses #2238.\nRefs #2190.\n\nAssisted-by: Kogasa (gensokyo-skills:kogasa-surprise-testing)", - "parents": [ - "8cbd57cafaf1cfacbe832bae593589cf211442ef" - ], + "parents": ["8cbd57cafaf1cfacbe832bae593589cf211442ef"], "authors": [ { "name": "Ysopwnable", @@ -7283,17 +6299,13 @@ } } ], - "pullRequests": [ - 2242 - ] + "pullRequests": [2242] }, { "sha": "ad08510a113d7a9b8d92fb1e385757880e469869", "subject": "refactor(evm): bind offline analysis through a static descriptor", "body": "refactor(evm): bind offline analysis through a static descriptor\n\nBind existing EVM CLI/MCP metadata and the legacy service factory through one static descriptor, and register the same selected service that owns cleanup. Preserve original names, schemas, inputs/full defaults, configuration, Evidence and injection identity.\n\nVerified exact SDK catalog/fact parity across six real EVM pairs, 59 actual EVM CLI/MCP cases, six real cross-domain workflows, six actual Codex CLI fact/reference/lifecycle trials and relevant local checks. CI run 38283026233 succeeds for exact head d999d9874bf59c3c8486bac9b2c867a4a6a9121d. No token reduction from wiring or fully qualified resource claim; final counters remain unknown. Continues #2016.\n\nCo-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>", - "parents": [ - "d96550f2f61647ffa150597de73363fa90c4e169" - ], + "parents": ["d96550f2f61647ffa150597de73363fa90c4e169"], "authors": [ { "name": "Ysopwnable", @@ -7312,17 +6324,13 @@ } } ], - "pullRequests": [ - 2261 - ] + "pullRequests": [2261] }, { "sha": "11fe5a13f8aee87d0c0e036a9f497407e085fe48", "subject": "fix(native): retain failed pwntools process and runtime cleanup (#1708)", "body": "fix(native): retain failed pwntools process and runtime cleanup (#1708)\n\n* fix(native): retain failed pwntools process and runtime cleanup\n\nKeep failed worker/debugger cleanup owners and their private files until\nverified process shutdown and successful directory removal. Retry cleanup\nbefore another inspection and expose shutdown through the shared services,\nCLI and MCP server. Serialize acquisition without delaying cancellation of\nqueued callers, and preserve primary diagnostics when CLI cleanup fails.\n\nThe original decoder reproduction left a live owned Node child with its\nruntime deleted and no retained cleanup owner; the regression now verifies\nretention, admission blocking, retries and eventual process/file cleanup.\n\nValidation: 10 lifecycle/public CLI/MCP tests, 20 service tests, test\ndiscovery 814/814, build:cached and full check including architecture guards.\nActual POSIX process/filesystem boundaries used injected Node workers on\nmacOS; real Linux pwntools/GDB provider parsing was not exercised.\n\n* test(native): verify retained recorded-crash cleanup lifecycle\n\n* fix(native): finalize diagnostic cleanup before publishing results\n\n* fix(native): retire decoder stages before reading runtime evidence\n\n---------\n\nCo-authored-by: morluto <76467478+morluto@users.noreply.github.com>", - "parents": [ - "ad08510a113d7a9b8d92fb1e385757880e469869" - ], + "parents": ["ad08510a113d7a9b8d92fb1e385757880e469869"], "authors": [ { "name": "Yijie Lu", @@ -7341,17 +6349,13 @@ } } ], - "pullRequests": [ - 1708 - ] + "pullRequests": [1708] }, { "sha": "2e45b4d7a5b3228fe8b283def6f047797561bee1", "subject": "fix(ci): stop aggregate jobs when verification is cancelled", "body": "fix(ci): stop aggregate jobs when verification is cancelled\n", - "parents": [ - "11fe5a13f8aee87d0c0e036a9f497407e085fe48" - ], + "parents": ["11fe5a13f8aee87d0c0e036a9f497407e085fe48"], "authors": [ { "name": "morluto", @@ -7368,9 +6372,7 @@ "sha": "ec2d251c0ad8382e0665546be5ec8f5f1c175962", "subject": "fix(adb): count UTF-8 bytes in logcat total_bytes (#2212)", "body": "fix(adb): count UTF-8 bytes in logcat total_bytes (#2212)\n\n* fix(adb): count UTF-8 bytes in logcat total_bytes\n\nread_adb_logcat assigned the decoded stdout string's UTF-16 code-unit\nlength to total_bytes, undercounting non-ASCII dumps (a 37-byte CJK line\nreported 33). Measure the UTF-8 byte length instead, matching the field's\nbyte-unit contract and the repo's Buffer.byteLength convention.\n\nFixes #2175\n\n* fix(adb): count raw captured bytes in logcat total_bytes\n\nCarry the pre-decode stdout byte length through runAdb so malformed\nUTF-8 (replaced by U+FFFD on decode) still reports the true captured\nbyte count instead of the re-encoded replacement size.", - "parents": [ - "2e45b4d7a5b3228fe8b283def6f047797561bee1" - ], + "parents": ["2e45b4d7a5b3228fe8b283def6f047797561bee1"], "authors": [ { "name": "Saim Shafique", @@ -7381,17 +6383,13 @@ } } ], - "pullRequests": [ - 2212 - ] + "pullRequests": [2212] }, { "sha": "f941968eb1860dd41efc2a5201b35cecca42301d", "subject": "fix(ci): allow cold Chrome startup in runtime fixtures", "body": "fix(ci): allow cold Chrome startup in runtime fixtures\n\nLet the fixture lifecycle own CDP readiness with the same 60-second startup deadline as the broader browser verifier. Return the discovered port to both consumers and clean up failed startup before returning a lease.\n\nValidation: five startup/cleanup boundary tests, npm run check, and real Chrome 154 runtime and source-map CLI/MCP verifiers passed on macOS arm64. Hosted Linux verification follows the push.\n", - "parents": [ - "ec2d251c0ad8382e0665546be5ec8f5f1c175962" - ], + "parents": ["ec2d251c0ad8382e0665546be5ec8f5f1c175962"], "authors": [ { "name": "morluto", @@ -7408,9 +6406,7 @@ "sha": "47a51b08f4d79f808c1b74de79c3852aa853df53", "subject": "fix(process): add an opt-in Swift module cache (#2252)", "body": "fix(process): add an opt-in Swift module cache (#2252)\n\n* fix(process): add an opt-in Swift module cache\n\nSigned-off-by: Charan Rathore <180254320+charan-rathore@users.noreply.github.com>\n\n* fix(process): preserve caller-owned Swift module caches\n\nFold the complementary implementation from #2260 into the earlier #2252 proposal, retaining the original contribution history.\n\nCo-authored-by: NIU-123370 <191000457+NIU-123370@users.noreply.github.com>\n\n* fix(process): bypass xcrun lookup for explicit Swift toolchains\n\n---------\n\nSigned-off-by: Charan Rathore <180254320+charan-rathore@users.noreply.github.com>\nCo-authored-by: morluto <76467478+morluto@users.noreply.github.com>\nCo-authored-by: NIU-123370 <191000457+NIU-123370@users.noreply.github.com>", - "parents": [ - "f941968eb1860dd41efc2a5201b35cecca42301d" - ], + "parents": ["f941968eb1860dd41efc2a5201b35cecca42301d"], "authors": [ { "name": "Charan Rathore", @@ -7437,17 +6433,13 @@ } } ], - "pullRequests": [ - 2252 - ] + "pullRequests": [2252] }, { "sha": "fd985dbc5b9435918732c0cc1825060af2a3a47e", "subject": "fix(apple): join recognized keys from NIBArchive field maps (#2248)", "body": "fix(apple): join recognized keys from NIBArchive field maps (#2248)\n\n* fix(apple): join recognized keys from NIBArchive field maps\n\ninspect-asset-catalog returned no resource-key matches for a decoded\nNIBArchive resource whose recognized image key is present in the archive. The\nNIBArchive projection groups an object's decoded fields under the node's\nnibValues attribute beside the class, label and ID it derives from the same\narchive, while the AppKit keyed-archive parser flattens the same fields onto\nthe node. The catalog join read only the top level, so a recognized NSImageName\non a decoded resource produced no row, and the empty-catalog limitation still\nclaimed resource keys were reported as unmatched.\n\nRead an archive object's fields from both shapes, and give the namespace one\nowner by exporting NIB_VALUES_ATTRIBUTE from the projection that writes it.\nThe recognized-field set stays in the catalog analysis, which owns that\ncontract.\n\nVerified with 5 focused catalog tests, check:fast and verify:test-discovery on\nmacOS arm64, and through the public CLI against the reported NIBArchive\nfixture. The keyed-archive control keeps its existing row, and a NIBArchive\nwith only an unrecognized title still produces none. The ibtool-dependent\nnative hierarchy lane requires full Xcode and was unavailable here.\n\n* fix(apple): normalize resource keys at the NIBArchive producer\n\nFold the complementary implementation from #2256 into the earlier #2248 proposal, retaining the original contribution history.\n\nCo-authored-by: Thang Luu <76550342+thangldw@users.noreply.github.com>\n\n* fix(apple): restrict catalog joins to parsed resource nodes\n\n---------\n\nCo-authored-by: 吴佳浩 \nCo-authored-by: morluto <76467478+morluto@users.noreply.github.com>\nCo-authored-by: Thang Luu <76550342+thangldw@users.noreply.github.com>", - "parents": [ - "47a51b08f4d79f808c1b74de79c3852aa853df53" - ], + "parents": ["47a51b08f4d79f808c1b74de79c3852aa853df53"], "authors": [ { "name": "吴佳浩Alben", @@ -7479,17 +6471,13 @@ } } ], - "pullRequests": [ - 2248 - ] + "pullRequests": [2248] }, { "sha": "916ac97bf9f7b976982e438ceb856a9692576cb1", "subject": "fix(cli): retain browser and Inspector input correction details (#2230)", "body": "fix(cli): retain browser and Inspector input correction details (#2230)\n\nReuse the shared safe issue projection for all six CLI validation boundaries\nand cover malformed inputs, credential safety, and parser diagnostics.\n\nFixes morluto/rea#2180\n\nDeveloped with assistance from OpenAI Codex.", - "parents": [ - "fd985dbc5b9435918732c0cc1825060af2a3a47e" - ], + "parents": ["fd985dbc5b9435918732c0cc1825060af2a3a47e"], "authors": [ { "name": "No BS AI", @@ -7500,17 +6488,13 @@ } } ], - "pullRequests": [ - 2230 - ] + "pullRequests": [2230] }, { "sha": "aeee5074d124414239b6dd440dc79c26bcbd58a4", "subject": "feat(sqlite): inspect offline snapshots with selective evidence (#2271)", "body": "feat(sqlite): inspect offline snapshots with selective evidence (#2271)\n\nAdd offline SQLite database/WAL inspection through the shared CLI/MCP.\n\nUse compact inventory, selected-table schema, exact ordered columns and\nbounded row samples while preserving source identity and lossless values.\nRetain completed Evidence through late cancellation and private-root cleanup\nfailures, bound concurrent inspections, and recheck journal validity after\nacquisition. Reuse prepared CI runtime artifacts across supported Node lines.\n\nCo-authored-by: Y0UW1SH <29498139+Y0UW1SH@users.noreply.github.com>\nAssisted-by: Kogasa (gensokyo-skills:kogasa-surprise-testing)", - "parents": [ - "916ac97bf9f7b976982e438ceb856a9692576cb1" - ], + "parents": ["916ac97bf9f7b976982e438ceb856a9692576cb1"], "authors": [ { "name": "Ysopwnable", @@ -7529,17 +6513,13 @@ } } ], - "pullRequests": [ - 2271 - ] + "pullRequests": [2271] }, { "sha": "0043d9b134c0a353e8bf85c0bde4492275f1f720", "subject": "fix(browser): report mismatched event family selection as unknown in capture comparison (#2239)", "body": "fix(browser): report mismatched event family selection as unknown in capture comparison (#2239)\n\n* fix(browser): report mismatched event family selection as unknown in capture comparison\n\n* fix(browser): retain selected event families and unknown coverage\n\nFold the complementary implementation from #2253 into the earlier #2239 proposal, retaining the original contribution history.\n\nCo-authored-by: itsF4LCON <107556180+itsF4LCON@users.noreply.github.com>\n\n---------\n\nCo-authored-by: LouisChen <3361008+chqcjq@users.noreply.github.com>\nCo-authored-by: morluto <76467478+morluto@users.noreply.github.com>\nCo-authored-by: itsF4LCON <107556180+itsF4LCON@users.noreply.github.com>", - "parents": [ - "aeee5074d124414239b6dd440dc79c26bcbd58a4" - ], + "parents": ["aeee5074d124414239b6dd440dc79c26bcbd58a4"], "authors": [ { "name": "LouisChen", @@ -7574,17 +6554,13 @@ } } ], - "pullRequests": [ - 2239 - ] + "pullRequests": [2239] }, { "sha": "e20994a8ea10609d420e958bd8a1268b0bcd8899", "subject": "fix(ghidra): keep JVM warnings out of LaunchSupport output (#1698)", "body": "fix(ghidra): keep JVM warnings out of LaunchSupport output (#1698)\n\n* fix(ghidra): keep JVM warnings out of LaunchSupport output\n\nCo-Authored-By: Claude Opus 5.5 \n\n* fix(ghidra): retain LaunchSupport warnings in session diagnostics\n\n* fix(ghidra): select helper logging flags by observed JVM identity\n\n* fix(ghidra): preserve diagnostics through typed failure projection\n\n---------\n\nCo-authored-by: Claude Opus 5.5 \nCo-authored-by: morluto <76467478+morluto@users.noreply.github.com>", - "parents": [ - "0043d9b134c0a353e8bf85c0bde4492275f1f720" - ], + "parents": ["0043d9b134c0a353e8bf85c0bde4492275f1f720"], "authors": [ { "name": "Petru101", @@ -7611,17 +6587,13 @@ } } ], - "pullRequests": [ - 1698 - ] + "pullRequests": [1698] }, { "sha": "0365454a573eb52c7089320fd74bfd4a673b78ae", "subject": "docs(agents): require brittleness review before resolving threads", "body": "docs(agents): require brittleness review before resolving threads\n", - "parents": [ - "e20994a8ea10609d420e958bd8a1268b0bcd8899" - ], + "parents": ["e20994a8ea10609d420e958bd8a1268b0bcd8899"], "authors": [ { "name": "morluto", @@ -7638,9 +6610,7 @@ "sha": "bb266226707135ad9f181e6c3afd6af0ef62fb22", "subject": "fix(cli): retain correction details across adjacent browser commands (#2294)", "body": "fix(cli): retain correction details across adjacent browser commands (#2294)\n\n* fix(cli): retain correction details across browser commands\n\nFold the complementary implementation from #2247 into the earlier #2230 proposal, retaining the original contribution history.\n\nCo-authored-by: LouisChen <3361008+chqcjq@users.noreply.github.com>\n\n* fix(browser): retain diagnostics from the selected input branch\n\n* fix(cli): recognize incomplete browser scenarios by their owned fields\n\n---------\n\nCo-authored-by: LouisChen <3361008+chqcjq@users.noreply.github.com>", - "parents": [ - "0365454a573eb52c7089320fd74bfd4a673b78ae" - ], + "parents": ["0365454a573eb52c7089320fd74bfd4a673b78ae"], "authors": [ { "name": "morluto", @@ -7659,17 +6629,13 @@ } } ], - "pullRequests": [ - 2294 - ] + "pullRequests": [2294] }, { "sha": "f76163c2467db623f9de0bda757c9d8610ca9565", "subject": "feat(evm): add retained interface summary delivery (#2308)", "body": "feat(evm): add retained interface summary delivery (#2308)\n\nAdd opt-in EVM MCP summary delivery and retained/portable function and text views. Keep existing complete defaults, provider arguments and original full Evidence identities and records usable. Require retention before selected analysis; preserve inferred candidates, nulls, diagnostics, provenance and explicit unknowns.\n\nVerify old schemas, historical Evidence migration, 64 focused feature checks, 30 affected MCP checks after latest-main rebase, 59 real EVM CLI/MCP cases and six shared-domain artifact workflows. Repeated SDK delivery is smaller; all real model trials and mixed token/time outcomes, limitation failures and resource qualification gaps remain documented without a uniform performance claim.\n\nRefs #2016\n\nCo-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>", - "parents": [ - "bb266226707135ad9f181e6c3afd6af0ef62fb22" - ], + "parents": ["bb266226707135ad9f181e6c3afd6af0ef62fb22"], "authors": [ { "name": "Ysopwnable", @@ -7688,17 +6654,13 @@ } } ], - "pullRequests": [ - 2308 - ] + "pullRequests": [2308] }, { "sha": "d1aaeee400e0d9911d5c53339ca3ac42dccbbba3", "subject": "feat(ida): support optional native IDA Free MCP in attached mode (#1544)", "body": "feat(ida): support optional native IDA Free MCP in attached mode (#1544)\n\nAdd an explicit attached native IDA MCP compatibility profile while preserving the legacy and headless workflows. Keep recorded input identity, complete source observations and the user's open GUI database. Batch unique callee lookups, conservatively prefilter literal strings, preserve Unicode matching and unavailable caller coverage, and require distinct-function switching in native verification.\n\nVerified with Windows IDA Pro 9.3 and the native MCP plugin built from c9d15d98e8a143fc74f6e14037c48f63889b6d6c with a loopback listener. Production CLI/MCP and an unchanged Windows whoami.exe passed. Windows IDA Free was not used. No personal paths or license registration information are included.\n\nValidation: 200 focused tests, static and documentation checks, architecture guards and discovery passed. Historical same-main warm task measurements improved from 675 to 317 ms; response token estimates fell from 16618 to 11509. Fresh-start, overall CPU and memory improvement were not established. Detailed scope is in experiments/analysis-efficiency/ida-native-windows.md.\n\nCo-authored-by: imissapixel <140405963+imissapixel@users.noreply.github.com>\nCo-authored-by: morluto <76467478+morluto@users.noreply.github.com>\nCo-authored-by: N0zoM1z0 <161784452+N0zoM1z0@users.noreply.github.com>", - "parents": [ - "f76163c2467db623f9de0bda757c9d8610ca9565" - ], + "parents": ["f76163c2467db623f9de0bda757c9d8610ca9565"], "authors": [ { "name": "Fernando Pereira", @@ -7725,17 +6687,13 @@ } } ], - "pullRequests": [ - 1544 - ] + "pullRequests": [1544] }, { "sha": "a97b713f740932339a5f1036ad2213168c421270", "subject": "test(mcp): fix three MCP boundary suites on native Windows (#2312)", "body": "test(mcp): fix three MCP boundary suites on native Windows (#2312)\n\n* test(mcp): fix three MCP boundary suites on native Windows\n\n* test(mcp): report unavailable root symlink coverage as a skip\n\n---------\n\nCo-authored-by: morluto <76467478+morluto@users.noreply.github.com>", - "parents": [ - "d1aaeee400e0d9911d5c53339ca3ac42dccbbba3" - ], + "parents": ["d1aaeee400e0d9911d5c53339ca3ac42dccbbba3"], "authors": [ { "name": "pablodiazjorge", @@ -7754,17 +6712,13 @@ } } ], - "pullRequests": [ - 2312 - ] + "pullRequests": [2312] }, { "sha": "b123b2e51cc7d6d2157525664be2df88fb1ba3bd", "subject": "perf(evidence): authenticate and seal imported bundles in one pass", "body": "perf(evidence): authenticate and seal imported bundles in one pass\n\nReuse the immutable domain parser at the file boundary instead of rebuilding and revalidating an already authenticated bundle. Existing filesystem and integrity regressions pass (27 tests); a 4 MiB parsing probe preserves immutable output and reduces repeated validation work.\n", - "parents": [ - "a97b713f740932339a5f1036ad2213168c421270" - ], + "parents": ["a97b713f740932339a5f1036ad2213168c421270"], "authors": [ { "name": "morluto", @@ -7781,9 +6735,7 @@ "sha": "cecc6ecbffe84689a173d1634f342e046b0c8ceb", "subject": "fix(process): preserve invalid runtime path selections as input errors", "body": "fix(process): preserve invalid runtime path selections as input errors\n\nClassify unresolvable and unusable executable or working-directory selections before launch, retaining field paths, attempted candidates and OS diagnostics. Preserve tagged analysis errors through capture lifecycle handling. Replace duplicate missing-path source assertions with public CLI/MCP regression coverage and retain distinct permission, file-kind and PATH checks.\n", - "parents": [ - "b123b2e51cc7d6d2157525664be2df88fb1ba3bd" - ], + "parents": ["b123b2e51cc7d6d2157525664be2df88fb1ba3bd"], "authors": [ { "name": "morluto", @@ -7800,9 +6752,7 @@ "sha": "23971376158e7815edcbe6c04a8df7c9504650dc", "subject": "fix(setup): honor config roots and display terminal dry-run plans", "body": "fix(setup): honor config roots and display terminal dry-run plans\n\nNormalize empty XDG config homes once for configuration writers and registration readers. Render the resolved plan for terminal dry runs while preserving structured output. Cover registration placement and a real PTY dry run, including absence of configuration writes.\n", - "parents": [ - "cecc6ecbffe84689a173d1634f342e046b0c8ceb" - ], + "parents": ["cecc6ecbffe84689a173d1634f342e046b0c8ceb"], "authors": [ { "name": "morluto", @@ -7819,9 +6769,7 @@ "sha": "02cedc37961a5d230b134f330c148322cd04bf37", "subject": "fix(readiness): validate stage evidence references once", "body": "fix(readiness): validate stage evidence references once\n\nCollect stage and check references at their owning stage boundary before evaluating required checks. Emit one missing-reference finding per stage and Evidence ID, including stages with no supplied checks, while preserving independent failed checks and cross-stage identity. The 21 readiness tests pass.\n", - "parents": [ - "23971376158e7815edcbe6c04a8df7c9504650dc" - ], + "parents": ["23971376158e7815edcbe6c04a8df7c9504650dc"], "authors": [ { "name": "morluto", @@ -7838,9 +6786,7 @@ "sha": "221c85648108e9846d9920b0964dafa7f108d581", "subject": "fix(browser): preserve attached service-worker policies and ownership", "body": "fix(browser): preserve attached service-worker policies and ownership\n", - "parents": [ - "02cedc37961a5d230b134f330c148322cd04bf37" - ], + "parents": ["02cedc37961a5d230b134f330c148322cd04bf37"], "authors": [ { "name": "morluto", @@ -7857,9 +6803,7 @@ "sha": "570c40cde55d31e455ef9bc484b7b908658ded58", "subject": "fix(cli): preserve failure semantics across full-output formats", "body": "fix(cli): preserve failure semantics across full-output formats\n", - "parents": [ - "221c85648108e9846d9920b0964dafa7f108d581" - ], + "parents": ["221c85648108e9846d9920b0964dafa7f108d581"], "authors": [ { "name": "morluto", @@ -7876,9 +6820,7 @@ "sha": "f611d8ce722cd36345e9ff83b9669ef2e7fe57a9", "subject": "feat(captures): inspect recorded packets with bounded TShark delivery (#2318)", "body": "feat(captures): inspect recorded packets with bounded TShark delivery (#2318)\n\nInspect selected fields in existing captures through shared CLI/MCP Evidence.\nPage matching frames without changing dissection or two-pass read coverage;\nretain failed descriptor/process cleanup ownership and reject excess admission.\n\nVerified with real TShark 4.0.17 and 4.2.2, public Wireshark recordings,\nowned HTTP application traffic, real CLI/MCP workflows and schema checks.\n\nCo-authored-by: Olorinm <59321404+Olorinm@users.noreply.github.com>\nAssisted-by: Kogasa (gensokyo-skills:kogasa-surprise-testing)", - "parents": [ - "570c40cde55d31e455ef9bc484b7b908658ded58" - ], + "parents": ["570c40cde55d31e455ef9bc484b7b908658ded58"], "authors": [ { "name": "Ysopwnable", @@ -7897,17 +6839,13 @@ } } ], - "pullRequests": [ - 2318 - ] + "pullRequests": [2318] }, { "sha": "c9fed50691ae014890e91a72534773d2fb58ce44", "subject": "fix(targets): recognize Windows headers after short DOS stubs", "body": "fix(targets): recognize Windows headers after short DOS stubs\n\nObserve MZ header declarations and signature uncertainty at the domain boundary, then reuse those facts in bounded target resolution, inventory, and Go PE parsing. Preserve DOS relocation ownership and fail closed when the relevant bytes remain unexamined.\n\nValidation: 59 domain tests, 130 target/Go boundary tests, and public CLI inspection of a clang/lld-link PE DLL with a short DOS header. Fixes #2172.\n", - "parents": [ - "f611d8ce722cd36345e9ff83b9669ef2e7fe57a9" - ], + "parents": ["f611d8ce722cd36345e9ff83b9669ef2e7fe57a9"], "authors": [ { "name": "morluto", @@ -7924,9 +6862,7 @@ "sha": "7fb097d72c9931dd5dfae481ad2b9d3bb6029f15", "subject": "fix(go): accept file-backed unmapped Mach-O debug segments", "body": "fix(go): accept file-backed unmapped Mach-O debug segments\n\nValidate unmapped segment file ranges without adding virtual mappings or fallback metadata addresses. Keep mapped-segment bounds and reject build-info sections declared in unmapped segments.\n\nValidation: real unstripped Go 1.26.5 Darwin arm64 and amd64 artifacts passed CLI/MCP oracle, Evidence, source-range and unchanged-byte checks. Retained malformed-input regressions; removed the weaker synthetic acceptance test. Full cross-platform verifier not run. Fixes #2167.\n", - "parents": [ - "c9fed50691ae014890e91a72534773d2fb58ce44" - ], + "parents": ["c9fed50691ae014890e91a72534773d2fb58ce44"], "authors": [ { "name": "morluto", @@ -7943,9 +6879,7 @@ "sha": "8d4d631606c701aac150cf009d3b80ae4a7ae7d5", "subject": "fix(apple): decode UIKit keyed-archive outlet connections", "body": "fix(apple): decode UIKit keyed-archive outlet connections\n\nSelect authoritative connection fields by runtime class in a shared owner used by keyed archives and NIBArchive projection. Preserve archive identities, endpoint relationships and coverage, and replace duplicate synthetic outlet assertions with a rooted public CLI fixture.\n\nValidation: compiled CLI acceptance against the issue-sourced rooted UIKit fixture and 41 filesystem tests. Native UIKit framework validation was not rerun. Fixes #2177.\n", - "parents": [ - "7fb097d72c9931dd5dfae481ad2b9d3bb6029f15" - ], + "parents": ["7fb097d72c9931dd5dfae481ad2b9d3bb6029f15"], "authors": [ { "name": "morluto", @@ -7962,9 +6896,7 @@ "sha": "ed485a3dc8cc3a4baf8cabe01acb7aa0490b73b3", "subject": "fix(artifacts): compare leaf inventories using explicit coverage", "body": "fix(artifacts): compare leaf inventories using explicit coverage\n\nClassify coverage once at inventory production and require it in current outputs. Normalize older retained Evidence at the inventory parser, reject inconsistent page statuses, and remove comparison heuristics over limitation prose.\n\nValidation: public CLI-to-MCP plist comparison, changed-behavior and unknowns workflow; boundary checks for legacy Evidence, partial coverage, page disagreement, content and executable changes; generated docs checks. Fixes #2173.\n", - "parents": [ - "8d4d631606c701aac150cf009d3b80ae4a7ae7d5" - ], + "parents": ["8d4d631606c701aac150cf009d3b80ae4a7ae7d5"], "authors": [ { "name": "morluto", @@ -7981,9 +6913,7 @@ "sha": "1c37914306b3ff257d7a0360f11c9bf2a3f2cac7", "subject": "fix(javascript): retain wrapped isolated-world bridge exposures", "body": "fix(javascript): retain wrapped isolated-world bridge exposures\n\nShare contextBridge argument ownership between direct and wrapped analysis, seed intact isolated-world calls, and preserve dynamic world IDs and conditional metadata as unknown. Keep callee evaluation scoped to each invocation.\n\nValidation: 99 focused source tests and bundled isolated-world acceptance through dedicated and generic CLI routes. Removed duplicate literal source regression in favor of public workflow coverage. Fixes #2174.\n", - "parents": [ - "ed485a3dc8cc3a4baf8cabe01acb7aa0490b73b3" - ], + "parents": ["ed485a3dc8cc3a4baf8cabe01acb7aa0490b73b3"], "authors": [ { "name": "morluto", @@ -8000,9 +6930,7 @@ "sha": "c339f9ebe7bd1f30608d6ccb7175da523dd3c485", "subject": "fix(setup): ignore empty home directory selections", "body": "fix(setup): ignore empty home directory selections\n\nSkip empty home environment values while preserving nonempty caller selections and platform precedence. Setup, doctor, and uninstall now use the same fallback home instead of writing relative paths in the current directory.\n\nValidation: focused home tests and the public setup/doctor/uninstall lifecycle under Node 24.18. Package verification and pack dry run are included in the integrated gate.\n\nFixes #2325\n", - "parents": [ - "1c37914306b3ff257d7a0360f11c9bf2a3f2cac7" - ], + "parents": ["1c37914306b3ff257d7a0360f11c9bf2a3f2cac7"], "authors": [ { "name": "morluto", @@ -8019,9 +6947,7 @@ "sha": "921bb9575505065f6cfd57b14d97d80d0f238546", "subject": "fix(artifacts): distinguish Java classes from universal Mach-O", "body": "fix(artifacts): distinguish Java classes from universal Mach-O\n\nClassify FAT containers using shared architecture, range, and observed slice-header facts rather than the CAFEBABE signature alone. Preserve typed unsupported and malformed reasons, reject malformed sibling slices consistently, and remove repeated range parsing in consumers.\n\nValidation: valid small and large JVM classes in public JAR/ZIP inspection, four FAT width/byte-order controls, and focused executable/Mach-O boundary tests. The class fixtures were checked with JDK javap; no new JVM analysis capability is advertised.\n\nThe Apple selection and Hopper readers retain their existing parsing because they also own oversized-count diagnostics, reserved fields, streaming final-size validation, or source freshness that the shared header result does not represent.\n\nRepresentative public mixed-ZIP inventory probe, four fresh processes with an already warm filesystem cache: first process elapsed 626.8 -> 548.3 ms, CPU 740 -> 740 ms, sampled family peak RSS 375.5 -> 345.4 MiB. Subsequent three-process medians: elapsed 767.2 -> 454.0 ms, CPU 890 -> 640 ms, peak RSS 368.7 -> 346.2 MiB. Estimated output tokens 2310 -> 2292. Concurrent load was uncontrolled, so these observations do not establish a speed improvement. Whole-agent task tokens and schema/call overhead were not measured.\n\nFixes #2317\n", - "parents": [ - "c339f9ebe7bd1f30608d6ccb7175da523dd3c485" - ], + "parents": ["c339f9ebe7bd1f30608d6ccb7175da523dd3c485"], "authors": [ { "name": "morluto", @@ -8038,9 +6964,7 @@ "sha": "5ab0cbb48ea5a4f11542eac44479b9af48f1dabd", "subject": "fix(javascript): resolve bundled exports by binding identity", "body": "fix(javascript): resolve bundled exports by binding identity\n\nIdentify the factory exports parameter through the existing semantic binding owner, including renamed and minified Webpack parameters. Reject nested targets, bare alias rebinding, and shadowed identifiers. Prune the duplicated source happy path after validating the public CLI workflow.\n\nValidation: public analyze-javascript-application CLI acceptance and focused semantic traversal/module-index tests.\n\nFixes #2171\n", - "parents": [ - "921bb9575505065f6cfd57b14d97d80d0f238546" - ], + "parents": ["921bb9575505065f6cfd57b14d97d80d0f238546"], "authors": [ { "name": "morluto", @@ -8057,9 +6981,7 @@ "sha": "c89972c8777d0114566fe76a060849a18bdd2659", "subject": "fix(adb): evaluate the full activity start report", "body": "fix(adb): evaluate the full activity start report\n\nEvaluate stdout and stderr together, giving hard errors and non-ok wait statuses precedence over an attempted Starting line. Retain raw streams and typed partial launch facts when Activity Manager refuses or times out; retain successful raw output too.\n\nValidation: parser/provider tests and public MCP app/activity starts through a fake executable at the real process boundary. Real Android device behavior was not verified; device-reported timeout remains distinct from a host deadline.\n\nFixes #2225\n", - "parents": [ - "5ab0cbb48ea5a4f11542eac44479b9af48f1dabd" - ], + "parents": ["5ab0cbb48ea5a4f11542eac44479b9af48f1dabd"], "authors": [ { "name": "morluto", @@ -8076,9 +6998,7 @@ "sha": "049132ab43fa962d31774f2b258c15a71217148b", "subject": "fix(evidence): preserve call coverage in function comparisons", "body": "fix(evidence): preserve call coverage in function comparisons\n\nTreat missing, partial, unknown, and unresolved call coverage as insufficient for call-set equality. Combine IDA caller/callee coverage without losing either explanation and recheck source coverage when verifying historical comparisons.\n\nScope generated function-comparison unknowns with optional typed comparison/dimension facts, preserving legacy IDs and revision digests when absent. Keep unrelated dimensions conclusive, explicit dependencies applicable, and ambiguous function identity unknown. A confirmed change for matched functions remains a failure even if calls are incomplete.\n\nValidation: function/reconstruction/residual-unknown and bundle tests, recorded IDA protocol regression, public MCP comparison/verification, and advertised SDK JSON Schema checks. Real IDA provider execution was not verified.\n\nFixes #2222\n", - "parents": [ - "c89972c8777d0114566fe76a060849a18bdd2659" - ], + "parents": ["c89972c8777d0114566fe76a060849a18bdd2659"], "authors": [ { "name": "morluto", @@ -8095,9 +7015,7 @@ "sha": "b7169c8b747cbc032913b31f008a3b81c77b6219", "subject": "fix(electron): attribute unresolved paths to selected inputs", "body": "fix(electron): attribute unresolved paths to selected inputs\n\nResolve each caller-selected Electron path once at the application boundary, collect field-specific failures with original causes, and pass canonical paths directly to the provider. Update direct provider consumers and route the real verifier through the shared application workflow.\n\nValidation: public CLI/MCP invalid-path acceptance, canonicalization boundary, provider tests, and cancellation/cleanup checks. Live Electron launch was not verified. This does not address the separate Playwright launch-rejection crash in #2269.\n\nFixes #2272\n", - "parents": [ - "049132ab43fa962d31774f2b258c15a71217148b" - ], + "parents": ["049132ab43fa962d31774f2b258c15a71217148b"], "authors": [ { "name": "morluto", @@ -8114,9 +7032,7 @@ "sha": "fd9588089d089e7cb02d12178e34407d6f889f22", "subject": "fix(dev): preserve command arguments in exclusive runners", "body": "fix(dev): preserve command arguments in exclusive runners\n\nUse the existing pinned cross-spawn dependency at the command-spawn boundary instead of forcing every Windows executable and argument vector through cmd.exe. Preserve native executable arguments while retaining PATH/PATHEXT and command-shim support.\n\nValidation: public runner argv and lock/cancellation tests passed on POSIX. Windows-only tests cover an executable path with spaces, bare node, npm, and the local turbo shim; native Windows execution remains unverified.\n\nFixes #2319\n", - "parents": [ - "b7169c8b747cbc032913b31f008a3b81c77b6219" - ], + "parents": ["b7169c8b747cbc032913b31f008a3b81c77b6219"], "authors": [ { "name": "morluto", @@ -8133,9 +7049,7 @@ "sha": "ac57c88efe64c3125850b54d3d833227e6b8ec51", "subject": "fix(formats): preserve high bits in Windows signature checks", "body": "fix(formats): preserve high bits in Windows signature checks\n\nDecode MZ and Windows signature bytes without ASCII high-bit masking. Move malformed signature cases into the shared Go diagnostics fixtures so provider, compiled CLI, and MCP workflows cover NE, LE, LX, and PE lookalikes; remove the superseded provider-only cases.\n\nValidation: runtime build, check:ci, and focused DOS/Go/target/CLI/MCP tests. Windows-only reference-import cases await CI.\n", - "parents": [ - "fd9588089d089e7cb02d12178e34407d6f889f22" - ], + "parents": ["fd9588089d089e7cb02d12178e34407d6f889f22"], "authors": [ { "name": "morluto", @@ -8152,9 +7066,7 @@ "sha": "8224aeba9dd41f29ea6f8ef7ad7efa3f45fd4a6e", "subject": "test(cli): align reference import failure envelopes", "body": "test(cli): align reference import failure envelopes\n\nExpect ok:false and the preserved error payload in full-output mode, including Windows unsupported-host failures. Retain plain JSON, selected-path, remediation, permission, logging, and source-preservation coverage.\n\nValidation: focused compiled CLI output and reference-import tests; Windows-only cases await CI.\n", - "parents": [ - "ac57c88efe64c3125850b54d3d833227e6b8ec51" - ], + "parents": ["ac57c88efe64c3125850b54d3d833227e6b8ec51"], "authors": [ { "name": "morluto", @@ -8171,9 +7083,7 @@ "sha": "4dd44ddf16c810c4bcaa16e0bdb3b09bfcb4e33a", "subject": "test(ida): expect direction in combined call coverage", "body": "test(ida): expect direction in combined call coverage\n\nKeep the ARM64 dossier boundary assertion aligned with caller/callee coverage ownership while preserving unknown coverage, diagnostics, and observed callee assertions.\n\nValidation: recorded IDA protocol and callee relationship boundary tests (22 passed). Live IDA was not exercised.\n", - "parents": [ - "8224aeba9dd41f29ea6f8ef7ad7efa3f45fd4a6e" - ], + "parents": ["8224aeba9dd41f29ea6f8ef7ad7efa3f45fd4a6e"], "authors": [ { "name": "morluto", @@ -8190,9 +7100,7 @@ "sha": "3ee6ff43c1696a5a5269bd4aa5de72f7e5f40627", "subject": "test(mcp): preserve coverage in unchanged function fixtures", "body": "test(mcp): preserve coverage in unchanged function fixtures\n\nCarry the source relationship coverage into the synthetic counterpart used by public function comparison and reconstruction verification. Keep missing coverage unresolved rather than weakening comparison completeness.\n", - "parents": [ - "4dd44ddf16c810c4bcaa16e0bdb3b09bfcb4e33a" - ], + "parents": ["4dd44ddf16c810c4bcaa16e0bdb3b09bfcb4e33a"], "authors": [ { "name": "morluto", @@ -8209,9 +7117,7 @@ "sha": "7b15762d09acf3d4ffb937f55ec1b54e7db5fbfa", "subject": "fix(reference): report sloppy scripts, PHP, C# and enclosing Git facts (#1770)", "body": "fix(reference): report sloppy scripts, PHP, C# and enclosing Git facts (#1770)\n\n* fix(reference): report sloppy scripts, PHP, C# and enclosing Git facts\n\nImporting the source/ subtree of a legacy PHP and C# checkout produced\nfour wrong or missing facts:\n\n- Babel's unambiguous mode parses a module first and keeps its\n strict-mode recovery errors after falling back to a script, so a valid\n sloppy-mode `delete messages;` was reported as a parse failure and the\n semantic IR marked the file as parser-recovered. Parsing now goes\n through one owner that re-parses such a script as a script.\n- .php and .cs files had no language; they are now detected as PHP and\n C# (detection only, no parsing).\n- A root without its own .git was reported as having no version\n control even inside a checkout. The adapter now resolves the nearest\n enclosing repository, as Git does, and reports `none` only when no\n ancestor has one.\n- The CLI recorded importer_version as null although the package\n version is known.\n\n* fix(reference): keep module strictness and classify C# and PHP as source\n\nReview follow-up. `.mjs` and `.mts` files are modules by extension, but\nthe script fallback re-parsed them in sloppy mode and erased real\nstrict-mode errors. The parser boundary now owns the extension rule,\nparses explicit modules as modules and applies the fallback only when\nthe mode is ambiguous; the require-binding analysis uses the same rule.\n\n`.cs` and `.php` received a language but stayed classified as unknown,\nso source-to-bundle comparison dropped them. Both are now source\nextensions, like the other detected languages.\n\n* fix(reference): honor package module scope and keep unknown-mode strict errors\n\nReview follow-up. A `.js` file under a package.json with `\"type\":\n\"module\"` is an ES module, but it went through the script fallback that\nerases strict-mode errors. The import now reads each in-inventory\npackage.json and parses `.js` files in a module scope as modules. Other\n`.js` and `.ts` sources keep an unknown mode, because bundlers treat them\nas modules without that field: they are no longer forced to script, and\nerrors that only the module parse reports are kept as an entry limitation.\n\n* fix(reference): bound package scopes and keep application parsing unchanged\n\nReview follow-up.\n- `.cjs` files parse as scripts, so module-only strict errors no longer\n become limitations on CommonJS trees. `.cts` keeps an unknown mode\n because TypeScript compiles ES import syntax there.\n- An unreadable or linked package.json now bounds the module scope with\n an unknown type instead of letting an outer `\"type\": \"module\"` apply.\n- The application pipeline parses as on main again. Its module-only\n strict errors keep a source partial; package-mode handling stays in the\n reference importer.\n\n* refactor(reference): keep unmarked module modes unknown instead of resolving package scope\n\nReview follow-up. Resolving Node package scope for `.js` kept pulling in\nmore of Node's lookup semantics (require bindings, excluded or\ndirectory-named manifests). Only extensions now select a mode: `.mjs`\nand `.mts` parse as modules and `.cjs` as scripts. Every other source\nkeeps an unknown mode, so module-only strict errors stay visible as an\nentry limitation instead of being dropped or asserted. This matches the\nrequire-binding analysis, which also treats unmarked paths as unknown.", - "parents": [ - "3ee6ff43c1696a5a5269bd4aa5de72f7e5f40627" - ], + "parents": ["3ee6ff43c1696a5a5269bd4aa5de72f7e5f40627"], "authors": [ { "name": "Martin Klein", @@ -8222,17 +7128,13 @@ } } ], - "pullRequests": [ - 1770 - ] + "pullRequests": [1770] }, { "sha": "ea2f94d4de2241306158fecdd75f96cd34566694", "subject": "fix(wasm): stop appending WABT remediation to unrelated runtime-root failures (#2084)", "body": "fix(wasm): stop appending WABT remediation to unrelated runtime-root failures (#2084)\n\ninspect_wasm_artifact's configuration-phase error handler assumed every\nnon-OwnedCommandFailure thrown before the artifact phase was about WABT\ntool/directory resolution, and unconditionally appended \"Supply WABT 1.0.42\nvia absolute REA_WABT_BIN_DIRECTORY; REA does not install tools.\" to the\nreason. WabtArtifactProvider.inspect() also allocates its PrivateRuntimeRoot\nduring the configuration phase, so a PrivateRuntimeRootUnavailableError (the\nWindows native-authority capability, unrelated to WABT) got the same false\nremediation glued onto its own already-correct message, misdirecting anyone\ntroubleshooting a correctly-configured WABT install toward re-checking WABT\ninstead of the real blocker.\n\nClassify PrivateRuntimeRootUnavailableError before the generic\nconfiguration-phase branch, matching the existing convention already used\nin JavaScriptAnalysisWorker.ts and SourceMapCommand.ts: surface it as its\nown AnalysisCapabilityUnavailableError with no userMessage override, letting\nits own message stand.\n\nVerified against a real WABT 1.0.42 Windows release (hash-checked against\nGitHub release metadata) and a real compiled .wasm module: before the fix,\n`reason` read \"REA Windows native controls are unavailable: ENOENT: ...\nSupply WABT 1.0.42 ...\" even with a fully correct REA_WABT_BIN_DIRECTORY;\nafter, `reason` reports only the real cause.", - "parents": [ - "7b15762d09acf3d4ffb937f55ec1b54e7db5fbfa" - ], + "parents": ["7b15762d09acf3d4ffb937f55ec1b54e7db5fbfa"], "authors": [ { "name": "Hill Patel", @@ -8243,17 +7145,13 @@ } } ], - "pullRequests": [ - 2084 - ] + "pullRequests": [2084] }, { "sha": "5f79c852af8e53a56f58266a9dcf84314c197164", "subject": "docs(ghidra): verified macOS arm64 native decompiler build recipe (#2112)", "body": "docs(ghidra): verified macOS arm64 native decompiler build recipe (#2112)\n\ndocs(ghidra): verify and document the macOS arm64 native decompiler build\n\nCo-authored-by: hub ", - "parents": [ - "ea2f94d4de2241306158fecdd75f96cd34566694" - ], + "parents": ["ea2f94d4de2241306158fecdd75f96cd34566694"], "authors": [ { "name": "nKOxxx", @@ -8269,17 +7167,13 @@ "user": null } ], - "pullRequests": [ - 2112 - ] + "pullRequests": [2112] }, { "sha": "91b8f587cd495c509946e69076525eb19dc1ca65", "subject": "feat(signals): decode recordings with bounded sigrok output (#2339)", "body": "feat(signals): decode recordings with bounded sigrok output (#2339)\n\nDecode caller-selected protocols from existing recordings through shared\nCLI/MCP Evidence. Page literal output lines after complete decoding;\npreserve explicit full output, source identity and failed cleanup ownership.\n\nVerified real sigrok-cli 0.7.2 workflows, published UART/SPI/I2C recordings,\nindependent UART values, selector limits, SDK schemas and cleanup regressions.\n\nCo-authored-by: Olorinm <59321404+Olorinm@users.noreply.github.com>\nAssisted-by: Kogasa (gensokyo-skills:kogasa-surprise-testing)", - "parents": [ - "5f79c852af8e53a56f58266a9dcf84314c197164" - ], + "parents": ["5f79c852af8e53a56f58266a9dcf84314c197164"], "authors": [ { "name": "Ysopwnable", @@ -8298,17 +7192,13 @@ } } ], - "pullRequests": [ - 2339 - ] + "pullRequests": [2339] }, { "sha": "6ce5903e7a37252156ec847c4c8874410a4d8f3f", "subject": "test(javascript): verify CommonJS file URL boundaries via CLI and MCP (#2061)", "body": "test(javascript): verify CommonJS file URL boundaries via CLI and MCP (#2061)\n\n* fix(javascript): keep CommonJS file URL strings unresolved\n\n* test(mcp): align completion checks with warm provider state\n\n* test(javascript): remove superseded file URL resolver coverage\n\n---------\n\nCo-authored-by: hhang <169027046+xu91102@users.noreply.github.com>", - "parents": [ - "91b8f587cd495c509946e69076525eb19dc1ca65" - ], + "parents": ["91b8f587cd495c509946e69076525eb19dc1ca65"], "authors": [ { "name": "hhang", @@ -8327,17 +7217,13 @@ } } ], - "pullRequests": [ - 2061 - ] + "pullRequests": [2061] }, { "sha": "86fab11fbe000a04c0810699419e99e50476e424", "subject": "fix(javascript): preserve import-equals declaration and export evidence (#2062)", "body": "fix(javascript): preserve import-equals declaration and export evidence (#2062)\n\n* fix(javascript): retain TypeScript import-equals dependencies\n\n* test(mcp): align completion checks with warm provider state\n\n* fix(javascript): propagate require origins through exported aliases\n\n* fix(javascript): normalize equivalent CTS binding origins\n\n---------\n\nCo-authored-by: hhang <169027046+xu91102@users.noreply.github.com>", - "parents": [ - "6ce5903e7a37252156ec847c4c8874410a4d8f3f" - ], + "parents": ["6ce5903e7a37252156ec847c4c8874410a4d8f3f"], "authors": [ { "name": "hhang", @@ -8356,17 +7242,13 @@ } } ], - "pullRequests": [ - 2062 - ] + "pullRequests": [2062] }, { "sha": "d59ab6d977d5b9376af2fdd141b4f65460bb9a9f", "subject": "fix(javascript): bound value evaluation through nested closure aliases (#1941)", "body": "fix(javascript): bound value evaluation through nested closure aliases (#1941)\n\n* fix(javascript): bound value evaluation through nested closure aliases\n\nA closure that aliases a binding from its enclosing scope evaluates that\nbinding once live and once at its own capture point. The capture cannot\norder a binding declared in another function, so it fell back to a second\nlive evaluation. Only primitive results were kept, so every level of\nnesting doubled the work: 20 nested closures over a non-constant value\ntook about 14 s, and a 443 KB generated wrapper reached the 300 s\nanalysis timeout.\n\nKeep a live binding value when no caller could change it: no alias cycle\ncloses on or above the binding and the expression depth budget was not\nreached. Bindings on a cycle are still re-evaluated, so their values and\nreasons are unchanged.\n\nFound while building a source-owned reproduction for #1847; that report's\nworker heap exhaustion is a separate, already closed defect.\n\n* fix(javascript): keep the expression depth budget for retained values\n\nReusing a retained composite value from any depth let a chain of wrappers\n(s1 = {x: s0}, s2 = {x: s1}, ...) nest past the expression depth budget:\n300 wrappers produced a 299-level value where the budget stops at 86, the\nserialized IR grew quadratically, and 3,000 wrappers overflowed the stack\nin JSON.stringify.\n\nRecord the expression depth at which each caller-independent value was\nderived and reuse it only at that depth or shallower. A deeper reader\nderives the value again and reaches the budget exactly as before. Closure\naliases read their outer binding at one depth on both paths, so nested\nclosures stay linear.", - "parents": [ - "86fab11fbe000a04c0810699419e99e50476e424" - ], + "parents": ["86fab11fbe000a04c0810699419e99e50476e424"], "authors": [ { "name": "Naema Mohmed Farah", @@ -8377,17 +7259,13 @@ } } ], - "pullRequests": [ - 1941 - ] + "pullRequests": [1941] }, { "sha": "af29247a7873ba8badec204a4a59f9a2b3a880b6", "subject": "fix: honor empty URL query and fragment markers (#2091)", "body": "fix: honor empty URL query and fragment markers (#2091)\n\nURL.search and URL.hash are empty for both a missing component and an explicit empty one, so endpoint and origin checks were accepting URLs the callers meant to reject.\n\nCo-authored-by: Cursor ", - "parents": [ - "d59ab6d977d5b9376af2fdd141b4f65460bb9a9f" - ], + "parents": ["d59ab6d977d5b9376af2fdd141b4f65460bb9a9f"], "authors": [ { "name": "Faheem Ahmad", @@ -8406,17 +7284,13 @@ } } ], - "pullRequests": [ - 2091 - ] + "pullRequests": [2091] }, { "sha": "85e124253ac93dd443be6bbcee0939d525b90d4e", "subject": "feat(server): frame analysis-target content as untrusted data (#1908)", "body": "feat(server): frame analysis-target content as untrusted data (#1908)\n\n* feat(server): frame analysis-target content as untrusted data\n\nStrings, decompiled code, page text, scripts, captures and logs returned\nby REA originate from the analysed target, which can embed text aimed at\nthe agent. Nothing marked that content, so a prompt injection inside a\nbinary or page could steer the agent toward tools that run code.\n\n- Server instructions now state that target-derived tool output is data,\n never instructions, and that any request in it to run, install,\n download or send something is a prompt-injection attempt to report.\n- Tool contracts declare returnsTargetContent. It is on by default; only\n seven tools whose results hold REA session state or caller-supplied\n values (binary_session, close_binary, export_evidence_bundle,\n record_unknown, update_unknown, inspect_adb_client,\n inspect_apktool_client) are audited exceptions, so new tools start\n marked.\n- Successful results of marked tools carry\n _meta.provenance = { untrusted_content: true, source: \"analysis_target\" }.\n content and structuredContent are unchanged, and the response budget\n accounts for the fixed marker bytes.\n\nTests cover the encoding and budget accounting, the audited exception\nlist against the contract catalog, and an in-memory MCP client that sees\nthe instructions and the marker on a marked tool but not on\nbinary_session.\n\n* fix(server): mark failed target-content results as untrusted too\n\nThe untrusted provenance marker was attached only on the success branch\nof ToolResultDelivery, but failures can carry target-derived text as\nwell: error messages, captured output, and partial observations such as\nthe terminal frames a failed capture_process_scenario retains in\npartial_observation. A host gating later process or device actions on the\nmarker would have treated an adversarial error payload as trusted.\n\nEvery error path in src/server now carries the failing tool's provenance:\n- toErrorToolResult and toRecordedPartialErrorToolResult take the tool's\n target-content flag explicitly, so each caller is audited by the type\n checker; toCallToolResult, toEvidenceToolResult (recording failure), the\n response-budget error that replaces an oversized success, and the\n Electron partial-evidence path pass contract.returnsTargetContent.\n- Admission failures in runAdmittedToolOperation resolve the flag from the\n tool name through the new toolReturnsTargetContent, the same predicate\n the contract metadata uses; unknown names stay marked.\n- The transport's oversized-error replacement keeps the original's marker\n and counts it in its budget check, matching the projected error.\n- Errors the MCP SDK builds itself (input validation, thrown handlers) are\n marked in the transport for target-content tools only.\n\nError encoding accounts for the marker bytes exactly as success encoding\ndoes. docs/mcp-contracts.md now states that error results carry the\nmarker. Tests cover marked and unmarked error results, the\ncapture_process_scenario partial-observation errors in-process and over\nthe SDK transport, the recorded partial-evidence path, the budget\nreplacement, the oversized-error replacement, and SDK validation errors\nfor a marked and a content-free tool.\n\n* fix(contracts): mark session status, close and client probes as target content\n\nThe content-free exception set was audited against successful results\nonly. Now that failures carry the marker too, every exception was\nre-audited against its error paths with one question: can the result\ninclude text produced by an external process, provider or device, or\nstored content REA did not author?\n\nRemoved from TARGET_CONTENT_FREE_TOOLS:\n- close_binary: a failed provider cleanup (GhidraClient cleanup error via\n createGhidraDiagnostics) projects the launcher's captured stdout and\n stderr, which can contain target-derived log text.\n- binary_session: capability status reports runtime unavailability as the\n provider error message (ProviderAdapterError and similar), and the\n provider candidate and Android availability diagnostics include probe\n output such as the apktool stderr excerpt.\n- inspect_adb_client: the success result carries the version and\n installed path parsed from `adb version` stdout, and a failed probe\n keeps a stderr_excerpt.\n- inspect_apktool_client: the success result carries the first line of\n the launcher's `--version` output, and a failed probe keeps a\n stderr_excerpt.\n- update_unknown: the new revision carries forward the stored question\n and domain, which an imported evidence bundle can supply; list_unknowns\n and get_evidence_bundle already return that data marked.\n\nThe set now holds only export_evidence_bundle (path, byte and record\ncounts; failures are filesystem, cancellation, or a fixed integrity\nmessage) and record_unknown (the caller's input plus REA-computed ids\nand digests; registry errors project only a reason code).\n\nThe conformance test pins the reduced set and asserts each removed tool\nis marked. Tests that used binary_session as the unmarked example now use\nrecord_unknown. docs/mcp-contracts.md lists the remaining exceptions and\nwhy the removed tools stay marked.\n\n* fix(contracts): include target-content policy in the catalog identity\n\ncreateToolCatalog() and CATALOG_IDENTITY.tools projected every\nclient-visible contract field except returnsTargetContent. Because the\nuntrusted-content framing left schemas, effects, prompts, CLI names and\nthe package version unchanged, a same-version MCP process started before\nthe update digested equal to the new server and binary_session reported\nit aligned although it never emits _meta.provenance.\n\nProject the flag as returns_target_content in both the digested tool\ncatalog and CATALOG_IDENTITY.tools, and export createCatalogDigests so a\nboundary test proves that toggling the flag on one tool changes the\ntools and combined digests.", - "parents": [ - "af29247a7873ba8badec204a4a59f9a2b3a880b6" - ], + "parents": ["af29247a7873ba8badec204a4a59f9a2b3a880b6"], "authors": [ { "name": "Lluís Ariño", @@ -8427,17 +7301,13 @@ } } ], - "pullRequests": [ - 1908 - ] + "pullRequests": [1908] }, { "sha": "5c2956587a1b0d431f72e10df07a1a6363fa066c", "subject": "fix(apple): preserve slice identity and macOS boundary diagnostics (#1772)", "body": "fix(apple): preserve slice identity and macOS boundary diagnostics (#1772)\n\n* fix(artifacts): name CPU_SUBTYPE_ARM64E_X1 Mach-O slices arm64e\n\nmacOS 27 system binaries such as /bin/ls carry a third FAT slice with\ncpusubtype 0x8000000c. The SDK defines subtype 12 as\nCPU_SUBTYPE_ARM64E_X1, and CPU_SUBTYPE_HAS_ARM64E puts it in the arm64e\nfamily. architectureName knew only subtype 2, so it named the slice\narm64, lipoNameMatches rejected lipo's arm64e.x1 name, and\ninspect-artifact /bin/ls failed with integrity_mismatch.\n\nThe arm64e.x1 test fixture now uses the real subtype. It fails without\nthis change.\n\nRefs #1168, #1765\n\nCo-Authored-By: Claude Opus 5.5 \n\n* fix(artifacts): classify en-GB hdiutil verify refusals as format failures\n\nhdiutil follows AppleLanguages. With en-GB it writes \"image not\nrecognised\", and verifyFailureReason matched only the US spelling, so a\nfile that is not a disk image got the reason unavailable. Both spellings\nnow give format. Other languages still give unavailable.\n\nRefs #1765\n\nCo-Authored-By: Claude Opus 5.5 \n\n* test(process): read the full process table in the lifecycle cleanup check\n\nThe check ran ps -axo command= with the Node default maxBuffer of 1 MiB.\nOn a host with 1905 processes, the output is 1.52 MB, and the test failed\nwith \"stdout maxBuffer length exceeded\".\n\nRefs #1765\n\nCo-Authored-By: Claude Opus 5.5 \n\n* test(process): bound cleanup observations to sampled descendants\n\n* fix(apple): retain CPU subtype identity during dylib resolution\n\n* test(process): retain OS PIDs for descendant observations\n\n---------\n\nCo-authored-by: David Lee \nCo-authored-by: Claude Opus 5.5 \nCo-authored-by: morluto <76467478+morluto@users.noreply.github.com>", - "parents": [ - "85e124253ac93dd443be6bbcee0939d525b90d4e" - ], + "parents": ["85e124253ac93dd443be6bbcee0939d525b90d4e"], "authors": [ { "name": "David Lee", @@ -8469,17 +7339,13 @@ } } ], - "pullRequests": [ - 1772 - ] + "pullRequests": [1772] }, { "sha": "7bc57e1e64915a26c32f89fb53d0321193a37160", "subject": "test(apple): skip ibtool-compiled NIB tests when Xcode ibtool is unavailable (#2070)", "body": "test(apple): skip ibtool-compiled NIB tests when Xcode ibtool is unavailable (#2070)\n\nCommand Line Tools install the /usr/bin/ibtool and xcrun shims without ibtool itself, so the existing /usr/bin/ibtool existence guard never skipped the storyboard test, and the native NIB hierarchy suite had no guard. On a Command Line Tools-only macOS host these seven tests failed at fixture compilation. Probe xcrun --find ibtool once and use it for both suites.", - "parents": [ - "5c2956587a1b0d431f72e10df07a1a6363fa066c" - ], + "parents": ["5c2956587a1b0d431f72e10df07a1a6363fa066c"], "authors": [ { "name": "TonyWu", @@ -8490,17 +7356,13 @@ } } ], - "pullRequests": [ - 2070 - ] + "pullRequests": [2070] }, { "sha": "1dd20ce1ff4ab66c74350929577e753aa17a9006", "subject": "test(analysis): verify real preset snapshot and cleanup boundaries (#2349)", "body": "test(analysis): verify real preset snapshot and cleanup boundaries (#2349)\n\nVerify existing caller-selected Ghidra profiles and immutable JSON snapshot boundaries through real CLI/MCP workflows on GNU true and shipped jq. Preserve exact task facts, profile/source identity, original snapshot records and existing defaults; require actual stored query entries and scoped headless launch evidence.\n\nExercise pending startup cancellation with production token/native start-identity inspection, recovery under the selected target, controlled real permission cleanup failure, retained ownership and restored-permission close retry. Independently confirm recovered socket/root cleanup. Preserve failed observer assumptions, source fingerprints, measured scope and final-resource counter unknowns. No general fast preset, product API change or new performance claim.\n\nRefs #2016\n\nCo-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>", - "parents": [ - "7bc57e1e64915a26c32f89fb53d0321193a37160" - ], + "parents": ["7bc57e1e64915a26c32f89fb53d0321193a37160"], "authors": [ { "name": "Ysopwnable", @@ -8519,17 +7381,13 @@ } } ], - "pullRequests": [ - 2349 - ] + "pullRequests": [2349] }, { "sha": "81cca2e0e3ebd98c21f41d7ad63d6a00e4cbc3f9", "subject": "fix(analysis): expose provider image base (#2083)", "body": "fix(analysis): expose provider image base (#2083)", - "parents": [ - "1dd20ce1ff4ab66c74350929577e753aa17a9006" - ], + "parents": ["1dd20ce1ff4ab66c74350929577e753aa17a9006"], "authors": [ { "name": "The one -Niu", @@ -8540,17 +7398,13 @@ } } ], - "pullRequests": [ - 2083 - ] + "pullRequests": [2083] }, { "sha": "c59fbf5e9c3b856d042f02cb18ad4de077eaeab5", "subject": "fix(artifacts): bound archive decompression by source size (#2144)", "body": "fix(artifacts): bound archive decompression by source size (#2144)\n\n* fix(artifacts): bound archive decompression by source size\n\nA ZIP/APK/IPA/MSIX member is attacker-controlled and can expand far\nbeyond the archive that carries it. Inventory hashed every member to EOF\nand extraction wrote every member with no ceiling, so a ~2 MiB archive\ncould drive ~30 s of CPU during inventory and ~150 s plus 2 GiB of disk\nwrites during extraction.\n\nA fixed per-entry byte cap is the wrong shape: it rejects legitimately\nlarge members inside large packages. The ceiling instead scales with the\narchive's own size (500x, with a 256 MiB floor), so large packages keep a\nproportionally large budget while a small archive cannot amplify into\nunbounded work. The cumulative declared size is charged from the central\ndirectory before any entry is decompressed, and zip.js already verifies\nstreamed output against each declaration, so the check is exact and\ncovers both inventory and extraction through the shared reader.\n\n* fix(artifacts): own decompression accounting per traversal\n\n* test(artifacts): verify declared ZIP output enforcement\n\n---------\n\nCo-authored-by: baron ", - "parents": [ - "81cca2e0e3ebd98c21f41d7ad63d6a00e4cbc3f9" - ], + "parents": ["81cca2e0e3ebd98c21f41d7ad63d6a00e4cbc3f9"], "authors": [ { "name": "Dery Ferdika", @@ -8569,17 +7423,13 @@ } } ], - "pullRequests": [ - 2144 - ] + "pullRequests": [2144] }, { "sha": "fdd8f826023c568937d237c2f97d855de283a9b8", "subject": "fix(browser): compare PNG IHDR bytes without ASCII folding (#2099)", "body": "fix(browser): compare PNG IHDR bytes without ASCII folding (#2099)\n\n* fix(browser): compare PNG IHDR bytes without ASCII folding\n\nScreenshot checks already compare the PNG signature as raw bytes, then decoded the chunk type with an encoding that maps high-bit bytes onto IHDR.\n\nCo-authored-by: Cursor \n\n* fix(browser): satisfy the strict index check in the IHDR test\n\nCo-authored-by: Cursor \n\n* refactor(browser): share byte-faithful PNG header facts\n\n---------\n\nCo-authored-by: Cursor \nCo-authored-by: REA preparation lane ", - "parents": [ - "c59fbf5e9c3b856d042f02cb18ad4de077eaeab5" - ], + "parents": ["c59fbf5e9c3b856d042f02cb18ad4de077eaeab5"], "authors": [ { "name": "Faheem Ahmad", @@ -8603,17 +7453,13 @@ "user": null } ], - "pullRequests": [ - 2099 - ] + "pullRequests": [2099] }, { "sha": "8fc2043eb8bcedbf34dce064f977e455438635d6", "subject": "fix(mcp): preserve target provenance on retained partial errors", "body": "fix(mcp): preserve target provenance on retained partial errors\n", - "parents": [ - "fdd8f826023c568937d237c2f97d855de283a9b8" - ], + "parents": ["fdd8f826023c568937d237c2f97d855de283a9b8"], "authors": [ { "name": "morluto", @@ -8630,9 +7476,7 @@ "sha": "ae8051302b5834322fa00cfa31c968ae74ab6ed9", "subject": "test(evm): verify real worker cancellation and cleanup recovery (#2404)", "body": "test(evm): verify real worker cancellation and cleanup recovery (#2404)\n\nVerify unchanged real EVMole worker replies through compiled CLI and stdio MCP, including late SDK cancellation, permission-induced retained cleanup failure/retry, preserved malformed-input diagnostics and a healthy real SQLite WASM peer. Add launcher receipts to prove blocked retries do not start another EVM worker.\n\nPreserve production contracts/defaults and explicit frozen-runtime/platform/measurement boundaries. Final head cf558a0661eb29bda932242abc3687b1860428e7 passes all 36 CI checks (run38313631216); manual final review and related real Factory rerun pass. Raw artifacts and receipts remain outside Git.\n\nCo-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>", - "parents": [ - "8fc2043eb8bcedbf34dce064f977e455438635d6" - ], + "parents": ["8fc2043eb8bcedbf34dce064f977e455438635d6"], "authors": [ { "name": "Ysopwnable", @@ -8651,17 +7495,13 @@ } } ], - "pullRequests": [ - 2404 - ] + "pullRequests": [2404] }, { "sha": "3b0ea590fcc876fa017946f4cec009d653f02b38", "subject": "fix(native): honor Mach-O chained pointer locations and library ordinals (#1709)", "body": "fix(native): honor Mach-O chained pointer locations and library ordinals (#1709)\n\n* fix(native): honor Mach-O chained pointer locations and library ordinals\n\nWalk declared page starts and next links before decoding chained pointers,\npreserving plain pointers between fixups, zero-offset rebases, and known\nfacts in malformed chains. Interpret positive dylib ordinals with dyld's\nspecial-ordinal cutoff so valid dependency provenance is retained.\n\nGive the Swift verification fixture an explicit module name so link-mode\nfilenames do not produce invalid identifiers.\n\nValidation: 46 focused regressions; pre-fix reproductions in an isolated\ncopy; real macOS CLI/MCP verification of 10 compiled Objective-C/Swift,\narm64/arm64e, chained/legacy and symbols/stripped fixture variants.\n\n* perf(native): reuse parsed Mach-O chain membership\n\n* test(native): validate parsed-chain repair against local gates\n\n* test(native): pin chained fixup page failure provenance\n\n* fix(native): bound parsed chained page facts and metadata\n\n* test(server): pin shared partial Evidence provenance\n\n---------\n\nCo-authored-by: baron ", - "parents": [ - "ae8051302b5834322fa00cfa31c968ae74ab6ed9" - ], + "parents": ["ae8051302b5834322fa00cfa31c968ae74ab6ed9"], "authors": [ { "name": "Yijie Lu", @@ -8680,17 +7520,13 @@ } } ], - "pullRequests": [ - 1709 - ] + "pullRequests": [1709] }, { "sha": "653067d799591ce2b8fdc84e99c160ac17e2860f", "subject": "fix(javascript): resolve module-relative Worker URL references (#2104)", "body": "fix(javascript): resolve module-relative Worker URL references (#2104)\n\n* fix(javascript): resolve module-relative Worker URL references\n\n* fix(javascript): validate Worker URL paths independently of suffixes\n\n* fix(javascript): preserve directory-form Worker URL paths\n\n* fix(javascript): unwrap type assertions in Worker URL references\n\n* fix(javascript): validate Worker bindings before URL resolution\n\n* fix(javascript): leave drive-letter Worker URLs unresolved\n\nUse WHATWG file URL parsing before pathname decoding to detect drive-letter\nforms whose resource identity depends on the unmodeled source URL scheme.\nPreserve encoded and ordinary relative pipe paths, and cover false matches\nthrough the compiled CLI and resolver boundary tests.\n\n* fix(javascript): preserve Worker URL identity boundaries\n\nRecognize known Worker bindings before filtering callee spellings so ESM\naliases and transparent constructor wrappers reach URL analysis. Keep\nroot-relative module URLs unknown without a modeled runtime base root.\n\nIndex direct source-local global writes with the shared mutation collector\nbefore promoting URL and browser Worker constructors. Preserve lexical\nshadowing and unrelated property identities, and exercise all three review\nregressions through the compiled CLI.\n\n* fix(javascript): invalidate mutated import.meta URL bases\n\nTrack source-local import.meta writes alongside ambient global writes so\nWorker URL expressions keep an unknown base after a possible URL mutation.\nTag the identity roots independently and cover direct mutation and unrelated\nproperty cases through the compiled CLI.\n\n* fix(javascript): close Worker URL identity and pathname gaps\n\nResolve ambient object identities before appending written properties, and\nretain possible source-local aliases across rebinding. Reuse intrinsic\ninvocation handling for aliased and bound mutators, array spreads, and\ntransparent TypeScript wrappers while preserving Electron write semantics.\n\nKeep malformed-percent nested Worker URL pathnames unknown because the base\nscheme is unavailable and Node rejects these file URLs. Preserve tolerant\nHTML URL handling, valid escapes, and query/fragment evidence.\n\nCover the new cases and unrelated writes through the compiled CLI with\nexisting-file decoys. All 591 targeted tests and npm run check pass.\n\n* fix(javascript): bound alias expansion and classify Worker paths\n\nJoin ambient identity projections instead of enumerating alias histories.\nMemoize repeated value and provenance queries while preserving capture,\ndepth, and cycle-dependent uncertainty.\n\nKeep Node Worker string arguments unresolved without filesystem or cwd\ncontext, and admit qualified global URL constructors through identity checks.\n\nValidate three 40-level alias branch shapes through the compiled CLI,\n925 source tests, 25 CLI/boundary tests, and the full npm run check gate.\n\n* fix(server): preserve partial Evidence target-content provenance\n\nPass the exact named contract returnsTargetContent flag through the shared partial-Evidence error delivery path introduced by the shortlist integration.\n\nExercise successful and failed recording through in-memory MCP for marked and unmarked contracts, preserving source payload and original failures. Observe both shared-handler emission and wire delivery so the SDK error-marker fallback cannot hide omissions. Suppressing the flag fails exactly the two marked cases.\n\nValidation: check:fast, check, 736 semantic tests, 29 MCP transport/error tests and six compiled static Worker CLI journeys pass. No live target/provider execution or hosted publication.\n\n* fix(javascript): structurally share semantic dependency proofs\n\n---------\n\nCo-authored-by: baron ", - "parents": [ - "3b0ea590fcc876fa017946f4cec009d653f02b38" - ], + "parents": ["3b0ea590fcc876fa017946f4cec009d653f02b38"], "authors": [ { "name": "Yann Roberto", @@ -8709,17 +7545,13 @@ } } ], - "pullRequests": [ - 2104 - ] + "pullRequests": [2104] }, { "sha": "dc038d16bba9046afd28970de9c47f6259a43524", "subject": "fix(apple): preserve archive signatures and metadata byte identity", "body": "fix(apple): preserve archive signatures and metadata byte identity\n", - "parents": [ - "653067d799591ce2b8fdc84e99c160ac17e2860f" - ], + "parents": ["653067d799591ce2b8fdc84e99c160ac17e2860f"], "authors": [ { "name": "morluto", @@ -8736,9 +7568,7 @@ "sha": "f43fc0247527aebb8efc7d9db04276fe2d489323", "subject": "fix(javascript): distinguish file URL paths from query identity", "body": "fix(javascript): distinguish file URL paths from query identity\n", - "parents": [ - "dc038d16bba9046afd28970de9c47f6259a43524" - ], + "parents": ["dc038d16bba9046afd28970de9c47f6259a43524"], "authors": [ { "name": "morluto", @@ -8755,9 +7585,7 @@ "sha": "82cfcee19f18b0eeae9a330ba04e0411cdf85225", "subject": "feat(managed): add retained metadata overview and pages (#2413)", "body": "feat(managed): add retained metadata overview and pages (#2413)\n\nAdd caller-selected managed metadata summaries and original collection pages while preserving complete CLI/MCP defaults and previous-runtime Evidence. Real SDK replies shrink substantially; actual Codex token/latency results remain mixed and are documented without a token-saving claim.\n\nValidated focused SDK/domain tests, full static/docs checks, real two-assembly repeated workflows and portable old Evidence, real SQLite WASM, and all exact-head CI checks. Raw experimental artifacts remain private.\n\nCo-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>", - "parents": [ - "f43fc0247527aebb8efc7d9db04276fe2d489323" - ], + "parents": ["f43fc0247527aebb8efc7d9db04276fe2d489323"], "authors": [ { "name": "Ysopwnable", @@ -8776,17 +7604,13 @@ } } ], - "pullRequests": [ - 2413 - ] + "pullRequests": [2413] }, { "sha": "951b095e11adf9faa9c4a27e212260060aa6b095", "subject": "fix(browser): bound CDP discovery response size and lifetime", "body": "fix(browser): bound CDP discovery response size and lifetime\n", - "parents": [ - "82cfcee19f18b0eeae9a330ba04e0411cdf85225" - ], + "parents": ["82cfcee19f18b0eeae9a330ba04e0411cdf85225"], "authors": [ { "name": "morluto", @@ -8803,9 +7627,7 @@ "sha": "d8ceb3f276a65c181b146f68c0729ff4b6f9fa61", "subject": "fix(artifacts): preserve inventory uncertainty in application projections", "body": "fix(artifacts): preserve inventory uncertainty in application projections\n", - "parents": [ - "951b095e11adf9faa9c4a27e212260060aa6b095" - ], + "parents": ["951b095e11adf9faa9c4a27e212260060aa6b095"], "authors": [ { "name": "morluto", @@ -8822,9 +7644,7 @@ "sha": "9435c7aae279ba184937c0dfeb713fd574ba3f29", "subject": "fix(artifacts): reject malformed serialized keys and integer values", "body": "fix(artifacts): reject malformed serialized keys and integer values\n", - "parents": [ - "d8ceb3f276a65c181b146f68c0729ff4b6f9fa61" - ], + "parents": ["d8ceb3f276a65c181b146f68c0729ff4b6f9fa61"], "authors": [ { "name": "morluto", @@ -8841,9 +7661,7 @@ "sha": "f09bb8a99773f79c7306b8799c86f856fe2c0d4b", "subject": "fix(browser): redact encoded declared secrets consistently", "body": "fix(browser): redact encoded declared secrets consistently\n", - "parents": [ - "9435c7aae279ba184937c0dfeb713fd574ba3f29" - ], + "parents": ["9435c7aae279ba184937c0dfeb713fd574ba3f29"], "authors": [ { "name": "morluto", @@ -8860,9 +7678,7 @@ "sha": "34a4bb6508006fa113463ef20ed799a2994e9ee8", "subject": "fix(elf): centralize fixed header validation across consumers", "body": "fix(elf): centralize fixed header validation across consumers\n\nValidate ELF identification/header versions and declared header bounds at the shared owner. Reuse parsed facts in target selection, Go, Dart and MIPS readers while preserving their stricter format policies and x32 support.\n\nRepair synthetic ELF fixtures and remove a superseded Go error-text assertion. Validation: 74 source tests, 202 filesystem/Go/MIPS boundary tests, typecheck and lint. No new real-provider claims.\n", - "parents": [ - "f09bb8a99773f79c7306b8799c86f856fe2c0d4b" - ], + "parents": ["f09bb8a99773f79c7306b8799c86f856fe2c0d4b"], "authors": [ { "name": "morluto", @@ -8879,9 +7695,7 @@ "sha": "9a18251426f891e6a24856b715ef8002ab8b9610", "subject": "feat(mcp): add opt-in paging for retained unknown heads", "body": "feat(mcp): add opt-in paging for retained unknown heads\n\nKeep complete default delivery and exact filters. Select stable ID pages at the ledger owner before cloning, return filtered totals and continuation offsets, and preserve detached records through the shared session port.\n\nValidate public MCP paging, safe-integer edges, snapshot replay and converted JSON Schemas. Document the bounded Flameox workflow comparison and its token/CPU/latency measurement limits; no real model performance claim.\n", - "parents": [ - "34a4bb6508006fa113463ef20ed799a2994e9ee8" - ], + "parents": ["34a4bb6508006fa113463ef20ed799a2994e9ee8"], "authors": [ { "name": "morluto", @@ -8898,9 +7712,7 @@ "sha": "ebc22d99d62225505c0a84f6e39823ba4ef2f829", "subject": "fix(native): retain signature snapshot cleanup ownership", "body": "fix(native): retain signature snapshot cleanup ownership\n\nUse the shared resource scope and private runtime root for signature snapshots. Retain failed file-handle/root cleanup, preserve primary failures alongside cleanup diagnostics, and wait for binding operations during client close before retrying owned resources.\n\nValidate root cleanup failure, blocked retry, repeated client close and in-flight acquisition. Existing provider/MCP/CLI tests and the real Darwin codesign ancestor-swap case pass. Dedicated native file-handle close-failure injection remains unverified.\n", - "parents": [ - "9a18251426f891e6a24856b715ef8002ab8b9610" - ], + "parents": ["9a18251426f891e6a24856b715ef8002ab8b9610"], "authors": [ { "name": "morluto", @@ -8917,9 +7729,7 @@ "sha": "c462a4ebd3a10e59253bcf38353a0914b176738b", "subject": "fix(scripts): pass MCP callTool timeouts as request options (#2387)", "body": "fix(scripts): pass MCP callTool timeouts as request options (#2387)\n\n@modelcontextprotocol/client 2.3.1 declares callTool(params, options).\nThree verifiers still used the v1 shape callTool(params, undefined,\n{ timeout }), so the third argument was dropped and those calls ran\nunder the SDK's 60 s default instead of the 150-180 s they request.\nPass the options second.", - "parents": [ - "ebc22d99d62225505c0a84f6e39823ba4ef2f829" - ], + "parents": ["ebc22d99d62225505c0a84f6e39823ba4ef2f829"], "authors": [ { "name": "Aurelio Bernal", @@ -8930,17 +7740,13 @@ } } ], - "pullRequests": [ - 2387 - ] + "pullRequests": [2387] }, { "sha": "37b7550ecc916acc8619fa72e5c05af45702733f", "subject": "fix(ida): preserve native coverage and verify returned values (#2324)", "body": "fix(ida): preserve native coverage and verify returned values (#2324)\n\nReject native callee successes without an explicit truncation marker while preserving provider failure reasons. Verify positive procedure inventory/search and function-result parity in the real-provider lane; support independent string/xref oracles and label their absence as unverified.\n\nVerified with Windows IDA Pro 9.3: eight normal production CLI/MCP checks passed, and six real-provider response-fault cases reproduced old false positives and validated the correction. Windows IDA Free was not used. No personal paths or license registration information are included.\n\nRepair inconsistent complete-file Ghidra test probe sizes after the shared ELF-header validation change, deriving sizes from the fixture buffers. Reproduced the three failures before the correction; 115 related installation/doctor and ELF tests pass afterward. Runtime parsing and installation behavior are unchanged; no real-Ghidra verification is claimed.\n\n207 focused IDA tests and static/documentation checks passed. Automated review completed on d1e0b1095 without findings. CI run 38327862093 passed all 36 jobs, including Windows, all six test shards, coverage/timing, and real Apple CLI/MCP workflows.\n\nFollow-up to #1544.", - "parents": [ - "c462a4ebd3a10e59253bcf38353a0914b176738b" - ], + "parents": ["c462a4ebd3a10e59253bcf38353a0914b176738b"], "authors": [ { "name": "Ysopwnable", @@ -8951,17 +7757,13 @@ } } ], - "pullRequests": [ - 2324 - ] + "pullRequests": [2324] }, { "sha": "ee87111009ace2ca4ef82c9aef09c82a37ca55f7", "subject": "test(perf): distinguish Codex tool context and token accounting (#2416)", "body": "test(perf): distinguish Codex tool context and token accounting (#2416)\n\nAdd optional owned Codex tool/usage capture and exact-name discovery experiments while preserving default ephemeral trials and all REA public APIs. Retain scoped managed and actual Android results, mixed outcomes, source identities and resource unknowns.\n\nSix semantic Python tests, full checked pre-push, byte-identical own-file rebase verification, manual review and all 39 exact-head CI checks pass. Historical main fixture failures and their independent repair remain documented; measured source/runtime pins are unchanged.\n\nCo-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>", - "parents": [ - "37b7550ecc916acc8619fa72e5c05af45702733f" - ], + "parents": ["37b7550ecc916acc8619fa72e5c05af45702733f"], "authors": [ { "name": "Ysopwnable", @@ -8980,17 +7782,13 @@ } } ], - "pullRequests": [ - 2416 - ] + "pullRequests": [2416] }, { "sha": "4f4f6cd7b5d7a400b90772a138d7b9f942c2a556", "subject": "test(evm): verify static descriptor bindings before use (#2427)", "body": "test(evm): verify static descriptor bindings before use (#2427)\n\nVerify the static EVM descriptor operation, CLI command, factory and input/output schema bindings with compiler-backed negative assignability checks. Prove SDK duplicate registration and invalid target input fail before provider invocation, preserving named bindings and separate lazy owners.\n\nValidated complete supported single-thread typecheck, focused12 SDK/composition cases plus a targeted2-case provider-spy rerun, static checks, checked pre-push, manual review and all exact-head CI checks. Production behavior/defaults and provider identity remain unchanged. Dynamic third-party module admission and ABI negotiation remain deferred.\n\nCo-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>", - "parents": [ - "ee87111009ace2ca4ef82c9aef09c82a37ca55f7" - ], + "parents": ["ee87111009ace2ca4ef82c9aef09c82a37ca55f7"], "authors": [ { "name": "Ysopwnable", @@ -9009,17 +7807,13 @@ } } ], - "pullRequests": [ - 2427 - ] + "pullRequests": [2427] }, { "sha": "eeba61826c1cd1c7be70f011fda0537baadd4179", "subject": "test(reference): scope cleanup faults to the owned source file (#2430)", "body": "test(reference): scope cleanup faults to the owned source file (#2430)\n\nScope source-file cleanup fault injection without poisoning enclosing Git\nmetadata reads. Cover both environments and verify that the retained native\nhandle stays live through retry, then closes successfully.\n\nCloses #2428.\n\nAssisted-by: Kogasa (gensokyo-skills:kogasa-surprise-testing)", - "parents": [ - "4f4f6cd7b5d7a400b90772a138d7b9f942c2a556" - ], + "parents": ["4f4f6cd7b5d7a400b90772a138d7b9f942c2a556"], "authors": [ { "name": "Ysopwnable", @@ -9030,17 +7824,13 @@ } } ], - "pullRequests": [ - 2430 - ] + "pullRequests": [2430] }, { "sha": "4773c152bc5f299fa682575bb8d1efea7587c7bc", "subject": "feat(website): add a persistent light and dark theme switch", "body": "feat(website): add a persistent light and dark theme switch\n", - "parents": [ - "eeba61826c1cd1c7be70f011fda0537baadd4179" - ], + "parents": ["eeba61826c1cd1c7be70f011fda0537baadd4179"], "authors": [ { "name": "N0zoM1z0", @@ -9051,17 +7841,13 @@ } } ], - "pullRequests": [ - 2432 - ] + "pullRequests": [2432] }, { "sha": "ca2d15b3ee965bd7ab27204cdf4b96b117d148c1", "subject": "test(perf): observe owned counters at payload completion", "body": "test(perf): observe owned counters at payload completion\n\nAdd opt-in, owned payload-completion cgroup witnesses without changing default receipts, terminal-counter semantics, resource limits, or REA public APIs. Preserve unknown and nonzero outcomes; verify ownership, observer capacity, cleanup, and actual SDK/model workflows.\n\nValidation: eleven Python semantic tests, supported full-project typecheck and lint, controlled Linux failure/cancellation/capacity probes, real managed/WASM/Android SDK and Codex runs, and all 39 exact-head CI checks. Curated evidence retains mixed timings and whole-scope uncertainty.\n\nCo-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>", - "parents": [ - "4773c152bc5f299fa682575bb8d1efea7587c7bc" - ], + "parents": ["4773c152bc5f299fa682575bb8d1efea7587c7bc"], "authors": [ { "name": "Ysopwnable", @@ -9080,17 +7866,13 @@ } } ], - "pullRequests": [ - 2431 - ] + "pullRequests": [2431] }, { "sha": "f254f5ac2b804b353a711264bb178f43fdf07867", "subject": "feat(android): add opt-in package summaries and retained manifest views", "body": "feat(android): add opt-in package summaries and retained manifest views\n\nAdd explicit package summary delivery and exact retained manifest pages while preserving complete MCP defaults, one-shot CLI output, provider requests, source identity and session lifetime. Return distinct linked Evidence and preserve partial/null facts; reject unavailable retention before engine work.\n\nValidation: 27 relevant SDK/domain/Android boundary checks, focused test-only correction rerun, full supported compiler/lint and docs checks, real NewPipe SDK pairs, authentic old Evidence continuation, four actual Codex trials with failures/regressions retained, and all 39 exact-head CI checks. Package replies shrink 119,527 to 8,659 bytes; no model-token or time gain is established.\n\nCo-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>", - "parents": [ - "ca2d15b3ee965bd7ab27204cdf4b96b117d148c1" - ], + "parents": ["ca2d15b3ee965bd7ab27204cdf4b96b117d148c1"], "authors": [ { "name": "Ysopwnable", @@ -9109,17 +7891,13 @@ } } ], - "pullRequests": [ - 2438 - ] + "pullRequests": [2438] }, { "sha": "a2d8b94dd50dab8d966239dd63ab84718aa8b4b4", "subject": "feat(fiddler): inspect native SAZ captures", "body": "feat(fiddler): inspect native SAZ captures\n\nInspect bounded recorded raw HTTP/XML SAZ archives and page retained capture Evidence. Preserve exact stored bytes and provenance, validate ZIP/XML integrity, and require an enforceable decoder memory bound.\n\nVerified 356 real recorded sessions against independent byte and metadata oracles, public CLI/MCP parity, retained pages, and related interface checks. Current Fiddler Everywhere GUI and non-Linux producer workflows remain unverified.\n\nCo-authored-by: zahhak <1792039+zahhak@users.noreply.github.com>\nCo-authored-by: N0zoM1z0 <161784452+N0zoM1z0@users.noreply.github.com>", - "parents": [ - "f254f5ac2b804b353a711264bb178f43fdf07867" - ], + "parents": ["f254f5ac2b804b353a711264bb178f43fdf07867"], "authors": [ { "name": "Ilian Iliev", @@ -9146,17 +7924,13 @@ } } ], - "pullRequests": [ - 2409 - ] + "pullRequests": [2409] }, { "sha": "bb154d1067b0fc250452b7d468d0b0523031a16f", "subject": "feat(browser): inspect retained aioquic qlog JSON captures", "body": "feat(browser): inspect retained aioquic qlog JSON captures\n\nInspect bounded offline aioquic1.5.0 JSON qlog0.3 and page retained event/transport facts with explicit trace and stream selectors. Preserve producer coordinates, exact numeric lexemes, global pre-selection fact scope and endpoint declaration uncertainty.\n\nVerified four real HTTP/3 recordings with an independent interval oracle, public CLI/MCP/schema parity, auth exclusions, source-deletion views and actual decoder heap exhaustion. Unverified producer platforms and qlog-specific lifecycle induction remain documented.\n\nCo-authored-by: LuisTaffelli <86675342+LuisTaffelli@users.noreply.github.com>\nCo-authored-by: N0zoM1z0 <161784452+N0zoM1z0@users.noreply.github.com>", - "parents": [ - "a2d8b94dd50dab8d966239dd63ab84718aa8b4b4" - ], + "parents": ["a2d8b94dd50dab8d966239dd63ab84718aa8b4b4"], "authors": [ { "name": "Luis", @@ -9175,17 +7949,13 @@ } } ], - "pullRequests": [ - 2277 - ] + "pullRequests": [2277] }, { "sha": "23de4f77c74dd299d45cab880c36321d802b21fe", "subject": "perf(flutter): add opt-in retained AOT summary and string pages", "body": "perf(flutter): add opt-in retained AOT summary and string pages\n\nAdd explicit MCP Dart AOT summary delivery and exact retained string-pool pages while preserving complete defaults, CLI behavior, ABI selection, original Evidence identity, partial coverage and lower bounds.\n\nReal LocalSend SDK replies shrink 92.05% with approximately unchanged SDK time. Two actual Codex pairs preserve all selected facts and reduce total input 48.75% / 42.38%, uncached input 33.63% / 42.52%, and task time 23.95% / 30.30%; all client errors/repeated calls remain counted. Preserve old portable Evidence and the real CLI complete result after rebasing onto SAZ/qlog main. Curated results keep measured and integration runtime pins separate; raw artifacts stay outside Git.\n\nRefs #2016.\n\nCo-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>", - "parents": [ - "bb154d1067b0fc250452b7d468d0b0523031a16f" - ], + "parents": ["bb154d1067b0fc250452b7d468d0b0523031a16f"], "authors": [ { "name": "Ysopwnable", @@ -9204,17 +7974,13 @@ } } ], - "pullRequests": [ - 2455 - ] + "pullRequests": [2455] }, { "sha": "172407787f1842dedbcd27b5385177595f786ce4", "subject": "fix(windows): preserve transient runtime admission failures (#2467)", "body": "fix(windows): preserve transient runtime admission failures (#2467)\n\nFixes #2257. Thanks to @chqcjq for the native self-test retry diagnosis in #2266.\n\nPreserve retry disposition through analysis workflows. Native warm admission requires exact sharing/lock codes and affirmative pre-allocation evidence; cleanup ownership takes precedence. No automatic retry or new analysis cache.\n\nVerified with real Windows 11 CLI, same-connection SDK MCP normal/conflict/recovery, the Windows native verifier, 99 focused tests and static/docs gates. Official npm 11.16.0 launcher sources were the application input. No IDA or Ghidra engine was used for this change. Win32 5 was not reproduced; no resolution claim for #1701/#2196. Performance measurements and limits are recorded in experiments/analysis-efficiency/windows-runtime-retry.md.", - "parents": [ - "23de4f77c74dd299d45cab880c36321d802b21fe" - ], + "parents": ["23de4f77c74dd299d45cab880c36321d802b21fe"], "authors": [ { "name": "Ysopwnable", @@ -9225,17 +7991,13 @@ } } ], - "pullRequests": [ - 2467 - ] + "pullRequests": [2467] }, { "sha": "a6efa4fcefeffcf5ff5310b8154988b4be30c349", "subject": "test(mcp): reuse advertised schema in inventory check (#2469)", "body": "test(mcp): reuse advertised schema in inventory check (#2469)\n\nReuse the current advertised binary_session definition for real SDK reply\nvalidation while preserving all inventory assertions and the 10-second deadline.\nAvoid initializing validators for unrelated tools in this correctness check.\n\nCloses #2453.\n\nAssisted-by: Reimu (gensokyo-skills:reimu-incident-triage)", - "parents": [ - "172407787f1842dedbcd27b5385177595f786ce4" - ], + "parents": ["172407787f1842dedbcd27b5385177595f786ce4"], "authors": [ { "name": "Ysopwnable", @@ -9246,17 +8008,13 @@ } } ], - "pullRequests": [ - 2469 - ] + "pullRequests": [2469] }, { "sha": "a86deecac5fa8434a4f50482f86b0c6ab486a936", "subject": "fix: align MCP archive contracts and documentation (#2478)", "body": "fix: align MCP archive contracts and documentation (#2478)\n\nReuse the domain ZIP format list for session schemas, verify full Harmony\nCLI/MCP lifecycles, and correct native view guidance and audited docs drift.\nRefresh locked dependency notices and gate inventory/provenance consistency,\nincluding notice inputs in the cached documentation gate.\n\nFixes #2454\n\nCo-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>", - "parents": [ - "a6efa4fcefeffcf5ff5310b8154988b4be30c349" - ], + "parents": ["a6efa4fcefeffcf5ff5310b8154988b4be30c349"], "authors": [ { "name": "Ysopwnable", @@ -9275,17 +8033,13 @@ } } ], - "pullRequests": [ - 2478 - ] + "pullRequests": [2478] }, { "sha": "4303dcdcf68af4d71d777ffff75cbd4f17a8877d", "subject": "fix(native): name the retained pwntools process group in cleanup resources (#2281)", "body": "fix(native): name the retained pwntools process group in cleanup resources (#2281)\n\nWhen a pwntools or pwndbg stage cannot confirm that its owned process\ngroup stopped, the cleanup_incomplete result listed only the run ID and\nruntime directory, although a descendant can still be live. Add the\nretained supervisor's pid and process-group coordinates, as\nOwnedCommand reports for a non-transferred cleanup failure.\n\nFixes #2274\n\nCo-authored-by: Claude Opus 5.5 ", - "parents": [ - "a86deecac5fa8434a4f50482f86b0c6ab486a936" - ], + "parents": ["a86deecac5fa8434a4f50482f86b0c6ab486a936"], "authors": [ { "name": "Kaoru0822", @@ -9304,17 +8058,13 @@ } } ], - "pullRequests": [ - 2281 - ] + "pullRequests": [2281] }, { "sha": "2c7240cf9d8231e16ad01de7678af9dbd01bab46", "subject": "perf(native): run independent Mach-O slice commands concurrently (#2466)", "body": "perf(native): run independent Mach-O slice commands concurrently (#2466)\n\ninspect_macho launched otool, nm, two dyld_info reads, dwarfdump and\nvtool one at a time. Each launch also resolves the tool through\n`xcrun --find`, so a warm call spent about 350 ms in eight serial\nsupervised launches. The slice commands only read the selected\nartifact, so launch them together. Every launch still settles before\nthe result, and declared order still fixes provenance and which\nfailure is reported.\n\nCo-authored-by: Claude Opus 5.5 ", - "parents": [ - "4303dcdcf68af4d71d777ffff75cbd4f17a8877d" - ], + "parents": ["4303dcdcf68af4d71d777ffff75cbd4f17a8877d"], "authors": [ { "name": "Kaoru0822", @@ -9333,17 +8083,13 @@ } } ], - "pullRequests": [ - 2466 - ] + "pullRequests": [2466] }, { "sha": "bb540826d65316c164d2de8ba4ef10f81a8ad073", "subject": "fix(artifacts): retry transient DMG verification refusals", "body": "fix(artifacts): retry transient DMG verification refusals\n", - "parents": [ - "2c7240cf9d8231e16ad01de7678af9dbd01bab46" - ], + "parents": ["2c7240cf9d8231e16ad01de7678af9dbd01bab46"], "authors": [ { "name": "morluto", @@ -9360,9 +8106,7 @@ "sha": "b045df100e1489e08a36d6ff04cea7feecf1332c", "subject": "fix(update): share parsed client activation with maintenance", "body": "fix(update): share parsed client activation with maintenance\n", - "parents": [ - "bb540826d65316c164d2de8ba4ef10f81a8ad073" - ], + "parents": ["bb540826d65316c164d2de8ba4ef10f81a8ad073"], "authors": [ { "name": "morluto", @@ -9379,9 +8123,7 @@ "sha": "042dcaa1ee66f1b8668f08b193f38ab01bceaacb", "subject": "perf(evidence): reuse authenticated unknown mutation snapshots", "body": "perf(evidence): reuse authenticated unknown mutation snapshots\n", - "parents": [ - "b045df100e1489e08a36d6ff04cea7feecf1332c" - ], + "parents": ["b045df100e1489e08a36d6ff04cea7feecf1332c"], "authors": [ { "name": "morluto", @@ -9398,9 +8140,7 @@ "sha": "45984a4319c8b6dcf2b03e969fbd4330c8432394", "subject": "test(perf): verify existing SQLite column selection on QGIS data (#2489)", "body": "test(perf): verify existing SQLite column selection on QGIS data (#2489)\n\nVerify existing SQLite column selection on pinned QGIS application data. Preserve complete requested schema and exact typed sample facts, all failed/repeated trials and mixed timing results; add reproducible corpus/question/grader and an isolated per-tool driver approval entry.\n\nExisting controls reduce model input in both corrected pairs; no production/API/default/cache change is justified. Real CLI/MCP parity, independent SQLite binding, current-main SDK comparison and relevant checks pass. Ref #2016.\n\nCo-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>", - "parents": [ - "bb540826d65316c164d2de8ba4ef10f81a8ad073" - ], + "parents": ["bb540826d65316c164d2de8ba4ef10f81a8ad073"], "authors": [ { "name": "Ysopwnable", @@ -9419,17 +8159,13 @@ } } ], - "pullRequests": [ - 2489 - ] + "pullRequests": [2489] }, { "sha": "fa4b8288655188426222773ead2ccbdaf76334fd", "subject": "fix(cli): normalize empty Windows profile before imports (#2482)", "body": "fix(cli): normalize empty Windows profile before imports (#2482)\n\nFollow-up to #2345; thanks to @gefrezim for the import-time home lookup diagnosis.\n\nNormalize only an empty Windows USERPROFILE before runtime dependency imports, preserving all nonempty caller selections. Reuse the existing public setup dry-run regression in the Windows curated CI lane. No additional filesystem query, engine call, cache or retry.\n\nVerified real Windows Node 24.18.0 CLI unset/empty/selected-profile controls, setup dry-run home selection and unchanged configuration, and baseline/candidate SDK stdio MCP catalogue parity. Nine related tests and static/docs checks passed. No IDA or Ghidra engine was used. Scoped resource observations and measurement limits are recorded in experiments/analysis-efficiency/windows-empty-profile.md.\n\nFixed the review finding and original CI package-scope ownership failure. Current-head CI is green; the unrelated MCP identity timeout passed on a failed-job rerun without changing its code or timeout. Current-head review completed with no further findings.", - "parents": [ - "45984a4319c8b6dcf2b03e969fbd4330c8432394" - ], + "parents": ["45984a4319c8b6dcf2b03e969fbd4330c8432394"], "authors": [ { "name": "Ysopwnable", @@ -9440,9 +8176,7 @@ } } ], - "pullRequests": [ - 2482 - ] + "pullRequests": [2482] }, { "sha": "c74142e6bdcd9e43ede7472b1554d9347c44aa1c", @@ -9468,9 +8202,7 @@ "sha": "a73a55f53cc2b2e5b7618effe6ecb5cee6e0cee2", "subject": "fix(artifacts): preserve decode coverage and cleanup ownership", "body": "fix(artifacts): preserve decode coverage and cleanup ownership\n", - "parents": [ - "c74142e6bdcd9e43ede7472b1554d9347c44aa1c" - ], + "parents": ["c74142e6bdcd9e43ede7472b1554d9347c44aa1c"], "authors": [ { "name": "morluto", @@ -9487,9 +8219,7 @@ "sha": "9581e067ad306aab842024e47f2dd18ac8056859", "subject": "feat(pcap): add bounded capture summaries through CLI and MCP", "body": "feat(pcap): add bounded capture summaries through CLI and MCP\n\nSummarize saved Wireshark4.x captures with enforced native resource limits, serialized admission, stable snapshot verification and retained fact/text pages. Preserve complete inventories within resource budgets and source uncertainty; report cleanup failure with partial Evidence and retained ownership.\n\nVerified six recorded corpora /13026 packets with independent Scapy/Python oracles, real CLI/MCP/schema parity,60 SNI names,132 DNS addresses and1000 URIs. Real TShark CI now exercises summary/paging. Actual Windows/Bun Wireshark remains unverified; macOS capture requires a separate enforceable-bound decision.\n\nCo-authored-by: 3QL <85309073+3QL@users.noreply.github.com>\nCo-authored-by: N0zoM1z0 <161784452+N0zoM1z0@users.noreply.github.com>", - "parents": [ - "c74142e6bdcd9e43ede7472b1554d9347c44aa1c" - ], + "parents": ["c74142e6bdcd9e43ede7472b1554d9347c44aa1c"], "authors": [ { "name": "Quentin Limo", @@ -9508,9 +8238,7 @@ } } ], - "pullRequests": [ - 2340 - ] + "pullRequests": [2340] }, { "sha": "d867136cecbf4a8c0eea90897bc9a33341eb582c", @@ -9536,9 +8264,7 @@ "sha": "c105391db53e2e2ab8b8624d5f3870c14aae3637", "subject": "fix(hopper): stop Linux demo children when the REA owner exits (#2499)", "body": "fix(hopper): stop Linux demo children when the REA owner exits (#2499)\n\nBind the owned demo helper to REA's private stdin stream and unwind child\ncleanup on EOF during startup or analysis. Verify graceful and SIGKILL owner\nexit through real CLI/MCP workflows and preserve unrelated processes.\n\nAssisted-by: Reimu (gensokyo-skills:reimu-incident-triage)", - "parents": [ - "d867136cecbf4a8c0eea90897bc9a33341eb582c" - ], + "parents": ["d867136cecbf4a8c0eea90897bc9a33341eb582c"], "authors": [ { "name": "Ysopwnable", @@ -9549,17 +8275,13 @@ } } ], - "pullRequests": [ - 2499 - ] + "pullRequests": [2499] }, { "sha": "acf75e6700ace28bb1db25e54e56673ac15e0ed3", "subject": "fix(evidence): reject unsupported metadata before authentication", "body": "fix(evidence): reject unsupported metadata before authentication\n\nClose persisted Evidence, bundle, profile and unknown record shapes so parsing cannot silently remove caller metadata before checking semantic identity. Keep constructor provider projection explicit and JSON payload fields open.\n\nExercise actual MCP export/import with independent record and manifest mutations, unchanged state after rejection, and a valid round trip. Prune duplicate source assertions. Validation: focused domain/CLI/MCP/filesystem checks, converted JSON Schemas, docs and typecheck/lint.\n", - "parents": [ - "c105391db53e2e2ab8b8624d5f3870c14aae3637" - ], + "parents": ["c105391db53e2e2ab8b8624d5f3870c14aae3637"], "authors": [ { "name": "morluto", @@ -9576,9 +8298,7 @@ "sha": "10935b7b1136accab2a43b308ab380749da0f7ae", "subject": "fix(process): reject deep trace cycles without recursive expansion", "body": "fix(process): reject deep trace cycles without recursive expansion\n\nUse iterative cycle detection, memoized reachability and compact unordered-group membership. Preserve declaration diagnostics on cyclic input while skipping checks requiring a valid partial order. Report duplicate group declarations once instead of repeating pair errors.\n\nReplace redundant source cycle/missing-pair assertions with public CLI/MCP coverage including 6000 events, dense not-before constraints and a large unordered group. Validate acyclic branching and mixed relation semantics. Document bounded Flameox CPU/latency gains and higher observed peak memory; agent/model costs remain unmeasured.\n", - "parents": [ - "acf75e6700ace28bb1db25e54e56673ac15e0ed3" - ], + "parents": ["acf75e6700ace28bb1db25e54e56673ac15e0ed3"], "authors": [ { "name": "morluto", @@ -9595,9 +8315,7 @@ "sha": "8b181716aca2cb467be499cba226abfb5ae19141", "subject": "fix(install): honor redirected setup diagnostics", "body": "fix(install): honor redirected setup diagnostics\n\nRequire terminal stderr before launching the automatic setup wizard, matching the CLI's interactive admission rule. Print the manual setup command when diagnostics are redirected.\n\nExercise a real PTY with stderr redirected to a fixture file and verify the installed command is not launched for setup. Installer lane: 33 tests passed; targeted regression, typecheck/lint and npm pack dry-run passed. Full package verifier was not run under the requested focused-check resource policy.\n", - "parents": [ - "10935b7b1136accab2a43b308ab380749da0f7ae" - ], + "parents": ["10935b7b1136accab2a43b308ab380749da0f7ae"], "authors": [ { "name": "morluto", @@ -9614,9 +8332,7 @@ "sha": "7a2cd1ea0a63e8c44166860b7ee9c7a1aa43492b", "subject": "fix(domain): preserve derived byte counts and uncertain identity", "body": "fix(domain): preserve derived byte counts and uncertain identity\n", - "parents": [ - "8b181716aca2cb467be499cba226abfb5ae19141" - ], + "parents": ["8b181716aca2cb467be499cba226abfb5ae19141"], "authors": [ { "name": "morluto", @@ -9633,9 +8349,7 @@ "sha": "1447fd2f990c5d9820337dfd4b8a170f8cad17cd", "subject": "fix(evaluation): share completed transcript facts across graders", "body": "fix(evaluation): share completed transcript facts across graders\n", - "parents": [ - "7a2cd1ea0a63e8c44166860b7ee9c7a1aa43492b" - ], + "parents": ["7a2cd1ea0a63e8c44166860b7ee9c7a1aa43492b"], "authors": [ { "name": "morluto", @@ -9652,9 +8366,7 @@ "sha": "16f5ded4468d7100d3640f874f33ddbaa953a787", "subject": "test(cli): consolidate development runner workflow coverage", "body": "test(cli): consolidate development runner workflow coverage\n", - "parents": [ - "1447fd2f990c5d9820337dfd4b8a170f8cad17cd" - ], + "parents": ["1447fd2f990c5d9820337dfd4b8a170f8cad17cd"], "authors": [ { "name": "morluto", @@ -9671,9 +8383,7 @@ "sha": "63e796d50ea323ae8dcfef80f86c8154bb106790", "subject": "fix(process): bound retained trace ordering state", "body": "fix(process): bound retained trace ordering state\n\nProve total orders with Kahn traversal and use ranks; stream forward and reverse reachability for general partial orders instead of retaining every closure. Aggregate unordered conflicts by declaration while preserving missing-pair counts and independent malformed-input diagnostics.\n\nValidation: 33 focused trace domain and CLI/MCP boundary tests passed. Six bounded Flameox executions preserved answer digests and cycle rejection; combined median peak RSS fell from 391.13 to 127.72 MiB. General partial-order traversal costs more CPU; the experiment records that tradeoff. Full suite and real-provider lanes were not run.\n", - "parents": [ - "16f5ded4468d7100d3640f874f33ddbaa953a787" - ], + "parents": ["16f5ded4468d7100d3640f874f33ddbaa953a787"], "authors": [ { "name": "morluto", @@ -9690,9 +8400,7 @@ "sha": "3c57e1a8b21b379fca55032d177078e1d8426e64", "subject": "fix(artifacts): authenticate file subjects across provider and view boundaries", "body": "fix(artifacts): authenticate file subjects across provider and view boundaries\n\nNarrow WASM and EVM execution ports to file subjects and preserve supplied subject types at the shared execution factory. Authenticate format with path and digest before recording or projecting Evidence, using the existing WASM identity owner in both consumers.\n\nValidation: focused WASM/EVM service and public MCP workflows passed, including malformed provider subjects and self-contained retained Evidence with contradictory format. Global typecheck/lint and documentation checks passed. Real WABT/Evmole execution and the full suite were not run.\n", - "parents": [ - "63e796d50ea323ae8dcfef80f86c8154bb106790" - ], + "parents": ["63e796d50ea323ae8dcfef80f86c8154bb106790"], "authors": [ { "name": "morluto", @@ -9709,9 +8417,7 @@ "sha": "1f7f808c4f3bb5eca6b13bcc71d5cceb2ace6614", "subject": "fix(reconstruction): resolve latest verifier observations without input-order bias", "body": "fix(reconstruction): resolve latest verifier observations without input-order bias\n\nGroup observations by exact normalized instant, retaining arbitrary fractional precision and offset equivalence. Coalesce equivalent assessments and all supporting Evidence; report conflicting latest assessments as unknown with verifier-result-ambiguous. Use the same instant comparison for freshness and future checks.\n\nReplace first-input-wins coverage with permutation, provenance, offset, sub-millisecond ordering, and future-clock regressions, including the public MCP workflow. Validation: focused reconstruction/offset tests and MCP workflow passed; converted JSON Schema validation, typecheck/lint, and docs checks passed. Full suite and real-provider lanes were not run.\n", - "parents": [ - "3c57e1a8b21b379fca55032d177078e1d8426e64" - ], + "parents": ["3c57e1a8b21b379fca55032d177078e1d8426e64"], "authors": [ { "name": "morluto", @@ -9728,9 +8434,7 @@ "sha": "2187e16f149a7a7b512a4cb45d5f468cc04091fe", "subject": "fix(ghidra): derive installation admission from Java property semantics", "body": "fix(ghidra): derive installation admission from Java property semantics\n", - "parents": [ - "1f7f808c4f3bb5eca6b13bcc71d5cceb2ace6614" - ], + "parents": ["1f7f808c4f3bb5eca6b13bcc71d5cceb2ace6614"], "authors": [ { "name": "morluto", @@ -9747,9 +8451,7 @@ "sha": "ec0b081371f118e6e5e042fbef3479359c672ddb", "subject": "fix(filesystem): enforce symlink and decoded-text admission", "body": "fix(filesystem): enforce symlink and decoded-text admission\n", - "parents": [ - "2187e16f149a7a7b512a4cb45d5f468cc04091fe" - ], + "parents": ["2187e16f149a7a7b512a4cb45d5f468cc04091fe"], "authors": [ { "name": "morluto", @@ -9766,9 +8468,7 @@ "sha": "1991542e59f64d46269b3ff942be77a5ff06e88f", "subject": "test(pcap): run the missing-path refusal only where captures are admitted (#2510)", "body": "test(pcap): run the missing-path refusal only where captures are admitted (#2510)\n\nOn hosts without an enforceable native bound (macOS), the provider refuses\ninspect_pcap_capture with capability_unavailable before it touches the\npath, which the unsupported-boundary test in the same file pins. The\nmissing-path test expected invalid_request on every host, so it always\nfailed on macOS while Linux and Windows CI stayed green.\n\nCo-authored-by: Claude Opus 5.5 ", - "parents": [ - "1f7f808c4f3bb5eca6b13bcc71d5cceb2ace6614" - ], + "parents": ["1f7f808c4f3bb5eca6b13bcc71d5cceb2ace6614"], "authors": [ { "name": "Kaoru0822", @@ -9787,17 +8487,13 @@ } } ], - "pullRequests": [ - 2510 - ] + "pullRequests": [2510] }, { "sha": "bb96afdbe32f5318d57fcb00099191c5a7712f53", "subject": "fix(pcap): name the host tool to configure in capability refusals (#2507)", "body": "fix(pcap): name the host tool to configure in capability refusals (#2507)\n\n* fix(pcap): name the host tool to configure in capability refusals\n\nMissing or misconfigured tshark/capinfos, the unsupported macOS capture\nboundary and an unusable Linux prlimit were projected with the generic\n\"unavailable for the current target; choose another target\" advice, even\nfor inspect_pcap_client, which has no target. Route tool refusals through\none pcapToolUnavailable owner that names REA_TSHARK_COMMAND and\nREA_CAPINFOS_COMMAND, give host-boundary refusals their own reason, and\nkeep the private workspace refusal's retryable flag like WABT and source\nmaps do.\n\nCo-Authored-By: Claude Opus 5.5 \n\n* test(pcap): cover the Linux prlimit refusal guidance\n\nCo-Authored-By: Claude Opus 5.5 \n\n---------\n\nCo-authored-by: Claude Opus 5.5 ", - "parents": [ - "1991542e59f64d46269b3ff942be77a5ff06e88f" - ], + "parents": ["1991542e59f64d46269b3ff942be77a5ff06e88f"], "authors": [ { "name": "Kaoru0822", @@ -9816,9 +8512,7 @@ } } ], - "pullRequests": [ - 2507 - ] + "pullRequests": [2507] }, { "sha": "73dd8d6ed5b2b6c705001898521f849a50a2e9fd", @@ -9844,9 +8538,7 @@ "sha": "3ae826ceba6f25b08bce50bcb51001209bc16b57", "subject": "fix(javascript): share source-map resolution and preserve path uncertainty", "body": "fix(javascript): share source-map resolution and preserve path uncertainty\n", - "parents": [ - "73dd8d6ed5b2b6c705001898521f849a50a2e9fd" - ], + "parents": ["73dd8d6ed5b2b6c705001898521f849a50a2e9fd"], "authors": [ { "name": "morluto", @@ -9863,9 +8555,7 @@ "sha": "91886982fccc50a9f7f31d4f320b25ffbcff35af", "subject": "docs: celebrate 170,000 GitHub stars 🎉 (#2462)", "body": "docs: celebrate 170,000 GitHub stars 🎉 (#2462)", - "parents": [ - "3ae826ceba6f25b08bce50bcb51001209bc16b57" - ], + "parents": ["3ae826ceba6f25b08bce50bcb51001209bc16b57"], "authors": [ { "name": "Ysopwnable", @@ -9876,17 +8566,13 @@ } } ], - "pullRequests": [ - 2462 - ] + "pullRequests": [2462] }, { "sha": "18d56f5321c3c5d5be40c19bcb0a0f2b25c2d459", "subject": "test(ghidra): restore complete installation fixtures across CI boundaries", "body": "test(ghidra): restore complete installation fixtures across CI boundaries\n\nDeclare application.java.min=21 at the four synthetic installation producers so profile, PSP, lifecycle and MCP workflows exercise their intended paths under fail-closed Java admission. Keep missing-bound refusal coverage intact and format the two Ghidra tests rejected by the CI static lane.\n\nValidation: all 82 tests across the 11 failing CI files passed; 66 Ghidra admission, doctor and snapshot tests passed, including missing Java bounds. No production admission policy changed. Full suite and real Ghidra lanes were not run.\n", - "parents": [ - "91886982fccc50a9f7f31d4f320b25ffbcff35af" - ], + "parents": ["91886982fccc50a9f7f31d4f320b25ffbcff35af"], "authors": [ { "name": "morluto", @@ -9903,9 +8589,7 @@ "sha": "e1cd292aa6e8f5f13441d408c66126782c8dbb0d", "subject": "fix(adb): admit canonical device states and preserve malformed output", "body": "fix(adb): admit canonical device states and preserve malformed output\n", - "parents": [ - "18d56f5321c3c5d5be40c19bcb0a0f2b25c2d459" - ], + "parents": ["18d56f5321c3c5d5be40c19bcb0a0f2b25c2d459"], "authors": [ { "name": "morluto", @@ -9922,9 +8606,7 @@ "sha": "1b953021eadf4cac09e20be388d79536903633b3", "subject": "fix(javascript): centralize module syntax and separate erased type dependencies", "body": "fix(javascript): centralize module syntax and separate erased type dependencies\n", - "parents": [ - "e1cd292aa6e8f5f13441d408c66126782c8dbb0d" - ], + "parents": ["e1cd292aa6e8f5f13441d408c66126782c8dbb0d"], "authors": [ { "name": "morluto", @@ -9941,9 +8623,7 @@ "sha": "26bffb94bf80355c35e22a98a8fc629c6210307e", "subject": "perf(evidence): reuse authenticated comparisons through aggregation", "body": "perf(evidence): reuse authenticated comparisons through aggregation\n", - "parents": [ - "1b953021eadf4cac09e20be388d79536903633b3" - ], + "parents": ["1b953021eadf4cac09e20be388d79536903633b3"], "authors": [ { "name": "morluto", @@ -9960,9 +8640,7 @@ "sha": "18831491cfb5cb98abbffce0cb04dae12a90fe28", "subject": "fix(ci): ignore generated website translation staging (#2511)", "body": "fix(ci): ignore generated website translation staging (#2511)\n\nIgnore generator-owned website translation staging output while preserving authored lint errors and complete diagnostics.\n\nVerified with a real checker regression, a production translation build, complete coverage, developer/CI regression checks and native lanes.\n\nFixes #2508", - "parents": [ - "18d56f5321c3c5d5be40c19bcb0a0f2b25c2d459" - ], + "parents": ["18d56f5321c3c5d5be40c19bcb0a0f2b25c2d459"], "authors": [ { "name": "Ysopwnable", @@ -9973,17 +8651,13 @@ } } ], - "pullRequests": [ - 2511 - ] + "pullRequests": [2511] }, { "sha": "141d2095f5c6faaf2d3c9b81b0f0f992cacec79c", "subject": "test(hopper): repair Linux demo setup and native verification (#2638)", "body": "test(hopper): repair Linux demo setup and native verification (#2638)\n\n* fix(verification): align Linux Hopper setup lane with current contracts\n\n* fix(verification): retain orphan checks on clean Linux runners\n\n* fix(verification): detect Hopper through alternate launcher paths\n\n* fix(verification): report identified Hopper leaks before proc errors\n\n* fix(verification): distinguish Hopper string recognition from byte fidelity\n\n* fix(verification): report full literal decoding coverage explicitly\n\n---------\n\nCo-authored-by: Luis Taffelli <86675342+LuisTaffelli@users.noreply.github.com>", - "parents": [ - "18831491cfb5cb98abbffce0cb04dae12a90fe28" - ], + "parents": ["18831491cfb5cb98abbffce0cb04dae12a90fe28"], "authors": [ { "name": "Ysopwnable", @@ -10002,17 +8676,13 @@ } } ], - "pullRequests": [ - 2638 - ] + "pullRequests": [2638] }, { "sha": "7017c4d68cab49aed998283e09069d9d791e1b0b", "subject": "fix(artifacts): read every ZIP package family extraction is asked to open (#2493)", "body": "fix(artifacts): read every ZIP package family extraction is asked to open (#2493)\n\nextract_artifact carried its own copy of the ZIP package format list with five\nof the eight members the domain owner declares, and used it both as the guard\nthat refuses a format without an extraction reader and as the selector for the\nreader itself. A .hap, .hsp or App Pack target was therefore refused with\n\"Artifact format has no extraction reader\" even though the next branch builds a\nZipArtifactReader for exactly those formats, while inventory_artifact classifies\nthe same path through the owner and reads it.\n\nImport isZipPackageFormat from the domain owner and delete the duplicate list\nand its predicate, removing the second representation instead of reconciling it.\nThe reader branch now narrows to ZipPackageFormat, which is what the\nZipArtifactReader constructor already requires.\n\nVerified with 41 boundary extraction, ZIP integrity and detection tests,\ncheck:fast and verify:test-discovery on macOS arm64. Reverting only the source\nchange fails exactly the three added families and leaves the zip control green.\n\nCo-authored-by: 吴佳浩 ", - "parents": [ - "141d2095f5c6faaf2d3c9b81b0f0f992cacec79c" - ], + "parents": ["141d2095f5c6faaf2d3c9b81b0f0f992cacec79c"], "authors": [ { "name": "吴佳浩Alben", @@ -10028,17 +8698,13 @@ "user": null } ], - "pullRequests": [ - 2493 - ] + "pullRequests": [2493] }, { "sha": "650237efb01b3c4a154799dbbedb2af1084f2312", "subject": "fix(setup): pin Hopper's macOS publisher identity before install (#2481)", "body": "fix(setup): pin Hopper's macOS publisher identity before install (#2481)\n\nThe macOS installer accepted any bundle that passed `codesign --verify`\nand whose `Info.plist` said `com.cryptic-apps.hopper-web-4`. An ad-hoc\nsigned bundle with that identifier satisfies both, so a substituted DMG\ncould be copied to ~/Applications and launched.\n\nVerify a pinned code requirement instead, covering the sealed bundle\nidentifier and the signing team together, and report a distinct\n`publisher_verification_failed` code so a vendor key change is not\nconfused with a corrupt package.", - "parents": [ - "7017c4d68cab49aed998283e09069d9d791e1b0b" - ], + "parents": ["7017c4d68cab49aed998283e09069d9d791e1b0b"], "authors": [ { "name": "The one -Niu", @@ -10049,9 +8715,7 @@ } } ], - "pullRequests": [ - 2481 - ] + "pullRequests": [2481] }, { "sha": "5f0f25ad617c42f3166dd06c46ab3c4b11f2de0e", @@ -10077,9 +8741,7 @@ "sha": "f6775a36694a6a9c620f4248638e8056a6cbcb66", "subject": "fix(setup): preserve current recovery snapshots and decoding failures", "body": "fix(setup): preserve current recovery snapshots and decoding failures\n", - "parents": [ - "5f0f25ad617c42f3166dd06c46ab3c4b11f2de0e" - ], + "parents": ["5f0f25ad617c42f3166dd06c46ab3c4b11f2de0e"], "authors": [ { "name": "morluto", @@ -10096,9 +8758,7 @@ "sha": "60f771a11e9889ce69cce6ad631b6b186ac742dd", "subject": "fix(apple): limit already-loaded reuse to rpath dependencies (#2292)", "body": "fix(apple): limit already-loaded reuse to rpath dependencies (#2292)\n\n* fix(apple): limit already-loaded reuse to rpath dependencies\n\ndyld reuses an already-loaded image by install name only for @rpath/\ndependencies (Loader.cpp:802-816) and evaluates other dependency forms\nagainst their expanded path for each loader. When multiple images in\ndifferent directories depend on @loader_path/ libraries sharing an\ninstall name, checking loaded images before candidate expansion caused\nsubsequent loaders to bind to the first loaded image's copy or appear\nresolved when their own copy was absent.\n\nLimit byInstallName registration and lookup to install names that start\nwith @rpath/, leaving caller-relative and literal dependencies to expand\nand evaluate their own candidate paths.\n\nSigned-off-by: Vinícius DS Andrade <95101505+viniciusdsandrade@users.noreply.github.com>\n\n* test(apple): verify loader_path dependencies across isolated directories\n\nAssert that multiple images depending on @loader_path/ libraries with\nthe same install name do not reuse already-loaded images across loaders.\nWhen the second loader's helper is absent, its candidate path is absent\nand dyld reports required-load-unresolved; when both helpers exist, each\nloader resolves to its own directory.\n\nSigned-off-by: Vinícius DS Andrade <95101505+viniciusdsandrade@users.noreply.github.com>\n\n---------\n\nSigned-off-by: Vinícius DS Andrade <95101505+viniciusdsandrade@users.noreply.github.com>", - "parents": [ - "650237efb01b3c4a154799dbbedb2af1084f2312" - ], + "parents": ["650237efb01b3c4a154799dbbedb2af1084f2312"], "authors": [ { "name": "Vinícius Andrade", @@ -10109,17 +8769,13 @@ } } ], - "pullRequests": [ - 2292 - ] + "pullRequests": [2292] }, { "sha": "d73ed6fce24f6d1372c80319cd41d29d66666159", "subject": "fix(domain): preserve retryable capability failures through redaction (#2494)", "body": "fix(domain): preserve retryable capability failures through redaction (#2494)\n\nredactExplicitFailure rebuilds each typed failure field by field so explicit\nliterals are removed while the projected code stays the same. The rebuild for\nAnalysisCapabilityUnavailableError carried providerId, operation, reason and\nuserMessage but not retryable, and the constructor defaults that field to false.\nRedacting a transient capability failure therefore made it permanent and changed\nthe remediation shown to the caller.\n\nPass the field through with the same conditional-spread shape used for\nuserMessage. The constructor recomputes retryable from cleanupIncomplete, and\ncleanup is already part of the reconstructed context, so a value that was true\nbefore redaction stays true and a false value stays absent.\n\nVerified with 66 error projection, access-denied, redaction and capture-failure\ntests, check:fast and verify:test-discovery on macOS arm64. The regression test\nfailed with \"expected false to be true\" before the change.\n\nCo-authored-by: 吴佳浩 ", - "parents": [ - "60f771a11e9889ce69cce6ad631b6b186ac742dd" - ], + "parents": ["60f771a11e9889ce69cce6ad631b6b186ac742dd"], "authors": [ { "name": "吴佳浩Alben", @@ -10135,17 +8791,13 @@ "user": null } ], - "pullRequests": [ - 2494 - ] + "pullRequests": [2494] }, { "sha": "f6556ad2bc102d80223f5b434136f546dbd2bbab", "subject": "fix(pcap): order evidence ties by code point instead of host locale (#2509)", "body": "fix(pcap): order evidence ties by code point instead of host locale (#2509)\n\nThe pcap summary sorted equal-count endpoints and protocol stacks with\nString#localeCompare, and Flutter build inspection sorted APK ABI\ndirectory names the same way. localeCompare follows the host's ICU\nlocale, so the same capture produced differently ordered Evidence on\ndifferent hosts: under da_DK \"aarp\" sorts after \"zz\", under lt_LT\n\"syslog\" sorts before \"ssdp\", and every locale puts \"fe80::1\" before\n\"fe80:1::1\". Use the repository's compareUnicodeCodePoints, as the\nother Evidence producers already do.\n\nCo-authored-by: Claude Opus 5.5 ", - "parents": [ - "d73ed6fce24f6d1372c80319cd41d29d66666159" - ], + "parents": ["d73ed6fce24f6d1372c80319cd41d29d66666159"], "authors": [ { "name": "Kaoru0822", @@ -10164,17 +8816,13 @@ } } ], - "pullRequests": [ - 2509 - ] + "pullRequests": [2509] }, { "sha": "12303812a8d70f198c99c7aeb0df3aaa8166543c", "subject": "fix(evidence): admit bundle imports across session transitions (#2303)", "body": "fix(evidence): admit bundle imports across session transitions (#2303)", - "parents": [ - "f6556ad2bc102d80223f5b434136f546dbd2bbab" - ], + "parents": ["f6556ad2bc102d80223f5b434136f546dbd2bbab"], "authors": [ { "name": "Rohit Ghumare", @@ -10185,17 +8833,13 @@ } } ], - "pullRequests": [ - 2303 - ] + "pullRequests": [2303] }, { "sha": "1a1b67c8885e9ff33f7a06ed2e027ebfdb83e084", "subject": "fix(javascript): preserve POSIX runtime path case on Windows (#2422)", "body": "fix(javascript): preserve POSIX runtime path case on Windows (#2422)\n\nUse POSIX path semantics for recorded POSIX roots when reconciling runtime Evidence on Windows. Preserve Windows mapping behavior and cover implicit and explicit file roots through the reconciliation service.\n\nAssisted-by: OpenAI GPT-6 \n\nCo-authored-by: Aurantium-47 <280805072+Aurantium-47@users.noreply.github.com>", - "parents": [ - "12303812a8d70f198c99c7aeb0df3aaa8166543c" - ], + "parents": ["12303812a8d70f198c99c7aeb0df3aaa8166543c"], "authors": [ { "name": "Aurantium", @@ -10214,17 +8858,13 @@ } } ], - "pullRequests": [ - 2422 - ] + "pullRequests": [2422] }, { "sha": "c6acd19b6d842699ab807d9526dc762c743686f4", "subject": "fix(ida): stop the private input of a universal Mach-O at the end of the selected slice (#2291)", "body": "fix(ida): stop the private input of a universal Mach-O at the end of the selected slice (#2291)\n\n* test(ida): expect the private input of a universal Mach-O to end at the selected slice\n\nCover a universal file larger than one read chunk with another slice after the selected one, for both a middle slice and the first slice.\n\n* fix(ida): stop the private input of a universal Mach-O at the end of the selected slice\n\nA read chunk that starts after the slice produced a negative end offset, and Buffer.subarray counts a negative bound from the end, so the head of the following slice was written to the private input and its digest.", - "parents": [ - "1a1b67c8885e9ff33f7a06ed2e027ebfdb83e084" - ], + "parents": ["1a1b67c8885e9ff33f7a06ed2e027ebfdb83e084"], "authors": [ { "name": "Mykola Dementiev", @@ -10235,17 +8875,13 @@ } } ], - "pullRequests": [ - 2291 - ] + "pullRequests": [2291] }, { "sha": "2c6a4fac4ff3477ac14f3d780894c5b390880607", "subject": "fix(process): accept a trace identifier the comparison result can represent (#2488)", "body": "fix(process): accept a trace identifier the comparison result can represent (#2488)\n\nThe trace specification owns the declared identifier vocabulary and the\ncomparison result echoes those identifiers verbatim into raw_trace[].event_id,\nmatched_variant and diagnostic event_ids. The result module restated the shared\nIDENTIFIER_PATTERN by hand with a 64-character cap, so a specification with a\nlonger identifier validated and then its own comparison result failed to parse:\ncompareProcessTraces threw a raw ZodError at the caller instead of returning a\ncomparison.\n\nExport the identifier schema from the specification as the single owner and\nreuse it in the evaluation module, removing the capped copy. IDENTIFIER_PATTERN\nhas no length bound and every other consumer uses it unbounded, so the\nduplicate was the outlier. Removing the bound rather than adding one keeps the\nadvertised trace_spec input contract unchanged; identifiers of 64 characters or\nfewer behave exactly as before.\n\nVerified with 48 process tests, 24 boundary CLI/MCP trace tests, check:fast and\nverify:test-discovery on macOS arm64. The regression test failed with the\nZodError before the change and passes after it.\n\nCo-authored-by: 吴佳浩 ", - "parents": [ - "c6acd19b6d842699ab807d9526dc762c743686f4" - ], + "parents": ["c6acd19b6d842699ab807d9526dc762c743686f4"], "authors": [ { "name": "吴佳浩Alben", @@ -10261,17 +8897,13 @@ "user": null } ], - "pullRequests": [ - 2488 - ] + "pullRequests": [2488] }, { "sha": "ab62ee9dcf98e4717d0b3445330f7cfdfe50c9f4", "subject": "fix(windows): preserve caller affinity only within one processor group (#2202)", "body": "fix(windows): preserve caller affinity only within one processor group (#2202)\n\n* fix(windows): preserve caller affinity only within one processor group\n\n`spawnProcess` read the caller's affinity mask and applied it to the\nsuspended child unconditionally. A mask names processors relative to one\nprocessor group, and Windows assigns each new process to a group of its\nown choosing, so on hosts with more than 64 logical processors the child\nis often placed in another group. `SetProcessAffinityMask` then rejects\nthe mask with ERROR_INVALID_PARAMETER (87) and the spawn fails, making\nevery owned provider process start intermittently on such hosts.\n\nAffinity is a nicety, not an authority or isolation control, so it is now\napplied only when the caller and the suspended child both occupy the same\nsingle processor group. A child placed in another group keeps that group's\ndefault affinity and the spawn proceeds. Job Object membership,\nkill-on-owner-close policy, owner normalization and priority preservation\nare unchanged, and the mask failure remains fatal within a shared group,\nwhere it is not expected.\n\nSingle-group hosts, including every host with 64 or fewer logical\nprocessors, are unaffected: `GetProcessGroupAffinity` reports one group\nfor both processes and the same mask is applied as before.\n\nThe optional process-boundary fixture gains an `affinity` observation,\nand the native verification lane asserts that an owned spawn succeeds and\nthat the child's mask matches the caller's whenever both share a single\ngroup.\n\nFixes #2181\n\nCo-Authored-By: Claude Opus 5 \n\n* fix(windows): refuse to widen a pinned caller's affinity across groups\n\nAddresses review feedback on the first commit.\n\nAn unconstrained caller loses nothing when Windows places an owned child\nin another processor group, so that spawn proceeds with the group's\ndefault. A caller deliberately pinned to fewer processors than its group\nholds is a different case: silently accepting the default would hand the\nprovider tree the whole group, which `docs/installation.md` tells\noperators to rely on affinity to prevent. Such a spawn now fails naming\nthe constraint instead. `GetProcessAffinityMask` already reports the\ngroup's active set, which distinguishes the two without another query.\n\nSelecting the caller's group at creation through\nPROC_THREAD_ATTRIBUTE_GROUP_AFFINITY was tried first and rejected:\n`CreateProcessW` fails with ERROR_INVALID_PARAMETER on a host with a\nsingle processor group, both alongside PROC_THREAD_ATTRIBUTE_JOB_LIST and\non its own, so it cannot carry the ordinary path.\n\nThe boundary fixture's affinity observation now reports a process id's\nown mask rather than its own, because a separate probe process is\nassigned its own group and cannot stand in for the process that spawns\nthe child. Masks and the group's active set cross as fixed-width\nhexadecimal strings: a mask can set bits above the safe-integer range,\nwhere `JSON.parse` would round two different masks to one value.\n\nThe verification lane asserts the mask is inherited exactly when caller\nand child share a group, and otherwise that the caller was unconstrained.\n\nCo-Authored-By: Claude Opus 5 \n\n* docs(windows): record what owned-process affinity does not preserve\n\nA mask covering its group's whole active set does not distinguish a\ncaller the system placed in that group from one that selected the group\ndeliberately, so an owned child can still be placed elsewhere with its\nprocessor count bounded and its group placement lost. Treating that case\nas constrained instead is not available: on a multi-group host an\nordinary process is assigned a group by the system and its mask is that\ngroup's active set, so refusing it would fail every owned spawn there.\n\nCo-Authored-By: Claude Opus 5 \n\n---------\n\nCo-authored-by: Claude Opus 5 ", - "parents": [ - "2c6a4fac4ff3477ac14f3d780894c5b390880607" - ], + "parents": ["2c6a4fac4ff3477ac14f3d780894c5b390880607"], "authors": [ { "name": "Stefano Rizzello", @@ -10290,17 +8922,13 @@ } } ], - "pullRequests": [ - 2202 - ] + "pullRequests": [2202] }, { "sha": "68ecf3df8c666fdbe1ced8089c64340af614d1c3", "subject": "fix(browser): exclude sensitive binary lengths from historical captures (#2477)", "body": "fix(browser): exclude sensitive binary lengths from historical captures (#2477)\n\nCo-authored-by: chAngE <172472630+chAng-L19@users.noreply.github.com>", - "parents": [ - "ab62ee9dcf98e4717d0b3445330f7cfdfe50c9f4" - ], + "parents": ["ab62ee9dcf98e4717d0b3445330f7cfdfe50c9f4"], "authors": [ { "name": "chAngE", @@ -10319,17 +8947,13 @@ } } ], - "pullRequests": [ - 2477 - ] + "pullRequests": [2477] }, { "sha": "e74e4e951bf59c42b25779b45d1c7b8dde6b618f", "subject": "fix(screenshot): reject invalid PNG header dimensions (#2472)", "body": "fix(screenshot): reject invalid PNG header dimensions (#2472)", - "parents": [ - "68ecf3df8c666fdbe1ced8089c64340af614d1c3" - ], + "parents": ["68ecf3df8c666fdbe1ced8089c64340af614d1c3"], "authors": [ { "name": "Rudy Mizrahi Celekli", @@ -10340,17 +8964,13 @@ } } ], - "pullRequests": [ - 2472 - ] + "pullRequests": [2472] }, { "sha": "6a04f922e16ad4d171ba0c07e32238efdaf43e2d", "subject": "fix(javascript): parse explicit CommonJS wrapper syntax (#2475)", "body": "fix(javascript): parse explicit CommonJS wrapper syntax (#2475)", - "parents": [ - "e74e4e951bf59c42b25779b45d1c7b8dde6b618f" - ], + "parents": ["e74e4e951bf59c42b25779b45d1c7b8dde6b618f"], "authors": [ { "name": "Rudy Mizrahi Celekli", @@ -10361,17 +8981,13 @@ } } ], - "pullRequests": [ - 2475 - ] + "pullRequests": [2475] }, { "sha": "a07ceaec36346a7c73e66efe35c8af4654029c84", "subject": "fix(config): reject NUL bytes in Hopper loader arguments (#2474)", "body": "fix(config): reject NUL bytes in Hopper loader arguments (#2474)", - "parents": [ - "6a04f922e16ad4d171ba0c07e32238efdaf43e2d" - ], + "parents": ["6a04f922e16ad4d171ba0c07e32238efdaf43e2d"], "authors": [ { "name": "Rudy Mizrahi Celekli", @@ -10382,9 +8998,7 @@ } } ], - "pullRequests": [ - 2474 - ] + "pullRequests": [2474] }, { "sha": "55e21a2eece0b624d80ada774c9055ac5a025875", @@ -10410,9 +9024,7 @@ "sha": "fe8d0bdd36fe12bc0836468d1a702a34fbdc219b", "subject": "fix(android): reject malformed UTF-8 at the JADX protocol boundary", "body": "fix(android): reject malformed UTF-8 at the JADX protocol boundary\n", - "parents": [ - "55e21a2eece0b624d80ada774c9055ac5a025875" - ], + "parents": ["55e21a2eece0b624d80ada774c9055ac5a025875"], "authors": [ { "name": "morluto", @@ -10429,9 +9041,7 @@ "sha": "b953f96c0aae27e1876c317a8f7db1d6f292b8ff", "subject": "fix(ghidra): share Java properties semantics with PSP extension admission", "body": "fix(ghidra): share Java properties semantics with PSP extension admission\n", - "parents": [ - "fe8d0bdd36fe12bc0836468d1a702a34fbdc219b" - ], + "parents": ["fe8d0bdd36fe12bc0836468d1a702a34fbdc219b"], "authors": [ { "name": "morluto", @@ -10448,9 +9058,7 @@ "sha": "d9e9fb2273543caab4eb21d896c33d462ada6971", "subject": "fix(process): use monotonic time for provider execution budgets", "body": "fix(process): use monotonic time for provider execution budgets\n", - "parents": [ - "b953f96c0aae27e1876c317a8f7db1d6f292b8ff" - ], + "parents": ["b953f96c0aae27e1876c317a8f7db1d6f292b8ff"], "authors": [ { "name": "morluto", @@ -10467,9 +9075,7 @@ "sha": "6bd2b28161411f70ed5dc72e42c2736a1aab758b", "subject": "fix(browser): keep elapsed capture timing independent of wall-clock changes", "body": "fix(browser): keep elapsed capture timing independent of wall-clock changes\n", - "parents": [ - "d9e9fb2273543caab4eb21d896c33d462ada6971" - ], + "parents": ["d9e9fb2273543caab4eb21d896c33d462ada6971"], "authors": [ { "name": "morluto", @@ -10486,9 +9092,7 @@ "sha": "7fc0b5ec9c2532bbf789d7783b7a0cab6fc054d8", "subject": "fix(mcp): join owned doctor shutdown without signaling saved PIDs", "body": "fix(mcp): join owned doctor shutdown without signaling saved PIDs\n", - "parents": [ - "6bd2b28161411f70ed5dc72e42c2736a1aab758b" - ], + "parents": ["6bd2b28161411f70ed5dc72e42c2736a1aab758b"], "authors": [ { "name": "morluto", @@ -10505,9 +9109,7 @@ "sha": "9049dbaf0c3df32357419f9899965df2b611f493", "subject": "fix(process): preserve monotonic capture timing and observed wall dates", "body": "fix(process): preserve monotonic capture timing and observed wall dates\n", - "parents": [ - "7fc0b5ec9c2532bbf789d7783b7a0cab6fc054d8" - ], + "parents": ["7fc0b5ec9c2532bbf789d7783b7a0cab6fc054d8"], "authors": [ { "name": "morluto", @@ -10524,9 +9126,7 @@ "sha": "e7882b34f4ac4a26f903c5f49264acc2c19bb562", "subject": "fix(artifacts): honor cancellation at the output publication boundary", "body": "fix(artifacts): honor cancellation at the output publication boundary\n", - "parents": [ - "9049dbaf0c3df32357419f9899965df2b611f493" - ], + "parents": ["9049dbaf0c3df32357419f9899965df2b611f493"], "authors": [ { "name": "morluto", @@ -10543,9 +9143,7 @@ "sha": "15463bdbe605b9dd11da5dbba031f99cd1ec9190", "subject": "fix(adb): count requested permissions that the device marks restricted (#2359)", "body": "fix(adb): count requested permissions that the device marks restricted (#2359)\n\nAndroid 10 and 11 print restricted entries of the requested-permissions\nlist as \"NAME: restricted=true\". The parser took the first such line as\nthe end of the list, so the count stopped there while coverage still\nread complete.\n\nCo-authored-by: Claude Opus 5.5 ", - "parents": [ - "55e21a2eece0b624d80ada774c9055ac5a025875" - ], + "parents": ["55e21a2eece0b624d80ada774c9055ac5a025875"], "authors": [ { "name": "Jin", @@ -10564,17 +9162,13 @@ } } ], - "pullRequests": [ - 2359 - ] + "pullRequests": [2359] }, { "sha": "b9ee921560dcf4590c2b13a1cc92c49c93e10675", "subject": "fix(process): preserve nested path identities during normalization (#2468)", "body": "fix(process): preserve nested path identities during normalization (#2468)", - "parents": [ - "15463bdbe605b9dd11da5dbba031f99cd1ec9190" - ], + "parents": ["15463bdbe605b9dd11da5dbba031f99cd1ec9190"], "authors": [ { "name": "Rudy Mizrahi Celekli", @@ -10585,17 +9179,13 @@ } } ], - "pullRequests": [ - 2468 - ] + "pullRequests": [2468] }, { "sha": "9c34c091b3b8c47f8bd18d6f0321efde2dedb92a", "subject": "feat(captures): discover installed protocol and field definitions (#2496)", "body": "feat(captures): discover installed protocol and field definitions (#2496)\n\n* feat(captures): discover installed protocol and field definitions\n\n* test(captures): isolate the direct glossary oracle profile\n\n* test(captures): accept padded kernel limit reports\n\n* fix(captures): detach every retained glossary column\n\n* fix(captures): describe every field discovery CLI option\n\n* fix(captures): retain discovery operation across cleanup retries\n\n---------\n\nCo-authored-by: N0zoM1z0 <161784452+N0zoM1z0@users.noreply.github.com>", - "parents": [ - "b9ee921560dcf4590c2b13a1cc92c49c93e10675" - ], + "parents": ["b9ee921560dcf4590c2b13a1cc92c49c93e10675"], "authors": [ { "name": "Olorin", @@ -10614,17 +9204,13 @@ } } ], - "pullRequests": [ - 2496 - ] + "pullRequests": [2496] }, { "sha": "4276aaf18bb607cdd0182280f76cf50fcd110c3c", "subject": "feat(signals): discover installed decoders and option help (#2487)", "body": "feat(signals): discover installed decoders and option help (#2487)\n\n* feat(signals): discover installed decoders and selected option help\n\n* fix(signals): bound retained discovery data and preserve resource failures\n\n* fix(signals): complete CLI help and portable decoder patterns\n\n* test(signals): verify case-insensitive decoder help queries\n\n* fix(signals): retain discovery operation across cleanup retries", - "parents": [ - "9c34c091b3b8c47f8bd18d6f0321efde2dedb92a" - ], + "parents": ["9c34c091b3b8c47f8bd18d6f0321efde2dedb92a"], "authors": [ { "name": "Olorin", @@ -10635,17 +9221,13 @@ } } ], - "pullRequests": [ - 2487 - ] + "pullRequests": [2487] }, { "sha": "20f51d7286b1759e42f99c0512c73230052dda86", "subject": "fix(native): name the ownership helper prerequisite in command failures (#2506)", "body": "fix(native): name the ownership helper prerequisite in command failures (#2506)\n\n* fix(native): name the ownership helper prerequisite in command failures\n\nEvery supervised native command launch needs the Darwin process-ownership\nhelper. When that helper cannot be compiled (relative REA_DARWIN_SWIFTC_PATH,\nmissing SDKROOT, a missing compiler, or an SDK/compiler mismatch), the\nrunner reduced the typed DarwinProcessOwnershipInspectionError to a bare\n`io` failure. inspect_macho then reported `execution_failure` with no hint,\nand inspect_artifact on any universal Mach-O said only \"lipo could not\nenumerate universal Mach-O slices\".\n\nThe runner now keeps the inspection message as the failure's `detail` at\nthe launch boundary and carries it through xcrun resolution. The native\nprovider adds it to its diagnostics and the slice reader appends it to its\nmessage, matching what the SQLite and capture providers already report.\n\nCo-Authored-By: Claude Opus 5.5 \n\n* test(native): cover the provider's ownership helper diagnostics\n\nCo-Authored-By: Claude Opus 5.5 \n\n---------\n\nCo-authored-by: Claude Opus 5.5 ", - "parents": [ - "4276aaf18bb607cdd0182280f76cf50fcd110c3c" - ], + "parents": ["4276aaf18bb607cdd0182280f76cf50fcd110c3c"], "authors": [ { "name": "Kaoru0822", @@ -10664,17 +9246,13 @@ } } ], - "pullRequests": [ - 2506 - ] + "pullRequests": [2506] }, { "sha": "6a05248d464387c0ce4ec1577b4c1b24d3d355c7", "subject": "perf(frida): evict captured messages without copying the whole queue (#2628)", "body": "perf(frida): evict captured messages without copying the whole queue (#2628)\n\nOnce a Frida session reached its 16 MiB capture budget, every new message\nevicted the oldest one with Array#shift, re-serialized it to recover its\nbyte charge, and searched and spliced its per-script array. Each of\nthose is linear in the retained messages, so with about 188k small\nmessages retained the cost per message rose from 0.14 µs to 32 µs and\ncapped the main thread at roughly 31k messages per second, which a\nhooked hot function can exceed.\n\nKeep both queues as head-offset FIFOs that compact once half their slots\nare evicted, and record each message's charge when it is admitted.\nArrival order already makes the globally oldest message the oldest one\nof its script, so per-script eviction becomes a head check. Eviction is\nnow amortized O(1) at about 0.14 µs per message; retained messages,\ntheir order and the truncation flag are unchanged.\n\nCo-authored-by: Claude Opus 5.5 ", - "parents": [ - "20f51d7286b1759e42f99c0512c73230052dda86" - ], + "parents": ["20f51d7286b1759e42f99c0512c73230052dda86"], "authors": [ { "name": "Kaoru0822", @@ -10693,9 +9271,7 @@ } } ], - "pullRequests": [ - 2628 - ] + "pullRequests": [2628] }, { "sha": "e802441bce7674f18c847c2763ba6297809d5eff", @@ -10721,9 +9297,7 @@ "sha": "eaa961658578522cecfbba7c7be1acf1c64da65a", "subject": "fix(javascript): preserve cancellation through recovery publication cleanup", "body": "fix(javascript): preserve cancellation through recovery publication cleanup\n", - "parents": [ - "e802441bce7674f18c847c2763ba6297809d5eff" - ], + "parents": ["e802441bce7674f18c847c2763ba6297809d5eff"], "authors": [ { "name": "morluto", @@ -10740,9 +9314,7 @@ "sha": "ed881c6d2ef6a8adba0c2a241ebc9ab4603b7868", "subject": "fix(progress): measure delivery intervals with a monotonic clock", "body": "fix(progress): measure delivery intervals with a monotonic clock\n", - "parents": [ - "eaa961658578522cecfbba7c7be1acf1c64da65a" - ], + "parents": ["eaa961658578522cecfbba7c7be1acf1c64da65a"], "authors": [ { "name": "morluto", @@ -10759,9 +9331,7 @@ "sha": "bf34d0d2fc3cc22076f49d682e74a0b71aa1db18", "subject": "perf(native): add opt-in Mach-O summary delivery and retained pages (#2634)", "body": "perf(native): add opt-in Mach-O summary delivery and retained pages (#2634)\n\n* perf(native): add opt-in Mach-O summary delivery and retained pages\n\ninspect_macho returns every import and export inline. For VS Code's\nElectron Framework one MCP call carries 2.5 MB of text (about 828k o200k\ntokens), and the same again as structuredContent; the MCP response\nbudget admits it. Agents asking for slice identity, UUID or dependency\ncounts paid that cost on every first call.\n\nAdd the established opt-in detail selection: omitted or complete keeps\nthe existing complete result and Evidence identity, while summary\nretains the complete Evidence and returns slice identity with\nper-collection returned/total/exhaustive counts (956 tokens).\ninspect_analysis_view kind macho pages the original rows of any\ncollection or the command provenance, repeating the producer's own\ntotal and exhaustive flag so page exhaustion is never read as absence.\n\nDelivery detail never reaches the native tools or the source Evidence\nID: registerEvidenceTools gains a parametersForEvidence hook, so the\nsummary's parent is the same Evidence as a complete call.\n\nCo-Authored-By: Claude Opus 5.5 \n\n* fix(mcp): refuse unretainable summary delivery before analysis\n\nA server without Evidence retention (a fixed analysis source) ran the\ncomplete inspect_macho or inspect_artifact analysis for detail summary\nand only then refused it in summarizeRetainedAnalysis, paying the very\ncost summary delivery exists to avoid. registerEvidenceTools gains a\npreflight hook; both registrations check retention there, as the WASM,\nEVM, managed, pcap and capture handlers already do before dispatch.\n\nCo-Authored-By: Claude Opus 5.5 \n\n* fix(native): keep whole rows in Mach-O architecture and segment pages\n\nThe page item union listed plain-object row arrays, and zod returns the\nfirst union member that parses while dropping unknown keys. Entrypoint\nrows declare only file_offset, so every architecture and segment row\n(which also carry a numeric file_offset) matched it and lost its name,\nCPU fields, permissions and sections. Rows now use exact key sets, and\nimports/exports share one member. The MCP test pages every facet of a\nreal /bin/ls and compares it with the unparsed complete rows.\n\nCo-Authored-By: Claude Opus 5.5 \n\n---------\n\nCo-authored-by: Claude Opus 5.5 ", - "parents": [ - "e802441bce7674f18c847c2763ba6297809d5eff" - ], + "parents": ["e802441bce7674f18c847c2763ba6297809d5eff"], "authors": [ { "name": "Kaoru0822", @@ -10780,9 +9350,7 @@ } } ], - "pullRequests": [ - 2634 - ] + "pullRequests": [2634] }, { "sha": "ded199abcde611a0ba4739ecb536e0ede0075670", @@ -10808,9 +9376,7 @@ "sha": "c923fb0dc9462e302b84a15770131ff899f89455", "subject": "fix(javascript): retain compiler-dependent module resolution facts", "body": "fix(javascript): retain compiler-dependent module resolution facts\n\nCompare import and require outcomes for static TypeScript references when compiler options are unknown. Preserve branch facts through worker IR and both graph projections; retain declaration fallbacks as candidates without changing explicitly selected paths.\n\nValidation: 210 focused resolver and semantic tests; 21 production-boundary and source-extension tests. A bounded 2,000-reference probe adds about 16–17 ms wall time for dual resolution; full task token costs and real compiled application behavior remain unmeasured.\n", - "parents": [ - "ded199abcde611a0ba4739ecb536e0ede0075670" - ], + "parents": ["ded199abcde611a0ba4739ecb536e0ede0075670"], "authors": [ { "name": "morluto", @@ -10827,9 +9393,7 @@ "sha": "b955b825fc002a4bb408f2910b78768c566c2cd1", "subject": "fix(artifacts): retain read cleanup ownership through CLI and MCP shutdown", "body": "fix(artifacts): retain read cleanup ownership through CLI and MCP shutdown\n\nKeep failed stable-read handles and WABT runtime roots under retryable resource scopes. Preserve cancellation causes and primary errors, close the same service instances bound to MCP tools, and consolidate CLI operation/cleanup projection.\n\nValidation: fast typecheck and lint, cached runtime build, docs checks, SDK schema validation, focused service and real-file cleanup tests, CLI cleanup regressions, and MCP lifecycle/shutdown workflows. Provider process fixtures simulate engine output; real WABT and Linux EVM execution are not established by this pass.\n", - "parents": [ - "c923fb0dc9462e302b84a15770131ff899f89455" - ], + "parents": ["c923fb0dc9462e302b84a15770131ff899f89455"], "authors": [ { "name": "morluto", @@ -10846,9 +9410,7 @@ "sha": "c7a890d12987d9b2d496119c1fbf1a88c0fc298e", "subject": "fix(javascript): preserve unknown module-alias provenance", "body": "fix(javascript): preserve unknown module-alias provenance\n\nReplace the implicit local-provenance fallback with explicit locally constructed values. Keep opaque results, parameters and caught values unknown; follow assignment and sequence results while retaining exact module aliases. Clarify that alias provenance does not represent transitive data taint.\n\nValidation: 26 focused provenance/module-link tests, 135 semantic and graph-builder tests, six application module-relationship boundary tests, and the fast typecheck/lint gate.\n", - "parents": [ - "b955b825fc002a4bb408f2910b78768c566c2cd1" - ], + "parents": ["b955b825fc002a4bb408f2910b78768c566c2cd1"], "authors": [ { "name": "morluto", @@ -10865,9 +9427,7 @@ "sha": "9cf49c7a784ace9b79e4b4c1022c9fbf2b3f77e1", "subject": "fix(snapshot): classify non-object roots as invalid content (#2685)", "body": "fix(snapshot): classify non-object roots as invalid content (#2685)\n\nCo-authored-by: jiangjiang248 <237556902+jiangjiang248@users.noreply.github.com>", - "parents": [ - "c923fb0dc9462e302b84a15770131ff899f89455" - ], + "parents": ["c923fb0dc9462e302b84a15770131ff899f89455"], "authors": [ { "name": "jiangjiang248", @@ -10886,9 +9446,7 @@ } } ], - "pullRequests": [ - 2685 - ] + "pullRequests": [2685] }, { "sha": "67c7a24e60cc59191283977642055cd59a84b043", @@ -10914,9 +9472,7 @@ "sha": "a0317cf732b3addefad5ac3b234db1e044e3351d", "subject": "fix(ci): align FAT fixtures and consolidate duplicated workflow helpers", "body": "fix(ci): align FAT fixtures and consolidate duplicated workflow helpers\n\nDeclare the synthetic 4 KiB Mach-O slice alignment accurately while preserving the IDA thinning scenario. Share web cleanup aggregation and process-trace fixture facts instead of duplicating them across consumers and tests; keep the 3% duplication threshold unchanged.\n\nValidation: npm run check:ci, test discovery, and 42 focused IDA, process-trace, web workflow and cleanup boundary tests. Duplication falls from 3.01% to 2.99%.\n", - "parents": [ - "67c7a24e60cc59191283977642055cd59a84b043" - ], + "parents": ["67c7a24e60cc59191283977642055cd59a84b043"], "authors": [ { "name": "morluto", @@ -10933,9 +9489,7 @@ "sha": "11f1d952e79241b507e47c690eed00e0d5ffda30", "subject": "ci: raise duplication threshold to 3.5 percent", "body": "ci: raise duplication threshold to 3.5 percent\n", - "parents": [ - "a0317cf732b3addefad5ac3b234db1e044e3351d" - ], + "parents": ["a0317cf732b3addefad5ac3b234db1e044e3351d"], "authors": [ { "name": "morluto", @@ -10952,9 +9506,7 @@ "sha": "11f8b7625788d747eaadd59af6efdf88587ed058", "subject": "fix(apktool): accept --no-strings CLI option (#2707)", "body": "fix(apktool): accept --no-strings CLI option (#2707)", - "parents": [ - "11f1d952e79241b507e47c690eed00e0d5ffda30" - ], + "parents": ["11f1d952e79241b507e47c690eed00e0d5ffda30"], "authors": [ { "name": "Avocado", @@ -10965,17 +9517,13 @@ } } ], - "pullRequests": [ - 2707 - ] + "pullRequests": [2707] }, { "sha": "b69d20a300dba57783a810146f25dacb69f9b8a4", "subject": "fix(captures): name the violated HAR schema constraint (#2708)", "body": "fix(captures): name the violated HAR schema constraint (#2708)\n\nHAR validation reported only the AJV keyword, so a capture missing\n`log.version` failed with \"HAR schema validation failed: required.\" and\nthe caller could not tell which property to supply. Include AJV's\nconstraint message, which names the missing property, expected type, or\npattern without restating captured values.\n\nCo-authored-by: Claude Opus 5.5 ", - "parents": [ - "11f8b7625788d747eaadd59af6efdf88587ed058" - ], + "parents": ["11f8b7625788d747eaadd59af6efdf88587ed058"], "authors": [ { "name": "Kaoru0822", @@ -10994,17 +9542,13 @@ } } ], - "pullRequests": [ - 2708 - ] + "pullRequests": [2708] }, { "sha": "96fc84f1fb7c8bc69f66cd899896f4de9061fead", "subject": "fix(native): select one slice when universal Mach-O slices share a CPU type (#2040)", "body": "fix(native): select one slice when universal Mach-O slices share a CPU type (#2040)\n\n* fix(native): select one slice when universal Mach-O slices share a CPU type\n\nOn macOS 27 most system binaries are universal files whose slices share\nCPU_TYPE_ARM64: arm64e + arm64e.x1 (Calculator, TextEdit), x86_64 + arm64e +\narm64e.x1 (/bin/ls), or arm64 + arm64e.x1 (ShortcutDroplet). Target admission\nnames slices by CPU family, so these targets have availableArchitectures\n[\"arm64\"] while the file holds two arm64 slices.\n\ninspect_macho read that family count as a slice count and ran otool, nm,\ndyld_info, dwarfdump and vtool without -arch. ShortcutDroplet failed with\n\"Malformed otool load-command output\" (40 load commands against ncmds 20).\nCalculator reported both slices' imports (4138 instead of 2069), nm's\n\"(for architecture ...)\" header lines as exports, and no selected slice.\nselectArchitecture now also filters when lipo lists more than one slice. Its\npreference is unchanged: the family name, then arm64e, then the first\narm64e..\n\ninspect_native_dispatch_metadata matched FAT slices by CPU type only and\nrefused /bin/ls and TextEdit as \"Ambiguous FAT architecture slice\".\nselectMachoSlice now ranks slices of the requested CPU type by base subtype in\nthe same order: arm64 (0, then 1) or x86_64 (3), then arm64e (2), then other\nvariants such as arm64e.x1 in FAT table order. It reports ambiguity only when\nthe top-ranked slices share a subtype.\n\nCo-Authored-By: Claude Opus 5.5 \n\n* fix(native): share Mach-O slice preference across inspections\n\n* chore: preserve upstream process capture test during merge\n\n---------\n\nCo-authored-by: Claude Opus 5.5 \nCo-authored-by: morluto <76467478+morluto@users.noreply.github.com>", - "parents": [ - "b69d20a300dba57783a810146f25dacb69f9b8a4" - ], + "parents": ["b69d20a300dba57783a810146f25dacb69f9b8a4"], "authors": [ { "name": "Hemanth Rayudu", @@ -11031,17 +9575,13 @@ } } ], - "pullRequests": [ - 2040 - ] + "pullRequests": [2040] }, { "sha": "c02fb0ea8055f98def2b12ad557aed0faefd3639", "subject": "fix(native): rank Mach-O slices by parsed CPU subtype", "body": "fix(native): rank Mach-O slices by parsed CPU subtype\n", - "parents": [ - "96fc84f1fb7c8bc69f66cd899896f4de9061fead" - ], + "parents": ["96fc84f1fb7c8bc69f66cd899896f4de9061fead"], "authors": [ { "name": "morluto", @@ -11058,9 +9598,7 @@ "sha": "0c7f4dfbd9c1975eeedfecd96debb2e4263012d0", "subject": "ci: separate fast feedback from full qualification", "body": "ci: separate fast feedback from full qualification\n\nScope main pushes from a successful ancestor so canceled runs cannot hide changes. Keep the complete portable suite in fast feedback and move coverage plus Intel macOS to hourly, manual, explicit-full, and release qualification. Let qualification finish independently of superseded feedback.\n\nBind publication to full qualification at its exact revision and publish the verified tarball after checking workflow identity, version, and SHA-256. Keep trusted cache writers and reject incomplete merged test inventories.\n\nValidation: 151 focused CI tests; typecheck/lint; actionlint 1.7.7; knip; all 1044 files discovered; bounded blob/merge smoke; macOS package verifier with retention and cleanup; npm pack dry run. Native Linux/ARM/Windows and remote workflow execution remain CI verification.\n", - "parents": [ - "c02fb0ea8055f98def2b12ad557aed0faefd3639" - ], + "parents": ["c02fb0ea8055f98def2b12ad557aed0faefd3639"], "authors": [ { "name": "morluto", @@ -11077,9 +9615,7 @@ "sha": "db3c9f084bacad34f620ba678924564e20f441f9", "subject": "fix(ci): keep cancellation ownership in the calling workflow", "body": "fix(ci): keep cancellation ownership in the calling workflow\n\nRemove redundant ref-based concurrency from reusable provider and website workflows. Their old groups could cancel qualification from another CI tier even though the callers used separate groups. Disposable hosted jobs now inherit caller scheduling; direct manual dispatches remain independent.\n\nValidate every called CI workflow has no independent cancellation group. Validation: 100 focused scope/gate tests and actionlint 1.7.7.\n", - "parents": [ - "0c7f4dfbd9c1975eeedfecd96debb2e4263012d0" - ], + "parents": ["0c7f4dfbd9c1975eeedfecd96debb2e4263012d0"], "authors": [ { "name": "morluto", @@ -11096,9 +9632,7 @@ "sha": "e05d3399f19f25fdf04285a02b293418256b26dc", "subject": "test(javascript): expect unknown parameter provenance", "body": "test(javascript): expect unknown parameter provenance\n", - "parents": [ - "db3c9f084bacad34f620ba678924564e20f441f9" - ], + "parents": ["db3c9f084bacad34f620ba678924564e20f441f9"], "authors": [ { "name": "morluto", @@ -11115,9 +9649,7 @@ "sha": "52d4ce6ced1c3b6ae7570a5df7f4499cd65a1182", "subject": "fix(apple): derive dyld environment findings from each traced slice (#2733)", "body": "fix(apple): derive dyld environment findings from each traced slice (#2733)\n\nderiveFindings looked up each traced root's slice again by architecture\nname. A universal executable with arm64e and arm64e.x1 slices reports\nboth as \"arm64e\", so both roots resolved to the first slice: a later\nslice's LC_DYLD_ENVIRONMENT produced no finding, or the first slice's\ncommand was reported twice. The per-slice dyld_environment arrays were\nalready correct.\n\ntraceDylibLoading already has the exact slice when it records a root, so\npass it to deriveFindings instead of re-deriving it from the name. The\npublic roots and findings shapes are unchanged.\n\nFixes #2661\n\nCo-authored-by: Claude Opus 5.5 ", - "parents": [ - "e05d3399f19f25fdf04285a02b293418256b26dc" - ], + "parents": ["e05d3399f19f25fdf04285a02b293418256b26dc"], "authors": [ { "name": "Kaoru0822", @@ -11136,17 +9668,13 @@ } } ], - "pullRequests": [ - 2733 - ] + "pullRequests": [2733] }, { "sha": "0cf224e76214abbcf47274aa936d1b5cad28db2f", "subject": "fix(javascript): retain distinct chunk registration callback metadata (#2737)", "body": "fix(javascript): retain distinct chunk registration callback metadata (#2737)\n\nCo-authored-by: LouisChen <3361008+chqcjq@users.noreply.github.com>", - "parents": [ - "52d4ce6ced1c3b6ae7570a5df7f4499cd65a1182" - ], + "parents": ["52d4ce6ced1c3b6ae7570a5df7f4499cd65a1182"], "authors": [ { "name": "LouisChen", @@ -11165,17 +9693,13 @@ } } ], - "pullRequests": [ - 2737 - ] + "pullRequests": [2737] }, { "sha": "d13c9f840d36a321a56917e75c48afcb8d72920e", "subject": "ci: reduce redundant compatibility and qualification work", "body": "ci: reduce redundant compatibility and qualification work\n\nSelect SQLite compatibility by explicit source, fixture, lifecycle, and script ownership while retaining every version in full qualification. Share the canonical scope inventory between planning and the required gate.\n\nReuse recent exact-SHA full qualification only for hourly schedules, with trusted successful-run metadata and receipts. Force a daily refresh, reject stale original runs even after retries, and never renew proof from reused validation.\n\nReport attempt-specific queue, execution, and matched step timing in a separate completion workflow using trusted default-branch code and read-only API access. Preserve raw metadata and unknown timings without delaying validation or publication.\n\nValidation: 177 focused tests; typecheck/lint; knip; actionlint 1.7.7; all 1046 tests discovered; live 37-job API report smoke. Remote workflow scheduling and real-provider matrices remain CI verification.\n", - "parents": [ - "0cf224e76214abbcf47274aa936d1b5cad28db2f" - ], + "parents": ["0cf224e76214abbcf47274aa936d1b5cad28db2f"], "authors": [ { "name": "morluto", @@ -11192,9 +9716,7 @@ "sha": "9928f357fb9c420e6384e155d74586dfe37d4533", "subject": "fix(artifacts): read ASCII control bytes in legacy ZIP names as ASCII (#2365)", "body": "fix(artifacts): read ASCII control bytes in legacy ZIP names as ASCII (#2365)\n\n* fix(artifacts): read ASCII control bytes in legacy ZIP names as ASCII\n\nZIP names without the UTF-8 flag were decoded with zip.js's CP437 table,\nwhich maps bytes 0x01-0x1F and 0x7F to IBM PC display glyphs. A folder\nzipped on macOS with a custom icon therefore listed and extracted\n`Folder/Icon\\r` as `Folder/Icon♪`, a name that is not in the archive and\ndiffers from REA's directory inventory of the same folder. Tabs became `○`\nand DEL became `⌂`.\n\nDecode legacy names in REA's existing decodeText hook with the Unicode\nCP437 mapping that Python's zipfile also uses: bytes below 0x80 as ASCII,\nand the upper half with the same table zip.js uses.\n\nWindows file names cannot contain U+0001-U+001F, so a Windows extraction\ndestination now refuses such a path with a typed path failure before\ncreating anything, as it already does for ':'.\n\n* test(artifacts): check extracted legacy ZIP control names on disk\n\nThe control-name cases checked only the logical path that inventory\nreports. Extraction writes through SafeOutputTree, so a change that\nrenamed the extracted files would still pass those cases.\n\nExtract `Icon\\r` and `é\\t\\u007F.a`, then compare the reported\nrelative_path, the directory listing, and the file contents. The new\ncases skip on Windows, which refuses these names.\nsafeOutputTree.test.ts covers that refusal.", - "parents": [ - "d13c9f840d36a321a56917e75c48afcb8d72920e" - ], + "parents": ["d13c9f840d36a321a56917e75c48afcb8d72920e"], "authors": [ { "name": "Chaoqi", @@ -11205,17 +9727,13 @@ } } ], - "pullRequests": [ - 2365 - ] + "pullRequests": [2365] }, { "sha": "ab02f3c8d665ead35391c94db74cd0fb0cfed0ed", "subject": "ci: reduce reporter fan-out and preserve shard history", "body": "ci: reduce reporter fan-out and preserve shard history\n", - "parents": [ - "9928f357fb9c420e6384e155d74586dfe37d4533" - ], + "parents": ["9928f357fb9c420e6384e155d74586dfe37d4533"], "authors": [ { "name": "morluto", @@ -11232,9 +9750,7 @@ "sha": "6c816af11975e8e801adb2924c4e3c116c72ebba", "subject": "fix(managed): preserve negative zero in CIL operands (#2437)", "body": "fix(managed): preserve negative zero in CIL operands (#2437)", - "parents": [ - "ab02f3c8d665ead35391c94db74cd0fb0cfed0ed" - ], + "parents": ["ab02f3c8d665ead35391c94db74cd0fb0cfed0ed"], "authors": [ { "name": "Harly", @@ -11245,17 +9761,13 @@ } } ], - "pullRequests": [ - 2437 - ] + "pullRequests": [2437] }, { "sha": "f8e95799f941e9e55e0d47841896b401bab67d29", "subject": "fix(artifacts): preserve NIB field and class identities (#2106)", "body": "fix(artifacts): preserve NIB field and class identities (#2106)", - "parents": [ - "6c816af11975e8e801adb2924c4e3c116c72ebba" - ], + "parents": ["6c816af11975e8e801adb2924c4e3c116c72ebba"], "authors": [ { "name": "Yijie Lu", @@ -11266,17 +9778,13 @@ } } ], - "pullRequests": [ - 2106 - ] + "pullRequests": [2106] }, { "sha": "fe496bd1cf589938c372646ddef8ca9701417bf0", "subject": "docs(website): add essay on reverse engineering models", "body": "docs(website): add essay on reverse engineering models\n\nAdd an English review draft connecting Touhou reconstruction evidence with model specialization, repository knowledge and feedback-driven learning. Preserve model attribution and historical verification scope in supporting notes, and translate the new Blog listing for all existing editions.\n\nValidation: website.py check, focused formatting checks, and 32 Chromium cases covering both preview paths, light/dark themes, responsive layouts, translated indexes and no-JavaScript reading.\n", - "parents": [ - "f8e95799f941e9e55e0d47841896b401bab67d29" - ], + "parents": ["f8e95799f941e9e55e0d47841896b401bab67d29"], "authors": [ { "name": "N0zoM1z0", @@ -11287,17 +9795,13 @@ } } ], - "pullRequests": [ - 2732 - ] + "pullRequests": [2732] }, { "sha": "8583a190c0178374132c888622d693fed1f88a18", "subject": "fix(website): keep omitted language selectors free of whitespace", "body": "fix(website): keep omitted language selectors free of whitespace\n\nIndent the optional language selector with its value so a nonindexable draft does not generate a line containing only spaces. Indexed-page markup is unchanged.\n\nValidation: website.py check passes all 12 maintenance regressions; synchronization changes only the draft header blank line.\n", - "parents": [ - "fe496bd1cf589938c372646ddef8ca9701417bf0" - ], + "parents": ["fe496bd1cf589938c372646ddef8ca9701417bf0"], "authors": [ { "name": "N0zoM1z0", @@ -11308,17 +9812,13 @@ } } ], - "pullRequests": [ - 2732 - ] + "pullRequests": [2732] }, { "sha": "ca07373e44e19e0c8357ac49e460c90d87fcc22c", "subject": "docs(website): improve model essay transitions and narrative flow", "body": "docs(website): improve model essay transitions and narrative flow\n\nConnect the reconstruction cases to the questions about specialization, retrieval and feedback-driven search. Replace fragmented sentence sequences with explicit causal links and smooth the progression into oracle design and the proposed comparison.\n\nValidation: website.py check, formatting, preserved source links and evidence figures, and eight desktop/mobile light/dark layout checks at both preview paths.\n", - "parents": [ - "8583a190c0178374132c888622d693fed1f88a18" - ], + "parents": ["8583a190c0178374132c888622d693fed1f88a18"], "authors": [ { "name": "N0zoM1z0", @@ -11329,17 +9829,13 @@ } } ], - "pullRequests": [ - 2732 - ] + "pullRequests": [2732] }, { "sha": "806ff575676e447c7ba349b6fd185e6e8e02ee5d", "subject": "docs(website): use straight quotes in model essay", "body": "docs(website): use straight quotes in model essay\n\nNormalize the three quoted phrases to straight English quotation marks. Website checks and formatting pass; the local preview serves the revised punctuation.\n", - "parents": [ - "ca07373e44e19e0c8357ac49e460c90d87fcc22c" - ], + "parents": ["ca07373e44e19e0c8357ac49e460c90d87fcc22c"], "authors": [ { "name": "N0zoM1z0", @@ -11350,17 +9846,13 @@ } } ], - "pullRequests": [ - 2732 - ] + "pullRequests": [2732] }, { "sha": "b06751b703181527a320226c4ab7e4cecd5dcea0", "subject": "docs(website): simplify reconstruction evidence in model essay", "body": "docs(website): simplify reconstruction evidence in model essay\n\nExplain each case through the obstacle, useful hypothesis and verified result. Remove byte totals, relocation counts and trial counts from the main narrative; preserve commit references and the constant-value example that explains the oracle defect. Make the experiment table and compiler terminology easier to follow.\n\nValidation: website.py check, formatting, preserved source links, and eight article layout checks across both preview paths and light/dark themes.\n", - "parents": [ - "806ff575676e447c7ba349b6fd185e6e8e02ee5d" - ], + "parents": ["806ff575676e447c7ba349b6fd185e6e8e02ee5d"], "authors": [ { "name": "N0zoM1z0", @@ -11371,17 +9863,13 @@ } } ], - "pullRequests": [ - 2732 - ] + "pullRequests": [2732] }, { "sha": "3d78a57043eb6b92812c71bcb6d83753c3d48036", "subject": "docs(website): publish model essay in all supported languages", "body": "docs(website): publish model essay in all supported languages\n", - "parents": [ - "b06751b703181527a320226c4ab7e4cecd5dcea0" - ], + "parents": ["b06751b703181527a320226c4ab7e4cecd5dcea0"], "authors": [ { "name": "N0zoM1z0", @@ -11392,17 +9880,13 @@ } } ], - "pullRequests": [ - 2732 - ] + "pullRequests": [2732] }, { "sha": "f1f5582ce84f54e529826fef7af3e201f52248d9", "subject": "fix(website): clarify translated evidence and runtime observations", "body": "fix(website): clarify translated evidence and runtime observations\n", - "parents": [ - "3d78a57043eb6b92812c71bcb6d83753c3d48036" - ], + "parents": ["3d78a57043eb6b92812c71bcb6d83753c3d48036"], "authors": [ { "name": "N0zoM1z0", @@ -11413,17 +9897,13 @@ } } ], - "pullRequests": [ - 2732 - ] + "pullRequests": [2732] }, { "sha": "ec3db374574060fcc4fa6b215fceaea1bd4ca3f3", "subject": "fix(native): preserve literal line breaks in signing identifiers (#2107)", "body": "fix(native): preserve literal line breaks in signing identifiers (#2107)\n\n* fix(native): preserve literal line breaks in signing identifiers\n\n* fix(native): infer codesign framing without a matching path", - "parents": [ - "f1f5582ce84f54e529826fef7af3e201f52248d9" - ], + "parents": ["f1f5582ce84f54e529826fef7af3e201f52248d9"], "authors": [ { "name": "Yijie Lu", @@ -11434,17 +9914,13 @@ } } ], - "pullRequests": [ - 2107 - ] + "pullRequests": [2107] }, { "sha": "2995ec6910ead327829378f5ab1b9172ecce33fc", "subject": "fix(ghidra): resolve file offsets in decompile (#2101)", "body": "fix(ghidra): resolve file offsets in decompile (#2101)\n\n* fix(native): expose loaded image bases in overviews\n\n* test(ghidra): retain resources when verifier cleanup fails\n\n* docs(ghidra): spell out file-offset address mapping\n\n* fix(ci): separate and retry NativeAOT dependency restoration\n\n* fix(test): resolve CI script file URLs on Windows\n\n* fix(native): retain conflict observations and actionable CLI guidance\n\n* fix(fixtures): keep NativeAOT retry logs credential-safe\n\n* fix(fixtures): redact authenticated URLs at diagnostic creation\n\n* fix(ghidra): restrict source-coordinate observations to decompilation\n\n* fix(cli): identify conflicting file-offset selectors accurately\n\n* fix(ghidra): bind file offsets to admitted target sources\n\n* fix(ghidra): preserve resolved file-offset failure context\n\n* test(ghidra): verify ELF address and file-offset round trips\n\n* test(nativeaot): align diagnostic regressions with fixture host support", - "parents": [ - "ec3db374574060fcc4fa6b215fceaea1bd4ca3f3" - ], + "parents": ["ec3db374574060fcc4fa6b215fceaea1bd4ca3f3"], "authors": [ { "name": "记得吃中饭", @@ -11455,17 +9931,13 @@ } } ], - "pullRequests": [ - 2101 - ] + "pullRequests": [2101] }, { "sha": "747e7299141cec0b03774c427f579889d5088d20", "subject": "test(release): validate only the selected preflight job", "body": "test(release): validate only the selected preflight job\n\nScope the steps schema to the release job whose preflight is executed, allowing unrelated reusable-workflow jobs such as qualification. Preserve all four valid and invalid metadata execution checks.\n\nReproduced on main ec3db3745: 35 passed, 4 failed. After the fix: 104 release and CI boundary tests pass; check:fast and format:check pass.\n", - "parents": [ - "2995ec6910ead327829378f5ab1b9172ecce33fc" - ], + "parents": ["2995ec6910ead327829378f5ab1b9172ecce33fc"], "authors": [ { "name": "morluto", @@ -11482,9 +9954,7 @@ "sha": "3af8f847f0e35843f51622a136165dd6ee12cdd0", "subject": "ci: fix PR metadata triggers and defer expensive runner work", "body": "ci: fix PR metadata triggers and defer expensive runner work\n", - "parents": [ - "747e7299141cec0b03774c427f579889d5088d20" - ], + "parents": ["747e7299141cec0b03774c427f579889d5088d20"], "authors": [ { "name": "morluto", @@ -11501,9 +9971,7 @@ "sha": "f0f09950f34d96e3b1c62fd04821af5e301f80c7", "subject": "ci: finish main validation and balance complete test costs", "body": "ci: finish main validation and balance complete test costs\n", - "parents": [ - "3af8f847f0e35843f51622a136165dd6ee12cdd0" - ], + "parents": ["3af8f847f0e35843f51622a136165dd6ee12cdd0"], "authors": [ { "name": "morluto", @@ -11520,9 +9988,7 @@ "sha": "9f3f392eb8fe81060b44941ed754521984def3bd", "subject": "ci: bound core job execution time", "body": "ci: bound core job execution time\n\nLimit classification to five minutes, static/build/docs/report jobs to ten minutes, and each portable shard to thirty minutes. The saved successful-job sample peaked at 392 seconds per shard and 61 seconds for other core jobs, leaving generous setup and coverage headroom. Runner queue waiting is unaffected.\n", - "parents": [ - "f0f09950f34d96e3b1c62fd04821af5e301f80c7" - ], + "parents": ["f0f09950f34d96e3b1c62fd04821af5e301f80c7"], "authors": [ { "name": "morluto", @@ -11539,9 +10005,7 @@ "sha": "bd2c202dd930548194cdbc55c27a797f22279db9", "subject": "fix(ci): reject incomplete verification plans", "body": "fix(ci): reject incomplete verification plans\n", - "parents": [ - "9f3f392eb8fe81060b44941ed754521984def3bd" - ], + "parents": ["9f3f392eb8fe81060b44941ed754521984def3bd"], "authors": [ { "name": "morluto", @@ -11558,9 +10022,7 @@ "sha": "c8d861f9764f8c07f0925dae0c6451de85fffd6a", "subject": "ci: scope timing helpers to portable verification", "body": "ci: scope timing helpers to portable verification\n", - "parents": [ - "bd2c202dd930548194cdbc55c27a797f22279db9" - ], + "parents": ["bd2c202dd930548194cdbc55c27a797f22279db9"], "authors": [ { "name": "morluto", @@ -11577,9 +10039,7 @@ "sha": "fa0a9b2d328a07d8ec2924dc224d51c620981dcc", "subject": "ci: observe affected-owner test plans against full results", "body": "ci: observe affected-owner test plans against full results\n", - "parents": [ - "c8d861f9764f8c07f0925dae0c6451de85fffd6a" - ], + "parents": ["c8d861f9764f8c07f0925dae0c6451de85fffd6a"], "authors": [ { "name": "morluto", @@ -11596,9 +10056,7 @@ "sha": "490a285070268aee0ecd50001b9a9a83c1e313f0", "subject": "ci: reuse current-run builds across provider lanes", "body": "ci: reuse current-run builds across provider lanes\n", - "parents": [ - "fa0a9b2d328a07d8ec2924dc224d51c620981dcc" - ], + "parents": ["fa0a9b2d328a07d8ec2924dc224d51c620981dcc"], "authors": [ { "name": "morluto", @@ -11615,9 +10073,7 @@ "sha": "fb28ec1537e2d02aaca96325483c849c5c8ade6f", "subject": "test(apple): keep the same-named slice dyld fixture openable on x64 hosts (#2755)", "body": "test(apple): keep the same-named slice dyld fixture openable on x64 hosts (#2755)\n\nAdd a plain x86_64 slice to the dyld fixture while retaining both same-named arm64e slices and their independent environment assertions.\n\nThe original fixture was rejected by real x64 CLI admission before tracing. The contributing PR's complete Linux CI run passes all 30 jobs, including the portable suite. Codex and Greptile reviews completed without findings; no unresolved threads remain.\n\nThis restores the main test baseline needed for #2635. The change is limited to test data and preserves the original author's contribution.\n\nCo-authored-by: Kaoru0822 <208281322+kaoru0822-kitauji@users.noreply.github.com>", - "parents": [ - "490a285070268aee0ecd50001b9a9a83c1e313f0" - ], + "parents": ["490a285070268aee0ecd50001b9a9a83c1e313f0"], "authors": [ { "name": "Kaoru0822", @@ -11628,9 +10084,7 @@ } } ], - "pullRequests": [ - 2755 - ] + "pullRequests": [2755] } ], "pullRequests": [