Performs a complete-federation preflight, requests the same typed release
from every node, verifies the returned mechanism contract, and optionally
pools only the noisy sufficient statistics. A failure at any site stops the
call without publishing another site's value. Servers may already have
committed their sticky release; retrying the identical request returns the
same noise rather than rerolling it.
Sticky release identity is server-owned and bound to authenticated canonical
dataset/recipe lineage, the typed statistic, and the custodian-owned public
snapshot_id. A separate private fingerprint detects drift in the
bounded sufficient statistic; protected values never select the noise draw.
The analyst's population_id compatibility label and server symbol
alias do not participate, so changing either does not request or guarantee
fresh noise. The custodian must rotate
snapshot_id when the protected ETL snapshot changes; that controlled
rotation intentionally creates a new release identity.
For multiple sites, pooling a non-count statistic additionally requires one
compatible public dsOMOP harmonization contract for age grids, date
semantics, calendar-day granularity, UTC handling, week start, and
operational caps. Per-site output and pooled distinct-person counts do not
depend on those value semantics and therefore do not require that unrelated
contract.
Every input must have been produced by an audited person-local server path
and carry its authenticated content-bound provenance capsule.
Usage
ds.omop.dp.release(
x,
privacy,
datasources = NULL,
pool = TRUE,
format = c("long", "wide", "vector", "raw")
)Arguments
- x
One bare DataSHIELD symbol containing a server-side
omop.table.- privacy
An
omop_privacyspecification. If it does not contain an explicitpopulation_id, the bare symbolxis used as its public compatibility label. This label does not control sticky identity.- datasources
Named DataSHIELD connection list.
NULLusesDSI::datashield.connections_find().- pool
Logical; pool the complete set of noisy site releases.
- format
Client-only pooled-result format: long data frame, one-row wide data frame, named vector, or raw list. Histogram releases support all four forms; other statistics retain their typed list. This argument never enters the server specification or sticky-release identity.
Value
A dsomop_result. The meta$privacy record reports the
effective population label, a named public snapshot map, fixed per-site
epsilon and parallel cross-site composition for this release. Federated
nodes are modeled as separate populations, so the combined epsilon and delta
are the maxima of their per-site values. Multi-site results also carry
meta$harmonization when non-count values were pooled.
Details
No accounting mode hard-blocks a new operation. In
"bounded_accounted" mode, the nominal noise calibration follows a
summable server-owned schedule; once an informative allocation is too small,
the endpoint returns a marked, data-independent degraded payload at epsilon
zero. In
"sticky_unbounded" mode, an exact authenticated canonical lineage and
statistic cannot be rerolled. Alternate constructions that happen to be
mathematically equivalent may still be distinct releases, and unlimited
distinct queries do not have a finite global DP composition guarantee.
Examples
if (FALSE) { # \dontrun{
p <- omop_privacy("count")
ds.omop.dp.release("analysis_table", p)
} # }