basalt-ui 1.33.0 → 1.34.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (83) hide show
  1. package/AGENTS.md +1 -1
  2. package/CHANGELOG.md +33 -0
  3. package/MIGRATING.md +115 -15
  4. package/README.md +3 -0
  5. package/agent/skills/basalt-app/SKILL.md +5 -3
  6. package/configs/oxlint-basalt.json +33 -0
  7. package/configs/oxlint-plugin.js +21 -6
  8. package/configs/oxlint-plugin.test.ts +98 -10
  9. package/configs/oxlint.json +2 -30
  10. package/dist/cli/check-theme.d.ts.map +1 -1
  11. package/dist/cli/check-theme.js +40 -36
  12. package/dist/cli/doctor.d.ts +5 -10
  13. package/dist/cli/doctor.d.ts.map +1 -1
  14. package/dist/cli/doctor.js +7 -5
  15. package/dist/cli/guard-hook.d.ts.map +1 -1
  16. package/dist/cli/guard-hook.js +6 -34
  17. package/dist/cli/index.d.ts +45 -83
  18. package/dist/cli/index.d.ts.map +1 -1
  19. package/dist/cli/index.js +73 -19
  20. package/dist/cli/sync.d.ts.map +1 -1
  21. package/dist/cli/sync.js +7 -16
  22. package/dist/common/vx-families.d.ts +7 -0
  23. package/dist/common/vx-families.d.ts.map +1 -0
  24. package/dist/common/vx-families.js +32 -0
  25. package/dist/common/vx-family.d.ts +11 -0
  26. package/dist/common/vx-family.d.ts.map +1 -0
  27. package/dist/common/vx-family.js +12 -0
  28. package/dist/guard/index.d.ts +2 -2
  29. package/dist/guard/index.d.ts.map +1 -1
  30. package/dist/guard/index.js +11 -13
  31. package/dist/index.d.ts +1 -1
  32. package/dist/index.d.ts.map +1 -1
  33. package/dist/index.js +0 -2
  34. package/dist/shell/app-mobile-nav.d.ts.map +1 -1
  35. package/dist/shell/app-mobile-nav.js +2 -1
  36. package/dist/shell/app-mobile-nav.module.css +12 -0
  37. package/dist/shell/app-sidebar.d.ts.map +1 -1
  38. package/dist/shell/app-sidebar.js +32 -36
  39. package/dist/shell/app-sidebar.module.css +6 -0
  40. package/dist/shell/index.d.ts +0 -1
  41. package/dist/shell/index.d.ts.map +1 -1
  42. package/dist/shell/index.js +0 -2
  43. package/dist/shell/nav-glyph.d.ts +14 -0
  44. package/dist/shell/nav-glyph.d.ts.map +1 -0
  45. package/dist/shell/nav-glyph.js +21 -0
  46. package/dist/shell/nav-types.d.ts +1 -0
  47. package/dist/shell/nav-types.d.ts.map +1 -1
  48. package/dist/shell/sidebar-search.d.ts.map +1 -1
  49. package/dist/shell/sidebar-search.js +1 -3
  50. package/dist/surfaces.d.ts +2 -2
  51. package/dist/surfaces.js +2 -2
  52. package/dist/tokens/index.d.ts +1 -1
  53. package/dist/tokens/index.d.ts.map +1 -1
  54. package/dist/tokens/index.js +17 -1
  55. package/dist/tokens/size-classes.d.ts +12 -0
  56. package/dist/tokens/size-classes.d.ts.map +1 -1
  57. package/dist/tokens/size-classes.js +11 -5
  58. package/llms.txt +4 -4
  59. package/package.json +1 -1
  60. package/src/cli/check-theme.ts +63 -37
  61. package/src/cli/doctor.ts +12 -15
  62. package/src/cli/guard-hook.ts +8 -35
  63. package/src/cli/index.ts +126 -113
  64. package/src/cli/sync.ts +7 -16
  65. package/src/common/vx-families.ts +36 -0
  66. package/src/common/vx-family.ts +22 -0
  67. package/src/guard/index.ts +22 -25
  68. package/src/index.ts +0 -2
  69. package/src/shell/app-mobile-nav.module.css +12 -0
  70. package/src/shell/app-mobile-nav.tsx +8 -1
  71. package/src/shell/app-sidebar.module.css +6 -0
  72. package/src/shell/app-sidebar.tsx +52 -50
  73. package/src/shell/index.tsx +0 -1
  74. package/src/shell/nav-glyph.tsx +38 -0
  75. package/src/shell/nav-types.ts +1 -0
  76. package/src/shell/sidebar-search.tsx +1 -5
  77. package/src/surfaces.ts +2 -2
  78. package/src/tokens/index.ts +28 -1
  79. package/src/tokens/size-classes.ts +18 -5
  80. package/dist/shell/use-breakpoint.d.ts +0 -10
  81. package/dist/shell/use-breakpoint.d.ts.map +0 -1
  82. package/dist/shell/use-breakpoint.js +0 -11
  83. package/src/shell/use-breakpoint.ts +0 -37
