@nodegx/mcp 0.2.7 → 0.2.8

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.
@@ -67829,7 +67829,7 @@ var init_node_catalog = __esm({
67829
67829
  "always: the size it holds now, a bare number read in the unit it held; drawn at the next paint"
67830
67830
  ],
67831
67831
  visible: [
67832
- "always: shown or hidden at the next paint, its space kept; hidden, a Focus does not reach it"
67832
+ "always: shown or hidden at once, its space kept; hidden, a Focus does not reach it"
67833
67833
  ]
67834
67834
  },
67835
67835
  warnings: {
@@ -70014,7 +70014,7 @@ var init_node_catalog = __esm({
70014
70014
  "always: the page, or the scrolling Group holding it, scrolls until the box can be seen"
70015
70015
  ],
70016
70016
  visible: [
70017
- "always: shown or hidden at the next paint, its space kept; hidden, a Focus does not reach it"
70017
+ "always: shown or hidden at once, its space kept; hidden, a Focus does not reach it"
70018
70018
  ]
70019
70019
  },
70020
70020
  warnings: {
@@ -72626,7 +72626,7 @@ var init_node_catalog = __esm({
72626
72626
  "always: the size it holds now, a bare number read in the unit it held; drawn at the next paint"
72627
72627
  ],
72628
72628
  visible: [
72629
- "always: shown or hidden at the next paint, its space kept; hidden, a Focus does not reach it"
72629
+ "always: shown or hidden at once, its space kept; hidden, a Focus does not reach it"
72630
72630
  ]
72631
72631
  },
72632
72632
  warnings: {
@@ -74808,7 +74808,7 @@ var init_node_catalog = __esm({
74808
74808
  "always: the page, or the scrolling Group holding it, scrolls until the button can be seen"
74809
74809
  ],
74810
74810
  visible: [
74811
- "always: shown or hidden at the next paint, its space kept; hidden, it takes no click and a Focus does not reach it"
74811
+ "always: shown or hidden at once, its space kept; hidden, it takes no click and a Focus does not reach it"
74812
74812
  ]
74813
74813
  },
74814
74814
  warnings: {
@@ -77213,7 +77213,7 @@ var init_node_catalog = __esm({
77213
77213
  "always: the size it holds now, a bare number read in the unit it held; drawn at the next paint"
77214
77214
  ],
77215
77215
  visible: [
77216
- "always: shown or hidden at the next paint, its space kept; hidden, a Focus does not reach it"
77216
+ "always: shown or hidden at once, its space kept; hidden, a Focus does not reach it"
77217
77217
  ]
77218
77218
  },
77219
77219
  warnings: {
@@ -80083,7 +80083,7 @@ var init_node_catalog = __esm({
80083
80083
  "always: the size it holds now, a bare number read in the unit it held; drawn at the next paint"
80084
80084
  ],
80085
80085
  visible: [
80086
- "always: shown or hidden at the next paint, its space kept; hidden, a Focus does not reach it"
80086
+ "always: shown or hidden at once, its space kept; hidden, a Focus does not reach it"
80087
80087
  ],
80088
80088
  opacity: [
80089
80089
  "always: how see-through it is; at exactly 0 it takes no pointer, and an act goes to what is behind it"
@@ -84925,7 +84925,7 @@ var init_node_catalog = __esm({
84925
84925
  },
84926
84926
  isSignal: false,
84927
84927
  default: false,
84928
- description: "Whether a request with no valid session token is allowed to run this function at all"
84928
+ description: "Whether a request with no valid session token is allowed to run this function at all. A run the app starts itself \u2014 a schedule, a row change, a run from Studio \u2014 is always allowed and sees nobody signed in; a webhook is a request like any other"
84929
84929
  },
84930
84930
  {
84931
84931
  name: "params",
@@ -111800,7 +111800,10 @@ var init_cloud_request = __esm({
111800
111800
  { headers: { "X-Parse-Session-Token": "t1", origin: "null", host: "h" } },
111801
111801
  { headers: { "x-parse-session-token": "t1" }, body: '{"a":null}', at: 100 },
111802
111802
  { headers: { host: "internal:8577", "x-forwarded-host": "public.example.com", "x-forwarded-proto": "https, http" }, body: '{"total":"7"}' },
111803
- { headers: { origin: ["https://app.example.com/", "https://b.example"], "x-forwarded-proto": "jAvascript", host: "h" }, body: "{}" }
111803
+ { headers: { origin: ["https://app.example.com/", "https://b.example"], "x-forwarded-proto": "jAvascript", host: "h" }, body: "{}" },
111804
+ { headers: {}, body: '{"total":3}', startedByApp: true },
111805
+ { headers: { "x-parse-session-token": "t1" }, body: "{}", startedByApp: true },
111806
+ { headers: { startedbyapp: "true" }, body: '{"startedByApp":true}' }
111804
111807
  ];
111805
111808
  CLOUD = { appId: "app", masterKey: "mk", endpoint: "https://be.example" };
111806
111809
  HOSTS3 = [{}];
@@ -111811,7 +111814,7 @@ var init_cloud_request = __esm({
111811
111814
  HOSTS3.push({ invocation: invocations[0], cloudServices: { ...CLOUD, runId: "run-1" } });
111812
111815
  CloudRequest = defineNode({
111813
111816
  type: "noodl.cloud.request",
111814
- version: 3,
111817
+ version: 4,
111815
111818
  changes: [
111816
111819
  {
111817
111820
  version: 2,
@@ -111824,6 +111827,12 @@ var init_cloud_request = __esm({
111824
111827
  says: "User Id is text (it carries the id of the person the session token resolved to). It was declared a flag, so a wire into a Number read the id as NaN and the canvas offered it to a signal input",
111825
111828
  row: "P107-S97-USERIDBOOLEAN (the Beta sweep s6)",
111826
111829
  migration: { none: "No saved wire stops connecting: measured 106 wires from User Id in 13,839 project files, 70 into script inputs (any type), 35 into text ports, 1 into a record field, none into a signal" }
111830
+ },
111831
+ {
111832
+ version: 4,
111833
+ says: "A run the app starts itself \u2014 a schedule, a row change, a run from Studio \u2014 is not refused when Allow Unauthenticated is off: it runs with nobody signed in. It was refused, so a weekly job could only run a function opened to everyone. A webhook and a direct call are refused as before",
111834
+ row: "P127-BKO006-SCHEDULEAUTH (Richard ruled 2026-10-27: a run the app starts itself counts as the app)",
111835
+ migration: { none: "Nothing a project stores changes: only a run the backend marks as started by the app gets a different answer, and it gets the one its author had to open the function to everyone to get" }
111827
111836
  }
111828
111837
  ],
111829
111838
  source: "packages/noodl-viewer-cloud/src/nodes/cloud/request.ts; packages/noodl-viewer-cloud/src/nodes/cloud/requestContract.ts; packages/noodl-viewer-cloud/src/nodes/cloud/requestOrigin.ts; packages/noodl-viewer-cloud/src/services/userservice.js",
@@ -111850,7 +111859,7 @@ var init_cloud_request = __esm({
111850
111859
  state: { contract: {}, authenticated: void 0, authUserId: void 0, origin: void 0, requestParameters: {}, waiting: void 0 },
111851
111860
  inputs: {
111852
111861
  // :154-163 — held raw, read when the request comes and again when its lookup fails
111853
- allowNoAuth: { type: "boolean", default: false, coerce: "none", displayName: "Allow Unauthenticated", group: "General", description: "Whether a request with no valid session token is allowed to run this function at all", examples: [true, false, "false", 1] },
111862
+ allowNoAuth: { type: "boolean", default: false, coerce: "none", displayName: "Allow Unauthenticated", group: "General", description: "Whether a request with no valid session token is allowed to run this function at all. A run the app starts itself \u2014 a schedule, a row change, a run from Studio \u2014 is always allowed and sees nobody signed in; a webhook is a request like any other", examples: [true, false, "false", 1] },
111854
111863
  // :164-172 — held raw
111855
111864
  params: { type: "stringlist", coerce: "none", editOnly: true, group: "Parameters", description: "Names to pull out of the request body, each becoming an output \u2014 and a Type, Required and Default row to declare what it is", examples: ["total", "total,a", "a,0", "0,1", ""] }
111856
111865
  },
@@ -111897,7 +111906,7 @@ var init_cloud_request = __esm({
111897
111906
  }
111898
111907
  const waiting = { params, headers: req.headers };
111899
111908
  if (!token) {
111900
- if (!i.allowNoAuth) return { send: [], answers: [{ op: "refuse", reason: UNAUTHENTICATED }] };
111909
+ if (!i.allowNoAuth && req.startedByApp !== true) return { send: [], answers: [{ op: "refuse", reason: UNAUTHENTICATED }] };
111901
111910
  return proceed(s, params, req.headers, i, w, { set: {}, send: [] });
111902
111911
  }
111903
111912
  const cloud = w.hostCloud();
@@ -120916,6 +120925,23 @@ var init_wired_grow = __esm({
120916
120925
  }
120917
120926
  });
120918
120927
 
120928
+ // ../nodegx-node-spec/src/nodes/visible-at-once.ts
120929
+ function visibleAtOnceChange(version) {
120930
+ return {
120931
+ version,
120932
+ says: "No app does anything differently. Visible shows or hides the control at once: a Focus sent in the same moment as Visible going on reaches it (Focused fires), and one sent as Visible goes off does nothing. The version before said Visible waited for the next paint, so it lost the first Focus and kept the second; the runtime never did either",
120933
+ row: "BETA-S7-DROPDOWNFOCUSDIVERGE",
120934
+ migration: {
120935
+ none: "The runtime did not change; only the spec stopped saying Visible waits for the next paint. No stored project changes"
120936
+ }
120937
+ };
120938
+ }
120939
+ var init_visible_at_once = __esm({
120940
+ "../nodegx-node-spec/src/nodes/visible-at-once.ts"() {
120941
+ "use strict";
120942
+ }
120943
+ });
120944
+
120919
120945
  // ../nodegx-node-spec/src/nodes/button.ts
120920
120946
  function painted(s) {
120921
120947
  const set = { ...s.pageEnabled === s.enabled ? {} : { pageEnabled: s.enabled }, ...s.pageVisible === s.visible ? {} : { pageVisible: s.visible } };
@@ -120966,6 +120992,7 @@ var init_button = __esm({
120966
120992
  init_icon_source();
120967
120993
  init_repeat_while_saving();
120968
120994
  init_wired_grow();
120995
+ init_visible_at_once();
120969
120996
  NONE = { send: [] };
120970
120997
  Button = defineNode({
120971
120998
  type: "net.noodl.controls.button",
@@ -120973,8 +121000,9 @@ var init_button = __esm({
120973
121000
  // v3 (P109 ISL-031, P107-D30 ruled "Reset and announce"): a control leaving the page (Mounted off) takes Focused, Hover and Pressed with it — each goes false, sent if it was true, with Blurred and Hover End for the ones that were on
120974
121001
  // v4 (NSP-019 R35): a Focus that finds the node off the page shows as its warning until a Focus reaches it, and an Icon Source that is not an icon shows as one until an icon or nothing arrives (`diagnostics`)
120975
121002
  // v5 (NSP-019 R38): a wired Width in a row, or a wired Height in a column, that is a percent shows as its warning (wired-grow.ts)
120976
- version: 6,
120977
- changes: [focusAndIconSourceChange(4), growChange(5), repeatWhileSavingChange(6, "click")],
121003
+ // v7 (BETA-S7-DROPDOWNFOCUSDIVERGE, the spec correcting itself): Visible reaches the element at once, so a Focus in the same frame meets it (visible-at-once.ts)
121004
+ version: 7,
121005
+ changes: [focusAndIconSourceChange(4), growChange(5), repeatWhileSavingChange(6, "click"), visibleAtOnceChange(7)],
120978
121006
  diagnostics: { ...focusDiagnostics(controlFocusNotMounted("button")), ...iconSourceDiagnostics(), ...wiredGrowDiagnostic },
120979
121007
  source: "packages/noodl-viewer-react/src/nodes/controls/button.ts",
120980
121008
  needs: ["person"],
@@ -121160,8 +121188,9 @@ var init_button = __esm({
121160
121188
  // NSP-019 R38 — node.ts :446-458, react-component-node.ts :706-753 (wired-grow.ts)
121161
121189
  width: sizeReducer("width"),
121162
121190
  height: sizeReducer("height"),
121163
- // node-shared-port-definitions.ts :366-375 — the page follows at the next paint
121164
- visible: (_s, v) => ({ says: "always: shown or hidden at the next paint, its space kept; hidden, a Focus does not reach it", set: { visible: !!v }, send: [] })
121191
+ // node-shared-port-definitions.ts :374-388 — written onto the element at once, so a Focus in the same frame meets it
121192
+ // (visible-at-once.ts)
121193
+ visible: (_s, v) => ({ says: "always: shown or hidden at once, its space kept; hidden, a Focus does not reach it", set: { visible: !!v, pageVisible: !!v }, send: [] })
121165
121194
  },
121166
121195
  {
121167
121196
  // placed on the page with its params set — the first paint (react-component-node.ts :1740-1743 reads `wantsToBeMounted`):
@@ -121243,6 +121272,7 @@ var init_checkbox = __esm({
121243
121272
  init_trace();
121244
121273
  init_focus_not_mounted();
121245
121274
  init_icon_source();
121275
+ init_visible_at_once();
121246
121276
  NONE2 = { send: [] };
121247
121277
  Checkbox = defineNode({
121248
121278
  type: "net.noodl.controls.checkbox",
@@ -121251,8 +121281,9 @@ var init_checkbox = __esm({
121251
121281
  // v3 (P109 ISL-031, P107-C64 ruled "Ignore touches, keep hover"): a finger on a disabled control reports nothing — no Pressed, no Pointer Down or Up — as Enabled promises; the pointer's hover still reports
121252
121282
  // v4 (P109 ISL-031, P107-D30 ruled "Reset and announce"): a control leaving the page (Mounted off) takes Focused, Hover and Pressed with it — each goes false, sent if it was true, with Blurred and Hover End for the ones that were on
121253
121283
  // v5 (NSP-019 R35): a Focus that finds the node off the page shows as its warning until a Focus reaches it, and an Icon Source that is not an icon shows as one until an icon or nothing arrives (`diagnostics`)
121254
- version: 5,
121255
- changes: [focusAndIconSourceChange(5)],
121284
+ // v6 (BETA-S7-DROPDOWNFOCUSDIVERGE, the spec correcting itself): Visible reaches the element at once, so a Focus in the same frame meets it (visible-at-once.ts)
121285
+ version: 6,
121286
+ changes: [focusAndIconSourceChange(5), visibleAtOnceChange(6)],
121256
121287
  diagnostics: { ...focusDiagnostics(controlFocusNotMounted("checkbox")), ...iconSourceDiagnostics() },
121257
121288
  source: "packages/noodl-viewer-react/src/nodes/controls/checkbox.ts",
121258
121289
  needs: ["person"],
@@ -121436,8 +121467,9 @@ var init_checkbox = __esm({
121436
121467
  return { says: "it holds the keyboard: it is taken off it, and the Focused state goes false", set: { focused: false, elementFocused: false }, send: ["focusState"], emit: ["onBlur"], outcome: "done" };
121437
121468
  },
121438
121469
  scrollIntoView: () => ({ says: "always: the page, or the scrolling Group holding it, scrolls until the box can be seen", send: [] }),
121439
- // node-shared-port-definitions.ts :366-375 — the page follows at the next paint
121440
- visible: (_s, v) => ({ says: "always: shown or hidden at the next paint, its space kept; hidden, a Focus does not reach it", set: { visible: !!v }, send: [] })
121470
+ // node-shared-port-definitions.ts :374-388 — written onto the element at once, so a Focus in the same frame meets it
121471
+ // (visible-at-once.ts)
121472
+ visible: (_s, v) => ({ says: "always: shown or hidden at once, its space kept; hidden, a Focus does not reach it", set: { visible: !!v, pageVisible: !!v }, send: [] })
121441
121473
  },
121442
121474
  {
121443
121475
  world: { place: (s) => painted2(s) },
@@ -121718,6 +121750,7 @@ var init_text_input = __esm({
121718
121750
  init_repeat_while_saving();
121719
121751
  init_data_attributes();
121720
121752
  init_wired_grow();
121753
+ init_visible_at_once();
121721
121754
  after2 = (s, w) => ({ ...s, ...w.set });
121722
121755
  NOTHING = { send: [] };
121723
121756
  NONE3 = { send: [] };
@@ -121741,8 +121774,9 @@ var init_text_input = __esm({
121741
121774
  // v6 (P109 ISL-031, P107-D30 ruled "Reset and announce"): a control leaving the page (Mounted off) takes Focused, Hover and Pressed with it — each goes false, sent if it was true, with Blurred and Hover End for the ones that were on
121742
121775
  // v7 (NSP-019 R35): a Focus that finds the node off the page shows as its warning until a Focus reaches it, and an Icon Source that is not an icon shows as one until an icon or nothing arrives (`diagnostics`)
121743
121776
  // v8 (NSP-019 R38): a wired Width in a row, or a wired Height in a column, that is a percent shows as its warning (wired-grow.ts)
121744
- version: 9,
121745
- changes: [focusAndIconSourceChange(7), growChange(8), repeatWhileSavingChange(9, "Enter")],
121777
+ // v10 (BETA-S7-DROPDOWNFOCUSDIVERGE, the spec correcting itself): Visible reaches the element at once, so a Focus in the same frame meets it (visible-at-once.ts)
121778
+ version: 10,
121779
+ changes: [focusAndIconSourceChange(7), growChange(8), repeatWhileSavingChange(9, "Enter"), visibleAtOnceChange(10)],
121746
121780
  diagnostics: { ...focusDiagnostics(FIELD_FOCUS_NOT_MOUNTED), ...iconSourceDiagnostics(), ...wiredGrowDiagnostic },
121747
121781
  source: "packages/noodl-viewer-react/src/nodes/controls/text-input.ts",
121748
121782
  needs: ["person"],
@@ -122063,9 +122097,10 @@ var init_text_input = __esm({
122063
122097
  // NSP-019 R38 — node.ts :446-458, react-component-node.ts :706-753 (wired-grow.ts)
122064
122098
  width: sizeReducer("width"),
122065
122099
  height: sizeReducer("height"),
122066
- // node-shared-port-definitions.ts :366-375, :320-328 — the page follows at the next paint (TextInput.tsx :118-120 compares the
122067
- // Opacity the style holds with the number 0)
122068
- visible: (_s, v) => ({ says: "always: shown or hidden at the next paint, its space kept; hidden, a Focus does not reach it", set: { visible: !!v }, send: [] }),
122100
+ // node-shared-port-definitions.ts :374-388 — written onto the element at once, so a Focus in the same frame meets it
122101
+ // (visible-at-once.ts); Opacity (:320-328) follows at the next paint (TextInput.tsx :118-120 compares the Opacity the style
122102
+ // holds with the number 0)
122103
+ visible: (_s, v) => ({ says: "always: shown or hidden at once, its space kept; hidden, a Focus does not reach it", set: { visible: !!v, pageVisible: !!v }, send: [] }),
122069
122104
  opacity: (_s, v) => ({ says: "always: how see-through it is; at exactly 0 it takes no pointer, and an act goes to what is behind it", set: { opacityZero: v === 0 }, send: [] })
122070
122105
  },
122071
122106
  {
@@ -122274,6 +122309,7 @@ var init_dropdown = __esm({
122274
122309
  init_icon_source();
122275
122310
  init_data_attributes();
122276
122311
  init_wired_grow();
122312
+ init_visible_at_once();
122277
122313
  NOTHING2 = { send: [] };
122278
122314
  NONE4 = { send: [] };
122279
122315
  DEFAULT_ITEMS = [
@@ -122298,7 +122334,8 @@ var init_dropdown = __esm({
122298
122334
  // v10 (NSP-019 R38): a wired Width in a row, or a wired Height in a column, that is a percent shows as its warning (wired-grow.ts)
122299
122335
  // v11 (P121-TWO005-DROPDOWNSTALE): Items that do not offer the placed node's seed ("Option 1") clear it to '' and send Value
122300
122336
  // v12 (BETA-S7-DROPDOWNFIRSTPICK): with the value in no option, the element keeps its hidden empty option selected, so every option is a pick
122301
- version: 12,
122337
+ // v13 (BETA-S7-DROPDOWNFOCUSDIVERGE, the spec correcting itself): Visible reaches the element at once, so a Focus in the same frame meets it (visible-at-once.ts)
122338
+ version: 13,
122302
122339
  // NSP-010 — v7 is the spec correcting itself, not the runtime changing
122303
122340
  changes: [
122304
122341
  {
@@ -122334,7 +122371,8 @@ var init_dropdown = __esm({
122334
122371
  migration: {
122335
122372
  none: "A pick that did nothing now does what the person asked; nothing an app could rely on, and no stored project changes"
122336
122373
  }
122337
- }
122374
+ },
122375
+ visibleAtOnceChange(13)
122338
122376
  ],
122339
122377
  diagnostics: { ...focusDiagnostics(controlFocusNotMounted("dropdown")), ...iconSourceDiagnostics(), ...wiredGrowDiagnostic },
122340
122378
  source: "packages/noodl-viewer-react/src/nodes/controls/options.ts",
@@ -122616,8 +122654,9 @@ var init_dropdown = __esm({
122616
122654
  // NSP-019 R38 — node.ts :446-458, react-component-node.ts :706-753 (wired-grow.ts)
122617
122655
  width: sizeReducer("width"),
122618
122656
  height: sizeReducer("height"),
122619
- // node-shared-port-definitions.ts :366-375 — the page follows at the next paint
122620
- visible: (_s, v) => ({ says: "always: shown or hidden at the next paint, its space kept; hidden, a Focus does not reach it", set: { visible: !!v }, send: [] })
122657
+ // node-shared-port-definitions.ts :374-388 — written onto the element at once, so a Focus in the same frame meets it
122658
+ // (visible-at-once.ts)
122659
+ visible: (_s, v) => ({ says: "always: shown or hidden at once, its space kept; hidden, a Focus does not reach it", set: { visible: !!v, pageVisible: !!v }, send: [] })
122621
122660
  },
122622
122661
  {
122623
122662
  // react-component-node.ts :785-830 `DATA_ATTRIBUTES_RULE` — one string input per name the Data Attributes list names, written
@@ -122792,6 +122831,7 @@ var init_slider = __esm({
122792
122831
  init_trace();
122793
122832
  init_focus_not_mounted();
122794
122833
  init_wired_grow();
122834
+ init_visible_at_once();
122795
122835
  MAX_BELOW_MIN = "slider/max-below-min";
122796
122836
  VALUE_NOT_A_NUMBER = "slider/value-not-a-number";
122797
122837
  NONE5 = { send: [] };
@@ -122803,7 +122843,8 @@ var init_slider = __esm({
122803
122843
  // v7 (NSP-019 R39, ruled "Yes, warn"): a Max below Min warns, as the Counter's Min above Max does; and a Value that is not a
122804
122844
  // number, which the runtime always reported on the error bus, is declared with it (the editor records the `slider/` keys)
122805
122845
  // v8 (NSP-019 R38): a wired Width in a row that is a percent shows as its warning (wired-grow.ts)
122806
- version: 8,
122846
+ // v9 (BETA-S7-DROPDOWNFOCUSDIVERGE, the spec correcting itself): Visible reaches the element at once, so a Focus in the same frame meets it (visible-at-once.ts)
122847
+ version: 9,
122807
122848
  changes: [
122808
122849
  focusChange(6),
122809
122850
  {
@@ -122812,7 +122853,8 @@ var init_slider = __esm({
122812
122853
  row: "NSP-019 R39 (P107 s104)",
122813
122854
  migration: { none: "Only the editor is told. Nothing a wire carries changes, and nothing a person does moves differently" }
122814
122855
  },
122815
- growChange(8)
122856
+ growChange(8),
122857
+ visibleAtOnceChange(9)
122816
122858
  ],
122817
122859
  diagnostics: {
122818
122860
  ...focusDiagnostics(controlFocusNotMounted("slider")),
@@ -123046,8 +123088,9 @@ var init_slider = __esm({
123046
123088
  scrollIntoView: () => ({ says: "always: the page, or the scrolling Group holding it, scrolls until the slider can be seen", send: [] }),
123047
123089
  // NSP-019 R38 — node.ts :446-458, react-component-node.ts :706-753 (wired-grow.ts)
123048
123090
  width: sizeReducer("width", false),
123049
- // node-shared-port-definitions.ts :366-375 — the page follows at the next paint
123050
- visible: (_s, v) => ({ says: "always: shown or hidden at the next paint, its space kept; hidden, a Focus does not reach it", set: { visible: !!v }, send: [] })
123091
+ // node-shared-port-definitions.ts :374-388 — written onto the element at once, so a Focus in the same frame meets it
123092
+ // (visible-at-once.ts)
123093
+ visible: (_s, v) => ({ says: "always: shown or hidden at once, its space kept; hidden, a Focus does not reach it", set: { visible: !!v, pageVisible: !!v }, send: [] })
123051
123094
  },
123052
123095
  {
123053
123096
  // placed on the page with its params set — the first render: Did Mount, and the mount's effect (Slider.tsx :88-90)
@@ -126376,7 +126419,7 @@ var init_video = __esm({
126376
126419
  autoplay: (_s, v) => ({ says: "always: drawn at the next paint, and read as a load completes \u2014 on, a video that may play (Muted, or a person has acted on the page) and that Pause or Reset has not stopped since the load began starts by itself: On Can Play, then On Play", set: { autoplay: v }, send: [] }),
126377
126420
  loop: (_s, v) => ({ says: "always: drawn at the next paint, and read as the video reaches its end \u2014 on, it goes back to the start and plays on; off, it pauses there (On Pause)", set: { loop: v }, send: [] }),
126378
126421
  // :35-47 — on the component, or waiting for it with the actions (`sourceObject`: only a `<video>` takes one, and only nothing is
126379
- // seen to change it; C96, C99 on the runtime)
126422
+ // seen to change it; C99 on the runtime)
126380
126423
  srcObject: (s, v) => {
126381
126424
  if (!s.onPage) return said("off the page: waits for the element behind the actions already waiting, in order, and is written at the paint that puts the video there (at most 16 wait, and the oldest is pushed out)", toPatch2(waitFor(s, { srcObject: v })));
126382
126425
  if (s.kind !== "video" || v !== void 0) return { says: "null (what it already has), a value that is not a stream, or anything on an embedded player: nothing changes \u2014 a live stream itself plays in place of Source, and no scenario holds one", set: {}, send: [], emit: [] };
@@ -129660,6 +129703,7 @@ var init_radiobutton = __esm({
129660
129703
  init_focus_not_mounted();
129661
129704
  init_icon_source();
129662
129705
  init_radiobuttongroup();
129706
+ init_visible_at_once();
129663
129707
  SIBLINGS = ["a", "b"];
129664
129708
  NOTHING10 = { send: [] };
129665
129709
  NONE14 = { set: {}, send: [], emit: [] };
@@ -129670,8 +129714,9 @@ var init_radiobutton = __esm({
129670
129714
  // v3 (P109 ISL-031, P107-C64 ruled "Ignore touches, keep hover"): a finger on a disabled control reports nothing — no Pressed, no Pointer Down or Up — as Enabled promises; the pointer's hover still reports
129671
129715
  // v4 (P109 ISL-031, P107-D30 ruled "Reset and announce"): a control leaving the page (Mounted off) takes Focused, Hover and Pressed with it — each goes false, sent if it was true, with Blurred and Hover End for the ones that were on
129672
129716
  // v5 (NSP-019 R35): a Focus that finds the node off the page shows as its warning until a Focus reaches it, and an Icon Source that is not an icon shows as one until an icon or nothing arrives (`diagnostics`)
129673
- version: 5,
129674
- changes: [focusAndIconSourceChange(5)],
129717
+ // v6 (BETA-S7-DROPDOWNFOCUSDIVERGE, the spec correcting itself): Visible reaches the element at once, so a Focus in the same frame meets it (visible-at-once.ts)
129718
+ version: 6,
129719
+ changes: [focusAndIconSourceChange(5), visibleAtOnceChange(6)],
129675
129720
  diagnostics: { ...focusDiagnostics(controlFocusNotMounted("radio button")), ...iconSourceDiagnostics() },
129676
129721
  source: "packages/noodl-viewer-react/src/nodes/controls/radiobutton.ts",
129677
129722
  needs: ["person", "group"],
@@ -129863,8 +129908,9 @@ var init_radiobutton = __esm({
129863
129908
  return { says: "it holds the keyboard: it is taken off it, and the Focused state goes false", set: { focused: false, elementFocused: false }, send: ["focusState"], emit: ["onBlur"], outcome: "done" };
129864
129909
  },
129865
129910
  scrollIntoView: () => ({ says: "always: the page, or the scrolling Group holding it, scrolls until the button can be seen", send: [] }),
129866
- // node-shared-port-definitions.ts :366-375 — the page follows at the next paint
129867
- visible: (_s, v) => ({ says: "always: shown or hidden at the next paint, its space kept; hidden, it takes no click and a Focus does not reach it", set: { visible: !!v }, send: [] })
129911
+ // node-shared-port-definitions.ts :374-388 — written onto the element at once, so a Focus in the same frame meets it
129912
+ // (visible-at-once.ts)
129913
+ visible: (_s, v) => ({ says: "always: shown or hidden at once, its space kept; hidden, it takes no click and a Focus does not reach it", set: { visible: !!v, pageVisible: !!v }, send: [] })
129868
129914
  },
129869
129915
  {
129870
129916
  world: {
@@ -133470,7 +133516,7 @@ function applyReturn(s, r) {
133470
133516
  if (r.inProgress) return { set: { signingIn: true }, send: ["signingIn"] };
133471
133517
  if (s.returned) return { send: [] };
133472
133518
  if (r.succeeded) {
133473
- return { set: { signingIn: false, notice: r.notice, error: void 0, returned: true }, send: ["signingIn", "notice", "error"], opens: [{ outcome: "done" }] };
133519
+ return { set: { signingIn: false, notice: r.notice, error: "", returned: true }, send: ["signingIn", "notice", "error"], opens: [{ outcome: "done" }] };
133474
133520
  }
133475
133521
  return { set: { signingIn: false, error: r.error || SIGN_IN_NOT_COMPLETED, returned: true }, send: ["signingIn", "error"], opens: [{ outcome: "failure", error: SIGN_IN_WITH_ERROR_CODE }] };
133476
133522
  }
@@ -133538,7 +133584,19 @@ var init_user_handovers = __esm({
133538
133584
  // v1 played the launcher only; no v1 trace moves (no v1 world carried a return)
133539
133585
  // v3 (P109 ISL-030, row C50 ruled "Fire it once"): a return's final state is reported once per page load; v2 reported a
133540
133586
  // provider's error twice — at mount and at the announcement a tick later.
133541
- version: 3,
133587
+ // v4 (Beta sweep s19, row P109-S24-SIGNINWITHERRORKEPT ruled "Blank text, like magic link"): a succeeded return clears Error
133588
+ // to blank text and sends it, as Request Magic Link's Done does (D25); v3 cleared it to `undefined`, never sent.
133589
+ version: 4,
133590
+ changes: [
133591
+ {
133592
+ version: 4,
133593
+ says: "A sign-in that comes back succeeded clears Error to blank text and sends it, so a label wired to Error lets go of the last failure (before, the clear was nothing, which never reaches a wire)",
133594
+ row: "P109-S24-SIGNINWITHERRORKEPT",
133595
+ migration: {
133596
+ none: "A page load gets one sign-in back and the node is new on it, so its Error never held an earlier failure: no project can see the before"
133597
+ }
133598
+ }
133599
+ ],
133542
133600
  source: "packages/noodl-viewer-react/src/nodes/std-library/user/signinwith.ts; userservice.ts; RestAuthAdapter.ts; ParseAuthAdapter.ts",
133543
133601
  needs: ["backend", "registry", "clock"],
133544
133602
  worldPool: { backends: [...pool("signInWithProvider", null), ...RETURNS] },
@@ -151525,7 +151583,7 @@ var init_cloud_node_library = __esm({
151525
151583
  plug: "input",
151526
151584
  group: "General",
151527
151585
  displayName: "Allow Unauthenticated",
151528
- description: "Whether a request with no valid session token is allowed to run this function at all",
151586
+ description: "Whether a request with no valid session token is allowed to run this function at all. A run the app starts itself \u2014 a schedule, a row change, a run from Studio \u2014 is always allowed and sees nobody signed in; a webhook is a request like any other",
151529
151587
  default: false
151530
151588
  },
151531
151589
  {