Skip to content

APOC procedure capability audit (v1.4.3) ​

The v1.4.3 Go APOC library catalog contained 983 names. Its historical list of 118 procedure-only entries is excluded from the optional plugin's scalar function exports; the other 865 entries are scalar functions. The plugin exports 815: 50 registered scalar names belong to the query engine's 52-name native APOC catalog and are left to their native implementations. pkg/apocmeta owns that catalog once; Cypher's function catalog and apoc.PluginFunctionNames both derive from it. The two native catalog names absent from the Go library do not change its export count. All ten native collection functions (toSet, union, intersection, subtract, contains, containsAll, containsAny, indexOf, occurrences and frequencies) are excluded from the real bundled plugin. Removing a false function declaration does not implement its CALL procedure. Genuine scalar functions, including apoc.math.sigmoid, remain function exports and are not promoted to procedures.

Of those 118 historical entries, 16 have a registered native procedure contract (including the new apoc.cypher.doIt); 102 have no bundled procedure declaration. The table names every remaining gap. A registered contract is not certification of full Neo4j/APOC parity. The new doIt read/write, parameter/result, exact-case, and caller-rollback controls were checked independently against the reference. The generic plugin loader accepts canonical cypher.ProcedureHandler and the existing legacy ABI, so a separately implemented procedure plugin can add real contracts. It does not synthesize them from function registrations.

Evidence and classification ​

  • Core procedure/function kinds were queried from Neo4j 5.26.30 Community (sha256:3388e05ee53c8313d01acdf33e63ad175af95a92226dc8551160564439ce2c8c) with APOC Core 5.26.30, JAR SHA-256 4c60fdab264230d60745d31d55d6cb668e66061daba7c5fa6777ed457b49b798. SHOW PROCEDURES returned 190 APOC procedures and SHOW FUNCTIONS 246 APOC functions: 100 of the historical entries were exact procedure matches and none were functions.
  • Fifteen additional procedure kinds are confirmed from official APOC Extended 5.26.4@Procedure declarations in cypher/CypherExtended.java, load/LoadCsv.java, load/LoadDirectory.java, load/LoadHtml.java, load/LoadLdap.java, load/LoadParquet.java, load/jdbc/Jdbc.java, and log/Logging.java. Their kind is a source audit, not a claim that their external services were run.
  • Three historical spellings are mixed-case aliases of actual Core procedures: apoc.import.graphML → apoc.import.graphml, apoc.neighbors.atHop → apoc.neighbors.athop, and apoc.neighbors.toHop → apoc.neighbors.tohop. These aliases are not genuine scalar functions either. Use the reference's canonical spelling when its procedure is available.
  • The NornicDB column comes from the actual initialized native procedure registry on the candidate containing the doIt fix. No optional user procedure plugin was installed for that audit.

Historical 118-entry disposition ​

