Skip to content

Point fault handling at the job, not the silo entry - #559

Open
samlown wants to merge 1 commit into
mainfrom
silo-entry-faults-guidance
Open

Point fault handling at the job, not the silo entry#559
samlown wants to merge 1 commit into
mainfrom
silo-entry-faults-guidance

Conversation

@samlown

@samlown samlown commented Aug 20, 2026

Copy link
Copy Markdown
Contributor

From a support thread: a customer's downstream fault mapping broke because GET /silo/v1/entries/{id} returned "state":"error" with no faults field, while the invoices.invoice_sent webhook for the same entry did carry faults.

The behaviour is expected — the entry's faults is a backwards-compatibility copy from the job that assigned the entry's most recent state, populated only when that state is an error or failure. It's a sub-query, so there's no consistency window to wait out. The job is the deterministic source: one job, one set of faults, versus one entry to N jobs.

The docs didn't say any of that. workspace/white-label.mdx Step 4 actively pointed integrators at the entry's faults array, and an FAQ recommended the entry over the job.

Changes

  • workspace/white-label.mdx — Step 4 retitled "Fetch the results" and split by source: the entry for state and attachments, the job for faults via the webhook's transform_job_id. A <Warning> explains why, and notes the allow_invalid exception where the entry's faults do describe the stored document.
  • workspace/white-label.mdx — FAQ "Can I fetch the job instead of the silo entry?" (which said the entry was the better source of truth for faults) becomes "Should I fetch the silo entry or the job?" — entry for the outcome, job for the reason.
  • guides/webhooks.mdx — an <Info> under the payload field list stating the webhook's faults are the faults of the job named by transform_job_id, and that these plus the job's own array are what to rely on.

Not included

SiloEntry.faults in openapi/silo_v1.yaml carries the same neutral description and deserves the caveat too, but the specs here are copies generated from the api service. That belongs in internal/interfaces/web/silo/models.go upstream, followed by a spec re-copy.

Testing

mint openapi-check / mint dev weren't run — the local Node is 26.7.0 and the Mintlify CLI requires ≤24. Both changed files are prose plus standard Mintlify components (<Warning>, <Info>) already used elsewhere in each file, and no page anchors or nav entries changed. Worth a look at the Mintlify preview build before merging.

🤖 Generated with Claude Code

The white label guide told integrators to read the faults array from the
silo entry, with no mention that the entry only carries faults as a
backwards-compatible copy from the job that assigned its last state, and
only when that state is an error or failure. A support thread hit exactly
that gap: an entry in the error state returned no faults on a GET, and
downstream fault mapping broke.

Step 4 now splits the two sources — the entry for state and attachments,
the job for faults via the webhook's transform_job_id — and the FAQ that
recommended the entry over the job is rewritten to match. The webhooks
guide gains the same caveat next to the payload's faults field.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@mintlify

mintlify Bot commented Aug 20, 2026

Copy link
Copy Markdown
Contributor

Preview deployment for your docs. Learn more about Mintlify Previews.

Project Status Preview Updated (UTC)
invopop 🟢 Ready View Preview Aug 20, 2026, 12:00 PM

💡 Tip: Enable Workflows to automatically generate PRs for you.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant