@usefragments/core 2.0.0 → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-BMPYIUZE.js → chunk-QPOKQ5H6.js} +8 -2
- package/dist/chunk-QPOKQ5H6.js.map +1 -0
- package/dist/codes/index.js +1 -1
- package/dist/index.d.ts +13 -1
- package/dist/index.js +120 -55
- package/dist/index.js.map +1 -1
- package/dist/schemas/index.js +1 -1
- package/package.json +1 -1
- package/src/canonical-source.ts +41 -0
- package/src/facts/builders.ts +4 -0
- package/src/facts/fact-index.ts +4 -0
- package/src/facts/facts.test.ts +70 -0
- package/src/facts/types.ts +4 -0
- package/src/identity/usage.test.ts +64 -0
- package/src/identity/usage.ts +7 -1
- package/src/index.ts +5 -0
- package/src/rules/components-prefer-library.ts +110 -33
- package/dist/chunk-BMPYIUZE.js.map +0 -1
|
@@ -861,6 +861,7 @@ function makeComponentDefinitionFact(input) {
|
|
|
861
861
|
componentKey: input.componentKey,
|
|
862
862
|
renderRoot: input.renderRoot,
|
|
863
863
|
propSurface: [...input.propSurface],
|
|
864
|
+
...input.location ? { location: { ...input.location } } : {},
|
|
864
865
|
...input.stylingChannel ? { stylingChannel: { ...input.stylingChannel } } : {}
|
|
865
866
|
};
|
|
866
867
|
}
|
|
@@ -1204,7 +1205,8 @@ function makeUsageComponentFact(input) {
|
|
|
1204
1205
|
}),
|
|
1205
1206
|
kind: "usage_component",
|
|
1206
1207
|
nodeId: input.nodeId,
|
|
1207
|
-
componentId: input.componentId
|
|
1208
|
+
componentId: input.componentId,
|
|
1209
|
+
...input.definitionKey ? { definitionKey: input.definitionKey } : {}
|
|
1208
1210
|
};
|
|
1209
1211
|
}
|
|
1210
1212
|
function makeUsageImportFact(input) {
|
|
@@ -1424,6 +1426,10 @@ function logicalFactForComparison(fact) {
|
|
|
1424
1426
|
const { location: _location, sourceNames: _sourceNames, ...logicalFact } = fact;
|
|
1425
1427
|
return logicalFact;
|
|
1426
1428
|
}
|
|
1429
|
+
if (fact.kind === "component_definition") {
|
|
1430
|
+
const { location: _location, ...logicalFact } = fact;
|
|
1431
|
+
return { ...logicalFact, componentId: logicalComponentId(fact.componentId) };
|
|
1432
|
+
}
|
|
1427
1433
|
if (fact.kind === "jsx_import_path_preferred") {
|
|
1428
1434
|
return {
|
|
1429
1435
|
...fact,
|
|
@@ -3180,4 +3186,4 @@ export {
|
|
|
3180
3186
|
normalizeFinding,
|
|
3181
3187
|
normalizeViolation
|
|
3182
3188
|
};
|
|
3183
|
-
//# sourceMappingURL=chunk-
|
|
3189
|
+
//# sourceMappingURL=chunk-QPOKQ5H6.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/rules/fix-availability.ts","../src/codes/codes.ts","../src/facts/integrity.ts","../src/domain-ids.ts","../src/facts/ids.ts","../src/facts/builders.ts","../src/package-identity-match.ts","../src/facts/fact-index.ts","../src/governance.ts","../src/policy-exclude.ts","../src/rules/families.ts","../src/facts/compile.ts","../src/schemas/index.ts","../src/codes/source-finding-bridge.ts"],"sourcesContent":["/**\n * Whether each implemented rule can emit a fix on at least one finding.\n *\n * Rule-backed FUI registry entries derive their `fixAvailable` value from this\n * map. A parity test keeps the keys in lock-step with `RULES`, so capability is\n * declared once instead of being repeated in rule and code registries.\n */\nexport const RULE_FIX_AVAILABLE = {\n \"components/unknown-prop\": false,\n \"components/forbidden-prop-value\": true,\n \"props/invalid-value\": true,\n \"imports/preferred-path\": true,\n \"components/preferred-component\": true,\n \"components/prefer-library\": true,\n \"components/shadow-component\": false,\n \"styles/no-raw-color\": true,\n \"styles/no-raw-dimensions\": true,\n \"styles/no-raw-spacing\": true,\n \"styles/no-raw-typography\": true,\n \"tailwind/arbitrary-color\": false,\n \"tailwind/arbitrary-spacing\": true,\n \"tailwind/forbidden-palette\": true,\n \"tailwind/off-scale-spacing-token\": true,\n \"tailwind/raw-color-via-token\": false,\n \"tailwind/unknown-class\": false,\n \"tokens/require-dual-fallback\": true,\n \"tokens/css-vars-must-be-defined\": false,\n \"tokens/upstream-drift\": false,\n \"theme/no-theme-coupled-literal\": false,\n \"a11y/required-accessible-name\": false,\n \"a11y/standard\": false,\n \"composition/cardinality\": false,\n \"composition/co-occurrence\": false,\n} as const satisfies Readonly<Record<string, boolean>>;\n\nexport type RuleWithFixAvailability = keyof typeof RULE_FIX_AVAILABLE;\n","import type { Severity } from \"../severity.js\";\nimport { RULE_FIX_AVAILABLE, type RuleWithFixAvailability } from \"../rules/fix-availability.js\";\nexport type { Severity } from \"../severity.js\";\n\nexport const EXPLAIN_URL_BASE = \"https://usefragments.com/errors/\";\n\nexport type CodeCategory =\n | \"canonical-usage\"\n | \"tokens\"\n | \"a11y\"\n | \"states\"\n | \"composition\"\n | \"props\"\n | \"performance\"\n | \"safety\"\n | \"system\";\n\nexport type CodeLifecycle = \"experimental\" | \"stable\" | \"deprecated\";\n\nexport interface FuiCode {\n code: string;\n ruleId: string;\n category: CodeCategory;\n defaultSeverity: Severity;\n title: string;\n explainUrl: string;\n lifecycle: CodeLifecycle;\n replacedBy?: string;\n fixAvailable: boolean;\n evidenceRequired: boolean;\n}\n\nfunction code(entry: Omit<FuiCode, \"explainUrl\"> & { explainUrl?: never }): FuiCode {\n return {\n ...entry,\n explainUrl: `${EXPLAIN_URL_BASE}${entry.code}`,\n };\n}\n\ntype RuleCodeEntry = Omit<FuiCode, \"explainUrl\" | \"fixAvailable\" | \"ruleId\"> & {\n ruleId: RuleWithFixAvailability;\n};\n\nfunction ruleCode(entry: RuleCodeEntry): FuiCode {\n const { evidenceRequired, ...metadata } = entry;\n return code({\n ...metadata,\n fixAvailable: RULE_FIX_AVAILABLE[entry.ruleId],\n evidenceRequired,\n });\n}\n\nexport const CODES = [\n code({\n code: \"FUI1001\",\n ruleId: \"components/non-canonical\",\n category: \"canonical-usage\",\n defaultSeverity: \"serious\",\n title: \"Component should use the canonical primitive\",\n lifecycle: \"experimental\",\n fixAvailable: true,\n evidenceRequired: true,\n }),\n ruleCode({\n code: \"FUI1002\",\n ruleId: \"components/preferred-component\",\n category: \"canonical-usage\",\n defaultSeverity: \"serious\",\n title: \"Preferred component should be used\",\n lifecycle: \"experimental\",\n evidenceRequired: true,\n }),\n ruleCode({\n code: \"FUI1003\",\n ruleId: \"imports/preferred-path\",\n category: \"canonical-usage\",\n defaultSeverity: \"moderate\",\n title: \"Import should use the preferred path\",\n lifecycle: \"experimental\",\n evidenceRequired: true,\n }),\n ruleCode({\n code: \"FUI1004\",\n ruleId: \"components/prefer-library\",\n category: \"canonical-usage\",\n defaultSeverity: \"moderate\",\n title: \"Library component should be preferred\",\n lifecycle: \"experimental\",\n evidenceRequired: true,\n }),\n code({\n code: \"FUI1005\",\n ruleId: \"components/allow\",\n category: \"canonical-usage\",\n defaultSeverity: \"serious\",\n title: \"Component is not in the allowed set\",\n lifecycle: \"experimental\",\n fixAvailable: false,\n evidenceRequired: true,\n }),\n code({\n code: \"FUI1006\",\n ruleId: \"components/deny\",\n category: \"canonical-usage\",\n defaultSeverity: \"serious\",\n title: \"Component is denied by policy\",\n lifecycle: \"experimental\",\n fixAvailable: false,\n evidenceRequired: true,\n }),\n ruleCode({\n code: \"FUI1007\",\n ruleId: \"components/shadow-component\",\n category: \"canonical-usage\",\n defaultSeverity: \"moderate\",\n title: \"Component shadows a canonical primitive\",\n lifecycle: \"experimental\",\n evidenceRequired: true,\n }),\n code({\n code: \"FUI2001\",\n ruleId: \"tokens/require-design-tokens\",\n category: \"tokens\",\n defaultSeverity: \"serious\",\n title: \"Design token is required\",\n lifecycle: \"experimental\",\n fixAvailable: true,\n evidenceRequired: true,\n }),\n code({\n code: \"FUI2002\",\n ruleId: \"tokens/allowed-prefixes\",\n category: \"tokens\",\n defaultSeverity: \"moderate\",\n title: \"Token prefix is not allowed\",\n lifecycle: \"experimental\",\n fixAvailable: true,\n evidenceRequired: true,\n }),\n ruleCode({\n code: \"FUI2003\",\n ruleId: \"tokens/require-dual-fallback\",\n category: \"tokens\",\n defaultSeverity: \"serious\",\n title: \"Token fallback is required\",\n lifecycle: \"experimental\",\n evidenceRequired: true,\n }),\n ruleCode({\n code: \"FUI2004\",\n ruleId: \"styles/no-raw-dimensions\",\n category: \"tokens\",\n defaultSeverity: \"serious\",\n title: \"Raw dimension should use a token\",\n lifecycle: \"experimental\",\n evidenceRequired: true,\n }),\n ruleCode({\n code: \"FUI2005\",\n ruleId: \"styles/no-raw-color\",\n category: \"tokens\",\n defaultSeverity: \"serious\",\n title: \"Raw color should use a token\",\n lifecycle: \"experimental\",\n evidenceRequired: true,\n }),\n ruleCode({\n code: \"FUI2006\",\n ruleId: \"styles/no-raw-spacing\",\n category: \"tokens\",\n defaultSeverity: \"serious\",\n title: \"Raw spacing should use the scale\",\n lifecycle: \"experimental\",\n evidenceRequired: true,\n }),\n ruleCode({\n code: \"FUI2007\",\n ruleId: \"tailwind/arbitrary-color\",\n category: \"tokens\",\n defaultSeverity: \"moderate\",\n title: \"Tailwind arbitrary color should use a token\",\n lifecycle: \"experimental\",\n evidenceRequired: true,\n }),\n ruleCode({\n code: \"FUI2008\",\n ruleId: \"tailwind/arbitrary-spacing\",\n category: \"tokens\",\n defaultSeverity: \"moderate\",\n title: \"Tailwind arbitrary spacing should use the scale\",\n lifecycle: \"experimental\",\n evidenceRequired: true,\n }),\n ruleCode({\n code: \"FUI2009\",\n ruleId: \"tailwind/forbidden-palette\",\n category: \"tokens\",\n defaultSeverity: \"moderate\",\n title: \"Tailwind palette is forbidden\",\n lifecycle: \"experimental\",\n evidenceRequired: true,\n }),\n ruleCode({\n code: \"FUI2010\",\n ruleId: \"tailwind/raw-color-via-token\",\n category: \"tokens\",\n defaultSeverity: \"moderate\",\n title: \"Tailwind color should use a resolved token\",\n lifecycle: \"experimental\",\n evidenceRequired: true,\n }),\n ruleCode({\n code: \"FUI2011\",\n ruleId: \"tailwind/off-scale-spacing-token\",\n category: \"tokens\",\n defaultSeverity: \"moderate\",\n title: \"Tailwind spacing token is off scale\",\n lifecycle: \"experimental\",\n evidenceRequired: true,\n }),\n ruleCode({\n code: \"FUI2012\",\n ruleId: \"tailwind/unknown-class\",\n category: \"tokens\",\n defaultSeverity: \"moderate\",\n title: \"Tailwind class is unknown\",\n lifecycle: \"experimental\",\n evidenceRequired: true,\n }),\n code({\n code: \"FUI2013\",\n ruleId: \"brand/enforce-seeds\",\n category: \"tokens\",\n defaultSeverity: \"serious\",\n title: \"Brand seed token is required\",\n lifecycle: \"experimental\",\n fixAvailable: true,\n evidenceRequired: true,\n }),\n ruleCode({\n code: \"FUI2014\",\n ruleId: \"theme/no-theme-coupled-literal\",\n category: \"tokens\",\n defaultSeverity: \"moderate\",\n title: \"Theme-coupled literal should use a semantic token\",\n lifecycle: \"experimental\",\n evidenceRequired: true,\n }),\n ruleCode({\n code: \"FUI2015\",\n ruleId: \"tokens/css-vars-must-be-defined\",\n category: \"tokens\",\n defaultSeverity: \"moderate\",\n title: \"CSS variable is not in the contract vocabulary\",\n lifecycle: \"experimental\",\n evidenceRequired: true,\n }),\n ruleCode({\n code: \"FUI2016\",\n ruleId: \"styles/no-raw-typography\",\n category: \"tokens\",\n defaultSeverity: \"serious\",\n title: \"Raw typography should use a token\",\n lifecycle: \"experimental\",\n evidenceRequired: true,\n }),\n ruleCode({\n code: \"FUI2017\",\n ruleId: \"tokens/upstream-drift\",\n category: \"tokens\",\n defaultSeverity: \"moderate\",\n title: \"Local token differs from its declared upstream source\",\n lifecycle: \"experimental\",\n evidenceRequired: true,\n }),\n code({\n code: \"FUI2018\",\n ruleId: \"config/empty-token-vocabulary\",\n category: \"system\",\n defaultSeverity: \"serious\",\n title: \"Token sources resolved to 0 tokens\",\n lifecycle: \"experimental\",\n fixAvailable: false,\n evidenceRequired: true,\n }),\n ruleCode({\n code: \"FUI3001\",\n ruleId: \"a11y/required-accessible-name\",\n category: \"a11y\",\n defaultSeverity: \"serious\",\n title: \"Accessible name is required\",\n lifecycle: \"experimental\",\n evidenceRequired: true,\n }),\n ruleCode({\n code: \"FUI3002\",\n ruleId: \"a11y/standard\",\n category: \"a11y\",\n defaultSeverity: \"serious\",\n title: \"Accessibility standard failed\",\n lifecycle: \"experimental\",\n evidenceRequired: true,\n }),\n code({\n code: \"FUI5001\",\n ruleId: \"components/required-children\",\n category: \"composition\",\n defaultSeverity: \"serious\",\n title: \"Required child component is missing\",\n lifecycle: \"experimental\",\n fixAvailable: false,\n evidenceRequired: true,\n }),\n code({\n code: \"FUI5002\",\n ruleId: \"components/canonical-usage\",\n category: \"composition\",\n defaultSeverity: \"serious\",\n title: \"Component should use canonical composition\",\n lifecycle: \"deprecated\",\n replacedBy: \"FUI1001\",\n fixAvailable: true,\n evidenceRequired: true,\n }),\n ruleCode({\n code: \"FUI5003\",\n ruleId: \"composition/cardinality\",\n category: \"composition\",\n defaultSeverity: \"moderate\",\n title: \"Too many of a component in one region\",\n lifecycle: \"experimental\",\n evidenceRequired: true,\n }),\n ruleCode({\n code: \"FUI5004\",\n ruleId: \"composition/co-occurrence\",\n category: \"composition\",\n defaultSeverity: \"moderate\",\n title: \"Required companion component is missing from the region\",\n lifecycle: \"experimental\",\n evidenceRequired: true,\n }),\n code({\n code: \"FUI6001\",\n ruleId: \"props/unknown\",\n category: \"props\",\n defaultSeverity: \"moderate\",\n title: \"Prop is unknown\",\n lifecycle: \"experimental\",\n fixAvailable: false,\n evidenceRequired: true,\n }),\n ruleCode({\n code: \"FUI6002\",\n ruleId: \"props/invalid-value\",\n category: \"props\",\n defaultSeverity: \"serious\",\n title: \"Prop value is invalid\",\n lifecycle: \"experimental\",\n evidenceRequired: true,\n }),\n code({\n code: \"FUI6003\",\n ruleId: \"props/banned-pattern\",\n category: \"props\",\n defaultSeverity: \"serious\",\n title: \"Prop pattern is banned\",\n lifecycle: \"experimental\",\n fixAvailable: false,\n evidenceRequired: true,\n }),\n ruleCode({\n code: \"FUI6004\",\n ruleId: \"components/forbidden-prop-value\",\n category: \"props\",\n defaultSeverity: \"serious\",\n title: \"Prop value is forbidden\",\n lifecycle: \"experimental\",\n evidenceRequired: true,\n }),\n ruleCode({\n code: \"FUI6005\",\n ruleId: \"components/unknown-prop\",\n category: \"props\",\n defaultSeverity: \"moderate\",\n title: \"Component prop is unknown\",\n lifecycle: \"experimental\",\n evidenceRequired: true,\n }),\n code({\n code: \"FUI8001\",\n ruleId: \"safety/block-event-handlers\",\n category: \"safety\",\n defaultSeverity: \"serious\",\n title: \"Event handler prop is blocked\",\n lifecycle: \"experimental\",\n fixAvailable: true,\n evidenceRequired: true,\n }),\n code({\n code: \"FUI8002\",\n ruleId: \"safety/block-dangerous-props\",\n category: \"safety\",\n defaultSeverity: \"critical\",\n title: \"Dangerous prop is blocked\",\n lifecycle: \"experimental\",\n fixAvailable: true,\n evidenceRequired: true,\n }),\n code({\n code: \"FUI8003\",\n ruleId: \"safety/block-controlled-props\",\n category: \"safety\",\n defaultSeverity: \"serious\",\n title: \"Controlled prop is blocked\",\n lifecycle: \"experimental\",\n fixAvailable: true,\n evidenceRequired: true,\n }),\n code({\n code: \"FUI8004\",\n ruleId: \"safety/block-function-props\",\n category: \"safety\",\n defaultSeverity: \"serious\",\n title: \"Function prop is blocked\",\n lifecycle: \"experimental\",\n fixAvailable: true,\n evidenceRequired: true,\n }),\n code({\n code: \"FUI8005\",\n ruleId: \"safety/block-internal-props\",\n category: \"safety\",\n defaultSeverity: \"critical\",\n title: \"Internal prop is blocked\",\n lifecycle: \"experimental\",\n fixAvailable: true,\n evidenceRequired: true,\n }),\n code({\n code: \"FUI8006\",\n ruleId: \"safety/sanitize-hrefs\",\n category: \"safety\",\n defaultSeverity: \"critical\",\n title: \"Href must be sanitized\",\n lifecycle: \"experimental\",\n fixAvailable: true,\n evidenceRequired: true,\n }),\n code({\n code: \"FUI9001\",\n ruleId: \"unused-suppression\",\n category: \"system\",\n defaultSeverity: \"minor\",\n title: \"Suppression is unused\",\n lifecycle: \"experimental\",\n fixAvailable: true,\n evidenceRequired: true,\n }),\n code({\n code: \"FUI9002\",\n ruleId: \"expired-suppression\",\n category: \"system\",\n defaultSeverity: \"serious\",\n title: \"Suppression is expired\",\n lifecycle: \"experimental\",\n fixAvailable: true,\n evidenceRequired: true,\n }),\n code({\n code: \"FUI9003\",\n ruleId: \"missing-expiry\",\n category: \"system\",\n defaultSeverity: \"minor\",\n title: \"Suppression expiry is missing\",\n lifecycle: \"experimental\",\n fixAvailable: true,\n evidenceRequired: true,\n }),\n code({\n code: \"FUI9004\",\n ruleId: \"config/unconsumed-key\",\n category: \"system\",\n defaultSeverity: \"moderate\",\n title: \"Config key is not consumed\",\n lifecycle: \"experimental\",\n fixAvailable: false,\n evidenceRequired: false,\n }),\n code({\n code: \"FUI9005\",\n ruleId: \"config/orphan-scale\",\n category: \"system\",\n defaultSeverity: \"moderate\",\n title: \"Governance scale is not referenced\",\n lifecycle: \"experimental\",\n fixAvailable: false,\n evidenceRequired: false,\n }),\n code({\n code: \"FUI9006\",\n ruleId: \"config/unmatched-exclude\",\n category: \"system\",\n defaultSeverity: \"moderate\",\n title: \"Rule exclude matched no scanned file\",\n lifecycle: \"experimental\",\n fixAvailable: false,\n evidenceRequired: false,\n }),\n code({\n code: \"FUI9007\",\n ruleId: \"config/colliding-record\",\n category: \"system\",\n defaultSeverity: \"moderate\",\n title: \"Governance record was dropped as a duplicate\",\n lifecycle: \"experimental\",\n fixAvailable: false,\n evidenceRequired: false,\n }),\n code({\n code: \"FUI9008\",\n ruleId: \"config/overridden-record-severity\",\n category: \"system\",\n defaultSeverity: \"moderate\",\n title: \"Rule override outranks a record's authored severity\",\n lifecycle: \"experimental\",\n fixAvailable: false,\n evidenceRequired: false,\n }),\n code({\n code: \"FUI9009\",\n ruleId: \"contract/unreadable-token-source\",\n category: \"system\",\n defaultSeverity: \"critical\",\n title: \"Contract token source cannot be read\",\n lifecycle: \"experimental\",\n fixAvailable: false,\n evidenceRequired: false,\n }),\n code({\n code: \"FUI9010\",\n ruleId: \"fragment/invalid-definition\",\n category: \"system\",\n defaultSeverity: \"critical\",\n title: \"Fragment definition is not valid\",\n lifecycle: \"experimental\",\n fixAvailable: false,\n evidenceRequired: false,\n }),\n code({\n code: \"FUI9011\",\n ruleId: \"fragment/source-drift\",\n category: \"system\",\n defaultSeverity: \"critical\",\n title: \"Fragment definition drifted from its component source\",\n lifecycle: \"experimental\",\n fixAvailable: false,\n evidenceRequired: false,\n }),\n code({\n code: \"FUI9012\",\n ruleId: \"contract/write-not-entitled\",\n category: \"system\",\n defaultSeverity: \"critical\",\n title: \"Contract write requires a paid workspace\",\n lifecycle: \"experimental\",\n fixAvailable: false,\n evidenceRequired: false,\n }),\n] as const satisfies readonly FuiCode[];\n\nexport const byCode: ReadonlyMap<string, FuiCode> = new Map(\n CODES.map((entry) => [entry.code, entry])\n);\n\nexport const byRuleId: ReadonlyMap<string, FuiCode> = new Map(\n CODES.map((entry) => [entry.ruleId, entry])\n);\n\nexport function explainUrlForCode(code: string): string {\n return `${EXPLAIN_URL_BASE}${code}`;\n}\n","import { z } from \"zod\";\nimport { compareCanonicalStrings } from \"../contract/hash.js\";\nimport { digestHexStringSchema } from \"../domain-ids.js\";\nimport type { CanonicalFactIntegrityV1 } from \"./types.js\";\n\nexport const CANONICAL_FACT_MAX_CONFLICTS_V1 = 1_000;\nexport const CANONICAL_FACT_MAX_VALUES_PER_CONFLICT_V1 = 64;\nexport const CANONICAL_FACT_MAX_PROVENANCE_PER_VALUE_V1 = 1_000;\n\nconst boundedString = z.string().min(1).max(4_096);\nconst unique = (values: readonly string[]): boolean => new Set(values).size === values.length;\nconst provenance = z\n .array(boundedString)\n .min(1)\n .max(CANONICAL_FACT_MAX_PROVENANCE_PER_VALUE_V1)\n .refine(unique, \"provenance values must be unique\");\n\nexport const canonicalFactConflictValueV1Schema = z\n .object({\n valueDigest: digestHexStringSchema,\n factIds: provenance,\n totalFactIdCount: z.number().int().positive().optional(),\n analyzerIds: provenance,\n totalAnalyzerIdCount: z.number().int().positive().optional(),\n evidenceRefs: provenance,\n totalEvidenceRefCount: z.number().int().positive().optional(),\n })\n .strict()\n .superRefine((value, context) => {\n for (const [path, total, retained] of [\n [\"totalFactIdCount\", value.totalFactIdCount, value.factIds.length],\n [\"totalAnalyzerIdCount\", value.totalAnalyzerIdCount, value.analyzerIds.length],\n [\"totalEvidenceRefCount\", value.totalEvidenceRefCount, value.evidenceRefs.length],\n ] as const) {\n if (total !== undefined && total < retained) {\n context.addIssue({\n code: z.ZodIssueCode.custom,\n path: [path],\n message: `${path} cannot be smaller than retained provenance`,\n });\n }\n }\n });\n\nexport const canonicalFactConflictV1Schema = z\n .object({\n canonicalKey: boundedString,\n factKind: boundedString,\n state: z.literal(\"conflict\"),\n values: z\n .array(canonicalFactConflictValueV1Schema)\n .min(2)\n .max(CANONICAL_FACT_MAX_VALUES_PER_CONFLICT_V1)\n .refine(\n (values) => new Set(values.map((value) => value.valueDigest)).size === values.length,\n \"conflict values must have distinct material digests\"\n ),\n totalValueCount: z.number().int().min(2).optional(),\n })\n .strict()\n .superRefine((value, context) => {\n if (value.totalValueCount !== undefined && value.totalValueCount < value.values.length) {\n context.addIssue({\n code: z.ZodIssueCode.custom,\n path: [\"totalValueCount\"],\n message: \"totalValueCount cannot be smaller than retained values\",\n });\n }\n });\n\nexport const canonicalFactIntegrityV1Schema = z.union([\n z\n .object({\n state: z.literal(\"healthy\"),\n coalescedDuplicateCount: z.number().int().nonnegative(),\n })\n .strict(),\n z\n .object({\n state: z.literal(\"conflict\"),\n coalescedDuplicateCount: z.number().int().nonnegative(),\n conflicts: z\n .array(canonicalFactConflictV1Schema)\n .min(1)\n .max(CANONICAL_FACT_MAX_CONFLICTS_V1)\n .refine(\n (conflicts) =>\n new Set(conflicts.map((conflict) => conflict.canonicalKey)).size === conflicts.length,\n \"canonical conflict keys must be unique\"\n ),\n totalConflictCount: z.number().int().positive().optional(),\n })\n .strict()\n .superRefine((value, context) => {\n if (\n value.totalConflictCount !== undefined &&\n value.totalConflictCount < value.conflicts.length\n ) {\n context.addIssue({\n code: z.ZodIssueCode.custom,\n path: [\"totalConflictCount\"],\n message: \"totalConflictCount cannot be smaller than retained conflicts\",\n });\n }\n }),\n]);\n\nconst sorted = (values: readonly string[]): string[] => [...values].sort();\n\nexport function normalizeCanonicalFactIntegrityV1(value: unknown): CanonicalFactIntegrityV1 {\n const parsed = canonicalFactIntegrityV1Schema.parse(value);\n if (parsed.state === \"healthy\") return parsed;\n return {\n ...parsed,\n totalConflictCount: parsed.totalConflictCount ?? parsed.conflicts.length,\n conflicts: parsed.conflicts\n .map((conflict) => ({\n ...conflict,\n totalValueCount: conflict.totalValueCount ?? conflict.values.length,\n values: conflict.values\n .map((entry) => ({\n ...entry,\n factIds: sorted(entry.factIds),\n totalFactIdCount: entry.totalFactIdCount ?? entry.factIds.length,\n analyzerIds: sorted(entry.analyzerIds),\n totalAnalyzerIdCount: entry.totalAnalyzerIdCount ?? entry.analyzerIds.length,\n evidenceRefs: sorted(entry.evidenceRefs),\n totalEvidenceRefCount: entry.totalEvidenceRefCount ?? entry.evidenceRefs.length,\n }))\n .sort((left, right) => compareCanonicalStrings(left.valueDigest, right.valueDigest)),\n }))\n .sort((left, right) => compareCanonicalStrings(left.canonicalKey, right.canonicalKey)),\n };\n}\n","import { z } from \"zod\";\n\nconst FULL_DIGEST_PATTERN = /^[0-9a-f]{64}$/u;\n\nexport declare const analysisPlanIdBrand: unique symbol;\nexport declare const evaluationReceiptIdBrand: unique symbol;\n\nexport type DigestHex = string;\nexport type AnalysisPlanId = `apl_${string}` & { readonly [analysisPlanIdBrand]: void };\nexport type EvaluationReceiptId = `evr_${string}` & {\n readonly [evaluationReceiptIdBrand]: void;\n};\nexport const digestHexStringSchema = z\n .string()\n .regex(FULL_DIGEST_PATTERN, \"Expected 64 lowercase hexadecimal characters\");\nexport const digestHexSchema = digestHexStringSchema;\n\nexport const analysisPlanIdStringSchema = z\n .string()\n .regex(/^apl_[0-9a-f]{64}$/u, \"Invalid analysis plan ID\");\nexport const analysisPlanIdSchema = analysisPlanIdStringSchema.transform(\n (value) => value as AnalysisPlanId\n);\n\nexport const evaluationReceiptIdSchema = z\n .string()\n .regex(/^evr_[0-9a-f]{64}$/u, \"Invalid evaluation receipt ID\")\n .transform((value) => value as EvaluationReceiptId);\nexport const evaluationReceiptIdStringSchema = z\n .string()\n .regex(/^evr_[0-9a-f]{64}$/u, \"Invalid evaluation receipt ID\");\n\nexport function parseDigestHex(value: string): DigestHex {\n return digestHexSchema.parse(value);\n}\n\nexport function analysisPlanIdFromDigest(digest: string): AnalysisPlanId {\n return analysisPlanIdSchema.parse(`apl_${parseDigestHex(digest)}`);\n}\n\nexport function evaluationReceiptIdFromDigest(digest: string): EvaluationReceiptId {\n return evaluationReceiptIdSchema.parse(`evr_${parseDigestHex(digest)}`);\n}\n\n/**\n * Mint a Cloud evaluation receipt id from a 64-hex digest (kernel\n * `resultDigest` on the ingest envelope; receipt-semantic digest on the\n * adoption envelope). Same `evr_` + 64 hex contract as\n * `evaluationReceiptIdFromDigest`.\n */\nexport function mintEvaluationReceiptId(resultDigest: string): EvaluationReceiptId {\n return evaluationReceiptIdFromDigest(resultDigest);\n}\n\nexport function parseAnalysisPlanId(value: string): AnalysisPlanId {\n return analysisPlanIdSchema.parse(value);\n}\n\nexport function parseEvaluationReceiptId(value: string): EvaluationReceiptId {\n return evaluationReceiptIdSchema.parse(value);\n}\n","/**\n * Content-addressed fact IDs.\n *\n * A fact ID is a deterministic function of (kind, identity). Two runs over the\n * same inputs produce identical IDs; identity attribute order is irrelevant\n * because the payload is canonicalized before hashing.\n *\n * The hash is a 64-bit FNV-1a (computed as two 32-bit halves with different\n * seeds). It is not a cryptographic hash — fact IDs are integrity references\n * inside one build, not security tokens.\n */\n\nimport {\n authorOwnedImport,\n projectV1OwnedComponentId,\n projectV1OwnedImportIdentity,\n} from \"../package-identity.js\";\nimport type { ComponentId, FactId } from \"./types.js\";\n\n// ---------------------------------------------------------------------------\n// Canonical JSON\n// ---------------------------------------------------------------------------\n\nexport function canonicalJson(value: unknown): string {\n return canonicalJsonValue(value, new Set<object>(), \"(root)\");\n}\n\nfunction canonicalJsonValue(value: unknown, ancestors: Set<object>, path: string): string {\n if (value === undefined) return \"null\";\n if (value === null || typeof value === \"string\" || typeof value === \"boolean\") {\n return JSON.stringify(value);\n }\n if (typeof value === \"number\") {\n if (!Number.isFinite(value)) {\n throw new TypeError(`Unsupported fact identity value at ${path}: non-finite number`);\n }\n const serialized = JSON.stringify(value);\n if (serialized === undefined) {\n throw new TypeError(`Unsupported fact identity value at ${path}: number`);\n }\n return serialized;\n }\n if (typeof value !== \"object\") {\n throw new TypeError(`Unsupported fact identity value at ${path}: ${typeof value}`);\n }\n if (Array.isArray(value)) {\n if (ancestors.has(value)) throw new TypeError(`Circular fact identity value at ${path}`);\n ancestors.add(value);\n try {\n return `[${value\n .map((entry, index) => canonicalJsonValue(entry, ancestors, `${path}[${index}]`))\n .join(\",\")}]`;\n } finally {\n ancestors.delete(value);\n }\n }\n const prototype = Object.getPrototypeOf(value);\n if (prototype !== Object.prototype && prototype !== null) {\n const objectType = prototype?.constructor?.name ?? \"unknown\";\n throw new TypeError(`Unsupported fact identity object at ${path}: ${objectType}`);\n }\n if (ancestors.has(value)) throw new TypeError(`Circular fact identity value at ${path}`);\n ancestors.add(value);\n const entries = Object.entries(value as Record<string, unknown>)\n .filter(([, v]) => v !== undefined)\n .sort(([a], [b]) => (a < b ? -1 : a > b ? 1 : 0));\n try {\n return `{${entries\n .map(\n ([key, entry]) =>\n `${JSON.stringify(key)}:${canonicalJsonValue(entry, ancestors, `${path}.${key}`)}`\n )\n .join(\",\")}}`;\n } finally {\n ancestors.delete(value);\n }\n}\n\n// ---------------------------------------------------------------------------\n// 64-bit FNV-1a (two 32-bit halves with different seeds)\n// ---------------------------------------------------------------------------\n\nconst FNV_PRIME = 0x01000193;\nconst FNV_SEED_A = 0x811c9dc5;\nconst FNV_SEED_B = 0x9e3779b1;\n\nfunction fnv1a32(input: string, seed: number): number {\n let hash = seed >>> 0;\n for (let i = 0; i < input.length; i++) {\n const code = input.charCodeAt(i);\n hash ^= code & 0xff;\n hash = Math.imul(hash, FNV_PRIME) >>> 0;\n if (code > 0xff) {\n hash ^= (code >>> 8) & 0xff;\n hash = Math.imul(hash, FNV_PRIME) >>> 0;\n }\n }\n return hash >>> 0;\n}\n\nexport function hash64Hex(input: string): string {\n const a = fnv1a32(input, FNV_SEED_A);\n const b = fnv1a32(input, FNV_SEED_B);\n return a.toString(16).padStart(8, \"0\") + b.toString(16).padStart(8, \"0\");\n}\n\n// ---------------------------------------------------------------------------\n// IDs\n// ---------------------------------------------------------------------------\n\nexport function componentId(packageName: string, name: string): ComponentId {\n if (!packageName.length || !name.length) {\n throw new Error(\"componentId requires a non-empty packageName and name\");\n }\n return `${authorOwnedImport(packageName)}#${name}` as ComponentId;\n}\n\nexport function asComponentId(value: string): ComponentId {\n if (!value.includes(\"#\")) {\n throw new Error(`componentId must look like \"package#Name\", got \"${value}\"`);\n }\n return value as ComponentId;\n}\n\n/**\n * Compute a content-addressed fact ID. Identity is canonicalized so attribute\n * order is irrelevant.\n */\nexport function factId(kind: string, identity: Record<string, unknown>): FactId {\n const payload = canonicalJson({ k: kind, i: projectFactIdentityV1(kind, identity) });\n return `${kind}:${hash64Hex(payload)}` as FactId;\n}\n\n/**\n * Preserve the immutable v1 fact-id domain across the public package rename.\n * Projection is deliberately kind/key aware: arbitrary strings must not be\n * rewritten merely because they resemble one of our package names.\n */\nfunction projectFactIdentityV1(\n kind: string,\n identity: Record<string, unknown>\n): Record<string, unknown> {\n return Object.fromEntries(\n Object.entries(identity).map(([key, value]) => {\n if (key === \"componentId\" && typeof value === \"string\") {\n return [key, projectV1OwnedComponentId(value)];\n }\n if (\n kind === \"jsx_component_preferred\" &&\n (key === \"from\" || key === \"to\") &&\n typeof value === \"string\"\n ) {\n return [key, projectV1OwnedComponentId(value)];\n }\n if (\n kind === \"jsx_import_path_preferred\" &&\n (key === \"from\" || key === \"to\") &&\n typeof value === \"string\"\n ) {\n return [key, projectV1OwnedImportIdentity(value)];\n }\n if (kind === \"usage_import\" && key === \"source\" && typeof value === \"string\") {\n return [key, projectV1OwnedImportIdentity(value)];\n }\n return [key, value];\n })\n );\n}\n","/**\n * Fact builders — factory functions that compute the content-addressed ID\n * from each fact's identity attributes. Use these everywhere instead of hand-\n * rolling fact objects so the identity contract stays consistent.\n *\n * The \"identity\" of a fact is the subset of attributes that determines its\n * ID. Other attributes (e.g., `because`, `description`) can change without\n * changing the ID — same logical fact, refined payload.\n */\n\nimport type { GovernanceSeverity } from \"../governance.js\";\nimport type { PolicyExclude } from \"../policy-exclude.js\";\nimport { asComponentId, factId } from \"./ids.js\";\nimport type {\n A11yNameRequiredFact,\n CanonicalCandidateFact,\n CanonicalMappingFact,\n CanonicalReplacementFact,\n ClassNameDynamicFact,\n ClassNameDynamicReason,\n ClassNameLiteralFact,\n ClassNameOrigin,\n ComponentCapabilityFact,\n ComponentDefinitionFact,\n ComponentId,\n ComponentIdentityFact,\n ComponentMetadataFact,\n FactLocation,\n GovernanceRuleConfigFact,\n JsxComponentPreferredFact,\n JsxImportPathPreferredFact,\n JsxInlineStyleForbiddenRawFact,\n ContractTokenFact,\n JsxUnknownPropsForbiddenFact,\n PropMetadataFact,\n PropValueAvoidedFact,\n PropValueForbiddenFact,\n ScaleFact,\n ScaleValueFact,\n StructuralConfidenceFact,\n StyleCssVarsMustBeDefinedFact,\n StyleDeclarationFact,\n StyleFontSizeScaleFact,\n StylePropertyScaleFact,\n StyleRawColorForbiddenFact,\n StyleValueProvenance,\n StyleRawDimensionForbiddenFact,\n StyleUnsupportedFact,\n UnsupportedStyleReason,\n TailwindPaletteAllowFact,\n TailwindPaletteDenyFact,\n TailwindUnknownClassEnabledFact,\n TailwindClassFact,\n TailwindModifier,\n TailwindResolvedValue,\n TailwindTokenResolvedFact,\n TailwindValue,\n ThemeDeclarationFact,\n TokenDefinitionFact,\n UsageComponentFact,\n UsageChildContentFact,\n UsageImportFact,\n UsageInlineStyleFact,\n UsageNodeFact,\n UsagePropResolvedFact,\n UsageTextChildFact,\n FactId,\n} from \"./types.js\";\n\n/**\n * Attach a policy record's path excludes without perturbing its fact identity — the\n * field is omitted entirely when nothing was authored, so a config with no excludes\n * produces byte-identical facts (and therefore identical finding fingerprints).\n */\nfunction policyExcludeField(exclude: readonly PolicyExclude[] | undefined): {\n exclude?: PolicyExclude[];\n} {\n return exclude?.length ? { exclude: exclude.map((entry) => ({ ...entry })) } : {};\n}\n\n// ---------------------------------------------------------------------------\n// Component facts\n// ---------------------------------------------------------------------------\n\nexport function makeComponentMetadataFact(input: {\n componentId: ComponentId;\n name: string;\n description?: string;\n category?: string;\n filePath?: string;\n}): ComponentMetadataFact {\n return {\n id: factId(\"component\", { componentId: input.componentId }),\n kind: \"component\",\n componentId: input.componentId,\n name: input.name,\n description: input.description,\n category: input.category,\n filePath: input.filePath,\n };\n}\n\nexport function makeComponentCapabilityFact(input: {\n componentId: ComponentId;\n capability: string;\n}): ComponentCapabilityFact {\n return {\n id: factId(\"component_capability\", {\n componentId: input.componentId,\n capability: input.capability,\n }),\n kind: \"component_capability\",\n componentId: input.componentId,\n capability: input.capability,\n };\n}\n\nexport function makeComponentDefinitionFact(input: {\n file: string;\n exportName: string;\n exported?: boolean;\n componentKey: string;\n renderRoot: ComponentDefinitionFact[\"renderRoot\"];\n propSurface: string[];\n location?: FactLocation;\n stylingChannel?: ComponentDefinitionFact[\"stylingChannel\"];\n}): ComponentDefinitionFact {\n return {\n id: factId(\"component_definition\", { componentKey: input.componentKey }),\n kind: \"component_definition\",\n componentId: asComponentId(input.componentKey),\n file: input.file,\n exportName: input.exportName,\n exported: input.exported ?? false,\n componentKey: input.componentKey,\n renderRoot: input.renderRoot,\n propSurface: [...input.propSurface],\n ...(input.location ? { location: { ...input.location } } : {}),\n ...(input.stylingChannel ? { stylingChannel: { ...input.stylingChannel } } : {}),\n };\n}\n\nexport function makeComponentIdentityFact(input: {\n componentKey: string;\n state: ComponentIdentityFact[\"state\"];\n confidence: ComponentIdentityFact[\"confidence\"];\n canonicalTarget?: string;\n decisionId?: string;\n evidence: FactId[];\n}): ComponentIdentityFact {\n return {\n id: factId(\"component_identity\", { componentKey: input.componentKey }),\n kind: \"component_identity\",\n componentId: asComponentId(input.componentKey),\n componentKey: input.componentKey,\n state: input.state,\n confidence: input.confidence,\n ...(input.canonicalTarget ? { canonicalTarget: input.canonicalTarget } : {}),\n ...(input.decisionId ? { decisionId: input.decisionId } : {}),\n evidence: [...input.evidence],\n };\n}\n\n// ---------------------------------------------------------------------------\n// Classifier facts\n// ---------------------------------------------------------------------------\n\nexport function makeCanonicalCandidateFact(input: {\n componentId: ComponentId;\n canonical: string;\n confidence: number;\n band: CanonicalCandidateFact[\"band\"];\n location?: FactLocation;\n classifierVersion: string;\n vocabVersion: string;\n evidence: unknown[];\n userConfirmed?: boolean;\n}): CanonicalCandidateFact {\n return {\n id: factId(\"canonical_candidate\", {\n componentId: input.componentId,\n canonical: input.canonical,\n classifierVersion: input.classifierVersion,\n vocabVersion: input.vocabVersion,\n }),\n kind: \"canonical_candidate\",\n componentId: input.componentId,\n canonical: input.canonical,\n confidence: input.confidence,\n band: input.band,\n location: input.location,\n classifierVersion: input.classifierVersion,\n vocabVersion: input.vocabVersion,\n evidence: input.evidence,\n userConfirmed: input.userConfirmed,\n };\n}\n\nexport function makeCanonicalMappingFact(input: {\n componentId: ComponentId;\n canonical: string;\n status: CanonicalMappingFact[\"status\"];\n confidence: number;\n location?: FactLocation;\n}): CanonicalMappingFact {\n return {\n id: factId(\"canonical_mapping\", {\n componentId: input.componentId,\n canonical: input.canonical,\n }),\n kind: \"canonical_mapping\",\n componentId: input.componentId,\n canonical: input.canonical,\n status: input.status,\n confidence: input.confidence,\n location: input.location,\n };\n}\n\nexport function makeStructuralConfidenceFact(input: {\n componentId: ComponentId;\n canonical: string;\n confidence: number;\n signalCount: number;\n location?: FactLocation;\n}): StructuralConfidenceFact {\n return {\n id: factId(\"structural_confidence\", {\n componentId: input.componentId,\n canonical: input.canonical,\n }),\n kind: \"structural_confidence\",\n componentId: input.componentId,\n canonical: input.canonical,\n confidence: input.confidence,\n signalCount: input.signalCount,\n location: input.location,\n };\n}\n\nexport function makeCanonicalReplacementFact(input: {\n componentId: ComponentId;\n canonical: string;\n importPath?: string;\n componentName?: string;\n confidence: number;\n location?: FactLocation;\n}): CanonicalReplacementFact {\n return {\n id: factId(\"canonical_replacement\", {\n componentId: input.componentId,\n canonical: input.canonical,\n }),\n kind: \"canonical_replacement\",\n componentId: input.componentId,\n canonical: input.canonical,\n importPath: input.importPath,\n componentName: input.componentName,\n confidence: input.confidence,\n location: input.location,\n };\n}\n\nexport function makePropMetadataFact(input: {\n componentId: ComponentId;\n prop: string;\n type: string;\n values?: string[];\n required: boolean;\n default?: unknown;\n description?: string;\n}): PropMetadataFact {\n return {\n id: factId(\"prop_metadata\", {\n componentId: input.componentId,\n prop: input.prop,\n }),\n kind: \"prop_metadata\",\n componentId: input.componentId,\n prop: input.prop,\n type: input.type,\n values: input.values,\n required: input.required,\n default: input.default,\n description: input.description,\n };\n}\n\n// ---------------------------------------------------------------------------\n// Component-scoped policy facts\n// ---------------------------------------------------------------------------\n\nexport function makePropValueAvoidedFact(input: {\n componentId: ComponentId;\n prop: string;\n value: unknown;\n because: string;\n suggest?: string;\n severity: GovernanceSeverity;\n}): PropValueAvoidedFact {\n return {\n id: factId(\"prop_value_avoided\", {\n componentId: input.componentId,\n prop: input.prop,\n value: input.value,\n }),\n kind: \"prop_value_avoided\",\n componentId: input.componentId,\n prop: input.prop,\n value: input.value,\n because: input.because,\n suggest: input.suggest,\n severity: input.severity,\n };\n}\n\nexport function makePropValueForbiddenFact(input: {\n componentId: ComponentId;\n prop: string;\n value: unknown;\n pathPattern?: string;\n because: string;\n replaceWith?: unknown;\n severity: GovernanceSeverity;\n}): PropValueForbiddenFact {\n return {\n id: factId(\"prop_value_forbidden\", {\n componentId: input.componentId,\n prop: input.prop,\n value: input.value,\n pathPattern: input.pathPattern,\n }),\n kind: \"prop_value_forbidden\",\n componentId: input.componentId,\n prop: input.prop,\n value: input.value,\n pathPattern: input.pathPattern,\n because: input.because,\n replaceWith: input.replaceWith,\n severity: input.severity,\n };\n}\n\nexport function makeA11yNameRequiredFact(input: {\n componentId: ComponentId;\n because: string;\n severity: GovernanceSeverity;\n}): A11yNameRequiredFact {\n return {\n id: factId(\"a11y_name_required\", { componentId: input.componentId }),\n kind: \"a11y_name_required\",\n componentId: input.componentId,\n because: input.because,\n severity: input.severity,\n };\n}\n\n// ---------------------------------------------------------------------------\n// Global policy facts\n// ---------------------------------------------------------------------------\n\nexport function makeScaleFact(input: {\n name: string;\n unit: \"px\" | \"rem\";\n rootFontSizePx?: number;\n emBasePx?: number;\n}): ScaleFact {\n return {\n id: factId(\"scale\", { name: input.name }),\n kind: \"scale\",\n name: input.name,\n unit: input.unit,\n ...(input.rootFontSizePx === undefined ? {} : { rootFontSizePx: input.rootFontSizePx }),\n ...(input.emBasePx === undefined ? {} : { emBasePx: input.emBasePx }),\n };\n}\n\nexport function makeScaleValueFact(input: { scale: string; value: number }): ScaleValueFact {\n return {\n id: factId(\"scale_value\", { scale: input.scale, value: input.value }),\n kind: \"scale_value\",\n scale: input.scale,\n value: input.value,\n };\n}\n\nexport function makeStyleRawColorForbiddenFact(input: {\n except: string[];\n prefer: \"token\" | \"css-variable\";\n severity: GovernanceSeverity;\n exclude?: readonly PolicyExclude[];\n}): StyleRawColorForbiddenFact {\n return {\n id: factId(\"style_raw_color_forbidden\", {}),\n kind: \"style_raw_color_forbidden\",\n except: [...input.except],\n prefer: input.prefer,\n severity: input.severity,\n ...policyExcludeField(input.exclude),\n };\n}\n\nexport function makeStyleRawDimensionForbiddenFact(input: {\n appliesTo: string[];\n prefer: \"token\" | \"css-variable\";\n severity: GovernanceSeverity;\n exclude?: readonly PolicyExclude[];\n}): StyleRawDimensionForbiddenFact {\n return {\n id: factId(\"style_raw_dimension_forbidden\", {}),\n kind: \"style_raw_dimension_forbidden\",\n appliesTo: [...input.appliesTo],\n prefer: input.prefer,\n severity: input.severity,\n ...policyExcludeField(input.exclude),\n };\n}\n\nexport function makeStylePropertyScaleFact(input: {\n property: string;\n scale: string;\n severity: GovernanceSeverity;\n exclude?: readonly PolicyExclude[];\n}): StylePropertyScaleFact {\n return {\n id: factId(\"style_property_scale\", { property: input.property }),\n kind: \"style_property_scale\",\n property: input.property,\n scale: input.scale,\n severity: input.severity,\n ...policyExcludeField(input.exclude),\n };\n}\n\nexport function makeStyleFontSizeScaleFact(input: {\n scale: string;\n severity: GovernanceSeverity;\n exclude?: readonly PolicyExclude[];\n}): StyleFontSizeScaleFact {\n return {\n id: factId(\"style_font_size_scale\", {}),\n kind: \"style_font_size_scale\",\n scale: input.scale,\n severity: input.severity,\n ...policyExcludeField(input.exclude),\n };\n}\n\nexport function makeStyleCssVarsMustBeDefinedFact(input: {\n severity: GovernanceSeverity;\n exclude?: readonly PolicyExclude[];\n configPath?: string;\n}): StyleCssVarsMustBeDefinedFact {\n return {\n id: factId(\"style_css_vars_must_be_defined\", {}),\n kind: \"style_css_vars_must_be_defined\",\n severity: input.severity,\n ...(input.configPath ? { configPath: input.configPath } : {}),\n ...policyExcludeField(input.exclude),\n };\n}\n\nexport function makeContractTokenFact(input: { name: string }): ContractTokenFact {\n const name = input.name.startsWith(\"--\") ? input.name : `--${input.name}`;\n return {\n id: factId(\"contract_token\", { name }),\n kind: \"contract_token\",\n name,\n };\n}\n\nexport function makeJsxUnknownPropsForbiddenFact(input: {\n severity: GovernanceSeverity;\n exclude?: readonly PolicyExclude[];\n}): JsxUnknownPropsForbiddenFact {\n return {\n id: factId(\"jsx_unknown_props_forbidden\", {}),\n kind: \"jsx_unknown_props_forbidden\",\n severity: input.severity,\n ...policyExcludeField(input.exclude),\n };\n}\n\nexport function makeJsxInlineStyleForbiddenRawFact(input: {\n property: string;\n severity: GovernanceSeverity;\n exclude?: readonly PolicyExclude[];\n}): JsxInlineStyleForbiddenRawFact {\n return {\n id: factId(\"jsx_inline_style_forbidden_raw\", { property: input.property }),\n kind: \"jsx_inline_style_forbidden_raw\",\n property: input.property,\n severity: input.severity,\n ...policyExcludeField(input.exclude),\n };\n}\n\nexport function makeJsxImportPathPreferredFact(input: {\n from: string;\n to: string;\n imported?: string;\n because?: string;\n severity: GovernanceSeverity;\n bridge?: JsxImportPathPreferredFact[\"bridge\"];\n exclude?: readonly PolicyExclude[];\n}): JsxImportPathPreferredFact {\n return {\n id: factId(\"jsx_import_path_preferred\", {\n from: input.from,\n to: input.to,\n imported: input.imported,\n bridge: input.bridge,\n }),\n kind: \"jsx_import_path_preferred\",\n from: input.from,\n to: input.to,\n imported: input.imported,\n because: input.because,\n severity: input.severity,\n ...(input.bridge\n ? {\n bridge: {\n ...input.bridge,\n implementationFiles: [...input.bridge.implementationFiles],\n },\n }\n : {}),\n ...policyExcludeField(input.exclude),\n };\n}\n\nexport function makeJsxComponentPreferredFact(input: {\n from: ComponentId;\n to: ComponentId;\n because?: string;\n severity: GovernanceSeverity;\n exclude?: readonly PolicyExclude[];\n}): JsxComponentPreferredFact {\n return {\n id: factId(\"jsx_component_preferred\", {\n from: input.from,\n to: input.to,\n }),\n kind: \"jsx_component_preferred\",\n from: input.from,\n to: input.to,\n because: input.because,\n severity: input.severity,\n ...policyExcludeField(input.exclude),\n };\n}\n\nexport function makeTokenDefinitionFact(input: {\n name: string;\n value: string;\n location?: TokenDefinitionFact[\"location\"];\n category?: TokenDefinitionFact[\"category\"];\n referenceFormat?: TokenDefinitionFact[\"referenceFormat\"];\n sourceNames?: TokenDefinitionFact[\"sourceNames\"];\n role?: TokenDefinitionFact[\"role\"];\n authority?: TokenDefinitionFact[\"authority\"];\n sourceIdentity?: TokenDefinitionFact[\"sourceIdentity\"];\n upstreamName?: TokenDefinitionFact[\"upstreamName\"];\n}): TokenDefinitionFact {\n const authorityIdentity =\n input.role || input.sourceIdentity\n ? { role: input.role ?? \"local\", sourceIdentity: input.sourceIdentity ?? \"\" }\n : {};\n return {\n id: factId(\"token_definition\", { name: input.name, ...authorityIdentity }),\n kind: \"token_definition\",\n name: input.name,\n value: input.value,\n ...(input.location ? { location: input.location } : {}),\n category: input.category,\n referenceFormat: input.referenceFormat,\n ...(input.sourceNames?.length ? { sourceNames: [...input.sourceNames] } : {}),\n ...(input.role ? { role: input.role } : {}),\n ...(input.authority ? { authority: input.authority } : {}),\n ...(input.sourceIdentity ? { sourceIdentity: input.sourceIdentity } : {}),\n ...(input.upstreamName ? { upstreamName: input.upstreamName } : {}),\n };\n}\n\nexport function makeTailwindPaletteAllowFact(input: {\n patterns: string[];\n severity: GovernanceSeverity;\n}): TailwindPaletteAllowFact {\n return {\n id: factId(\"tailwind_palette_allow\", {}),\n kind: \"tailwind_palette_allow\",\n patterns: [...input.patterns],\n severity: input.severity,\n };\n}\n\nexport function makeTailwindPaletteDenyFact(input: {\n patterns: string[];\n severity: GovernanceSeverity;\n}): TailwindPaletteDenyFact {\n return {\n id: factId(\"tailwind_palette_deny\", {}),\n kind: \"tailwind_palette_deny\",\n patterns: [...input.patterns],\n severity: input.severity,\n };\n}\n\nexport function makeTailwindUnknownClassEnabledFact(input: {\n severity: GovernanceSeverity;\n}): TailwindUnknownClassEnabledFact {\n return {\n id: factId(\"tailwind_unknown_class_enabled\", {}),\n kind: \"tailwind_unknown_class_enabled\",\n severity: input.severity,\n };\n}\n\nexport function makeGovernanceRuleConfigFact(input: {\n ruleId: string;\n enabled: boolean;\n severity?: GovernanceSeverity;\n options?: Record<string, unknown>;\n}): GovernanceRuleConfigFact {\n return {\n id: factId(\"governance_rule_config\", { ruleId: input.ruleId }),\n kind: \"governance_rule_config\",\n ruleId: input.ruleId,\n enabled: input.enabled,\n severity: input.severity,\n options: input.options,\n };\n}\n\n// ---------------------------------------------------------------------------\n// Usage facts\n// ---------------------------------------------------------------------------\n\nexport function makeUsageNodeFact(input: {\n file: string;\n nodePath: string;\n element: string;\n role?: string;\n interactive?: boolean;\n location: FactLocation;\n}): UsageNodeFact {\n return {\n // Identity is structural (file + nodePath + element) only — the normalized\n // semantics (role/interactive) are evidence carried on the fact, never part\n // of its ID, so adding them never perturbs existing fact identities.\n id: factId(\"usage_node\", {\n file: input.file,\n nodePath: input.nodePath,\n element: input.element,\n }),\n kind: \"usage_node\",\n file: input.file,\n nodePath: input.nodePath,\n element: input.element,\n ...(input.role !== undefined ? { role: input.role } : {}),\n ...(input.interactive ? { interactive: true } : {}),\n location: input.location,\n };\n}\n\nexport function makeUsageComponentFact(input: {\n nodeId: FactId;\n componentId: ComponentId;\n definitionKey?: string;\n}): UsageComponentFact {\n return {\n id: factId(\"usage_component\", {\n nodeId: input.nodeId,\n componentId: input.componentId,\n }),\n kind: \"usage_component\",\n nodeId: input.nodeId,\n componentId: input.componentId,\n ...(input.definitionKey ? { definitionKey: input.definitionKey } : {}),\n };\n}\n\nexport function makeUsageImportFact(input: {\n file: string;\n local: string;\n imported: string;\n source: string;\n namespace?: boolean;\n location: FactLocation;\n}): UsageImportFact {\n return {\n id: factId(\"usage_import\", {\n file: input.file,\n local: input.local,\n imported: input.imported,\n source: input.source,\n }),\n kind: \"usage_import\",\n file: input.file,\n local: input.local,\n imported: input.imported,\n source: input.source,\n namespace: input.namespace,\n location: input.location,\n };\n}\n\nexport function makeUsagePropResolvedFact(input: {\n nodeId: FactId;\n prop: string;\n resolution: \"static\" | \"dynamic\" | \"spread\" | \"jsx\";\n value?: unknown;\n location?: FactLocation;\n}): UsagePropResolvedFact {\n return {\n id: factId(\"usage_prop_resolved\", { nodeId: input.nodeId, prop: input.prop }),\n kind: \"usage_prop_resolved\",\n nodeId: input.nodeId,\n prop: input.prop,\n resolution: input.resolution,\n value: input.value,\n location: input.location,\n };\n}\n\nexport function makeUsageInlineStyleFact(input: {\n nodeId: FactId;\n property: string;\n valueKind: \"static\" | \"number\" | \"css-variable\" | \"dynamic-raw\";\n value: string;\n valueFrom?: StyleValueProvenance;\n}): UsageInlineStyleFact {\n return {\n id: factId(\"usage_inline_style\", {\n nodeId: input.nodeId,\n property: input.property,\n }),\n kind: \"usage_inline_style\",\n nodeId: input.nodeId,\n property: input.property,\n valueKind: input.valueKind,\n value: input.value,\n ...(input.valueFrom ? { valueFrom: input.valueFrom } : {}),\n };\n}\n\nexport function makeUsageTextChildFact(input: {\n nodeId: FactId;\n text: string;\n index: number;\n}): UsageTextChildFact {\n return {\n id: factId(\"usage_text_child\", { nodeId: input.nodeId, index: input.index }),\n kind: \"usage_text_child\",\n nodeId: input.nodeId,\n text: input.text,\n index: input.index,\n };\n}\n\nexport function makeUsageChildContentFact(input: {\n nodeId: FactId;\n content: UsageChildContentFact[\"content\"];\n}): UsageChildContentFact {\n return {\n id: factId(\"usage_child_content\", { nodeId: input.nodeId }),\n kind: \"usage_child_content\",\n nodeId: input.nodeId,\n content: input.content,\n };\n}\n\nexport function makeClassNameLiteralFact(input: {\n file: string;\n nodeId: FactId;\n attr: string;\n classes: string[];\n origin: ClassNameOrigin;\n originPath: string;\n location: FactLocation;\n}): ClassNameLiteralFact {\n return {\n id: factId(\"classname_literal\", {\n nodeId: input.nodeId,\n attr: input.attr,\n origin: input.origin,\n originPath: input.originPath,\n }),\n kind: \"classname_literal\",\n file: input.file,\n nodeId: input.nodeId,\n attr: input.attr,\n classes: [...input.classes],\n origin: input.origin,\n originPath: input.originPath,\n location: input.location,\n };\n}\n\nexport function makeClassNameDynamicFact(input: {\n file: string;\n nodeId: FactId;\n attr: string;\n reason: ClassNameDynamicReason;\n snippet: string;\n originPath: string;\n location: FactLocation;\n}): ClassNameDynamicFact {\n return {\n id: factId(\"classname_dynamic\", {\n nodeId: input.nodeId,\n attr: input.attr,\n reason: input.reason,\n originPath: input.originPath,\n }),\n kind: \"classname_dynamic\",\n file: input.file,\n nodeId: input.nodeId,\n attr: input.attr,\n reason: input.reason,\n snippet: input.snippet,\n originPath: input.originPath,\n location: input.location,\n };\n}\n\nexport function makeTailwindClassFact(input: {\n file: string;\n nodeId: FactId;\n raw: string;\n originPath: string;\n prefix: string | null;\n modifiers: TailwindModifier[];\n important: boolean;\n negative: boolean;\n utility: string;\n value: TailwindValue;\n location: FactLocation;\n}): TailwindClassFact {\n return {\n id: factId(\"tailwind_class\", {\n nodeId: input.nodeId,\n originPath: input.originPath,\n }),\n kind: \"tailwind_class\",\n file: input.file,\n nodeId: input.nodeId,\n raw: input.raw,\n originPath: input.originPath,\n prefix: input.prefix,\n modifiers: input.modifiers.map((m) => ({ ...m })),\n important: input.important,\n negative: input.negative,\n utility: input.utility,\n value: { ...input.value },\n location: input.location,\n };\n}\n\nexport function makeThemeDeclarationFact(input: {\n file: string;\n name: string;\n value: string;\n declarationPath: string;\n inline: boolean;\n flavor: ThemeDeclarationFact[\"flavor\"];\n location: FactLocation;\n}): ThemeDeclarationFact {\n return {\n id: factId(\"theme_declaration\", {\n file: input.file,\n name: input.name,\n declarationPath: input.declarationPath,\n }),\n kind: \"theme_declaration\",\n file: input.file,\n name: input.name,\n value: input.value,\n declarationPath: input.declarationPath,\n inline: input.inline,\n flavor: input.flavor,\n location: input.location,\n };\n}\n\nexport function makeTailwindTokenResolvedFact(input: {\n utility: string;\n token: string;\n resolved: TailwindResolvedValue;\n}): TailwindTokenResolvedFact {\n return {\n id: factId(\"tailwind_token_resolved\", {\n utility: input.utility,\n token: input.token,\n }),\n kind: \"tailwind_token_resolved\",\n utility: input.utility,\n token: input.token,\n resolved: { ...input.resolved },\n };\n}\n\nexport function makeStyleDeclarationFact(input: {\n file: string;\n selector: string;\n declarationPath: string;\n property: string;\n value: string;\n location: FactLocation;\n declaredTokenSource?: boolean;\n valueFrom?: StyleValueProvenance;\n}): StyleDeclarationFact {\n return {\n id: factId(\"style_declaration\", {\n file: input.file,\n selector: input.selector,\n declarationPath: input.declarationPath,\n property: input.property,\n }),\n kind: \"style_declaration\",\n file: input.file,\n selector: input.selector,\n declarationPath: input.declarationPath,\n property: input.property,\n value: input.value,\n location: input.location,\n ...(input.declaredTokenSource ? { declaredTokenSource: true } : {}),\n ...(input.valueFrom ? { valueFrom: input.valueFrom } : {}),\n };\n}\n\nexport function makeStyleUnsupportedFact(input: {\n file: string;\n source: \"css-in-js\";\n syntax: string;\n selector: string;\n declarationPath: string;\n property?: string;\n reason: UnsupportedStyleReason;\n location: FactLocation;\n}): StyleUnsupportedFact {\n return {\n id: factId(\"style_unsupported\", {\n file: input.file,\n source: input.source,\n syntax: input.syntax,\n selector: input.selector,\n declarationPath: input.declarationPath,\n property: input.property ?? \"\",\n }),\n kind: \"style_unsupported\",\n file: input.file,\n source: input.source,\n syntax: input.syntax,\n selector: input.selector,\n declarationPath: input.declarationPath,\n property: input.property,\n reason: input.reason,\n location: input.location,\n };\n}\n","import {\n canonicalizeOwnedComponentId,\n canonicalizeOwnedImport,\n ownedImportEquivalents,\n} from \"./package-identity.js\";\n\n/** Equality for typed npm import fields; arbitrary strings remain exact. */\nexport function ownedImportsEqual(left: string, right: string): boolean {\n if (left === right) return true;\n if (ownedImportEquivalents(left).includes(right)) return true;\n return canonicalizeOwnedImport(left) === canonicalizeOwnedImport(right);\n}\n\n/**\n * Match an import against a configured package root/subpath while accepting\n * every signed legacy/current spelling of that root.\n */\nexport function ownedImportMatchesRoot(imported: string, configuredRoot: string): boolean {\n for (const equivalent of ownedImportEquivalents(configuredRoot)) {\n if (imported === equivalent || imported.startsWith(`${equivalent}/`)) {\n return true;\n }\n }\n\n const canonicalImported = canonicalizeOwnedImport(imported);\n const canonicalRoot = canonicalizeOwnedImport(configuredRoot);\n return canonicalImported === canonicalRoot || canonicalImported.startsWith(`${canonicalRoot}/`);\n}\n\n/** Equality for the package-name half of typed `package#Component` ids. */\nexport function ownedComponentIdsEqual(left: string, right: string): boolean {\n return canonicalizeOwnedComponentId(left) === canonicalizeOwnedComponentId(right);\n}\n","/**\n * In-memory index over Fact records.\n *\n * Rules consume the index, never raw fact arrays. The query surface is\n * intentionally narrow: components.byId / propsOf / propOf / capabilitiesOf,\n * and policy.<predicate>(componentId, opts?). This keeps Phase 5 rules pure\n * and content-addressed.\n */\n\nimport type {\n A11yNameRequiredFact,\n ComponentCapabilityFact,\n ComponentId,\n ComponentMetadataFact,\n Fact,\n FactId,\n FactKind,\n FactOfKind,\n GovernanceRuleConfigFact,\n JsxComponentPreferredFact,\n JsxImportPathPreferredFact,\n JsxInlineStyleForbiddenRawFact,\n JsxUnknownPropsForbiddenFact,\n PropMetadataFact,\n PropValueAvoidedFact,\n PropValueForbiddenFact,\n ScaleFact,\n ScaleValueFact,\n StyleCssVarsMustBeDefinedFact,\n StyleFontSizeScaleFact,\n StylePropertyScaleFact,\n StyleRawColorForbiddenFact,\n StyleRawDimensionForbiddenFact,\n TailwindPaletteAllowFact,\n TailwindPaletteDenyFact,\n TailwindUnknownClassEnabledFact,\n TokenDefinitionFact,\n} from \"./types.js\";\nimport { canonicalJson } from \"./ids.js\";\nimport { canonicalizeOwnedComponentId, canonicalizeOwnedImport } from \"../package-identity.js\";\nimport { ownedComponentIdsEqual, ownedImportsEqual } from \"../package-identity-match.js\";\n\nexport interface FactEvidence {\n factId: FactId;\n fact: Fact;\n}\n\n/**\n * The two facts involved in a first-wins drop: `kept` is already indexed, `skipped`\n * carries different logical content and is discarded. Handed to `onConflict` alongside\n * the rendered message so callers can classify the drop (a colliding *config record* is\n * a named user-facing diagnostic; anything else stays an internal debug line) instead of\n * re-parsing prose.\n */\nexport interface FactConflict {\n kept: Fact;\n skipped: Fact;\n}\n\n/** Two observations with the same fact identity and material value. */\nexport interface FactDuplicate {\n kept: Fact;\n duplicate: Fact;\n}\n\nexport interface FactIndexOptions {\n /** Optional internal diagnostic route. Product output is quiet by default. */\n onConflict?: (message: string, conflict: FactConflict) => void;\n /** Optional provenance route for a materially identical duplicate. */\n onDuplicate?: (duplicate: FactDuplicate) => void;\n}\n\ninterface FactWithComponent {\n componentId: ComponentId;\n}\n\nfunction hasComponentId(fact: Fact): fact is Fact & FactWithComponent {\n return \"componentId\" in fact && typeof (fact as FactWithComponent).componentId === \"string\";\n}\n\nfunction logicalComponentId(componentId: ComponentId): ComponentId {\n return canonicalizeOwnedComponentId(componentId) as ComponentId;\n}\n\nfunction logicalFactForComparison(fact: Fact): Record<string, unknown> {\n if (fact.kind === \"token_definition\") {\n const { location: _location, sourceNames: _sourceNames, ...logicalFact } = fact;\n return logicalFact;\n }\n if (fact.kind === \"component_definition\") {\n const { location: _location, ...logicalFact } = fact;\n return { ...logicalFact, componentId: logicalComponentId(fact.componentId) };\n }\n if (fact.kind === \"jsx_import_path_preferred\") {\n return {\n ...fact,\n from: canonicalizeOwnedImport(fact.from),\n to: canonicalizeOwnedImport(fact.to),\n };\n }\n if (fact.kind === \"jsx_component_preferred\") {\n return {\n ...fact,\n from: logicalComponentId(fact.from),\n to: logicalComponentId(fact.to),\n };\n }\n if (fact.kind === \"usage_import\") {\n return { ...fact, source: canonicalizeOwnedImport(fact.source) };\n }\n if (hasComponentId(fact)) {\n return { ...fact, componentId: logicalComponentId(fact.componentId) };\n }\n return { ...fact };\n}\n\nfunction uniqueByLogicalIdentity<T>(items: readonly T[], keyOf: (item: T) => string): T[] {\n const seen = new Set<string>();\n return items.filter((item) => {\n const key = keyOf(item);\n if (seen.has(key)) return false;\n seen.add(key);\n return true;\n });\n}\n\n/**\n * Match a literal path against a simple glob pattern. `*` matches any run of\n * non-separator characters; `**` matches any run of characters including\n * separators.\n */\nexport function matchesGlob(path: string, pattern: string): boolean {\n const escaped = pattern.replace(/[.+^${}()|[\\]\\\\]/g, \"\\\\$&\");\n const expanded = escaped\n .replace(/\\*\\*/g, \"::DOUBLE::\")\n .replace(/\\*/g, \"[^/]*\")\n .replace(/::DOUBLE::/g, \".*\");\n return new RegExp(`^${expanded}$`).test(path);\n}\n\nexport class FactIndex {\n private readonly facts = new Map<FactId, Fact>();\n private readonly idsByKind = new Map<FactKind, Set<FactId>>();\n private readonly idsByComponent = new Map<ComponentId, Set<FactId>>();\n private readonly tokenBySymbol = new Map<string, TokenDefinitionFact>();\n\n constructor(private readonly options: FactIndexOptions = {}) {}\n\n add(fact: Fact): void {\n if (fact.kind === \"token_definition\") {\n this.indexTokenSymbols(fact);\n }\n const existing = this.facts.get(fact.id);\n if (existing) {\n const differs =\n canonicalJson(logicalFactForComparison(existing)) !==\n canonicalJson(logicalFactForComparison(fact));\n if (differs) {\n this.options.onConflict?.(\n `FactIndex: conflicting facts for id ${fact.id} — keeping ${describeFactForConflict(existing)}, skipping ${describeFactForConflict(fact)}`,\n { kept: existing, skipped: fact }\n );\n } else {\n this.options.onDuplicate?.({ kept: existing, duplicate: fact });\n }\n return;\n }\n this.facts.set(fact.id, fact);\n\n let byKind = this.idsByKind.get(fact.kind);\n if (!byKind) {\n byKind = new Set();\n this.idsByKind.set(fact.kind, byKind);\n }\n byKind.add(fact.id);\n\n if (hasComponentId(fact)) {\n const componentId = logicalComponentId(fact.componentId);\n let byComponent = this.idsByComponent.get(componentId);\n if (!byComponent) {\n byComponent = new Set();\n this.idsByComponent.set(componentId, byComponent);\n }\n byComponent.add(fact.id);\n }\n }\n\n addMany(facts: Iterable<Fact>): void {\n for (const fact of facts) this.add(fact);\n }\n\n get(id: FactId): Fact | undefined {\n return this.facts.get(id);\n }\n\n has(id: FactId): boolean {\n return this.facts.has(id);\n }\n\n size(): number {\n return this.facts.size;\n }\n\n all(): Fact[] {\n return [...this.facts.values()];\n }\n\n byKind<K extends FactKind>(kind: K): Array<FactOfKind<K>> {\n const ids = this.idsByKind.get(kind);\n if (!ids) return [];\n const out: FactOfKind<K>[] = [];\n for (const id of ids) {\n const fact = this.facts.get(id);\n if (fact && fact.kind === kind) out.push(fact as FactOfKind<K>);\n }\n return out;\n }\n\n /**\n * Resolve evidence for a list of fact IDs. Throws if any ID is missing —\n * findings must never reference facts that aren't in the index.\n */\n evidence(ids: readonly FactId[]): FactEvidence[] {\n const missing: FactId[] = [];\n const out: FactEvidence[] = [];\n for (const id of ids) {\n const fact = this.facts.get(id);\n if (!fact) {\n missing.push(id);\n continue;\n }\n out.push({ factId: id, fact });\n }\n if (missing.length) {\n throw new Error(`FactIndex.evidence: missing facts in index: ${missing.join(\", \")}`);\n }\n return out;\n }\n\n // ---------------------------------------------------------------------\n // Component queries\n // ---------------------------------------------------------------------\n\n components = {\n list: (): ComponentMetadataFact[] =>\n uniqueByLogicalIdentity(this.byKind(\"component\"), (fact) =>\n canonicalJson({\n ...logicalFactForComparison(fact),\n id: undefined,\n })\n ),\n byId: (componentId: ComponentId): ComponentMetadataFact | undefined =>\n this.byComponentOfKind<ComponentMetadataFact>(componentId, \"component\")[0],\n propsOf: (componentId: ComponentId): PropMetadataFact[] =>\n this.byComponentOfKind<PropMetadataFact>(componentId, \"prop_metadata\"),\n propOf: (componentId: ComponentId, prop: string): PropMetadataFact | undefined =>\n this.components.propsOf(componentId).find((p) => p.prop === prop),\n capabilitiesOf: (componentId: ComponentId): ComponentCapabilityFact[] =>\n this.byComponentOfKind<ComponentCapabilityFact>(componentId, \"component_capability\"),\n };\n\n // ---------------------------------------------------------------------\n // Policy queries\n // ---------------------------------------------------------------------\n\n policy = {\n forbiddenPropValues: (\n componentId: ComponentId,\n opts: { prop?: string; path?: string; value?: unknown } = {}\n ): PropValueForbiddenFact[] => {\n const all = this.byComponentOfKind<PropValueForbiddenFact>(\n componentId,\n \"prop_value_forbidden\"\n );\n return all.filter((fact) => {\n if (opts.prop !== undefined && fact.prop !== opts.prop) return false;\n if (opts.value !== undefined && fact.value !== opts.value) return false;\n if (opts.path !== undefined && fact.pathPattern) {\n if (!matchesGlob(opts.path, fact.pathPattern)) return false;\n }\n return true;\n });\n },\n\n avoidedPropValues: (\n componentId: ComponentId,\n opts: { prop?: string; value?: unknown } = {}\n ): PropValueAvoidedFact[] => {\n const all = this.byComponentOfKind<PropValueAvoidedFact>(componentId, \"prop_value_avoided\");\n return all.filter((fact) => {\n if (opts.prop !== undefined && fact.prop !== opts.prop) return false;\n if (opts.value !== undefined && fact.value !== opts.value) return false;\n return true;\n });\n },\n\n a11yNameRequired: (componentId: ComponentId): A11yNameRequiredFact | undefined =>\n this.byComponentOfKind<A11yNameRequiredFact>(componentId, \"a11y_name_required\")[0],\n\n scales: (): ScaleFact[] => this.byKind(\"scale\"),\n\n scale: (name: string): ScaleFact | undefined =>\n this.byKind(\"scale\").find((s) => s.name === name),\n\n scaleValues: (name: string): ScaleValueFact[] =>\n this.byKind(\"scale_value\").filter((v) => v.scale === name),\n\n rawColorPolicy: (): StyleRawColorForbiddenFact | undefined =>\n this.byKind(\"style_raw_color_forbidden\")[0],\n\n rawDimensionPolicy: (): StyleRawDimensionForbiddenFact | undefined =>\n this.byKind(\"style_raw_dimension_forbidden\")[0],\n\n propertyScale: (property: string): StylePropertyScaleFact | undefined =>\n this.byKind(\"style_property_scale\").find((p) => p.property === property),\n\n fontSizeScale: (): StyleFontSizeScaleFact | undefined =>\n this.byKind(\"style_font_size_scale\")[0],\n\n cssVarsMustBeDefined: (): StyleCssVarsMustBeDefinedFact | undefined =>\n this.byKind(\"style_css_vars_must_be_defined\")[0],\n\n tailwindPaletteAllow: (): TailwindPaletteAllowFact | undefined =>\n this.byKind(\"tailwind_palette_allow\")[0],\n\n tailwindPaletteDeny: (): TailwindPaletteDenyFact | undefined =>\n this.byKind(\"tailwind_palette_deny\")[0],\n\n tailwindUnknownClassEnabled: (): TailwindUnknownClassEnabledFact | undefined =>\n this.byKind(\"tailwind_unknown_class_enabled\")[0],\n\n ruleConfig: (ruleId: string): GovernanceRuleConfigFact | undefined =>\n this.byKind(\"governance_rule_config\").find((fact) => fact.ruleId === ruleId),\n\n jsxUnknownPropsForbidden: (): JsxUnknownPropsForbiddenFact | undefined =>\n this.byKind(\"jsx_unknown_props_forbidden\")[0],\n\n jsxInlineStyleForbiddenRaw: (\n opts: { property?: string } = {}\n ): JsxInlineStyleForbiddenRawFact[] => {\n const all = this.byKind(\"jsx_inline_style_forbidden_raw\");\n return opts.property === undefined ? all : all.filter((f) => f.property === opts.property);\n },\n\n jsxImportPathPreferred: (\n opts: { from?: string; imported?: string } = {}\n ): JsxImportPathPreferredFact[] => {\n const all = uniqueByLogicalIdentity(this.byKind(\"jsx_import_path_preferred\"), (fact) =>\n canonicalJson({\n from: canonicalizeOwnedImport(fact.from),\n to: canonicalizeOwnedImport(fact.to),\n imported: fact.imported,\n because: fact.because,\n severity: fact.severity,\n })\n );\n return all.filter((fact) => {\n if (opts.from !== undefined && !ownedImportsEqual(fact.from, opts.from)) return false;\n if (opts.imported !== undefined && fact.imported !== opts.imported) return false;\n return true;\n });\n },\n\n jsxComponentPreferred: (opts: { from?: ComponentId } = {}): JsxComponentPreferredFact[] => {\n const all = uniqueByLogicalIdentity(this.byKind(\"jsx_component_preferred\"), (fact) =>\n canonicalJson({\n from: canonicalizeOwnedComponentId(fact.from),\n to: canonicalizeOwnedComponentId(fact.to),\n because: fact.because,\n severity: fact.severity,\n })\n );\n return opts.from === undefined\n ? all\n : all.filter((fact) => ownedComponentIdsEqual(fact.from, opts.from!));\n },\n };\n\n // ---------------------------------------------------------------------\n // Token registry queries\n // ---------------------------------------------------------------------\n\n tokens = {\n list: (): TokenDefinitionFact[] => this.byKind(\"token_definition\"),\n byCategory: (category: TokenDefinitionFact[\"category\"]): TokenDefinitionFact[] =>\n this.byKind(\"token_definition\").filter((t) => t.category === category),\n symbolExists: (name: string): boolean => this.tokenBySymbol.has(name),\n definitionForSymbol: (name: string): TokenDefinitionFact | undefined =>\n this.tokenBySymbol.get(name),\n };\n\n // ---------------------------------------------------------------------\n // Internals\n // ---------------------------------------------------------------------\n\n private indexTokenSymbols(fact: TokenDefinitionFact): void {\n // Upstream definitions are comparison evidence, not local replacement\n // candidates. Keeping them out of the reverse symbol index also prevents a\n // known-drift upstream value from making the local token look safe.\n if (fact.role === \"upstream\") return;\n const legacyScssAlias =\n fact.referenceFormat === \"scss-var\" && fact.name.startsWith(\"--\")\n ? `$${fact.name.slice(2)}`\n : fact.referenceFormat === \"scss-var\" && fact.name.startsWith(\"$\")\n ? `--${fact.name.slice(1)}`\n : undefined;\n for (const symbol of [fact.name, ...(fact.sourceNames ?? []), legacyScssAlias]) {\n if (!symbol) continue;\n if (!this.tokenBySymbol.has(symbol)) this.tokenBySymbol.set(symbol, fact);\n }\n }\n\n private byComponentOfKind<F extends Fact>(componentId: ComponentId, kind: FactKind): F[] {\n const ids = this.idsByComponent.get(logicalComponentId(componentId));\n if (!ids) return [];\n const out: F[] = [];\n const seen = new Set<string>();\n for (const id of ids) {\n const fact = this.facts.get(id);\n if (fact && fact.kind === kind) {\n const logicalFact = hasComponentId(fact)\n ? {\n ...fact,\n id: undefined,\n componentId: logicalComponentId(fact.componentId),\n }\n : { ...fact, id: undefined };\n const key = canonicalJson(logicalFact);\n if (seen.has(key)) continue;\n seen.add(key);\n out.push(fact as F);\n }\n }\n return out;\n }\n}\n\nfunction describeFactForConflict(fact: Fact): string {\n const parts = [`kind=${fact.kind}`];\n const maybeLocation = \"location\" in fact ? fact.location : undefined;\n if (maybeLocation && typeof maybeLocation === \"object\") {\n const loc = maybeLocation as { file?: unknown; line?: unknown; column?: unknown };\n if (typeof loc.file === \"string\") {\n const line = typeof loc.line === \"number\" ? `:${loc.line}` : \"\";\n const column = typeof loc.column === \"number\" ? `:${loc.column}` : \"\";\n parts.push(`location=${loc.file}${line}${column}`);\n }\n }\n if (\"nodePath\" in fact && typeof fact.nodePath === \"string\") {\n parts.push(`nodePath=${fact.nodePath}`);\n }\n if (\"element\" in fact && typeof fact.element === \"string\") {\n parts.push(`element=${fact.element}`);\n }\n return parts.join(\" \");\n}\n","import { z } from \"zod\";\nimport type {\n ComponentRelation,\n FragmentComponent,\n FragmentContract,\n FragmentExample,\n FragmentGuidance,\n FragmentMeta,\n FragmentProvenance,\n PropDefinition,\n} from \"./types.js\";\nimport { portableRepoPathError } from \"./config-paths.js\";\nimport { policyExcludeSchema } from \"./policy-exclude.js\";\n\nexport const governanceSeveritySchema = z.enum([\"error\", \"warn\", \"info\"]);\nexport type GovernanceSeverity = z.infer<typeof governanceSeveritySchema>;\n\n/**\n * Per-record path excludes. Scopes THIS policy record off the matching paths without\n * hiding those paths from any other rule — an auditable exemption, not a baseline.\n * Excluded findings are reported in the scan's ignored accounting with their reason.\n */\nconst recordExcludeSchema = policyExcludeSchema.optional();\n\nexport const scaleGovernanceRecordSchema = z.object({\n kind: z.literal(\"scale\").default(\"scale\"),\n name: z.string().min(1).optional(),\n unit: z.enum([\"px\", \"rem\"]),\n values: z.array(z.number()),\n rootFontSizePx: z.number().positive().optional(),\n emBasePx: z.number().positive().optional(),\n});\n\nconst styleRawColorsForbidRecordSchema = z.object({\n kind: z.literal(\"style.rawColors.forbid\"),\n except: z.array(z.string()),\n prefer: z.enum([\"token\", \"css-variable\"]),\n severity: governanceSeveritySchema,\n exclude: recordExcludeSchema,\n});\n\nconst styleRawDimensionsForbidRecordSchema = z.object({\n kind: z.literal(\"style.rawDimensions.forbid\"),\n appliesTo: z.array(z.string().min(1)),\n prefer: z.enum([\"token\", \"css-variable\"]),\n severity: governanceSeveritySchema,\n exclude: recordExcludeSchema,\n});\n\nconst styleRawSpacingMustMatchScaleRecordSchema = z.object({\n kind: z.literal(\"style.rawSpacing.mustMatchScale\"),\n scale: z.string().min(1),\n appliesTo: z.array(z.string().min(1)),\n severity: governanceSeveritySchema,\n exclude: recordExcludeSchema,\n});\n\nconst styleFontSizeMustMatchScaleRecordSchema = z.object({\n kind: z.literal(\"style.fontSize.mustMatchScale\"),\n scale: z.string().min(1),\n severity: governanceSeveritySchema,\n exclude: recordExcludeSchema,\n});\n\nconst styleCssVarsMustBeDefinedRecordSchema = z.object({\n kind: z.literal(\"style.cssVars.mustBeDefined\"),\n severity: governanceSeveritySchema,\n exclude: recordExcludeSchema,\n});\n\nexport const globalStyleGovernanceRecordSchema = z.discriminatedUnion(\"kind\", [\n styleRawColorsForbidRecordSchema,\n styleRawDimensionsForbidRecordSchema,\n styleRawSpacingMustMatchScaleRecordSchema,\n styleFontSizeMustMatchScaleRecordSchema,\n styleCssVarsMustBeDefinedRecordSchema,\n]);\n\nconst jsxUnknownPropsForbidRecordSchema = z.object({\n kind: z.literal(\"jsx.unknownProps.forbid\"),\n severity: governanceSeveritySchema,\n exclude: recordExcludeSchema,\n});\n\nconst jsxInlineStyleForbidRawRecordSchema = z.object({\n kind: z.literal(\"jsx.inlineStyle.forbidRaw\"),\n properties: z.array(z.string().min(1)),\n severity: governanceSeveritySchema,\n exclude: recordExcludeSchema,\n});\n\nconst jsxImportPathPreferRecordSchema = z.object({\n kind: z.literal(\"jsx.importPath.prefer\"),\n from: z.string().min(1),\n to: z.string().min(1),\n imported: z.string().min(1).optional(),\n because: z.string().optional(),\n severity: governanceSeveritySchema,\n exclude: recordExcludeSchema,\n});\n\nconst jsxComponentPreferRecordSchema = z.object({\n kind: z.literal(\"jsx.component.prefer\"),\n from: z.string().min(1),\n to: z.string().min(1),\n because: z.string().optional(),\n severity: governanceSeveritySchema,\n exclude: recordExcludeSchema,\n});\n\nexport const globalJsxGovernanceRecordSchema = z.discriminatedUnion(\"kind\", [\n jsxUnknownPropsForbidRecordSchema,\n jsxInlineStyleForbidRawRecordSchema,\n jsxImportPathPreferRecordSchema,\n jsxComponentPreferRecordSchema,\n]);\n\nexport const globalGovernanceRecordSchema = z.discriminatedUnion(\"kind\", [\n scaleGovernanceRecordSchema,\n styleRawColorsForbidRecordSchema,\n styleRawDimensionsForbidRecordSchema,\n styleRawSpacingMustMatchScaleRecordSchema,\n styleFontSizeMustMatchScaleRecordSchema,\n styleCssVarsMustBeDefinedRecordSchema,\n jsxUnknownPropsForbidRecordSchema,\n jsxInlineStyleForbidRawRecordSchema,\n jsxImportPathPreferRecordSchema,\n jsxComponentPreferRecordSchema,\n]);\n\nconst componentCapabilityRecordSchema = z.object({\n kind: z.literal(\"capability\"),\n capability: z.string().min(1),\n});\n\nconst requiredComponentGovernanceValueSchema = z.custom<unknown>(\n (value) => value !== undefined,\n \"Expected an explicitly present governance value\"\n);\n\nconst propValueAvoidRecordSchema = z.object({\n kind: z.literal(\"prop.value.avoid\"),\n prop: z.string().min(1),\n value: requiredComponentGovernanceValueSchema,\n because: z.string(),\n suggest: z.string().optional(),\n severity: governanceSeveritySchema,\n});\n\nconst propValueForbidRecordSchema = z.object({\n kind: z.literal(\"prop.value.forbid\"),\n prop: z.string().min(1),\n value: requiredComponentGovernanceValueSchema,\n when: z.object({ path: z.string().min(1).optional() }).optional(),\n because: z.string(),\n fix: z.object({ replaceWith: requiredComponentGovernanceValueSchema }).optional(),\n severity: governanceSeveritySchema,\n});\n\nconst a11yRequireNameRecordSchema = z.object({\n kind: z.literal(\"a11y.requireName\"),\n because: z.string(),\n severity: governanceSeveritySchema,\n});\n\nexport const componentGovernanceRecordSchema = z.discriminatedUnion(\"kind\", [\n componentCapabilityRecordSchema,\n propValueAvoidRecordSchema,\n propValueForbidRecordSchema,\n a11yRequireNameRecordSchema,\n]);\n\nexport const componentGovernanceRecordsSchema = z.array(componentGovernanceRecordSchema);\n\n/** Parse portable component policy records; malformed authority is unavailable, never empty. */\nexport function parseComponentGovernancePolicyJson(\n policyJson: string\n): ComponentGovernanceRecord[] | null {\n try {\n const parsed: unknown = JSON.parse(policyJson);\n const record =\n parsed && typeof parsed === \"object\" && !Array.isArray(parsed)\n ? (parsed as Record<string, unknown>)\n : null;\n const candidate = Array.isArray(parsed) ? parsed : (record?.governance ?? record?.rules);\n const result = componentGovernanceRecordsSchema.safeParse(candidate);\n return result.success ? result.data : null;\n } catch {\n return null;\n }\n}\n\nconst componentPolicyMatchSchema = z\n .object({\n componentKey: z.string().min(1).optional(),\n componentId: z.string().min(1).optional(),\n publicRef: z.string().min(1).optional(),\n importPath: z.string().min(1).optional(),\n sourcePath: z.string().min(1).optional(),\n path: z.string().min(1).optional(),\n exportName: z.string().min(1).optional(),\n export: z.string().min(1).optional(),\n name: z.string().min(1).optional(),\n scope: z.enum([\"one\", \"all\"]).optional(),\n })\n .strict();\n\nconst componentPolicyRecordSchema = z\n .object({\n rules: componentGovernanceRecordsSchema,\n status: z.enum([\"active\", \"draft\", \"disabled\"]).optional(),\n })\n .strict();\n\nconst componentPolicyOverrideSchema = z\n .object({\n match: componentPolicyMatchSchema,\n rules: componentGovernanceRecordsSchema,\n status: z.enum([\"active\", \"draft\", \"disabled\"]).optional(),\n })\n .strict();\n\nconst canonicalSourcePathSchema = z\n .string()\n .min(1)\n .superRefine((value, ctx) => {\n const error = portableRepoPathError(value);\n if (error) {\n ctx.addIssue({ code: z.ZodIssueCode.custom, message: error });\n }\n });\n\nconst canonicalSourceRegistryHashSchema = z.string().regex(/^[0-9a-f]{64}$/);\n\nconst canonicalBridgeModuleSpecifierSchema = z\n .string()\n .min(1)\n .superRefine((value, ctx) => {\n const normalized = value.replace(/\\\\/gu, \"/\");\n if (normalized.startsWith(\"/\") || /^[A-Za-z]:\\//u.test(normalized)) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"Canonical bridge moduleSpecifier must be a portable import specifier\",\n });\n }\n if (normalized.split(\"/\").includes(\"..\")) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"Canonical bridge moduleSpecifier must not traverse outside the project\",\n });\n }\n });\n\nexport const canonicalBridgeV1Schema = z\n .object({\n underlying: z\n .object({\n packageName: z.string().min(1),\n exportName: z.string().min(1),\n })\n .strict(),\n local: z\n .object({\n componentKey: z.string().min(1),\n moduleSpecifier: canonicalBridgeModuleSpecifierSchema,\n exportName: z.string().min(1),\n implementationFiles: z.array(canonicalSourcePathSchema).min(1),\n })\n .strict(),\n decision: z\n .object({\n state: z.literal(\"confirmed\"),\n source: z.enum([\"authored\", \"migration\"]),\n })\n .strict(),\n })\n .strict();\n\nconst canonicalBridgesV1Schema = z.array(canonicalBridgeV1Schema).superRefine((bridges, ctx) => {\n const underlying = new Map<string, number>();\n const componentKeys = new Map<string, number>();\n for (const [index, bridge] of bridges.entries()) {\n const underlyingKey = `${bridge.underlying.packageName}\\u0000${bridge.underlying.exportName}`;\n const previousUnderlying = underlying.get(underlyingKey);\n if (previousUnderlying !== undefined) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `Duplicate confirmed bridge target for ${bridge.underlying.packageName}#${bridge.underlying.exportName} (also at canonicalBridges.${previousUnderlying})`,\n path: [index, \"underlying\"],\n });\n } else {\n underlying.set(underlyingKey, index);\n }\n\n const previousComponent = componentKeys.get(bridge.local.componentKey);\n if (previousComponent !== undefined) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `Local component key overlaps canonicalBridges.${previousComponent}`,\n path: [index, \"local\", \"componentKey\"],\n });\n } else {\n componentKeys.set(bridge.local.componentKey, index);\n }\n }\n});\n\nconst canonicalSourceSchema = z.discriminatedUnion(\"kind\", [\n z.object({\n kind: z.literal(\"npm\"),\n specifier: z.string().min(1),\n implementationPath: z.string().min(1).optional(),\n include: z.array(z.string().min(1)).optional(),\n exclude: z.array(z.string().min(1)).optional(),\n }),\n z.object({\n kind: z.literal(\"directory\"),\n path: z.string().min(1),\n include: z.array(z.string().min(1)).optional(),\n exclude: z.array(z.string().min(1)).optional(),\n }),\n z.object({\n kind: z.literal(\"registry\"),\n registryId: z.string().min(1),\n registryHash: canonicalSourceRegistryHashSchema.optional(),\n receiptPath: canonicalSourcePathSchema.default(\".fragments/registry-lock.json\"),\n installPath: canonicalSourcePathSchema,\n importPath: z.string().min(1).optional(),\n include: z.array(z.string().min(1)).optional(),\n exclude: z.array(z.string().min(1)).optional(),\n severity: governanceSeveritySchema.optional(),\n }),\n]);\n\nexport const governanceConfigSchema = z\n .object({\n extends: z.array(z.string()).optional(),\n severity: governanceSeveritySchema.optional(),\n rules: z.record(z.string(), z.unknown()).optional(),\n agents: z\n .record(\n z.string(),\n z\n .object({\n rules: z.record(z.string(), z.unknown()).optional(),\n })\n .passthrough()\n )\n .optional(),\n audit: z.object({}).passthrough().optional(),\n runners: z.record(z.string(), z.object({}).passthrough()).optional(),\n canonicalSources: z.array(canonicalSourceSchema).optional(),\n canonicalBridges: canonicalBridgesV1Schema.optional(),\n presets: z.array(z.string()).optional(),\n scales: z.record(z.string(), scaleGovernanceRecordSchema).optional(),\n styles: z.array(globalStyleGovernanceRecordSchema).optional(),\n jsx: z.array(globalJsxGovernanceRecordSchema).optional(),\n tailwind: z\n .object({\n palette: z\n .object({\n allow: z.array(z.string().min(1)).optional(),\n deny: z.array(z.string().min(1)).optional(),\n })\n .optional(),\n })\n .passthrough()\n .optional(),\n agent: z\n .object({\n repairOrder: z.array(z.string().min(1)).optional(),\n })\n .passthrough()\n .optional(),\n components: z.record(componentPolicyRecordSchema).optional(),\n overrides: z.array(componentPolicyOverrideSchema).optional(),\n ci: z\n .object({\n failOnWarnings: z.boolean().optional(),\n failOnInert: z.boolean().optional(),\n failOnAdoptionRegression: z.boolean().optional(),\n })\n .passthrough()\n .optional(),\n })\n .strict();\n\nexport type ScaleGovernanceRecord = z.infer<typeof scaleGovernanceRecordSchema>;\nexport type GlobalStyleGovernanceRecord = z.infer<typeof globalStyleGovernanceRecordSchema>;\nexport type GlobalJsxGovernanceRecord = z.infer<typeof globalJsxGovernanceRecordSchema>;\nexport type GlobalGovernanceRecord = z.infer<typeof globalGovernanceRecordSchema>;\nexport type ComponentGovernanceRecord = z.infer<typeof componentGovernanceRecordSchema>;\nexport type ComponentPolicyMatch = z.infer<typeof componentPolicyMatchSchema>;\nexport type ComponentPolicyRecord = z.infer<typeof componentPolicyRecordSchema>;\nexport type ComponentPolicyOverride = z.infer<typeof componentPolicyOverrideSchema>;\nexport type CanonicalSource = z.infer<typeof canonicalSourceSchema>;\nexport type CanonicalBridgeV1 = z.infer<typeof canonicalBridgeV1Schema>;\n\nexport interface GovernanceConfig {\n /** Shared governance config modules to extend before applying this file's declarations. */\n extends?: string[];\n\n /** Default severity for governance rules that do not declare their own severity. */\n severity?: GovernanceSeverity;\n\n /**\n * Rule-id keyed enablement and severity overrides. Only fields consumed by the named\n * rule are valid; unsupported fields are reported as inert config.\n */\n rules?: Record<string, unknown>;\n\n /** Agent-id keyed rule overrides for supported agent-specific governance policies. */\n agents?: Record<string, { rules?: Record<string, unknown> }>;\n\n /** Reserved audit compatibility object; undeclared child keys are reported as inert. */\n audit?: Record<string, unknown>;\n\n /** Reserved runner compatibility map; undeclared child keys are reported as inert. */\n runners?: Record<string, Record<string, unknown>>;\n\n /**\n * Canonical component authorities: npm packages, repository directories, or registry\n * receipts whose included exports arm canonical-component rules.\n */\n canonicalSources?: CanonicalSource[];\n\n /**\n * Confirmed mappings from an underlying library export to the approved local wrapper.\n * The wrapper's implementationFiles scope permits its direct underlying import.\n */\n canonicalBridges?: CanonicalBridgeV1[];\n\n /** Versioned governance presets to resolve before applying local rule overrides. */\n presets?: string[];\n\n /**\n * Named numeric scales. Spacing rules bind through\n * style.rawSpacing.mustMatchScale; the built-in spacing policy references `space`.\n */\n scales?: Record<string, ScaleGovernanceRecord>;\n\n /** Legacy typed style-policy records, normalized into the active rule policy. */\n styles?: GlobalStyleGovernanceRecord[];\n\n /** Legacy typed JSX-policy records, normalized into the active rule policy. */\n jsx?: GlobalJsxGovernanceRecord[];\n\n /** Tailwind palette allow/deny policy used by Tailwind governance rules. */\n tailwind?: {\n palette?: {\n allow?: string[];\n deny?: string[];\n };\n [key: string]: unknown;\n };\n\n /** Agent repair-order guidance consumed when presenting deterministic fixes. */\n agent?: {\n repairOrder?: string[];\n [key: string]: unknown;\n };\n\n /** Component-keyed governance records for canonical component metadata and prop policy. */\n components?: Record<string, ComponentPolicyRecord>;\n\n /** Ordered component-policy overrides selected by component identity fields. */\n overrides?: ComponentPolicyOverride[];\n\n /**\n * Governance CI rendering options. Under `--ci`, `failOnWarnings` defaults to `true`\n * when absent; set it to `false` to keep warning findings reported but advisory.\n * `failOnInert` is opt-in and makes inert-config diagnostics (FUI9004-FUI9008) fail\n * the verdict; `--allow-inert` bypasses the inert gates.\n * `failOnAdoptionRegression` is opt-in and makes `check --ci` compare the\n * current component-identity adoption percentage with the committed\n * `.fragments/adoption-baseline.json` floor.\n */\n ci?: {\n failOnWarnings?: boolean;\n /**\n * Fail the `--ci` verdict when the run reports inert-config diagnostics\n * (FUI9004-FUI9008). Opt-in: the diagnostics themselves stay verdict-neutral,\n * so a team can adopt the gate once its config is clean. `--allow-inert`\n * bypasses it, like the governance-inert gate.\n */\n failOnInert?: boolean;\n /**\n * Fail `check --ci` when measurable component-identity adoption falls below\n * the committed local floor. Update the floor through `check\n * --update-baseline`; accepting a lower floor additionally requires\n * `--allow-regression`.\n */\n failOnAdoptionRegression?: boolean;\n [key: string]: unknown;\n };\n [key: string]: unknown;\n}\n\n/**\n * Provenance for a `govern.rules` entry: was it authored by the user, or contributed by\n * a preset?\n *\n * A preset's broad entry (`tokens/hardcoded-values: { enabled: true, severity: \"warn\" }`)\n * and a user's identical one mean different things. The preset's is a **default** — it\n * says what the family looks like when nobody has an opinion. The user's is an\n * **override** — they typed it. After merge the two are indistinguishable by shape, so\n * the enforcement pass was capping user-authored `govern.styles[].severity: \"error\"`\n * records at the preset's `warn` and saying nothing (report #2 B4).\n *\n * A global symbol rather than a config key, deliberately: provenance must not be\n * authorable (a user cannot claim their entry came from a preset), must not survive the\n * JSON round-trip into a served Cloud policy (where it would be a lie — that path merges\n * no presets), and must not appear in a config the user reads back. `Symbol.for` so the\n * marker survives duplicate module instances.\n */\nconst PRESET_SOURCED_RULE = Symbol.for(\"@usefragments/core:preset-sourced-rule\");\n\n/**\n * Tag every entry of a preset's `govern.rules` map as preset-sourced. Non-object entries\n * (the `\"warn\"` string shorthand) cannot carry a symbol and are passed through untagged —\n * presets author the object form, so this is a documented floor, not a silent gap.\n *\n * **Non-enumerable**, which is the difference between \"does not serialize\" and \"is not\n * there\". A symbol key already survives neither `JSON.stringify` nor `Object.keys`, but\n * it does survive `toEqual` — so an enumerable marker turns every consumer that compares\n * a composed rule config structurally into a failing test, for a property they cannot see\n * and did not ask for. Fragments Cloud's own policy composer was the first to hit it.\n * Read it through `isPresetSourcedRule`; nothing else should know it exists.\n */\nexport function markPresetSourcedRules(\n rules: Record<string, unknown> | undefined\n): Record<string, unknown> | undefined {\n if (!rules) return rules;\n const out: Record<string, unknown> = {};\n for (const [ruleId, entry] of Object.entries(rules)) {\n out[ruleId] =\n entry && typeof entry === \"object\" && !Array.isArray(entry)\n ? Object.defineProperty({ ...(entry as Record<string, unknown>) }, PRESET_SOURCED_RULE, {\n value: true,\n enumerable: false,\n })\n : entry;\n }\n return out;\n}\n\n/** Whether a merged `govern.rules` entry came from a preset rather than the user. */\nexport function isPresetSourcedRule(entry: unknown): boolean {\n return (\n !!entry &&\n typeof entry === \"object\" &&\n (entry as Record<symbol, unknown>)[PRESET_SOURCED_RULE] === true\n );\n}\n\ntype SeverityOption = {\n severity?: GovernanceSeverity;\n};\n\ntype PropContext = {\n path?: string;\n};\n\ntype NonNullish<T> = T extends null | undefined ? never : T;\n\nexport type GovernancePropValue<T> =\n NonNullish<T> extends string\n ? string extends NonNullish<T>\n ? string\n : NonNullish<T>\n : NonNullish<T> extends number\n ? number extends NonNullish<T>\n ? number\n : NonNullish<T>\n : NonNullish<T> extends boolean\n ? boolean extends NonNullish<T>\n ? boolean\n : NonNullish<T>\n : NonNullish<T>;\n\nexport type PropKey<TProps> = Extract<keyof TProps, string>;\n\nexport interface PropGovernanceOptions<TValue> extends SeverityOption {\n because?: string;\n suggest?: string;\n when?: PropContext;\n fix?: {\n replaceWith: GovernancePropValue<TValue>;\n };\n}\n\nexport interface PropGovernanceBuilder<TValue> {\n avoid(\n value: GovernancePropValue<TValue>,\n options?: Omit<PropGovernanceOptions<TValue>, \"fix\" | \"when\">\n ): ComponentGovernanceRecord;\n forbid(\n value: GovernancePropValue<TValue>,\n options?: PropGovernanceOptions<TValue>\n ): ComponentGovernanceRecord;\n}\n\nexport interface AccessibilityGovernanceBuilder {\n requireName(options?: SeverityOption & { because?: string }): ComponentGovernanceRecord;\n}\n\nexport interface ComponentGovernanceBuilder<TProps> {\n capability(capability: string): ComponentGovernanceRecord;\n prop<TKey extends PropKey<TProps>>(prop: TKey): PropGovernanceBuilder<TProps[TKey]>;\n accessibility(): AccessibilityGovernanceBuilder;\n}\n\n/**\n * One-argument governed definition. Requires an explicit `govern` function\n * and/or `governance` records — both optional keys previously let plain v2\n * definitions satisfy this type (the optional-key type lie).\n */\ntype GovernedFragmentDefinitionBase<\n TProps = unknown,\n TComponent extends FragmentComponent<TProps> = FragmentComponent<TProps>,\n> = {\n component: TComponent;\n meta: FragmentMeta;\n guidance: FragmentGuidance;\n props?: Record<string, PropDefinition>;\n relations?: ComponentRelation[];\n examples?: FragmentExample[];\n composition?: {\n pattern?: \"compound\" | \"simple\" | \"controlled\" | \"wrapper\";\n subComponents?: string[];\n requiredChildren?: string[];\n commonPatterns?: string[];\n };\n contract?: FragmentContract;\n _provenance?: FragmentProvenance;\n};\n\nexport type GovernedFragmentDefinition<\n TProps = unknown,\n TComponent extends FragmentComponent<TProps> = FragmentComponent<TProps>,\n> = GovernedFragmentDefinitionBase<TProps, TComponent> &\n (\n | {\n govern: (g: ComponentGovernanceBuilder<TProps>) => ComponentGovernanceRecord[];\n governance?: ComponentGovernanceRecord[];\n }\n | {\n governance: ComponentGovernanceRecord[];\n govern?: (g: ComponentGovernanceBuilder<TProps>) => ComponentGovernanceRecord[];\n }\n );\n\nexport type ResolvedGovernedFragmentDefinition<\n TProps = unknown,\n TComponent extends FragmentComponent<TProps> = FragmentComponent<TProps>,\n> = GovernedFragmentDefinition<TProps, TComponent> & {\n governance: ComponentGovernanceRecord[];\n};\n\nexport function createComponentGovernanceBuilder<TProps>(): ComponentGovernanceBuilder<TProps> {\n return {\n capability(capability) {\n return { kind: \"capability\", capability };\n },\n prop(prop) {\n return {\n avoid(value, options = {}) {\n return {\n kind: \"prop.value.avoid\",\n prop,\n value,\n because: options.because ?? \"\",\n suggest: options.suggest,\n severity: options.severity ?? \"warn\",\n };\n },\n forbid(value, options = {}) {\n return {\n kind: \"prop.value.forbid\",\n prop,\n value,\n when: options.when,\n because: options.because ?? \"\",\n fix: options.fix,\n severity: options.severity ?? \"error\",\n };\n },\n };\n },\n accessibility() {\n return {\n requireName(options = {}) {\n return {\n kind: \"a11y.requireName\",\n because: options.because ?? \"\",\n severity: options.severity ?? \"error\",\n };\n },\n };\n },\n };\n}\n\nexport function resolveComponentGovernance<TProps>(\n definition: GovernedFragmentDefinition<TProps>\n): ComponentGovernanceRecord[] {\n const builder = createComponentGovernanceBuilder<TProps>();\n const records = definition.govern ? definition.govern(builder) : (definition.governance ?? []);\n return componentGovernanceRecordsSchema.parse(records);\n}\n\n/**\n * Resolve the component governance records that belong in the FCID preimage.\n *\n * Prefer an already-resolved `governance` array (Cloud mint / compiled payloads).\n * Fall back to evaluating `govern` when present. Returns `undefined` when the\n * fragment carries no governance surface — callers omit the field from identity.\n */\nexport function resolveGovernanceRecordsForIdentity(\n definition: Pick<GovernedFragmentDefinition, \"govern\" | \"governance\"> | null | undefined\n): ComponentGovernanceRecord[] | undefined {\n if (!definition) return undefined;\n if (Array.isArray(definition.governance)) {\n return componentGovernanceRecordsSchema.parse(definition.governance);\n }\n if (typeof definition.govern === \"function\") {\n const builder = createComponentGovernanceBuilder();\n return componentGovernanceRecordsSchema.parse(definition.govern(builder));\n }\n return undefined;\n}\n\nexport function normalizeGovernanceConfig<TConfig extends { govern?: GovernanceConfig }>(\n config: TConfig\n): TConfig {\n if (!config.govern?.scales) {\n return config;\n }\n\n const scales = Object.fromEntries(\n Object.entries(config.govern.scales).map(([name, scale]) => {\n if (!scale || typeof scale !== \"object\") {\n return [name, scale];\n }\n\n return [name, { ...scale, name: scale.name ?? name }];\n })\n );\n\n return {\n ...config,\n govern: {\n ...config.govern,\n scales,\n },\n };\n}\n\nexport const g = {\n scale: {\n px(values: readonly number[]): ScaleGovernanceRecord {\n return { kind: \"scale\", unit: \"px\", values: [...values] };\n },\n rem(values: readonly number[]): ScaleGovernanceRecord {\n return { kind: \"scale\", unit: \"rem\", values: [...values] };\n },\n },\n styles: {\n rawColors() {\n return {\n forbid(\n options: {\n except?: string[];\n prefer?: \"token\" | \"css-variable\";\n severity?: GovernanceSeverity;\n } = {}\n ): GlobalStyleGovernanceRecord {\n return {\n kind: \"style.rawColors.forbid\",\n except: options.except ?? [],\n prefer: options.prefer ?? \"token\",\n severity: options.severity ?? \"error\",\n };\n },\n };\n },\n rawSpacing() {\n return {\n mustMatchScale(\n scale: string,\n options: SeverityOption & { appliesTo?: string[] } = {}\n ): GlobalStyleGovernanceRecord {\n return {\n kind: \"style.rawSpacing.mustMatchScale\",\n scale,\n appliesTo: options.appliesTo ?? [],\n severity: options.severity ?? \"error\",\n };\n },\n };\n },\n fontSize() {\n return {\n mustMatchScale(scale: string, options: SeverityOption = {}): GlobalStyleGovernanceRecord {\n return {\n kind: \"style.fontSize.mustMatchScale\",\n scale,\n severity: options.severity ?? \"warn\",\n };\n },\n };\n },\n cssVars() {\n return {\n mustBeDefined(options: SeverityOption = {}): GlobalStyleGovernanceRecord {\n return {\n kind: \"style.cssVars.mustBeDefined\",\n severity: options.severity ?? \"error\",\n };\n },\n };\n },\n },\n jsx: {\n unknownProps() {\n return {\n forbid(options: SeverityOption = {}): GlobalJsxGovernanceRecord {\n return {\n kind: \"jsx.unknownProps.forbid\",\n severity: options.severity ?? \"error\",\n };\n },\n };\n },\n inlineStyle() {\n return {\n forbidRaw(\n properties: readonly string[],\n options: SeverityOption = {}\n ): GlobalJsxGovernanceRecord {\n return {\n kind: \"jsx.inlineStyle.forbidRaw\",\n properties: [...properties],\n severity: options.severity ?? \"error\",\n };\n },\n };\n },\n importPath() {\n return {\n prefer(\n from: string,\n to: string,\n options: SeverityOption & { imported?: string; because?: string } = {}\n ): GlobalJsxGovernanceRecord {\n return {\n kind: \"jsx.importPath.prefer\",\n from,\n to,\n imported: options.imported,\n because: options.because,\n severity: options.severity ?? \"error\",\n };\n },\n };\n },\n component() {\n return {\n prefer(\n from: string,\n to: string,\n options: SeverityOption & { because?: string } = {}\n ): GlobalJsxGovernanceRecord {\n return {\n kind: \"jsx.component.prefer\",\n from,\n to,\n because: options.because,\n severity: options.severity ?? \"error\",\n };\n },\n };\n },\n },\n component: createComponentGovernanceBuilder<Record<string, unknown>>(),\n};\n","/**\n * Policy path excludes — the one vocabulary every scoped-exemption surface shares.\n *\n * A global governance record (`govern.styles[]` / `govern.jsx[]`) or a rule-id-keyed\n * override (`govern.rules[\"styles/no-raw-color\"]`) may carry `exclude` globs that scope\n * that policy off a path *without* hiding the path from every other rule — the\n * difference between an exemption and a baseline. Two authoring forms are accepted:\n *\n * ```ts\n * exclude: [\"src/legacy/vendor/**\"]\n * exclude: [{ glob: \"src/legacy/vendor/**\", reason: \"vendor drop, tracked in DS-611\" }]\n * ```\n *\n * Both normalize to `PolicyExclude`. The reason is free text and carries no expiry: an\n * exclude is a standing scope decision, not a dated debt receipt (that is what\n * suppressions and baselines are for). It travels into the scan's ignored-finding\n * accounting so an exemption is never invisible policy.\n *\n * Browser-safe: pure string work, no filesystem.\n */\n\nimport { z } from \"zod\";\n\nexport interface PolicyExclude {\n /** Repo-relative glob; `*` stops at a path segment, `**` crosses segments. */\n glob: string;\n /** Why this path is out of scope for this policy. Surfaced in reports. */\n reason?: string;\n}\n\nexport const policyExcludeSchema = z.array(\n z.union([\n z.string().min(1),\n z.object({\n glob: z.string().min(1),\n reason: z.string().min(1).optional(),\n }),\n ])\n);\n\n/** The authored (pre-normalization) shape of an `exclude` list. */\nexport type PolicyExcludeInput = z.infer<typeof policyExcludeSchema>;\n\n/**\n * Normalize an authored `exclude` list into `PolicyExclude[]`. Returns `undefined` when\n * nothing usable was authored, so callers can omit the field entirely and keep fact\n * shapes byte-identical for configs that declare no excludes.\n */\nexport function normalizePolicyExcludes(value: unknown): PolicyExclude[] | undefined {\n if (!Array.isArray(value)) return undefined;\n const out: PolicyExclude[] = [];\n for (const entry of value) {\n if (typeof entry === \"string\") {\n if (entry.length > 0) out.push({ glob: entry });\n continue;\n }\n if (!entry || typeof entry !== \"object\") continue;\n const record = entry as { glob?: unknown; reason?: unknown };\n if (typeof record.glob !== \"string\" || record.glob.length === 0) continue;\n out.push({\n glob: record.glob,\n ...(typeof record.reason === \"string\" && record.reason.length > 0\n ? { reason: record.reason }\n : {}),\n });\n }\n return out.length > 0 ? out : undefined;\n}\n\n/** Normalize a repo path for glob comparison (POSIX separators, no `./` prefix). */\nexport function normalizeExcludePath(path: string): string {\n return path.replaceAll(\"\\\\\", \"/\").replace(/^\\.\\//, \"\");\n}\n\n/**\n * Same glob dialect as the rest of the governance surface (`FactIndex.matchesGlob`,\n * the scan's token-source matcher): `**` crosses path segments, `*` does not.\n */\nexport function excludeGlobToRegExp(glob: string): RegExp {\n const source = normalizeExcludePath(glob)\n .split(\"**\")\n .map((part) =>\n part\n .split(\"*\")\n .map((segment) => segment.replace(/[|\\\\{}()[\\]^$+?.]/g, \"\\\\$&\"))\n .join(\"[^/]*\")\n )\n .join(\".*\");\n return new RegExp(`^${source}$`);\n}\n\n/** Whether `filePath` is inside `exclude`'s glob. */\nexport function policyExcludeMatchesPath(exclude: PolicyExclude, filePath: string): boolean {\n return excludeGlobToRegExp(exclude.glob).test(normalizeExcludePath(filePath));\n}\n\n/** The first exclude covering `filePath`, or `undefined`. */\nexport function matchPolicyExclude(\n excludes: readonly PolicyExclude[] | undefined,\n filePath: string\n): PolicyExclude | undefined {\n if (!excludes?.length) return undefined;\n const normalized = normalizeExcludePath(filePath);\n return excludes.find((exclude) => excludeGlobToRegExp(exclude.glob).test(normalized));\n}\n\n/**\n * The human half of the ignored-finding receipt: which policy stepped aside, on which\n * glob, and why. `scope` is the policy's own identity (a record `kind` or a rule id).\n */\nexport function describePolicyExclude(scope: string, exclude: PolicyExclude): string {\n return `${scope} exclude matched ${exclude.glob}${exclude.reason ? ` — ${exclude.reason}` : \"\"}`;\n}\n","/**\n * Rule families — the single source of truth for the broad ids a config may name\n * instead of a concrete rule.\n *\n * `govern.rules` accepts two vocabularies: a concrete rule id (`styles/no-raw-color`)\n * and a **family** id (`tokens/hardcoded-values`) that stands for several rules at once.\n * Presets and Cloud-served policies author the family form, so this expansion decides\n * what a preset or a served policy actually turns on.\n *\n * It used to be written out three times — the engine's finding-override pass, the fact\n * compiler, and the governance-integrity roster — and the three disagreed:\n * `styles/no-raw-typography` was a member of `tokens/hardcoded-values` in the engine and\n * absent from the compiler, so one config produced two different answers about the same\n * rule and nothing asserted they matched. One definition, one expansion, one coverage\n * test (`families.test.ts` checks every member is a registered rule id).\n *\n * Family ids are NOT rule ids: nothing runs under `tokens/hardcoded-values`, it only\n * expands. Adding a rule to a family is a behavior change for every config that names\n * the family — classify new rules here in the same change that registers them.\n */\n\nexport const RULE_FAMILY_MEMBERS: Readonly<Record<string, readonly string[]>> = {\n \"tokens/hardcoded-values\": [\n \"styles/no-raw-color\",\n \"styles/no-raw-spacing\",\n \"styles/no-raw-typography\",\n \"tokens/require-dual-fallback\",\n \"theme/no-theme-coupled-literal\",\n ],\n \"components/usage\": [\n \"components/forbidden-prop-value\",\n \"components/preferred-component\",\n \"components/unknown-prop\",\n \"props/invalid-value\",\n ],\n \"a11y/wcag\": [\"a11y/required-accessible-name\", \"a11y/standard\"],\n};\n\n/** The family ids themselves — recognized in `govern.rules`, never executed. */\nexport const RULE_FAMILY_IDS: ReadonlySet<string> = new Set(Object.keys(RULE_FAMILY_MEMBERS));\n\nexport function isRuleFamilyId(ruleId: string): boolean {\n return RULE_FAMILY_IDS.has(ruleId);\n}\n\n/**\n * The concrete rule ids a `govern.rules` key applies to: a family expands, anything\n * else is itself. Every consumer of the family vocabulary goes through this.\n */\nexport function ruleFamilyMembers(ruleId: string): readonly string[] {\n return RULE_FAMILY_MEMBERS[ruleId] ?? [ruleId];\n}\n","/**\n * Compile facts from the existing IR.\n *\n * Two entry points:\n * - `compileGlobalGovernanceFacts(govern)` turns a `GovernanceConfig` into\n * scale + scale_value + style_* + jsx_* policy facts.\n * - `compileComponentFacts(componentId, fragment)` turns a governed\n * fragment definition (or a compiled fragment) into component metadata,\n * prop metadata, capability, and component-scoped policy facts.\n *\n * Both functions are pure and produce arrays sorted only by source order; the\n * caller is free to add them to a `FactIndex` in any order.\n */\n\nimport type {\n ComponentGovernanceRecord,\n GovernanceConfig,\n GovernedFragmentDefinition,\n ResolvedGovernedFragmentDefinition,\n} from \"../governance.js\";\nimport { isPresetSourcedRule, resolveComponentGovernance } from \"../governance.js\";\nimport { RULE_FAMILY_MEMBERS } from \"../rules/families.js\";\nimport { normalizePolicyExcludes, type PolicyExclude } from \"../policy-exclude.js\";\nimport { ownedImportMatchesRoot, ownedImportsEqual } from \"../package-identity-match.js\";\nimport type { CompiledFragment, PropDefinition } from \"../compiled-types/index.js\";\nimport { asComponentId } from \"./ids.js\";\nimport {\n makeA11yNameRequiredFact,\n makeComponentCapabilityFact,\n makeComponentMetadataFact,\n makeGovernanceRuleConfigFact,\n makeJsxComponentPreferredFact,\n makeJsxInlineStyleForbiddenRawFact,\n makeJsxImportPathPreferredFact,\n makeJsxUnknownPropsForbiddenFact,\n makePropMetadataFact,\n makePropValueAvoidedFact,\n makePropValueForbiddenFact,\n makeScaleFact,\n makeScaleValueFact,\n makeStyleCssVarsMustBeDefinedFact,\n makeStyleFontSizeScaleFact,\n makeStylePropertyScaleFact,\n makeStyleRawColorForbiddenFact,\n makeStyleRawDimensionForbiddenFact,\n makeTailwindPaletteAllowFact,\n makeTailwindPaletteDenyFact,\n makeTailwindUnknownClassEnabledFact,\n} from \"./builders.js\";\nimport type { ComponentId, Fact, PolicyFact } from \"./types.js\";\n\n// ---------------------------------------------------------------------------\n// Global governance → facts\n// ---------------------------------------------------------------------------\n\n/**\n * A global record's authored path excludes, normalized for the fact it compiles into.\n * Omitted when absent so no-exclude configs keep byte-identical policy facts.\n */\nfunction recordExclude(record: { exclude?: unknown }): { exclude?: PolicyExclude[] } {\n const exclude = normalizePolicyExcludes(record.exclude);\n return exclude ? { exclude } : {};\n}\n\n/**\n * Scan-internal path stamped onto `style.cssVars.mustBeDefined` after config\n * load. Not a public schema field — read here so FUI2018 can name the file.\n */\nfunction cssVarsConfigPathField(style: { kind: \"style.cssVars.mustBeDefined\" }): {\n configPath?: string;\n} {\n const value = (style as { configPath?: unknown }).configPath;\n return typeof value === \"string\" && value.length > 0 ? { configPath: value } : {};\n}\n\n/**\n * Reconcile excludes across records that compile to the SAME policy fact.\n *\n * A resolved policy concatenates preset records with the user's, and the singleton\n * style/jsx kinds are content-addressed on their kind alone — so a user record and the\n * preset record it refines share one fact id, and only one survives indexing. Without\n * this pass the survivor is usually the preset's, and the user's authored exemption\n * disappears with no diagnostic: the facts-seam silence this train exists to kill.\n *\n * Scope is deliberately narrow. Excludes are unioned onto every instance of the id, so\n * whichever copy the index keeps carries the whole set. Nothing else about the records\n * is merged — general merge displacement for the other fields is a separate concern\n * (`10-config-truth`), and widening it here would silently change severity/prefer\n * resolution for existing repos.\n */\nfunction unionExcludesBySharedFactId(facts: PolicyFact[]): PolicyFact[] {\n const byId = new Map<string, PolicyExclude[]>();\n for (const fact of facts) {\n const exclude = (fact as { exclude?: PolicyExclude[] }).exclude;\n if (!exclude?.length) continue;\n const merged = byId.get(fact.id) ?? [];\n for (const entry of exclude) {\n if (!merged.some((seen) => seen.glob === entry.glob && seen.reason === entry.reason)) {\n merged.push(entry);\n }\n }\n byId.set(fact.id, merged);\n }\n if (byId.size === 0) return facts;\n\n return facts.map((fact) => {\n const merged = byId.get(fact.id);\n if (!merged) return fact;\n return { ...fact, exclude: merged.map((entry) => ({ ...entry })) } as PolicyFact;\n });\n}\n\nexport function compileGlobalGovernanceFacts(govern: GovernanceConfig | undefined): PolicyFact[] {\n if (!govern) return [];\n const out: PolicyFact[] = [];\n\n if (govern.scales) {\n for (const [name, scale] of Object.entries(govern.scales)) {\n out.push(\n makeScaleFact({\n name,\n unit: scale.unit,\n rootFontSizePx: scale.rootFontSizePx,\n emBasePx: scale.emBasePx,\n })\n );\n for (const value of scale.values) {\n out.push(makeScaleValueFact({ scale: name, value }));\n }\n }\n }\n\n if (govern.styles) {\n for (const style of govern.styles) {\n switch (style.kind) {\n case \"style.rawColors.forbid\":\n out.push(\n makeStyleRawColorForbiddenFact({\n except: style.except,\n prefer: style.prefer,\n severity: style.severity,\n ...recordExclude(style),\n })\n );\n break;\n case \"style.rawDimensions.forbid\":\n out.push(\n makeStyleRawDimensionForbiddenFact({\n appliesTo: style.appliesTo,\n prefer: style.prefer,\n severity: style.severity,\n ...recordExclude(style),\n })\n );\n break;\n case \"style.rawSpacing.mustMatchScale\":\n for (const property of style.appliesTo) {\n out.push(\n makeStylePropertyScaleFact({\n property,\n scale: style.scale,\n severity: style.severity,\n ...recordExclude(style),\n })\n );\n }\n break;\n case \"style.fontSize.mustMatchScale\":\n out.push(\n makeStyleFontSizeScaleFact({\n scale: style.scale,\n severity: style.severity,\n ...recordExclude(style),\n })\n );\n break;\n case \"style.cssVars.mustBeDefined\":\n out.push(\n makeStyleCssVarsMustBeDefinedFact({\n severity: style.severity,\n ...recordExclude(style),\n ...cssVarsConfigPathField(style),\n })\n );\n break;\n }\n }\n }\n\n if (govern.jsx) {\n for (const jsx of govern.jsx) {\n switch (jsx.kind) {\n case \"jsx.unknownProps.forbid\":\n out.push(\n makeJsxUnknownPropsForbiddenFact({\n severity: jsx.severity,\n ...recordExclude(jsx),\n })\n );\n break;\n case \"jsx.inlineStyle.forbidRaw\":\n for (const property of jsx.properties) {\n out.push(\n makeJsxInlineStyleForbiddenRawFact({\n property,\n severity: jsx.severity,\n ...recordExclude(jsx),\n })\n );\n }\n break;\n case \"jsx.importPath.prefer\":\n out.push(\n makeJsxImportPathPreferredFact({\n from: jsx.from,\n to: jsx.to,\n imported: jsx.imported,\n because: jsx.because,\n severity: jsx.severity,\n ...recordExclude(jsx),\n })\n );\n break;\n case \"jsx.component.prefer\":\n out.push(\n makeJsxComponentPreferredFact({\n from: asComponentId(jsx.from) as ComponentId,\n to: asComponentId(jsx.to) as ComponentId,\n because: jsx.because,\n severity: jsx.severity,\n ...recordExclude(jsx),\n })\n );\n break;\n }\n }\n }\n\n for (const bridge of govern.canonicalBridges ?? []) {\n out.push(\n makeJsxImportPathPreferredFact({\n from: bridge.underlying.packageName,\n to: bridge.local.moduleSpecifier,\n imported: bridge.underlying.exportName,\n because: `Use the confirmed local ${bridge.local.exportName} wrapper`,\n severity: ruleSeverity(govern.rules?.[\"imports/preferred-path\"], govern.severity ?? \"warn\"),\n bridge: {\n componentKey: bridge.local.componentKey,\n localExportName: bridge.local.exportName,\n underlyingExportName: bridge.underlying.exportName,\n implementationFiles: [...bridge.local.implementationFiles],\n decisionSource: bridge.decision.source,\n },\n })\n );\n }\n\n compileTailwindAndRuleConfigFacts(govern, out);\n return unionExcludesBySharedFactId(out);\n}\n\nexport interface SupersededImportPathPreference {\n from: string;\n imported?: string;\n to: string;\n packageName: string;\n underlyingExportName: string;\n localExportName: string;\n}\n\n/**\n * Name each non-bridge `jsx.importPath.prefer` record whose domain a confirmed\n * bridge covers. The rule suppresses the duplicate finding at match time\n * (report #2 B6); this projection is the compile-side voice of that\n * supersession, so the record is never silenced without a word — the exact\n * silence class the config-truth layer exists to kill.\n */\nexport function projectSupersededImportPathPreferences(\n govern: GovernanceConfig | undefined\n): SupersededImportPathPreference[] {\n const bridges = govern?.canonicalBridges ?? [];\n if (bridges.length === 0 || !govern?.jsx) return [];\n const out: SupersededImportPathPreference[] = [];\n for (const record of govern.jsx) {\n if (record.kind !== \"jsx.importPath.prefer\") continue;\n const bridge = bridges.find((candidate) => importPathRecordOverlapsBridge(record, candidate));\n if (!bridge) continue;\n out.push({\n from: record.from,\n ...(record.imported !== undefined ? { imported: record.imported } : {}),\n to: record.to,\n packageName: bridge.underlying.packageName,\n underlyingExportName: bridge.underlying.exportName,\n localExportName: bridge.local.exportName,\n });\n }\n return out;\n}\n\nfunction importPathRecordOverlapsBridge(\n record: { from: string; imported?: string },\n bridge: NonNullable<GovernanceConfig[\"canonicalBridges\"]>[number]\n): boolean {\n if (!ownedImportMatchesRoot(record.from, bridge.underlying.packageName)) return false;\n if (ownedImportsEqual(record.from, bridge.underlying.packageName)) {\n return record.imported === undefined || record.imported === bridge.underlying.exportName;\n }\n const subpath = record.from.slice(bridge.underlying.packageName.length + 1);\n const leaf = subpath.split(\"/\").at(-1);\n return (\n leaf === bridge.underlying.exportName &&\n (record.imported === undefined ||\n record.imported === \"default\" ||\n record.imported === bridge.underlying.exportName)\n );\n}\n\nfunction compileTailwindAndRuleConfigFacts(govern: GovernanceConfig, out: PolicyFact[]): void {\n const tailwindPalette = govern.tailwind?.palette;\n const forbiddenPaletteSeverity = ruleSeverity(\n govern.rules?.[\"tailwind/forbidden-palette\"],\n govern.severity ?? \"warn\"\n );\n if (tailwindPalette?.allow?.length) {\n out.push(\n makeTailwindPaletteAllowFact({\n patterns: tailwindPalette.allow,\n severity: forbiddenPaletteSeverity,\n })\n );\n }\n if (tailwindPalette?.deny?.length) {\n out.push(\n makeTailwindPaletteDenyFact({\n patterns: tailwindPalette.deny,\n severity: forbiddenPaletteSeverity,\n })\n );\n }\n\n const unknownClassSeverity = enabledRuleSeverity(\n govern.rules?.[\"tailwind/unknown-class\"],\n \"info\"\n );\n if (unknownClassSeverity) {\n out.push(makeTailwindUnknownClassEnabledFact({ severity: unknownClassSeverity }));\n }\n\n out.push(...compileRuleConfigFacts(govern));\n}\n\nfunction compileRuleConfigFacts(govern: GovernanceConfig): PolicyFact[] {\n const rules = govern.rules;\n if (!rules && !govern.canonicalSources?.length) return [];\n\n const configs = new Map<string, ReturnType<typeof ruleConfigFromValue>>();\n for (const [ruleId, value] of Object.entries(rules ?? {})) {\n configs.set(ruleId, ruleConfigFromValue(value, govern.severity ?? \"warn\"));\n }\n\n // Family expansion. A member entry the user wrote beats the aggregate (it is the\n // more specific statement); a member entry a preset minted does not beat an\n // aggregate the user wrote — `tokens/hardcoded-values: true` over the customer\n // default must turn its Tier-B members on, and `false` over the `fragments`\n // preset must turn them off. Presets are internally consistent, so when both\n // sides are preset-sourced the member stands.\n for (const [ruleId, value] of Object.entries(rules ?? {})) {\n const family = RULE_FAMILY_MEMBERS[ruleId];\n if (!family) continue;\n const aggregateIsPreset = isPresetSourcedRule(value);\n const config = ruleConfigFromValue(value, govern.severity ?? \"warn\");\n for (const memberRuleId of family) {\n const member = rules?.[memberRuleId];\n if (member !== undefined && (aggregateIsPreset || !isPresetSourcedRule(member))) continue;\n configs.set(memberRuleId, config);\n }\n }\n\n if (govern.canonicalSources?.length) {\n for (const ruleId of [\"components/prefer-library\", \"components/shadow-component\"] as const) {\n const existing = configs.get(ruleId);\n if (existing?.enabled === false) continue;\n configs.set(ruleId, {\n enabled: true,\n severity: existing?.severity ?? govern.severity ?? \"warn\",\n options: {\n ...existing?.options,\n canonicalSources: existing?.options?.canonicalSources ?? govern.canonicalSources,\n },\n });\n }\n }\n\n return [...configs.entries()].map(([ruleId, config]) =>\n makeGovernanceRuleConfigFact({\n ruleId,\n enabled: config.enabled,\n severity: config.severity,\n options: config.options,\n })\n );\n}\n\nfunction ruleConfigFromValue(\n value: unknown,\n fallbackSeverity: \"error\" | \"warn\" | \"info\"\n): { enabled: boolean; severity?: \"error\" | \"warn\" | \"info\"; options?: Record<string, unknown> } {\n if (value === false) return { enabled: false };\n if (value === true) return { enabled: true, severity: fallbackSeverity };\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n return { enabled: true, severity: fallbackSeverity };\n }\n const record = value as {\n enabled?: unknown;\n severity?: unknown;\n options?: unknown;\n };\n const options =\n record.options && typeof record.options === \"object\" && !Array.isArray(record.options)\n ? (record.options as Record<string, unknown>)\n : undefined;\n return {\n enabled: record.enabled !== false,\n severity: parseSeverity(record.severity) ?? fallbackSeverity,\n options,\n };\n}\n\nfunction enabledRuleSeverity(\n value: unknown,\n fallback: \"error\" | \"warn\" | \"info\"\n): \"error\" | \"warn\" | \"info\" | null {\n if (value === true) return fallback;\n if (!value || typeof value !== \"object\") return null;\n const record = value as { enabled?: unknown; severity?: unknown };\n if (record.enabled === false) return null;\n if (record.enabled !== true) return null;\n return parseSeverity(record.severity) ?? fallback;\n}\n\nfunction ruleSeverity(\n value: unknown,\n fallback: \"error\" | \"warn\" | \"info\"\n): \"error\" | \"warn\" | \"info\" {\n if (!value || typeof value !== \"object\") return fallback;\n return parseSeverity((value as { severity?: unknown }).severity) ?? fallback;\n}\n\nfunction parseSeverity(value: unknown): \"error\" | \"warn\" | \"info\" | undefined {\n if (value === \"warning\") return \"warn\";\n return value === \"error\" || value === \"warn\" || value === \"info\" ? value : undefined;\n}\n\n// ---------------------------------------------------------------------------\n// Component → facts\n// ---------------------------------------------------------------------------\n\ninterface ComponentFactSource {\n meta: { name: string; description?: string; category?: string };\n guidance?: { when?: string[]; whenNot?: string[] };\n props?: Record<string, PropDefinition>;\n governance?: ComponentGovernanceRecord[];\n filePath?: string;\n}\n\nfunction isResolvedGovernedDefinition(value: unknown): value is ResolvedGovernedFragmentDefinition {\n if (!value || typeof value !== \"object\") return false;\n return \"governance\" in value && Array.isArray((value as { governance: unknown }).governance);\n}\n\nfunction isGovernedDefinition(value: unknown): value is GovernedFragmentDefinition {\n if (!value || typeof value !== \"object\") return false;\n return \"govern\" in value || \"governance\" in value;\n}\n\nfunction toComponentFactSource(input: ComponentFactInput): ComponentFactSource {\n if (isResolvedGovernedDefinition(input)) {\n return {\n meta: input.meta,\n guidance: input.guidance,\n props: (input.props ?? {}) as Record<string, PropDefinition>,\n governance: input.governance,\n };\n }\n if (isGovernedDefinition(input)) {\n return {\n meta: input.meta,\n guidance: input.guidance,\n props: (input.props ?? {}) as Record<string, PropDefinition>,\n governance: resolveComponentGovernance(input),\n };\n }\n // CompiledFragment\n return {\n meta: input.meta,\n guidance: input.guidance ?? input.usage,\n props: input.props,\n governance: input.governance,\n filePath: input.filePath,\n };\n}\n\nexport type ComponentFactInput =\n | CompiledFragment\n | GovernedFragmentDefinition\n | ResolvedGovernedFragmentDefinition;\n\nexport function compileComponentFacts(componentId: ComponentId, input: ComponentFactInput): Fact[] {\n const source = toComponentFactSource(input);\n const facts: Fact[] = [];\n\n facts.push(\n makeComponentMetadataFact({\n componentId,\n name: source.meta.name,\n description: source.meta.description,\n category: source.meta.category,\n filePath: source.filePath,\n })\n );\n\n for (const [propName, prop] of Object.entries(source.props ?? {})) {\n facts.push(\n makePropMetadataFact({\n componentId,\n prop: propName,\n type: prop.type,\n values: prop.values ? [...prop.values] : undefined,\n required: prop.required ?? false,\n default: prop.default,\n description: prop.description,\n })\n );\n }\n\n for (const record of source.governance ?? []) {\n const fact = compileComponentGovernanceRecord(componentId, record);\n if (fact) facts.push(fact);\n }\n\n return facts;\n}\n\nfunction compileComponentGovernanceRecord(\n componentId: ComponentId,\n record: ComponentGovernanceRecord\n): Fact | undefined {\n switch (record.kind) {\n case \"capability\":\n return makeComponentCapabilityFact({ componentId, capability: record.capability });\n case \"prop.value.avoid\":\n return makePropValueAvoidedFact({\n componentId,\n prop: record.prop,\n value: record.value,\n because: record.because,\n suggest: record.suggest,\n severity: record.severity,\n });\n case \"prop.value.forbid\":\n return makePropValueForbiddenFact({\n componentId,\n prop: record.prop,\n value: record.value,\n pathPattern: record.when?.path,\n because: record.because,\n replaceWith: record.fix?.replaceWith,\n severity: record.severity,\n });\n case \"a11y.requireName\":\n return makeA11yNameRequiredFact({\n componentId,\n because: record.because,\n severity: record.severity,\n });\n }\n}\n","import { z } from \"zod\";\n\nimport {\n legacySeverityLevelSchema,\n severityFromLevel,\n severityLevel,\n severityLevelSchema,\n severitySchema,\n} from \"../severity.js\";\nimport type { LegacySeverityLevel, Severity } from \"../severity.js\";\nimport type { EvidenceGrade } from \"../evidence.js\";\nimport { byRuleId } from \"../codes/index.js\";\n\nconst evidenceGradeSchema: z.ZodType<EvidenceGrade> = z.enum([\n \"none\",\n \"runtime_advisory\",\n \"provenance_bound\",\n \"source_backed\",\n \"receipt_backed\",\n]);\n\nexport { legacySeverityLevelSchema, severityLevelSchema, severitySchema };\nexport type { LegacySeverityLevel, Severity, SeverityLevel } from \"../severity.js\";\n\nexport const factLocationSchema = z.object({\n file: z.string(),\n line: z.number().int().nonnegative(),\n column: z.number().int().nonnegative(),\n endLine: z.number().int().nonnegative().optional(),\n endColumn: z.number().int().nonnegative().optional(),\n});\nexport type FactLocation = z.infer<typeof factLocationSchema>;\n\nexport const findingReplacePropValueFixSchema = z.object({\n kind: z.literal(\"replacePropValue\"),\n title: z.string(),\n prop: z.string(),\n value: z.unknown(),\n deterministic: z.boolean().optional(),\n});\n\nexport const findingReplaceStyleValueFixSchema = z.object({\n kind: z.literal(\"replaceStyleValue\"),\n title: z.string(),\n property: z.string(),\n value: z.string(),\n deterministic: z.boolean().optional(),\n});\n\nexport const findingReplaceImportFixSchema = z.object({\n kind: z.literal(\"replaceImport\"),\n title: z.string(),\n from: z.string(),\n to: z.string(),\n deterministic: z.boolean().optional(),\n});\n\nexport const findingReplaceComponentFixSchema = z.object({\n kind: z.literal(\"replaceComponent\"),\n title: z.string(),\n from: z.string(),\n to: z.string(),\n deterministic: z.boolean().optional(),\n});\n\nexport const findingReplaceClassTokenFixSchema = z.object({\n kind: z.literal(\"replaceClassToken\"),\n title: z.string(),\n from: z.string(),\n to: z.string().nullable(),\n utility: z.string(),\n deterministic: z.boolean().optional(),\n});\n\nexport const findingFixSchema = z.discriminatedUnion(\"kind\", [\n findingReplacePropValueFixSchema,\n findingReplaceStyleValueFixSchema,\n findingReplaceImportFixSchema,\n findingReplaceComponentFixSchema,\n findingReplaceClassTokenFixSchema,\n]);\nexport type FindingFix = z.infer<typeof findingFixSchema>;\nexport type FindingReplacePropValueFix = z.infer<typeof findingReplacePropValueFixSchema>;\nexport type FindingReplaceStyleValueFix = z.infer<typeof findingReplaceStyleValueFixSchema>;\nexport type FindingReplaceImportFix = z.infer<typeof findingReplaceImportFixSchema>;\nexport type FindingReplaceComponentFix = z.infer<typeof findingReplaceComponentFixSchema>;\nexport type FindingReplaceClassTokenFix = z.infer<typeof findingReplaceClassTokenFixSchema>;\n\nexport interface FactEvidence {\n factId: string;\n fact: {\n kind: string;\n location?: FactLocation;\n };\n}\n\nexport const factEvidenceSchema: z.ZodType<FactEvidence> = z.object({\n factId: z.string(),\n fact: z\n .object({\n kind: z.string(),\n location: factLocationSchema.optional(),\n })\n .passthrough(),\n});\n\nexport const findingSchema = z.object({\n ruleId: z.string(),\n ruleVersion: z.string(),\n severity: severitySchema,\n level: severityLevelSchema,\n code: z\n .string()\n .regex(/^FUI\\d{4}$/)\n .optional(),\n helpUrl: z.string().url().optional(),\n message: z.string(),\n fingerprint: z.string(),\n /**\n * Fingerprint this finding carried before a fingerprint-identity migration.\n * Emitted only by migrated rules during the grace window so baseline\n * records keyed on the legacy hash keep matching instead of churning.\n */\n previousFingerprint: z.string().optional(),\n location: factLocationSchema,\n evidence: z.array(factEvidenceSchema).min(1),\n evidenceGrade: evidenceGradeSchema.optional(),\n fix: findingFixSchema.optional(),\n attributes: z.record(z.unknown()).optional(),\n /**\n * Product area this finding's file resolved to (topology layer). Optional —\n * absent when the repo has no `topology` config. See `topology/resolve-area`.\n */\n area: z\n .object({\n areaId: z.string(),\n areaName: z.string(),\n criticality: z.enum([\"low\", \"medium\", \"high\", \"revenue\", \"regulated\"]),\n owners: z.array(z.string()),\n matchedGlob: z.string(),\n })\n .optional(),\n});\nexport type Finding = z.infer<typeof findingSchema>;\n\nexport const violationSchema = z.object({\n nodeId: z.string(),\n nodeType: z.string(),\n rule: z.string(),\n severity: severitySchema,\n level: severityLevelSchema.optional(),\n code: z\n .string()\n .regex(/^FUI\\d{4}$/)\n .optional(),\n helpUrl: z.string().url().optional(),\n message: z.string(),\n path: z.string().optional(),\n suggestion: z.string().optional(),\n prop: z.string().optional(),\n filePath: z.string().optional(),\n line: z.number().int().nonnegative().optional(),\n column: z.number().int().nonnegative().optional(),\n rawValue: z.string().optional(),\n extra: z.record(z.unknown()).optional(),\n});\nexport type Violation = z.infer<typeof violationSchema>;\n\nexport const fixSchema = z.object({\n nodeId: z.string(),\n prop: z.string().optional(),\n action: z.enum([\"remove\", \"replace\", \"add\"]),\n value: z.unknown().optional(),\n description: z.string(),\n});\nexport type Fix = z.infer<typeof fixSchema>;\n\nexport const validatorResultSchema = z.object({\n validator: z.string(),\n severity: severitySchema,\n passed: z.boolean(),\n violations: z.array(violationSchema),\n findings: z.array(findingSchema).optional(),\n suggestions: z.array(fixSchema).optional(),\n});\nexport type ValidatorResult = z.infer<typeof validatorResultSchema>;\n\nexport const governanceVerdictMetadataSchema = z.object({\n runner: z.string(),\n policyVersion: z.string().optional(),\n duration: z.number().nonnegative(),\n nodeCount: z.number().int().nonnegative(),\n componentTypes: z.array(z.string()),\n});\nexport type GovernanceVerdictMetadata = z.infer<typeof governanceVerdictMetadataSchema>;\n\nexport const governanceVerdictSchema = z.object({\n verdict: z.enum([\"pass\", \"warn\", \"fail\"]).optional(),\n passed: z.boolean(),\n score: z.number(),\n results: z.array(validatorResultSchema),\n metadata: governanceVerdictMetadataSchema,\n});\nexport type GovernanceVerdict = z.infer<typeof governanceVerdictSchema>;\n\nexport const suppressionDirectiveSchema = z.object({\n ruleId: z.string().optional(),\n reason: z.string().min(1),\n expiresAt: z.string().datetime().optional(),\n expiresOn: z\n .string()\n .regex(/^\\d{4}-\\d{2}-\\d{2}$/)\n .optional(),\n scope: z.enum([\"line\", \"block\", \"file\"]).default(\"line\"),\n code: z\n .string()\n .regex(/^FUI\\d{4}$/)\n .optional(),\n});\nexport type SuppressionDirective = z.infer<typeof suppressionDirectiveSchema>;\n\nexport const agentPlanSchema = z.object({\n tool: z.enum([\n \"design_system/list_primitives\",\n \"design_system/conform\",\n \"design_system/prove_compliant\",\n ]),\n args: z.record(z.unknown()),\n confidence: z.number().min(0).max(1),\n});\n\nexport const agentFindingSchema = z.object({\n code: z\n .string()\n .regex(/^FUI\\d{4}$/)\n .optional(),\n ruleId: z.string(),\n filePath: z.string(),\n line: z.number().int().nonnegative(),\n col: z.number().int().nonnegative(),\n severity: severitySchema,\n level: severityLevelSchema,\n message: z.string(),\n evidenceGrade: evidenceGradeSchema.optional(),\n evidence: z.array(factEvidenceSchema),\n plan: agentPlanSchema,\n});\n\nexport const AGENT_FORMAT_SCHEMA_VERSION = \"typestyle.agent.v2\" as const;\n\nexport const agentIntegritySchema = z.object({\n rulesLoaded: z.number().int().nonnegative(),\n status: z.enum([\"healthy\", \"degraded\", \"inert\"]),\n healthy: z.boolean(),\n inert: z.boolean(),\n reasons: z.array(z.string()),\n});\n\nconst agentRunProvenanceSchema = z.object({\n runId: z.string().regex(/^run_[a-f0-9]{12}$/),\n fcid: z.string().min(1),\n baselineId: z.string().min(1).optional(),\n scope: z.object({\n method: z.enum([\"three-dot\", \"tree-diff\", \"status\", \"fallback-full\", \"explicit\", \"full\"]),\n gitOk: z.boolean(),\n }),\n engineVersion: z.string().min(1),\n scopeHash: z.string().regex(/^[a-f0-9]{64}$/),\n inputsHash: z\n .string()\n .regex(/^[a-f0-9]{64}$/)\n .optional(),\n inputFilesHash: z.string().regex(/^[a-f0-9]{64}$/),\n});\n\nconst agentRunVerdictSchema = z.object({\n exitCode: z.union([z.literal(0), z.literal(1)]),\n reasons: z.array(z.string()),\n gatingFindingCount: z.number().int().nonnegative(),\n});\n\nconst agentFormatBaseSchema = z.object({\n schemaVersion: z.literal(AGENT_FORMAT_SCHEMA_VERSION),\n summary: z.string(),\n integrity: agentIntegritySchema,\n fix_first: z.array(agentFindingSchema),\n remaining: z.array(agentFindingSchema),\n suppression_template: z.object({\n directive: z.string(),\n requiredFields: z.array(z.string()),\n example: z.string(),\n }),\n budget: z.object({\n iteration: z.number().int().nonnegative(),\n maxIterations: z.number().int().positive(),\n scoreDelta: z.number(),\n }),\n findings: z.array(findingSchema).optional(),\n suppressions: z.array(suppressionDirectiveSchema).optional(),\n provenance: agentRunProvenanceSchema.optional(),\n verdict: agentRunVerdictSchema.optional(),\n});\n\nexport const agentFormatSchema = z.union([\n agentFormatBaseSchema.extend({\n passed: z.boolean(),\n score: z.number(),\n status: z.never().optional(),\n reasons: z.never().optional(),\n integrity: agentIntegritySchema.extend({\n rulesLoaded: z.number().int().positive(),\n }),\n }),\n agentFormatBaseSchema.extend({\n passed: z.literal(false),\n score: z.never().optional(),\n status: z.literal(\"indeterminate\"),\n reasons: z.tuple([z.literal(\"zero_rules_loaded\")]),\n integrity: agentIntegritySchema.extend({\n rulesLoaded: z.literal(0),\n }),\n }),\n // A finalized Run can explicitly allow inert governance. Preserve the\n // indeterminate integrity truth while making `passed` match that Run's sole\n // verdict; requiring Run pins prevents generic zero-rule envelopes from\n // accidentally becoming green.\n agentFormatBaseSchema.extend({\n passed: z.literal(true),\n score: z.never().optional(),\n status: z.literal(\"indeterminate\"),\n reasons: z.tuple([z.literal(\"zero_rules_loaded\")]),\n integrity: agentIntegritySchema.extend({\n rulesLoaded: z.literal(0),\n }),\n provenance: agentRunProvenanceSchema,\n verdict: agentRunVerdictSchema.extend({ exitCode: z.literal(0) }),\n }),\n]);\nexport type AgentFormat = z.infer<typeof agentFormatSchema>;\n\nexport const agentErrorEnvelopeSchema = z.object({\n schemaVersion: z.literal(AGENT_FORMAT_SCHEMA_VERSION),\n passed: z.literal(false),\n error: z.object({\n code: z.string().min(1),\n message: z.string().min(1),\n }),\n provenance: agentRunProvenanceSchema.optional(),\n verdict: agentRunVerdictSchema.optional(),\n cloudReport: z.enum([\"accepted\", \"reported\", \"failed\", \"skipped\"]).optional(),\n notices: z.array(z.string()).optional(),\n});\nexport type AgentErrorEnvelope = z.infer<typeof agentErrorEnvelopeSchema>;\n\nexport const agentOutputSchema = z.union([agentFormatSchema, agentErrorEnvelopeSchema]);\nexport type AgentOutput = z.infer<typeof agentOutputSchema>;\n\nexport function normalizeSeverity(severity: Severity | LegacySeverityLevel): Severity {\n return severitySchema.safeParse(severity).success\n ? (severity as Severity)\n : severityFromLevel(legacySeverityLevelSchema.parse(severity));\n}\n\nexport function normalizeFinding(\n input: Omit<Finding, \"level\"> & { level?: Finding[\"level\"] }\n): Finding {\n const code = input.code === undefined ? byRuleId.get(input.ruleId) : undefined;\n return {\n ...input,\n code: input.code ?? code?.code,\n helpUrl: input.helpUrl ?? code?.explainUrl,\n evidenceGrade: input.evidenceGrade ?? \"source_backed\",\n level: input.level ?? severityLevel(input.severity),\n };\n}\n\nexport function normalizeViolation(\n input: Omit<Violation, \"level\"> & { level?: Violation[\"level\"] }\n): Violation {\n return {\n ...input,\n level: input.level ?? severityLevel(input.severity),\n };\n}\n","import {\n canonicalJson,\n hash64Hex,\n type FactLocation,\n} from \"../facts/index.js\";\nimport {\n normalizeFinding,\n normalizeViolation,\n type Finding,\n type Violation,\n} from \"../schemas/index.js\";\nimport { byRuleId } from \"./codes.js\";\n\nexport interface BridgeViolationInput {\n violation: Violation;\n canonicalRuleId?: string;\n validator?: string;\n attributes?: Record<string, unknown>;\n}\n\nexport function bridgeSourceViolation(input: BridgeViolationInput): {\n violation: Violation;\n finding: Finding;\n} {\n const ruleId = input.canonicalRuleId ?? input.violation.rule;\n const code = byRuleId.get(ruleId);\n const violation = normalizeViolation({\n ...input.violation,\n code: input.violation.code ?? code?.code,\n helpUrl: input.violation.helpUrl ?? code?.explainUrl,\n });\n const location = locationFromViolation(violation);\n const fingerprint = hash64Hex(\n canonicalJson({\n ruleId,\n legacyRule: violation.rule,\n nodeId: violation.nodeId,\n nodeType: violation.nodeType,\n prop: violation.prop,\n path: violation.path,\n filePath: violation.filePath,\n line: violation.line,\n column: violation.column,\n rawValue: violation.rawValue,\n message: violation.message,\n }),\n );\n\n return {\n violation,\n finding: normalizeFinding({\n ruleId,\n ruleVersion: \"1.0.0\",\n severity: violation.severity,\n level: violation.level,\n code: code?.code,\n helpUrl: code?.explainUrl,\n message: violation.message,\n fingerprint,\n location,\n evidence: [\n {\n factId: [\n \"source\",\n input.validator ?? \"validator\",\n ruleId,\n violation.filePath ?? violation.nodeId,\n violation.line ?? 0,\n violation.column ?? 0,\n violation.prop ?? violation.path ?? \"\",\n ].join(\":\"),\n fact: {\n kind: \"source_violation\",\n location,\n },\n },\n ],\n attributes: {\n source: \"source-validator\",\n validator: input.validator,\n legacyRule: violation.rule === ruleId ? undefined : violation.rule,\n nodeId: violation.nodeId,\n nodeType: violation.nodeType,\n prop: violation.prop,\n path: violation.path,\n rawValue: violation.rawValue,\n legacySuggestion: violation.suggestion,\n ...input.attributes,\n },\n }),\n };\n}\n\nexport function bridgeSourceViolations(\n violations: Violation[],\n options: Omit<BridgeViolationInput, \"violation\"> = {},\n): { violations: Violation[]; findings: Finding[] } {\n const bridged = violations.map((violation) =>\n bridgeSourceViolation({ ...options, violation }),\n );\n return {\n violations: bridged.map((entry) => entry.violation),\n findings: bridged.map((entry) => entry.finding),\n };\n}\n\nfunction locationFromViolation(violation: Violation): FactLocation {\n return {\n file: violation.filePath ?? \"<source>\",\n line: violation.line ?? 0,\n column: violation.column ?? 0,\n };\n}\n"],"mappings":"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","names":["code","z","z","code","componentId","z","z","z","componentId","z","z","z","code","code"]}
|