Skip to content

Commit 66e1cd3

Browse files
Bill LeoutsakosBill Leoutsakos
authored andcommitted
refactor(design): group analysis by responsibility
1 parent 6c3db54 commit 66e1cd3

64 files changed

Lines changed: 319 additions & 267 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎.github/workflows/test-build.yml‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -310,7 +310,7 @@ jobs:
310310
# The same base covers the complete push for migration and block-registry checks.
311311
- name: Resolve base ref for diff-based audits
312312
id: audit_base
313-
run: bun --no-env-file scripts/design-conformance/ci.ts --resolve-refs
313+
run: bun --no-env-file scripts/design-conformance/diff/ci.ts --resolve-refs
314314

315315
- name: Check block registry invariants
316316
run: bun run apps/sim/scripts/check-block-registry.ts "${{ steps.audit_base.outputs.ref }}"
@@ -334,7 +334,7 @@ jobs:
334334
DESIGN_BASE: ${{ steps.audit_base.outputs.ref }}
335335
DESIGN_HEAD: ${{ steps.audit_base.outputs.head }}
336336
DESIGN_REPORT_PATH: ${{ runner.temp }}/design-conformance.json
337-
run: bun --no-env-file scripts/design-conformance/ci.ts --base "$DESIGN_BASE" --head "$DESIGN_HEAD"
337+
run: bun --no-env-file scripts/design-conformance/diff/ci.ts --base "$DESIGN_BASE" --head "$DESIGN_HEAD"
338338

339339
- name: Save design conformance report
340340
if: always()

‎biome.json‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,7 @@
167167
}
168168
},
169169
{
170-
"includes": ["scripts/design-conformance/contracts.json"],
170+
"includes": ["scripts/design-conformance/system/contracts.json"],
171171
"formatter": {
172172
"enabled": false
173173
}

‎package.json‎

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -218,7 +218,6 @@
218218
"postgres@3.4.9": "patches/postgres@3.4.9.patch"
219219
},
220220
"imports": {
221-
"#design-conformance/*": "./scripts/design-conformance/*.ts",
222-
"#control-analysis/*": "./scripts/design-conformance/control-*.ts"
221+
"#design-conformance/*": "./scripts/design-conformance/*.ts"
223222
}
224223
}

