The node-mapnik fork in the kartotherian namespace, that's currently used as basis for all other dependencies and running in production is actually a 1on1 fork from node-mapnik v4.2.1. This version is supposed to already adapt some changes for libmapnik 3.1.x, but de-facto seems to be very fine with libmapnik 3.0.x that's used in production.
With the current setup it seems to be fine to get rid of that fork. That will unblock us from getting rid of some other forks or at least upgrade our forks to more recent production versions. Eventually reducing the step to an libmapnik 3.1 upgrade. The only thing that changes when we de-fork is the version number of the node-mapnik dependency. The kartotherian fork currently sets it to v3.7.3.
The recent versions of almost all dependencies in our stack are fine with either node-mapnik v3.x.x or v4.x.x. Abaculus is the only service that, in it's recent version, is set to require at least node-mapnik v4.2.1. So we're also fine there.
If you dive a bit deeper though there is one inconvenience left. mapnik-reference. It's an essential dependency of tilelive-tmsource It's a dependency in carto that's used by tilelive-tmstyle. mapnik-reference is officially not compatible with node-mapnik versions above v3.x.x due to supposedly missing reference updates for libmapnik v3.1. There's an issue to fix that, but no progress since some years. [1]
De-facto, the code path that executes the Renderer.render() is never reached it seems. It's set in a callback that is never called [2].
[1] https://github.com/mapnik/mapnik-reference/issues/143
[2] https://github.com/mojodna/tilelive-tmstyle/blob/master/index.js#L208