jssm 5.162.1 → 5.162.3

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.
@@ -21894,8 +21894,8 @@ function nth_matching_loc(tree, predicate, n) {
21894
21894
  *
21895
21895
  * @internal
21896
21896
  *
21897
- * @typeparam StateType The type of state names (usually `string`).
21898
- * @typeparam mDT The type of the machine data member; usually omitted.
21897
+ * @typeParam StateType The type of state names (usually `string`).
21898
+ * @typeParam mDT The type of the machine data member; usually omitted.
21899
21899
  *
21900
21900
  * @param this_se - The parsed semi-edge containing kind, action, and
21901
21901
  * probability metadata.
@@ -22544,7 +22544,7 @@ function resolve_group_refs(tree, registry) {
22544
22544
  *
22545
22545
  * @internal
22546
22546
  *
22547
- * @typeparam mDT The type of the machine data member; usually omitted
22547
+ * @typeParam mDT The type of the machine data member; usually omitted
22548
22548
  *
22549
22549
  */
22550
22550
  function compile_rule_transition_step(acc, from, to, this_se, next_se) {
@@ -22766,7 +22766,7 @@ function fold_graph_config(aliases, explicit_block) {
22766
22766
  * Compile a machine's JSON intermediate representation to a config object. If
22767
22767
  * you're using this (probably don't,) you're probably also using
22768
22768
  * {@link parse} to get the IR, and the object constructor
22769
- * {@link Machine.construct} to turn the config object into a workable machine.
22769
+ * {@link Machine.constructor} to turn the config object into a workable machine.
22770
22770
  *
22771
22771
  * ```typescript
22772
22772
  * import { parse, compile, Machine } from 'jssm';
@@ -22832,7 +22832,7 @@ function fold_graph_config(aliases, explicit_block) {
22832
22832
  * const toggle = jssm.from('up <=> down;');
22833
22833
  * ```
22834
22834
  *
22835
- * @typeparam mDT The type of the machine data member; usually omitted
22835
+ * @typeParam mDT The type of the machine data member; usually omitted
22836
22836
  *
22837
22837
  * @param tree The parse tree to be boiled down into a machine config. If the
22838
22838
  * tree was produced with `parse(input, { locations: true })`, any
@@ -23070,7 +23070,7 @@ function compile(tree) {
23070
23070
  * Not generally meant for external use. Please see {@link compile} or
23071
23071
  * {@link sm}.
23072
23072
  *
23073
- * @typeparam mDT The type of the machine data member; usually omitted
23073
+ * @typeParam mDT The type of the machine data member; usually omitted
23074
23074
  *
23075
23075
  * @param plan The FSL code to be evaluated and built into a machine config
23076
23076
  *
@@ -23790,7 +23790,7 @@ function fslSemanticSpans(text) {
23790
23790
  * Useful for runtime diagnostics and for embedding in serialized machine
23791
23791
  * snapshots so that deserializers can detect version-skew.
23792
23792
  */
23793
- const version = "5.162.1";
23793
+ const version = "5.162.3";
23794
23794
 
23795
23795
  /**
23796
23796
  * The FSL Markdown fence convention parser — pure, host-agnostic logic that
@@ -24210,7 +24210,7 @@ function merge_state_config(base, over) {
24210
24210
  * light.state(); // 'Green'
24211
24211
  * ```
24212
24212
  *
24213
- * @typeparam mDT The machine data type — the type of the value stored in
24213
+ * @typeParam mDT The machine data type — the type of the value stored in
24214
24214
  * `.data()`. Defaults to `undefined` when no data is used.
24215
24215
  *
24216
24216
  */
@@ -24771,7 +24771,7 @@ class Machine {
24771
24771
  * console.log( lswitch.state() ); // 'off'
24772
24772
  * ```
24773
24773
  *
24774
- * @typeparam mDT The type of the machine data member; usually omitted
24774
+ * @typeParam mDT The type of the machine data member; usually omitted
24775
24775
  *
24776
24776
  * @returns The current state name.
24777
24777
  *
@@ -24793,7 +24793,7 @@ class Machine {
24793
24793
  *
24794
24794
  * See also {@link display_text}.
24795
24795
  *
24796
- * @typeparam mDT The type of the machine data member; usually omitted
24796
+ * @typeParam mDT The type of the machine data member; usually omitted
24797
24797
  *
24798
24798
  * @param state The state to get the label for.
24799
24799
  *
@@ -24822,7 +24822,7 @@ class Machine {
24822
24822
  * console.log( lswitch.display_text('b') ); // 'b'
24823
24823
  * ```
24824
24824
  *
24825
- * @typeparam mDT The type of the machine data member; usually omitted
24825
+ * @typeParam mDT The type of the machine data member; usually omitted
24826
24826
  *
24827
24827
  * @param state The state to get display text for.
24828
24828
  *
@@ -24844,7 +24844,7 @@ class Machine {
24844
24844
  * console.log( lswitch.data() ); // 1
24845
24845
  * ```
24846
24846
  *
24847
- * @typeparam mDT The type of the machine data member; usually omitted
24847
+ * @typeParam mDT The type of the machine data member; usually omitted
24848
24848
  *
24849
24849
  * @returns A deep clone of the machine's current data value.
24850
24850
  *
@@ -25046,7 +25046,7 @@ class Machine {
25046
25046
  * console.log( final_test.is_start_state('b') ); // true
25047
25047
  * ```
25048
25048
  *
25049
- * @typeparam mDT The type of the machine data member; usually omitted
25049
+ * @typeParam mDT The type of the machine data member; usually omitted
25050
25050
  *
25051
25051
  * @param whichState The name of the state to check
25052
25052
  *
@@ -25073,7 +25073,7 @@ class Machine {
25073
25073
  * console.log( final_test.is_start_state('b') ); // true
25074
25074
  * ```
25075
25075
  *
25076
- * @typeparam mDT The type of the machine data member; usually omitted
25076
+ * @typeParam mDT The type of the machine data member; usually omitted
25077
25077
  *
25078
25078
  * @param whichState The name of the state to check
25079
25079
  *
@@ -25134,7 +25134,7 @@ class Machine {
25134
25134
  * console.log( final_test.state_is_final('second') ); // true
25135
25135
  * ```
25136
25136
  *
25137
- * @typeparam mDT The type of the machine data member; usually omitted
25137
+ * @typeParam mDT The type of the machine data member; usually omitted
25138
25138
  *
25139
25139
  * @param whichState The name of the state to check for finality
25140
25140
  *
@@ -25167,9 +25167,9 @@ class Machine {
25167
25167
  * Serialize the current machine, including all defining state but not the
25168
25168
  * machine string, to a structure. This means you will need the machine
25169
25169
  * string to recreate (to not waste repeated space;) if you want the machine
25170
- * string embedded, call {@link serialize_with_string} instead.
25170
+ * string embedded, call `serialize_with_string` instead.
25171
25171
  *
25172
- * @typeparam mDT The type of the machine data member; usually omitted
25172
+ * @typeParam mDT The type of the machine data member; usually omitted
25173
25173
  *
25174
25174
  * @param comment An optional comment string to embed in the serialized
25175
25175
  * output for identification or debugging.
@@ -25389,7 +25389,7 @@ class Machine {
25389
25389
  * console.log( lswitch.states() ); // ['on', 'off']
25390
25390
  * ```
25391
25391
  *
25392
- * @typeparam mDT The type of the machine data member; usually omitted
25392
+ * @typeParam mDT The type of the machine data member; usually omitted
25393
25393
  *
25394
25394
  * @returns An array of all state names in the machine.
25395
25395
  *
@@ -25424,7 +25424,7 @@ class Machine {
25424
25424
  * console.log( lswitch.has_state('dance') ); // false
25425
25425
  * ```
25426
25426
  *
25427
- * @typeparam mDT The type of the machine data member; usually omitted
25427
+ * @typeParam mDT The type of the machine data member; usually omitted
25428
25428
  *
25429
25429
  * @param whichState The state to be checked for existence.
25430
25430
  *
@@ -25464,7 +25464,7 @@ class Machine {
25464
25464
  * ]
25465
25465
  * ```
25466
25466
  *
25467
- * @typeparam mDT The type of the machine data member; usually omitted
25467
+ * @typeParam mDT The type of the machine data member; usually omitted
25468
25468
  *
25469
25469
  * @returns An array of all {@link JssmTransition} edge objects.
25470
25470
  *
@@ -25681,7 +25681,7 @@ class Machine {
25681
25681
  * light.list_transitions(); // { entrances: [ 'yellow', 'off' ], exits: [ 'green', 'off' ] }
25682
25682
  * ```
25683
25683
  *
25684
- * @typeparam mDT The type of the machine data member; usually omitted
25684
+ * @typeParam mDT The type of the machine data member; usually omitted
25685
25685
  *
25686
25686
  * @param whichState The state whose transitions to have listed
25687
25687
  *
@@ -25694,7 +25694,7 @@ class Machine {
25694
25694
  * List all entrances attached to the current state. Please note that the
25695
25695
  * order of the list is not defined. This list includes both unforced and
25696
25696
  * forced entrances; if this isn't desired, consider
25697
- * {@link list_unforced_entrances} or {@link list_forced_entrances} as
25697
+ * `list_unforced_entrances` or `list_forced_entrances` as
25698
25698
  * appropriate.
25699
25699
  *
25700
25700
  * ```typescript
@@ -25706,7 +25706,7 @@ class Machine {
25706
25706
  * light.list_entrances(); // [ 'yellow', 'off' ]
25707
25707
  * ```
25708
25708
  *
25709
- * @typeparam mDT The type of the machine data member; usually omitted
25709
+ * @typeParam mDT The type of the machine data member; usually omitted
25710
25710
  *
25711
25711
  * @param whichState The state whose entrances to have listed
25712
25712
  *
@@ -25720,8 +25720,8 @@ class Machine {
25720
25720
  *
25721
25721
  * List all exits attached to the current state. Please note that the order
25722
25722
  * of the list is not defined. This list includes both unforced and forced
25723
- * exits; if this isn't desired, consider {@link list_unforced_exits} or
25724
- * {@link list_forced_exits} as appropriate.
25723
+ * exits; if this isn't desired, consider `list_unforced_exits` or
25724
+ * `list_forced_exits` as appropriate.
25725
25725
  *
25726
25726
  * ```typescript
25727
25727
  * import { sm } from 'jssm';
@@ -25732,7 +25732,7 @@ class Machine {
25732
25732
  * light.list_exits(); // [ 'green', 'off' ]
25733
25733
  * ```
25734
25734
  *
25735
- * @typeparam mDT The type of the machine data member; usually omitted
25735
+ * @typeParam mDT The type of the machine data member; usually omitted
25736
25736
  *
25737
25737
  * @param whichState The state whose exits to have listed
25738
25738
  *
@@ -26012,7 +26012,7 @@ class Machine {
26012
26012
  * console.log( machine.actions() ); // logs ['next', 'shutdown']
26013
26013
  * ```
26014
26014
  *
26015
- * @typeparam mDT The type of the machine data member; usually omitted
26015
+ * @typeParam mDT The type of the machine data member; usually omitted
26016
26016
  *
26017
26017
  * @param whichState The state whose actions to list. Defaults to the
26018
26018
  * current state.
@@ -26051,7 +26051,7 @@ class Machine {
26051
26051
  * console.log( machine.list_states_having_action('start') ); // ['off']
26052
26052
  * ```
26053
26053
  *
26054
- * @typeparam mDT The type of the machine data member; usually omitted
26054
+ * @typeParam mDT The type of the machine data member; usually omitted
26055
26055
  *
26056
26056
  * @param whichState The action to be checked for associated states
26057
26057
  *
@@ -26187,7 +26187,7 @@ class Machine {
26187
26187
  * m.isIn('nonesuch'); // false — undeclared group has no members
26188
26188
  * ```
26189
26189
  *
26190
- * @typeparam mDT The type of the machine data member; usually omitted
26190
+ * @typeParam mDT The type of the machine data member; usually omitted
26191
26191
  *
26192
26192
  * @param groupName The group to test the current state against.
26193
26193
  *
@@ -26217,7 +26217,7 @@ class Machine {
26217
26217
  * m.groupsOf('z'); // Set {} — not in any group
26218
26218
  * ```
26219
26219
  *
26220
- * @typeparam mDT The type of the machine data member; usually omitted
26220
+ * @typeParam mDT The type of the machine data member; usually omitted
26221
26221
  *
26222
26222
  * @param state The state whose containing groups are wanted.
26223
26223
  *
@@ -26246,7 +26246,7 @@ class Machine {
26246
26246
  * m.groups(); // [ 'first', 'second' ]
26247
26247
  * ```
26248
26248
  *
26249
- * @typeparam mDT The type of the machine data member; usually omitted
26249
+ * @typeParam mDT The type of the machine data member; usually omitted
26250
26250
  *
26251
26251
  * @returns The declared group names, in declaration order.
26252
26252
  *
@@ -26271,7 +26271,7 @@ class Machine {
26271
26271
  * m.statesIn('inner'); // [ 'a', 'b' ]
26272
26272
  * ```
26273
26273
  *
26274
- * @typeparam mDT The type of the machine data member; usually omitted
26274
+ * @typeParam mDT The type of the machine data member; usually omitted
26275
26275
  *
26276
26276
  * @param groupName The group whose transitive member states are wanted.
26277
26277
  *
@@ -27466,7 +27466,7 @@ class Machine {
27466
27466
  * - When multiple edges exist between two states with different `kind`
27467
27467
  * values, only the first edge's kind is used to pick the edge-type hook.
27468
27468
  *
27469
- * @typeparam mDT The type of the machine data member; usually omitted.
27469
+ * @typeParam mDT The type of the machine data member; usually omitted.
27470
27470
  *
27471
27471
  * @param newStateOrAction The target state name (for a plain or forced
27472
27472
  * transition) or the action name (when `wasAction` is true).
@@ -27990,7 +27990,7 @@ class Machine {
27990
27990
  *
27991
27991
  * Notice that the machine's current state, `e`, is not in the returned list.
27992
27992
  *
27993
- * @typeparam mDT The type of the machine data member; usually omitted
27993
+ * @typeParam mDT The type of the machine data member; usually omitted
27994
27994
  *
27995
27995
  */
27996
27996
  get history() {
@@ -28025,7 +28025,7 @@ class Machine {
28025
28025
  *
28026
28026
  * Notice that the machine's current state, `e`, is in the returned list.
28027
28027
  *
28028
- * @typeparam mDT The type of the machine data member; usually omitted
28028
+ * @typeParam mDT The type of the machine data member; usually omitted
28029
28029
  *
28030
28030
  */
28031
28031
  get history_inclusive() {
@@ -28048,7 +28048,7 @@ class Machine {
28048
28048
  * foo.history_length; // 5
28049
28049
  * ```
28050
28050
  *
28051
- * @typeparam mDT The type of the machine data member; usually omitted
28051
+ * @typeParam mDT The type of the machine data member; usually omitted
28052
28052
  *
28053
28053
  */
28054
28054
  get history_length() {
@@ -28070,7 +28070,7 @@ class Machine {
28070
28070
  * light.state(); // 'green'
28071
28071
  * ```
28072
28072
  *
28073
- * @typeparam mDT The type of the machine data member; usually omitted
28073
+ * @typeParam mDT The type of the machine data member; usually omitted
28074
28074
  *
28075
28075
  * @param actionName The action to engage
28076
28076
  *
@@ -28099,7 +28099,7 @@ class Machine {
28099
28099
  * // { shape: 'circle' }
28100
28100
  * ```
28101
28101
  *
28102
- * @typeparam mDT The type of the machine data member; usually omitted
28102
+ * @typeParam mDT The type of the machine data member; usually omitted
28103
28103
  *
28104
28104
  * @returns The {@link JssmStateConfig} for standard states.
28105
28105
  *
@@ -28127,7 +28127,7 @@ class Machine {
28127
28127
  * // { shape: 'circle' }
28128
28128
  * ```
28129
28129
  *
28130
- * @typeparam mDT The type of the machine data member; usually omitted
28130
+ * @typeParam mDT The type of the machine data member; usually omitted
28131
28131
  *
28132
28132
  * @returns The {@link JssmStateConfig} for hooked states.
28133
28133
  *
@@ -28154,7 +28154,7 @@ class Machine {
28154
28154
  * // { shape: 'circle' }
28155
28155
  * ```
28156
28156
  *
28157
- * @typeparam mDT The type of the machine data member; usually omitted
28157
+ * @typeParam mDT The type of the machine data member; usually omitted
28158
28158
  *
28159
28159
  * @returns The {@link JssmStateConfig} for start states.
28160
28160
  *
@@ -28186,7 +28186,7 @@ class Machine {
28186
28186
  * // { shape: 'circle' }
28187
28187
  * ```
28188
28188
  *
28189
- * @typeparam mDT The type of the machine data member; usually omitted
28189
+ * @typeParam mDT The type of the machine data member; usually omitted
28190
28190
  *
28191
28191
  * @returns The {@link JssmStateConfig} for end states.
28192
28192
  *
@@ -28213,7 +28213,7 @@ class Machine {
28213
28213
  * // { shape: 'circle' }
28214
28214
  * ```
28215
28215
  *
28216
- * @typeparam mDT The type of the machine data member; usually omitted
28216
+ * @typeParam mDT The type of the machine data member; usually omitted
28217
28217
  *
28218
28218
  * @returns The {@link JssmStateConfig} for terminal states.
28219
28219
  *
@@ -28237,7 +28237,7 @@ class Machine {
28237
28237
  * // { shape: 'circle' }
28238
28238
  * ```
28239
28239
  *
28240
- * @typeparam mDT The type of the machine data member; usually omitted
28240
+ * @typeParam mDT The type of the machine data member; usually omitted
28241
28241
  *
28242
28242
  * @returns The {@link JssmStateConfig} for the active state.
28243
28243
  *
@@ -28589,7 +28589,7 @@ class Machine {
28589
28589
  * state's declaration into a fresh {@link JssmStateConfig} — the tier-5
28590
28590
  * "`state foo : { … }`" contribution of the config cascade. A state with no
28591
28591
  * declaration yields an all-`undefined` config (which contributes nothing
28592
- * once folded with {@link merge_state_config}).
28592
+ * once folded with `merge_state_config`).
28593
28593
  *
28594
28594
  * @param state The state whose per-state declared style is wanted.
28595
28595
  *
@@ -28658,7 +28658,7 @@ class Machine {
28658
28658
  * overlay (tier 6) is NOT applied here; it is layered on top by
28659
28659
  * {@link resolve_state_config} so it wins over per-state config.
28660
28660
  *
28661
- * Tiers, folded least-specific → most-specific with {@link merge_state_config}
28661
+ * Tiers, folded least-specific → most-specific with `merge_state_config`
28662
28662
  * (later wins, never throwing on a cross-tier key collision):
28663
28663
  *
28664
28664
  * 1. theme defaults — `base_theme.state`, then each selected theme's
@@ -28753,7 +28753,7 @@ class Machine {
28753
28753
  * successor to the ad-hoc layer merge {@link style_for} used to perform.
28754
28754
  *
28755
28755
  * For any state OTHER than the current one, this returns the memoized static
28756
- * resolution (tiers 1–5; see {@link _compose_state_config}) — theme →
28756
+ * resolution (tiers 1–5; see `_compose_state_config`) — theme →
28757
28757
  * `default_state_config` → per-kind defaults → depth-ordered group metadata →
28758
28758
  * per-state config. The cache is keyed by state and never invalidated, since
28759
28759
  * those tiers do not depend on which state is current.
@@ -28763,7 +28763,7 @@ class Machine {
28763
28763
  * layers: the active-state THEME layers fold in just below the per-state
28764
28764
  * config (tier 3-active), and the user `active_state : { … }` overlay folds
28765
28765
  * in LAST (tier 6), on top of everything, so it wins over per-state config.
28766
- * Every fold uses {@link merge_state_config}, so a key set at a lower tier is
28766
+ * Every fold uses `merge_state_config`, so a key set at a lower tier is
28767
28767
  * overridden — never rejected — by a higher one.
28768
28768
  *
28769
28769
  * ```typescript
@@ -28773,7 +28773,7 @@ class Machine {
28773
28773
  * m.resolve_state_config('working').color; // '#ffa500ff' — from group &busy
28774
28774
  * ```
28775
28775
  *
28776
- * @typeparam mDT The type of the machine data member; usually omitted
28776
+ * @typeParam mDT The type of the machine data member; usually omitted
28777
28777
  *
28778
28778
  * @param state The state to compute the composite config for.
28779
28779
  *
@@ -28812,7 +28812,7 @@ class Machine {
28812
28812
  * winning over outer), then the per-state config, and finally — for the
28813
28813
  * current state only — the active overlay. Last wins at every tier.
28814
28814
  *
28815
- * @typeparam mDT The type of the machine data member; usually omitted
28815
+ * @typeParam mDT The type of the machine data member; usually omitted
28816
28816
  *
28817
28817
  * @param state The state to compute the composite style for.
28818
28818
  *
@@ -28848,7 +28848,7 @@ class Machine {
28848
28848
  * light.state(); // 'yellow'
28849
28849
  * ```
28850
28850
  *
28851
- * @typeparam mDT The type of the machine data member; usually omitted
28851
+ * @typeParam mDT The type of the machine data member; usually omitted
28852
28852
  *
28853
28853
  * @param actionName The action to engage
28854
28854
  *
@@ -28883,7 +28883,7 @@ class Machine {
28883
28883
  * light.state(); // 'green'
28884
28884
  * ```
28885
28885
  *
28886
- * @typeparam mDT The type of the machine data member; usually omitted
28886
+ * @typeParam mDT The type of the machine data member; usually omitted
28887
28887
  *
28888
28888
  * @param newState The state to switch to
28889
28889
  *
@@ -28907,7 +28907,7 @@ class Machine {
28907
28907
  * light.state(); // 'green'
28908
28908
  * ```
28909
28909
  *
28910
- * @typeparam mDT The type of the machine data member; usually omitted
28910
+ * @typeParam mDT The type of the machine data member; usually omitted
28911
28911
  *
28912
28912
  * @param newState The state to switch to
28913
28913
  *
@@ -28934,7 +28934,7 @@ class Machine {
28934
28934
  * light.state(); // 'off'
28935
28935
  * ```
28936
28936
  *
28937
- * @typeparam mDT The type of the machine data member; usually omitted
28937
+ * @typeParam mDT The type of the machine data member; usually omitted
28938
28938
  *
28939
28939
  * @param newState The state to switch to
28940
28940
  *
@@ -29120,7 +29120,7 @@ class Machine {
29120
29120
  * const lswitch = jssm.from('on <=> off;');
29121
29121
  * ```
29122
29122
  *
29123
- * @typeparam mDT The type of the machine data member; usually omitted
29123
+ * @typeParam mDT The type of the machine data member; usually omitted
29124
29124
  *
29125
29125
  * @param template_strings The assembled code
29126
29126
  *
@@ -29158,7 +29158,7 @@ function sm(template_strings, ...remainder /* , arguments */) {
29158
29158
  * is_hook_complex_result({ other: 'thing' }); // false
29159
29159
  * ```
29160
29160
  *
29161
- * @typeparam mDT The type of the machine data member; usually omitted.
29161
+ * @typeParam mDT The type of the machine data member; usually omitted.
29162
29162
  *
29163
29163
  * @param hr The value to test.
29164
29164
  *
@@ -29264,7 +29264,7 @@ const HOOK_REJECTED = Object.freeze({ pass: false }); // eslint-disable-line @ty
29264
29264
  *
29265
29265
  * Anything else is a programmer error and throws.
29266
29266
  *
29267
- * @typeparam mDT The type of the machine data member; usually omitted.
29267
+ * @typeParam mDT The type of the machine data member; usually omitted.
29268
29268
  *
29269
29269
  * @param maybe_hook The hook handler to call, or `undefined` for the
29270
29270
  * "no hook installed" case.
@@ -29324,7 +29324,7 @@ function abstract_hook_step(maybe_hook, hook_args) {
29324
29324
  * - `false` or `null` → `{ pass: false }`
29325
29325
  * - a complex result → returned as-is
29326
29326
  *
29327
- * @typeparam mDT The type of the machine data member; usually omitted.
29327
+ * @typeParam mDT The type of the machine data member; usually omitted.
29328
29328
  *
29329
29329
  * @param maybe_hook The everything-hook handler, or `undefined` when none
29330
29330
  * is installed.
@@ -30405,7 +30405,7 @@ function chips_for_render_mode(u_jssm, l_states, mode) {
30405
30405
  * the state's display text plus any group chips the node builder appends, with
30406
30406
  * DOT's `\"` escaping undone (SVG carries the literal character). A label that
30407
30407
  * wraps across lines becomes several `<text>` elements; this returns the lines
30408
- * joined by `\n`, exactly how {@link extract_state_fills} reads them back — so
30408
+ * joined by `\n`, exactly how `extract_state_fills` reads them back — so
30409
30409
  * the derived key and the extracted key meet at the same string.
30410
30410
  *
30411
30411
  * This is the single source of truth the static fence renderer keys its