Historical catalog nameReference kind / canonical spellingBundled NornicDB CALL contract
apoc.algo.aStarCore procedureRegistered native contract
apoc.algo.coverCore procedureNot implemented by bundled runtime/plugin
apoc.algo.dijkstraCore procedureRegistered native contract
apoc.atomic.addCore procedureNot implemented by bundled runtime/plugin
apoc.atomic.concatCore procedureNot implemented by bundled runtime/plugin
apoc.atomic.insertCore procedureNot implemented by bundled runtime/plugin
apoc.atomic.removeCore procedureNot implemented by bundled runtime/plugin
apoc.atomic.subtractCore procedureNot implemented by bundled runtime/plugin
apoc.atomic.updateCore procedureNot implemented by bundled runtime/plugin
apoc.coll.splitCore procedureNot implemented by bundled runtime/plugin
apoc.convert.setJsonPropertyCore procedureNot implemented by bundled runtime/plugin
apoc.convert.toTreeCore procedureNot implemented by bundled runtime/plugin
apoc.create.addLabelsCore procedureNot implemented by bundled runtime/plugin
apoc.create.nodeCore procedureNot implemented by bundled runtime/plugin
apoc.create.nodesCore procedureNot implemented by bundled runtime/plugin
apoc.create.relationshipCore procedureNot implemented by bundled runtime/plugin
apoc.create.removeLabelsCore procedureNot implemented by bundled runtime/plugin
apoc.create.removePropertiesCore procedureNot implemented by bundled runtime/plugin
apoc.create.removeRelPropertiesCore procedureNot implemented by bundled runtime/plugin
apoc.create.setPropertiesCore procedureNot implemented by bundled runtime/plugin
apoc.create.setPropertyCore procedureNot implemented by bundled runtime/plugin
apoc.create.setRelPropertiesCore procedureNot implemented by bundled runtime/plugin
apoc.create.setRelPropertyCore procedureNot implemented by bundled runtime/plugin
apoc.create.uuidsCore procedureNot implemented by bundled runtime/plugin
apoc.create.vNodesCore procedureNot implemented by bundled runtime/plugin
apoc.cypher.doItCore procedureRegistered native contract
apoc.cypher.mapParallelExtended procedureNot implemented by bundled runtime/plugin
apoc.cypher.parallelExtended procedureNot implemented by bundled runtime/plugin
apoc.cypher.runCore procedureRegistered native contract
apoc.cypher.runFileExtended procedureNot implemented by bundled runtime/plugin
apoc.cypher.runManyCore procedureRegistered native contract
apoc.graph.fromCore procedureNot implemented by bundled runtime/plugin
apoc.graph.fromCypherCore procedureNot implemented by bundled runtime/plugin
apoc.graph.fromDataCore procedureNot implemented by bundled runtime/plugin
apoc.graph.fromDocumentCore procedureNot implemented by bundled runtime/plugin
apoc.graph.fromPathCore procedureNot implemented by bundled runtime/plugin
apoc.graph.fromPathsCore procedureNot implemented by bundled runtime/plugin
apoc.import.csvCore procedureNot implemented by bundled runtime/plugin
apoc.import.graphMLCore procedure: apoc.import.graphmlNot implemented by bundled runtime/plugin
apoc.import.jsonCore procedureRegistered native contract
apoc.load.csvExtended procedureRegistered native contract
apoc.load.directoryExtended procedureNot implemented by bundled runtime/plugin
apoc.load.driverExtended procedureNot implemented by bundled runtime/plugin
apoc.load.htmlExtended procedureNot implemented by bundled runtime/plugin
apoc.load.jdbcExtended procedureNot implemented by bundled runtime/plugin
apoc.load.jdbcUpdateExtended procedureNot implemented by bundled runtime/plugin
apoc.load.jsonCore procedureRegistered native contract
apoc.load.jsonArrayCore procedureRegistered native contract
apoc.load.jsonParamsCore procedureNot implemented by bundled runtime/plugin
apoc.load.ldapExtended procedureNot implemented by bundled runtime/plugin
apoc.load.parquetExtended procedureNot implemented by bundled runtime/plugin
apoc.load.xmlCore procedureNot implemented by bundled runtime/plugin
apoc.lock.allCore procedureNot implemented by bundled runtime/plugin
apoc.lock.nodesCore procedureNot implemented by bundled runtime/plugin
apoc.log.debugExtended procedureNot implemented by bundled runtime/plugin
apoc.log.errorExtended procedureNot implemented by bundled runtime/plugin
apoc.log.infoExtended procedureNot implemented by bundled runtime/plugin
apoc.log.streamCore procedureNot implemented by bundled runtime/plugin
apoc.log.warnExtended procedureNot implemented by bundled runtime/plugin
apoc.meta.dataCore procedureNot implemented by bundled runtime/plugin
apoc.meta.graphCore procedureNot implemented by bundled runtime/plugin
apoc.meta.graphSampleCore procedureNot implemented by bundled runtime/plugin
apoc.meta.nodeTypePropertiesCore procedureNot implemented by bundled runtime/plugin
apoc.meta.relTypePropertiesCore procedureNot implemented by bundled runtime/plugin
apoc.meta.schemaCore procedureNot implemented by bundled runtime/plugin
apoc.meta.statsCore procedureNot implemented by bundled runtime/plugin
apoc.meta.subGraphCore procedureNot implemented by bundled runtime/plugin
apoc.neighbors.atHopCore procedure: apoc.neighbors.athopNot implemented by bundled runtime/plugin
apoc.neighbors.toHopCore procedure: apoc.neighbors.tohopRegistered native contract
apoc.nodes.collapseCore procedureNot implemented by bundled runtime/plugin
apoc.nodes.cyclesCore procedureNot implemented by bundled runtime/plugin
apoc.nodes.deleteCore procedureNot implemented by bundled runtime/plugin
apoc.nodes.getCore procedureNot implemented by bundled runtime/plugin
apoc.nodes.groupCore procedureNot implemented by bundled runtime/plugin
apoc.nodes.linkCore procedureNot implemented by bundled runtime/plugin
apoc.path.expandConfigCore procedureRegistered native contract
apoc.path.spanningTreeCore procedureRegistered native contract
apoc.path.subgraphAllCore procedureRegistered native contract
apoc.path.subgraphNodesCore procedureRegistered native contract
apoc.periodic.cancelCore procedureNot implemented by bundled runtime/plugin
apoc.periodic.commitCore procedureRegistered native contract
apoc.periodic.countdownCore procedureNot implemented by bundled runtime/plugin
apoc.periodic.iterateCore procedureRegistered native contract
apoc.periodic.listCore procedureNot implemented by bundled runtime/plugin
apoc.periodic.repeatCore procedureNot implemented by bundled runtime/plugin
apoc.periodic.submitCore procedureNot implemented by bundled runtime/plugin
apoc.periodic.truncateCore procedureNot implemented by bundled runtime/plugin
apoc.refactor.cloneNodesCore procedureNot implemented by bundled runtime/plugin
apoc.refactor.cloneSubgraphCore procedureNot implemented by bundled runtime/plugin
apoc.refactor.cloneSubgraphFromPathsCore procedureNot implemented by bundled runtime/plugin
apoc.refactor.collapseNodeCore procedureNot implemented by bundled runtime/plugin
apoc.refactor.deleteAndReconnectCore procedureNot implemented by bundled runtime/plugin
apoc.refactor.extractNodeCore procedureNot implemented by bundled runtime/plugin
apoc.refactor.fromCore procedureNot implemented by bundled runtime/plugin
apoc.refactor.mergeNodesCore procedureNot implemented by bundled runtime/plugin
apoc.refactor.mergeRelationshipsCore procedureNot implemented by bundled runtime/plugin
apoc.refactor.normalizeAsBooleanCore procedureNot implemented by bundled runtime/plugin
apoc.refactor.setTypeCore procedureNot implemented by bundled runtime/plugin
apoc.schema.assertCore procedureNot implemented by bundled runtime/plugin
apoc.schema.nodesCore procedureNot implemented by bundled runtime/plugin
apoc.schema.relationshipsCore procedureNot implemented by bundled runtime/plugin
apoc.search.nodeCore procedureNot implemented by bundled runtime/plugin
apoc.search.nodeAllCore procedureNot implemented by bundled runtime/plugin
apoc.search.nodeReducedCore procedureNot implemented by bundled runtime/plugin
apoc.stats.degreesCore procedureNot implemented by bundled runtime/plugin
apoc.text.phoneticDeltaCore procedureNot implemented by bundled runtime/plugin
apoc.trigger.addCore procedureNot implemented by bundled runtime/plugin
apoc.trigger.dropCore procedureNot implemented by bundled runtime/plugin
apoc.trigger.installCore procedureNot implemented by bundled runtime/plugin
apoc.trigger.listCore procedureNot implemented by bundled runtime/plugin
apoc.trigger.pauseCore procedureNot implemented by bundled runtime/plugin
apoc.trigger.removeCore procedureNot implemented by bundled runtime/plugin
apoc.trigger.removeAllCore procedureNot implemented by bundled runtime/plugin
apoc.trigger.resumeCore procedureNot implemented by bundled runtime/plugin
apoc.trigger.showCore procedureNot implemented by bundled runtime/plugin
apoc.util.sleepCore procedureNot implemented by bundled runtime/plugin
apoc.util.validateCore procedureNot implemented by bundled runtime/plugin
apoc.warmup.runCore procedureNot implemented by bundled runtime/plugin

