Skip to content

What's new: the ? menu above the calendar, main builds, and feedback with a screenshot - #167

Merged
karatektus merged 3 commits into
mainfrom
fix/whats-new-followups
Oct 15, 2026
Merged

karatektus merged 3 commits into
mainfrom
fix/whats-new-followups

Conversation

@karatektus

Copy link
Copy Markdown
Owner

Follow-ups to #166 (What's new, #165), found trying it on an install that follows main. These were pushed to feat/whats-new after #166 had already been merged, so they never reached main.

  • The ? menu was drawn under the calendar. It was an ordinary dropdown inside the header's z-20 stacking context, so the calendar's day headings painted over it. It now opens in the top layer through ui--user-menu, like the account menu, and closes when an item is chosen. New browser test: the menu is on top over /calendar/week.
  • What's new never opened by itself on a main install. Only a vX.Y.Z build counted as a release, so main / sha-… images had none. A build that is not a tag now counts as the newest tagged release in its own CHANGELOG.md; Unreleased is still never shown. Docs (EN/DE) updated.
  • Feedback with a screenshot closed the dialog instead of showing the sent screen. The form now posts with fetch() and draws the answer into the dialog; anything that is not the dialog is reported in the form with its HTTP status instead of being visited as a page. The screenshot is a JPEG at most 1600 px wide instead of a full-size PNG. The From is the first account field that is an address, and an account with none is refused in the form instead of throwing. New browser tests for a refused request (413) and for the sent screen with a screenshot.

Checks run locally: What's new, documentation and translation PHPUnit tests (69), PHPStan clean, and the What's new / menu / back-navigation browser specs against a stack built from these commits.

🤖 Generated with Claude Code

karatektus and others added 2 commits October 15, 2026 23:45
…ewest release

The menu was an ordinary dropdown inside the header's z-20 stacking
context, so the calendar's day headings painted over it. It now opens in
the top layer through ui--user-menu, like the account menu, and closes
when an item is chosen.

A build that is not a tag (main, sha-…, a checkout) counted as no
release, so installs that follow main never saw the dialog. It now
counts as the newest tagged release in its own changelog; Unreleased is
still never shown.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Sending with a screenshot closed the dialog without the sent screen. The
form is now posted with fetch() and its answer drawn into the dialog;
anything that is not the dialog (a proxy refusing a large body, a server
error) is said in the form with its status, and the dialog stays.

The screenshot is a JPEG at most 1600 px wide instead of a full-size
PNG, a fraction of the size, so a reverse proxy's default body limit is
far away. The From is the first field of the account that is an
address; an account with none is refused in the form instead of
throwing at send time.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@karatektus karatektus added the bug Something that worked, or should work, does not label Oct 15, 2026
@github-actions github-actions Bot added documentation Improvements or additions to documentation area: install Concerns install labels Oct 15, 2026
…s spec

The spec looked for the conversation by id alone, and the messages
inside it carry the same attribute with their own ids. On CI a message
id equalled the conversation's, so two elements matched and the strict
locator failed on the first try and the retry.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@karatektus
karatektus merged commit 0fd9e84 into main Oct 15, 2026
10 checks passed
@karatektus
karatektus deleted the fix/whats-new-followups branch October 15, 2026 22:21
DanversKara added a commit to DanversKara/pl_mail_bearermail that referenced this pull request Oct 19, 2026
* What's new opens after an update, with a way to send feedback (karatektus#166)

* What's new opens after an update, with a way to send feedback

The release notes from CHANGELOG.md, read from the image, in a dialog that
opens by itself the first time somebody uses plMail after an update and
never on a fresh install. A ? in the top bar opens it again, with a dot
while something is unseen; "Don't show this after updates" silences it,
and Settings -> General -> What's new undoes that. Highlights are marked
in the changelog with an HTML comment and may carry a screenshot taken by
tests/e2e/whats-new-screenshots.spec.ts.

Send feedback is a mail from one of the person's own accounts to
APP_FEEDBACK_TO (feedback@pluetzner.de by default), with an optional
rating and a screenshot of the page behind the dialog.

Existing users are recorded as having seen 0.3.1 by a migration; anyone
created later starts on the release running at their first request.

Closes karatektus#165.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Plain changelog headlines from 0.3.2 on, and highlights with screenshots

