ReadonlyserviceStable, human-readable name for the service. Must be set explicitly on each subclass
because this.constructor.name gets mangled by minification in production builds,
which breaks tracing/observability span names.
ProtectedloggerProtectedrunProtectedspanOnly what the CALLER pinned; the probe's decision needs the PDF, so it goes on the log line.
ProtectedspanOptional hook for subclasses to attach extra non-PII span attributes derived from the
successful service result. Only called when run resolves successfully; on error, the
span is marked via markSpanError instead.
Safe by default: returns {} when not overridden. Only declare keys you've confirmed
are non-PII (e.g. counts, status flags, computed summaries). Never include emails,
names, dob, free-text, etc.
Submits a template's blank PDF to Extend's Form Detection API and returns the run handle.
Not a queue job: nothing on our side records a detection run, Extend already stores it durably, and the editor has to poll for progress either way. Submitting twice is safe and deliberately not deduplicated — two independent runs, neither writing anything here; it costs credits and nothing else.