Commit Graph
20 Commits
Author SHA1 Message Date
dependabot[bot] b3800e61f2 chore(deps): Bump the minor-and-patch group across 1 directory with 9 updates (#24)
Bumps the minor-and-patch group with 9 updates in the / directory:

| Package | From | To |
| --- | --- | --- |
| [doctrine/orm](https://github.com/doctrine/orm) | `3.7.1` | `3.7.4` |
| [symfony/asset-mapper](https://github.com/symfony/asset-mapper) | `8.1.7` | `8.1.8` |
| [symfony/console](https://github.com/symfony/console) | `8.1.7` | `8.1.8` |
| [symfony/form](https://github.com/symfony/form) | `8.1.7` | `8.1.8` |
| [symfony/framework-bundle](https://github.com/symfony/framework-bundle) | `8.1.7` | `8.1.8` |
| [symfony/http-client](https://github.com/symfony/http-client) | `8.1.7` | `8.1.8` |
| [symfony/property-info](https://github.com/symfony/property-info) | `8.1.7` | `8.1.8` |
| [symfony/security-bundle](https://github.com/symfony/security-bundle) | `8.1.7` | `8.1.8` |
| [symfony/web-profiler-bundle](https://github.com/symfony/web-profiler-bundle) | `8.1.7` | `8.1.8` |



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

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

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

Updates `symfony/form` from 8.1.7 to 8.1.8
- [Release notes](https://github.com/symfony/form/releases)
- [Changelog](https://github.com/symfony/form/blob/8.2/CHANGELOG.md)
- [Commits](https://github.com/symfony/form/compare/v8.1.7...v8.1.8)

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

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

Updates `symfony/property-info` from 8.1.7 to 8.1.8
- [Release notes](https://github.com/symfony/property-info/releases)
- [Changelog](https://github.com/symfony/property-info/blob/8.2/CHANGELOG.md)
- [Commits](https://github.com/symfony/property-info/compare/v8.1.7...v8.1.8)

Updates `symfony/security-bundle` from 8.1.7 to 8.1.8
- [Release notes](https://github.com/symfony/security-bundle/releases)
- [Changelog](https://github.com/symfony/security-bundle/blob/8.2/CHANGELOG.md)
- [Commits](https://github.com/symfony/security-bundle/compare/v8.1.7...v8.1.8)

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

---
updated-dependencies:
- dependency-name: doctrine/orm
  dependency-version: 3.7.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: minor-and-patch
- dependency-name: symfony/asset-mapper
  dependency-version: 8.1.8
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: minor-and-patch
- dependency-name: symfony/console
  dependency-version: 8.1.8
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: minor-and-patch
- dependency-name: symfony/form
  dependency-version: 8.1.8
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: minor-and-patch
- dependency-name: symfony/framework-bundle
  dependency-version: 8.1.8
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: minor-and-patch
- dependency-name: symfony/http-client
  dependency-version: 8.1.8
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: minor-and-patch
- dependency-name: symfony/property-info
  dependency-version: 8.1.8
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: minor-and-patch
- dependency-name: symfony/security-bundle
  dependency-version: 8.1.8
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: minor-and-patch
- dependency-name: symfony/web-profiler-bundle
  dependency-version: 8.1.8
  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>
2026-10-10 18:21:50 +02:00
dependabot[bot] 61730fbe34 chore(deps): Bump the minor-and-patch group across 1 directory with 11 updates (#22)
Bumps the minor-and-patch group with 11 updates in the / directory:

| Package | From | To |
| --- | --- | --- |
| [doctrine/orm](https://github.com/doctrine/orm) | `3.7.0` | `3.7.1` |
| [symfony/asset-mapper](https://github.com/symfony/asset-mapper) | `8.1.5` | `8.1.7` |
| [symfony/form](https://github.com/symfony/form) | `8.1.6` | `8.1.7` |
| [symfony/http-client](https://github.com/symfony/http-client) | `8.1.5` | `8.1.7` |
| [symfony/mailer](https://github.com/symfony/mailer) | `8.1.5` | `8.1.7` |
| [symfony/stimulus-bundle](https://github.com/symfony/stimulus-bundle) | `3.4.0` | `3.5.1` |
| [symfony/ux-autocomplete](https://github.com/symfony/ux-autocomplete) | `3.4.0` | `3.5.1` |
| [symfony/ux-turbo](https://github.com/symfony/ux-turbo) | `3.4.0` | `3.5.1` |
| [twig/extra-bundle](https://github.com/twigphp/twig-extra-bundle) | `3.24.0` | `3.29.0` |
| [twig/twig](https://github.com/twigphp/Twig) | `3.28.0` | `3.30.0` |
| [symfony/maker-bundle](https://github.com/symfony/maker-bundle) | `1.67.0` | `1.68.0` |



Updates `doctrine/orm` from 3.7.0 to 3.7.1
- [Release notes](https://github.com/doctrine/orm/releases)
- [Commits](https://github.com/doctrine/orm/compare/3.7.0...3.7.1)

Updates `symfony/asset-mapper` from 8.1.5 to 8.1.7
- [Release notes](https://github.com/symfony/asset-mapper/releases)
- [Changelog](https://github.com/symfony/asset-mapper/blob/8.2/CHANGELOG.md)
- [Commits](https://github.com/symfony/asset-mapper/compare/v8.1.5...v8.1.7)

Updates `symfony/form` from 8.1.6 to 8.1.7
- [Release notes](https://github.com/symfony/form/releases)
- [Changelog](https://github.com/symfony/form/blob/8.2/CHANGELOG.md)
- [Commits](https://github.com/symfony/form/compare/v8.1.6...v8.1.7)

Updates `symfony/http-client` from 8.1.5 to 8.1.7
- [Release notes](https://github.com/symfony/http-client/releases)
- [Changelog](https://github.com/symfony/http-client/blob/8.2/CHANGELOG.md)
- [Commits](https://github.com/symfony/http-client/compare/v8.1.5...v8.1.7)

Updates `symfony/mailer` from 8.1.5 to 8.1.7
- [Release notes](https://github.com/symfony/mailer/releases)
- [Changelog](https://github.com/symfony/mailer/blob/8.2/CHANGELOG.md)
- [Commits](https://github.com/symfony/mailer/compare/v8.1.5...v8.1.7)

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

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

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

Updates `twig/extra-bundle` from 3.24.0 to 3.29.0
- [Release notes](https://github.com/twigphp/twig-extra-bundle/releases)
- [Commits](https://github.com/twigphp/twig-extra-bundle/compare/v3.24.0...v3.29.0)

Updates `twig/twig` from 3.28.0 to 3.30.0
- [Release notes](https://github.com/twigphp/Twig/releases)
- [Changelog](https://github.com/twigphp/Twig/blob/3.x/CHANGELOG)
- [Commits](https://github.com/twigphp/Twig/compare/v3.28.0...v3.30.0)

Updates `symfony/maker-bundle` from 1.67.0 to 1.68.0
- [Release notes](https://github.com/symfony/maker-bundle/releases)
- [Commits](https://github.com/symfony/maker-bundle/compare/v1.67.0...1.68.0)

---
updated-dependencies:
- dependency-name: doctrine/orm
  dependency-version: 3.7.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: minor-and-patch
- dependency-name: symfony/asset-mapper
  dependency-version: 8.1.7
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: minor-and-patch
- dependency-name: symfony/form
  dependency-version: 8.1.7
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: minor-and-patch
- dependency-name: symfony/http-client
  dependency-version: 8.1.7
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: minor-and-patch
- dependency-name: symfony/mailer
  dependency-version: 8.1.7
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: minor-and-patch
- dependency-name: symfony/stimulus-bundle
  dependency-version: 3.5.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: minor-and-patch
- dependency-name: symfony/ux-autocomplete
  dependency-version: 3.5.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: minor-and-patch
- dependency-name: symfony/ux-turbo
  dependency-version: 3.5.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: minor-and-patch
- dependency-name: twig/extra-bundle
  dependency-version: 3.29.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: minor-and-patch
- dependency-name: twig/twig
  dependency-version: 3.30.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: minor-and-patch
- dependency-name: symfony/maker-bundle
  dependency-version: 1.68.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  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>
2026-09-25 17:02:11 +02:00
dependabot[bot] e9bc7cd0d6 build(deps): Bump the minor-and-patch group across 1 directory with 15 updates
Bumps the minor-and-patch group with 9 updates in the / directory:

| Package | From | To |
| --- | --- | --- |
| [doctrine/doctrine-bundle](https://github.com/doctrine/DoctrineBundle) | `3.3.1` | `3.3.2` |
| [doctrine/doctrine-migrations-bundle](https://github.com/doctrine/DoctrineMigrationsBundle) | `4.0.0` | `4.0.1` |
| [doctrine/orm](https://github.com/doctrine/orm) | `3.6.8` | `3.7.0` |
| [knplabs/knp-paginator-bundle](https://github.com/KnpLabs/KnpPaginatorBundle) | `6.10.0` | `6.11.0` |
| [symfony/form](https://github.com/symfony/form) | `8.1.5` | `8.1.6` |
| [symfony/monolog-bundle](https://github.com/symfony/monolog-bundle) | `4.0.2` | `4.1.0` |
| [symfony/security-bundle](https://github.com/symfony/security-bundle) | `8.1.2` | `8.1.7` |
| [symfony/twig-bundle](https://github.com/symfony/twig-bundle) | `8.1.2` | `8.1.7` |
| [symfony/web-profiler-bundle](https://github.com/symfony/web-profiler-bundle) | `8.1.5` | `8.1.7` |



Updates `doctrine/doctrine-bundle` from 3.3.1 to 3.3.2
- [Release notes](https://github.com/doctrine/DoctrineBundle/releases)
- [Commits](https://github.com/doctrine/DoctrineBundle/compare/3.3.1...3.3.2)

Updates `doctrine/doctrine-migrations-bundle` from 4.0.0 to 4.0.1
- [Release notes](https://github.com/doctrine/DoctrineMigrationsBundle/releases)
- [Commits](https://github.com/doctrine/DoctrineMigrationsBundle/compare/4.0.0...4.0.1)

Updates `doctrine/orm` from 3.6.8 to 3.7.0
- [Release notes](https://github.com/doctrine/orm/releases)
- [Commits](https://github.com/doctrine/orm/compare/3.6.8...3.7.0)

Updates `knplabs/knp-paginator-bundle` from 6.10.0 to 6.11.0
- [Release notes](https://github.com/KnpLabs/KnpPaginatorBundle/releases)
- [Commits](https://github.com/KnpLabs/KnpPaginatorBundle/compare/v6.10.0...v6.11.0)

Updates `symfony/console` from 8.1.5 to 8.1.7
- [Release notes](https://github.com/symfony/console/releases)
- [Changelog](https://github.com/symfony/console/blob/8.2/CHANGELOG.md)
- [Commits](https://github.com/symfony/console/compare/v8.1.5...v8.1.7)

Updates `symfony/form` from 8.1.5 to 8.1.6
- [Release notes](https://github.com/symfony/form/releases)
- [Changelog](https://github.com/symfony/form/blob/8.2/CHANGELOG.md)
- [Commits](https://github.com/symfony/form/compare/v8.1.5...v8.1.6)

Updates `symfony/framework-bundle` from 8.1.5 to 8.1.7
- [Release notes](https://github.com/symfony/framework-bundle/releases)
- [Changelog](https://github.com/symfony/framework-bundle/blob/8.2/CHANGELOG.md)
- [Commits](https://github.com/symfony/framework-bundle/compare/v8.1.5...v8.1.7)

Updates `symfony/mime` from 8.1.5 to 8.1.7
- [Release notes](https://github.com/symfony/mime/releases)
- [Changelog](https://github.com/symfony/mime/blob/8.2/CHANGELOG.md)
- [Commits](https://github.com/symfony/mime/compare/v8.1.5...v8.1.7)

Updates `symfony/monolog-bundle` from 4.0.2 to 4.1.0
- [Release notes](https://github.com/symfony/monolog-bundle/releases)
- [Changelog](https://github.com/symfony/monolog-bundle/blob/4.x/CHANGELOG.md)
- [Commits](https://github.com/symfony/monolog-bundle/compare/v4.0.2...v4.1.0)

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

Updates `symfony/property-info` from 8.1.5 to 8.1.7
- [Release notes](https://github.com/symfony/property-info/releases)
- [Changelog](https://github.com/symfony/property-info/blob/8.2/CHANGELOG.md)
- [Commits](https://github.com/symfony/property-info/compare/v8.1.5...v8.1.7)

Updates `symfony/security-bundle` from 8.1.2 to 8.1.7
- [Release notes](https://github.com/symfony/security-bundle/releases)
- [Changelog](https://github.com/symfony/security-bundle/blob/8.2/CHANGELOG.md)
- [Commits](https://github.com/symfony/security-bundle/compare/v8.1.2...v8.1.7)

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

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

Updates `symfony/web-profiler-bundle` from 8.1.5 to 8.1.7
- [Release notes](https://github.com/symfony/web-profiler-bundle/releases)
- [Changelog](https://github.com/symfony/web-profiler-bundle/blob/8.2/CHANGELOG.md)
- [Commits](https://github.com/symfony/web-profiler-bundle/compare/v8.1.5...v8.1.7)

---
updated-dependencies:
- dependency-name: doctrine/doctrine-bundle
  dependency-version: 3.3.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: minor-and-patch
- dependency-name: doctrine/doctrine-migrations-bundle
  dependency-version: 4.0.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: minor-and-patch
- dependency-name: doctrine/orm
  dependency-version: 3.7.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: minor-and-patch
- dependency-name: knplabs/knp-paginator-bundle
  dependency-version: 6.11.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: minor-and-patch
- dependency-name: symfony/console
  dependency-version: 8.1.7
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: minor-and-patch
- dependency-name: symfony/form
  dependency-version: 8.1.6
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: minor-and-patch
- dependency-name: symfony/framework-bundle
  dependency-version: 8.1.7
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: minor-and-patch
- dependency-name: symfony/mime
  dependency-version: 8.1.7
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: minor-and-patch
- dependency-name: symfony/monolog-bundle
  dependency-version: 4.1.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: minor-and-patch
- dependency-name: symfony/process
  dependency-version: 8.1.7
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: minor-and-patch
- dependency-name: symfony/property-info
  dependency-version: 8.1.7
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: minor-and-patch
- dependency-name: symfony/security-bundle
  dependency-version: 8.1.7
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: minor-and-patch
- dependency-name: symfony/string
  dependency-version: 8.1.7
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: minor-and-patch
- dependency-name: symfony/twig-bundle
  dependency-version: 8.1.7
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: minor-and-patch
- dependency-name: symfony/web-profiler-bundle
  dependency-version: 8.1.7
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: minor-and-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-09-15 17:37:15 +02:00
Paul LütznerandClaude Opus 5 24a5ab3de1 build: mercure 0.8, and a database of PHPUnit's own
MERCURE 0.5.0 / symfony/mercure 0.8.0, kept out of the earlier sweep
because it carries the live-update transport and should not ride along
with eighteen patch bumps. It earned that: HubInterface gained
getProtocolVersion() and getCookieName(), so the two hub doubles in
CalendarSyncFinishedNotificationTest stopped satisfying it — a fatal
error, not a failing test. Both implement them now, returning what a real
hub would rather than pretending to configuration these tests do not
have. Verified where it matters: the full browser suite, including the
specs that stop and restart the hub to prove the stream recovers.

A DATABASE OF ITS OWN for the unit suite.

Both suites run APP_ENV=test, and doctrine.yaml's
`dbname_suffix: '_test%env(default::TEST_TOKEN)%'` therefore pointed both
at app_test. One database, two suites — and one test in here truncates
real tables, because exercising a data reset is its whole purpose.

Sequentially that is safe; Postgres rolls a TRUNCATE back like anything
else. Concurrently it is not: TRUNCATE takes an ACCESS EXCLUSIVE lock, so
live queries from the browser suite block until the unit test's
transaction ends, and specs with no connection to any of this report
timeouts. It fits the transaction abort seen here once and never
reproduced.

TEST_TOKEN is Symfony's own mechanism for exactly this, so the fix uses
it rather than inventing a second DATABASE_URL. bin/test-unit.sh sets it
and does the create/migrate/seed a fresh database needs.

The seeding is the part worth guarding: PageRendersTest, ListFragmentTest
and others SKIP THEMSELVES when the admin user is missing, so without it a
green run would quietly be ~50 tests smaller than it looks — a worse
failure than a red one. Checked rather than assumed: 4047 tests either
way, no skipped or incomplete markers.

The assertion count moved, 11540 → 11526, and settled there across runs.
That is the point of the change showing up: the unit suite was reading
rows the browser stack had left behind, and now it reads only its own.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-24 15:08:17 +02:00
Paul LütznerandClaude Opus 5 fbdc61b5bd build(deps): Symfony 8.1.5, tailwind-bundle 1.0, TypeScript 7 — and Playwright held at 1.61
Five of the six open Dependabot PRs, taken locally in one pass rather
than merged one at a time: each rebase triggers the expensive workflow
and they all touch the same two lock files. The sixth, the actions group,
was merged as it was — its own CI was green, and it clears the Node 20
deprecation the runner has been printing.

  symfony/*                     8.1.0/8.1.1 → 8.1.5   (18 packages)
  symfonycasts/tailwind-bundle  0.14.0      → 1.0.0
  @types/node                   22          → 26.2.0
  typescript                    5.6         → 7.0.2

PLAYWRIGHT IS PINNED AT ~1.61.1, deliberately, and this is the only part
worth arguing about.

1.62 failed eight cases in appearance/list-display.spec.ts, every one of
them asserting that a clip-path'd element is visible. Tailwind was the
obvious suspect and is innocent: the compiled clip-path and spacing rules
are byte-identical between the two builds. Reverting Playwright alone
took it from eight failures to none.

Then the question that actually matters — whether 1.62 is RIGHT, because
"element is hidden" could mean a real UI bug. It is not. The account
corner measures 10×10 at (957, 336), display block, visibility visible,
opacity 1, an opaque background, and a parent that does not clip. It is
on screen and painted. 1.62 changed what it counts as visible for
clipped elements and is wrong about this one.

`~1.61.1` rather than `^`: a caret would walk straight back into 1.62 on
the next clean install.

TypeScript 7 earned its place. It found a genuine error — el.click() on
`HTMLElement | SVGElement`, in a test written this morning, since TS7's
lib.dom no longer puts click() on SVGElement — plus nine implicit-anys
that TS5 had also been reporting into a void, because CI does not run
typecheck. All eleven fixed: `npm run typecheck` is clean for the first
time. A typecheck that is permanently red is one nobody runs.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-24 13:52:34 +02:00
Paul LütznerandClaude Opus 5 972a8a9d3f Give plMail a landing page, built from the repository it describes
A wiki is where somebody already inside GitHub looks. It has no way to be
the thing a link to plMail shows a person who has never seen it, so there
is now a site as well: a landing page and the whole handbook, at
karatektus.github.io/pl_mail, deployed by .github/workflows/pages.yml on
every push to main.

It holds no content. The landing page IS README.md and the handbook IS
docs/, rendered into a shell by bin/build-site.php — nothing on the site
can say something the repository does not, because there is nowhere for
it to be written down. Even the hero is lifted rather than written: its
lead is README's own opening paragraph, because a hero composed here
would be the one piece of prose no file backs and the first thing to go
stale. The wiki mirror stays; two outputs of one source cannot disagree
with each other.

The tree is preserved rather than flattened, unlike the wiki mirror,
which had to flatten because a wiki has one namespace. So a cross-link
between two pages needs only its extension changed and an image reference
needs nothing, and the rewriting that remains is the small honest kind: a
path that escapes docs/ becomes a link into GitHub, because the site
carries the handbook and not the source.

**The theme picker is generated from the app's own enum.** Theme::swatch()
already carries surface, ink and accent per theme for the appearance
picker, and the rest of a palette is derived from those at build time —
so the site offers exactly the seven plMail offers, and adding an eighth
to the app adds it here. Transcribing them would have agreed until
somebody added one, and then the site would quietly offer six of seven.

The language picker lists a locale as available when docs/<locale>/
exists and as "not translated yet" when it does not, which makes
translating the handbook the act of creating that directory and nothing
else. Today that means English, with German and Pirate shown and
disabled — a switcher that silently omitted them would say the site has
no opinion about German, where this says where the gap is.

Search is the whole handbook as 140KB of JSON, fetched on first focus and
matched in the browser. A hosted index would be faster to write and would
stop the site being a directory of files that works from a checkout, from
a fork's Pages, and behind whatever proxy somebody puts it behind.

league/commonmark is a require-dev dependency: the site is built in CI and
never by the application, so a Markdown parser in the runtime image would
be a package nothing runs. Bumped guzzlehttp/guzzle to 7.15.2 while
composer was open — 7.15.1 carries two advisories, one of which is a
noncanonical host bypassing host-based checks, which is the shape of the
SSRF guard.

Also corrects this file's claim that the non-Docker Playwright variants
start `symfony serve`. They have not since that server was replaced.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-05 21:54:19 +02:00
Paul LütznerandClaude Opus 5 d3fb1692b3 Add the calendar data layer: JSCalendar events with materialised occurrences
Storage is JSCalendar (RFC 8984) in jsonb, with everything a query touches
projected into real columns. Both halves earn their place. JSCalendar is
canonical because everything this will ever talk to speaks it or converts
cleanly — iCalendar both ways, CalDAV, JMAP calendars when that draft
lands — and a bespoke schema gets re-derived badly the first time an .ics
round-trips, silently dropping participants, alerts and overrides. But
Postgres cannot do range logic on "PT1H", so the columns exist too.

Recurrence is the part that is easy to get almost right, and there are
only three options. Expanding RRULEs at query time means loading every
recurring event ever created to answer "what is in July" — a standup from
2019 still generates instances — and nothing is indexable. Materialising
everything does not terminate for FREQ=DAILY with no UNTIL. So:
materialise to a bounded horizon, roll it forward nightly, and fall back
to live expansion outside it.

calendar_event_occurrence carries a GENERATED tsrange, and views read it
with `span && tsrange(from, to)` against a GiST index. The naive
`starts_at < :to AND ends_at > :from` is not just slower — it silently
misses the conference that started last week and is still running, because
starts_at ordering stops approximating ends_at ordering once multi-day
events exist. That index lives only in the migration: this DBAL has no
flag for USING gist, so every schema diff asks to drop it, and nothing
here may run doctrine:schema:update.

Two findings from writing the tests:

  * sabre accepts FREQ=SECONDLY and FREQ=MINUTELY at validation but its
    iterator has no branch to advance on either, so it yields one instant
    forever. The occurrence cap turned that into a thousand identical rows
    — a worse failure than a hang, because it looks like it worked. The
    converter now refuses both frequencies, and the materialiser stops on
    any rule that fails to move forward.
  * Expansion has to happen in the event's own zone. A 09:00 Berlin
    standup is 08:00 UTC in winter and 07:00 UTC in summer; expanding in
    UTC passes every test written in UTC and moves everyone's meeting
    twice a year. Pinned by testWeeklyExpansionHoldsLocalTimeAcrossADst-
    Transition.

Provenance tables (event_source_link, event_suppression) ship now though
nothing writes them yet: they are what will let extraction re-run over a
whole mailbox as a backfill rather than a resync, and a suppression the
user has already expressed must survive that.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-01 00:33:59 +02:00
Paul LütznerandClaude Opus 5 e570884422 Actually license the project
The README has always said AGPL-3.0 and the repository invites pull
requests, but there was no LICENSE file and composer.json declared
"proprietary". In that state nobody could legally fork or contribute,
and GitHub could not detect a licence at all.

Adds the AGPL-3.0 text — which the licence itself requires be
distributed with the source — and corrects the composer declaration to
AGPL-3.0-or-later.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-31 12:28:04 +02:00
Paul Lützner c6ae79450a 2fa 2026-07-31 07:18:26 +02:00
Paul Lützner 5a7f6a3a41 scheduler 2026-07-28 22:25:00 +02:00
Paul Lützner a243636a34 this is now a PWA und has push 2026-07-27 23:29:39 +02:00
Paul Lützner 4ef4616ee8 more thread ui and jmap start 2026-07-26 18:06:50 +02:00
Paul Lützner 4f57efa479 updates 2026-07-26 10:58:31 +02:00
Paul Lützner 1971f08953 graph start 2026-07-24 13:56:18 +02:00
Paul Lützner cd3c78c205 update 2026-07-21 13:40:57 +02:00
Paul Lützner 4dc569e439 google oauth 2026-07-16 17:46:51 +02:00
Paul Lützner 3ca64ee0d1 autocomplete shenanigans 2026-07-15 17:10:22 +02:00
Paul Lützner 76f890a49e init 2026-07-02 13:12:28 +02:00
Paul Lützner 55862ccb2f Add webapp packages 2026-06-24 14:53:43 +02:00
Paul Lützner db8b7fbac5 Add initial set of files 2026-06-24 14:51:50 +02:00