Every bold headline users see under "New to you" now says what changed in
a few words. Each release gets a handful of highlights, eight of them
with a picture cropped to the card or pane they are about, taken by
tests/e2e/whats-new-screenshots.spec.ts.

Relative links in the notes keep their words and lose the target, and
the parsed changelog's cache key carries a format version so a new
image never serves the previous one's parse.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Keep highlight pictures for ten releases, and none that nothing names

Every file in public/whats-new ships in every image. ChangelogReaderTest
now fails on a picture no highlight names, and on one whose release is
more than ten back; the release pull request that crosses the line
deletes it and leaves the entry a highlight without a picture.
Documented in CONTRIBUTING.md.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Credit karatektus#166 in the changelog

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Match the Back button by its whole name in the back-navigation specs

Playwright matches a string name as a substring, so "Back" also found the
new "Help and feedback" button in the top bar, which comes first, and the
specs opened its menu instead of going back to the list.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

* What's new: the ? menu above the calendar, main builds, and feedback with a screenshot (karatektus#167)

* The ? menu draws above the calendar, and a main build announces its newest release

The menu was an ordinary dropdown inside the header's z-20 stacking
context, so the calendar's day headings painted over it. It now opens in
the top layer through ui--user-menu, like the account menu, and closes
when an item is chosen.

A build that is not a tag (main, sha-…, a checkout) counted as no
release, so installs that follow main never saw the dialog. It now
counts as the newest tagged release in its own changelog; Unreleased is
still never shown.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Feedback with a screenshot stays in the dialog, whatever comes back

Sending with a screenshot closed the dialog without the sent screen. The
form is now posted with fetch() and its answer drawn into the dialog;
anything that is not the dialog (a proxy refusing a large body, a server
error) is said in the form with its status, and the dialog stays.

The screenshot is a JPEG at most 1600 px wide instead of a full-size
PNG, a fraction of the size, so a reverse proxy's default body limit is
far away. The From is the first field of the account that is an
address; an account with none is refused in the form instead of
throwing at send time.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Find the open conversation's toolbar by type in the keyboard-shortcuts spec

The spec looked for the conversation by id alone, and the messages
inside it carry the same attribute with their own ids. On CI a message
id equalled the conversation's, so two elements matched and the strict
locator failed on the first try and the retry.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

* What's new: a screenshot grows to fill the dialog instead of opening a tab (karatektus#181)

Clicking a highlight's screenshot opened the PNG in a new tab. It now grows
out of its thumbnail until it fills the What's new dialog, with an X; the X,
Escape or Back shrink it back, and What's new stays open.

Back goes through a history entry of its own (assets/history_layer.js),
imported first in app.js so its popstate listener runs before Turbo's, which
would otherwise restore the page and close the dialog.

Closes karatektus#179

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

