From 112a21a5b35a4ee23340caa58368824126552754 Mon Sep 17 00:00:00 2001 From: JJUN99 <146200038+JJUN99@users.noreply.github.com> Date: Tue, 11 Aug 2026 12:27:57 +0900 Subject: [PATCH 1/2] fix(reasoner): store business id as property on DDL-created vertices Vertices created by a rule Action (createNodeInstance) never received an "id" entry in their property map: extractVertex() only used the computed business id to build the internal IVertexId. Any subsequent rule execution that uses such a vertex as a start id then crashes while assembling debug info: java.lang.NullPointerException at LocalRDG.generateStartNodeDebugInfo(LocalRDG.java:1461) // get("id").toString() at LocalRDG.getResult at LocalReasonerRunner.doRun LocalReasonerRunner.run() swallows the Throwable and returns an empty result, so the caller treats it as "0 matches". In the concept-reasoning pipeline this silently drops belongTo classification of generated events and stops leadTo propagation (reproducible with the supplychain example: 47 generated events, 0 classified). Preserve the business id and store it in the vertex property map, which matches how vertices loaded from the warehouse are shaped. Co-Authored-By: Claude Fable 5 --- .../openspg/reasoner/rdg/common/ExtractVertexImpl.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/reasoner/runner/runner-common/src/main/java/com/antgroup/openspg/reasoner/rdg/common/ExtractVertexImpl.java b/reasoner/runner/runner-common/src/main/java/com/antgroup/openspg/reasoner/rdg/common/ExtractVertexImpl.java index 58a8cd6b1..2e662282b 100644 --- a/reasoner/runner/runner-common/src/main/java/com/antgroup/openspg/reasoner/rdg/common/ExtractVertexImpl.java +++ b/reasoner/runner/runner-common/src/main/java/com/antgroup/openspg/reasoner/rdg/common/ExtractVertexImpl.java @@ -75,8 +75,9 @@ public IVertex extractVertex(KgGraph kgGraph) { vertexProps.put(propertyName, value); } IVertexId vertexId; + String bizId; if (vertexProps.containsKey("id")) { - vertexId = IVertexId.from(String.valueOf(vertexProps.get("id")), this.type); + bizId = String.valueOf(vertexProps.get("id")); } else { StringBuilder vertexIdSb = new StringBuilder(); List aliasList = Lists.newArrayList(kgGraph.getVertexAlias()); @@ -84,10 +85,15 @@ public IVertex extractVertex(KgGraph kgGraph) { for (String vertexAlias : aliasList) { vertexIdSb.append(kgGraph.getVertex(vertexAlias).get(0).getId()); } - vertexId = IVertexId.from(vertexIdSb.toString(), this.type); + bizId = vertexIdSb.toString(); } + vertexId = IVertexId.from(bizId, this.type); IVertex willAddedVertex = new Vertex<>(vertexId, getVertexProperty(vertexId, this.version, context)); + // DDL-created vertices must carry their business id as the "id" property; a + // follow-up rule run that uses this vertex as a start id would otherwise die + // with an NPE in LocalRDG.generateStartNodeDebugInfo (get("id").toString()) + willAddedVertex.getValue().put("id", bizId); Map>> alias2VertexMap = new HashMap<>(); alias2VertexMap.put(this.alias, Sets.newHashSet(willAddedVertex)); From aba5fd05ebcd8c0648ead07bd1f1c670dbfa801d Mon Sep 17 00:00:00 2001 From: JJUN99 <146200038+JJUN99@users.noreply.github.com> Date: Tue, 11 Aug 2026 12:49:46 +0900 Subject: [PATCH 2/2] chore: retrigger CI (license check hit a transient dependency download error)