Skip to content

feat(schema): body nodes and parameters carry their id in analysis.json - #180

Merged
rahlk merged 1 commit into
mainfrom
feat/issue-176-body-node-id
Sep 5, 2026
Merged

feat(schema): body nodes and parameters carry their id in analysis.json#180
rahlk merged 1 commit into
mainfrom
feat/issue-176-body-node-id

Conversation

@rahlk

@rahlk rahlk commented Sep 5, 2026

Copy link
Copy Markdown
Contributor

Closes #176. Spec: codellm-devkit/.github docs/design/specs/2026-09-05-body-node-id-in-analysis-json.md (epic codellm-devkit/.github#56).

BodyNode.id is the global ordinal <callable-id>@<local> the Neo4j projection already merges :PyBodyNode on, present at every level the node exists. PyCallableParameter.id is <callable-id>@formal_in:<i> for position i, the level-4 vertex that carries it. The @ rule now lives once in schema/ids.py:global_ordinal; IdentityMap.global_id and the projector delegate to it. One stamp pass runs at the end of each body emitter (L1, L3, L4).

Additive. schema_version and the graph contract unchanged.

Gates: pytest 474 passed, 8 skipped. L1⊆L2⊆L3⊆L4 on a fixture. Diff against 1.4.0 output on the same fixture: only id keys added. New tests: L1 stamp, L3 body-id/merge-key parity, L4 parameters[i].id == body["@formal_in:i"].id with of == name.

`BodyNode.id` is the global ordinal `<callable-id>@<local>` the Neo4j
projection already merges `:PyBodyNode` on; `PyCallableParameter.id` is
`<callable-id>@formal_in:<i>` for position i, the level-4 formal_in vertex
that carries it. The `@`-rule now lives once in `schema/ids.py` and both
`IdentityMap.global_id` and the projector delegate to it; a single stamp
pass runs at the end of each body emitter (L1, L3, L4).

Additive; schema_version and the graph contract are unchanged.

Closes #176
@rahlk
rahlk merged commit 21e5b40 into main Sep 5, 2026
@rahlk
rahlk deleted the feat/issue-176-body-node-id branch September 5, 2026 23:00
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.

BodyNode carries no id, though the Neo4j projection mints one for every body node

1 participant