@usefragments/core 1.0.0 → 1.3.0
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-R3X7UBHU.js → chunk-57QDBEHQ.js} +101 -6
- package/dist/chunk-57QDBEHQ.js.map +1 -0
- package/dist/{chunk-243QYRUF.js → chunk-MLRDNSSA.js} +88 -47
- package/dist/chunk-MLRDNSSA.js.map +1 -0
- package/dist/codes/index.d.ts +2 -2
- package/dist/codes/index.js +2 -2
- package/dist/compiled-types/index.d.ts +1 -1
- package/dist/generate/index.d.ts +1 -1
- package/dist/{governance-BOa3KyiJ.d.ts → governance-DYSirwJu.d.ts} +22 -1
- package/dist/index-h_yWj15D.d.ts +6981 -0
- package/dist/index.d.ts +113 -97
- package/dist/index.js +387 -113
- package/dist/index.js.map +1 -1
- package/dist/react-types.d.ts +1 -1
- package/dist/registry.d.ts +36 -36
- package/dist/schemas/index.d.ts +3 -2584
- package/dist/schemas/index.js +9 -1
- package/dist/test-utils.d.ts +1 -1
- package/package.json +1 -1
- package/src/agent-format.test.ts +144 -2
- package/src/agent-format.ts +34 -7
- package/src/codes/__tests__/codes.test.ts +57 -7
- package/src/codes/codes.ts +44 -42
- package/src/conform-prove.ts +4 -8
- package/src/contract/index.ts +3 -0
- package/src/contract/preimage.test.ts +50 -0
- package/src/contract/preimage.ts +56 -0
- package/src/evidence.ts +27 -0
- package/src/facts/builders.ts +4 -0
- package/src/facts/fact-index.ts +25 -1
- package/src/facts/facts.test.ts +49 -0
- package/src/facts/types.ts +3 -0
- package/src/governance-integrity.test.ts +2 -0
- package/src/governance-integrity.ts +7 -1
- package/src/index.ts +13 -0
- package/src/rules/__tests__/fix-emission-invariant.test.ts +174 -0
- package/src/rules/__tests__/tokens-require-dual-fallback.test.ts +90 -0
- package/src/rules/components-prefer-library.ts +165 -7
- package/src/rules/emit-gate.test.ts +40 -2
- package/src/rules/emit-gate.ts +21 -10
- package/src/rules/finding.ts +3 -0
- package/src/rules/fix-availability.ts +33 -0
- package/src/rules/rules.test.ts +180 -24
- package/src/rules/spacing-resolution.ts +5 -8
- package/src/rules/styles-no-raw-color.ts +32 -23
- package/src/rules/styles-no-raw-dimensions.ts +31 -12
- package/src/rules/styles-no-raw-spacing.ts +33 -11
- package/src/rules/styles-no-raw-typography.ts +37 -15
- package/src/rules/taxonomy.test.ts +19 -3
- package/src/rules/tiers.ts +1 -1
- package/src/rules/tokens-require-dual-fallback.ts +54 -17
- package/src/rules/utils.ts +51 -0
- package/src/schemas/index.ts +106 -4
- package/src/token-types.ts +6 -0
- package/src/tokens/__tests__/source-names.test.ts +42 -0
- package/src/tokens/design-token-parser.test.ts +24 -5
- package/src/tokens/design-token-parser.ts +40 -8
- package/dist/chunk-243QYRUF.js.map +0 -1
- package/dist/chunk-R3X7UBHU.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/rules/fix-availability.ts","../src/codes/codes.ts","../src/facts/ids.ts","../src/facts/builders.ts","../src/package-identity-match.ts","../src/facts/fact-index.ts","../src/governance.ts","../src/facts/compile.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 \"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 \"theme/no-theme-coupled-literal\": false,\n \"a11y/required-accessible-name\": 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 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: \"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 code({\n code: \"FUI3002\",\n ruleId: \"a11y/standard\",\n category: \"a11y\",\n defaultSeverity: \"serious\",\n title: \"Accessibility standard failed\",\n lifecycle: \"experimental\",\n fixAvailable: false,\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] 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","/**\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 if (value === undefined) return \"null\";\n if (value === null || typeof value !== \"object\") return JSON.stringify(value);\n if (Array.isArray(value)) {\n return `[${value.map(canonicalJson).join(\",\")}]`;\n }\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 return `{${entries.map(([k, v]) => `${JSON.stringify(k)}:${canonicalJson(v)}`).join(\",\")}}`;\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 { 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 ComponentId,\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 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 UsageImportFact,\n UsageInlineStyleFact,\n UsageNodeFact,\n UsagePropResolvedFact,\n UsageTextChildFact,\n FactId,\n} from \"./types.js\";\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\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}): 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 };\n}\n\nexport function makeStyleRawDimensionForbiddenFact(input: {\n appliesTo: string[];\n prefer: \"token\" | \"css-variable\";\n severity: GovernanceSeverity;\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 };\n}\n\nexport function makeStylePropertyScaleFact(input: {\n property: string;\n scale: string;\n severity: GovernanceSeverity;\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 };\n}\n\nexport function makeStyleFontSizeScaleFact(input: {\n scale: string;\n severity: GovernanceSeverity;\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 };\n}\n\nexport function makeStyleCssVarsMustBeDefinedFact(input: {\n severity: GovernanceSeverity;\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 };\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}): JsxUnknownPropsForbiddenFact {\n return {\n id: factId(\"jsx_unknown_props_forbidden\", {}),\n kind: \"jsx_unknown_props_forbidden\",\n severity: input.severity,\n };\n}\n\nexport function makeJsxInlineStyleForbiddenRawFact(input: {\n property: string;\n severity: GovernanceSeverity;\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 };\n}\n\nexport function makeJsxImportPathPreferredFact(input: {\n from: string;\n to: string;\n imported?: string;\n because?: string;\n severity: GovernanceSeverity;\n}): JsxImportPathPreferredFact {\n return {\n id: factId(\"jsx_import_path_preferred\", {\n from: input.from,\n to: input.to,\n imported: input.imported,\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 };\n}\n\nexport function makeJsxComponentPreferredFact(input: {\n from: ComponentId;\n to: ComponentId;\n because?: string;\n severity: GovernanceSeverity;\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 };\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}): TokenDefinitionFact {\n return {\n id: factId(\"token_definition\", { name: input.name }),\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 };\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}): 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 };\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\";\n value: string;\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 };\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 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}): 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 };\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\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 === \"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 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 if (\n canonicalJson(logicalFactForComparison(existing)) !==\n canonicalJson(logicalFactForComparison(fact))\n ) {\n console.warn(\n `FactIndex: conflicting facts for id ${fact.id} — keeping ${describeFactForConflict(existing)}, skipping ${describeFactForConflict(fact)}`\n );\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 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\";\n\nexport const governanceSeveritySchema = z.enum([\"error\", \"warn\", \"info\"]);\nexport type GovernanceSeverity = z.infer<typeof governanceSeveritySchema>;\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});\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});\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});\n\nconst styleFontSizeMustMatchScaleRecordSchema = z.object({\n kind: z.literal(\"style.fontSize.mustMatchScale\"),\n scale: z.string().min(1),\n severity: governanceSeveritySchema,\n});\n\nconst styleCssVarsMustBeDefinedRecordSchema = z.object({\n kind: z.literal(\"style.cssVars.mustBeDefined\"),\n severity: governanceSeveritySchema,\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});\n\nconst jsxInlineStyleForbidRawRecordSchema = z.object({\n kind: z.literal(\"jsx.inlineStyle.forbidRaw\"),\n properties: z.array(z.string().min(1)),\n severity: governanceSeveritySchema,\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});\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});\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 propValueAvoidRecordSchema = z.object({\n kind: z.literal(\"prop.value.avoid\"),\n prop: z.string().min(1),\n value: z.unknown(),\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: z.unknown(),\n when: z.object({ path: z.string().min(1).optional() }).optional(),\n because: z.string(),\n fix: z.object({ replaceWith: z.unknown() }).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\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 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 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 })\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>;\n\nexport interface GovernanceConfig {\n extends?: string[];\n severity?: GovernanceSeverity;\n rules?: Record<string, unknown>;\n agents?: Record<string, { rules?: Record<string, unknown> }>;\n audit?: Record<string, unknown>;\n runners?: Record<string, Record<string, unknown>>;\n canonicalSources?: CanonicalSource[];\n presets?: string[];\n scales?: Record<string, ScaleGovernanceRecord>;\n styles?: GlobalStyleGovernanceRecord[];\n jsx?: GlobalJsxGovernanceRecord[];\n tailwind?: {\n palette?: {\n allow?: string[];\n deny?: string[];\n };\n [key: string]: unknown;\n };\n agent?: {\n repairOrder?: string[];\n [key: string]: unknown;\n };\n components?: Record<string, ComponentPolicyRecord>;\n overrides?: ComponentPolicyOverride[];\n ci?: {\n failOnWarnings?: boolean;\n [key: string]: unknown;\n };\n [key: string]: unknown;\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\nexport interface GovernedFragmentDefinition<\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 govern?: (g: ComponentGovernanceBuilder<TProps>) => ComponentGovernanceRecord[];\n governance?: ComponentGovernanceRecord[];\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\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 * 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 { resolveComponentGovernance } from \"../governance.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\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 })\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 })\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 })\n );\n }\n break;\n case \"style.fontSize.mustMatchScale\":\n out.push(makeStyleFontSizeScaleFact({ scale: style.scale, severity: style.severity }));\n break;\n case \"style.cssVars.mustBeDefined\":\n out.push(makeStyleCssVarsMustBeDefinedFact({ severity: style.severity }));\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(makeJsxUnknownPropsForbiddenFact({ severity: jsx.severity }));\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 })\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 })\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 })\n );\n break;\n }\n }\n }\n\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 return out;\n}\n\nconst RULE_FAMILY_MEMBERS: Record<string, readonly string[]> = {\n \"tokens/hardcoded-values\": [\n \"styles/no-raw-color\",\n \"styles/no-raw-spacing\",\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\"],\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 const family = RULE_FAMILY_MEMBERS[ruleId];\n if (!family) continue;\n const config = ruleConfigFromValue(value, govern.severity ?? \"warn\");\n for (const memberRuleId of family) configs.set(memberRuleId, config);\n }\n\n for (const [ruleId, value] of Object.entries(rules ?? {})) {\n configs.set(ruleId, ruleConfigFromValue(value, govern.severity ?? \"warn\"));\n }\n\n if (\n govern.canonicalSources?.length &&\n configs.get(\"components/prefer-library\")?.enabled !== false\n ) {\n const existing = configs.get(\"components/prefer-library\");\n configs.set(\"components/prefer-library\", {\n enabled: true,\n severity: existing?.severity ?? govern.severity ?? \"warn\",\n options: {\n ...existing?.options,\n canonicalSources:\n existing?.options?.canonicalSources ?? govern.canonicalSources,\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 {\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","code","componentId","componentId","code"]}
|
package/dist/codes/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Severity } from '../severity.js';
|
|
2
|
-
import { Violation, Finding } from '../
|
|
2
|
+
import { n as Violation, F as Finding } from '../index-h_yWj15D.js';
|
|
3
3
|
import 'zod';
|
|
4
4
|
|
|
5
5
|
declare const EXPLAIN_URL_BASE = "https://usefragments.com/errors/";
|
|
@@ -17,7 +17,7 @@ interface FuiCode {
|
|
|
17
17
|
fixAvailable: boolean;
|
|
18
18
|
evidenceRequired: boolean;
|
|
19
19
|
}
|
|
20
|
-
declare const CODES: readonly [FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode];
|
|
20
|
+
declare const CODES: readonly [FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode, FuiCode];
|
|
21
21
|
declare const byCode: ReadonlyMap<string, FuiCode>;
|
|
22
22
|
declare const byRuleId: ReadonlyMap<string, FuiCode>;
|
|
23
23
|
declare function explainUrlForCode(code: string): string;
|
package/dist/codes/index.js
CHANGED
|
@@ -6,8 +6,8 @@ import {
|
|
|
6
6
|
byCode,
|
|
7
7
|
byRuleId,
|
|
8
8
|
explainUrlForCode
|
|
9
|
-
} from "../chunk-
|
|
10
|
-
import "../chunk-
|
|
9
|
+
} from "../chunk-MLRDNSSA.js";
|
|
10
|
+
import "../chunk-57QDBEHQ.js";
|
|
11
11
|
import "../chunk-JNBFJ34I.js";
|
|
12
12
|
import "../chunk-EIYNNS77.js";
|
|
13
13
|
import "../chunk-V4VQB57N.js";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import '../types-xJ2xyp_G.js';
|
|
2
|
-
export {
|
|
2
|
+
export { aY as AIMetadata, C as CompiledBlock, b as CompiledFragment, z as CompiledFragmentsFile, E as CompiledTokenData, H as CompiledTokenEntry, aZ as ComponentRelation, a_ as FragmentContract, a$ as FragmentGenerated, b0 as FragmentMeta, b1 as FragmentUsage, b2 as ImportEntry, ah as ObservedComponentUsage, ai as ObservedUsageProp, b3 as PerformanceData, b4 as PerformanceSummary, b5 as PropDefinition, b6 as Theme, b7 as VerifyResult } from '../governance-DYSirwJu.js';
|
|
3
3
|
import 'zod';
|
|
4
4
|
import 'react';
|
|
5
5
|
import '../topology/index.js';
|
package/dist/generate/index.d.ts
CHANGED
|
@@ -119,6 +119,8 @@ interface ContractCatalogInput {
|
|
|
119
119
|
policy?: ContractPolicyInput | null;
|
|
120
120
|
}
|
|
121
121
|
declare const CONTRACT_PREIMAGE_SCHEMA: "fcid-preimage:v1";
|
|
122
|
+
/** Request header used by clients that can verify and consume this preimage. */
|
|
123
|
+
declare const CONTRACT_PREIMAGE_CAPABILITY_HEADER: "X-Fragments-Contract-Preimage";
|
|
122
124
|
/**
|
|
123
125
|
* The hashed identity record: four domain sub-hashes plus the projection schema
|
|
124
126
|
* version (so an intentional projection change mints a new fcid). The fcid is
|
|
@@ -128,6 +130,25 @@ interface ContractPreimage {
|
|
|
128
130
|
schema: typeof CONTRACT_PREIMAGE_SCHEMA;
|
|
129
131
|
domains: Record<ContractDomain, string>;
|
|
130
132
|
}
|
|
133
|
+
/**
|
|
134
|
+
* Wire-compatible identity pin carried by Cloud policy responses. Older
|
|
135
|
+
* contract rows may omit the schema/domains, so every field except the FCID is
|
|
136
|
+
* intentionally nullable at this boundary.
|
|
137
|
+
*/
|
|
138
|
+
interface ContractIdentityPin {
|
|
139
|
+
contractHash: string;
|
|
140
|
+
preimageSchema?: string | null;
|
|
141
|
+
domainHashes?: Readonly<Record<string, string>> | null;
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Reconstruct and verify the canonical preimage behind a published FCID.
|
|
145
|
+
*
|
|
146
|
+
* This is the only supported bridge from the additive ledger/wire shape
|
|
147
|
+
* (`preimageSchema` + `domainHashes`) back to the hash input. Consumers must
|
|
148
|
+
* not trust `enforcedIdentityComparable` on its own: a malformed, partial, or
|
|
149
|
+
* internally inconsistent pin returns `null` and therefore fails closed.
|
|
150
|
+
*/
|
|
151
|
+
declare function verifiedContractPreimageFromPin(pin: ContractIdentityPin): ContractPreimage | null;
|
|
131
152
|
/**
|
|
132
153
|
* Project a catalog onto the contract preimage: four enforced-only domain
|
|
133
154
|
* bodies, each hashed independently. `contractHash(projectContractPreimage(x))`
|
|
@@ -3276,4 +3297,4 @@ declare const g: {
|
|
|
3276
3297
|
component: ComponentGovernanceBuilder<Record<string, unknown>>;
|
|
3277
3298
|
};
|
|
3278
3299
|
|
|
3279
|
-
export { type
|
|
3300
|
+
export { type DiffResult as $, type AIMetadata as A, type BlockDefinition as B, type CompiledBlock as C, type CompiledRecipe as D, type CompiledTokenData as E, type FragmentDefinition as F, type GovernanceSeverity as G, type CompiledTokenEntry as H, type ComponentGovernanceBuilder as I, type ComponentGovernanceRecord as J, type ComponentRef as K, type ComponentRelation as L, type CompositionMetadata as M, type ContractCanonicalMappingInput as N, type ContractComponentInput as O, type ContractIdentityPin as P, type ContractPolicyInput as Q, type ResolvedGovernedFragmentDefinition as R, type StorybookFilterConfig as S, type TokenConfig as T, type ContractPreimage as U, type VariantRenderOptions as V, type ContractPropMappingInput as W, type ContractTokenInput as X, type ContractWaiverInput as Y, type ControlType as Z, type DesignSystemConfig as _, type FragmentDefinitionV2 as a, type FragmentGenerated$1 as a$, type FigmaPropMapping as a0, type FragmentContract as a1, type FragmentExample as a2, type FragmentGenerated as a3, type FragmentGuidance as a4, type FragmentMeta as a5, type FragmentProvenance as a6, type FragmentUsage as a7, type FragmentVariant as a8, type GlobalGovernanceRecord as a9, type Theme as aA, type ThemeSeeds as aB, type TokenSourceConfig as aC, type TokenSourceFormat as aD, type VerifyRequest as aE, type VerifyResult as aF, type Viewport as aG, componentGovernanceRecordSchema as aH, componentGovernanceRecordsSchema as aI, contractComponentsFromFragments as aJ, contractPolicyFromGovernanceConfig as aK, diffContractDomains as aL, g as aM, globalGovernanceRecordSchema as aN, globalJsxGovernanceRecordSchema as aO, globalStyleGovernanceRecordSchema as aP, governanceConfigSchema as aQ, governanceConfigWithLocalCanonical as aR, governanceSeveritySchema as aS, localCanonicalContractMappings as aT, normalizeGovernanceConfig as aU, projectContractPreimage as aV, scaleGovernanceRecordSchema as aW, verifiedContractPreimageFromPin as aX, type AIMetadata$1 as aY, type ComponentRelation$1 as aZ, type FragmentContract$1 as a_, type GlobalJsxGovernanceRecord as aa, type GlobalStyleGovernanceRecord as ab, type GovernancePropValue as ac, type InspectConfig as ad, type LocalCanonicalDeclaration as ae, type LocalCanonicalResolveRule as af, type Manifest as ag, type ObservedComponentUsage as ah, type ObservedUsageProp as ai, type PlayFunction as aj, type PlayFunctionContext as ak, type PropDefinition as al, type PropGovernanceBuilder as am, type PropGovernanceOptions as an, type PropKey as ao, type PropType as ap, type RecipeDefinition as aq, type RegistryOptions as ar, type RepoRelativePath as as, type ScaleGovernanceRecord as at, type Screenshot as au, type ScreenshotConfig as av, type ScreenshotMetadata as aw, type ServiceConfig as ax, type SnapshotConfig as ay, type SnippetPolicyConfig as az, type CompiledFragment as b, type FragmentMeta$1 as b0, type FragmentUsage$1 as b1, type ImportEntry as b2, type PerformanceData as b3, type PerformanceSummary as b4, type PropDefinition$1 as b5, type Theme$1 as b6, type VerifyResult$1 as b7, type ContractDomain as c, type ContractCatalogInput as d, type GovernedFragmentDefinition as e, type GovernanceConfig as f, type FragmentsConfig as g, type FragmentComponent as h, type FigmaStringMapping as i, type FigmaBooleanMapping as j, type FigmaEnumMapping as k, type FigmaInstanceMapping as l, type FigmaChildrenMapping as m, type FigmaTextContentMapping as n, type RelationshipType as o, type VariantLoader as p, type CanonicalSource as q, type AccessibilityGovernanceBuilder as r, type AppConfig as s, type BaselineInfo as t, type BoundingBox as u, CONTRACT_DOMAINS as v, CONTRACT_PREIMAGE_CAPABILITY_HEADER as w, CONTRACT_PREIMAGE_SCHEMA as x, type CanonicalMappingStatus as y, type CompiledFragmentsFile as z };
|