Short answer: snapshot each post or comment revision, classify it under a versioned policy with bounded concurrency, commit one durable result for that input, and export only after input, decision, and exception counts reconcile.

A bulk moderation run is an accounting problem with an uncertain function in the middle. The classifier may return probabilistic labels, but the surrounding Node.js system still has to establish which bytes were evaluated, which policy interpreted the response, and why a later retry did not create a second enforcement action. A large Promise.all answers none of those questions.

The least complex implementation that preserves those properties is a manifest plus a resumable worker. The Node.js application owns a stable extract of existing content; the worker owns request pacing and durable attempts; a separate policy step turns classification output into allow, review, or restrict; and the exporter reads committed decisions rather than live application rows. This separation is deliberate. It permits a policy threshold to change without quietly changing the historical model response.

What should a Node.js bulk job export after LLM classification?

Export an audit record, not just a label. Each row should identify the content object and immutable revision, the input hash, policy version, prompt-template hash, model identifier returned by the API, normalized classification output, derived enforcement decision, attempt lineage, and completion time. A decision ID derived from (content_id, revision, policy_version) gives downstream consumers a stable deduplication key.