@yahoo/uds-create-config 4.36.1 → 4.37.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.
@@ -42,6 +42,7 @@ import { renderTokenRefsMigration } from "../migrations/20260923160425_render_to
42
42
  import { globalStyleDerivedColorsMigration } from "../migrations/20260923163604_global_style_derived_colors.js";
43
43
  import { slotCodeFormsMigration } from "../migrations/20260924044539_slot_code_forms.js";
44
44
  import { canvasRoleSlotMigration } from "../migrations/20260925143319_canvas_role_slot.js";
45
+ import { linkOnLinkedMigration } from "../migrations/20260928180801_link_on_linked.js";
45
46
  const System = defineConfig({
46
47
  name: WEB_CONFIG_NAME,
47
48
  description: "A design system: the values, primitives and compositions an app is built from. A ref is written `{ \"__ref\": \"<kind>:<path>\" }`, so a token is `{ \"__ref\": \"token:<group>/<name>\" }` and a token group is `{ \"__ref\": \"token:<group>\" }`. Build it in this order. Tokens first, in groups by purpose (colors, spacing, radii, type sizes), since everything else names them. Then style properties, each with `values` holding one ref to the token group whose members it accepts (`{ \"__ref\": \"token:color\" }`), so a prop takes token names rather than raw CSS; add a string keyword only for a value no token holds. A style rule's bag holds a prop's values (`\"padding\": \"4\"`, `\"bg\": \"brand\"`), never raw CSS. Then a few primitive components, one layer each, whose props are style properties (a box for layout and surface, a text for type, a pressable for interaction). Then every other component composed from those primitives: its layers name a primitive or an element, its anatomy places them (a node renders a layer, a tag or `Slot` where a slot prop's content lands; `children` is the edge list; `visible` is `{ \"$state\": \"<prop>\" }`; a prop shown in a nested layer is a `forward` route, and `$state` never sits in a node's props), and its style rules set style-property values per layer, keyed by prop values when a variant changes them. Modes (a dark mode is `{ type: \"selector\", value: \".dark\" }`) change token values through a token's `overrides`, so a component never restyles for a mode; modifiers (hover, focus, disabled) name a state, and a style rule applies under one as a `_hover` block inside a layer bag. Composites bundle style values that recur. Last, register canvas roles: the canvas draws with them, one entity per tool (`frame` for the layout primitive, `text` for the text primitive, `image`) whose entries name the components that tool inserts, and a tool whose role is unregistered is disabled. Give each component a `preview` entry under `*` so it shows content, and never write a CSS property name where a style-property name belongs.",
@@ -95,5 +96,6 @@ if (!registeredSchemaMigrations().has(20260923160425)) registerSchemaMigrations(
95
96
  if (!registeredSchemaMigrations().has(20260923163604)) registerSchemaMigrations(globalStyleDerivedColorsMigration);
96
97
  if (!registeredSchemaMigrations().has(20260924044539)) registerSchemaMigrations(slotCodeFormsMigration);
97
98
  if (!registeredSchemaMigrations().has(20260925143319)) registerSchemaMigrations(canvasRoleSlotMigration);
99
+ if (!registeredSchemaMigrations().has(20260928180801)) registerSchemaMigrations(linkOnLinkedMigration);
98
100
  //#endregion
99
101
  export { System };
@@ -107,12 +107,20 @@ declare const LinkedSystemDefinition: EntityClass<z.ZodObject<{
107
107
  readonly input: z.ZodObject<{
108
108
  path: z.ZodType<string, string | undefined, z.core.$ZodTypeInternals<string, string | undefined>>;
109
109
  data: z.ZodUnion<readonly [z.ZodLiteral<"*">, z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodLiteral<"*">, z.ZodArray<z.ZodString>]>>]>;
110
+ onLinked: z.ZodOptional<z.ZodEnum<{
111
+ keep: "keep";
112
+ take: "take";
113
+ }>>;
110
114
  }, z.core.$strip>;
111
115
  };
112
116
  readonly 'link-plan': {
113
117
  readonly input: z.ZodObject<{
114
118
  path: z.ZodType<string, string | undefined, z.core.$ZodTypeInternals<string, string | undefined>>;
115
119
  data: z.ZodUnion<readonly [z.ZodLiteral<"*">, z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodLiteral<"*">, z.ZodArray<z.ZodString>]>>]>;
120
+ onLinked: z.ZodOptional<z.ZodEnum<{
121
+ keep: "keep";
122
+ take: "take";
123
+ }>>;
116
124
  }, z.core.$strip>;
117
125
  };
118
126
  readonly unlink: {
@@ -146,7 +146,10 @@ const linkInput = z.object({
146
146
  path: pathInput("linked-system"),
147
147
  /** What to draw, keyed by accessor the way the pin's `link` is, or `'*'` for everything the source
148
148
  * offers. A path that names a folder in the source covers its members. */
149
- data: z.union([z.literal("*"), z.record(z.string(), copyPaths)])
149
+ data: z.union([z.literal("*"), z.record(z.string(), copyPaths)]),
150
+ /** What to do at a path another linked system provides: `'take'` makes it follow this source,
151
+ * `'keep'` leaves it where it comes from. Required when there is one; `link-plan` lists them. */
152
+ onLinked: z.enum(["keep", "take"]).optional()
150
153
  });
151
154
  const unlinkInput = z.object({
152
155
  path: pathInput("linked-system"),
@@ -173,6 +176,14 @@ function copyInputOf(input) {
173
176
  ...input.onConflict === void 0 ? {} : { onConflict: input.onConflict }
174
177
  };
175
178
  }
179
+ /** The parsed `link` input as the plan takes it. */
180
+ function linkPlanInputOf(input) {
181
+ return {
182
+ path: String(input.path),
183
+ data: input.data,
184
+ ...input.onLinked === void 0 ? {} : { onLinked: input.onLinked }
185
+ };
186
+ }
176
187
  /** A `link` or `unlink` example: one entity the source offers, under the accessor this config files it by. */
177
188
  function linkExample({ config, path }) {
178
189
  const target = exampleBorrowable(config, path);
@@ -243,7 +254,8 @@ const LinkedSystem = defineEntity({
243
254
  * Draw entities from a linked system: the pin's `link` declaration grows to cover them and the
244
255
  * build mints a pointer row per entity, in this one op. A row of this config's own at a covered
245
256
  * path is deleted so theirs shows through; a row held through another pin becomes an extension
246
- * through this one. `link-plan` says what that replaces before anything is written.
257
+ * through this one when `onLinked` is `'take'`. `link-plan` says what that replaces before anything
258
+ * is written.
247
259
  */
248
260
  link: {
249
261
  input: linkInput,
@@ -255,13 +267,14 @@ const LinkedSystem = defineEntity({
255
267
  title: (entity) => `Link something from ${entity}`,
256
268
  example: linkExample,
257
269
  handler: (input, config) => {
258
- const { patches } = planLink({
270
+ const { linked, patches } = planLink({
259
271
  config,
260
- input: {
261
- path: String(input.path),
262
- data: input.data
263
- }
272
+ input: linkPlanInputOf(input)
264
273
  });
274
+ if (linked.length > 0 && input.onLinked === void 0) {
275
+ const named = linked.map((at) => `${at.path} (from ${at.from})`);
276
+ rejectData(`Linking through "${String(input.path)}" reaches what another linked system provides: ${named.join(", ")}. Say whether to take them (\`onLinked: 'take'\`) or keep them where they come from (\`onLinked: 'keep'\`).`, ["onLinked"]);
277
+ }
265
278
  if (patches.length === 0) return config;
266
279
  return config.applyAll(patches).withDerivedRows();
267
280
  }
@@ -270,17 +283,14 @@ const LinkedSystem = defineEntity({
270
283
  input: linkInput,
271
284
  readOnly: true,
272
285
  label: "Plan a link",
273
- description: "What `link` with the same input replaces — rows of yours deleted so the source shows through, rows held through another pin turned into extensions, and members left alone because they are already here from the same origin. Writes nothing.",
286
+ description: "What `link` with the same input replaces — rows of yours deleted so the source shows through, every path another linked system provides (`linked`, turned into extensions when `onLinked` says take), and members left alone because they are already here from the same origin. Writes nothing.",
274
287
  scope: "item",
275
288
  title: (entity) => `Plan a link from ${entity}`,
276
289
  example: linkExample,
277
290
  handler: (input, config) => {
278
291
  const { patches: _patches, ...plan } = planLink({
279
292
  config,
280
- input: {
281
- path: String(input.path),
282
- data: input.data
283
- }
293
+ input: linkPlanInputOf(input)
284
294
  });
285
295
  return plan;
286
296
  }
@@ -413,8 +413,7 @@ function planCopy({ config, input }) {
413
413
  const removal = /* @__PURE__ */ new Map();
414
414
  for (const { kind, at, named } of taking) {
415
415
  if (!named) continue;
416
- const stored = config.storedBody(kind, at);
417
- if (!stored || !isMintedRow(stored)) continue;
416
+ if (config.storedBody(kind, at) === void 0) continue;
418
417
  if (config.resolve(kind, at)?.borrowedFrom !== slug) continue;
419
418
  const accessor = config.accessorOf(kind) ?? kind;
420
419
  if (!covers({
@@ -6,10 +6,21 @@ import { Config, Patch, TreeNode } from "../../framework/Config.js";
6
6
  /** What one op names, keyed by accessor the way the pin's `link` is: every entry of the kind, or the
7
7
  * source's paths, where a folder names its members. `'*'` alone is every kind the source offers. */
8
8
  type LinkPaths = '*' | Readonly<Record<string, '*' | readonly string[]>>;
9
+ /** What a link does at a path held through another linked system: `'take'` makes the row follow this
10
+ * source, `'keep'` leaves it with the system it comes from. */
11
+ type OnLinked = 'keep' | 'take';
9
12
  interface LinkPlanInput {
10
13
  /** The pin's slug. */
11
14
  readonly path: string;
12
15
  readonly data: LinkPaths;
16
+ /** Planned as `'take'` when omitted; the `link` op refuses without it while `linked` is not empty. */
17
+ readonly onLinked?: OnLinked;
18
+ }
19
+ /** A path the link reaches that another linked system provides, or declares under a row of this
20
+ * config's own. */
21
+ interface LinkedElsewhere extends EntityAddress {
22
+ /** The slug of the pin it comes through. */
23
+ readonly from: string;
13
24
  }
14
25
  /** One row a link mints. `named` when a path the call named covers it; otherwise it comes along
15
26
  * because something linked points at it. */
@@ -25,6 +36,8 @@ interface LinkPlan {
25
36
  readonly replaces: number;
26
37
  /** Rows of this config's own deleted so the source's row shows through at the path. */
27
38
  readonly addresses: readonly EntityAddress[];
39
+ /** Every path the link reaches that another linked system provides, whatever `onLinked` says. */
40
+ readonly linked: readonly LinkedElsewhere[];
28
41
  /** Rows held through another pin, turned into extensions through this one. */
29
42
  readonly extended: readonly EntityAddress[];
30
43
  /** Members already here from the source's own origin, left alone and kept out of the declaration. */
@@ -85,6 +98,11 @@ interface SourceRowState {
85
98
  readonly linked: boolean;
86
99
  /** Rows of this config's own a `link` would write over. */
87
100
  readonly replaces: number;
101
+ /** Members another linked system provides or also declares, which a `link` asks about through
102
+ * `onLinked`. */
103
+ readonly linkedElsewhere: number;
104
+ /** The slugs of the pins those come through. */
105
+ readonly linkedFrom: readonly string[];
88
106
  /** Members already here from the source's own origin, through another pin. */
89
107
  readonly shared: number;
90
108
  /** That origin's name, when `shared` is above zero. */
@@ -97,10 +115,11 @@ interface SourceRowState {
97
115
  * The declaration goes first. A row of this config's own that other rows point at can only be deleted
98
116
  * once the declaration covers the path, since the config refuses a delete that leaves a referrer
99
117
  * dangling. A row held through another pin is not deleted — that pin's declaration would mint it
100
- * again, and declaring one path on two pins is a collision nothing derives — so it becomes an
101
- * extension through this pin: a row of this config's own that shadows the other pin's and follows this
102
- * source. A member already here from the source's own origin is left alone and kept out of the
103
- * declaration, so a folder that holds one is declared by its other members.
118
+ * again, and declaring one path on two pins is a collision nothing derives. With `onLinked: 'take'` it
119
+ * becomes an extension through this pin: a row of this config's own that shadows the other pin's and
120
+ * follows this source. With `'keep'` it stays with the other pin and out of the declaration. A member
121
+ * already here from the source's own origin is left alone and kept out of the declaration, so a
122
+ * folder that holds one is declared by its other members.
104
123
  */
105
124
  declare function planLink({
106
125
  config,
@@ -159,4 +178,4 @@ declare function sourceRowStates({
159
178
  readonly slug: string;
160
179
  }): SourceRowState[];
161
180
  //#endregion
162
- export { BreakOutcome, BreakPlan, BreakPlanInput, BreakPlanRow, BreakReach, LinkArrival, LinkPaths, LinkPlan, LinkPlanInput, SourceRowState, UnlinkPlan, UnlinkPlanInput, planBreak, planLink, planUnlink, sourceRowStates };
181
+ export { BreakOutcome, BreakPlan, BreakPlanInput, BreakPlanRow, BreakReach, LinkArrival, LinkPaths, LinkPlan, LinkPlanInput, LinkedElsewhere, OnLinked, SourceRowState, UnlinkPlan, UnlinkPlanInput, planBreak, planLink, planUnlink, sourceRowStates };
@@ -42,6 +42,20 @@ function sharedWithOrigin({ config, source, slug, kind, path }) {
42
42
  if (!theirs || !mine || theirs.key !== mine.key) return void 0;
43
43
  return theirs.pin.displayName ?? theirs.key;
44
44
  }
45
+ /** Another pin whose declaration covers the path and whose source has it: the pin the path would
46
+ * derive from if this config held nothing there. */
47
+ function declaredElsewhere({ config, slug, kind, path }) {
48
+ const accessor = config.accessorOf(kind) ?? kind;
49
+ for (const pin of config.list(PIN_KIND)) {
50
+ if (pin.path === slug) continue;
51
+ if (!covers({
52
+ declared: declarationOf(config, pin.path),
53
+ accessor,
54
+ path
55
+ })) continue;
56
+ if (config.sourceFor(pin.path)?.resolve(kind, path)) return pin.path;
57
+ }
58
+ }
45
59
  /**
46
60
  * Link paths of a source: the declaration that mints them, then the edits that let them show through
47
61
  * where this config already holds something.
@@ -49,10 +63,11 @@ function sharedWithOrigin({ config, source, slug, kind, path }) {
49
63
  * The declaration goes first. A row of this config's own that other rows point at can only be deleted
50
64
  * once the declaration covers the path, since the config refuses a delete that leaves a referrer
51
65
  * dangling. A row held through another pin is not deleted — that pin's declaration would mint it
52
- * again, and declaring one path on two pins is a collision nothing derives — so it becomes an
53
- * extension through this pin: a row of this config's own that shadows the other pin's and follows this
54
- * source. A member already here from the source's own origin is left alone and kept out of the
55
- * declaration, so a folder that holds one is declared by its other members.
66
+ * again, and declaring one path on two pins is a collision nothing derives. With `onLinked: 'take'` it
67
+ * becomes an extension through this pin: a row of this config's own that shadows the other pin's and
68
+ * follows this source. With `'keep'` it stays with the other pin and out of the declaration. A member
69
+ * already here from the source's own origin is left alone and kept out of the declaration, so a
70
+ * folder that holds one is declared by its other members.
56
71
  */
57
72
  function planLink({ config, input }) {
58
73
  const { path: slug } = input;
@@ -66,12 +81,13 @@ function planLink({ config, input }) {
66
81
  verb: "link"
67
82
  });
68
83
  const addresses = [];
84
+ const linked = [];
69
85
  const extended = [];
70
86
  const shared = [];
71
87
  const shadows = [];
72
88
  /** Per accessor, what the declaration gains: the kind whole, or paths. */
73
89
  const gains = /* @__PURE__ */ new Map();
74
- let sharedAnywhere = false;
90
+ let leftAnywhere = false;
75
91
  const shadow = (kind, path) => {
76
92
  const held = config.resolve(kind, path);
77
93
  if (!held || held.borrowedFrom === slug) return true;
@@ -86,10 +102,16 @@ function planLink({ config, input }) {
86
102
  kind,
87
103
  path
88
104
  });
89
- sharedAnywhere = true;
105
+ leftAnywhere = true;
90
106
  return false;
91
107
  }
92
- if (held.borrowedFrom === void 0) {
108
+ const from = held.borrowedFrom ?? declaredElsewhere({
109
+ config,
110
+ slug,
111
+ kind,
112
+ path
113
+ });
114
+ if (from === void 0) {
93
115
  addresses.push({
94
116
  kind,
95
117
  path
@@ -101,6 +123,20 @@ function planLink({ config, input }) {
101
123
  });
102
124
  return true;
103
125
  }
126
+ linked.push({
127
+ kind,
128
+ path,
129
+ from
130
+ });
131
+ if (input.onLinked === "keep") {
132
+ if (held.borrowedFrom === void 0) shadows.push({
133
+ kind,
134
+ operation: "delete",
135
+ path
136
+ });
137
+ leftAnywhere = true;
138
+ return false;
139
+ }
104
140
  const stored = config.storedBody(kind, path);
105
141
  const minted = stored !== void 0 && isMintedRow(stored);
106
142
  extended.push({
@@ -145,7 +181,7 @@ function planLink({ config, input }) {
145
181
  }
146
182
  const declares = [];
147
183
  let declared = current;
148
- if (current !== "*") if (input.data === "*" && !sharedAnywhere) {
184
+ if (current !== "*") if (input.data === "*" && !leftAnywhere) {
149
185
  declared = "*";
150
186
  declares.push({
151
187
  kind: PIN_KIND,
@@ -192,6 +228,7 @@ function planLink({ config, input }) {
192
228
  }),
193
229
  replaces: addresses.length,
194
230
  addresses,
231
+ linked,
195
232
  extended,
196
233
  shared,
197
234
  patches
@@ -485,7 +522,7 @@ function planBreak({ config, input }) {
485
522
  const pointing = /* @__PURE__ */ new Map();
486
523
  /** Folders drawn through the pin by a pointer of this config's own, released once their members are copied. */
487
524
  const pointedFolders = [];
488
- const reach = ({ kind, path, reach }) => {
525
+ const reach = ({ kind, path, reach: how }) => {
489
526
  const held = config.resolve(kind, path);
490
527
  if (held?.borrowedFrom === slug) {
491
528
  copying.path(kind, path);
@@ -495,7 +532,7 @@ function planBreak({ config, input }) {
495
532
  folder: false,
496
533
  refs: [ref(kind, path, slug).__ref],
497
534
  outcome: "copied",
498
- reach
535
+ reach: how
499
536
  });
500
537
  return;
501
538
  }
@@ -516,9 +553,15 @@ function planBreak({ config, input }) {
516
553
  folder: true,
517
554
  refs: [ref(kind, path, slug).__ref],
518
555
  outcome: "copied",
519
- reach
556
+ reach: how
520
557
  });
558
+ return;
521
559
  }
560
+ for (const member of config.members(kind, path)) if (member.borrowedFrom === slug) reach({
561
+ kind,
562
+ path: member.path,
563
+ reach: "taken"
564
+ });
522
565
  return;
523
566
  }
524
567
  const refs = drawnThroughPin({
@@ -534,7 +577,7 @@ function planBreak({ config, input }) {
534
577
  }
535
578
  pointing.set(`${kind}:${path}`, {
536
579
  refs,
537
- reach
580
+ reach: how
538
581
  });
539
582
  };
540
583
  if (scoped) for (const { kind, accessor, paths } of wantedKinds({
@@ -730,6 +773,8 @@ function sourceRowStates({ config, slug }) {
730
773
  if (members.length === 0) continue;
731
774
  let linked = 0;
732
775
  let local = 0;
776
+ let elsewhere = 0;
777
+ const linkedFrom = /* @__PURE__ */ new Set();
733
778
  let shared = 0;
734
779
  let sharedOrigin;
735
780
  for (const leaf of members) {
@@ -739,7 +784,6 @@ function sourceRowStates({ config, slug }) {
739
784
  linked += 1;
740
785
  continue;
741
786
  }
742
- local += 1;
743
787
  const origin = sharedWithOrigin({
744
788
  config: derived,
745
789
  source,
@@ -747,10 +791,19 @@ function sourceRowStates({ config, slug }) {
747
791
  kind,
748
792
  path: leaf.path
749
793
  });
794
+ const from = origin === void 0 ? held.borrowedFrom ?? declaredElsewhere({
795
+ config: derived,
796
+ slug,
797
+ kind,
798
+ path: leaf.path
799
+ }) : void 0;
750
800
  if (origin !== void 0) {
751
801
  shared += 1;
752
802
  sharedOrigin ??= origin;
753
- }
803
+ } else if (from !== void 0) {
804
+ elsewhere += 1;
805
+ linkedFrom.add(from);
806
+ } else local += 1;
754
807
  }
755
808
  rows.push({
756
809
  kind,
@@ -760,7 +813,9 @@ function sourceRowStates({ config, slug }) {
760
813
  members: members.length,
761
814
  held: linked,
762
815
  linked: linked === members.length,
763
- replaces: local - shared,
816
+ replaces: local,
817
+ linkedElsewhere: elsewhere,
818
+ linkedFrom: [...linkedFrom],
764
819
  shared,
765
820
  ...sharedOrigin === void 0 ? {} : { sharedOrigin }
766
821
  });
@@ -72,7 +72,7 @@ interface RecordedSource {
72
72
  * The dense-counter `2` a short-lived scheme stamped before the chain existed reads as the mint
73
73
  * that replaced it (see `detectedWireVersion`).
74
74
  */
75
- declare const SERIALIZED_CONFIG_VERSION = 20260925143319;
75
+ declare const SERIALIZED_CONFIG_VERSION = 20260928180801;
76
76
  interface SerializedConfig {
77
77
  /** See {@link SERIALIZED_CONFIG_VERSION}. Always written; a stored artifact may lack it. */
78
78
  readonly version: number;
@@ -5135,7 +5135,7 @@ var Config = class Config {
5135
5135
  * links from the provided sources. A declared `linkedKind` with no provided source throws. */
5136
5136
  hydrateFrom(stored, options) {
5137
5137
  const claimed = schemaVersionOf(stored);
5138
- if (claimed > 20260925143319) throw new SchemaVersionTooNew(claimed);
5138
+ if (claimed > 20260928180801) throw new SchemaVersionTooNew(claimed);
5139
5139
  const wire = upgradeSerializedConfig(stored);
5140
5140
  if (!Array.isArray(wire.ownedKinds) || typeof wire.items !== "object" || wire.items === null) throw new ConfigFormatError(`Config "${stored.name ?? "system-config"}" cannot be hydrated: this is not a serialized config-v2 config (no "ownedKinds"/"items"). A pre-cutover build artifact converts through the registered cutover migration — import the config type's module (e.g. \`configs/system\`) before hydrating, or port the repo once with \`uds migrate\`.`);
5141
5141
  const leftover = wire.options;
@@ -15,7 +15,7 @@ import { Patch, SerializedConfig } from "./Config.js";
15
15
  * sets this constant to its own older timestamp; the merge ref then carries a registered migration
16
16
  * newer than the constant, and the assertion fails until the author re-mints.
17
17
  */
18
- declare const CURRENT_SCHEMA_VERSION = 20260925143319;
18
+ declare const CURRENT_SCHEMA_VERSION = 20260928180801;
19
19
  /** What the walkers need to see of an envelope — loose on purpose, so a typed `SerializedConfig`
20
20
  * and a raw old-shape record both flow in without casts. */
21
21
  interface VersionStamped {
@@ -13,7 +13,7 @@ import { ConfigFormatError } from "./rejection.js";
13
13
  * sets this constant to its own older timestamp; the merge ref then carries a registered migration
14
14
  * newer than the constant, and the assertion fails until the author re-mints.
15
15
  */
16
- const CURRENT_SCHEMA_VERSION = 20260925143319;
16
+ const CURRENT_SCHEMA_VERSION = 20260928180801;
17
17
  /** The mint that moved `options` into the `settings` kind — restated here, rather than imported
18
18
  * from the migration that owns it, because that migration imports this module. */
19
19
  const SETTINGS_AS_KIND_VERSION = 20260908171448;
@@ -45,7 +45,7 @@ function registerSchemaMigrations(...migrations) {
45
45
  for (const migration of migrations) {
46
46
  if (migration.version !== 1 && !isMintTimestamp(migration.version)) throw new Error(`Schema migration version ${migration.version} is not a mint timestamp — mint one with \`date +%Y%m%d%H%M%S\`, like a supabase migration.`);
47
47
  if (REGISTERED.has(migration.version)) throw new Error(`A schema migration at version ${migration.version} is already registered.`);
48
- if (migration.version > 20260925143319) throw new Error(`Schema migration ${migration.version} is newer than CURRENT_SCHEMA_VERSION (${CURRENT_SCHEMA_VERSION}) — a stale branch merged, or the mint forgot to bump the constant. Re-mint: set CURRENT_SCHEMA_VERSION to the newest migration version.`);
48
+ if (migration.version > 20260928180801) throw new Error(`Schema migration ${migration.version} is newer than CURRENT_SCHEMA_VERSION (${CURRENT_SCHEMA_VERSION}) — a stale branch merged, or the mint forgot to bump the constant. Re-mint: set CURRENT_SCHEMA_VERSION to the newest migration version.`);
49
49
  REGISTERED.set(migration.version, migration);
50
50
  }
51
51
  }
@@ -102,7 +102,7 @@ function pendingFor(version, target, options) {
102
102
  * Already-current input passes through untouched — same reference, so hot paths pay nothing.
103
103
  */
104
104
  function upgradeSerializedConfig(json, options) {
105
- const target = options?.target ?? 20260925143319;
105
+ const target = options?.target ?? 20260928180801;
106
106
  const version = detectedWireVersion(json);
107
107
  if (version > target) throw new SchemaVersionTooNew(version, target);
108
108
  const raw = json;
@@ -160,7 +160,7 @@ function upgradedSources(json, options) {
160
160
  * meaning under the current schema and replay skips it — reported by the caller, not swallowed here.
161
161
  */
162
162
  function upgradePatch(patch, writtenAt, options) {
163
- const target = options?.target ?? 20260925143319;
163
+ const target = options?.target ?? 20260928180801;
164
164
  if (writtenAt > target) throw new SchemaVersionTooNew(writtenAt, target);
165
165
  let current = patch;
166
166
  for (const migration of pendingFor(writtenAt, target, options)) {
@@ -179,7 +179,7 @@ function upgradePatch(patch, writtenAt, options) {
179
179
  * stamp would cause.
180
180
  */
181
181
  function upgradeDraftEntries(draft, options) {
182
- const target = options?.target ?? 20260925143319;
182
+ const target = options?.target ?? 20260928180801;
183
183
  const entries = [];
184
184
  const held = [];
185
185
  const retired = [];
package/dist/index.d.ts CHANGED
@@ -20,7 +20,7 @@ import { EntryGroup, GROUP, GroupBody, brandGroup, isGroupBody } from "./framewo
20
20
  import { EntityClass, GroupComputedInput, ItemOf, KindRef, OpInput, defineEntity } from "./framework/defineEntity.js";
21
21
  import { Collection, ConfigClass, ConfigInstance, ConfigKind, EntityMap, OwnedRecords, SourceMap, SourcesOf, defineConfig, kindsOf } from "./framework/defineConfig.js";
22
22
  import { LINK_SLUG, LINK_SLUG_MESSAGE, LinkDeclaration, LinkedSystem, LinkedSystemClass, LinkedSystemResolver, LinkedSystemState, PinDirective, PinOptions, PinOptionsField, ResolvedSource, Source, SourceUnavailable, borrowedGroup, borrowedItem, isLinkSlug, resolvedSource, sourceOfGroup, sourceOfItem, sourceSlugFor, sourceUnavailable, suggestLinkSlug } from "./entities/system/LinkedSystem.js";
23
- import { BreakOutcome, BreakPlan, BreakPlanInput, BreakPlanRow, BreakReach, LinkArrival, LinkPaths, LinkPlan, LinkPlanInput, SourceRowState, UnlinkPlan, UnlinkPlanInput, planBreak, planLink, planUnlink, sourceRowStates } from "./entities/system/link-plan.js";
23
+ import { BreakOutcome, BreakPlan, BreakPlanInput, BreakPlanRow, BreakReach, LinkArrival, LinkPaths, LinkPlan, LinkPlanInput, LinkedElsewhere, OnLinked, SourceRowState, UnlinkPlan, UnlinkPlanInput, planBreak, planLink, planUnlink, sourceRowStates } from "./entities/system/link-plan.js";
24
24
  import { EntityChange, KindSlice, Snapshot } from "./framework/snapshot.js";
25
25
  import { AttachedSources, Config, CssGrammar, Edition, HydrationOptions, ListOptions, LiveConfig, Patch, RecordedSource, SERIALIZED_CONFIG_VERSION, SerializedConfig, SkippedOp, SourcesBySlug, StoredConfig, SubPatch, TreeNode } from "./framework/Config.js";
26
26
  import { CapturedChild, CapturedElement, CapturedNode, CapturedNodeJson, CapturedText, DomLikeElement, capturedFromDom, elementFromCaptured } from "./capture/captured-tree.js";
@@ -106,4 +106,4 @@ import { SpecNode, validateSpec } from "./framework/validate-spec.js";
106
106
  import { valueLeavesOf, valueSchemaOf } from "./framework/value-domain.js";
107
107
  import { views } from "./framework/views-facade.js";
108
108
  import { RN_STYLE_KEYS } from "./react-native/style-keys.generated.js";
109
- export { AI_LANES, ANATOMY_MARKER, AiChat, type AiChatClass, AiFlow, type AiFlowClass, type AiFlowOrigin, AiGeneration, type AiGenerationClass, type AiLane, AiMessage, type AiMessageClass, type AiMultiAgentMode, type AnatomyIssue, type AnatomyIssueKind, type AnatomyReport, type AnySystemConfig, type AsInput, type AttachedSources, type Authored, type AuthoredComponent, type AuthoredProp, type AuthoredPropBody, type AuthoredStyleBag, type AuthoredStyleField, type AuthoringSignatureOptions, BUILD_DEFAULTS, type BindingKind, type BreakOutcome, type BreakPlan, type BreakPlanInput, type BreakPlanRow, type BreakReach, BuildSection, type BuildSectionClass, CANVAS_ROLES, CONFIG_OPERATION_KIND, CSS_DEFAULTS, CSS_PROPERTY_NAMES, CSS_WIDE_KEYWORDS, CURRENT_SCHEMA_VERSION, Canvas, type CanvasClass, CanvasConfig, type CanvasConfigClass, CanvasRole, type CanvasRoleClass, type CanvasRoleName, CanvasSection, type CanvasSectionClass, type CaptureToSpecOptions, type CaptureToSpecResult, type CapturedChild, type CapturedElement, CapturedNode, type CapturedNodeJson, type Spec as CapturedSpec, type SpecElement as CapturedSpecElement, type CapturedText, type Cell, type CellSlot, type Change, type ChangeHook, type ChangeTarget, type CheckedTokenRefPath, type ChildrenPolicy, type ClassGrammar, type CodeSlot, type Collection, type ColorValue, Component, type ComponentBody, type ComponentBuilder, type ComponentClass, type ComponentContractOf, type ComponentElementBody, type ComponentModuleSource, type ComponentPropBody, type ComponentPropsOf, type ComponentReference, type ComponentRegistryImport, type ComponentRegistryImportBinding, type ComponentRuleClass, type ComponentSpec, type ComponentSpecs, type ComponentStyleBody, type ComposedValue, type ComposedValueAuthoring, type ComposedValueForm, Composite, type CompositeClass, type ComputedFields, type ComputedFunctions, type ComputedInput, type ComputedMap, type ComputedValue, Config, type ConfigClass, type ConfigEdit, ConfigFormatError, type ConfigInstance, type ConfigIssue, type ConfigIssueCode, type ConfigKind, type ConfigOp, ConfigRejection, ConfigSession, type ConfigSessionOptions, type ConfigSink, type ConfigSource, type CopyPlan, type CopyPlanInput, type CopyPlanRow, type CreateInput, type CssGrammar, type CssPrefix, type CssPropertyEntry, CssSection, type CssSectionClass, DERIVED_COLOR_SPACE, DERIVED_MUTATIONS, type DanglingDirective, type DanglingLocalRef, type DanglingRef, type DeclaredRuntimeModule, type DeletePlan, type DeriveMembers, type DerivedColor, type DerivedEntityClass, type DerivedOp, Device, type DeviceClass, type DiffOptions, Documentation, type DocumentationClass, DocumentationLibrary, type DocumentationLibraryClass, type DomLikeElement, type DraftSource, ENTITY_PATH_MESSAGE, EXPORT_MEMBER, type Edition, type ElementVisibility, type ElementVisibilityInput, type ElementVisibilitySchema, Entity, type EntityAddress, type EntityChange, type EntityClass, type EntityKind, type EntityMap, type EntryGroup, type ExpandOptions, type ExpansionResult, type ExtendedComponentRef, type ExtendedRef, type FieldsSchema, File, type FileClass, Font, type FontClass, FontFile, type FontFileClass, type ForwardClaims, GROUP, GUIDANCE_LANES, GlobalStyle, type GlobalStyleClass, type GlyphComponent, type GlyphExportRule, type GlyphSource, type GlyphValue, type GoverningCondition, type Gradient, type GroupBody, type GroupComputedInput, Guidance, type GuidanceClass, type GuidanceLane, type GuidanceScope, type GuidanceSegment, GuidanceStyle, type GuidanceStyleBody, type GuidanceStyleClass, type HasSnapshot, type HydrationOptions, ICON_METADATA_FORMATS, Icon, type IconAnswer, type IconClass, type IconGlyph, type IconHook, type IconLibrary, type IconMemberMetadata, type IconMetadataAdapter, type IconMetadataDeclaration, type IconMetadataFile, type IconMetadataFormat, type IconTool, type IconVariantAs, type IdentifiedOp, type InferredRename, type Instance, type InstanceSlot, type InstanceSpec, type ItemOf, type KindRef, type KindSignature, type KindSlice, LINK_SLUG, LINK_SLUG_MESSAGE, type LayerElement, type LayerMap, type LayerPropDriver, type LayerStyleOptions, type LeafAddress, type LinkArrival, type LinkDeclaration, type LinkPaths, type LinkPlan, type LinkPlanInput, LinkedSystem, type LinkedSystemClass, type LinkedSystemResolver, type LinkedSystemState, type ListOptions, type LiveConfig, type LocalOverlay, MINTED, MODIFIER_CATEGORIES, type MarkerKind, type MisdeclaredOverlay, Modifier, type ModifierCategory, type ModifierClass, type ModifierGroupMeta, Motion, type MotionClass, NATIVE_ACTIVATIONS, type NativeActivation, NativeModifier, type NativeModifierClass, NativeSettings, NativeStyleProperty, NativeToken, Node, type NodeClass, type OpHandler, type OpInput, Operation, type OperationClass, type OverlayVerb, type OverrideCondition, type OwnedRecords, PLAYGROUND_DEFAULTS, Package, type PackageClass, Page, type PageClass, type Patch, type PathOf, type PinDirective, type PinOptions, type PinOptionsField, type Plan, type PlanImpact, type PlanOp, PlaygroundSection, type PlaygroundSectionClass, type PreviewElement, type PreviewMatrix, type ProjectedVisibility, type PropCondition, type PropDecl, type PropDeclaration, type PropMap, type PropRoute, type PropShapeSchema, RN_STYLE_KEYS, ReactNativeSystem, type ReactNativeSystemClass, type ReactNativeSystemConfig, type RebaseConflict, type RebaseOrigin, type RebaseResult, type RecordedSource, type RedundantQualifier, type Ref, type RefGraph, type RefGraphEntry, type RefIndex, type RefIndexChange, type RefMember, type RefTarget, type RegisteredComponentContracts, type RegisteredEntities, type RegisteredMembers, type RegisteredModifiers, type RegisteredPaths, type RegisteredStyleBag, type RegisteredStyleProps, type RegisteredTokenValues, type RenamePlan, type RenderArgs, type RenderElement, type RenderSpec, type RenderedNode, type RenderedTarget, type RepeatRow, type RepeatSpec, type ResolveContext, type ResolveValueTypeInput, type ResolvedBinding, type ResolvedSource, type RootFontSize, SCRIPT_EXTENSIONS, SERIALIZED_CONFIG_VERSION, SIZE_TOLERANCE_PX, SLOT_CODE_FORMS, STYLE_PROPERTIES, STYLE_PROP_VALUE_FORMS, STYLE_PROP_VALUE_LEAVES, type SchemaEntry, type SchemaMigration, SchemaVersionTooNew, type SerializedConfig, type SerializedSourceAnswer, Settings, type SettingsClass, type SignatureOptions, type SkippedOp, type Slot, type SlotCell, type SlotCodeForm, type SlotDecl, type SlotTarget, Snapshot, type Source, type SourceAnswer, type SourceChange, type SourceMap, type SourceResolution, type SourceResolutionSchemas, type SourceResolver, type SourceRowState, type SourceState, type SourceUnavailable, type SourcesBySlug, type SourcesOf, type SpecNode, type SplitStyleProps, type StampedPatch, type StoredConfig, type StoredPreviewCondition, type StyleClass, type StylePropEntry, type StylePropLeaf, type StylePropValue, type StylePropValueCtx, type StylePropValueKind, StyleProperty, type StylePropertyClass, type StylePropertyItem, type StyleRuleInput, type StyleValue, type SubEntityClass, type SubPatch, type SurfaceCompositeProp, type SurfaceProp, type SurfacePropCondition, type SurfacePropKind, type SurfaceScalarProp, type SurfaceSlotProp, type SurfaceStylePropertyProp, type SurfaceVariantProp, System, type SystemClass, type SystemConfig, SystemSection, type SystemSectionClass, SystemSource, type SystemSourceClass, TOKEN_READERS, type TimingValue, Token, type TokenBinding, type TokenBody, type TokenClass, type TokenGroupReader, type TokenMatch, type TokenReader, type TokenReaders, type TokenRefPath, type TokenReference, type TokenValueEntry, type TokenValueRow, type TokenValueState, Tool, type ToolClass, type Transition, type TransitionSegment, type TraverseOptions, type TreeNode, UNCONDITIONAL_PREVIEW_KEY, UNREACHABLE, type UnadoptedDirective, type UnknownStyleLeaf, type UnlinkPlan, type UnlinkPlanInput, type UnreadableBorrow, type UnstatableCondition, type UnstatableOverride, type UpgradedDraft, type UserSchemas, VOID_ELEMENTS, type ValueOf, type ValueType, type VarNaming, type VariantValueBody, type VariantValues, type VisibilityOperator, type VisibilityTerm, WEB_ACTIVATIONS, type WalkOptions, type WebActivation, addressOf, alpha, anatomyElementComponent, anatomyIssueKey, anatomyTextProp, applyPathDelta, authoredBag, authoredValue, authoringSignatures, baseOf, bindStateRef, bindingPath, blankComponentBody, borrowedGroup, borrowedItem, boundElementType, brandGroup, buildRefGraph, buildRefIndex, canonicalWhen, capturedFromDom, changeOf, changeValueAt, changesOf, childrenPolicy, classGrammar, className, classPrefixOf, classifyOverlay, classifyStylePropValue, codeSlotsOf, collectRefs, componentClassBase, componentCompositeClasses, componentLayerClass, componentModuleFilePaths, componentModuleKey, componentModuleSource, componentMotionClasses, componentPropClasses, componentRegistryImports, componentRuleClasses, componentSpec, composedValueAuthoring, composedValueFormOf, composedValueForms, composedValueSchemas, condArms, condValue, containsMarker, createCanvasConfig, createSliceMemo, cssPrefixes, cssPropValue, cssProperty, cssPropertyNames, cssString, cssValueIssue, cssVar, cssVarRef, danglingDirectives, danglingLocalRefs, danglingSourcedRefs, darken, declaredField, declaredPropDefaults, declaredPropRouting, declaredRuntimeModules, defineComponent, defineConfig, defineDerivedEntity, defineEntity, defineOverride, defineSubEntity, deriveCreateSchema, deriveSpec, deriveUpdateSchema, describeBody, describePatch, detectedWireVersion, diffRendered, editOp, elementFromCaptured, entityRefOf, entryKeyOf, expandComponent, expandSpec, fieldKeys, fontFamilyStack, forceModeAttribute, forceModeAttributeOf, forceModeProp, forceModePropGroup, forceModePropValue, forceModeProps, forceStateAttribute, forwardClaims, forwardedLayers, forwardedNames, forwardsOf, globalStyleName, glyphComponentOf, glyphExportNames, glyphExportRule, glyphLibrariesOf, glyphPropsOf, glyphSourcesOf, glyphType, graftPreviewElements, guidanceReaches, guidanceScopeOf, guidanceTextOf, heldLinked, iconCategories, iconLibraries, iconLibrary, iconMemberMetadata, iconMetadata, iconMetadataDeclaration, iconMetadataFile, iconMetadataFileJsonSchema, iconMetadataFormat, iconMetadataSourceFile, iconResolver, iconToolAxisOptions, iconToolFor, iconToolLibraries, iconToolOf, iconToolsOf, iconVariantAs, inferredRenames, inputOf, instanceHolding, instanceSpec, intoName, isAuthored, isBinaryAsset, isComposedValue, isConfigFormatError, isConfigRejection, isCssProperty, isDeclaredElementProp, isDerivedColor, isEntityPath, isExtendedRef, isForceModeProp, isGradient, isGroupBody, isIdentifier, isLinkSlug, isMintedRow, isNativeConfig, isPlainObject, isPreviewElement, isRef, isReservedWord, isSystemConfig, isTokenReader, isTransition, isValueSlot, kebabComponent, keyedPreviewConditions, kindOf, kindsOf, layerPropDrivers, layerPropRoutes, layerRef, layerRoutedProps, layerStyles, layerTextProp, leafAddresses, leafVerb, leavesOfStylePropValue, librariesBoundBy, libraryHolding, lighten, linearGradient, linkedVarNaming, liveStateProps, markerKind, matchEntities, matchTokens, memberFromLeaf, memberLeaves, memberOf, memberRef, memberVariantOptions, memoryConfigSource, misdeclaredOverlays, mix, modeAxes, modifierAxes, modifierAxis, modifierCategory, modifierGroupFields, modifierInvariants, modifierLeaf, modifierUtilitiesUsed, motionClassName, nameIconsInTree, namedFields, nativeTokenValue, negatedCssValue, normalizeName, normalizeStyleValue, opOf, opVerb, opacityPercentage, opsForKind, orRef, overlayVerb, overrideCondition, overrideKey, overrideKeyModifiers, overrideModifiers, ownValues, ownerOf, ownsItsValues, packageKey, packageName, parseRootFontSize, partsOf, pathDelta, pathOf, pathSegments, placedGlyphElement, planBreak, planCopy, planLink, planUnlink, previewConditionalProps, previewConditions, previewDefaults, previewMatrix, previewSpec, propApplies, propInto, propOwner, propRegistryRef, propValueDomain, propValueFromAxis, propsIntoLayer, readStatePointer, readsState, redundantQualifiers, ref, refGraphOf, refLeaf, refListOf, refSchema, refTo, registerSchemaMigrations, renderBindingsOf, renderComposedValue, renderDerivedColor, renderGradient, renderSignature, renderStyleValue, renderTransition, renderedElement, renderedSignatureOf, renderedTarget, resolutionSchema, resolveBinding, resolveComponentProps, resolveFieldValue, resolveIconLibraries, resolveInputDir, resolveOutDir, resolveRegistryDir, resolveTokenValue, resolveTokenValueUnder, resolveValue, resolveValueType, resolveVisibility, resolvedSource, rewriteRefNamespace, rewriteRefSource, rewriteRefs, rnStyleKey, rootFontSize, rootLayerOf, routeOf, routedBag, routedProp, routedPropIn, routesContent, ruleApplies, ruleCondition, runChangeHooks, schemaVersionOf, searchEntities, searchTokens, setAtPath, signatureOf, slotCodeForms, slotTargetsOf, snapshotHtml, sniffValueType, sourceEntries, sourceOf, sourceOfGroup, sourceOfItem, sourceRowStates, sourceSlugFor, sourceUnavailable, sourceUnreachable, sourceVarPrefix, specFromCapture, specToNodePatches, specWithResolvedVisibility, spellTokenRead, splitRef, splitStyleProps, stamp, standsInForCode, statePointerProp, stateRef, stateTest, storedPreview, styleAliasesOf, styleDeclarations, stylePropClassBase, stylePropClassName, stylePropClasses, stylePropEntries, stylePropLeafForToken, stylePropNegates, stylePropTokenGroup, stylePropTokenPath, stylePropTokenValues, stylePropValueFormOf, stylePropValueFromLeaf, stylePropValueLeaves, stylePropValueSchema, stylePropValues, stylePropertiesWriting, stylePropertyAccepts, stylePropertyFor, stylePropertyPathFor, styleRuleMotionClasses, suggestLinkSlug, summarizeChanges, surfaceProp, surfaceProps, tablerExportName, tablerStyledExportName, toCssPropertyName, tokenBinding, tokenExists, tokenValueRow, tokenValueRows, touchedFields, transition, unadoptedDirectives, unconditionalPreviewProps, unknownStyleLeaves, unreadableBorrows, unstatableConditions, unstatableOverrides, updateRefIndex, upgradeDraftEntries, upgradePatch, upgradeSerializedConfig, validateComponentProps, validateSpec, valueAt, valueForwardsOf, valueLeavesOf, valueRef, valueSchemaOf, varPrefixOf, views, visibilityStateProps, visibilityTerms, withoutTruthyTerm, wrappedElementKey };
109
+ export { AI_LANES, ANATOMY_MARKER, AiChat, type AiChatClass, AiFlow, type AiFlowClass, type AiFlowOrigin, AiGeneration, type AiGenerationClass, type AiLane, AiMessage, type AiMessageClass, type AiMultiAgentMode, type AnatomyIssue, type AnatomyIssueKind, type AnatomyReport, type AnySystemConfig, type AsInput, type AttachedSources, type Authored, type AuthoredComponent, type AuthoredProp, type AuthoredPropBody, type AuthoredStyleBag, type AuthoredStyleField, type AuthoringSignatureOptions, BUILD_DEFAULTS, type BindingKind, type BreakOutcome, type BreakPlan, type BreakPlanInput, type BreakPlanRow, type BreakReach, BuildSection, type BuildSectionClass, CANVAS_ROLES, CONFIG_OPERATION_KIND, CSS_DEFAULTS, CSS_PROPERTY_NAMES, CSS_WIDE_KEYWORDS, CURRENT_SCHEMA_VERSION, Canvas, type CanvasClass, CanvasConfig, type CanvasConfigClass, CanvasRole, type CanvasRoleClass, type CanvasRoleName, CanvasSection, type CanvasSectionClass, type CaptureToSpecOptions, type CaptureToSpecResult, type CapturedChild, type CapturedElement, CapturedNode, type CapturedNodeJson, type Spec as CapturedSpec, type SpecElement as CapturedSpecElement, type CapturedText, type Cell, type CellSlot, type Change, type ChangeHook, type ChangeTarget, type CheckedTokenRefPath, type ChildrenPolicy, type ClassGrammar, type CodeSlot, type Collection, type ColorValue, Component, type ComponentBody, type ComponentBuilder, type ComponentClass, type ComponentContractOf, type ComponentElementBody, type ComponentModuleSource, type ComponentPropBody, type ComponentPropsOf, type ComponentReference, type ComponentRegistryImport, type ComponentRegistryImportBinding, type ComponentRuleClass, type ComponentSpec, type ComponentSpecs, type ComponentStyleBody, type ComposedValue, type ComposedValueAuthoring, type ComposedValueForm, Composite, type CompositeClass, type ComputedFields, type ComputedFunctions, type ComputedInput, type ComputedMap, type ComputedValue, Config, type ConfigClass, type ConfigEdit, ConfigFormatError, type ConfigInstance, type ConfigIssue, type ConfigIssueCode, type ConfigKind, type ConfigOp, ConfigRejection, ConfigSession, type ConfigSessionOptions, type ConfigSink, type ConfigSource, type CopyPlan, type CopyPlanInput, type CopyPlanRow, type CreateInput, type CssGrammar, type CssPrefix, type CssPropertyEntry, CssSection, type CssSectionClass, DERIVED_COLOR_SPACE, DERIVED_MUTATIONS, type DanglingDirective, type DanglingLocalRef, type DanglingRef, type DeclaredRuntimeModule, type DeletePlan, type DeriveMembers, type DerivedColor, type DerivedEntityClass, type DerivedOp, Device, type DeviceClass, type DiffOptions, Documentation, type DocumentationClass, DocumentationLibrary, type DocumentationLibraryClass, type DomLikeElement, type DraftSource, ENTITY_PATH_MESSAGE, EXPORT_MEMBER, type Edition, type ElementVisibility, type ElementVisibilityInput, type ElementVisibilitySchema, Entity, type EntityAddress, type EntityChange, type EntityClass, type EntityKind, type EntityMap, type EntryGroup, type ExpandOptions, type ExpansionResult, type ExtendedComponentRef, type ExtendedRef, type FieldsSchema, File, type FileClass, Font, type FontClass, FontFile, type FontFileClass, type ForwardClaims, GROUP, GUIDANCE_LANES, GlobalStyle, type GlobalStyleClass, type GlyphComponent, type GlyphExportRule, type GlyphSource, type GlyphValue, type GoverningCondition, type Gradient, type GroupBody, type GroupComputedInput, Guidance, type GuidanceClass, type GuidanceLane, type GuidanceScope, type GuidanceSegment, GuidanceStyle, type GuidanceStyleBody, type GuidanceStyleClass, type HasSnapshot, type HydrationOptions, ICON_METADATA_FORMATS, Icon, type IconAnswer, type IconClass, type IconGlyph, type IconHook, type IconLibrary, type IconMemberMetadata, type IconMetadataAdapter, type IconMetadataDeclaration, type IconMetadataFile, type IconMetadataFormat, type IconTool, type IconVariantAs, type IdentifiedOp, type InferredRename, type Instance, type InstanceSlot, type InstanceSpec, type ItemOf, type KindRef, type KindSignature, type KindSlice, LINK_SLUG, LINK_SLUG_MESSAGE, type LayerElement, type LayerMap, type LayerPropDriver, type LayerStyleOptions, type LeafAddress, type LinkArrival, type LinkDeclaration, type LinkPaths, type LinkPlan, type LinkPlanInput, type LinkedElsewhere, LinkedSystem, type LinkedSystemClass, type LinkedSystemResolver, type LinkedSystemState, type ListOptions, type LiveConfig, type LocalOverlay, MINTED, MODIFIER_CATEGORIES, type MarkerKind, type MisdeclaredOverlay, Modifier, type ModifierCategory, type ModifierClass, type ModifierGroupMeta, Motion, type MotionClass, NATIVE_ACTIVATIONS, type NativeActivation, NativeModifier, type NativeModifierClass, NativeSettings, NativeStyleProperty, NativeToken, Node, type NodeClass, type OnLinked, type OpHandler, type OpInput, Operation, type OperationClass, type OverlayVerb, type OverrideCondition, type OwnedRecords, PLAYGROUND_DEFAULTS, Package, type PackageClass, Page, type PageClass, type Patch, type PathOf, type PinDirective, type PinOptions, type PinOptionsField, type Plan, type PlanImpact, type PlanOp, PlaygroundSection, type PlaygroundSectionClass, type PreviewElement, type PreviewMatrix, type ProjectedVisibility, type PropCondition, type PropDecl, type PropDeclaration, type PropMap, type PropRoute, type PropShapeSchema, RN_STYLE_KEYS, ReactNativeSystem, type ReactNativeSystemClass, type ReactNativeSystemConfig, type RebaseConflict, type RebaseOrigin, type RebaseResult, type RecordedSource, type RedundantQualifier, type Ref, type RefGraph, type RefGraphEntry, type RefIndex, type RefIndexChange, type RefMember, type RefTarget, type RegisteredComponentContracts, type RegisteredEntities, type RegisteredMembers, type RegisteredModifiers, type RegisteredPaths, type RegisteredStyleBag, type RegisteredStyleProps, type RegisteredTokenValues, type RenamePlan, type RenderArgs, type RenderElement, type RenderSpec, type RenderedNode, type RenderedTarget, type RepeatRow, type RepeatSpec, type ResolveContext, type ResolveValueTypeInput, type ResolvedBinding, type ResolvedSource, type RootFontSize, SCRIPT_EXTENSIONS, SERIALIZED_CONFIG_VERSION, SIZE_TOLERANCE_PX, SLOT_CODE_FORMS, STYLE_PROPERTIES, STYLE_PROP_VALUE_FORMS, STYLE_PROP_VALUE_LEAVES, type SchemaEntry, type SchemaMigration, SchemaVersionTooNew, type SerializedConfig, type SerializedSourceAnswer, Settings, type SettingsClass, type SignatureOptions, type SkippedOp, type Slot, type SlotCell, type SlotCodeForm, type SlotDecl, type SlotTarget, Snapshot, type Source, type SourceAnswer, type SourceChange, type SourceMap, type SourceResolution, type SourceResolutionSchemas, type SourceResolver, type SourceRowState, type SourceState, type SourceUnavailable, type SourcesBySlug, type SourcesOf, type SpecNode, type SplitStyleProps, type StampedPatch, type StoredConfig, type StoredPreviewCondition, type StyleClass, type StylePropEntry, type StylePropLeaf, type StylePropValue, type StylePropValueCtx, type StylePropValueKind, StyleProperty, type StylePropertyClass, type StylePropertyItem, type StyleRuleInput, type StyleValue, type SubEntityClass, type SubPatch, type SurfaceCompositeProp, type SurfaceProp, type SurfacePropCondition, type SurfacePropKind, type SurfaceScalarProp, type SurfaceSlotProp, type SurfaceStylePropertyProp, type SurfaceVariantProp, System, type SystemClass, type SystemConfig, SystemSection, type SystemSectionClass, SystemSource, type SystemSourceClass, TOKEN_READERS, type TimingValue, Token, type TokenBinding, type TokenBody, type TokenClass, type TokenGroupReader, type TokenMatch, type TokenReader, type TokenReaders, type TokenRefPath, type TokenReference, type TokenValueEntry, type TokenValueRow, type TokenValueState, Tool, type ToolClass, type Transition, type TransitionSegment, type TraverseOptions, type TreeNode, UNCONDITIONAL_PREVIEW_KEY, UNREACHABLE, type UnadoptedDirective, type UnknownStyleLeaf, type UnlinkPlan, type UnlinkPlanInput, type UnreadableBorrow, type UnstatableCondition, type UnstatableOverride, type UpgradedDraft, type UserSchemas, VOID_ELEMENTS, type ValueOf, type ValueType, type VarNaming, type VariantValueBody, type VariantValues, type VisibilityOperator, type VisibilityTerm, WEB_ACTIVATIONS, type WalkOptions, type WebActivation, addressOf, alpha, anatomyElementComponent, anatomyIssueKey, anatomyTextProp, applyPathDelta, authoredBag, authoredValue, authoringSignatures, baseOf, bindStateRef, bindingPath, blankComponentBody, borrowedGroup, borrowedItem, boundElementType, brandGroup, buildRefGraph, buildRefIndex, canonicalWhen, capturedFromDom, changeOf, changeValueAt, changesOf, childrenPolicy, classGrammar, className, classPrefixOf, classifyOverlay, classifyStylePropValue, codeSlotsOf, collectRefs, componentClassBase, componentCompositeClasses, componentLayerClass, componentModuleFilePaths, componentModuleKey, componentModuleSource, componentMotionClasses, componentPropClasses, componentRegistryImports, componentRuleClasses, componentSpec, composedValueAuthoring, composedValueFormOf, composedValueForms, composedValueSchemas, condArms, condValue, containsMarker, createCanvasConfig, createSliceMemo, cssPrefixes, cssPropValue, cssProperty, cssPropertyNames, cssString, cssValueIssue, cssVar, cssVarRef, danglingDirectives, danglingLocalRefs, danglingSourcedRefs, darken, declaredField, declaredPropDefaults, declaredPropRouting, declaredRuntimeModules, defineComponent, defineConfig, defineDerivedEntity, defineEntity, defineOverride, defineSubEntity, deriveCreateSchema, deriveSpec, deriveUpdateSchema, describeBody, describePatch, detectedWireVersion, diffRendered, editOp, elementFromCaptured, entityRefOf, entryKeyOf, expandComponent, expandSpec, fieldKeys, fontFamilyStack, forceModeAttribute, forceModeAttributeOf, forceModeProp, forceModePropGroup, forceModePropValue, forceModeProps, forceStateAttribute, forwardClaims, forwardedLayers, forwardedNames, forwardsOf, globalStyleName, glyphComponentOf, glyphExportNames, glyphExportRule, glyphLibrariesOf, glyphPropsOf, glyphSourcesOf, glyphType, graftPreviewElements, guidanceReaches, guidanceScopeOf, guidanceTextOf, heldLinked, iconCategories, iconLibraries, iconLibrary, iconMemberMetadata, iconMetadata, iconMetadataDeclaration, iconMetadataFile, iconMetadataFileJsonSchema, iconMetadataFormat, iconMetadataSourceFile, iconResolver, iconToolAxisOptions, iconToolFor, iconToolLibraries, iconToolOf, iconToolsOf, iconVariantAs, inferredRenames, inputOf, instanceHolding, instanceSpec, intoName, isAuthored, isBinaryAsset, isComposedValue, isConfigFormatError, isConfigRejection, isCssProperty, isDeclaredElementProp, isDerivedColor, isEntityPath, isExtendedRef, isForceModeProp, isGradient, isGroupBody, isIdentifier, isLinkSlug, isMintedRow, isNativeConfig, isPlainObject, isPreviewElement, isRef, isReservedWord, isSystemConfig, isTokenReader, isTransition, isValueSlot, kebabComponent, keyedPreviewConditions, kindOf, kindsOf, layerPropDrivers, layerPropRoutes, layerRef, layerRoutedProps, layerStyles, layerTextProp, leafAddresses, leafVerb, leavesOfStylePropValue, librariesBoundBy, libraryHolding, lighten, linearGradient, linkedVarNaming, liveStateProps, markerKind, matchEntities, matchTokens, memberFromLeaf, memberLeaves, memberOf, memberRef, memberVariantOptions, memoryConfigSource, misdeclaredOverlays, mix, modeAxes, modifierAxes, modifierAxis, modifierCategory, modifierGroupFields, modifierInvariants, modifierLeaf, modifierUtilitiesUsed, motionClassName, nameIconsInTree, namedFields, nativeTokenValue, negatedCssValue, normalizeName, normalizeStyleValue, opOf, opVerb, opacityPercentage, opsForKind, orRef, overlayVerb, overrideCondition, overrideKey, overrideKeyModifiers, overrideModifiers, ownValues, ownerOf, ownsItsValues, packageKey, packageName, parseRootFontSize, partsOf, pathDelta, pathOf, pathSegments, placedGlyphElement, planBreak, planCopy, planLink, planUnlink, previewConditionalProps, previewConditions, previewDefaults, previewMatrix, previewSpec, propApplies, propInto, propOwner, propRegistryRef, propValueDomain, propValueFromAxis, propsIntoLayer, readStatePointer, readsState, redundantQualifiers, ref, refGraphOf, refLeaf, refListOf, refSchema, refTo, registerSchemaMigrations, renderBindingsOf, renderComposedValue, renderDerivedColor, renderGradient, renderSignature, renderStyleValue, renderTransition, renderedElement, renderedSignatureOf, renderedTarget, resolutionSchema, resolveBinding, resolveComponentProps, resolveFieldValue, resolveIconLibraries, resolveInputDir, resolveOutDir, resolveRegistryDir, resolveTokenValue, resolveTokenValueUnder, resolveValue, resolveValueType, resolveVisibility, resolvedSource, rewriteRefNamespace, rewriteRefSource, rewriteRefs, rnStyleKey, rootFontSize, rootLayerOf, routeOf, routedBag, routedProp, routedPropIn, routesContent, ruleApplies, ruleCondition, runChangeHooks, schemaVersionOf, searchEntities, searchTokens, setAtPath, signatureOf, slotCodeForms, slotTargetsOf, snapshotHtml, sniffValueType, sourceEntries, sourceOf, sourceOfGroup, sourceOfItem, sourceRowStates, sourceSlugFor, sourceUnavailable, sourceUnreachable, sourceVarPrefix, specFromCapture, specToNodePatches, specWithResolvedVisibility, spellTokenRead, splitRef, splitStyleProps, stamp, standsInForCode, statePointerProp, stateRef, stateTest, storedPreview, styleAliasesOf, styleDeclarations, stylePropClassBase, stylePropClassName, stylePropClasses, stylePropEntries, stylePropLeafForToken, stylePropNegates, stylePropTokenGroup, stylePropTokenPath, stylePropTokenValues, stylePropValueFormOf, stylePropValueFromLeaf, stylePropValueLeaves, stylePropValueSchema, stylePropValues, stylePropertiesWriting, stylePropertyAccepts, stylePropertyFor, stylePropertyPathFor, styleRuleMotionClasses, suggestLinkSlug, summarizeChanges, surfaceProp, surfaceProps, tablerExportName, tablerStyledExportName, toCssPropertyName, tokenBinding, tokenExists, tokenValueRow, tokenValueRows, touchedFields, transition, unadoptedDirectives, unconditionalPreviewProps, unknownStyleLeaves, unreadableBorrows, unstatableConditions, unstatableOverrides, updateRefIndex, upgradeDraftEntries, upgradePatch, upgradeSerializedConfig, validateComponentProps, validateSpec, valueAt, valueForwardsOf, valueLeavesOf, valueRef, valueSchemaOf, varPrefixOf, views, visibilityStateProps, visibilityTerms, withoutTruthyTerm, wrappedElementKey };
@@ -0,0 +1,10 @@
1
+ /**
2
+ * An additive fence: `link` and `link-plan` take `onLinked`, which says what a link does at a path
3
+ * another linked system provides, so the operation catalogue's fingerprint moves. No stored byte
4
+ * changes.
5
+ *
6
+ * Deletable once no stored config artifact is below this version.
7
+ */
8
+ import type { SchemaMigration } from '../framework/schema-version';
9
+ export declare const LINK_ON_LINKED_VERSION = 20260928180801;
10
+ export declare const linkOnLinkedMigration: SchemaMigration;
@@ -0,0 +1,8 @@
1
+ //#region src/migrations/20260928180801_link_on_linked.ts
2
+ const LINK_ON_LINKED_VERSION = 20260928180801;
3
+ const linkOnLinkedMigration = {
4
+ version: LINK_ON_LINKED_VERSION,
5
+ up: (json) => json
6
+ };
7
+ //#endregion
8
+ export { LINK_ON_LINKED_VERSION, linkOnLinkedMigration };