13d23f6baf
Restart safety: transient credential checks are 1013/503, not a refusal
Melvin Strobl2026-10-16 18:18:42 +02:00
4286acadfd
Capability report: PUT /devices/{id}/report, a Capabilities section, offline devices degraded
Melvin Strobl2026-10-16 17:37:00 +02:00
1dc891aa1b
A node's worker label is worker, so a device is only a paired one
Melvin Strobl2026-10-16 16:56:05 +02:00
29d3ec467f
Device node: a device's ports are wired in flows
Melvin Strobl2026-10-16 16:40:31 +02:00
91e3b703f9
Merge branch 'main' of git.stroblme.de:Fluksio/app
Melvin Strobl2026-10-16 15:56:28 +02:00
28a565e501
Panels become devices: per-device documents in the flow repo, a Devices tab
Melvin Strobl2026-10-16 15:43:06 +02:00
ef1eb7db8b
serve names the dashboard's address when the image serves it
stroblme2026-10-16 15:18:11 +02:00
3c0912a3fe
Docs: x86 and arm64, Raspberry Pi included; one container in the start pages
stroblme2026-10-16 14:56:08 +02:00
84be4084f8
Dashboard stage builds on the build machine's CPU
stroblme2026-10-16 14:15:05 +02:00
026625ec4b
Clipboard and values specs wait out the side panel's animation
stroblme2026-10-16 14:12:10 +02:00
dde3d0af0d
Portal app-shell as a busybox target, git without perl, quieter first start
stroblme2026-10-16 12:20:13 +02:00
dea25ec08d
One image for the whole app: engine, API and dashboard on one port
stroblme2026-10-16 11:40:02 +02:00
9d9dac0bd0
Chat panel follows its tail by scrolling its own body (SidePanel body gets data-slot side-panel-body) instead of scrollIntoView, which scrolls every ancestor
stroblme2026-10-16 10:50:23 +02:00
cb377ba00e
Logs panel follows its tail by scrolling its own list: scrollIntoView scrolled every ancestor too, so with the code editor expanded each new line slid the whole editor up to bring the hidden dock into view
stroblme2026-10-16 10:39:09 +02:00
d06804b145
Panels dialog: opens without focusing a field, a panel title saves on blur, Enter or Escape instead of per keystroke, and a new panel's name previews its URL. Docs
stroblme2026-10-16 09:25:34 +02:00
07ecbaab3a
Duplicate flow: references to its own messages under its own name follow the copy
stroblme2026-10-16 09:22:57 +02:00
c37a191c82
Overview lists: a duplicate button beside the trash while selecting copies the picked flows or dashboards as drafts, one request each, then clears the selection. Publish, delete and duplicate share one batch helper with their own toasts. Docs
stroblme2026-10-16 09:21:42 +02:00
6ab5062f59
Duplicate flows and dashboards: POST /flows/{name}/duplicate and /dashboards/{name}/duplicate copy the working copy into {name}_copy (then _copy_2, ...) as an unpublished draft with " (copy)" on the title. A flow copy takes its node sources as drafts and leaves origin and runtime.json behind; copying code nodes is a superuser's (the save check, now taking the replaced copy). Client regenerated
stroblme2026-10-16 09:21:30 +02:00
85539741a1
Dashboard editor: copy and paste widgets across dashboards
stroblme2026-10-16 09:20:23 +02:00
bfab6e1d2e
Counter wrap stays on the step grid: it counts in span = top - lo + the finest step rather than the period, so one counter of step 5 up to 100 wraps 100 + 5 to 0 and 0 - 5 to 100; the time picker is unchanged. Check cases and docs formula
Melvin Strobl2026-10-16 09:00:36 +02:00
21c7961d49
Counter widget: one to three linked counters are the digits of one number, published on one message in the finest counter's unit (hours and minutes send 07:30 as 450, 07:55 + 5 min carries to 08:00); wraps or stops at the coarsest's min/max. The arithmetic is one pure module, ui/core/counter.ts, with counter.check.ts. A tile steps each counter with a press up and down and publishes once 300 ms after the last; a round face turns the selected counter on the ring (wheel, keys, a drag counted in steps), its arc where that counter stands in its turn, and a press on a counter's digits selects it. Default config is the time picker. Editor rows, widgetIssue, server type and dtype, docs
Melvin Strobl2026-10-16 08:58:42 +02:00
4ce50b5c3a
LAN stack gives out its LAN address: dev-lan sets FRONTEND_HOST to the published port on the host's default-route address, so the Panels dialog links a screen somewhere it can reach instead of app.localhost
Melvin Strobl2026-10-15 22:22:58 +02:00
8d3165c8c4
A lane chip clears the card above its run: running downwards ELK keeps runs half a chip and a border (14px) from nodes, so House history's feedback chip no longer covers the node border at 390 (crossings and node order unchanged, Demo house 178px taller); an empty string reads "" on its chip
stroblme2026-10-15 21:46:05 +02:00
dc2802d4c0
ELK runs in a worker: the flow layout loads elkjs's worker build as a Vite ?worker behind elk-api, so a phone's eight layout passes no longer block the page (Demo house at 390px with 4x CPU throttling, long tasks 15.0 to 0.8 s, longest 2.1 to 0.3 s); positions and routes unchanged
stroblme2026-10-15 21:37:31 +02:00
ce2ce4e3e7
Header removals wait for the code editor to be left: autosave saves with drop=false, so follow_header adds and renames from the header but keeps a port or setting whose parameter is gone, and leaving the editor (blur or closing the panel) saves once more with removals; source saves of a flow run one at a time
stroblme2026-10-15 21:31:04 +02:00
5ca90ffece
A phone's wrapped flow stacks into one column: when a graph is still wider than three nodes after wrapping, a last pass centres every rank, so wrapped rows sit under the row above (Demo house 3721 to 947px across at 390, crossings 295 to 263)
stroblme2026-10-15 18:32:44 +02:00
453b0be6f6
Edges follow ELK's routes: layoutGraph returns each edge's start, bends, end and chip point, LiveEdge draws them square with rounded corners, moved onto the drawn handles, and keeps the curve for an edge whose node moved since; a feedback edge clears the nodes it passes
stroblme2026-10-15 18:24:38 +02:00
ff17d08254
useIsMobile reads the width on the first render, so a phone's flow nodes no longer draw desktop handles first and React Flow cannot measure those: the Music and House history edges stop changing between loads
stroblme2026-10-15 18:23:40 +02:00
80e350549c
A dashboard's portalled select menu restates its look, so a Glass menu blurs what is under it (the colour wheel no longer shows through) and a Material menu gets its tonal fill back
stroblme2026-10-15 18:19:41 +02:00
bf7086250e
A round face's press is not clipped by the face body, so Glass light's disc shadow falls soft instead of ending in hard edges
stroblme2026-10-15 18:19:34 +02:00
abfb03c441
Header of process and node ports follow each other both ways: a panel edit rewrites only the def line of edited code, a code save reads the header back into input ports and settings (draft and response); Space types in the node editor again
stroblme2026-10-15 18:19:19 +02:00
87ee7e3429
Brain force layout runs in a worker: 300 ticks took ~75 ms cold, ~30 ms warm on the Demo's render thread
stroblme2026-10-15 17:48:52 +02:00
44c665b3a5
Namespace the subtree theme scopes as .theme-light/.theme-dark: dark: follows the nearest scope, portalled dashboard menus and tooltips restate it
stroblme2026-10-15 17:42:59 +02:00
1b5a16f636
Assistant streams its answer token by token
stroblme2026-10-15 17:37:56 +02:00
29156fcaec
Vendor stylesheets load in Tailwind's base layer through a vendor.css shim, so our overrides win outright; the editor's drag placeholder takes the 12% primary
stroblme2026-10-15 17:27:17 +02:00
8f8330c9e0
Assistant answers render as markdown
stroblme2026-10-15 17:18:12 +02:00
37f4ac597d
Live chart lets a held window go once its points have scrolled off
stroblme2026-10-15 17:12:39 +02:00
87f5b6b58a
One elapsed-time notation: ago() reads dur's units app-wide, health runs cell widened
stroblme2026-10-15 17:10:36 +02:00
6a847a2f28
development.md: only the CI jobs other than test-backend write .env
stroblme2026-10-15 17:08:09 +02:00
424af471d4
bench-engine in the Makefile's .PHONY
stroblme2026-10-15 17:07:39 +02:00
0a1b38a89b
LAN nginx proxies to the container name fluksio-api, which the test stack's backend does not carry
stroblme2026-10-15 17:07:22 +02:00
4b216dcbcf
Modules resolve the manifest with uv pip compile before syncing, so listed packages bring their dependencies
stroblme2026-10-15 17:06:20 +02:00
d3b52bd7d6
Docs: speech-to-text and text-to-speech recipes for a panel's mic and speaker
stroblme2026-10-15 17:01:25 +02:00
56fa34c2c9
Home charts execution time per node type on a log scale, from a /observability/node-types rollup
stroblme2026-10-15 16:57:07 +02:00
fa8b178866
Panels dialog saves a ready I/O port draft on close and keeps an unfinished one; one qualified message-name rule on both sides
stroblme2026-10-15 16:49:26 +02:00
9836f3ff5f
Clicking a flow input label opens a popover with its declaration and current value, and a way into the flow settings
stroblme2026-10-15 16:42:28 +02:00
6d0fd53d08
Following a flow: endpoint lands on the label leading back, selected, centred and with its edges highlighted
stroblme2026-10-15 16:35:30 +02:00
2f780ad570
Flow canvas draws panel I/O ports as panel:<id>:<port> endpoints that open their panel in the Panels dialog
stroblme2026-10-15 16:31:33 +02:00
5bd504ba9d
LiveEdge pulse gaps: reset timer survives other producers, snapshots do not flash, flow: endpoints pulse as their node
stroblme2026-10-15 16:26:20 +02:00
08adc9ef1d
RemoteWorker.cancel makes no coroutine once the loop is closed
stroblme2026-10-15 16:17:30 +02:00
146ab72c17
make test-webkit runs the drag specs in WebKit against the test stack
stroblme2026-10-15 16:15:39 +02:00
fbd886f7a7
make test-frontend runs against a stack of its own
stroblme2026-10-15 16:15:32 +02:00
70677dcc20
Stagger a rectangular panel's new dashboard by rail order
stroblme2026-10-15 16:12:38 +02:00
64d18428b5
make update warns when .env lacks a key compose would default, like make up
stroblme2026-10-15 16:10:36 +02:00
cbc98678bb
Backend CI drops the compose env and down -v notes left from Postgres
stroblme2026-10-15 16:09:09 +02:00
f32539f7c0
pre-commit CI installs the extras, so strict mypy finds the server-extra imports
stroblme2026-10-15 16:09:08 +02:00
aa64251de0
Draw the look's ground behind a stacked dashboard
stroblme2026-10-15 16:08:53 +02:00
14e651d5eb
Grow the editor's canvas to reach widgets below its edge
stroblme2026-10-15 16:05:23 +02:00
984da1706c
Draw each dashboard on a round panel's track in its own look
stroblme2026-10-15 16:00:10 +02:00
e5ecb1e313
make dev and make up warn when .env lacks a key compose would default
stroblme2026-10-15 15:58:52 +02:00
064decf5ff
Soak's redis scenario refuses to run without --force
stroblme2026-10-15 15:57:46 +02:00
03670c782f
Backend CI tests on Python 3.12 and 3.14, with the extras installed
stroblme2026-10-15 15:56:59 +02:00
501ff101ce
Pin Traefik to 3.6.25 in the dev and production compose files
stroblme2026-10-15 15:56:14 +02:00
96618e40a2
Opt-in WITH_FFMPEG build arg installs Debian's ffmpeg in the backend image
stroblme2026-10-15 15:55:02 +02:00
f2215a2b63
Give a Glass Switch or Button face a stronger press in light
stroblme2026-10-15 15:55:00 +02:00
a34f8f436c
Draw a round dashboard in the mosaic as its circle with a dot per face
stroblme2026-10-15 15:54:47 +02:00
0c4b23de8a
Bump pytest to 9 for PYSEC-2026-1845, crud user tests delete their superusers
stroblme2026-10-15 15:48:22 +02:00
3a9fc43707
Workers screen shows each agent's version and protocol, and who is behind
stroblme2026-10-15 11:09:54 +02:00
78071759d8
Link a pending portal member to the local user with their email
stroblme2026-10-15 11:04:53 +02:00
976160694c
Disconnect deletes the users the portal let in
stroblme2026-10-15 11:02:07 +02:00
f569f325a7
Serve MCP and hooks with a secret through the portal tunnel
stroblme2026-10-15 11:00:19 +02:00
4c20f913e8
Pin the UTC offset on the time a flow version carries
stroblme2026-10-15 10:57:41 +02:00
b9078dd19f
fluksio run takes inputs after -- as name=value
stroblme2026-10-15 10:56:46 +02:00
e597c34823
Refuse an origin.repo of /, the home directory or a relative path
stroblme2026-10-15 10:55:40 +02:00
a95be36dba
Un-key stage-cache rows written before the current key shape
stroblme2026-10-15 10:54:22 +02:00
6fa44bacf3
Flow delete offers to delete its runs, history included
stroblme2026-10-15 10:52:33 +02:00