Repository navigation
Conversation
Member signature blobs name types by TypeDef/TypeRef row, and rows are build-local. compare_managed_members keyed every round on the raw blob digest, so a member whose signature names a type that moved rows between builds was reported removed and added, and identical bytes naming different types paired as unchanged. inspect_managed_members now reports signature.resolved_sha256: the raw blob with each TypeDef or TypeRef operand replaced by a digest of the type's namespace-qualified name, nested types after their enclosing types. Comparison uses it in every round, in ownerless signature contention, and in the signature checks, and falls back to raw digests on both sides when either observation predates the field.
An undecodable blob can hold another signature's resolved preimage, so its raw digest equalled that resolved digest and the two paired. Keys now tag each digest as resolved or raw. Nested type names were rebuilt per operand over the whole enclosing chain. Each row is now digested once, chained from its enclosing type's digest, and nesting deeper than 64 levels is not named. An observation without signatures no longer reports missing resolved digests, and the docs state that TypeDefs and TypeRefs of one full name compare equal.
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
|
A walk that reached the nesting cap remembered only its starting row, so other deep types sharing its parents read and charged those rows again. Cache row reads apart from digests, so every row is read and charged once whatever its digest turns out to be.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: e0aed425f5
ℹ️ About Codex in GitHub
Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".
A decoded signature whose type operand REA could not name compares by raw bytes, which name types by build-local row. Among resolved signatures such a member, or a same-named member beside one, is now unknown when unmatched, with a limitation, as undecoded ones are. Type name digests hash namespace and name as separate values, so A + B.C no longer equals A.B + C. A TypeDef or TypeRef row in its table that cannot be read is now a coverage issue, once per row; an operand past its table still only goes unnamed, as member operands are not validated.
|
Codex usage limits have been reached for code reviews. Please check with the admins of this repo to increase the limits by adding credits. |
|
CI-fix track: every failure on this run (IDA native admission, the JavaScript semantic and Electron tests, |
|
Codex usage limits have been reached for code reviews. Please check with the admins of this repo to increase the limits by adding credits. |
Co-authored-by: Kaoru0822 <[email protected]>
Keep unresolved current signatures distinct from historical Evidence. Preserve malformed nesting and scope reasons while sharing TypeDef, TypeRef and NestedClass facts across display and signature consumers. Co-authored-by: Kaoru0822 <[email protected]>
Co-authored-by: Kaoru0822 <[email protected]>
|
Codex usage limits have been reached for code reviews. Please check with the admins of this repo to increase the limits by adding credits. |
|
CI The source failure is upstream and is not patched in this managed-signature PR. Build, static checks, docs generation and bundled Windows controls have passed; remaining jobs are still running. The separate author-readiness status is pending while this PR is a draft awaiting a real human ownership/review declaration under the newly added repository rule. |
Validate cached scalar scope facts without loading every ancestor name. Keep over-depth references unresolved while retaining the rest of the inspection. Apply signature uncertainty to known partial signature forms and remove the superseded raw-buffer parameter. Co-authored-by: Kaoru0822 <[email protected]>
Preserve main’s shared TypeDef member-list facts alongside signature name resolution and its bounded TypeRef owner. Co-authored-by: Kaoru0822 <[email protected]>
Co-authored-by: Kaoru0822 <[email protected]>
|
Codex usage limits have been reached for code reviews. Please check with the admins of this repo to increase the limits by adding credits. |
Reuse the NestedClass owner from morluto#3059 and retain resolved signature comparison and shared member-list facts. Co-authored-by: Kaoru0822 <[email protected]>
Member comparison decided the cil and exception-shape dimensions from il_sha256, normalized_il_sha256 and exception class tokens, which all keep build-local metadata rows. Two builds of the same source therefore reported nearly every method as changed once any referenced row moved: Terraria.IO.WorldFile in the Windows and Linux 1.4.5.8 dedicated servers showed 58 of 58 methods changed, although an independent ECMA-335 reader found every body identical after resolving its tokens. Equal tokens that name different members could also hide a change. Signatures already compare by nominal type names (morluto#3059); method bodies did not. Name each CIL token operand at the producer. A new owner resolves TypeDef and TypeRef operands through the shared type-name digests, TypeSpecs and MethodSpec instantiations through their resolved blobs, fields, methods and member references by owner, name and resolved signature, stand-alone signatures by their resolved signature, and user strings by their code units. Method bodies gain nominal_il_sha256, the raw CIL with each token operand replaced by its framed identity, and typed exception clauses gain class_identity_sha256. Inspections attest cil_operand_resolution: "nominal-v1"; historical Evidence reads back null and keeps the token comparison with an explicit limitation. Resolution runs inside the body's transient admission through a new nested budget scope, and a failure leaves the digest null. Comparison keeps equal raw bytes unchanged, as exact CIL matching and in-place renames require. Where raw bytes differ, equal nominal digests are a renumbering, different ones a cil change, and a missing one leaves the facet unknown with a cil-operand-not-resolved limitation. Exception classes compare the same way. Tests whose changed CIL named rows that do not exist now name a different existing member. Validation: typecheck, lint, docs, evidence, MCP catalog and format checks pass; 577 source tests and 356 boundary, MCP, CLI, acceptance and composition tests pass; the new cross-build tests fail without this change. Real target, static managed provider only, no target execution: across WorldFile, NetMessage, MessageBuffer, Netplay, Lighting, Chest, Utils and Program, about 420 renumbering-only changes become unchanged. The three remaining changes (Netplay.OpenPort, Netplay.ClosePort and Program..cctor) match differences the independent reader also found. Selected WorldFile inspection, four runs each: 2.3-2.8 s wall, 3.4-3.9 s CPU and 454-458 MiB peak RSS before and after; output grows 0.15% (904,030 to 905,342 tokens). Whole-assembly comparison peak RSS grows from about 487 to 495 MiB. Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_011zrx1eTLcxLxT6i92FH6Ki
Member comparison decided the cil and exception-shape dimensions from il_sha256, normalized_il_sha256 and exception class tokens, which all keep build-local metadata rows. Two builds of the same source therefore reported nearly every method as changed once any referenced row moved: Terraria.IO.WorldFile in the Windows and Linux 1.4.5.8 dedicated servers showed 58 of 58 methods changed, although an independent ECMA-335 reader found every body identical after resolving its tokens. Equal tokens that name different members could also hide a change. Signatures already compare by nominal type names (morluto#3059); method bodies did not. Name each CIL token operand at the producer. A new owner resolves TypeDef and TypeRef operands through the shared type-name digests, TypeSpecs and MethodSpec instantiations through their resolved blobs, fields, methods and member references by owner, name and resolved signature, stand-alone signatures by their resolved signature, and user strings by their code units. Method bodies gain nominal_il_sha256, the raw CIL with each token operand replaced by its framed identity, and typed exception clauses gain class_identity_sha256. Inspections attest cil_operand_resolution: "nominal-v1"; historical Evidence reads back null and keeps the token comparison with an explicit limitation. Resolution runs inside the body's transient admission through a new nested budget scope, and a failure leaves the digest null. Comparison keeps equal raw bytes unchanged, as exact CIL matching and in-place renames require. Where raw bytes differ, equal nominal digests are a renumbering, different ones a cil change, and a missing one leaves the facet unknown with a cil-operand-not-resolved limitation. Exception classes compare the same way. Tests whose changed CIL named rows that do not exist now name a different existing member. Validation: typecheck, lint, docs, evidence, MCP catalog and format checks pass; 577 source tests and 356 boundary, MCP, CLI, acceptance and composition tests pass; the new cross-build tests fail without this change. Real target, static managed provider only, no target execution: across WorldFile, NetMessage, MessageBuffer, Netplay, Lighting, Chest, Utils and Program, about 420 renumbering-only changes become unchanged. The three remaining changes (Netplay.OpenPort, Netplay.ClosePort and Program..cctor) match differences the independent reader also found. Selected WorldFile inspection, four runs each: 2.3-2.8 s wall, 3.4-3.9 s CPU and 454-458 MiB peak RSS before and after; output grows 0.15% (904,030 to 905,342 tokens). Whole-assembly comparison peak RSS grows from about 487 to 495 MiB. Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_011zrx1eTLcxLxT6i92FH6Ki
compare-managed-memberstreated build-local TypeDef/TypeRef row numbers as signature identity. On Microsoft's .NET 8.0.31 and 10.0.7System.Collections.Immutable.dll, the sameImmutableArrayExtensions.Selectsignature appeared as removed and added. It now pairs by its declared type, name and resolved signature, reporting the observed CIL change.This fixes the existing execution-free managed comparison. No linked issue: the original author reproduced the defect with real assemblies. Original contributor history is retained.
The signature digest frames namespace, name and enclosing names separately, replaces each type operand with its name digest, and tags resolved and raw comparison keys apart. TypeDef and NestedClass facts have one parser; display names and signature digests share cached TypeRef facts and scope validation. Repeated operands reuse those facts within each inspection, under the existing representation budget.
Current inspection records
signature_resolution: "type-names-v1"independently of successful resolution. Missing/malformed rows and invalid scopes retain their reasons; unresolved signatures stay unknown even when all members are unresolved or identical raw row bytes refer to different TypeSpec contents. Known CIL/flag changes remain observable. Summary and page contracts preserve the attestation. Historical Evidence defaults it to null and retains the explicitly limited raw comparison behavior.Resolution covers nominal namespace/name/nesting. Defining assemblies and CLR runtime identity are not established; comparison returns that limitation inline when names are used. TypeSpec resolution, full runtime equivalence and tightening existing structural remap heuristics remain outside this fix. Nesting beyond 64 levels remains explicitly unresolved.
Current head
00ce07d2c6a4babc73a37d2cbcb158b0fad721bdmerges main3b79af28e80785afce9f5998d8f03289402a1847(6.5.0). No managed product files changed in this refresh; dependency versions are unchanged. Refresh validation: 462 tests pass across the 30-file group (including all 435 managed-related tests, Hopper doctor and DSH lifecycle); the CLI closed-filter case exceeds its existing 3-second deadline. The same exact case also fails on clean main3b79af28eunder the same two-CPU guard (27 other controls pass). No timeout or product change is made. Current-headcheck:fastpasses; peak sampled RSS is 4,364 MiB, with no guard stop. The detailed real-assembly measurements below remain pinned to the preceding tested head; managed product source is unchanged by this refresh.Current-head CI
38568651925completed successfully: all five shards, Source tests, static checks, build, documentation, bundled Windows controls, Linux native package baseline and CI required passed. Greptile reports 5/5 for00ce07d2c, with no unresolved review threads. The real Microsoft DLL CLI comparison and eight selected-member SDK MCP calls were rerun on this head and pass with unchanged target digests; CLI output sizes remain unchanged, and MCP peak sampled RSS is 686 MiB.The human owner explicitly confirmed the three initial readiness declarations. The readiness workflow still reports pending because the base repository commit-association endpoint omits this fork head, although the canonical paginated open-PR inventory confirms it. No commit status is manually overridden. Current branch protection/ruleset reads show no required readiness enforcement; an independent repair is prepared separately, subject to approval.
Validation on
7695d2a291d665d1fb4eab35902fc2d01e4ce531, refreshed onto main44d98de2367b99808d78db732ec7d72533266233:1f42e7410and passes after sharing the reference owner.check:fast(typecheck/lint), generated documentation checks, five README consistency tests andgit diff --checkpass.System.Reflection.Metadatareader confirms equalSelectsignatures with different raw digests. Actual public CLI comparison gives removed/added before and one changed pair after; target digests remain unchanged. Assemblies are read, not loaded or executed as target code. No native analysis provider is claimed.o200k_baseoutput tokens. This full inventory remains large; the probe captures it locally instead of returning it to an agent.All heavy checks use two CPUs and an 8 GiB sampled process-family RSS guard; observed peak is 4,592 MiB during static checking, with no guard stop or OOM. Summed sampled RSS is not PSS or a hard cgroup limit. No binaries, generated outputs or local probe artifacts are committed.
A reviewer found that the shared TypeRef scope walk eagerly loaded ancestor names before the 64-level naming cap. The production-path 10,000-row / shared 2-KiB-name regression reproduces the 64-MiB budget failure on
282603c1b. Commit63d37bd0ccaches scalar row facts separately and loads names only on request; the same reference remains unresolved while the whole inspection retains its fields and complete metadata coverage. A second regression preserves uncertainty for a partially decoded field whose TypeSpec operand remains unresolved. Both regressions and the complete related suite pass on the current merged head; main's new shared member-list owner is preserved.CI
38547997168completed on7695d2a: Source tests, build, static checks, docs, bundled Windows controls, Linux native package baseline and shards 1/2/4/5 passed. Shard 3 and Portable failed three cases: configured Hopper doctor, a 3-second CLI output-filter deadline, and a 30-second DSH lifecycle deadline. Portable reports 14,566 pass / 3 fail / 126 skip. The Hopper assertion independently fails on clean base44d98de23; neither its producer nor test changes here.The timing failures are retained, not claimed fixed or fully attributed to CI. On the same two-CPU host, clean main's 27 CLI/DSH cases pass; the PR's grouped run has two CLI timeouts while DSH passes (20.8 s versus main 24.5 s). The exact output-filter case passes in isolation on both (PR 2.749 s / main 2.689 s); the PR's additional 60-second valued-flags timeout passes in isolation at 10.581 s. No test deadlines or unrelated product code were changed. No deterministic PR-induced slowdown is established by these controls; the broader timing condition remains unclassified.
All four actionable review threads have verified replies and are resolved. The preceding
282603c1bGreptile summary is 5/5; a fresh scored review of7695d2ais not yet recorded. The PR remains a draft awaiting genuine human ownership and initial-readiness declarations under the new repository policy. Required CI is red; no merge or bypass is attempted. Earlier failed attempts, skipped lanes and current gaps remain explicit.Author readiness
Human owner: @N0zoM1z0