feat(neighbors): navigate OVERRIDDEN_BY.* composed edge types in one call#189
Merged
Merged
Conversation
…call Wire override-axis dot-keys through stored [:OVERRIDES] dispatch hops so describe edge_summary counts match neighbors traversal (merge-blocking parity). Co-authored-by: Cursor <cursoragent@cursor.com>
HumanBean17
commented
May 20, 2026
Owner
Author
HumanBean17
left a comment
There was a problem hiding this comment.
Critical review
Verdict: Solid, plan-aligned implementation. Approve with comments — the main concern is describe/traversal using different dispatch logic, not test or doc gaps in this PR.
What works well
- Contract symmetry (#162 / #165): Four
OVERRIDDEN_BY*keys are validedge_types; results echo the dot-key; composed rows carryvia_id; baseOVERRIDDEN_BYhas empty attrs; mixedDECLARES.*+OVERRIDDEN_BY.*fail fast with axis-specific messages. - Read-path design:
override_axis_traversal_formirrorsmember_edge_traversal_for(untyped[e]+label(e)filter), uses stored[:OVERRIDES]for dispatch, and exportsOVERRIDE_AXIS_COMPOSED_EDGE_TYPESfor partition logic. - Tests: Base hop parity (
out/OVERRIDDEN_BY≡in/OVERRIDES), merge-blockingedge_summary↔neighborscounts, origin gates, hint single-call templates. - Docs/MCP: README, AGENT-GUIDE, EDGE-NAVIGATION,
server.pydescriptions aligned; stored vs virtual direction documented.
High — describe counts vs traversal use different dispatch logic
| Path | Dispatch hop |
|---|---|
describe → override_axis_rollup_for |
IMPLEMENTS|EXTENDS + signature |
neighbors → override_axis_traversal_for |
stored [:OVERRIDES] |
Parity tests prove equality on fixtures only. On a partial/stale index, describe can advertise out > 0 while neighbors returns fewer rows — agents following edge_summary/hints would see a silent contract break.
Follow-up (not necessarily blocking this PR): align rollup dispatch to stored [:OVERRIDES], add a regression when stored/signature diverge, or document that parity assumes a complete ontology-13+ index.
Medium
- Parity parametrization gap:
test_neighbors_overridden_by_rollup_traversal_parity_blockingdoes not runOVERRIDDEN_BY.DECLARES_CLIENTonoverride_axis_graph(only bank-chat + smoke for other keys). Plan called for smoke on all four. - Gate error UX: Static methods (and constructors) get the same message as wrong node kind (
require a method Symbol origin). Consider “non-static method” / constructor-specific wording. ComposedEdgeTypeliterals still duplicated vskuzu_queriesregistry (#172 follow-up).
Low / nits
- Move propose/plan to completed on merge.
- Default
limit=25can truncate large composed result sets (pre-existing forDECLARES.*); optional doc note.
Pre-merge checklist (optional)
- Ticket or doc the rollup vs traversal dual-path risk
- Add smoke to parity param for
OVERRIDDEN_BY.DECLARES_CLIENTif fixture has non-zero rollup - Sharpen static/constructor rejection messages
No re-index / ontology bump concerns for this read-path change.
override_axis_rollup_for now uses the same [:OVERRIDES] hop as neighbors traversal; sharpen static/constructor gate messages; document parity and pagination; add dispatch alignment regression test. Co-authored-by: Cursor <cursoragent@cursor.com>
1 task
HumanBean17
added a commit
that referenced
this pull request
May 22, 2026
Archive propose, plan, and cursor prompts after PR #189 landed; update status headers and cross-links. Co-authored-by: Cursor <cursoragent@cursor.com>
HumanBean17
added a commit
that referenced
this pull request
May 22, 2026
Archive propose, plan, and cursor prompts after PR #189 landed; update status headers and cross-links. Co-authored-by: Cursor <cursoragent@cursor.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
neighborsaccepts four override-axis composed dot-keys (OVERRIDDEN_BY,OVERRIDDEN_BY.DECLARES_CLIENT,OVERRIDDEN_BY.DECLARES_PRODUCER,OVERRIDDEN_BY.EXPOSES) on non-static method Symbol origins withdirection="out".[:OVERRIDES]for the dispatch hop (not signature Cypher in the read path); composed results echo the dot-key asedge_typeand includevia_idinattrs(except baseOVERRIDDEN_BY).DECLARES.*+OVERRIDDEN_BY.*on one origin; hints/docs/README aligned with describe-time rollups.Implements PR-OVERRIDDEN-BY-1 from
plans/PLAN-OVERRIDDEN-BY-DOT-KEY-TRAVERSAL.md/ propose #165.Test plan
.venv/bin/ruff check .PATH="$(pwd)/.venv/bin:$PATH" .venv/bin/python -m pytest tests -q— 686 passed, 13 skippedpytest tests/test_mcp_v2_compose.py tests/test_mcp_hints.py -k "overridden_by or parity_blocking or mixed_composed"test_neighbors_overridden_by_rollup_traversal_parity_blocking(all four keys; bank-chat + smoke fixture)Manual evidence
ChatAssignmentPort.requestAssignmenton bank-chat fixture:No ontology bump / re-index (read-path only).
Made with Cursor