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.jsonfixtures/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.jsongoldens/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>.jsonltraces/<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