Skip to content

Commit f3d0742

Browse files
authored
Merge pull request #9 from wavezync/feat/dashboard-upgrades
feat: Engine durability hardening + dashboard redesign
2 parents 2cb04b7 + c2be144 commit f3d0742

92 files changed

Lines changed: 8024 additions & 1321 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.claude/settings.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"enabledPlugins": {
3+
"frontend-design@claude-plugins-official": true
4+
}
5+
}

.github/workflows/ci.yml

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ jobs:
2626
steps:
2727
- uses: actions/checkout@v6
2828

29-
- uses: dorny/paths-filter@v3
29+
- uses: dorny/paths-filter@v4
3030
id: filter
3131
with:
3232
filters: |
@@ -72,14 +72,14 @@ jobs:
7272
otp-version: ${{ env.OTP_VERSION }}
7373

7474
- name: Restore dependencies cache
75-
uses: actions/cache@v4
75+
uses: actions/cache@v6
7676
with:
7777
path: durable/deps
7878
key: ${{ runner.os }}-durable-mix-${{ hashFiles('durable/mix.lock') }}
7979
restore-keys: ${{ runner.os }}-durable-mix-
8080

8181
- name: Restore build cache
82-
uses: actions/cache@v4
82+
uses: actions/cache@v6
8383
with:
8484
path: durable/_build
8585
key: ${{ runner.os }}-durable-build-${{ env.OTP_VERSION }}-${{ env.ELIXIR_VERSION }}-${{ hashFiles('durable/mix.lock') }}
@@ -120,26 +120,26 @@ jobs:
120120
otp-version: ${{ env.OTP_VERSION }}
121121

122122
- name: Set up pnpm
123-
uses: pnpm/action-setup@v4
123+
uses: pnpm/action-setup@v6
124124
with:
125125
version: 9
126126

127127
- name: Set up Node
128-
uses: actions/setup-node@v4
128+
uses: actions/setup-node@v6
129129
with:
130130
node-version: "20"
131131
cache: pnpm
132132
cache-dependency-path: durable_dashboard/assets/pnpm-lock.yaml
133133

134134
- name: Restore dependencies cache
135-
uses: actions/cache@v4
135+
uses: actions/cache@v6
136136
with:
137137
path: durable_dashboard/deps
138138
key: ${{ runner.os }}-dashboard-mix-${{ hashFiles('durable_dashboard/mix.lock', 'durable/mix.lock') }}
139139
restore-keys: ${{ runner.os }}-dashboard-mix-
140140

141141
- name: Restore build cache
142-
uses: actions/cache@v4
142+
uses: actions/cache@v6
143143
with:
144144
path: durable_dashboard/_build
145145
key: ${{ runner.os }}-dashboard-build-${{ env.OTP_VERSION }}-${{ env.ELIXIR_VERSION }}-${{ hashFiles('durable_dashboard/mix.lock', 'durable/mix.lock') }}

durable/README.md

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -544,13 +544,14 @@ The macro adds the dashboard's pipelines, asset routes, and live routes
544544
in-place — no `forward`, no extra endpoint. You get:
545545

546546
- Overview with live status counts and recent executions
547-
- Workflow list with filters, search, and pagination
548-
- Workflow detail with summary, ReactFlow graph, topology, logs, I/O,
549-
and child execution history
547+
- Workflow catalog + an Executions list with a faceted filter bar (workflow,
548+
status, time range, execution id) driven by shareable URL params
549+
- Execution detail with Summary, ReactFlow graph, Timeline, Logs, I/O, and
550+
History trace (plus a Family tab for parent/child runs)
550551
- Pending inputs queue
551552
- Schedules list with toggle / trigger actions
552553
- Settings view
553-
- ⌘K command palette
554+
- ⌘K command palette — jump to any page, workflow, or recent run
554555

555556
See [`durable_dashboard/README.md`](durable_dashboard/) for the full
556557
option list and design notes.

durable/lib/durable/config.ex

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,8 @@ defmodule Durable.Config do
4545
heartbeat_interval: pos_integer(),
4646
scheduled_modules: [module()],
4747
scheduler_interval: pos_integer(),
48+
sleep_waker_interval: pos_integer(),
49+
sleep_waker_batch_size: pos_integer(),
4850
log_level: false | :debug | :info | :warning | :error,
4951
pubsub: atom() | nil,
5052
owns_pubsub?: boolean()
@@ -60,6 +62,8 @@ defmodule Durable.Config do
6062
:heartbeat_interval,
6163
:scheduled_modules,
6264
:scheduler_interval,
65+
:sleep_waker_interval,
66+
:sleep_waker_batch_size,
6367
:log_level,
6468
:pubsub,
6569
owns_pubsub?: false
@@ -111,6 +115,18 @@ defmodule Durable.Config do
111115
default: 60_000,
112116
doc: "Milliseconds between scheduler polls for due schedules"
113117
],
118+
sleep_waker_interval: [
119+
type: :pos_integer,
120+
default: 1_000,
121+
doc:
122+
"Milliseconds between sleep-waker sweeps that revive workflows " <>
123+
"whose `sleep/1` or `schedule_at/1` wait has elapsed"
124+
],
125+
sleep_waker_batch_size: [
126+
type: :pos_integer,
127+
default: 100,
128+
doc: "Maximum number of sleeping workflows to wake in a single sweep"
129+
],
114130
log_level: [
115131
type: {:in, [false, :debug, :info, :warning, :error]},
116132
default: false,

0 commit comments

Comments
 (0)