‎scripts/check-design-conformance.ts‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#!/usr/bin/env bun
22
/** Checks committed styling against central design contracts. See design-conformance/README.md. */
33
try {
4-
const { main } = await import('#design-conformance/command')
4+
const { main } = await import('#design-conformance/diff/command')
55
process.exitCode = await main()
66
} catch (error) {
77
process.stderr.write(

‎scripts/design-conformance/README.md‎

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,15 @@ CI uses immutable event base/head revisions. It publishes file/line warnings, a
2424

2525
## Files and source facts
2626

27-
- `contracts.json`: general design rules, scope, exclusions, static-analysis limits, adopted utility policy and explicitly central external recipes. It has no component registration or handwritten component inheritance.
27+
- `system/contracts.json`: general design rules, scope, exclusions, static-analysis limits, adopted utility policy and explicitly central external recipes. It has no component registration or handwritten component inheritance.
2828
- `packages/emcn/src/design-ownership.json`: the small, explicit list of exceptional permissions and protections. It is read from each source revision, validated against discovered public exports and slots, and included in the scan's effective ownership inventory.
29-
- `generated-contracts.ts`: one TypeScript compatibility program per source snapshot discovers public APIs, aliases and compound exports. Babel traces implementation classes, CVA/imported recipes, slots and forwarding. Existing CSS/Tailwind analysis identifies owned properties and global token definitions, contexts and aliases. Bounded caches share the result. Snapshot hosts can read pinned dependency types but cannot read current workspace implementations while inspecting historical source.
29+
- `system/generated-contracts.ts`: one TypeScript compatibility program per source snapshot discovers public APIs, aliases and compound exports. Babel traces implementation classes, CVA/imported recipes, slots and forwarding. Existing CSS/Tailwind analysis identifies owned properties and global token definitions, contexts and aliases. Bounded caches share the result. Snapshot hosts can read pinned dependency types but cannot read current workspace implementations while inspecting historical source.
3030
- `scan.json`: external versioned report containing findings, unchecked diagnostics, inspection failures, product uses, and compact EMCN export/variant/default/slot/relationship facts. Component and icon namespaces remain distinct. Token definitions and recipe bodies are analyzed from source but are not duplicated in the report's metadata.
31-
- `conformance.ts`, `extract.ts`, `normalize.ts`, `source-summary.ts`, `control-*.ts`: shared styling, composition, control, artwork and provenance analysis. `command.ts` and `reporting.ts` handle local comparisons; `ci.ts` handles warning-only CI publication.
31+
- `shared/`: source readers, revision identity, report types, CSS normalization and rendered-HTML helpers used across the analyzers.
32+
- `system/`: central EMCN and global-style facts, generated export/slot metadata, recipes and policy.
33+
- `styling/`: class, CSS, artwork and component-ownership extraction and conformance rules.
34+
- `controls/`: rendered UI inventory, value and colour tracing, local-control review and product scope.
35+
- `diff/`: base/head comparison, local command, reporting and warning-only CI publication.
3236
- `scripts/design-scan/`: whole-tree inventory and external reports using that same analysis.
3337
- `scripts/design-studio/refresh.mjs`, `tools/design-studio/`: explicit local refresh and separate local-only Next app. The deployed Sim app has no Studio route.
3438

scripts/design-conformance/control-analysis.ts renamed to scripts/design-conformance/controls/analysis.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
import {
22
type ColourAssignmentReport,
33
ColourAssignments,
4-
} from '#control-analysis/colour-assignments'
5-
import { type ControlInventory, inspectControls } from '#control-analysis/inventory'
6-
import type { ControlSource } from '#control-analysis/model'
7-
import { ReviewCollector, type ReviewReport } from '#control-analysis/review'
8-
import type { GeneratedContracts } from '#design-conformance/generated-contracts'
4+
} from '#design-conformance/controls/colour-assignments'
5+
import { type ControlInventory, inspectControls } from '#design-conformance/controls/inventory'
6+
import type { ControlSource } from '#design-conformance/controls/model'
7+
import { ReviewCollector, type ReviewReport } from '#design-conformance/controls/review'
8+
import type { GeneratedContracts } from '#design-conformance/system/generated-contracts'
99

1010
/** Shared control analysis for the diff check and complete scan. */
1111
export function inspectControlAnalysis(

scripts/design-conformance/colour-assignments.test.ts renamed to scripts/design-conformance/controls/colour-assignments.test.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { expect, test } from 'vitest'
2-
import { inspectControlAnalysis } from '#control-analysis/analysis'
3-
import { withoutVerifiedColourUsages } from '#control-analysis/colour-assignments'
4-
import type { ControlSource } from '#control-analysis/model'
2+
import { inspectControlAnalysis } from '#design-conformance/controls/analysis'
3+
import { withoutVerifiedColourUsages } from '#design-conformance/controls/colour-assignments'
4+
import type { ControlSource } from '#design-conformance/controls/model'
55

66
const css = 'apps/sim/components/sample.css'
77
const ui = 'apps/sim/components/sample.tsx'

scripts/design-conformance/control-colour-assignments.ts renamed to scripts/design-conformance/controls/colour-assignments.ts

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,23 @@ import type {
77
ControlSource,
88
Diagnostic,
99
InventoryFinding,
10-
} from '#control-analysis/model'
11-
import { compare, regular } from '#control-analysis/model'
12-
import { productScope } from '#control-analysis/scope'
13-
import { type Expr, expression, type StaticInputs, unknown } from '#control-analysis/static-inputs'
14-
import { centralFile } from '#design-conformance/contracts'
15-
import { canonical, type Finding, hash, TOKEN_FILE } from '#design-conformance/model'
16-
import { paintDeclarations, rawColours, utility, variablesIn } from '#design-conformance/normalize'
10+
} from '#design-conformance/controls/model'
11+
import { compare, regular } from '#design-conformance/controls/model'
12+
import { productScope } from '#design-conformance/controls/scope'
13+
import {
14+
type Expr,
15+
expression,
16+
type StaticInputs,
17+
unknown,
18+
} from '#design-conformance/controls/static-inputs'
19+
import { canonical, type Finding, hash, TOKEN_FILE } from '#design-conformance/shared/model'
20+
import {
21+
paintDeclarations,
22+
rawColours,
23+
utility,
24+
variablesIn,
25+
} from '#design-conformance/shared/normalize'
26+
import { centralFile } from '#design-conformance/system/contracts'
1727

1828
interface Site {
1929
file: string

scripts/design-conformance/coverage.test.ts renamed to scripts/design-conformance/controls/coverage.test.ts

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
/** biome-ignore-all lint/suspicious/noTemplateCurlyInString: Fixtures contain proposed source text. */
22
import { expect, test } from 'vitest'
3-
import { inspectControlAnalysis } from '#control-analysis/analysis'
4-
import type { ControlSource } from '#control-analysis/model'
5-
import { ReviewCollector } from '#control-analysis/review'
6-
import { productScope } from '#control-analysis/scope'
7-
import { extract } from '#design-conformance/extract'
8-
import { generateContracts } from '#design-conformance/generated-contracts'
9-
import { GitSource } from '#design-conformance/worktree-source'
3+
import { inspectControlAnalysis } from '#design-conformance/controls/analysis'
4+
import type { ControlSource } from '#design-conformance/controls/model'
5+
import { ReviewCollector } from '#design-conformance/controls/review'
6+
import { productScope } from '#design-conformance/controls/scope'
7+
import { GitSource } from '#design-conformance/shared/worktree-source'
8+
import { extract } from '#design-conformance/styling/extract'
9+
import { generateContracts } from '#design-conformance/system/generated-contracts'
1010

1111
const globals = 'apps/sim/app/_styles/globals.css'
1212
const ui = 'apps/sim/components/example.tsx'

scripts/design-conformance/control-imperative.ts renamed to scripts/design-conformance/controls/imperative.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import type { Binding, NodePath } from '@babel/traverse'
22
import traverseModule from '@babel/traverse'
33
import * as t from '@babel/types'
44
import { type DefaultTreeAdapterMap, parseFragment } from 'parse5'
5-
import type { ControlInput } from '#control-analysis/inventory'
5+
import type { ControlInput } from '#design-conformance/controls/inventory'
66

77
const traverse =
88
typeof traverseModule === 'function'

0 commit comments

Comments
 (0)