@@ -1,8 +1,7 @@
1
- import { readFileSync } from "node:fs";
2
- import { resolve } from "node:path";
1
+ import { existsSync, readFileSync } from "node:fs";
2
+ import { dirname, resolve } from "node:path";
3
3
  import {
4
4
  checkSource,
5
- DEFAULT_GUARD_CONFIG,
6
5
  guardKindRemedy,
7
6
  TOKENS_ONLY_DISABLED_KINDS,
8
7
  unmatchedExemptPatterns
@@ -10,30 +9,53 @@ import {
10
9
  import { auditAllows } from "./audit-allows.js";
11
10
  import { DEFAULT_ROOTS, resolveRoots } from "./config.js";
12
11
  import {
12
+ basaltPresetEntry,
13
13
  conflictingProfileFlags,
14
+ findRepoRoot,
14
15
  declaredProfile,
15
16
  hasBasaltKey,
17
+ namesShipped,
18
+ noteRelocation,
19
+ OXLINT_FILES,
20
+ OXLINT_NO_BIN,
21
+ oxlintBinResolves,
22
+ packageRoot,
23
+ parseJsonc,
16
24
  readBasaltConfig,
17
- resolveExemptRules,
25
+ readIfExists,
26
+ readSource,
27
+ resolveGuardConfig,
18
28
  resolveProjectDir,
19
29
  scannableFiles,
20
30
  SERIES_MODULE_HINT_RE,
21
31
  waiverHintFor
22
32
  } from "./index.js";
23
- function checkTheme(invocationCwd = process.cwd(), flags = []) {
24
- if (conflictingProfileFlags(flags)) {
25
- console.error(
26
- "basalt-ui check-theme: --tokens-only and --framework are alternatives \u2014 pass one."
27
- );
28
- return 1;
33
+ function oxlintLaneAt(dir) {
34
+ const raw = readIfExists(resolve(dir, ".oxlintrc.json"));
35
+ if (raw === null) return "absent";
36
+ const rc = parseJsonc(raw);
37
+ const ownRules = Object.keys(Object(rc?.["rules"])).some((id) => id.startsWith("basalt/"));
38
+ const plugin = ownRules ? [rc?.["jsPlugins"]].flat().find((e) => namesShipped(e, OXLINT_FILES.plugin)) : void 0;
39
+ const entry = basaltPresetEntry(rc?.["extends"]) ?? plugin;
40
+ return entry !== void 0 && existsSync(resolve(dir, entry)) ? "wired" : "unwired";
41
+ }
42
+ function astLaneNotice(cwd) {
43
+ const root = findRepoRoot(cwd);
44
+ for (let dir = cwd; ; dir = dirname(dir)) {
45
+ const lane = oxlintLaneAt(dir);
46
+ if (lane === "wired")
47
+ return oxlintBinResolves(cwd) ? null : `\u2139 basalt-ui check-theme: ${OXLINT_NO_BIN}.`;
48
+ if (lane === "unwired" || dir === root || dirname(dir) === dir) break;
29
49
  }
50
+ const preset = readSource(packageRoot(), OXLINT_FILES.guards);
51
+ const count = preset === null ? `every (${OXLINT_FILES.guards} unreadable, so uncounted)` : String(preset.match(/"basalt\/[\w-]+":/g)?.length ?? 0);
52
+ return `\u2139 basalt-ui check-theme: AST lane not enforced \u2014 ${count} basalt/* rule ids unguarded (incl. the promoted control-outside-home, raw-breakpoint): no .oxlintrc.json up to the repo root extends basalt-ui/configs/oxlint.json (or the guards-only oxlint-basalt.json). \`basalt-ui doctor\` names the fix.`;
53
+ }
54
+ function checkTheme(invocationCwd = process.cwd(), flags = []) {
55
+ if (conflictingProfileFlags("check-theme", flags)) return 1;
30
56
  const project = resolveProjectDir(invocationCwd);
31
57
  const cwd = project.dir;
32
- if (project.relocatedFrom !== null) {
33
- console.log(
34
- `basalt-ui check-theme: BASALT_CWD relocated from ${project.relocatedFrom} to ${cwd}.`
35
- );
36
- }
58
+ noteRelocation("check-theme", project);
37
59
  const cfg = readBasaltConfig(cwd);
38
60
  const roots = resolveRoots(cfg);
39
61
  const profile = declaredProfile(cfg, flags);
@@ -42,27 +64,7 @@ function checkTheme(invocationCwd = process.cwd(), flags = []) {
42
64
  `basalt-ui check-theme: tokens-only profile \u2014 ${TOKENS_ONLY_DISABLED_KINDS.size} Mantine-coupled kinds are off; the color and typography kinds still apply. Pass --framework to force the full set.`
43
65
  );
44
66
  }
45
- const guardCfg = {
46
- spacingSteps: cfg.spacingSteps ?? DEFAULT_GUARD_CONFIG.spacingSteps,
47
- rawRadius: cfg.rawRadius ?? DEFAULT_GUARD_CONFIG.rawRadius,
48
- forbiddenAccents: cfg.forbiddenAccents ?? DEFAULT_GUARD_CONFIG.forbiddenAccents,
49
- mantineShadeIndex: cfg.mantineShadeIndex ?? DEFAULT_GUARD_CONFIG.mantineShadeIndex,
50
- rawSurface: cfg.rawSurface ?? DEFAULT_GUARD_CONFIG.rawSurface,
51
- cardWithBorder: cfg.cardWithBorder ?? DEFAULT_GUARD_CONFIG.cardWithBorder,
52
- offSystemSurfaceVar: cfg.offSystemSurfaceVar ?? DEFAULT_GUARD_CONFIG.offSystemSurfaceVar,
53
- rawHtmlLayout: cfg.rawHtmlLayout ?? DEFAULT_GUARD_CONFIG.rawHtmlLayout,
54
- inlineSpacing: cfg.inlineSpacing ?? DEFAULT_GUARD_CONFIG.inlineSpacing,
55
- inlineDisplay: cfg.inlineDisplay ?? DEFAULT_GUARD_CONFIG.inlineDisplay,
56
- rawVisxAxis: cfg.rawVisxAxis ?? DEFAULT_GUARD_CONFIG.rawVisxAxis,
57
- rawMotionValue: cfg.rawMotionValue ?? DEFAULT_GUARD_CONFIG.rawMotionValue,
58
- chartMissingAriaLabel: cfg.chartMissingAriaLabel ?? DEFAULT_GUARD_CONFIG.chartMissingAriaLabel,
59
- rawFormControl: cfg.rawFormControl ?? DEFAULT_GUARD_CONFIG.rawFormControl,
60
- sub16InputFont: cfg.sub16InputFont ?? DEFAULT_GUARD_CONFIG.sub16InputFont,
61
- allowComment: "theme-allow",
62
- exemptRules: resolveExemptRules(cfg),
63
- severity: cfg.severity ?? DEFAULT_GUARD_CONFIG.severity,
64
- ...profile === "tokens-only" ? { profile: "tokens-only" } : {}
65
- };
67
+ const guardCfg = resolveGuardConfig(cfg, profile);
66
68
  const findings = [];
67
69
  const scanned = scannableFiles(cwd, cfg);
68
70
  for (const rel of scanned) {
@@ -91,6 +93,8 @@ function checkTheme(invocationCwd = process.cwd(), flags = []) {
91
93
  `\u26A0 basalt-ui check-theme: "basalt.exemptRules" entry ${unmatched.kind}: "${unmatched.pattern}" ` + (unmatched.reason === "unknown-kind" ? "names no guard kind \u2014 it exempts nothing at all (a typo, or a kind that was renamed)." : "matched none of the scanned files \u2014 it suppresses nothing, and reads as coverage in a config review while enforcing as much as an empty object.")
92
94
  );
93
95
  }
96
+ const notice = profile === "tokens-only" ? null : astLaneNotice(cwd);
97
+ if (notice !== null) console.error(notice);
94
98
  if (findings.length === 0) {
95
99
  console.log("\u2713 Theme guard: no off-palette colors.");
96
100
  return 0;
@@ -24,20 +24,15 @@ export type DoctorResult = {
24
24
  * version agrees with the manifest's `basaltVersion`.
25
25
  * 3. `guard-scan`: `check-theme` would scan more than zero files, sharing `scannableFiles` so the
26
26
  * two cannot disagree. Both RESTORED in 1.30.0 after four minors gone with no MIGRATING row —
27
- * README § `doctor` carries what their absence cost (a no-op CI gate, a green guard scanning
28
- * nothing, and two basalt-WRITTEN docs describing output the CLI no longer produced).
27
+ * README § `doctor` carries what their absence cost.
29
28
  * 4. `oxlint-preset` ("rules in sync"): the consumer's `.oxlintrc.json` extends the shipped
30
- * preset AND that path resolves. `init` keeps an existing config, so the framework's whole
29
+ * preset AND that path resolves (warns when no `oxlint` bin does). `init` keeps an existing config, so the framework's whole
31
30
  * lint half can be silently off — one repo carried six real violations invisibly across five
32
31
  * minors this way.
33
32
  * 6. `ai-major-parity`: within THIS package.json, `dependencies`/`devDependencies`/
34
- * `peerDependencies` agree on the `ai` package's major. `basalt/ai-sdk-major` (the oxlint
35
- * plugin rule) already catches this per linted FILE against its nearest package.json; this
36
- * check exists for the shape a lint run cannot see — a package whose own manifest asks its
37
- * dependents for one major while it itself runs another. A detected skew is exempt-able via
38
- * `basalt.aiMajorSkewReason` (a non-empty reason string, not a bare `true`); missing or
39
- * invalid still hard-fails as if the key were absent. A declared reason when the majors
40
- * already agree warns that the exemption is stale.
33
+ * `peerDependencies` agree on the `ai` package's major — the shape `basalt/ai-sdk-major` (per
34
+ * linted FILE) cannot see. A skew is exempt-able via `basalt.aiMajorSkewReason` (a non-empty
35
+ * reason, not a bare `true`); a declared reason when the majors agree warns it is stale.
41
36
  *
42
37
  * Warning (non-fatal):
43
38
  * 5. `lefthook-preset` ("lefthook wired"): a pre-commit command runs `check-theme`, read from
@@ -1 +1 @@
1
- {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/cli/doctor.ts"],"names":[],"mappings":"AA6BA,MAAM,MAAM,YAAY,GAAG;IACzB,+CAA+C;IAC/C,YAAY,EAAE,MAAM,CAAA;IACpB,+CAA+C;IAC/C,QAAQ,EAAE,MAAM,CAAA;IAChB;;;;;OAKG;IACH,OAAO,EAAE,MAAM,CAAA;CAChB,CAAA;AA8DD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,wBAAgB,MAAM,CAAC,aAAa,GAAE,MAAsB,EAAE,KAAK,GAAE,MAAM,EAAO,GAAG,MAAM,CAsO1F"}
1
+ {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/cli/doctor.ts"],"names":[],"mappings":"AAgCA,MAAM,MAAM,YAAY,GAAG;IACzB,+CAA+C;IAC/C,YAAY,EAAE,MAAM,CAAA;IACpB,+CAA+C;IAC/C,QAAQ,EAAE,MAAM,CAAA;IAChB;;;;;OAKG;IACH,OAAO,EAAE,MAAM,CAAA;CAChB,CAAA;AA8DD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,wBAAgB,MAAM,CAAC,aAAa,GAAE,MAAsB,EAAE,KAAK,GAAE,MAAM,EAAO,GAAG,MAAM,CAqO1F"}
@@ -9,6 +9,9 @@ import {
9
9
  findBasaltInstall,
10
10
  findRepoRoot,
11
11
  inspectLefthookGate,
12
+ OXLINT_FILES,
13
+ OXLINT_NO_BIN,
14
+ oxlintBinResolves,
12
15
  parseJsonc,
13
16
  readBasaltConfig,
14
17
  readIfExists,
@@ -49,10 +52,7 @@ function resolveAiMajorSkewReason(cfg) {
49
52
  return { reason: null, presentButInvalid: true };
50
53
  }
51
54
  function doctor(invocationCwd = process.cwd(), flags = []) {
52
- if (conflictingProfileFlags(flags)) {
53
- console.error("basalt-ui doctor: --tokens-only and --framework are alternatives \u2014 pass one.");
54
- return 1;
55
- }
55
+ if (conflictingProfileFlags("doctor", flags)) return 1;
56
56
  const project = resolveProjectDir(invocationCwd);
57
57
  const cwd = project.dir;
58
58
  const cfg = readBasaltConfig(cwd);
@@ -136,7 +136,7 @@ basalt-ui doctor \u2014 ${cwd}
136
136
  );
137
137
  } else {
138
138
  const entry = basaltPresetEntry(parsed["extends"]);
139
- const correct = shippedAssetPath(install, cwd, "configs/oxlint.json");
139
+ const correct = shippedAssetPath(install, cwd, OXLINT_FILES.preset);
140
140
  if (entry === null) {
141
141
  fail(
142
142
  `.oxlintrc.json does NOT extend the shipped preset \u2014 every basalt/* design rule is off and oxlint reports green without them. Add "extends": ["${correct}"], or re-run \`basalt-ui init --merge-lint\` to splice it in.`
@@ -145,6 +145,8 @@ basalt-ui doctor \u2014 ${cwd}
145
145
  fail(
146
146
  `.oxlintrc.json extends "${entry}", which does not exist (${resolve(cwd, entry)}) \u2014 oxlint refuses to start on a missing extends target (\`NotFound\`), so nothing is linted at all. Repoint it at "${correct}", where basalt-ui actually resolves.`
147
147
  );
148
+ } else if (!oxlintBinResolves(cwd)) {
149
+ warn(`.oxlintrc.json extends the shipped preset (${entry}), but ${OXLINT_NO_BIN}`);
148
150
  } else {
149
151
  pass(`.oxlintrc.json extends the shipped basalt-ui oxlint preset (${entry})`);
150
152
  }
@@ -1 +1 @@
1
- {"version":3,"file":"guard-hook.d.ts","sourceRoot":"","sources":["../../src/cli/guard-hook.ts"],"names":[],"mappings":"AAaA;;;;;;GAMG;AACH,wBAAsB,SAAS,CAAC,GAAG,GAAE,MAAsB,GAAG,OAAO,CAAC,MAAM,CAAC,CAwF5E"}
1
+ {"version":3,"file":"guard-hook.d.ts","sourceRoot":"","sources":["../../src/cli/guard-hook.ts"],"names":[],"mappings":"AAaA;;;;;;GAMG;AACH,wBAAsB,SAAS,CAAC,GAAG,GAAE,MAAsB,GAAG,OAAO,CAAC,MAAM,CAAC,CA6D5E"}
@@ -1,8 +1,8 @@
1
1
  import { isAbsolute, relative, resolve } from "node:path";
2
- import { DEFAULT_GUARD_CONFIG } from "../guard/index.js";
3
2
  import { evaluateGuardHook } from "../guard/guard-hook.js";
4
- import { SKIP, declaredProfile, defaultExempt, readBasaltConfig, resolveExemptRules } from "./index.js";
3
+ import { SKIP, declaredProfile, defaultExempt, readBasaltConfig, resolveGuardConfig } from "./index.js";
5
4
  import { DEFAULT_ROOTS } from "./config.js";
5
+ const ALLOW = '{"hookSpecificOutput":{"hookEventName":"PreToolUse","permissionDecision":"allow"}}\n';
6
6
  async function guardHook(cwd = process.cwd()) {
7
7
  let raw;
8
8
  try {
@@ -14,44 +14,18 @@ async function guardHook(cwd = process.cwd()) {
14
14
  raw = Buffer.concat(chunks).toString("utf8");
15
15
  }
16
16
  } catch {
17
- process.stdout.write(
18
- '{"hookSpecificOutput":{"hookEventName":"PreToolUse","permissionDecision":"allow"}}\n'
19
- );
17
+ process.stdout.write(ALLOW);
20
18
  return 0;
21
19
  }
22
20
  let payload;
23
21
  try {
24
22
  payload = JSON.parse(raw);
25
23
  } catch {
26
- process.stdout.write(
27
- '{"hookSpecificOutput":{"hookEventName":"PreToolUse","permissionDecision":"allow"}}\n'
28
- );
24
+ process.stdout.write(ALLOW);
29
25
  return 0;
30
26
  }
31
27
  const cfg = readBasaltConfig(cwd);
32
- const guardCfg = {
33
- spacingSteps: cfg.spacingSteps ?? DEFAULT_GUARD_CONFIG.spacingSteps,
34
- rawRadius: cfg.rawRadius ?? DEFAULT_GUARD_CONFIG.rawRadius,
35
- forbiddenAccents: cfg.forbiddenAccents ?? DEFAULT_GUARD_CONFIG.forbiddenAccents,
36
- mantineShadeIndex: cfg.mantineShadeIndex ?? DEFAULT_GUARD_CONFIG.mantineShadeIndex,
37
- rawSurface: cfg.rawSurface ?? DEFAULT_GUARD_CONFIG.rawSurface,
38
- cardWithBorder: cfg.cardWithBorder ?? DEFAULT_GUARD_CONFIG.cardWithBorder,
39
- offSystemSurfaceVar: cfg.offSystemSurfaceVar ?? DEFAULT_GUARD_CONFIG.offSystemSurfaceVar,
40
- rawHtmlLayout: cfg.rawHtmlLayout ?? DEFAULT_GUARD_CONFIG.rawHtmlLayout,
41
- inlineSpacing: cfg.inlineSpacing ?? DEFAULT_GUARD_CONFIG.inlineSpacing,
42
- inlineDisplay: cfg.inlineDisplay ?? DEFAULT_GUARD_CONFIG.inlineDisplay,
43
- rawVisxAxis: cfg.rawVisxAxis ?? DEFAULT_GUARD_CONFIG.rawVisxAxis,
44
- rawMotionValue: cfg.rawMotionValue ?? DEFAULT_GUARD_CONFIG.rawMotionValue,
45
- chartMissingAriaLabel: cfg.chartMissingAriaLabel ?? DEFAULT_GUARD_CONFIG.chartMissingAriaLabel,
46
- rawFormControl: cfg.rawFormControl ?? DEFAULT_GUARD_CONFIG.rawFormControl,
47
- sub16InputFont: cfg.sub16InputFont ?? DEFAULT_GUARD_CONFIG.sub16InputFont,
48
- allowComment: "theme-allow",
49
- exemptRules: resolveExemptRules(cfg),
50
- severity: cfg.severity ?? DEFAULT_GUARD_CONFIG.severity,
51
- // Same detection check-theme uses: the hook must never block an edit over advice the app
52
- // cannot take ("use @mantine/core's Select") in a repo with no Mantine.
53
- ...declaredProfile(cfg, []) === "tokens-only" ? { profile: "tokens-only" } : {}
54
- };
28
+ const guardCfg = resolveGuardConfig(cfg, declaredProfile(cfg, []));
55
29
  const roots = cfg.roots ?? DEFAULT_ROOTS;
56
30
  const exempt = new Set(cfg.exempt ?? defaultExempt(cfg));
57
31
  const isInScope = (filePath) => {
@@ -76,9 +50,7 @@ async function guardHook(cwd = process.cwd()) {
76
50
  }) + "\n"
77
51
  );
78
52
  } else {
79
- process.stdout.write(
80
- '{"hookSpecificOutput":{"hookEventName":"PreToolUse","permissionDecision":"allow"}}\n'
81
- );
53
+ process.stdout.write(ALLOW);
82
54
  }
83
55
  return 0;
84
56
  }
@@ -7,12 +7,7 @@ import { init } from './init.js';
7
7
  import { sync } from './sync.js';
8
8
  import { fontsCss, normalizeColorFunctions, tokensCss } from './tokens-css.js';
9
9
  import type { BasaltConfig } from './config.js';
10
- /**
11
- * The guard-shaped `exemptRules` — paths only. The reason the object form carries never reaches
12
- * the guard: it is accountability for a human reading a diff and for `--audit-allows`, and giving
13
- * the scan a second shape to understand would only be a way for the two to disagree.
14
- */
15
- export declare function resolveExemptRules(cfg: BasaltConfig): GuardConfig['exemptRules'];
10
+ export declare function resolveGuardConfig(cfg: BasaltConfig, profile: DoctorProfile): GuardConfig;
16
11
  /**
17
12
  * Default scan exemption — a bare consumer's only palette source is its series module (the doctrine
18
13
  * directs every consumer to put raw hex series colors there). Shares `resolveSeriesModulePath` with
@@ -31,13 +26,12 @@ export declare function relativePosix(fromDir: string, toPath: string): string;
31
26
  /**
32
27
  * Where `basalt-ui` actually resolves from, seen from a consumer directory.
33
28
  *
34
- * Every toolchain seam basalt seeds (`.oxlintrc.json`'s `extends`, `lefthook.yml`'s `extends`, the
35
- * CI `run:` steps) used to hardcode `./node_modules/basalt-ui` at the repo ROOT. Under bun's
36
- * isolated linker a library package that declares basalt a peer + devDependency gets
37
- * `<pkg>/node_modules/basalt-ui` and NOTHING at the root, so all three silently failed to resolve
38
- * and `bunx` fetched a second, different copy from npm instead. Resolution therefore walks
39
- * OUTWARD from the consumer dir first, then across the workspace packages — and every caller
40
- * renders its paths from the answer rather than assuming the root.
29
+ * Every seam basalt seeds (oxlint/lefthook `extends`, the CI `run:` steps) used to hardcode
30
+ * `./node_modules/basalt-ui` at the repo ROOT; under bun's isolated linker a package that declares
31
+ * basalt a peer + devDependency gets it at `<pkg>/node_modules` and NOTHING at the root, so all three
32
+ * silently failed to resolve and `bunx` fetched a second, different copy. Resolution therefore walks
33
+ * OUTWARD from the consumer dir, then across the workspace packages — and every caller renders its
34
+ * paths from the answer rather than assuming the root.
41
35
  */
42
36
  export type BasaltInstall = {
43
37
  /** Absolute path of the resolved `node_modules/basalt-ui` directory, or null when unresolvable. */
@@ -81,23 +75,9 @@ type ProjectResolution = {
81
75
  */
82
76
  export declare function resolveProjectDir(cwd: string): ProjectResolution;
83
77
  /**
84
- * Which shape of consumer a project-scoped command is looking at.
85
- *
86
- * A tokens-only consumer took the `--vx-*` layer and nothing else. Every guard kind whose remedy is
87
- * a Mantine component or the React theme factory is meaningless there — telling a Mantine-free app
88
- * to swap its `<select>` for `@mantine/core`'s `Select` is advice it must not take.
89
- *
90
- * DECLARED, never inferred, when the answer SILENCES something. The two callers want opposite
91
- * failure directions and so do not share a default:
92
- *
93
- * - `check-theme` (`declaredProfile`) turns 17 kinds OFF, so it moves on an explicit signal only —
94
- * `--tokens-only`, or `"basalt": { "profile": "tokens-only" }`. Inferring it from the ABSENCE of
95
- * `@mantine/core` would silence the Mantine half of the guard on any repo that keeps its Mantine
96
- * dependency in a workspace package rather than the one holding the basalt config, which is
97
- * precisely this round's "reports green while enforcing nothing" failure with the guard's own
98
- * hand on the switch.
99
- * - `doctor` no longer infers a profile at all (workspace-wide Mantine detection was deleted along
100
- * with the rest of the multi-repo discovery); it reads the same declaration `check-theme` does.
78
+ * Which shape of consumer a project-scoped command is looking at — DECLARED, never inferred
79
+ * (`--tokens-only`, or `"basalt": { "profile": "tokens-only" }`), because the answer switches the
80
+ * Mantine-remedy guard kinds off. Why that direction: package CLAUDE.md § CLI.
101
81
  */
102
82
  export declare function declaredProfile(cfg: BasaltConfig, flags: readonly string[]): DoctorProfile;
103
83
  /**
@@ -106,7 +86,9 @@ export declare function declaredProfile(cfg: BasaltConfig, flags: readonly strin
106
86
  * vs `--selector-attribute`. Silently preferring one meant a CI step that accumulated both flags
107
87
  * enforced whichever the code happened to test first.
108
88
  */
109
- export declare function conflictingProfileFlags(flags: readonly string[]): boolean;
89
+ export declare function conflictingProfileFlags(command: string, flags: readonly string[]): boolean;
90
+ /** Says so when `BASALT_CWD` moved the command off the directory it was invoked in. */
91
+ export declare function noteRelocation(command: string, project: ProjectResolution): void;
110
92
  /**
111
93
  * The relative paths `check-theme` would actually scan for a given config — the ONE place the walk
112
94
  * + `SKIP` + `exempt` filtering lives, so `doctor`'s "the guard sees zero files" check can never
@@ -114,19 +96,11 @@ export declare function conflictingProfileFlags(flags: readonly string[]): boole
114
96
  */
115
97
  export declare function scannableFiles(cwd: string, cfg: BasaltConfig): string[];
116
98
  /**
117
- * The waiver closer for a file, gated on the profile.
118
- *
119
- * `guardWaiverHint` keys off the file class, and for a `.webmanifest` it leads with
120
- * `basaltAppPlugin` — right for a Mantine app, since a hex in a manifest can never be *right* and
121
- * the plugin removes the hand-copy entirely. A `profile: tokens-only` consumer has definitionally
122
- * opted out of that layer: rollhook's Astro site has no `index.html` for the plugin to transform,
123
- * imports no basalt JavaScript at all, and owns maskable icons the plugin does not emit. Leading
124
- * with the plugin there is advice the consumer cannot take, in the one release that finally gave
125
- * that file class a remedy.
126
- *
127
- * So under tokens-only a manifest is treated as what it is to that consumer — plain JSON, with the
128
- * member as the whole answer — plus one sentence saying which remedy is being withheld and why.
129
- * The remedy text still comes from the guard's own registry; only the class mapping is decided here.
99
+ * The waiver closer for a file, gated on the profile. `guardWaiverHint` leads a `.webmanifest` with
100
+ * `basaltAppPlugin` — right for a Mantine app, advice a `profile: tokens-only` consumer cannot take
101
+ * (rollhook's Astro site has no `index.html` for the plugin and owns its maskable icons). There the
102
+ * manifest is plain JSON — the member is the whole answer, plus one sentence on the withheld remedy.
103
+ * The remedy text still comes from the guard's registry; only the class mapping is decided here.
130
104
  */
131
105
  export declare function waiverHintFor(relPath: string, profile: DoctorProfile): string;
132
106
  /**
@@ -267,6 +241,9 @@ export declare const ROOT_PLACEMENT: PlacementFlags;
267
241
  * consumer not using git falls back to today's behaviour exactly.
268
242
  */
269
243
  export declare function findRepoRoot(dir: string): string;
244
+ /** The AST lane's other half: an `oxlint` bin in `node_modules/.bin`, `dir` up to the repo root. */
245
+ export declare const OXLINT_NO_BIN = "oxlint config found but no oxlint binary \u2014 the AST lane never runs; add oxlint as a devDependency";
246
+ export declare function oxlintBinResolves(dir: string): boolean;
270
247
  /** Resolve a run's placement flags once, from the consumer cwd. */
271
248
  export declare function resolvePlacement(cwd: string): PlacementFlags;
272
249
  /** The full managed-file manifest. Stable, declarative — the single source of truth for init/sync. */
@@ -374,45 +351,25 @@ type Classification = 'unchanged' | 'drifted' | 'missing' | 'current';
374
351
  export declare function normalizeForLedger(text: string): string;
375
352
  /**
376
353
  * Write a managed unit to disk (whole file, or marker-spliced region). Returns the unit's hash —
377
- * `sha256(normalizeForLedger(desired))`, NOT the raw bytes.
378
- *
379
- * This is the ledger: the manifest already records "what basalt shipped last sync", one entry per
380
- * dest — a stored NORMALIZED hash makes that same single entry survive both a downstream formatter
381
- * (the consumer's own lefthook oxfmt reformatting the written file/block after this function has
382
- * already returned) and a version bump that changed the template's own words since the recorded
383
- * entry — the argo cross-version case: current is v1.0.0's block, post-oxfmt; desired is v1.0.1's
384
- * (different words, e.g. the CLI bin rename). Recording the raw hash can never reconcile that;
385
- * recording the normalized hash lets `classify()` normalize `state.current` the same way and
386
- * compare directly against it, no separate historical-hash storage required.
354
+ * `sha256(normalizeForLedger(desired))`, NOT the raw bytes: the normalized hash is what lets one
355
+ * manifest entry survive a downstream formatter and a cross-version template change (`classify`'s
356
+ * path 2 is the reader).
387
357
  */
388
358
  export declare function writeUnit(file: ManagedFile, cwd: string, desired: string): string;
389
359
  /**
390
360
  * Classify a managed file against the manifest for a sync run.
391
361
  * - missing : the managed unit is absent on disk → recreate.
392
362
  * - current : on disk == desired → nothing to do.
393
- * - unchanged: on disk matches a KNOWN-SHIPPED rendering of this template, checked three ways (any
394
- * one is sufficient) — but != desired as-is → safe overwrite:
395
- * 1. `sha256(current) === manifestHash` — legacy raw-hash path. An existing consumer
396
- * manifest (written before this fix, or by a still-running older CLI) holds the RAW
397
- * hash of what was written, not the normalized one; keep matching it directly so an
398
- * upgrade never mass-classifies a pristine tree as drifted.
399
- * Residual transitional gap: a manifest written by a pre-1.0.2 CLI holds a raw hash
400
- * of the exact old bytes, so if the on-disk block was ALSO reformatted by a
401
- * downstream formatter AND the template body changed cross-version in the same
402
- * upgrade, none of the three paths above match and it classifies `drifted`, needing
403
- * one `--force`. Once any sync since writes a normalized entry (path 2/3 or a
404
- * healed write), the gap is closed for good for that file. Deliberately not solved
405
- * by keeping a historical per-version ledger — that's a real but bounded tradeoff.
406
- * 2. `sha256(normalizeForLedger(current)) === manifestHash` — the ledger proper.
407
- * `manifestHash` normally holds `sha256(normalizeForLedger(<bytes written at the
408
- * last sync>))` (see `writeUnit`); normalizing `current` the same way and comparing
409
- * survives a downstream formatter reformatting the file AND a version bump that
410
- * changed the template's own words between the sync that wrote this manifest entry
411
- * and the version being synced now — the argo cross-version false positive.
363
+ * - unchanged: on disk matches a KNOWN-SHIPPED rendering of this template (any one is sufficient) —
364
+ * but != desired as-is → safe overwrite:
365
+ * 1. `sha256(current) === manifestHash` — legacy raw-hash path (manifests written before
366
+ * the ledger normalized hold the RAW hash; keep matching so an upgrade never
367
+ * mass-classifies a pristine tree as drifted).
368
+ * 2. `sha256(normalizeForLedger(current)) === manifestHash` — the ledger proper (see
369
+ * `writeUnit`): survives a downstream formatter AND a version bump that changed the
370
+ * template's own words since the manifest entry was written (the argo false positive).
412
371
  * 3. `normalizeForLedger(current) === normalizeForLedger(desired)` — same-version
413
- * fallback for when there is no manifest entry to compare against at all (e.g. it
414
- * was dropped), but the on-disk bytes still match today's rendering modulo
415
- * formatting noise.
372
+ * fallback when no manifest entry exists at all.
416
373
  * - drifted : on disk matches NONE of the above (a real, word-level local edit) → skip unless
417
374
  * --force.
418
375
  */
@@ -471,14 +428,19 @@ export declare function rootsNotices(state: RootsState): {
471
428
  export declare function parseJsonc(text: string): Record<string, unknown> | null;
472
429
  /** Outcome of splicing the shipped preset into an `.oxlintrc.json` the consumer already had. */
473
430
  export type MergeLintResult = 'added' | 'already' | 'absent' | 'unreadable' | 'has-comments';
431
+ /** The shipped oxlint files, package-relative — the one spelling every reader of them uses. */
432
+ export declare const OXLINT_FILES: {
433
+ readonly preset: "configs/oxlint.json";
434
+ readonly guards: "configs/oxlint-basalt.json";
435
+ readonly plugin: "configs/oxlint-plugin.js";
436
+ };
437
+ /** Whether an `extends`/`jsPlugins` entry names that shipped basalt-ui file. */
438
+ export declare const namesShipped: (entry: unknown, file: string) => entry is string;
474
439
  /**
475
- * The `extends` entry pointing at the shipped oxlint preset, or null when none does.
476
- *
477
- * Returns the ENTRY rather than a boolean because the string alone proves nothing: a consumer that
478
- * upgraded (or moved to an isolated linker) keeps a perfectly well-shaped
479
- * `./node_modules/basalt-ui/configs/oxlint.json` that resolves to nothing, and oxlint then refuses
480
- * to start with `NotFound` while a check built to prove the framework is ON reports green. The
481
- * caller resolves this against the config's own directory — see `extendsSeam`.
440
+ * The `extends` entry naming a shipped preset (full or guards-only), or null. The ENTRY, not a
441
+ * boolean: a well-shaped `./node_modules/basalt-ui/configs/oxlint.json` can resolve to nothing
442
+ * (an upgrade, an isolated linker), and oxlint then dies `NotFound` while a check built to prove the
443
+ * lane is ON reports green — callers resolve it against the config's own directory.
482
444
  */
483
445
  export declare function basaltPresetEntry(entries: unknown): string | null;
484
446
  export type LefthookGate =
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}