Snowflake: sign a stable export, not a mutable query result.
A table or view can change after a query completes. The clean handoff boundary is a reproducible export, immutable stage object, or snapshot manifest whose exact bytes the producer and receiver can hash.
Implementation boundary. Makoto does not ship a Snowflake Native App, SQL signing function, or automatic LOAD_HISTORY integration.
The attachment point
| Unload or export | After COPY INTO finishes, enumerate the exact stage objects, hash them outside the warehouse or through a reviewed signing service, and append a transformation statement. |
|---|---|
| Dynamic table or task | Capture query, task, warehouse, role, and snapshot context as operation metadata. Bind the exported bytes, not just a query ID. |
| Secure share | Create a signed handoff that names the exported artifact set, recipient, required profiles, and final heads. |
| Receiver | Download or read the handed-off bytes, hash them independently, and apply its own key policy and schema catalog. |
Control flow
-- Produce a stable handoff artifact first.
COPY INTO @handoff/orders/
FROM (SELECT * FROM curated.orders)
FILE_FORMAT = (TYPE = PARQUET)
OVERWRITE = TRUE;
# Outside Snowflake, resolve and hash the exact exported objects.
uv run makoto attest transform --help
uv run makoto handoff create --helpA warehouse procedure may orchestrate this flow, but signing-key custody, exact-byte hashing, and receiver authorization remain explicit design choices. Calling hypothetical SQL “pure Makoto signing” would hide those boundaries.
What the evidence can say
It can bind a stable export and relevant Snowflake context to its predecessors. It cannot prove a query was semantically correct, that a share remained unchanged after the attested export, or that the data meets a compliance regime.
Bring one export another team can verify.
A useful contribution includes exact stage objects, signing custody, receiver expectations, and a denial when one object changes.