FUI9011: Fragment definition drifted from its component source
criticalAn authored fragment or contract documents props that no longer match the component source.
Details
{
"code": "FUI9011",
"ruleId": "fragment/source-drift",
"category": "System",
"defaultSeverity": "critical",
"lifecycle": "experimental",
"fixAvailable": false,
"evidenceRequired": false
}Guidance
What it means
The compiler compared an authored definition (.fragment or
.contract.json) with the props it extracted from the component source.
FUI9011 fires when those two records disagree. Evidence names the component
and the drift class:
- a documented prop was removed from source
- a
.contract.jsonomitted a locally declared source prop - a documented type does not match the extracted type
- a documented default does not match the extracted default
- source extraction failed, so drift could not be verified (fail-closed)
v3 props entries are optional annotations, so silence about a source prop
is not drift there. .contract.json still has to document the local prop
surface.
How to resolve it
Update the authored definition so it matches the source, or change the source so it matches the definition — pick the record that is supposed to win. Do not regenerate a contract to hide identity churn, and do not exclude the component's file to skip the comparison.
When source extraction itself failed, fix the extract error first; the fail-closed FUI9011 will clear once the compiler can see the source again.
When an exception is intentional, attach a line-level, reasoned suppression from the configuration reference.
Verify the change
Run npx @usefragments/cli check --changed --format agent, confirm the
drift classes in the evidence are gone, then run
npx @usefragments/cli check --changed --ci.
Intentional exception? Use a narrow, reasoned directive from the in-source suppression reference.