FUI9007: Governance record was dropped as a duplicate

moderate

Two governance records compiled to the same policy fact, so only one of them is enforced.

Details

diagnostic
{
  "code": "FUI9007",
  "ruleId": "config/colliding-record",
  "category": "System",
  "defaultSeverity": "moderate",
  "lifecycle": "experimental",
  "fixAvailable": false,
  "evidenceRequired": false
}

Guidance

What it means

Two records in your resolved governance policy compile to the same underlying policy fact — the same rule, scoped to the same thing — so the engine can only enforce one of them. It keeps the first and drops the second, and this diagnostic names both: the settings it is enforcing and the settings it discarded.

Most duplicates never reach this point. When a preset and your config both bind the same policy, your record displaces the preset's — later records win, and a scale binding displaces only the properties it actually rebinds. FUI9007 fires for what displacement cannot resolve: two records reaching the policy from different channels, such as a Cloud-served policy that already carries the record your config restates.

The diagnostic is verdict-neutral: it warns on stderr and never fails a run on its own. Turn it into a gate with govern.ci.failOnInert.

How to resolve it

Author one record per policy. If both records exist for a reason — different severities for different parts of the repo — scope them apart with exclude instead of stacking them:

govern: {
  styles: [
    {
      kind: "style.rawColors.forbid",
      except: ["transparent"],
      prefer: "token",
      severity: "error",
      exclude: [{ glob: "src/legacy/**", reason: "migration in DS-611" }],
    },
  ],
}

If the duplicate comes from a Cloud-served policy, delete the local record and let the served one govern — or change the served policy. Two authorities describing one rule is the condition this diagnostic exists to end.

Verify the change

Run npx @usefragments/cli check and confirm no FUI9007 warning remains, then confirm the enforced setting is the one you meant: check --format json reports each finding's evidence, including the policy fact that produced it. To keep the state clean, set govern.ci.failOnInert: true so an inert or colliding config fails --ci.

Intentional exception? Use a narrow, reasoned directive from the in-source suppression reference.

Next steps