Skip to content

feat: trigger on/off history, run plan page, job page layout and run log rework - #1390

Merged
kvlonge merged 15 commits into
mainfrom
feat/ui-feedback-pr
Nov 9, 2026
Merged

kvlonge merged 15 commits into
mainfrom
feat/ui-feedback-pr

Conversation

@kvlonge

@kvlonge kvlonge commented Nov 9, 2026

Copy link
Copy Markdown
Contributor

Why

Audited UI work plus one person read, in one Verify run.

Changes

Additive read listPersonTriggerChanges (client regenerated), UI feedback work; single-row person reads share row_in_target.

Verification

make check-ci (with client check), orchestration tests (SQLite, PostgreSQL), vitest, svelte-check, vite build. Audited; hygiene clean. DuckShop: not involved.

BEGIN_COMMIT_OVERRIDE
feat(triggers): people who can view a whole target can read a trigger's on/off history: each pause, switch-on, reset and cursor change, with who made it, when and why. Credentials in the reason are redacted
feat(ui): the trigger page's On/off history shows those changes
fix(ui): the trigger page shows the reason box only to people who can pause or switch on the trigger
fix(ui): pages you return to show their last data at once and refresh it behind the scenes; "Loading…" appears only when a first load is slow
fix(ui): a refused reload clears the remembered data, so someone whose access was removed sees the refusal, not old data
feat(ui): the run log shows one row per node, with that node's queries folded under it; run-level queries stay in the Statements tab
feat(ui): printed output in the run log sits behind a "Show printed output" switch; a failing run's last printed block, which holds its errors, is always shown
feat(ui): a click stays on the current page until the next page's data is ready, then switches; a slow switch shows a thin bar along the top
feat(ui): the job page puts its schedules, latest run and critical nodes in the header, with Overview, Runs and Code tabs, so the graph fills the page
feat(ui): clicking nodes in a job's graph selects them (Shift, Ctrl or Cmd adds more), and the selected nodes can be run on their own
feat(ui): every Run button opens a plan page that shows what the command selects and why each node would run; nothing starts until you press Run there
chore(ui): drop explanatory captions that repeated the docs
END_COMMIT_OVERRIDE

A new person read lists a trigger's operator changes, newest first, from
the security audit: what changed, who changed it (by name for a person),
when, and the reason with credential-shaped text redacted. It needs view
on every current node of the target, like the trigger listing, and an
unknown trigger is refused the same way. The trigger page shows it in its
On/off history section.
…ext only for slow first loads

Each read's last answer is kept in memory for the page load, keyed by person,
location, page and read, and shown at once while the page reloads. A first
load faster than 400 ms shows no loading text.
A node's finished queries fold under its outcome row and open on demand.
A failed query keeps its own row. Run-level bookkeeping queries and query
progress stay in the Statements tab. Printed output is hidden behind a
switch, except a failing run's last printed block, which holds its failures.
A 403 or 404 on reload now clears the read's remembered answer and the
data on screen, so someone whose access was removed sees the refusal
instead of the earlier answer. Network errors keep the data.
The root loader starts each page's first reads before the switch and waits
for them, up to 1.5 s, and the page takes those reads over instead of
sending them again. Links already preload on hover, so most switches land
with the data in place. A slow switch shows a thin bar along the top.
Schedules, the latest run and critical nodes move to chips in the header,
and runs and code to their own tabs, so the graph fills the page. Clicking
a node selects it and shows it in the side panel; Shift, Ctrl or Cmd adds
to the selection, and the selected nodes can be run on their own.
Hover still preloads code. Reading data on hover recorded SQL and denial
audit rows for pages the person never opened.
Every Run entry point (lineage, catalog, node, job selection, runs,
checks and the overview) now opens /plan with the command. The page
shows the dry-run check: the selected nodes as a graph, grouped by
state, with permissions and options. Nothing starts until Run is
pressed there.
The trigger history, tick and run-node reads each began a writer
transaction, authorized the whole-target listing, checked that the row
belongs to the target and committed early when it did not. row_in_target
now owns that sequence and returns the open transaction only for a known
row, so each read keeps just its own query.
@kvlonge kvlonge added the full-verify Run the full Verify matrix on this pull request label Nov 9, 2026
@kvlonge
kvlonge enabled auto-merge (squash) November 9, 2026 11:04
@kvlonge
kvlonge merged commit 8d64fb7 into main Nov 9, 2026
141 of 145 checks passed
@kvlonge
kvlonge deleted the feat/ui-feedback-pr branch November 9, 2026 17:28
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

full-verify Run the full Verify matrix on this pull request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant