@yuneta/gobj-ui 7.23.33 → 7.23.35

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.
@@ -64310,6 +64310,11 @@ function dev_view() {
64310
64310
  return v === "compact" || v === "name" || v === "full" ? v : "detailed";
64311
64311
  }
64312
64312
  var HIDE_PERIODIC_DEFAULT = 1;
64313
+ var SIMPLE_MACH_DEFAULT = 1;
64314
+ var SIMPLE_MACH_KEY = "dev_mach_simple";
64315
+ function dev_simple_mach() {
64316
+ return dev_num(SIMPLE_MACH_KEY, SIMPLE_MACH_DEFAULT) ? 1 : 0;
64317
+ }
64313
64318
  function dev_hide_periodic() {
64314
64319
  return dev_num("dev_hide_periodic", HIDE_PERIODIC_DEFAULT) ? true : false;
64315
64320
  }
@@ -64887,7 +64892,7 @@ function render_name(e) {
64887
64892
  ]);
64888
64893
  }
64889
64894
  function render_log(e) {
64890
- return (0, _yuneta_gobj_js.createElement2)([
64895
+ let $row = (0, _yuneta_gobj_js.createElement2)([
64891
64896
  "div",
64892
64897
  {
64893
64898
  class: "YDEV_LOGROW YDEV_LOG_" + e.level,
@@ -64902,7 +64907,7 @@ function render_log(e) {
64902
64907
  [
64903
64908
  "span",
64904
64909
  { class: "YDEV_LOG_TXT" },
64905
- e.text
64910
+ ""
64906
64911
  ],
64907
64912
  [
64908
64913
  "span",
@@ -64911,6 +64916,9 @@ function render_log(e) {
64911
64916
  ]
64912
64917
  ]
64913
64918
  ]);
64919
+ let $txt = $row.querySelector(".YDEV_LOG_TXT");
64920
+ if ($txt) $txt.textContent = e.text;
64921
+ return $row;
64914
64922
  }
64915
64923
  function render_entry(e) {
64916
64924
  if (e.kind === "log") return render_log(e);
@@ -64949,15 +64957,28 @@ function rerender_all() {
64949
64957
  }
64950
64958
  }
64951
64959
  logger.replaceChildren(frag);
64952
- if (shown === 0) {
64953
- let $empty = document.createElement("div");
64954
- $empty.className = "YDEV_EMPTY";
64955
- $empty.textContent = TRAFFIC_LOG.length ? "No messages match the current filters." : "Waiting for activity — console logs and errors show automatically; enable Traffic or Automata for more.";
64956
- logger.appendChild($empty);
64957
- }
64960
+ if (shown === 0) logger.appendChild(make_placeholder());
64958
64961
  logger.scrollTop = logger.scrollHeight;
64959
64962
  update_stats();
64960
64963
  }
64964
+ function make_placeholder() {
64965
+ let $empty = document.createElement("div");
64966
+ $empty.className = "YDEV_EMPTY";
64967
+ $empty.textContent = placeholder_text();
64968
+ return $empty;
64969
+ }
64970
+ function placeholder_text() {
64971
+ if (TRAFFIC_LOG.length) return "No messages match the current filters.";
64972
+ return "Waiting for activity — console logs and errors show automatically; enable Traffic or Automata for more.";
64973
+ }
64974
+ function refresh_placeholder() {
64975
+ let logger = document.getElementById("developer-traffic-logger");
64976
+ if (!logger) return;
64977
+ let ph = logger.querySelector(".YDEV_EMPTY");
64978
+ if (!ph) return;
64979
+ let text = placeholder_text();
64980
+ if (ph.textContent !== text) ph.textContent = text;
64981
+ }
64961
64982
  function update_stats() {
64962
64983
  let $s = document.getElementById("ydev-stats");
64963
64984
  if (!$s) return;
@@ -65061,7 +65082,7 @@ function info_traffic(title, msg, direction, size) {
65061
65082
  let ph = logger.querySelector(".YDEV_EMPTY");
65062
65083
  if (ph) ph.remove();
65063
65084
  append_and_follow(logger, node);
65064
- }
65085
+ } else refresh_placeholder();
65065
65086
  update_stats();
65066
65087
  }
65067
65088
  var __in_info_log__ = false;
@@ -65122,7 +65143,7 @@ function info_log(level, msg, hora) {
65122
65143
  let ph = logger.querySelector(".YDEV_EMPTY");
65123
65144
  if (ph) ph.remove();
65124
65145
  append_and_follow(logger, node);
65125
- }
65146
+ } else refresh_placeholder();
65126
65147
  update_stats();
65127
65148
  } finally {
65128
65149
  __in_info_log__ = false;
@@ -65219,7 +65240,7 @@ function refresh_dev_chrome() {
65219
65240
  $b.classList.toggle("is-active", dev_hide_periodic());
65220
65241
  });
65221
65242
  document.querySelectorAll(".YDEV_CHIP[data-toggle=\"automata-simple\"]").forEach(($b) => {
65222
- $b.classList.toggle("is-active", !!dev_num("dev_automata_simple", 0));
65243
+ $b.classList.toggle("is-active", !!dev_simple_mach());
65223
65244
  });
65224
65245
  let $m = document.getElementById("ydev-muted");
65225
65246
  if ($m) {
@@ -65311,13 +65332,13 @@ function build_control_bar() {
65311
65332
  class: "YDEV_CHIP",
65312
65333
  "data-toggle": "automata-simple",
65313
65334
  type: "button",
65314
- title: "Compact automata format (one line per transition, like C)"
65335
+ title: "Machine trace shape. On (default): one line per transition, event first, like the C kernel. Off: the legacy three-line shape (the call, the state change and the return)"
65315
65336
  },
65316
65337
  "Simple mach",
65317
65338
  { click: (ev) => {
65318
65339
  ev.stopPropagation();
65319
- let v = dev_num("dev_automata_simple", 0) ? 0 : 1;
65320
- (0, _yuneta_gobj_js.kw_set_local_storage_value)("dev_automata_simple", v);
65340
+ let v = dev_simple_mach() ? 0 : 1;
65341
+ (0, _yuneta_gobj_js.kw_set_local_storage_value)(SIMPLE_MACH_KEY, v);
65321
65342
  (0, _yuneta_gobj_js.gobj_set_trace_machine_format)(v);
65322
65343
  refresh_dev_chrome();
65323
65344
  } }
@@ -65606,7 +65627,7 @@ function apply_dev_traces() {
65606
65627
  (0, _yuneta_gobj_js.gobj_write_attr)((0, _yuneta_gobj_js.gobj_yuno)(), "trace_subscriptions", subscriptions);
65607
65628
  (0, _yuneta_gobj_js.gobj_write_attr)((0, _yuneta_gobj_js.gobj_yuno)(), "no_poll", no_poll);
65608
65629
  i18next.default.options.debug = i18n ? true : false;
65609
- (0, _yuneta_gobj_js.gobj_set_trace_machine_format)(Number((0, _yuneta_gobj_js.kw_get_local_storage_value)("dev_automata_simple", 0, false)) ? 1 : 0);
65630
+ (0, _yuneta_gobj_js.gobj_set_trace_machine_format)(dev_simple_mach());
65610
65631
  (0, _yuneta_gobj_js.set_log_callback)(info_log);
65611
65632
  apply_console_route();
65612
65633
  }
@@ -64305,6 +64305,11 @@ function dev_view() {
64305
64305
  return v === "compact" || v === "name" || v === "full" ? v : "detailed";
64306
64306
  }
64307
64307
  var HIDE_PERIODIC_DEFAULT = 1;
64308
+ var SIMPLE_MACH_DEFAULT = 1;
64309
+ var SIMPLE_MACH_KEY = "dev_mach_simple";
64310
+ function dev_simple_mach() {
64311
+ return dev_num(SIMPLE_MACH_KEY, SIMPLE_MACH_DEFAULT) ? 1 : 0;
64312
+ }
64308
64313
  function dev_hide_periodic() {
64309
64314
  return dev_num("dev_hide_periodic", HIDE_PERIODIC_DEFAULT) ? true : false;
64310
64315
  }
@@ -64882,7 +64887,7 @@ function render_name(e) {
64882
64887
  ]);
64883
64888
  }
64884
64889
  function render_log(e) {
64885
- return createElement2([
64890
+ let $row = createElement2([
64886
64891
  "div",
64887
64892
  {
64888
64893
  class: "YDEV_LOGROW YDEV_LOG_" + e.level,
@@ -64897,7 +64902,7 @@ function render_log(e) {
64897
64902
  [
64898
64903
  "span",
64899
64904
  { class: "YDEV_LOG_TXT" },
64900
- e.text
64905
+ ""
64901
64906
  ],
64902
64907
  [
64903
64908
  "span",
@@ -64906,6 +64911,9 @@ function render_log(e) {
64906
64911
  ]
64907
64912
  ]
64908
64913
  ]);
64914
+ let $txt = $row.querySelector(".YDEV_LOG_TXT");
64915
+ if ($txt) $txt.textContent = e.text;
64916
+ return $row;
64909
64917
  }
64910
64918
  function render_entry(e) {
64911
64919
  if (e.kind === "log") return render_log(e);
@@ -64944,15 +64952,28 @@ function rerender_all() {
64944
64952
  }
64945
64953
  }
64946
64954
  logger.replaceChildren(frag);
64947
- if (shown === 0) {
64948
- let $empty = document.createElement("div");
64949
- $empty.className = "YDEV_EMPTY";
64950
- $empty.textContent = TRAFFIC_LOG.length ? "No messages match the current filters." : "Waiting for activity — console logs and errors show automatically; enable Traffic or Automata for more.";
64951
- logger.appendChild($empty);
64952
- }
64955
+ if (shown === 0) logger.appendChild(make_placeholder());
64953
64956
  logger.scrollTop = logger.scrollHeight;
64954
64957
  update_stats();
64955
64958
  }
64959
+ function make_placeholder() {
64960
+ let $empty = document.createElement("div");
64961
+ $empty.className = "YDEV_EMPTY";
64962
+ $empty.textContent = placeholder_text();
64963
+ return $empty;
64964
+ }
64965
+ function placeholder_text() {
64966
+ if (TRAFFIC_LOG.length) return "No messages match the current filters.";
64967
+ return "Waiting for activity — console logs and errors show automatically; enable Traffic or Automata for more.";
64968
+ }
64969
+ function refresh_placeholder() {
64970
+ let logger = document.getElementById("developer-traffic-logger");
64971
+ if (!logger) return;
64972
+ let ph = logger.querySelector(".YDEV_EMPTY");
64973
+ if (!ph) return;
64974
+ let text = placeholder_text();
64975
+ if (ph.textContent !== text) ph.textContent = text;
64976
+ }
64956
64977
  function update_stats() {
64957
64978
  let $s = document.getElementById("ydev-stats");
64958
64979
  if (!$s) return;
@@ -65056,7 +65077,7 @@ function info_traffic(title, msg, direction, size) {
65056
65077
  let ph = logger.querySelector(".YDEV_EMPTY");
65057
65078
  if (ph) ph.remove();
65058
65079
  append_and_follow(logger, node);
65059
- }
65080
+ } else refresh_placeholder();
65060
65081
  update_stats();
65061
65082
  }
65062
65083
  var __in_info_log__ = false;
@@ -65117,7 +65138,7 @@ function info_log(level, msg, hora) {
65117
65138
  let ph = logger.querySelector(".YDEV_EMPTY");
65118
65139
  if (ph) ph.remove();
65119
65140
  append_and_follow(logger, node);
65120
- }
65141
+ } else refresh_placeholder();
65121
65142
  update_stats();
65122
65143
  } finally {
65123
65144
  __in_info_log__ = false;
@@ -65214,7 +65235,7 @@ function refresh_dev_chrome() {
65214
65235
  $b.classList.toggle("is-active", dev_hide_periodic());
65215
65236
  });
65216
65237
  document.querySelectorAll(".YDEV_CHIP[data-toggle=\"automata-simple\"]").forEach(($b) => {
65217
- $b.classList.toggle("is-active", !!dev_num("dev_automata_simple", 0));
65238
+ $b.classList.toggle("is-active", !!dev_simple_mach());
65218
65239
  });
65219
65240
  let $m = document.getElementById("ydev-muted");
