Diego Imbert and Claude Opus 5
34ed0c4230
feat(datatables): put a data table's connection under Postgres roles
...
A data table backed by the instance database resolved to exactly one Postgres connection,
`custom_instance_user`, for everyone who could reach it at all. There was no way to say
this job reads, that one writes, this one never sees the salaries table.
A data table role is now a real Postgres login on the cluster, defined once for the
instance by a superadmin and named exactly as they named it. A script that declares
`-- role analytics` connects as `analytics`, and Postgres decides what it may touch —
grants are ordinary SQL. Windmill answers only "may this caller ask for this role", from
the tenant lists on the data table entry: `u/alice`, `g/analysts`, `f/finance` or `*`.
A data table with no `permissions` block behaves exactly as before.
Everything that opens a connection on someone's behalf goes through one chokepoint,
`get_datatable_resource_from_db`, which takes the identity explicitly and fails closed when
there is none. The role logs in as itself — never `SET ROLE`, which a script could
`RESET ROLE` its way out of.
A fork's data table entry becomes a pointer at the workspace that governs it rather than a
copy of it. The settings clone used to hand a fork a byte-identical entry naming the
parent's database, which a fork admin could edit to grant themselves `admin` there; a
pointer has nothing local to edit, and its tenants are evaluated as a member of the
governing workspace, by email. `permissions` is stripped from the workspace export and
ignored on import: tenants name principals of one workspace, and a settings push is not
where an access decision should be made.
Operations that see the whole database whatever the roles grant stay with the governing
workspace's admins: editing the roles, a migration that declares none, and opening a
replication stream for a Postgres trigger or capture.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_012ti5HyeTikPMYyW8YSdiHR
2026-09-17 10:01:15 +02:00
Ruben Fiszel and rubenfiszel
c3e11bd223
chore(main): release 1.813.0 ( #11141 )
...
* chore(main): release 1.813.0
* Apply automatic changes
---------
Co-authored-by: rubenfiszel <275584+rubenfiszel@users.noreply.github.com >
2026-09-16 12:12:22 +02:00
Ruben Fiszel
e8078f2a96
fix: dispatch workflow-as-code tasks from a deployed flow's inline step ( #11146 )
...
* fix: dispatch workflow-as-code tasks from a deployed flow's inline step
* fix: give a workflow-as-code task its own result-cache key
* fix: key a cached workflow-as-code task on its name and arguments
* fix: hash a cached workflow-as-code task's arguments like any job's
* chore: regenerate system prompts for the task cache_ttl docs
* fix: key a cached workflow-as-code task on its step key, not its name
* fix: key a cached workflow-as-code task on a fingerprint of its code
* fix: keep the task() doc attached to task()
* fix: key a cached inline task on its step key and the workflow input
* docs: cache_ttl has no effect on a taskFlow target
2026-09-16 09:58:29 +02:00
Ruben Fiszel and rubenfiszel
9fe493311d
chore(main): release 1.812.0 ( #11111 )
...
* chore(main): release 1.812.0
* Apply automatic changes
---------
Co-authored-by: rubenfiszel <275584+rubenfiszel@users.noreply.github.com >
2026-09-15 11:40:01 +02:00
Ruben Fiszel and rubenfiszel
7b89e37322
chore(main): release 1.811.1 ( #11107 )
...
* chore(main): release 1.811.1
* Apply automatic changes
---------
Co-authored-by: rubenfiszel <275584+rubenfiszel@users.noreply.github.com >
2026-09-13 18:40:23 +00:00
Ruben Fiszel and rubenfiszel
62d4632fad
chore(main): release 1.811.0 ( #11098 )
...
* chore(main): release 1.811.0
* Apply automatic changes
---------
Co-authored-by: rubenfiszel <275584+rubenfiszel@users.noreply.github.com >
2026-09-12 10:06:30 +02:00
Ruben Fiszel and rubenfiszel
4a293cf77a
chore(main): release 1.810.0 ( #11079 )
...
* chore(main): release 1.810.0
* Apply automatic changes
---------
Co-authored-by: rubenfiszel <275584+rubenfiszel@users.noreply.github.com >
2026-09-11 19:02:12 +02:00
Ruben Fiszel and rubenfiszel
7915540f66
chore(main): release 1.809.0 ( #11045 )
...
* chore(main): release 1.809.0
* Apply automatic changes
---------
Co-authored-by: rubenfiszel <275584+rubenfiszel@users.noreply.github.com >
2026-09-10 22:57:04 +02:00
63cb46d7bb
feat: add a minimal skin for the approval page and slack/teams ( #11061 )
...
* feat: add an approval skin to the approval page and slack/teams messages
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01KK2Ye4PizykReZVuMEm3m9
* chore: point ee-repo-ref at the teams approval skin commit
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01KK2Ye4PizykReZVuMEm3m9
* fix: resolve the approval skin from the step awaiting approval
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01KK2Ye4PizykReZVuMEm3m9
* fix: shorten the slack approval message to fit the button value limit
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01KK2Ye4PizykReZVuMEm3m9
* fix: rename skins to detailed/minimal and keep long slack messages
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01KK2Ye4PizykReZVuMEm3m9
* feat: title the minimal approval page from the step and flow summaries
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01KK2Ye4PizykReZVuMEm3m9
* feat: let wait_for_approval set the description approvers see
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01KK2Ye4PizykReZVuMEm3m9
* fix: keep a finished workflow's approval description, still gated
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01KK2Ye4PizykReZVuMEm3m9
* fix: keep a login-required approval locked after the run moves on
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01KK2Ye4PizykReZVuMEm3m9
* feat: hide the windmill version on the approval page
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01KK2Ye4PizykReZVuMEm3m9
* chore: update ee-repo-ref to e92abc9d1fba3ba898640df0cfeb0af8a50849b4
This commit updates the EE repository reference after PR #786 was merged in windmill-ee-private.
Previous ee-repo-ref: bf1766ff49458f62d3f11746f1a06893ae3c2325
New ee-repo-ref: e92abc9d1fba3ba898640df0cfeb0af8a50849b4
Automated by sync-ee-ref workflow.
---------
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com >
Co-authored-by: windmill-internal-app[bot] <windmill-internal-app[bot]@users.noreply.github.com>
2026-09-10 18:50:09 +00:00
Ruben Fiszel and rubenfiszel
133e21080a
chore(main): release 1.808.0 ( #11043 )
...
* chore(main): release 1.808.0
* Apply automatic changes
---------
Co-authored-by: rubenfiszel <275584+rubenfiszel@users.noreply.github.com >
2026-09-09 12:35:50 +00:00
Ruben Fiszel and rubenfiszel
22c1a106cf
chore(main): release 1.807.0 ( #11034 )
...
* chore(main): release 1.807.0
* Apply automatic changes
---------
Co-authored-by: rubenfiszel <275584+rubenfiszel@users.noreply.github.com >
2026-09-09 10:04:17 +00:00
Ruben Fiszel and rubenfiszel
63c40f046b
chore(main): release 1.806.0 ( #11012 )
...
* chore(main): release 1.806.0
* Apply automatic changes
---------
Co-authored-by: rubenfiszel <275584+rubenfiszel@users.noreply.github.com >
2026-09-08 18:04:06 +02:00
Ruben Fiszel and Claude Opus 5
d3f305db98
feat: retry a workflow-as-code task from its task options ( #11013 )
...
* feat: retry a workflow-as-code task from its task options
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01WvjgKMRNtRNPnAkg6MkiTA
* fix: claim every retry attempt key up front, so a step cannot alias one
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01WvjgKMRNtRNPnAkg6MkiTA
* fix: bound retry attempts, which now claim their keys up front
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01WvjgKMRNtRNPnAkg6MkiTA
* fix: honour an explicit zero retry multiplier in the python client
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01WvjgKMRNtRNPnAkg6MkiTA
* docs: state the retry validation rules once in the task docstring
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01WvjgKMRNtRNPnAkg6MkiTA
---------
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com >
2026-09-08 11:37:56 +02:00
Ruben Fiszel and rubenfiszel
a9d42b489f
chore(main): release 1.805.0 ( #10995 )
...
* chore(main): release 1.805.0
* Apply automatic changes
---------
Co-authored-by: rubenfiszel <275584+rubenfiszel@users.noreply.github.com >
2026-09-07 18:20:28 +00:00
Ruben Fiszel and rubenfiszel
c37f59e22a
chore(main): release 1.804.0 ( #10963 )
...
* chore(main): release 1.804.0
* Apply automatic changes
---------
Co-authored-by: rubenfiszel <275584+rubenfiszel@users.noreply.github.com >
2026-09-05 11:11:54 +00:00
Ruben Fiszel and rubenfiszel
38fc0d3a12
chore(main): release 1.803.0 ( #10952 )
...
* chore(main): release 1.803.0
* Apply automatic changes
---------
Co-authored-by: rubenfiszel <275584+rubenfiszel@users.noreply.github.com >
2026-09-03 13:08:33 +02:00
Ruben Fiszel and rubenfiszel
74c1813f98
chore(main): release 1.801.0 ( #10921 )
...
* chore(main): release 1.801.0
* Apply automatic changes
---------
Co-authored-by: rubenfiszel <275584+rubenfiszel@users.noreply.github.com >
2026-09-02 01:01:01 +02:00
Ruben Fiszel and rubenfiszel
870f67121d
chore(main): release 1.800.1 ( #10910 )
...
* chore(main): release 1.800.1
* Apply automatic changes
---------
Co-authored-by: rubenfiszel <275584+rubenfiszel@users.noreply.github.com >
2026-09-01 11:34:32 +02:00
Ruben Fiszel and rubenfiszel
412eb90c0d
chore(main): release 1.800.0 ( #10888 )
...
* chore(main): release 1.800.0
* Apply automatic changes
---------
Co-authored-by: rubenfiszel <275584+rubenfiszel@users.noreply.github.com >
2026-08-31 20:29:23 +02:00
Ruben Fiszel and rubenfiszel
7a0c81d722
chore(main): release 1.799.0 ( #10874 )
...
* chore(main): release 1.799.0
* Apply automatic changes
---------
Co-authored-by: rubenfiszel <275584+rubenfiszel@users.noreply.github.com >
2026-08-28 17:26:18 +02:00
Ruben Fiszel and rubenfiszel
90b40fffc3
chore(main): release 1.798.1 ( #10870 )
...
* chore(main): release 1.798.1
* Apply automatic changes
---------
Co-authored-by: rubenfiszel <275584+rubenfiszel@users.noreply.github.com >
2026-08-27 12:00:45 +02:00
Ruben Fiszel and rubenfiszel
2302e58c24
chore(main): release 1.798.0 ( #10868 )
...
* chore(main): release 1.798.0
* Apply automatic changes
---------
Co-authored-by: rubenfiszel <275584+rubenfiszel@users.noreply.github.com >
2026-08-27 11:07:15 +02:00
Ruben Fiszel and rubenfiszel
52ca19e9ae
chore(main): release 1.797.0 ( #10848 )
...
* chore(main): release 1.797.0
* Apply automatic changes
---------
Co-authored-by: rubenfiszel <275584+rubenfiszel@users.noreply.github.com >
2026-08-27 10:15:23 +02:00
Diego Imbert and Claude Opus 5
8a6dc27236
feat: configurable expiry for presigned s3 public url signatures ( #10835 )
...
* feat: configurable expiry for presigned s3 public url signatures
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_015JdZFeMXLGfeFNiQgx9QvA
* fix: describe expiry_secs clamping in the spec and pin the bounds in a test
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_015JdZFeMXLGfeFNiQgx9QvA
* fix: omit null expiry_secs from the python sdk sign request
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_015JdZFeMXLGfeFNiQgx9QvA
---------
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com >
2026-08-26 00:47:24 +02:00
Ruben Fiszel and rubenfiszel
0f3d884c6f
chore(main): release 1.796.0 ( #10810 )
...
* chore(main): release 1.796.0
* Apply automatic changes
---------
Co-authored-by: rubenfiszel <275584+rubenfiszel@users.noreply.github.com >
2026-08-24 22:42:33 +02:00
Ruben Fiszel and rubenfiszel
74af4ed939
chore(main): release 1.795.0 ( #10807 )
...
* chore(main): release 1.795.0
* Apply automatic changes
---------
Co-authored-by: rubenfiszel <275584+rubenfiszel@users.noreply.github.com >
2026-08-22 12:11:36 +02:00
Ruben Fiszel and rubenfiszel
1a506b8f22
chore(main): release 1.794.1 ( #10801 )
...
* chore(main): release 1.794.1
* Apply automatic changes
---------
Co-authored-by: rubenfiszel <275584+rubenfiszel@users.noreply.github.com >
2026-08-21 13:45:56 +00:00
Ruben Fiszel and rubenfiszel
55b6279058
chore(main): release 1.794.0 ( #10782 )
...
* chore(main): release 1.794.0
* Apply automatic changes
---------
Co-authored-by: rubenfiszel <275584+rubenfiszel@users.noreply.github.com >
2026-08-21 12:27:44 +02:00
Ruben Fiszel and rubenfiszel
2439a610be
chore(main): release 1.793.0 ( #10764 )
...
* chore(main): release 1.793.0
* Apply automatic changes
---------
Co-authored-by: rubenfiszel <275584+rubenfiszel@users.noreply.github.com >
2026-08-20 22:18:01 +02:00
Ruben Fiszel and rubenfiszel
a7637aca31
chore(main): release 1.792.2 ( #10753 )
...
* chore(main): release 1.792.2
* Apply automatic changes
---------
Co-authored-by: rubenfiszel <275584+rubenfiszel@users.noreply.github.com >
2026-08-19 14:15:59 +02:00
Ruben Fiszel and rubenfiszel
9f517d5a40
chore(main): release 1.792.1 ( #10750 )
...
* chore(main): release 1.792.1
* Apply automatic changes
---------
Co-authored-by: rubenfiszel <275584+rubenfiszel@users.noreply.github.com >
2026-08-18 17:10:42 +02:00
Ruben Fiszel and rubenfiszel
8efede55d6
chore(main): release 1.792.0 ( #10745 )
...
* chore(main): release 1.792.0
* Apply automatic changes
---------
Co-authored-by: rubenfiszel <275584+rubenfiszel@users.noreply.github.com >
2026-08-18 12:32:35 +02:00
Ruben Fiszel and rubenfiszel
ce71756c89
chore(main): release 1.791.0 ( #10718 )
...
* chore(main): release 1.791.0
* Apply automatic changes
---------
Co-authored-by: rubenfiszel <275584+rubenfiszel@users.noreply.github.com >
2026-08-18 01:55:42 +02:00
Ruben Fiszel and rubenfiszel
010d67e07f
chore(main): release 1.790.1 ( #10712 )
...
* chore(main): release 1.790.1
* Apply automatic changes
---------
Co-authored-by: rubenfiszel <275584+rubenfiszel@users.noreply.github.com >
2026-08-17 11:08:47 +02:00
Ruben Fiszel and rubenfiszel
944ad1083a
chore(main): release 1.790.0 ( #10699 )
...
* chore(main): release 1.790.0
* Apply automatic changes
---------
Co-authored-by: rubenfiszel <275584+rubenfiszel@users.noreply.github.com >
2026-08-15 14:54:31 +02:00
Ruben Fiszel and rubenfiszel
80a18ec284
chore(main): release 1.789.0 ( #10670 )
...
* chore(main): release 1.789.0
* Apply automatic changes
---------
Co-authored-by: rubenfiszel <275584+rubenfiszel@users.noreply.github.com >
2026-08-13 13:29:52 +02:00
Ruben Fiszel and rubenfiszel
b39860235c
chore(main): release 1.788.0 ( #10664 )
...
* chore(main): release 1.788.0
* Apply automatic changes
---------
Co-authored-by: rubenfiszel <275584+rubenfiszel@users.noreply.github.com >
2026-08-12 21:17:47 +02:00
Ruben Fiszel and rubenfiszel
2ac3e64fe2
chore(main): release 1.787.0 ( #10657 )
...
* chore(main): release 1.787.0
* Apply automatic changes
---------
Co-authored-by: rubenfiszel <275584+rubenfiszel@users.noreply.github.com >
2026-08-12 13:27:21 +02:00
Ruben Fiszel and rubenfiszel
20953a0c67
chore(main): release 1.786.1 ( #10652 )
...
* chore(main): release 1.786.1
* Apply automatic changes
---------
Co-authored-by: rubenfiszel <275584+rubenfiszel@users.noreply.github.com >
2026-08-12 09:40:03 +02:00
Ruben Fiszel and rubenfiszel
45a6e4932a
chore(main): release 1.786.0 ( #10649 )
...
* chore(main): release 1.786.0
* Apply automatic changes
---------
Co-authored-by: rubenfiszel <275584+rubenfiszel@users.noreply.github.com >
2026-08-12 02:22:18 +02:00
Ruben Fiszel
a09df8a130
decycle the recursive TriggerFilter schema in the python client build ( #10648 )
2026-08-12 01:58:35 +02:00
Ruben Fiszel and rubenfiszel
a65a184a80
chore(main): release 1.785.0 ( #10626 )
...
* chore(main): release 1.785.0
* Apply automatic changes
---------
Co-authored-by: rubenfiszel <275584+rubenfiszel@users.noreply.github.com >
2026-08-11 18:26:31 +00:00
13b521651b
fix(python-client): return at most size bytes from S3BufferedReader.read ( #10623 )
...
* feat: add unit tests for S3BufferedReader.read and improve read method implementation
* feat: refactor S3BufferedReader.read method and add unit tests for its functionality
* feat: implement peek() on S3BufferedReader with buffered reads
* fix(python-client): keep the read(size) contract and trim the test surface
Drop the duplicated `TestS3BufferedReaderRead` class from
`python-client/tests/wmill_client_test.py`: CI runs `pytest tests/` from
`python-client/wmill`, so that legacy manual harness never executes, and the
same assertions already live in `python-client/wmill/tests/test_s3_reader.py`.
Narrow that file to the four behaviours a future change could break, and make
the `bytes_generator` guard actually call `bytes_generator`.
Align `peek()` with `io.BufferedReader.peek`, which does at most one read on
the underlying stream, rather than looping until `size` bytes are buffered.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com >
* fix(python-client): hold read1 to one underlying read
read1 forwarded to read, so read1(-1) drained the whole object — the same
unbounded buffering this branch removes from read. Now that a buffer exists,
read1 can honour its own contract: fill only when the buffer is empty, then
serve from it.
Also treat read(None) as read(-1), per the BufferedReader contract, and pin
that read(0) does not pull from the stream: that holds only because the
drain sentinel is a negative size, and widening it to any falsy size would
reintroduce whole-file buffering.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com >
* fix(python-client): return from read1(0) without touching the stream
A zero-length read has nothing to serve, so pulling a chunk to satisfy it
both wastes a round trip and advances the stream. Guard it ahead of the
fill, and pin it with a chunk source that counts pulls.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com >
---------
Co-authored-by: Tushar <tusharanshu18@gmail.com >
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com >
2026-08-10 23:04:27 +02:00
Ruben Fiszel and rubenfiszel
cf3ddaa3cc
chore(main): release 1.784.0 ( #10603 )
...
* chore(main): release 1.784.0
* Apply automatic changes
---------
Co-authored-by: rubenfiszel <275584+rubenfiszel@users.noreply.github.com >
2026-08-10 22:56:55 +02:00
Ruben Fiszel and rubenfiszel
099efa358a
chore(main): release 1.783.0 ( #10578 )
...
* chore(main): release 1.783.0
* Apply automatic changes
---------
Co-authored-by: rubenfiszel <275584+rubenfiszel@users.noreply.github.com >
2026-08-07 12:41:05 +02:00
Ruben Fiszel and rubenfiszel
d592fb75eb
chore(main): release 1.782.0 ( #10566 )
...
* chore(main): release 1.782.0
* Apply automatic changes
---------
Co-authored-by: rubenfiszel <275584+rubenfiszel@users.noreply.github.com >
2026-08-06 12:55:48 +02:00
Ruben Fiszel and rubenfiszel
c03bd34be9
chore(main): release 1.781.3 ( #10563 )
...
* chore(main): release 1.781.3
* Apply automatic changes
---------
Co-authored-by: rubenfiszel <275584+rubenfiszel@users.noreply.github.com >
2026-08-06 10:02:27 +02:00
Ruben Fiszel and rubenfiszel
74737d16dd
chore(main): release 1.781.2 ( #10561 )
...
* chore(main): release 1.781.2
* Apply automatic changes
---------
Co-authored-by: rubenfiszel <275584+rubenfiszel@users.noreply.github.com >
2026-08-06 09:53:18 +02:00
Ruben Fiszel and rubenfiszel
c7ea530e1f
chore(main): release 1.781.1 ( #10556 )
...
* chore(main): release 1.781.1
* Apply automatic changes
---------
Co-authored-by: rubenfiszel <275584+rubenfiszel@users.noreply.github.com >
2026-08-06 02:17:57 +00:00
Ruben Fiszel and rubenfiszel
9cf307f3ad
chore(main): release 1.781.0 ( #10528 )
...
* chore(main): release 1.781.0
* Apply automatic changes
---------
Co-authored-by: rubenfiszel <275584+rubenfiszel@users.noreply.github.com >
2026-08-06 00:04:25 +02:00