fix(approvals): usertest-panel hardening (0.81.0)

Panel findings against the reworked approvals page, fixed in place:

- Never fabricate the request time: ApprovalRecord.createdAt is
  nullable now; a missing created_at omits the line instead of
  rendering DateTime.now() (which drifted on refresh). Guard:
  approvals_origin_test pins the omit-on-null invariant.
- Copyable errors on approve/reject/batch via showChainErrorSnack
  (the hard project rule) — batch surfaces the first real cause.
- Reject requires a reason: ChainInlineHelp strip + confirm disabled
  while empty, no more silent close-and-nothing-happens.
- Batch approve applies the same no-data confirmation as the single
  path, naming how many selected requests carry no show: data.
- Plainer language: glossary "Vorgang (Flow)", history label FRAGE
  (was PROMPT), no-data hint drops developer jargon.
- One-click copy of the run id; history payload pretty-prints like
  the card.

Signed-off-by: flemming-it <stefan.a.flemming@googlemail.com>
This commit is contained in:
flemming-it 2026-07-26 16:05:55 +02:00
parent 28f6fe1a9a
commit f7d7427d91
9 changed files with 411 additions and 122 deletions

View file

@ -28,6 +28,31 @@ lockstep.
local CLI falls back to it. Guard: two new `RunsLoadErrorView`
widget tests.
### Fixed (0.81.0)
Approvals usertest-panel hardening:
- **Never fake the request time.** A missing/unparseable `created_at`
now leaves the "Angefordert" line off the card instead of showing
`now` (which even drifted on every refresh). `ApprovalRecord.createdAt`
is nullable; guard in `approvals_origin_test`.
- **Copyable errors on every path.** Approve/Reject and both batch
actions now route failures through `showChainErrorSnack` instead of
a bare `SnackBar(Text(e))` — the batch path surfaces the first real
cause, not just a count.
- **Reject needs a reason.** The reject dialog leads with a
`ChainInlineHelp` strip and disables the confirm button while the
reason is empty, instead of closing silently with nothing happening.
- **Batch approve respects the no-data guard.** A bulk approve that
includes requests without `show:` data now asks for the same
conscious confirmation the single approve already required, naming
how many are data-less.
- **Plainer language.** The intro and origin glossary "Flow" as
"Vorgang (Flow)", the history detail labels the question "FRAGE"
(not "PROMPT"), and the no-data hint drops developer jargon.
- **Copy the run id in one click**, and the history payload renders
with the same JSON pretty-printing as the card.
### Added (0.80.0)
- **Ollama joins the host services.** Ollama-backed store entries