Best pattern for syncing Docs tables with external execution proof?

I am working on a setup where Docs tables act as the control surface for real work: rows define tasks, owners, approval state, payload fields and links to the result.

The outside execution layer then runs the work and returns proof: final URL, changed record, file, run id, cost, reviewer notes or a failed check. In our case that outside layer is Crankflo, but the question is really about Docs/Superhuman Community patterns.

What I am trying to avoid:

- a row saying done while the external proof failed

- circular automations that keep updating each other

- manually pasted proof links with no stable structure

- a doc that looks current but is no longer the source of truth

The shape I am considering:

1. Docs table row is the human-facing request and approval surface.

2. External system owns execution and immutable proof.

3. Docs gets a compact status update plus proof URL back.

4. A separate audit log keeps the full event history.

5. Automations only move rows between explicit states, not infer success from a webhook alone.

Has anyone here built something like this with Docs tables, Pack/API calls, buttons or automations?

I would especially like to know where you keep the durable proof reference and how you prevent a table update from being mistaken for verified completion.

Hi @Denis_Mikheev ,
I’m assuming external execution is being triggered by a user using a Button,
If it is being triggered by automation, we can set a condition based on your use case to prevent circular automations.

You can have 2 separate tables:

  1. Task: This is your existing control surface.
  2. Proofs: Here you can store your returned payload from Crankflo/External service.

We can create a lookup/realtional column between Task and Proof and only show the latest proof that we received for a particular task using formula similiar to this and Task will always show latest proof.

Proofs.Filter(Task = thisRow).Sort(false, [Received at]).First()

We can go 1 level deep if we receive multiple execution statuses for a single run, we can have one more table which can collect events for a single run and we always show the latest event/status using similar formula.

Bhavya, SimplaDocs