Skip to content

docs(changelog): the two entries missing from #1792 and #1793 - #1809

Open
lmeyerov wants to merge 1 commit into
masterfrom
audit/unapproved-merge-remediation
Open

docs(changelog): the two entries missing from #1792 and #1793#1809
lmeyerov wants to merge 1 commit into
masterfrom
audit/unapproved-merge-remediation

Conversation

@lmeyerov

Copy link
Copy Markdown
Contributor

Remediation from the audit of the six merges that landed without recorded approval (#1782, #1783, #1784, #1790, #1792, #1793). Docs only — no code touched.

What the audit found, in one line

No correctness regression in any of the six. 707/707 non-cypher differential cases (12 random graphs × 14 chain shapes × {pandas, polars} × {scan, index_policy="force"}, with duplicate node keys, dangling edges and null-carrying columns) are byte-identical between 84be35fb (pre-stack) and 233b64c8; the 37 that differ are #1793 fixing a real bug, reproduced independently. The defects are in process, not in behaviour.

What this PR fixes

The two missing CHANGELOG entries. #1793 is the one that matters — it fixes a silent wrong answer that is user-visible on every engine, and it was the highest-value entry of the six.

Reproduced on the pre-fix tree so the entry states a measured effect rather than a description:

MATCH (a {grp:1}) WITH a MATCH (a)-[]->(b) RETURN count(*)
MATCH (a)-[]->(b) RETURN count(*)          # same graph object
seed correct got (pre-fix)
0 134 60
1 136 69
2 143 61
3 129 88

On polars the poisoned graph then raised NotImplementedError for every subsequent query — a failed query left the user's object broken. Both fixed on master; neither written down.

#1792's graphviz half (KeyError: None → an actionable ValueError on a bound-but-unlabelled frame) is smaller but is still a user-facing error-message change, so it gets an entry too.

Deliberately NOT included

The audit also flagged #1792's dtype: objectdtype: DType as a typing widening (DType = Any, strictly weaker than object; mypy is indifferent between them here — verified by running both). I am not reverting it. graphistry/compute/typing.py declares DType as the repo's engine-agnostic dtype alias, with the comment "Honestly Any — the concrete type is engine-dependent", and these parameters do receive pandas/cuDF/polars dtypes. So the named alias is the documented convention even though it checks as Any. Reverting on the audit's reading would churn against a stated convention on a judgement call that belongs to the owner — reported here rather than silently decided.

Other audit findings, filed separately rather than bundled

Runtime delta: zero

One file changed, and it is CHANGELOG.md. Per CB5 no pyg-bench lane run is required, and that is checkable from the diff.

🤖 Generated with Claude Code

https://claude.ai/code/session_015YsqAZQLbqjSDrYSFz2GoB

Both landed without a CHANGELOG entry. #1793 is the one that matters: it fixes a
SILENT WRONG ANSWER that is user-visible on every engine.

Reproduced on the pre-fix tree while auditing the merge, so the entry states a
measured effect rather than a description: `MATCH (a {grp:1}) WITH a MATCH
(a)-[]->(b) RETURN count(*)` followed by a plain `MATCH (a)-[]->(b) RETURN
count(*)` on the SAME graph object returned 60 instead of 134, 69 instead of 136
and 61 instead of 143 across seeds. On polars the poisoned graph then raised
`NotImplementedError` for EVERY subsequent query — a failed query left the
user's object broken. Both are fixed on master; neither was written down.

#1792's graphviz half (`KeyError: None` -> an actionable `ValueError` on a
bound-but-unlabelled frame) is smaller but is still a user-facing error-message
change, so it gets an entry too.

DOCS ONLY: no code touched, so runtime delta is zero and no pyg-bench lane run
is required (CB5) — checkable from the diff, which is one file.

NOT INCLUDED, deliberately. The audit also flagged #1792's `dtype: object` ->
`dtype: DType` as a typing WIDENING (`DType = Any`, which is strictly weaker
than `object`, and mypy is indifferent between them here — verified). I am not
reverting it: `graphistry/compute/typing.py` declares `DType` as the repo's
engine-agnostic dtype alias with the comment "Honestly Any -- the concrete type
is engine-dependent", and these parameters do receive pandas/cuDF/polars dtypes,
so the named alias is the documented convention even though it checks as `Any`.
Reverting on the audit's reading would churn against a stated convention on a
judgement call that belongs to the owner. Reported, not silently decided.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015YsqAZQLbqjSDrYSFz2GoB
@lmeyerov
lmeyerov force-pushed the audit/unapproved-merge-remediation branch from a56f998 to aa76348 Compare July 28, 2026 03:01
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.

1 participant