Occlude
Book a call
All docs pages

Docs

Output sanitisation

AvailableBuild and test outputPlannedDebuggerReviewed 29 October 2026

Occluded source can escape without anyone opening a file: in a crash, a test report, a coverage file. Every byte from the build's side passes the sanitiser before it reaches the person.

A failure inside an Occluded module

FAIL  summarizeInvoice.test.ts
  TypeError: Cannot read properties of undefined (reading 'rate')
    at <protected module>
    at summarizeInvoice (summarizeInvoice.ts:11:18)

The contractor sees that the failure is past the boundary, and which of their own lines led there. They do not see the code.

What it does to text

ControlWhat it catches
Protected framesStack frames and lines naming an Occluded path collapse to <protected module>. The frame in the person's own file stays
Source matchingOutput that reproduces code from an Occluded file, verbatim or reformatted, is redacted
Encoded textLong encoded runs are redacted
SecretsAn injected secret's value is replaced by its name

The full, unsanitised output goes to the record, readable by authorised staff.

Other routes out

RouteControl
Error messages that reveal existenceENOENT everywhere. Never "permission denied"
A debugger stepping into Occluded framesDebugger traffic is filtered: step-into across the boundary becomes step-over, variables of Occluded frames are withheld, and requests for their source get ENOENT
Coverage reports, source maps, bundle outputFiltered before download: files under Occluded paths are removed, and source maps for Occluded modules are never emitted
A visible script reads an Occluded fileOn the person's side it gets ENOENT. Inside a test on the build's side, its output is sanitised, and code that reads Occluded paths is flagged before it runs

Downloads

occlude artifact <path> is the only way to take a file out of the build's side. It passes the download filter: files under Occluded paths are removed, there are no source maps for Occluded modules, and a bundle passes only when the profile acknowledges the bundle-reachable warning.

What it cannot catch

Code the build's side runs can read what the build's side can read, so no output filter is complete. Every run is recorded in full, and this residual is set out in writing with every customer. See Security model.