stroblme and Claude Opus 5.5
6b0c4a4308
Flow delete offers to delete its runs, history included
...
DELETE /runs?flow= removes every Run row of the flow but left its flow_run
rows, so a deleted flow kept appearing in the history. history=true now
drops those too, and the flow delete dialogs (editor and bulk) send it when
"Also delete its runs" is ticked.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01WgBfkm4rCmtd1T4vHWjEPx
2026-10-15 10:52:33 +02:00
stroblme and Claude Opus 5.5
3c9aec0982
DELETE /artifacts/{digest}: superuser only, 409 while referenced
...
The keep-set the hourly sweep uses is now referenced_artifacts, shared by
the sweep and the route. The volatile ring is not touched.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01WgBfkm4rCmtd1T4vHWjEPx
2026-10-15 10:48:59 +02:00
stroblme and Claude Opus 5.5
3a7c10b8a9
List and revoke portal members under Admin → Users
...
GET /cloud/members asks the portal who it admits to this instance and
marks those with a local user. DELETE /cloud/members/{portal_sub} takes a
membership back. Admin → Users lists the members who have not arrived
yet, with Revoke, which also surfaces a membership left standing when a
local user was deleted while the portal could not be told.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01WgBfkm4rCmtd1T4vHWjEPx
2026-10-15 10:31:25 +02:00
stroblme and Claude Opus 5.5
946376dd0a
Stand down when the portal revokes this instance
...
The connector treats close code 4410 from the hub as final: it stops
dialling, keeps cloud.json so a new claim code replaces it, and reports
revoked in /cloud/status, which Settings → Remote access shows as Removed
at the portal. Enrolling again, or a restart, brings the link back. An
older hub still answers 403 and the link keeps retrying as before.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01WgBfkm4rCmtd1T4vHWjEPx
2026-10-15 10:30:38 +02:00
stroblme and Claude Opus 5.5
0ca692b371
GET /runs/{id}/nodes/{node}/outputs serves what a node returned
...
The stage cache's stored outputs, as kept (up to 256 kB of JSON). A node
that kept none answers 404 saying why. Listed in the API docs.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01WgBfkm4rCmtd1T4vHWjEPx
2026-10-15 10:23:39 +02:00
stroblme and Claude Opus 5.5
f0bddc56a4
A restored node whose source run is gone says its curve was lost
...
The run detail works out curve_lost per node when read, from whether its
cached_from run still exists. The run page names the deleted run in place
of the generic NO_CURVE note.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01WgBfkm4rCmtd1T4vHWjEPx
2026-10-15 10:22:09 +02:00
stroblme and Claude Opus 5.5
df2620cede
A run keeps the inputs its flow declared at submit
...
Run.declared (migration 2e7ca7d10044) snapshots the declarations on submit
and import. The run detail's Inputs panel reads them, and a run from before
falls back to the flow's current declarations.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01WgBfkm4rCmtd1T4vHWjEPx
2026-10-15 10:20:29 +02:00
stroblme and Claude Opus 5.5
f5be932df3
Flow inputs carry an origin hint, run or panel
...
The Inputs editor and the canvas label show it, and the run forms leave
panel inputs out.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01WgBfkm4rCmtd1T4vHWjEPx
2026-10-15 10:08:46 +02:00
stroblme and Claude Opus 5.5
ccc7081b08
PUT /panels/ carries a version and refuses a stale one with 409
...
The Panels dialog re-reads the list on 409. A panels.json without a
version reads as 0.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01WgBfkm4rCmtd1T4vHWjEPx
2026-10-15 10:07:50 +02:00
stroblme and Claude Opus 5.5
0d382edcbf
Superuser route to flush the metrics collector now
...
POST /observability/flush handles what the collector has queued and writes
it, so the soak harness no longer sleeps FLUSH_INTERVAL_S before clearing
its own rows.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01WgBfkm4rCmtd1T4vHWjEPx
2026-10-15 09:53:19 +02:00
stroblme and Claude Opus 5.5
2dc9295c26
Audit shared-library source writes
...
A shared source goes live in every flow using it the moment it is saved, so
the write is recorded in the audit trail like a publish. Private source saves
stay drafts and are not audited.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01WgBfkm4rCmtd1T4vHWjEPx
2026-10-15 09:50:04 +02:00
stroblme and Claude Opus 5.5
be85c6c92a
Retire a shared node in use with ?detach=true
...
DELETE /flows/library/{name} still answers 409 while nodes use the source.
With detach=true each of them keeps a copy of the code, in the published
flow and the draft, the source is deleted and the running users rebuild.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01WgBfkm4rCmtd1T4vHWjEPx
2026-10-15 09:48:47 +02:00
stroblme and Claude Opus 5.5
0746c94e0a
Warn when a node that runs no code names a device
...
A device on a node without source was accepted and silently ignored. The
build now reports it as ignored_device, an advisory issue.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01WgBfkm4rCmtd1T4vHWjEPx
2026-10-15 09:45:24 +02:00
stroblme and Claude Opus 5.5
13567f8990
Give a rate-limit flush its own run, linked to the run that held the value
...
A flush ran its cascade under no id, so its executions and failures belonged
to no run. It now records a run with source "flush", and the holding run's id
travels on the queue item into a new `flow_run.parent` column, also on the
`/observability/runs` rows.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01WgBfkm4rCmtd1T4vHWjEPx
2026-10-15 09:37:30 +02:00
stroblme and Claude Opus 5.5
c7e38a8a44
Rename the trigger node type to debounce, migrating stored flows
...
The store rewrites `"type": "trigger"` to `debounce` in every published and
draft flow when it opens, bumps the version and commits once. No alias stays
behind, so `trigger` is now an unknown type.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01WgBfkm4rCmtd1T4vHWjEPx
2026-10-15 09:34:40 +02:00
stroblme and Claude Opus 5.5
82466cad9a
Verify shoots the flow canvas and media tile from the Demo, not the media example
...
The canvas shot opens the Demo's music flow; the media shot reads the Demo's
Media screen, so neither needs the `camera` dashboard.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01WgBfkm4rCmtd1T4vHWjEPx
2026-10-15 08:36:38 +02:00
stroblme and Claude Opus 5.5
235a9201a8
Merge remote-tracking branch 'origin/main'
...
Docs / docs (push) Successful in 22s
Playwright Tests / test-playwright (1, 2) (push) Failing after 4m39s
Playwright Tests / test-playwright (2, 2) (push) Successful in 2m17s
pre-commit / pre-commit (push) Failing after 2m37s
Test Backend / test-backend (push) Failing after 3m37s
Compose Smoke Test / test-compose (push) Successful in 33s
Playwright Tests / merge-reports (push) Successful in 1m38s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01WgBfkm4rCmtd1T4vHWjEPx
2026-10-15 08:20:11 +02:00
Melvin Strobl
36fafae065
Merge remote-tracking branch 'origin/main'
Docs / docs (push) Successful in 49s
Playwright Tests / test-playwright (1, 2) (push) Failing after 4m41s
Playwright Tests / test-playwright (2, 2) (push) Successful in 2m16s
pre-commit / pre-commit (push) Failing after 4m23s
Test Backend / test-backend (push) Failing after 4m54s
Compose Smoke Test / test-compose (push) Successful in 38s
Playwright Tests / merge-reports (push) Successful in 1m41s
2026-10-15 07:47:21 +02:00
stroblme and Claude Opus 5.5
278a480a5c
Endpoint labels sweep instead of pulse: left to right on a label publishing into the flow, right to left on one reading out of it, one pulse long, off under reduced motion; snapshot values are marked prior so catching up sweeps nothing
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01WgBfkm4rCmtd1T4vHWjEPx
2026-10-15 00:23:01 +02:00
stroblme and Claude Opus 5.5
98416dc516
Dashboard editor undo: ⌘Z / ⇧⌘Z over a 50-entry history of commits, folding keystrokes and the grid's own correction as the flow editor does
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01WgBfkm4rCmtd1T4vHWjEPx
2026-10-15 00:07:58 +02:00
stroblme and Claude Opus 5.5
0a9ea24b93
Stored state lists its keys, each with a two-press delete beside Clear
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01WgBfkm4rCmtd1T4vHWjEPx
2026-10-15 00:04:03 +02:00
stroblme and Claude Opus 5.5
9f7b552885
Colour tile tests: the disc on the shared widgets panel for every look's screenshot, and a key's release sending rgb and hex
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01WgBfkm4rCmtd1T4vHWjEPx
2026-10-14 23:59:24 +02:00
stroblme and Claude Opus 5.5
f2305ef619
Phone header: assistant button in the corner, gated on an available provider as the sidebar entry is; header triggers on the right at 44px
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01WgBfkm4rCmtd1T4vHWjEPx
2026-10-14 23:41:30 +02:00
stroblme and Claude Opus 5.5
b0c07a35e9
Locked slider dims its rail: :has() on the slider, since the rail comes before the input and no sibling selector reaches it
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01WgBfkm4rCmtd1T4vHWjEPx
2026-10-14 23:41:29 +02:00
stroblme and Claude Opus 5.5
43fb446297
Stat unit sized against the hero numerals: dui-hero on the readout's outer span, so the unit's 0.4em is of the hero rather than the 14px body text
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01WgBfkm4rCmtd1T4vHWjEPx
2026-10-14 23:41:28 +02:00
stroblme and Claude Opus 5.5
9145b7d1c0
ValueSource kind includes panel; Panels dialog no longer suggests the screen port openpanel does not serve
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01WgBfkm4rCmtd1T4vHWjEPx
2026-10-14 23:32:32 +02:00
stroblme and Claude Opus 5.5
f2b7a23b4f
Socket snapshot carries the nodes waiting for a machine, so a reconnecting browser restores their queued dots
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01WgBfkm4rCmtd1T4vHWjEPx
2026-10-14 23:31:54 +02:00
Melvin Strobl and Claude Opus 5.5
78498cbbf8
Dashboard name pill opaque: the look's card colour with a hairline border, no blur
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_016ezWcLmBCtTVKFPxfdK2MK
2026-10-14 22:19:34 +02:00
Melvin Strobl and Claude Opus 5.5
2a9b39ddb1
Dashboard name pill on a round panel: 56 high, icon and title at 24, at most 280 wide
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_016ezWcLmBCtTVKFPxfdK2MK
2026-10-14 22:16:00 +02:00
stroblme and Claude Opus 5.5
b18cb30492
Add websocket node: client or served socket, listener or sender
...
Docs / docs (push) Successful in 26s
Playwright Tests / test-playwright (1, 2) (push) Failing after 3m56s
Playwright Tests / test-playwright (2, 2) (push) Successful in 2m1s
pre-commit / pre-commit (push) Failing after 2m38s
Test Backend / test-backend (push) Failing after 3m18s
Compose Smoke Test / test-compose (push) Successful in 46s
Playwright Tests / merge-reports (push) Successful in 1m35s
ws:// and wss:// URLs dial out and hold a supervised connection; a path is
served under /hooks/<flow>/ with an optional secret. Outputs only listen,
inputs send. Frames are JSON keyed by port, with json_key and on_connect.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_011CT3mowxKeZywDCH4fS1gt
2026-10-14 18:42:19 +02:00
Melvin Strobl and Claude Opus 5.5
0bf2b12268
Round panel: the dashboards either side drawn in advance and live, on the face they open on, and dragged in up and down as faces are sideways; the name pill only on landing
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-14 17:20:22 +02:00
Melvin Strobl and Claude Opus 5.5
603635f947
Round paging follows the finger: faces and dashboards on a track, swiped one to one with the next beside it, turned or sent back on release, rubber-banded at the ends; keys and dots slide the same track; the reading dot a smaller companion of the handle
...
Docs / docs (push) Successful in 24s
Playwright Tests / test-playwright (1, 2) (push) Failing after 4m14s
Playwright Tests / test-playwright (2, 2) (push) Successful in 2m11s
pre-commit / pre-commit (push) Failing after 2m2s
Test Backend / test-backend (push) Failing after 3m23s
Compose Smoke Test / test-compose (push) Successful in 34s
Playwright Tests / merge-reports (push) Successful in 1m33s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-14 17:08:51 +02:00
Melvin Strobl and Claude Opus 5.5
541dbce584
Round faces: a bar as concentric arcs with a legend in the middle; larger title, gap line and face text; Read-only in the ring's gap; a round dashboard unpadded on a phone; reduced-motion ring assertion
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-14 16:52:46 +02:00
Melvin Strobl and Claude Opus 5.5
f5412d2f7d
Marks as dots inside the track: ticks, a selector's options and a slider's reading on the track's midline and the ring's centre line, coloured by the fill or the handle over them; the selector ring fills to its option
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-14 16:42:56 +02:00
Melvin Strobl and Claude Opus 5.5
b500af84ec
Dashboard motion: round dashboards page up and down, the ring eases to a notch or a reading, the slider tile to a value set elsewhere; reduced motion honoured by every tween; motion spec in the docs
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-14 16:34:10 +02:00
Melvin Strobl and Claude Opus 5.5
5b2769c141
Slider: the set value to its step's decimals; the reading marked on the track and on the ring; mark geometry in the docs
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-14 16:00:53 +02:00
Melvin Strobl and Claude Opus 5.5
a6a1f2a2c3
Slider reading in a tile: a line under the value in every look, row and fader; Beside it on every dashboard; tile geometry in the docs
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-14 15:51:04 +02:00
Melvin Strobl and Claude Opus 5.5
84071ee106
Round dashboards: one face at a time, a face per widget type, paged by swipe, dots and keys; slider reading; face row in the editor
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-14 15:24:25 +02:00
Melvin Strobl and Claude Opus 5.5
8b8cb5cda9
Round dashboards: shape and ring, the ring drawn and turned in every look, Knob preset and face guide in the editor
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-14 14:23:55 +02:00
Melvin Strobl and Claude Opus 5.5
f067fb60d4
Gauge: no value arc at the minimum
...
Docs / docs (push) Successful in 22s
Playwright Tests / test-playwright (1, 2) (push) Failing after 3m53s
Playwright Tests / test-playwright (2, 2) (push) Successful in 1m57s
pre-commit / pre-commit (push) Failing after 2m37s
Test Backend / test-backend (push) Failing after 3m6s
Compose Smoke Test / test-compose (push) Successful in 30s
Playwright Tests / merge-reports (push) Successful in 1m55s
At 0 the value arc is a zero-length dash (pathLength 0), and its round
caps still painted a primary dot on the dial in every look. The arc is
now transparent while its fraction is not above 0. The widget spec puts
a gauge at 0 on its panel and checks it in each look; its tile count,
stale since the buttons widget, is 11.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-14 12:29:07 +02:00
Melvin Strobl and Claude Opus 5.5
28a44853e3
Colour widget: commit the value being released
...
The brightness column changes and commits in one handler, so the commit
read the render's draft (still null) and sent nothing; the queued draft then
stuck and rode along with the next release. The pending colour lives in a ref
now. color-drag.spec gains a column drag.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-14 08:44:38 +02:00
Melvin Strobl and Claude Opus 5.5
c462f9acab
Panel I/O: PanelDef.io ports, scoped publish and upload, I/O section in the Panels dialog
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-13 21:10:54 +02:00
stroblme and Claude Opus 5.5
8d97b8ffaa
Open in dashboard: searchable Command list
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-12 22:07:17 +02:00
stroblme and Claude Opus 5.5
cfd2556053
Dashboard message picker: searchable combobox instead of a plain select
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-12 22:06:31 +02:00
stroblme and Claude Opus 5.5
0ef7d027b8
Dashboard palette: switch dashboard, publish, settings; ⌘S publishes
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-12 22:05:39 +02:00
stroblme and Claude Opus 5.5
72b4cf3556
Shared Dock, PublishButton, DiscardButton, DiscardDraftDialog for the flow and dashboard editors
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-12 22:04:34 +02:00
stroblme and Claude Opus 5.5
8d158169e5
Button icon-touch/sm-touch sizes replace the repeated touch-target classes
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-12 22:02:35 +02:00
stroblme and Claude Opus 5.5
9c75d7ae13
Dashboard add widget: searchable command palette with ⌘P, as on flows
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-12 21:59:16 +02:00
stroblme and Claude Opus 5.5
9a84d27347
Embed widget: Image option scales a camera stream to the tile
...
Docs / docs (push) Successful in 19s
Playwright Tests / test-playwright (1, 2) (push) Failing after 3m41s
Playwright Tests / test-playwright (2, 2) (push) Failing after 2m21s
pre-commit / pre-commit (push) Failing after 2m36s
Test Backend / test-backend (push) Failing after 2m58s
Compose Smoke Test / test-compose (push) Successful in 31s
Playwright Tests / merge-reports (push) Successful in 1m36s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-11 20:23:37 +02:00
stroblme and Claude Opus 5.5
022079728c
Dashboard icons: add cctv
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-11 20:20:54 +02:00