Skip to content

chore: sync upstream v8 (3 commits) and renumber the fork's unreleased section to 0.9.35 - #36

Merged
filipechagas merged 4 commits into
v8from
chore/sync-upstream-v8
Aug 6, 2026
Merged

chore: sync upstream v8 (3 commits) and renumber the fork's unreleased section to 0.9.35#36
filipechagas merged 4 commits into
v8from
chore/sync-upstream-v8

Conversation

@filipechagas

Copy link
Copy Markdown
Collaborator

Pulls upstream v8 (Graphify-Labs) into the fork — the three commits upstream merged since the fork's base, plus the version-collision resolution.

Upstream commits brought in

Version-collision resolution (flagged for maintainer review)

Both sides claimed 0.9.34: upstream released it (tag v0.9.34), while the fork's CHANGELOG carried its own large unreleased 0.9.34 section (all of this week's PHP + isolation work). Resolution: the fork's unreleased section is renumbered to 0.9.35 with pyproject following, upstream's released 0.9.34 section sits below it dated from the tag (2026-08-05). The 0.9.35 bump also rolls the version-namespaced AST cache, which the fork's own changelog notes is required after the raw-call field changes.

Merge verification

Three layers, no hand-waving: blob identity for every single-side file (17 fork-only including extract.py/extractors/php.py, 48 upstream-only — zero mismatches); diff-of-diffs on both-touched files (engine.py, cli.py, CHANGELOG.md — every hunk traced to exactly one parent except the two hand-resolved ones); AST-level function extraction for the C# region proving _csharp_method_receiver_types / _csharp_scoped_receiver_type are byte-identical to upstream and untouched by the fork's resolver-scoping work (which lives in resolution.py, untouched by upstream).

Test evidence

  • Fork baseline at branch point (5517334, incl. PR feat(php): positive alias binding via declared FQNs + incremental parity marker (#22, #23) #35): 4124 passed / 36 skipped.
  • After merge: 4167 passed / 36 skipped / 0 failed — arithmetic fully reconciled (+24 upstream plain tests, +19 parametrized expansions, −0).
  • Upstream's own suites run explicitly (C#, path CLI, serve, hyperedge ×2, merge-graphs CLI, export, community labels): 246 passed. Fork PHP suites: 148 passed.
  • Independently reproduced twice by the orchestrator (pre- and post-fold): 4167/36.

🤖 Generated with Claude Code

safishamsi and others added 4 commits August 5, 2026 22:08
…bind can't drop a true call (Graphify-Labs#2472)

Track C# receiver types per lexical declaration scope (byte ranges) and
resolve by the call's position, instead of a method-wide flat table that
poisoned a name on any None-typed binding. A typed static local-function
parameter now keeps resolving even when an out var reuses the name in the
enclosing body. Fixes a regression from Graphify-Labs#2346; Graphify-Labs#2299 cross-method
independence and field-conflict poisoning are unchanged.

Thanks @JensD-git for the bisect and repro.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Graphify-Labs#2487)

graphify path and the MCP shortest_path tool now build a digraph from the
true _src/_tgt directions and respect edge direction by default, so a
returned path no longer traverses edges backwards. --undirected (CLI) /
undirected=true (MCP) opt out; no directed path is reported plainly
instead of silently returning a reversed one.

Thanks @luliaz0601.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ls; bump to 0.9.34

Graphify-Labs#2486 (thanks @adminwat): normalize dict-shaped hyperedge members to ids
(or drop with a warning) so a malformed hyperedge can't abort a completed
merge with a TypeError.
Graphify-Labs#2484 (thanks @sortakool; approach from @oleksii-tumanov's Graphify-Labs#1691):
merge-graphs relabels hyperedge member ids and ids with the repo prefix,
unions both inputs' hyperedges instead of clobbering, and writes both
persistence slots.
Graphify-Labs#2485 (thanks @sortakool): build_from_json reads hyperedges from the
top-level and nested slots; a full validation wipeout is reported loudly.
Graphify-Labs#2490 (thanks @PapiScholz): the skill Step-5 flow passes curated
community_labels to to_json, so graph.json ships community_name.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Brings in the three upstream commits since the fork point 4e7e6b1:

- e300587 fix(csharp): scope receiver types per declaration so an untypeable
  rebind can't drop a true call (Graphify-Labs#2472)
- 94ebee1 fix(path): respect edge direction by default in path and
  shortest_path (Graphify-Labs#2487)
- 07b9143 fix(hyperedge,skill): merge/load hyperedge integrity + community
  labels; bump to 0.9.34

Conflicts resolved (3 files, all in regions both sides edited):

* CHANGELOG.md — both sides opened a `## 0.9.34 (unreleased)` section.
  Upstream RELEASED 0.9.34 (tag v0.9.34 at 07b9143), so upstream's section
  keeps that number and its six bullets verbatim, and the fork's own
  unreleased section is renumbered to 0.9.35. pyproject.toml follows to
  0.9.35 for the same reason. The AST-cache bullet now names 0.9.35 as the
  bump that rolls `graphify-out/cache/ast/v{version}/`.
  Upstream's own 0.9.34 header read "(unreleased)" despite the tag, which
  would have left two "(unreleased)" sections stacked here; it is dated
  `2026-08-05` from the tag itself (`git log -1 --format=%ci v0.9.34` ->
  2026-08-05 22:08:29 +0100), matching the date upstream stamped on 0.9.33
  in that same commit. Header text only — every upstream bullet is
  byte-identical to theirs.
  FLAGGED FOR MAINTAINER REVIEW: the 0.9.35 renumber is a fork-side
  decision, not something upstream asked for.

* graphify/extractors/engine.py — two comment/type-annotation regions.
  `walk_calls`'s `receiver_types` parameter now types all three shapes: Java's
  flat name -> short type, C#'s (scoped bindings, field base) tuple from
  Graphify-Labs#2472, and PHP's flat name -> (short, qualified) pair. The
  `receiver_types_by_body` merge unions all three per-method tables.
  No behavior change on either side: the C# stamp site reads upstream's
  positional `_csharp_scoped_receiver_type`, and the PHP stamp site reads
  the fork's pair-valued table, exactly as each parent wrote them.

Verified byte-for-byte against both parents: every file touched by only one
side is blob-identical to that side, and for the three both-touched files the
diff-of-diffs against each parent's own contribution is empty outside the
resolved regions above. `_csharp_method_receiver_types` (7643 bytes) and the
new `_csharp_scoped_receiver_type` (1235 bytes) match upstream exactly; the
fork never touched them.

Suite: 4167 passed, 36 skipped, 0 failed
(fork baseline at 5517334 was 4124 passed / 36 skipped; upstream adds 24
plain tests plus two parametrized ones expanding over 16 skill bodies and 3
core fragments = +43).
@filipechagas
filipechagas merged commit ff970bb into v8 Aug 6, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants