From d3e5100bf4fb8e8cf9f3db7e432116759efdfe6a Mon Sep 17 00:00:00 2001 From: Diego Imbert Date: Wed, 30 Sep 2026 12:38:48 +0200 Subject: [PATCH] feat: name a schedule node's cadence, like "Every day at 12:00" Co-Authored-By: Claude Opus 5.5 (1M context) --- .../assets/AssetGraph/AssetGraphCanvas.svelte | 9 +- .../assets/AssetGraph/TriggerNode.svelte | 15 ++- .../assets/AssetGraph/resolveGraph.ts | 3 +- .../lib/components/assets/AssetGraph/types.ts | 2 + frontend/src/lib/utils/describeCron.test.ts | 30 +++++ frontend/src/lib/utils/describeCron.ts | 108 ++++++++++++++++++ .../(logged)/pipeline/[folder]/+page.svelte | 35 +++++- 7 files changed, 196 insertions(+), 6 deletions(-) create mode 100644 frontend/src/lib/utils/describeCron.test.ts create mode 100644 frontend/src/lib/utils/describeCron.ts diff --git a/frontend/src/lib/components/assets/AssetGraph/AssetGraphCanvas.svelte b/frontend/src/lib/components/assets/AssetGraph/AssetGraphCanvas.svelte index fb8c2e499e..f21cb5a01f 100644 --- a/frontend/src/lib/components/assets/AssetGraph/AssetGraphCanvas.svelte +++ b/frontend/src/lib/components/assets/AssetGraph/AssetGraphCanvas.svelte @@ -717,6 +717,7 @@ ref: string missing: boolean draft: boolean + schedule?: string // First target script (drives the per-script create/edit flows). runnable_path?: string // Every target script: a single (kind, ref) — e.g. one schedule — @@ -733,7 +734,8 @@ unsaved: boolean, missing: boolean, draft: boolean, - runnable_path?: string + runnable_path?: string, + schedule?: string ) { const prev = triggerSourceNodes.get(id) if (!prev) { @@ -743,6 +745,7 @@ ref, missing, draft, + schedule, runnable_path, runnable_paths: runnable_path ? [runnable_path] : [] }) @@ -798,7 +801,8 @@ // lock. Previously only set for missing, which silently // disabled `canEdit` (and the resulting click affordance) // on every attached native trigger. - t.runnable_path + t.runnable_path, + t.schedule ) edges.push({ id: `trig-${t.trigger_kind}:${sourceId}->${runnableId}`, @@ -827,6 +831,7 @@ unsaved: info.allUnsaved, missing: info.missing, draft: info.draft, + schedule: info.schedule, runnable_path: info.runnable_path, // data_upload nodes go green once a file is staged for their // target script (see readyDataUploadPaths / page dataUploadArgs). diff --git a/frontend/src/lib/components/assets/AssetGraph/TriggerNode.svelte b/frontend/src/lib/components/assets/AssetGraph/TriggerNode.svelte index 6651db9241..72aeab130b 100644 --- a/frontend/src/lib/components/assets/AssetGraph/TriggerNode.svelte +++ b/frontend/src/lib/components/assets/AssetGraph/TriggerNode.svelte @@ -50,6 +50,7 @@