65220
65241
  if ($m) {
@@ -65306,13 +65327,13 @@ function build_control_bar() {
65306
65327
  class: "YDEV_CHIP",
65307
65328
  "data-toggle": "automata-simple",
65308
65329
  type: "button",
65309
- title: "Compact automata format (one line per transition, like C)"
65330
+ title: "Machine trace shape. On (default): one line per transition, event first, like the C kernel. Off: the legacy three-line shape (the call, the state change and the return)"
65310
65331
  },
65311
65332
  "Simple mach",
65312
65333
  { click: (ev) => {
65313
65334
  ev.stopPropagation();
65314
- let v = dev_num("dev_automata_simple", 0) ? 0 : 1;
65315
- kw_set_local_storage_value("dev_automata_simple", v);
65335
+ let v = dev_simple_mach() ? 0 : 1;
65336
+ kw_set_local_storage_value(SIMPLE_MACH_KEY, v);
65316
65337
  gobj_set_trace_machine_format(v);
65317
65338
  refresh_dev_chrome();
65318
65339
  } }
@@ -65601,7 +65622,7 @@ function apply_dev_traces() {
65601
65622
  gobj_write_attr(gobj_yuno(), "trace_subscriptions", subscriptions);
65602
65623
  gobj_write_attr(gobj_yuno(), "no_poll", no_poll);
65603
65624
  i18next.options.debug = i18n ? true : false;
65604
- gobj_set_trace_machine_format(Number(kw_get_local_storage_value("dev_automata_simple", 0, false)) ? 1 : 0);
65625
+ gobj_set_trace_machine_format(dev_simple_mach());
65605
65626
  set_log_callback(info_log);
65606
65627
  apply_console_route();
65607
65628
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yuneta/gobj-ui",
3
- "version": "7.23.33",
3
+ "version": "7.23.35",
4
4
  "type": "module",
5
5
  "main": "dist/gobj-ui.cjs.js",
6
6
  "module": "dist/gobj-ui.es.js",
@@ -20,6 +20,31 @@ const STATE_CHANGE =
20
20
  const NOT_DEFINED =
21
21
  "📛 mach(C_X^x), st: ST_IDLE, ev: EV_TIMEOUT, 📛📛ERROR Event NOT DEFINED in state📛📛, from(C_TIMER^t)";
22
22
 
23
+ /* The other four shapes the SIMPLER format emits (gobj-js 7.13.7 gave them
24
+ * their format-1 branch; before that they leaked `mach(…)` into it). */
25
+ const SIMPLE_PUBLISH = "🔝🔝 EV_STATE_CHANGED C_PROT_MQTT^input-2 ST_WAIT_FRAME_HEADER";
26
+ const SIMPLE_FORWARD = "🔝🔄 EV_TX_READY (EV_TX_READY) C_PROT_TCP4H^output-0";
27
+ const SIMPLE_INJECT = "🔜 EV_ON_MESSAGE C_GATE^gate ST_IDLE";
28
+ const SIMPLE_NESTED = " 🔄 EV_ON_MESSAGE C_IOGATE^output-iogate-0 ST_IDLE from C_CHANNEL^output-0";
29
+
30
+ describe("the simpler format's other shapes", () => {
31
+ it("reads the event out of a publish, a forward and an injection", () => {
32
+ expect(machine_event_of(SIMPLE_PUBLISH)).toBe("EV_STATE_CHANGED");
33
+ expect(machine_event_of(SIMPLE_FORWARD)).toBe("EV_TX_READY");
34
+ expect(machine_event_of(SIMPLE_INJECT)).toBe("EV_ON_MESSAGE");
35
+ });
36
+
37
+ it("the leading INDENTATION does not hide the event", () => {
38
+ expect(machine_event_of(SIMPLE_NESTED)).toBe("EV_ON_MESSAGE");
39
+ expect(log_is_periodic("debug", SIMPLE_NESTED)).toBe(false);
40
+ });
41
+
42
+ it("a periodic one is still recognised in every shape", () => {
43
+ expect(log_is_periodic("debug", "🔝🔝 EV_TIMEOUT C_TIMER^t ST_IDLE")).toBe(true);
44
+ expect(log_is_periodic("debug", " 🔜 EV_TIMEOUT_PERIODIC C_YUNO^y ST_IDLE")).toBe(true);
45
+ });
46
+ });
47
+
23
48
  describe("machine_event_of", () => {
24
49
  it("reads the event out of the verbose format, both lines of it", () => {
25
50
  expect(machine_event_of(VERBOSE_IN)).toBe("EV_TIMEOUT");
package/src/yui_dev.js CHANGED
@@ -185,6 +185,35 @@ function dev_view()
185
185
  * chip writes the value it already had and appears to do nothing. */
186
186
  const HIDE_PERIODIC_DEFAULT = 1;
187
187
 
188
+ /* Which SHAPE the machine trace is written in — the two the C kernel
189
+ * offers, and the chip that swaps them:
190
+ *
191
+ * 1 (default) one line per transition, event first
192
+ * 0 the legacy three-line shape: the call, the state
193
+ * change, and the `<- … ret: N` return
194
+ *
195
+ * 1 because that is what the C kernel defaults to, so a browser yuno and
196
+ * a node read alike. Like HIDE_PERIODIC_DEFAULT, a CONSTANT and not a
197
+ * literal in each of the three places that read it (the chip, the chrome
198
+ * and start up): they have to agree on what "unset" means, or the chip
199
+ * is born showing the wrong state and its first click does nothing. */
200
+ const SIMPLE_MACH_DEFAULT = 1;
201
+
202
+ /* A NEW key, deliberately.
203
+ *
204
+ * The default moved from 0 to 1 in 7.23.34, and a stored preference beats a
205
+ * default: every browser that had ever clicked the old `Simple mach` chip
206
+ * carried an explicit 0 and went on reading the legacy shape, so the change
207
+ * reached nobody who had used the window before. A default that cannot reach
208
+ * an existing browser is not a default. The old key is left where it is and
209
+ * simply stops being read. */
210
+ const SIMPLE_MACH_KEY = "dev_mach_simple";
211
+
212
+ function dev_simple_mach()
213
+ {
214
+ return dev_num(SIMPLE_MACH_KEY, SIMPLE_MACH_DEFAULT) ? 1 : 0;
215
+ }
216
+
188
217
  function dev_hide_periodic()
189
218
  {
190
219
  return dev_num("dev_hide_periodic", HIDE_PERIODIC_DEFAULT) ? true : false;
@@ -821,13 +850,29 @@ function render_name(e)
821
850
  /* A mirrored framework log line (error/warning/info/debug/msg). */
822
851
  function render_log(e)
823
852
  {
824
- return createElement2(
853
+ let $row = createElement2(
825
854
  ['div', {class: 'YDEV_LOGROW YDEV_LOG_' + e.level, title: e.level}, [
826
855
  ['span', {class: 'YDEV_LOG_LVL'}, e.level],
827
- ['span', {class: 'YDEV_LOG_TXT'}, e.text],
856
+ ['span', {class: 'YDEV_LOG_TXT'}, ''],
828
857
  ['span', {class: 'TRAFFIC_META'}, e.ts],
829
858
  ]]
830
859
  );
860
+
861
+ /* The text is assigned AFTER, and that is the whole point.
862
+ *
863
+ * createElement2() TRIMS a string content -- it has to, to decide
864
+ * whether the string is HTML by looking at its first character -- and
865
+ * the machine trace's leading spaces are its NESTING: gobj-js prefixes
866
+ * every line with `tab()`, two spaces per level of __inside__, so an
867
+ * event sent from inside another one's action is indented under it.
868
+ * Passed through createElement2 that indentation was eaten, and the
869
+ * window showed a flat column where the console showed a tree. */
870
+ let $txt = $row.querySelector('.YDEV_LOG_TXT');
871
+ if($txt) {
872
+ $txt.textContent = e.text;
873
+ }
874
+
875
+ return $row;
831
876
  }
832
877
 
833
878
  function render_entry(e)
@@ -889,17 +934,55 @@ function rerender_all()
889
934
  }
890
935
  logger.replaceChildren(frag);
891
936
  if(shown === 0) {
892
- let $empty = document.createElement('div');
893
- $empty.className = 'YDEV_EMPTY';
894
- $empty.textContent = TRAFFIC_LOG.length
895
- ? "No messages match the current filters."
896
- : "Waiting for activity — console logs and errors show automatically; enable Traffic or Automata for more.";
897
- logger.appendChild($empty);
937
+ logger.appendChild(make_placeholder());
898
938
  }
899
939
  logger.scrollTop = logger.scrollHeight;
900
940
  update_stats();
901
941
  }
902
942
 
943
+ /* The empty state, which has to say WHICH empty it is. */
944
+ function make_placeholder()
945
+ {
946
+ let $empty = document.createElement('div');
947
+ $empty.className = 'YDEV_EMPTY';
948
+ $empty.textContent = placeholder_text();
949
+ return $empty;
950
+ }
951
+
952
+ function placeholder_text()
953
+ {
954
+ if(TRAFFIC_LOG.length) {
955
+ return "No messages match the current filters.";
956
+ }
957
+ return "Waiting for activity — console logs and errors show automatically; " +
958
+ "enable Traffic or Automata for more.";
959
+ }
960
+
961
+ /* Keep whatever placeholder is on screen TRUTHFUL.
962
+ *
963
+ * A line that arrives and is filtered out changes the answer without
964
+ * changing the screen: the buffer stops being empty, so "Waiting for
965
+ * activity — enable Automata for more" becomes a lie, and the window reads
966
+ * as "nothing is happening, your traces are off" while it is in fact hiding
967
+ * 36 of them. Measured on a yuno with one timer and the Periodic filter on,
968
+ * which is now the default: the status line said `0/36 shown · 36 hidden`
969
+ * and the panel said there was no activity. */
970
+ function refresh_placeholder()
971
+ {
972
+ let logger = document.getElementById('developer-traffic-logger');
973
+ if(!logger) {
974
+ return;
975
+ }
976
+ let ph = logger.querySelector('.YDEV_EMPTY');
977
+ if(!ph) {
978
+ return;
979
+ }
980
+ let text = placeholder_text();
981
+ if(ph.textContent !== text) {
982
+ ph.textContent = text;
983
+ }
984
+ }
985
+
903
986
  /* Live counters in the status strip. */
904
987
  function update_stats()
905
988
  {
@@ -1050,6 +1133,8 @@ function info_traffic(title, msg, direction, size)
1050
1133
  ph.remove();
1051
1134
  }
1052
1135
  append_and_follow(logger, node);
1136
+ } else {
1137
+ refresh_placeholder(); /* hidden, but the buffer is no longer empty */
1053
1138
  }
1054
1139
  update_stats();
1055
1140
  }
@@ -1140,6 +1225,8 @@ function info_log(level, msg, hora)
1140
1225
  ph.remove();
1141
1226
  }
1142
1227
  append_and_follow(logger, node);
1228
+ } else {
1229
+ refresh_placeholder(); /* hidden, but the buffer is no longer empty */
1143
1230
  }
1144
1231
  update_stats();
1145
1232
  } finally {
@@ -1276,7 +1363,7 @@ function refresh_dev_chrome()
1276
1363
  });
1277
1364
 
1278
1365
  document.querySelectorAll('.YDEV_CHIP[data-toggle="automata-simple"]').forEach(($b) => {
1279
- $b.classList.toggle('is-active', !!dev_num('dev_automata_simple', 0));
1366
+ $b.classList.toggle('is-active', !!dev_simple_mach());
1280
1367
  });
1281
1368
 
1282
1369
  let $m = document.getElementById('ydev-muted');
@@ -1384,12 +1471,14 @@ function build_control_bar()
1384
1471
  * emitted while Automata is on. */
1385
1472
  let simple_mach = ['button', {
1386
1473
  class: 'YDEV_CHIP', 'data-toggle': 'automata-simple', type: 'button',
1387
- title: 'Compact automata format (one line per transition, like C)',
1474
+ title: 'Machine trace shape. On (default): one line per transition, ' +
1475
+ 'event first, like the C kernel. Off: the legacy three-line shape ' +
1476
+ '(the call, the state change and the return)',
1388
1477
  }, 'Simple mach', {
1389
1478
  click: (ev) => {
1390
1479
  ev.stopPropagation();
1391
- let v = dev_num('dev_automata_simple', 0) ? 0 : 1;
1392
- kw_set_local_storage_value('dev_automata_simple', v);
1480
+ let v = dev_simple_mach() ? 0 : 1;
1481
+ kw_set_local_storage_value(SIMPLE_MACH_KEY, v);
1393
1482
  gobj_set_trace_machine_format(v);
1394
1483
  refresh_dev_chrome();
1395
1484
  }
@@ -1581,9 +1670,8 @@ function apply_dev_traces()
1581
1670
  gobj_write_attr(gobj_yuno(), "no_poll", no_poll);
1582
1671
  i18next.options.debug = i18n ? true : false;
1583
1672
 
1584
- /* Compact vs verbose automata trace format (persisted). */
1585
- gobj_set_trace_machine_format(
1586
- Number(kw_get_local_storage_value("dev_automata_simple", 0, false)) ? 1 : 0);
1673
+ /* Which shape the machine trace is written in (persisted). */
1674
+ gobj_set_trace_machine_format(dev_simple_mach());
1587
1675
 
1588
1676
  /* Mirror the browser console (log_error/warning/info/debug/msg — the
1589
1677
  * automata FSM trace arrives as debug) into the monitor. info_log no-ops