Commit graph

1726 commits

Author SHA1 Message Date
a629bfb617 Merge pull request 'fix existing flakiness + cut runtime closes #533' (#544) from issue/mitgliederverwaltung-533 into main
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: #544
2026-06-16 18:30:14 +02:00
84e1cf1cb8 Merge branch 'main' into issue/mitgliederverwaltung-533
Some checks reported errors
continuous-integration/drone/push Build was killed
continuous-integration/drone/promote/production Build is passing
# Conflicts:
#	test/mv_web/member_live/index_test.exs
2026-06-16 18:13:03 +02:00
6d7ece20a8 docs(changelog): record member-creation deadlock fix under Unreleased 2026-06-16 17:55:24 +02:00
3d792e8b04 docs(testing): document create_member deadlock fix and async-test-safety 2026-06-16 17:54:32 +02:00
c0f40a13ce test(member-live): keep deadlock-prone member tests synchronous
These member/group/custom-field LiveView tests stay async: false. With the
foreign keys now deferrable the create_member deadlock no longer forces it, so
the rationale is updated: they remain synchronous as a deferred scope decision,
and index_groups_url_params/member_filter_component additionally have separate
async-isolation issues that must be fixed before they can run in parallel.
2026-06-16 17:53:59 +02:00
5e84c342b7 test(repo): assert member/user foreign keys are deferrable 2026-06-16 17:53:25 +02:00
ef94d2ef10 fix(repo): make member/user foreign keys deferrable to avoid create_member deadlock
Concurrent create_member transactions took FK FOR KEY SHARE (MultiXact) locks
on shared rows across members/users/membership_fee_types and could form a
cross-transaction cycle, producing intermittent PostgreSQL deadlocks (40P01)
under load. Making the three foreign keys DEFERRABLE INITIALLY DEFERRED moves
the check to commit time and breaks the cycle, without weakening integrity
(NOT NULL and ON DELETE RESTRICT are unaffected).
2026-06-16 17:52:51 +02:00
cb54c2c46e test(member-live): build date-filter property bounds without a reject-filter
The bound-pair generator filtered out ~1/4 of generated values, so unlucky
seeds hit StreamData's FilterTooNarrowError under full property runs.
Construct an at-least-one-bound-set pair directly instead, preserving the
exact domain with no rejection.
2026-06-16 17:52:17 +02:00
655fd80524 test: wait on observable state instead of blind sleeps
Replace the fixed Process.sleep waits in the import, members-PDF and
field-visibility tests with event-based / bounded-poll waits on the
observable condition, removing a known flakiness vector.
2026-06-16 17:51:43 +02:00
ccd1f81e3e test(member-live): assert rendered behavior instead of socket internals in the index view
Replace :sys.get_state assertions on the LiveView socket with assertions on
rendered output, so the tests pin user-visible behavior rather than internal
state; the few sites with no observable equivalent are kept and annotated.
2026-06-16 17:50:57 +02:00
3bd55fbfec test(seeds): drop the dead per-process seeds-run guard 2026-06-16 17:50:24 +02:00
18fb954f73 test(membership-fees): share create_fee_type and create_cycle fixtures
Replace the create_fee_type/create_cycle helpers duplicated across 18/8
membership-fee test files with a single shared definition in Mv.Fixtures,
reconciling the divergent local signatures (including the reversed
argument order) into one superset so behavior is unchanged.
2026-06-16 17:49:50 +02:00
82effde6a1 Merge pull request 'Mechanical cleanup, quick fixes & deduplication closes #531' (#543) from issue/mitgliederverwaltung-531 into main
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: #543
2026-06-16 16:06:52 +02:00
4f3050cc35 docs(changelog): record cleanup and quick fixes under Unreleased
Some checks reported errors
continuous-integration/drone/push Build was killed
continuous-integration/drone/promote/production Build is passing
2026-06-16 15:51:07 +02:00
a12fedcb5b ci(credo): enforce StrictModuleLayout and additional zero-violation checks 2026-06-16 15:51:07 +02:00
fe534319ee style: order module directives per StrictModuleLayout 2026-06-16 15:51:07 +02:00
3f073d4365 refactor(membership-fees): share fee-type delete handling between LiveViews 2026-06-16 15:51:07 +02:00
18bf4dab2b refactor(web): use canonical DateFormatter for all date display 2026-06-16 15:51:07 +02:00
ea105186a5 refactor(vereinfacht): reuse EmailSync.Loader for linked-member lookup 2026-06-16 15:51:07 +02:00
0cf27c95ca refactor(membership-fees): fold cycle-generation run/0 into run/1 2026-06-16 15:51:07 +02:00
ef70dd2935 refactor(settings): unify JSONB single-field update between member-field changes 2026-06-16 15:51:07 +02:00
e66fb5d3d9 refactor(email): share build/deliver skeleton across join emails 2026-06-16 15:51:07 +02:00
1adf6aa664 refactor(web): extract shared current_actor controller helper 2026-06-16 15:51:07 +02:00
561779e704 refactor(web): share member-dropdown keyboard navigation between LiveViews 2026-06-16 15:51:07 +02:00
164826d3aa refactor(authorization): unify own_data read check across linked resources 2026-06-16 15:51:07 +02:00
924dbd3bb8 refactor(oidc): drop OidcRoleSyncConfig passthrough and use Mv.Config directly 2026-06-16 15:51:07 +02:00
c4a695329c refactor(member-export): remove dead fetch/2 export chain 2026-06-16 15:51:07 +02:00
a9932776cc chore(accounts): remove orphaned UserIdentity resource file 2026-06-16 15:51:07 +02:00
2a3a152b13 perf(member): drop per-render timing log on the member-list hot path 2026-06-16 15:51:07 +02:00
7f9d9646a5 fix(auth): boot AshAuthentication children under the :mv otp_app 2026-06-16 15:51:07 +02:00
39df300735 Merge pull request 'release v1.3.0' (#542) from release-1.3.0 into main
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: #542
2026-06-16 10:47:10 +02:00
18639e8c67
chore: release v1.3.0
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/tag Build is passing
continuous-integration/drone/promote/production Build is passing
2026-06-16 10:02:02 +02:00
c3a3de23a8 feat(justfile): add lean server recipe (db + phx.server, no mailcrab/rauthy)
All checks were successful
continuous-integration/drone/push Build is passing
2026-06-15 23:57:39 +02:00
9aa5bdb6a7 Merge pull request 'Cleanup of the docs closes #507' (#530) from issue/mitgliederverwaltung-507 into main
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: #530
2026-06-15 22:00:43 +02:00
43f463997d docs: add a documentation index and fix dangling references
All checks were successful
continuous-integration/drone/push Build is passing
2026-06-15 21:53:36 +02:00
6fddb5285b docs(project): condense progress log, roadmap and test/infra docs 2026-06-15 21:53:36 +02:00
3797bc8fae docs(ui): condense and translate email, UI and PDF docs to English 2026-06-15 21:53:36 +02:00
0b36a43edc docs(db): refresh, condense and align database and groups docs 2026-06-15 21:53:36 +02:00
5d8f173529 docs(membership): condense membership, onboarding and import docs and align with the code 2026-06-15 21:53:36 +02:00
8d783276d0 docs(roles): condense roles/permissions/auth docs and align with the code 2026-06-15 21:53:36 +02:00
07503fc6fe Merge pull request 'parallel dev isolation' (#529) from feat/parallel-dev-isolation into main
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: #529
2026-06-15 18:03:00 +02:00
2363ef69e3 feat(justfile): add start-test-db recipe for an isolated test database
Some checks reported errors
continuous-integration/drone/push Build was killed
continuous-integration/drone/promote/production Build was killed
2026-06-15 17:48:53 +02:00
c332a4dde2 feat(dialyzer): allow overriding PLT paths via PLT_CORE_PATH/PLT_LOCAL_PATH 2026-06-15 17:48:53 +02:00
0a53e11cc4 feat(config): read database host port from DB_PORT in dev and test 2026-06-15 17:48:53 +02:00
365ff10fd8 feat(docker): parametrize host ports and project name for parallel dev stacks
Several isolated stacks can now coexist: host ports come from DB_PORT/RAUTHY_PORT/MAILCRAB_PORT (defaulting to today's values) and the container namespace from COMPOSE_PROJECT_NAME. Drops the fixed rauthy-dev container_name that blocked a second stack.
2026-06-15 17:48:53 +02:00
19377be909 Merge pull request 'Fix sort by custom date closes #496' (#528) from issue/mitgliederverwaltung-496 into main
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: #528
2026-06-15 16:34:40 +02:00
346291cc0d docs(changelog): record custom-date sorting fix under Unreleased
Some checks reported errors
continuous-integration/drone/push Build was killed
continuous-integration/drone/promote/production Build is passing
2026-06-15 16:18:42 +02:00
2eda661e37 fix(export): order member export chronologically by custom :date fields 2026-06-15 16:18:13 +02:00
6d4629ef5b fix(member): order member list chronologically by custom :date fields 2026-06-15 16:14:14 +02:00
1aaa0ece5d fix(membership): add chronological sort key for custom :date fields
Custom :date values are real Date structs; sorting them by Erlang term
order compares day, then month, then year, so the member list ordered
them like day-first text instead of chronologically. Derive the sort key
from a single shared helper that maps a date to its Gregorian day count,
leaving the other value types at their already-correct natural order.
2026-06-15 16:10:14 +02:00