Go handler binding is a separate question ​

The typed invoker removes the 18-signature dispatcher ceiling and checks arity, conversions, nulls, numeric bounds, returned errors, cancellation and panics. It accepts the reported scalar/list/map signatures. This is not a claim that all 983 library entries implement portable Cypher or Neo4j APOC semantics.

For example, this actual catalog contains the following Go callback/function contracts. Standard Bolt/HTTP Cypher values cannot supply callbacks or carry function results; these need explicit adapters/capability implementations:

Catalog entryGo signature
apoc.coll.partitionfunc([]interface {}, func(interface {}) bool) [][]interface {}
apoc.import.batchfunc([]interface {}, int, func([]interface {}) error) (*apocimport.ImportResult, error)
apoc.import.filterfunc([]interface {}, func(interface {}) bool) []interface {}
apoc.import.transformfunc([]interface {}, func(interface {}) interface {}) []interface {}
apoc.json.filterfunc(string, func(interface {}) bool) string
apoc.json.mapfunc(string, func(interface {}) interface {}) string
apoc.json.reducefunc(string, interface {}, func(interface {}, interface {}) interface {}) interface {}
apoc.lock.withLockfunc(*lock.Node, func() interface {}) (interface {}, error)
apoc.lock.withReadLockfunc(*lock.Node, func() interface {}) (interface {}, error)
apoc.log.timerfunc(string) func()
apoc.merge.conflictfunc(*merge.Node, map[string]interface {}, func(interface {}, interface {}) interface {}) *merge.Node
apoc.nodes.batchfunc([]*storage.Node, int, func([]*storage.Node) interface {}) []interface {}
apoc.nodes.filterfunc([]*storage.Node, func(*storage.Node) bool) []*storage.Node
apoc.nodes.mapfunc([]*storage.Node, func(*storage.Node) interface {}) []interface {}
apoc.nodes.reducefunc([]*storage.Node, interface {}, func(interface {}, *storage.Node) interface {}) interface {}
apoc.util.partitionfunc([]interface {}, func(interface {}) bool) [][]interface {}