* Store a UIDVALIDITY above 2147483647 (karatektus#174)

mailbox.uid_validity becomes a BIGINT, so IMAP folders whose UIDVALIDITY is above the signed INT range sync again. Reversible migration; the mapping stays ?int (DBAL 4 hydrates a bigint as an int).

Closes karatektus#171

Co-Authored-By: Philippe Delodder <philippe@delodder.be>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* A conversation no longer splits when its replies are synced first (karatektus#176)

Threading looked only from a reply to the message it answers, so replies synced before that message (INBOX before Sent Items) opened threads of their own and stayed there. MessageThreader now also looks the other way: after a message gets its thread, mail that already names its Message-ID in In-Reply-To or References is folded in by the new ThreadMerger. The older thread survives, keeping its JMAP id, summary, insights, star, snooze, labels and pinned tab. A GIN expression index makes the reverse lookup an index probe.

Review follow-up: moved mail is added to the surviving thread's collection so a label rule later in the same batch keeps its labels, plus tests for that, bracketed legacy references and provider-keyed survivors.

Closes karatektus#172

Co-authored-by: Philippe Delodder <philippe@delodder.be>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Let a deployment pull request through without an issue of its own (karatektus#183)

A milestone branch on its way to main (milestone/v0.4.0, karatektus#182) collects
work that was agreed and reviewed piece by piece, each piece closing its
own issue. It has no issue of its own to name, and listing the pieces'
issues only works once each has landed, so the required linked-issue
check refused it. `deployment` joins `bug`, `chore` and `dependencies` as
a label that needs none.

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

* A label a rule applies to new mail stays on its conversation (karatektus#185)

Rules run after threading and before the batch's flush, and ThreadLabelSynchronizer took the union over $thread->messages, which did not yet hold the message the threader had just attached. A rule's label was taken straight off the conversation again. The sync now counts the messages that point at the thread in memory (collection, identity map and pending inserts).

Closes karatektus#184

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Release v0.3.6 (karatektus#194)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Leave a message another Gmail account holds with that account (karatektus#196)

* Leave a message another Gmail account holds with that account

With several Gmail accounts connected, mail forwarded from one to another
reaches the second still Delivered-To the first and is attributed there.
Both merges in SyncGmailMessageBatchHandler then found the first account's
own row by Message-ID and wrote the second mailbox's Gmail id over its own:
they were written for a sibling that syncs over IMAP, and the sibling map is
every active account. The first account's sync then stored the message a
second time, and a later merge by Message-ID picked the other of the two
rows and gave it an id its twin still held: a duplicate key on
uniq_message_gmail_id_account, the whole batch failed, and every retry
fetched it again until Gmail answered 429 (discussion karatektus#168).

A row is now looked up by its Gmail id before either merge. A merge only
gives an id to a row of a non-Gmail account that has none yet, or has this
carrier's; anything else is recorded as held elsewhere, so the import counts
it and stops asking for it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Link the changelog entry to its PR

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

* What's new: one X on a full-size screenshot (karatektus#197)

The picture brought its own X into the corner of the dialog body, just
below the modal's X. It is gone; while a picture is up, the modal's X is
relabelled "Close the screenshot" and its first press puts the picture
back, the second closes What's new, as Escape already did.

Closes karatektus#187

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

* Calendar: an event that ends when it starts stays on its day (karatektus#198)

An end equal to the start (or a zero DURATION) is a stated instant and
now gets one minute instead of the nominal hour, so a 23:59 reminder no
longer runs past midnight and shows again on the next day. The nominal
hour for an event with no end at all now stops at the midnight of the
day it starts on, in DTSTART's own zone.

Closes karatektus#170

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

* Outlook's <![endif]--> no longer leaks into a message as text (karatektus#178)

Closes karatektus#175.

Co-authored-by: Philippe Delodder <7259755+phdelodder@users.noreply.github.com>

* Drop a header block the server repeats at the top of the body (karatektus#177)

Closes karatektus#173.

Co-authored-by: Philippe Delodder <7259755+phdelodder@users.noreply.github.com>

* Compose: allow a send addressed to Bcc only (karatektus#200)

A send with nobody in To was refused with "Add at least one recipient before sending", even with addresses in Cc or Bcc. The window's guard counted To, Cc and Bcc; the server's Count(min: 1) rule in the send group counted To only.

The rule is now a Callback on the To field that counts all three, read off the bound form since the fields are unmapped. A send with no recipient at all is still refused; a draft may still be saved with none.

Closes karatektus#201.

Co-Authored-By: jo2904 <josephdegaullier@gmx.fr>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Bump the minor-and-patch group with 13 updates (karatektus#193)

Bumps the minor-and-patch group with 13 updates:

| Package | From | To |
| --- | --- | --- |
| [doctrine/orm](https://github.com/doctrine/orm) | `3.7.4` | `3.7.5` |
| [symfony/asset-mapper](https://github.com/symfony/asset-mapper) | `8.1.8` | `8.1.9` |
| [symfony/console](https://github.com/symfony/console) | `8.1.8` | `8.1.9` |
| [symfony/framework-bundle](https://github.com/symfony/framework-bundle) | `8.1.8` | `8.1.9` |
| [symfony/http-client](https://github.com/symfony/http-client) | `8.1.8` | `8.1.9` |
| [symfony/mercure-bundle](https://github.com/symfony/mercure-bundle) | `0.5.0` | `0.6.1` |
| [symfony/process](https://github.com/symfony/process) | `8.1.7` | `8.1.9` |
| [symfony/stimulus-bundle](https://github.com/symfony/stimulus-bundle) | `3.5.1` | `3.6.0` |
| [symfony/string](https://github.com/symfony/string) | `8.1.7` | `8.1.9` |
| [symfony/twig-bundle](https://github.com/symfony/twig-bundle) | `8.1.7` | `8.1.9` |
| [symfony/ux-autocomplete](https://github.com/symfony/ux-autocomplete) | `3.5.1` | `3.6.0` |
| [symfony/ux-turbo](https://github.com/symfony/ux-turbo) | `3.5.1` | `3.6.0` |
| [symfony/web-profiler-bundle](https://github.com/symfony/web-profiler-bundle) | `8.1.8` | `8.1.9` |


Updates `doctrine/orm` from 3.7.4 to 3.7.5
- [Release notes](https://github.com/doctrine/orm/releases)
- [Commits](doctrine/orm@3.7.4...3.7.5)

Updates `symfony/asset-mapper` from 8.1.8 to 8.1.9
- [Release notes](https://github.com/symfony/asset-mapper/releases)
- [Changelog](https://github.com/symfony/asset-mapper/blob/8.2/CHANGELOG.md)
- [Commits](symfony/asset-mapper@v8.1.8...v8.1.9)

Updates `symfony/console` from 8.1.8 to 8.1.9
- [Release notes](https://github.com/symfony/console/releases)
- [Changelog](https://github.com/symfony/console/blob/8.2/CHANGELOG.md)
- [Commits](symfony/console@v8.1.8...v8.1.9)

Updates `symfony/framework-bundle` from 8.1.8 to 8.1.9
- [Release notes](https://github.com/symfony/framework-bundle/releases)
- [Changelog](https://github.com/symfony/framework-bundle/blob/8.2/CHANGELOG.md)
- [Commits](symfony/framework-bundle@v8.1.8...v8.1.9)

Updates `symfony/http-client` from 8.1.8 to 8.1.9
- [Release notes](https://github.com/symfony/http-client/releases)
- [Changelog](https://github.com/symfony/http-client/blob/8.2/CHANGELOG.md)
- [Commits](symfony/http-client@v8.1.8...v8.1.9)

Updates `symfony/mercure-bundle` from 0.5.0 to 0.6.1
- [Release notes](https://github.com/symfony/mercure-bundle/releases)
- [Changelog](https://github.com/symfony/mercure-bundle/blob/main/CHANGELOG.md)
- [Commits](symfony/mercure-bundle@v0.5.0...v0.6.1)

Updates `symfony/process` from 8.1.7 to 8.1.9
- [Release notes](https://github.com/symfony/process/releases)
- [Changelog](https://github.com/symfony/process/blob/8.2/CHANGELOG.md)
- [Commits](symfony/process@v8.1.7...v8.1.9)

Updates `symfony/stimulus-bundle` from 3.5.1 to 3.6.0
- [Release notes](https://github.com/symfony/stimulus-bundle/releases)
- [Changelog](https://github.com/symfony/stimulus-bundle/blob/3.x/CHANGELOG.md)
- [Commits](symfony/stimulus-bundle@v3.5.1...v3.6.0)

Updates `symfony/string` from 8.1.7 to 8.1.9
- [Release notes](https://github.com/symfony/string/releases)
- [Changelog](https://github.com/symfony/string/blob/8.2/CHANGELOG.md)
- [Commits](symfony/string@v8.1.7...v8.1.9)

Updates `symfony/twig-bundle` from 8.1.7 to 8.1.9
- [Release notes](https://github.com/symfony/twig-bundle/releases)
- [Changelog](https://github.com/symfony/twig-bundle/blob/8.2/CHANGELOG.md)
- [Commits](symfony/twig-bundle@v8.1.7...v8.1.9)

Updates `symfony/ux-autocomplete` from 3.5.1 to 3.6.0
- [Release notes](https://github.com/symfony/ux-autocomplete/releases)
- [Changelog](https://github.com/symfony/ux-autocomplete/blob/3.x/CHANGELOG.md)
- [Commits](symfony/ux-autocomplete@v3.5.1...v3.6.0)

Updates `symfony/ux-turbo` from 3.5.1 to 3.6.0
- [Release notes](https://github.com/symfony/ux-turbo/releases)
- [Changelog](https://github.com/symfony/ux-turbo/blob/3.x/CHANGELOG.md)
- [Commits](symfony/ux-turbo@v3.5.1...v3.6.0)

Updates `symfony/web-profiler-bundle` from 8.1.8 to 8.1.9
- [Release notes](https://github.com/symfony/web-profiler-bundle/releases)
- [Changelog](https://github.com/symfony/web-profiler-bundle/blob/8.2/CHANGELOG.md)
- [Commits](symfony/web-profiler-bundle@v8.1.8...v8.1.9)

---
updated-dependencies:
- dependency-name: doctrine/orm
  dependency-version: 3.7.5
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: minor-and-patch
- dependency-name: symfony/asset-mapper
  dependency-version: 8.1.9
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: minor-and-patch
- dependency-name: symfony/console
  dependency-version: 8.1.9
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: minor-and-patch
- dependency-name: symfony/framework-bundle
  dependency-version: 8.1.9
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: minor-and-patch
- dependency-name: symfony/http-client
  dependency-version: 8.1.9
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: minor-and-patch
- dependency-name: symfony/mercure-bundle
  dependency-version: 0.6.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: minor-and-patch
- dependency-name: symfony/process
  dependency-version: 8.1.9
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: minor-and-patch
- dependency-name: symfony/stimulus-bundle
  dependency-version: 3.6.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: minor-and-patch
- dependency-name: symfony/string
  dependency-version: 8.1.9
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: minor-and-patch
- dependency-name: symfony/twig-bundle
  dependency-version: 8.1.9
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: minor-and-patch
- dependency-name: symfony/ux-autocomplete
  dependency-version: 3.6.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: minor-and-patch
- dependency-name: symfony/ux-turbo
  dependency-version: 3.6.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: minor-and-patch
- dependency-name: symfony/web-profiler-bundle
  dependency-version: 8.1.9
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: minor-and-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump actions/labeler from 5 to 7 (karatektus#192)

Bumps the actions group with 1 update: [actions/labeler](https://github.com/actions/labeler).


Updates `actions/labeler` from 5 to 7
- [Release notes](https://github.com/actions/labeler/releases)
- [Commits](actions/labeler@v5...v7)

---
updated-dependencies:
- dependency-name: actions/labeler
  dependency-version: '7'
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: actions
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump @types/node from 26.6.4 to 26.6.5 (karatektus#191)

Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 26.6.4 to 26.6.5.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-version: 26.6.5
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump @playwright/test from 1.63.0 to 1.64.0 in the playwright group across 1 directory (karatektus#190)

* Bump @playwright/test

Bumps the playwright group with 1 update in the / directory: [@playwright/test](https://github.com/microsoft/playwright).


Updates `@playwright/test` from 1.63.0 to 1.64.0
- [Release notes](https://github.com/microsoft/playwright/releases)
- [Commits](microsoft/playwright@v1.63.0...v1.64.0)

---
updated-dependencies:
- dependency-name: "@playwright/test"
  dependency-version: 1.64.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: playwright
...

Signed-off-by: dependabot[bot] <support@github.com>

* E2E: abort the stubbed reconnect navigation instead of answering 204

Chromium 156 (Playwright 1.64) reports a navigation that ends in a 204 as a
finished request that commits nothing, where Chromium 155 reported it as
failed (net::ERR_ABORTED). Playwright's click waits for the navigation it
started to commit or fail, so with 1.64 the click never returned and the
test timed out reading "" off a closing page. An abort is reported as a
failure by every Chromium and keeps the document just the same.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* E2E: touch beside the open drawer, after it has stopped sliding

The drawer-open pull touched the middle of the rows (x~196) right after
`inert` came off, at the start of the drawer's 200ms slide. Once the 256px
drawer has arrived, that point is the drawer, not the backdrop, so the
hit-test only passed while it beat the transition; slower CI runners lost
that race on every branch from 2026-10-16. Wait for the drawer to rest,
then touch the backdrop strip to its right, and pull at the same point
once it is closed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Paul Lützner <karatektus@gmail.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

* Top bar on phones: Contacts goes to the drawer (it is there already), making room for upstream's ? menu

diag: report failing PHPUnit tests (temporary)

* Tests: What's new feedback goes to APP_FEEDBACK_TO (set in .env.test); drop PHPUnit diag

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: Paul Lützner <karatektus@gmail.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: Philippe Delodder <7259755+phdelodder@users.noreply.github.com>
Co-authored-by: Philippe Delodder <philippe@delodder.be>
Co-authored-by: Sven <sj@pmdevelopment.de>
Co-authored-by: jo2904 <59180897+jo2904@users.noreply.github.com>
Co-authored-by: jo2904 <josephdegaullier@gmx.fr>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area: install Concerns install bug Something that worked, or should work, does not documentation Improvements or additions to documentation

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant