BASALT · JOURNAL

A redaction workflow for law firms that survives review

2026-08-06 · pdf redaction for law firms

Most redaction incidents at law firms are not engine failures. The tool removed what it was told to remove. The failure was upstream or downstream: the wrong copy went out, a page was skipped, marks were placed but never applied, or the privilege log did not match the file that was produced.

A workflow fixes those. This is a sequence that holds up under review, with the reasoning for each step, aimed at a production of a few hundred to a few thousand pages handled inside a firm rather than by a vendor.

Establish one source set and hash it

Before anything is marked, decide which set of files is the production source and record a hash of each one. shasum -a 256 over the intake directory, saved as a manifest, takes seconds.

This exists to answer two questions later: was the file we produced derived from the file we collected, and did the source change during review. It also removes the most common catastrophic failure, which is producing the pre-redaction copy because two files with similar names sat in the same folder. If the produced file's provenance can be traced by hash back to a source in the manifest, that mistake becomes visible instead of silent.

Keep the source set read-only. Every derived artifact goes to a separate directory.

Normalize before you mark, not after

Two normalization steps belong before review, because doing them afterward invalidates work already done.

OCR any scanned or image-only pages. A page with no text layer cannot be searched, which means a keyword sweep for privileged terms will silently miss it. OCR first, then review, then redact both the image and the text layer together. Marking an un-OCR'd page and adding OCR later produces a searchable text layer generated from the pre-redaction image if the OCR was run against the wrong artifact.

Fix page order, orientation, and splits. Reordering or splitting after marks are placed risks marks landing on the wrong page. Do the organizing pass first and freeze the pagination.

Endorse Bates numbers before redacting

Bates numbers are sequential unique identifiers applied to every page of a production so that any page can be cited unambiguously. Apply them before redaction, not after.

The reason is the privilege log. Every entry in the log has to point at a Bates range, and every redaction has to be locatable by the receiving party using the same reference. If you redact first and endorse second, the marks and the numbers are created in separate passes and nothing in your process guarantees they agree. If you endorse first, every mark you place is placed on a page that already has its permanent identifier, and the log can be generated directly from the marks.

Endorse into the margin, not over content, and keep the number in the page content stream rather than as an annotation, so it cannot be deleted downstream. The mechanics, including the page geometry traps, are in Bates numbering on a Mac.

Confidentiality designations under a protective order are a separate endorsement from the Bates number. Keep them separate so a change in designation does not force a renumber.

Mark with reason codes, every time

Every mark should carry a reason at the moment it is placed. A small controlled vocabulary is enough for most productions:

Two things follow from this discipline. First, a reviewer who has to name the basis before moving on catches their own over-redaction, because "I do not have a code for this" usually means it should not be redacted. Second, the privilege log becomes a byproduct of the review rather than a second, separately reconstructed document. That is the whole argument in building a privilege log from the redactions you already made.

Set the vocabulary once at the start of the matter and do not let reviewers improvise new codes. Mapping ad hoc codes to log bases at the end is where inconsistency enters.

Redact by removal, and know what your tool does

Everything above is process. This step is the one place where the tool's internals decide whether the production is safe.

A correct redaction excises the glyph runs that intersect the mark from the page content stream, re-emits the surviving text in place so the page still renders correctly, destroys and re-encodes the pixels of any image the mark crosses, removes the corresponding runs from any invisible OCR text layer, and strips metadata, XMP packets, attachments, hidden optional content groups, and stale page thumbnails. Then it writes the whole document as a single generation, so there is no earlier revision left in the bytes.

If your tool draws a rectangle, the text is still in the file and copy-pastes out. If your tool saves incrementally, the pre-redaction state is recoverable by parsing the earlier revision. Both failures produce a file that looks completely correct on screen. How redactions fail walks through the mechanisms.

Ask your vendor or your tool one question: after redaction, does the removed text exist anywhere in the output bytes. There is a correct answer and it is short.

Verify the artifact you are about to send

The verification must run on the produced file, not on the editor state that produced it.

The minimum pass: open the output with a parser that did not write it, extract all text, and search for the strings that were redacted. Export the images and look at them. Dump the objects uncompressed and read the annotation values, form field values, layer names, and metadata. Confirm the Bates sequence is continuous with no gaps or duplicates across the volume.

Then hash the produced file and record the hash in the production log next to the source hash. That pairing is your proof of what left the building. If a dispute arises later about what was produced, a recorded hash settles it without argument. Verifying a PDF redaction has the commands; the checklist before filing has the shorter version for court submissions.

Two people, two roles

The reviewer who places marks should not be the person who signs off on the production. Not because reviewers are unreliable, but because the two tasks look for different things. The reviewer asks "should this be redacted." The signer asks "is the file correct": right document set, right Bates range, log matches marks, verification passed, hash recorded.

For small productions the second role takes ten minutes. It catches the wrong-file-sent failure, which no engine can prevent.

Keep the working copies out of reach

Derived artifacts accumulate: the OCR'd intermediate, the endorsed copy, the marked working file, the produced file. Only the last one leaves.

Put produced files in their own directory, named by volume, and do not keep anything else there. Attach files to outbound mail from that directory only. Every "we sent the unredacted version" incident is a file-picker error, and the cheapest fix is a directory where the wrong file cannot be selected because it is not there.

Finally, consider where the documents are processed. A privileged document uploaded to a general-purpose web converter has been disclosed to a third party regardless of that service's policies, and the copy you upload is by definition the unredacted one. Local processing is the default posture for privileged material, and cloud PDF tools covers why.

Frequently asked questions

What is the correct order for Bates numbering and redaction?

Endorse Bates numbers first, then redact. The privilege log has to reference Bates ranges, so every mark should be placed on a page that already carries its permanent identifier, which lets the log be generated directly from the marks. Endorsing after redaction means the numbers and the marks were created in separate passes with nothing guaranteeing they agree.

Is Preview good enough for redacting client documents?

No. Preview's markup tools draw shapes over the page rather than removing the underlying content, so the redacted text remains in the content stream and extracts cleanly. It also gives you no statement about what the saved file contains. For privileged or regulated material, use a tool that excises content and proves the result before writing.

How do I know a redaction actually removed the text?

Open the produced file with a parser that did not create it, extract all the text, and search for the strings you redacted. Then export the images, dump the objects uncompressed, and read the annotation values, form field values, layer names, and metadata. If any redacted string appears anywhere in that output, the redaction failed and the file must not be produced.

What reason codes should a redaction log use?

A short controlled vocabulary set at the start of the matter, typically attorney-client privilege, work product, personally identifiable information, protected health information, and confidential under a protective order. Keeping the list small and fixed prevents reviewers from improvising codes that later have to be reconciled into log bases by hand, which is where inconsistency between the production and the log usually enters.

Do we need to redact metadata as well as the page?

Yes. The Info dictionary and XMP packets can name the author, the original file path, the machine, and an edit history listing every application that touched the document, none of which appears on the page. A production that is perfect on the page and still carries a custodian's name and a matter-specific file path in its metadata has disclosed information.

Who should sign off on a production?

Someone other than the reviewer who placed the marks, because the two roles look for different failures. The reviewer decides what should be redacted; the signer confirms the file itself is correct, meaning right document set, right Bates range, log entries matching the marks, verification passed, and hash recorded. That second pass is what catches a wrong-file-sent error.

How do we prove later what we actually produced?

Record a SHA-256 hash of every produced file in the production log alongside the hash of its source, taken at intake. If a dispute arises about what was sent, the recorded hash settles it without relying on memory or on mail server copies. Hashing costs seconds and is the only artifact that survives independent of your document management system.

Can we use an online redaction service for privileged documents?

Uploading a privileged document to a third-party service discloses it to that third party, and the copy you upload is by definition the unredacted one. Retention, logging, and subprocessor behavior are outside your control and generally outside your ability to represent to a court or a client. Process privileged material locally.

Doing it in Basalt

Basalt covers the whole sequence in one window: OCR, organizing, Bates numbering with a prefix and starting number, redaction with a reason recorded per mark, and a privilege log exported to CSV or XLSX straight from those marks. Redaction removes text glyph by glyph from the content stream, destroys and re-encodes pixels under a mark, strips metadata and attachments and hidden layers, and writes one generation. A built-in verifier re-opens the written file with an independent parser and proves the redaction before anything is saved, and produces a signed certificate of redaction you can check with shasum and openssl without Basalt installed. The engine runs with no network entitlement, enforced at the code-signature level, so privileged documents never leave the Mac. $29 once for up to three Macs, free for 24 hours, at basaltformac.com.

Redaction that proves itself

Basalt destroys the content you mark, then re-opens the file it wrote and proves the content is gone before it saves anything. Your documents never leave your Mac.

DOWNLOAD BASALT 2.3.0 BUY $29 FREE FOR 24 HOURS · MACOS 13+