Initial-bootstrap failure stopped the poll interval from ever starting,
and even once running, refresh() never reset the indicator back to
'polling' on success — so a single upstream blip pinned the plugin
in an error state until the user reloaded the page.
refresh() now loads namespaces on demand (absorbs bootstrap), the
interval is started unconditionally on show(), and every successful
poll flips the indicator back to green.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Dashboard now reachable across the internet: browser calls /api/dashboard/*
same-origin, PHP forwards to OUMTA_DASHBOARD_URL (configurable via env,
with docker-compose defaults pointing at host.docker.internal:8085).
Keeps the bearer token server-side and lets the dashboard live on a
private network.
Plumbing bits: polling indicator now green (no reason to look anxious
about a healthy poll loop), and the support plugin returns 200 pulled=0
when its relay isn't configured instead of flooding the network tab
with 502s on every background tick.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- Overlays: drop the 24/40/54px inset frame on tasks, calendar,
gallery, search, detail, edit modal, bookmarks, email, gitea and
oumta-dashboard so they fill the viewport like the support
overlay does. Removed the shared border-radius + overflow:hidden
rule on their inner containers (only settings + dialog still use
it) so the card's top colour bar isn't clipped.
- Done badge: the corner-triangle variant gets chopped by rounded
card borders. applyDesign now toggles body.rounded-cards whenever
--ui-radius-card > 0, and the CSS swaps the triangle for a 18px
circle pill with the check centred. Triangle stays for square
cards.
- Support plugin: "Close ticket" button is a regular labelled
button now (was a 30×30 icon ghost that clipped the text). Empty
hero state ("select a ticket") matches the board's empty style —
centred in the column with a pixel-font blink-cursor label.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- Connector: moved from per-entry pseudo-elements to a single
linear-gradient line on the body. Fades in/out 28px at each end
and no longer has gaps at entry boundaries. Dots and the date
rect's solid background sit naturally on top; everything else
stays transparent so the line threads through cleanly.
- Layout: entry is now a 2-row grid. The optional date rect lives
in row 1 (justify-self:start, left-aligned), while the dot-row
and the events column both pin to row 2 so the time label always
lines up with the first event of the cluster — even when a date
rect sits above. Time+dot `align-self: start` keeps them at the
top of the event section instead of vertically centred through
the whole cluster.
- Filters: state.timelineFilter is a Set now, so clicking multiple
workload pills (or the overflow entries) stacks them as an
any-of filter. "all" clears the set. The overflow dropdown stays
open on pick so several can be toggled without reopening it each
time. Scope label shows "filtered · N" with the active count.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Two-column timestrahl layout + workload quick-filter.
- Left column (64px): date badge (big day / small month e.g. 18 APR)
shown only on the first cluster of each day, coloured dot, and a
compact HH:MM time (or "just now" when <60s old).
- Dot colour = dominant severity of the cluster
(error > warning > recovered > image > info).
- Events within a 60s tolerance window collapse into one entry so
simultaneous rollouts of multiple deployments appear as a single
dot with each sub-event listed in the right column.
- Workload quick-pick pills above the timeline. "all" + up to six
inline pills (workloads sorted by recency); the rest collapses into
a "+N more" dropdown. Clicking a workload name inline inside an
event also applies the filter. Filter hides itself when the view is
scoped to a single workload (opened via the overview attention list).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This plugin only targets one specific deployment, so the settings
panel was noise that tempted accidental misconfiguration. baseUrl,
authToken and pollIntervalSec now live in a top-of-file CONFIG
constant; the hyprcrd-settings tab, the localStorage persistence,
and the panel CSS are gone.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- relay: raise /api/collab-attachments + /api/attachments/upload POST
size limit from 256KB to 15MB, matching /api/attachments. Previous
limit silently dropped any collab image >~100KB as 413 (envelope
overhead pushes even modest JPEGs past the cap), leaving puller
clients with broken <img src="uploads/..."> references.
- oumta-dashboard: centre overview tiles, bump value font to 56px,
introduce .oumta-fail alarm state that paints the full tile red with
white text. Toggled from JS for cluster state=down, workloads down
>0, and open incidents >0. Fail colour uses --t-danger so it stays
in sync with the "unavailable" workload labels.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Fullscreen cluster dashboard view consuming the Oumta Go backend.
All data currently mocked — see plugin TODO.md for integration plan.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>