Private APOC entity types, I/O interfaces, and multiple non-error return values also require explicit contracts rather than an automatic claim of transport compatibility. The 102 missing procedure declarations above remain capability gaps after the dispatcher, classification and doIt fixes; this audit does not mark them fixed or establish that issue #1167 is wholly resolved.

Rechecking the plugin export boundary ​

The plugin source and its regression test use //go:build ignore because this is a separately built Go plugin, not an ordinary package in go test ./.... make plugin-apoc runs the export test explicitly before building the plugin. The focused standalone command (also usable with -race) is:

sh
go test apoc/plugin-src/apoc/apoc_plugin.go apoc/plugin-src/apoc/apoc_plugin_test.go

v1.4.4 PageRank Go retirement ​

The graph-free Go algo.PageRank stub and its scalar registration are retired; CALL apoc.algo.pageRank still uses the native graph implementation. The retired name was not in the 118-name procedure-only classifier, so that historical procedure population was unchanged by PageRank retirement. The separately approved GraphSample retirement below reduces the current procedure-only catalog to 117. Current measured catalog counts are 981 registrations, 864 scalar names and 814 plugin exports after excluding 50 native scalar owners. The native function catalog remains 52.

The historical 983-name totals and table above describe the v1.4.3 audit; they are not the current plugin-export totals.

v1.4.4 GraphSample Go retirement ​

The exported (*meta.BoundFunctions).GraphSample(sampleSize) and apoc.meta.graphSample registry declaration are retired. The old helper ignored its limit and returned the entire graph; it did not implement sampling. Go callers requiring full metadata should call meta.New(backend).Graph(). The existing apoc.meta.graph registry binding stays on that owner; this does not add a new root-Call invocation plan or Cypher procedure. Rebuild Go callers; there is no compatibility forwarding wrapper. The unsupported Cypher procedure is not added, and Badger keys, persisted payloads, WAL and storage version stay unchanged. The historical v1.4.3 table above is retained as historical evidence.

Analytics privacy