Declare reject rules and quality gates so sync and enrichment surface bad records before they reach search, Content Review, or Role Assistant context.
Prerequisites
- Configure metadata and identity with indexed fields referenced by rules
- Configure business vocabulary materializing rule fields
Where it lives
| Layer | Location |
|---|---|
| Quality band | <datasourceKey>.json → quality.rejectIf[] |
| UI | Business Entity Quality tab (?tab=quality) |
Manifest section: datasource.dataQuality.
Builder MCP
| Manifest section | datasource.dataQuality |
| UI tab | Quality (?tab=quality) |
| Help topics | section, goldenExample |
| Repair hooks | — |
Quality rules reference normalized field names from metadataSchema, not vendor JSON paths.
How to set
- Add reject rules for empty or invalid governed fields:
{
"quality": {
"rejectIf": [
{
"field": "externalId",
"operator": "empty",
"message": "External id cannot be empty"
},
{
"field": "name",
"operator": "empty",
"message": "Display name cannot be empty"
}
]
}
}
- Align operators with platform-supported set for your schema version.
- Validate — failed quality during sync surfaces in integration test evidence.
Validate
aifabrix datasource validate <datasourceKey>
aifabrix test-integration <systemKey>
See CLI workflow for full ladder.
Common mistakes
| Mistake | Fix |
|---|---|
| Rule on unmapped vendor field | Map in fieldMappings.attributes first |
| Quality without indexed schema property | Add property to metadataSchema |
| Using quality instead of Content Review | Human approval uses documentStorage + dimensions |