Skip to main content

Fixtures, Goldens, Traces

ProviderFlow uses three types of validation artifacts to ensure deterministic behavior: fixtures, goldens, and traces.

Fixtures​

Fixtures are test input data that represent real webhook payloads from providers.

Purpose​

  • Test input for validation
  • Baseline for golden comparison
  • Documentation of expected input format

Format​

Fixtures are JSON files representing webhook events.

{
"type": "payment_intent.succeeded",
"data": {
"id": "pi_12345",
"amount": 2000,
"currency": "usd",
"customer": "cus_67890",
"created": 1719184800
}
}

Naming Convention​

fixtures/<provider>/<event-type>.json

Example:

  • fixtures/stripe/payment_intent.succeeded.json
  • fixtures/stripe/charge.succeeded.json

Validation​

Fixtures are validated for:

  • ✅ Valid JSON format
  • ✅ Event type format
  • ✅ Required fields
  • ✅ Type consistency

Goldens​

Goldens are expected output data for each fixture.

Purpose​

  • Define expected output format
  • Enable deterministic validation
  • Document output contract

Format​

Goldens are JSON files representing expected output.

{
"destination": "data-warehouse",
"event_type": "payment_intent.succeeded",
"timestamp": "2026-06-24T10:00:00Z",
"payload": {
"id": "pi_12345",
"amount": 2000,
"currency": "usd",
"customer": "cus_67890",
"processed_at": "2026-06-24T10:00:00Z"
}
}

Naming Convention​

goldens/<provider>/<event-type>.json

Example:

  • goldens/stripe/payment_intent.succeeded.json
  • goldens/stripe/charge.succeeded.json

Validation​

Goldens are validated for:

  • ✅ Valid JSON format
  • ✅ Destination format
  • ✅ Timestamp format
  • ✅ Payload structure

Traces​

Traces are execution traces for each event processed.

Purpose​

  • Debugging and troubleshooting
  • Audit trail
  • Evidence collection

Format​

Traces are JSON lines (one per event).

{
"event_id": "evt_12345",
"timestamp": "2026-06-24T10:00:00Z",
"event_type": "payment_intent.succeeded",
"contract": "stripe-v2",
"endpoint": "payment-event",
"target": "data-warehouse",
"status": "success",
"output": {
"destination": "data-warehouse",
"event_type": "payment_intent.succeeded",
"payload": {...}
}
}

Validation​

Traces are validated for:

  • ✅ Valid JSON format
  • ✅ Required fields (event_id, timestamp, status)
  • ✅ Status is one of success/failure

Validation Pipeline​

Phase 1: Fixture Validation​

zen package validate <package-path>

Validates all fixtures.

Checks:

  • ✅ YAML syntax
  • ✅ Required fields
  • ✅ Type consistency

Phase 2: Golden Comparison​

Compares output against goldens.

Checks:

  • ✅ Structure matches
  • ✅ Types match
  • ✅ Values match

Output:

{
"fixture": "payment_intent.succeeded",
"golden": "PASS",
"differences": []
}

Phase 3: Trace Collection​

Collects traces for each event.

Output:

zen package evidence <package-path>

Files generated:

  • traces/<provider>/<event-type>.jsonl
  • traces/<provider>/summary.json

Phase 4: Evidence Generation​

Generates final evidence summary.

Output:

{
"package": "stripe-v2",
"validations": {
"fixtures": "PASS",
"goldens": "PASS",
"traces": "COLLECTED"
},
"summary": "Package is valid"
}

Example Workflow​

1. Define Fixtures​

echo '{
"type": "payment_intent.succeeded",
"data": {
"id": "pi_12345",
"amount": 2000,
"currency": "usd"
}
}' > fixtures/stripe/payment_intent.succeeded.json

2. Define Goldens​

echo '{
"destination": "data-warehouse",
"event_type": "payment_intent.succeeded",
"payload": {
"id": "pi_12345",
"amount": 2000,
"currency": "usd",
"processed_at": "2026-06-24T10:00:00Z"
}
}' > goldens/stripe/payment_intent.succeeded.json

3. Validate​

zen package validate stripe-v2

4. Collect Evidence​

zen package evidence stripe-v2

5. Review Traces​

cat traces/stripe/summary.json