Skip to content

Releases: yeniklas/terdut-tui

v0.8.0

Choose a tag to compare

@github-actions github-actions released this 19 Sep 19:03
v0.8.0 — set web UI passwords, and keys that act on the selected row

p in Users sets the selected user's web UI password. It asks for the
current one only when you change your own existing password, which is
the one case terdut-server checks it. Needs terdut-server v0.10.2 or
later, the first with a web UI; against an older server the form says
so instead of failing with a bare 404.

Fixed: k, d and f acted on the wrong row. The table read them as
navigation before the section read the cursor, so:
- k in Users opened API keys for the user above the selected one;
- d in Users and in Schedule targeted a row half a page below;
- f paged the cursor down while cycling the filter.
In Users, move with the arrow keys; k there means API keys.

Nothing else changes, and every other feature works against the same
servers as v0.7.0.

v0.7.0

Choose a tag to compare

@github-actions github-actions released this 07 Aug 12:06
feat: reassign on-call days and weeks to another person

Assigning over a day somebody else held did nothing but flash a 409 for
three seconds. The server holds one person per date and refused any that
was taken, all-or-nothing, so pressing W on a week where a single day was
already assigned placed none of the other six either. The only way
through was d on each day first — seven delete-and-confirm cycles to move
one week.

The clash is already on screen, so it is found before the request rather
than read back out of an error: the picker hands off to a confirmation
naming who loses the days and how many there are, and accepting sends the
whole selection with replace, which terdut-server v0.8.0 added. One
question to move a week, and nobody's shift moves without somebody being
asked. A day nobody holds still assigns with no prompt at all.

Reassigning somebody to a day they already hold raises no prompt, since
it takes nothing from anyone, but it does send replace: the server
rejects any date that exists, so without it a harmless no-op would fail.

v0.6.0

Choose a tag to compare

@github-actions github-actions released this 07 Aug 11:42
feat: ntfy topics per user, and notifications on the timeline

terdut-server pages the on-call person through ntfy, but none of it was
reachable from here. A user's topic could only be set with curl, so a
new user silently got no pages and quietly fell back to the shared
fallback topic — which carries no Acknowledge button. And nothing said
whether anybody had been paged at all.

The Users section grows an Ntfy Topic column and t to edit it,
prefilled with the current value. Submitting an empty field clears the
topic rather than being rejected as a mistake: clearing is how somebody
is taken off their own topic, and it is what the server means by an
empty string. Nil and empty arrive as the same thing, because the
server stores a blank topic as NULL, so User.Topic flattens the two
instead of leaving every caller to.

The incident timeline renders the server's notified and notify_failed
events. No new fetch — the timeline endpoint already carried them, and
unknown types already fell through to a generic label; this is about
saying something useful. An event with no user means the fallback
topic, not "the server acted", which is the difference between somebody
having been paged and the rota having been empty.

Both need terdut-server v0.6.0 or later, and the timeline entries a
server newer than that. Against an older one the column stays empty and
editing a topic reports the server's 404, which is the honest answer.

v0.5.0

Choose a tag to compare

@github-actions github-actions released this 06 Aug 10:48
Stats as a section instead of an overlay

v0.4.1

Choose a tag to compare

@github-actions github-actions released this 31 Jul 05:25
Fix incident detail rendering

An incident with nobody assigned and nobody holding it rendered its
detail view with the acknowledgement line indented far to the right: a
trailing newline inside a lipgloss Render call produces a line of
padding that shifts whatever is written next.

Also adds the first test suite for this client — 129 tests covering the
API client, the update loop and rendering — and gates the release
workflow on vet and tests.

Requires terdut-server v0.4.0 or later, unchanged from v0.4.0.

v0.4.0

Choose a tag to compare

@github-actions github-actions released this 30 Jul 19:56
Incidents as the primary object

Follows terdut-server v0.4.0, which splits alerts from incidents. Alerts
become a read-only feed; incidents are the work item, with acknowledge,
assign, snooze, note, resolve and archive, plus a full timeline and
MTTA/MTTR statistics.

BREAKING CHANGE: requires terdut-server v0.4.0 or later. Use terdut-tui
v0.3.x with earlier servers.

v0.3.0

Choose a tag to compare

@github-actions github-actions released this 30 Jul 06:49
v0.3.0 — Last Seen timestamp for alerts

v0.2.0

Choose a tag to compare

@github-actions github-actions released this 22 May 11:49
feat: Archived alerts tab with archive/unarchive actions

Add a fourth tab (Alerts | Archived | Schedule | Users).
Archived alerts are fetched lazily on first visit using the
archived=true query param on GET /api/alerts.

Press x from the Alerts list or detail to archive an alert;
the non-archived list refreshes immediately. Press x from the
Archived list or detail to unarchive; the archived list
refreshes. Ack/unack are disabled in the Archived detail view.

New API methods: ArchiveAlert (POST), UnarchiveAlert (DELETE).
ArchivedAt field added to the Alert type.

v0.1.2

Choose a tag to compare

@yeniklas yeniklas released this 22 May 09:57

Changes

  • Schedule view now shows exactly one week at a time, always starting on Monday (ISO week alignment)
  • ←/→ navigation still shifts by one week and always lands on a Monday

v0.1.1

Choose a tag to compare

@yeniklas yeniklas released this 22 May 09:53

Bug fixes

  • Fix panic when pressing W (assign week) before moving the schedule cursor — scheduleTable.Cursor() returns -1 on an unnavigated table, which slipped past the bounds check and caused an index-out-of-range panic.