Skip to content

Let admins invalidate the password of selected users#879

Draft
Marc-Andrieu wants to merge 8 commits intomainfrom
security/password-invalidation
Draft

Let admins invalidate the password of selected users#879
Marc-Andrieu wants to merge 8 commits intomainfrom
security/password-invalidation

Conversation

@Marc-Andrieu
Copy link
Member

@Marc-Andrieu Marc-Andrieu commented Oct 17, 2025

Description

Summary

Let admins to mark a range of users with a stamp to compel them to change their password, effectively making a password change campaign.
This changes in the logic for password modification (no putting the same) and on authorization (authentication should instead lead saying that yes we know it's [probably] you but we don't authorize, you need to change the password)

Changes Made

  • Add boolean column should_change_password in CoreUser, not nullable, default false
  • Add endpoint to let an admin set should_change_password for one user
  • Disable resetting the password with a flow different from re-validating the email address
  • Do something to not authorize: the POST /auth/authorize redirects to the page to reset the password
  • Revoke tokens
Details

Type of Change

  • 🐛 Bug fix (non-breaking change which fixes an issue)
  • ✨ New feature (non-breaking change which adds functionality)
  • 🔨 Refactor (non-breaking change that neither fixes a bug nor adds a feature)
  • 🔧 Infra CI/CD (changes to configs of workflows)
  • 💥 BREAKING CHANGE (fix or feature that require a new minimal version of the front-end)

Impact & Scope

  • Core functionality changes
  • Single module changes
  • Multiple modules changes
  • Database migrations required
  • Other

Testing

  • Added/modified tests that pass the CI
  • Tested in a pre-prod
  • Tested this locally

Documentation

  • Updated docs accordingly (docs.myecl.fr) :
  • Code includes docstrings
  • No documentation needed
  • Inline comments

@Marc-Andrieu Marc-Andrieu self-assigned this Oct 17, 2025
@Marc-Andrieu Marc-Andrieu added help wanted Extra attention is needed core authentication feat New feature or request migration labels Oct 17, 2025
@codecov
Copy link

codecov bot commented Oct 17, 2025

Codecov Report

❌ Patch coverage is 72.00000% with 7 lines in your changes missing coverage. Please review.
✅ Project coverage is 84.84%. Comparing base (dfc6359) to head (2c53461).

Files with missing lines Patch % Lines
app/core/users/endpoints_users.py 69.56% 7 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main     #879      +/-   ##
==========================================
- Coverage   84.86%   84.84%   -0.03%     
==========================================
  Files         199      199              
  Lines       14094    14110      +16     
==========================================
+ Hits        11961    11971      +10     
- Misses       2133     2139       +6     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@Marc-Andrieu Marc-Andrieu force-pushed the security/password-invalidation branch from 0c66557 to 1af98b3 Compare October 17, 2025 10:02
Marc-Andrieu added a commit that referenced this pull request Jan 6, 2026
# Description

## Summary

<!--BRIEF description: DONT'T EXPLAIN the code: JUSTIFY what this PR is
for!-->

Renaming MyECLPay to MyPayment for 2 reasons:
- Compatibility with CalypSSO: For #879 I need a change on CalypSSO, but
the current latest (2.6.1) breaks Hyperion, hence this refacto is
required
- Genericity: not hard-coding our school's name in the internal payment
solution to make it easier to fork and deploy for other schools

<!--#### Sources at the end-->

## Issues/PR dependencies

<!--Use a keyword, then #123 for the same repo or
aeecleclair/RepoName#123 for another-->

### Issues to be resolved

<!--Keywords: "closes", "fixes", "resolves" -->
<!--Fixes #-->

### Required PRs

<!--Keywords: "depends on", "blocked by" -->
<!--Depends on #-->

## Changes Made

<!--DESCRIBE the changes: tell the BIG STEPS, use a CHECKLIST to show
progress. You can explain below how the code works.-->

- [x] Renaming myeclpay to mypayment to fix CalypSSO compatibility
- [x] Refacto for CalypSSO to work
- [x] Refactor the displayname for the front-end

## Additional Notes

<!--Anything relevant that does not quite fit in the summary-->

<!--Don't touch thses two tags-->
<details>
<summary>

# Classification

</summary>

## Type of Change

- [x] 🐛 Bug fix (non-breaking change which fixes an issue)
- [ ] ✨ New feature (non-breaking change which adds functionality)
- [x] 🔨 Refactor (non-breaking change that neither fixes a bug nor adds
a feature)
- [ ] 🔧 Infra CI/CD (changes to configs of workflows)
- [x] 💥 BREAKING CHANGE (fix or feature that require a new minimal
version of the front-end)
- [ ] 😶‍🌫️ No impact for the end-users

## Impact & Scope

- [x] Core functionality changes
- [ ] Single module changes
- [ ] Multiple modules changes
- [x] Database migrations required
- [ ] Other: ... <!--Not module-oriented: write something!-->

## Testing

- [x] 1. Tested this locally
- [x] 2. Added/modified tests that pass the CI (or tested in a
downstream fork)
- [ ] 3. Tested in a deployed pre-prod
- [ ] 0. Untestable (exceptionally), will be tested in prod directly

## Documentation

- [ ] Updated [the docs](docs.myecl.fr) accordingly : <!--[Docs#0 -
Title](https://github.com/aeecleclair/myecl-documentation/pull/0)-->
- [ ] `"` Docstrings
- [ ] `#` Inline comments
- [x] No documentation needed

</details>
@Marc-Andrieu Marc-Andrieu force-pushed the security/password-invalidation branch from 1af98b3 to 2c53461 Compare January 19, 2026 13:16
@Marc-Andrieu
Copy link
Member Author

Missing:

  • Discuss the business logic of this PoC with whomever wants
  • CalypSSO minor release to have the current Hyperion tests pass again
  • Add a new set of Hyperion tests to ensure the strong constraints on a known compromised account are correctly enforced and don't allow a pirate to get authorization nor change the password without having access to the emails.
  • Lengthen a bit the docstrings of some endpoints in the core to account for the flow regarding a supposedly compromised account

@Marc-Andrieu
Copy link
Member Author

Back-end of aeecleclair/CalypSSO#189

@Marc-Andrieu Marc-Andrieu force-pushed the security/password-invalidation branch 2 times, most recently from 0acca2e to 62ce1ea Compare January 23, 2026 14:00
@Marc-Andrieu Marc-Andrieu force-pushed the security/password-invalidation branch from 62ce1ea to 8a9bca3 Compare January 31, 2026 20:16
Rotheem added a commit to ProximApp/Hyperion that referenced this pull request Feb 28, 2026
commit 58a9017666e904041dd191f69511302e7c562502
Author: Maillard Antoine <145469528+cotanoine@users.noreply.github.com>
Date:   Wed Feb 25 00:13:43 2026 +0100

    added respo TE as a phonebook roletag (#886)

    The BDE secretary asked that Respo TE be a role of the bureau for the
    BDE

    <!--Sources/references at the end-->

    <!-- If applicable-->
    <!--Use keywords "closes", "fixes", "resolves", or others at
    https://docs.github.com/en/get-started/writing-on-github/working-with-advanced-formatting/using-keywords-in-issues-and-pull-requests
    -->

    <!--Fixes #-->
    <!--Fixes aeecleclair/CalypSSO#-->

    <!-- If applicable-->
    <!--Use keywords "depends on" or "blocked by", see
    https://github.com/gregsdennis/dependencies-action -->

    <!--Depends on #-->
    <!--Depends on aeecleclair/CalypSSO#-->

    <!--Please describe the changes made in this pull request-->
    <!--Tell the big steps, use a checklist to show progress. You can
    explain here how the code works.-->

    - [x] ...
    - [ ] ...

    <!--Anything relevant that does not quite fit in the summary-->

    <details>
    <summary>

    </summary>

    - [ ] 🐛 Bug fix (non-breaking change which fixes an issue)
    - [x] ✨ New feature (non-breaking change which adds functionality)
    - [ ] 🔨 Refactor (non-breaking change that neither fixes a bug nor adds
    a feature)
    - [ ] 🔧 Infra CI/CD (changes to configs of workflows)
    - [ ] 💥 BREAKING CHANGE (fix or feature that require a new minimal
    version of the front-end)

    - [ ] 😶‍🌫️ No impact for the end-users

    - [ ] Core functionality changes
    - [x] Single module changes
    - [ ] Multiple modules changes
    - [ ] Database migrations required

    - [ ] Other: <!--not module-oriented-->

    - [x] 1. Tested this locally
    - [ ] 2. Added/modified tests that pass the CI
    - [ ] 3. Tested in a pre-prod

    - [ ] 0. Untestable (exceptionally), will be tested in prod directly

    - [ ] Updated [the docs](docs.myecl.fr) accordingly : <!--[Docs#0 -
    Title](https://github.com/aeecleclair/myecl-documentation/pull/0)-->
    - [ ] `"` Docstrings
    - [ ] `#` Inline comments

    - [x] No documentation needed

    </details>

commit d0a93ee2de97b88ce2c4ff16551168620bfcf236
Author: Marc Andrieu <146140470+Marc-Andrieu@users.noreply.github.com>
Date:   Wed Feb 18 22:39:20 2026 +0100

    Feat: use workers even without Redis (#874)

    <!--Brief description of what this PR does.-->
    Now we can enjoy using workers locally even without Redis: it was only
    useful to set a lock on initialization.

    <!--Please describe the changes made in this pull request-->
    - made a distinction between the number of workers, and having a Redis
    instance or not
    - the fallback Redis-less lock is just allowing the first worker to run
    the 5 init functions: the iterator of workers always output the element
    in the same order (tested locally in `dev` (necessarily 1 worker), and
    in `run` with 1 (no `--worker` flag), 2, 3, 4, 6, 8 and 12 workers)

    - [ ] 🐛 Bug fix (non-breaking change which fixes an issue)
    - [x] ✨ New feature (non-breaking change which adds functionality)
    - [ ] 🔨 Refactor (non-breaking change that neither fixes a bug nor adds
    a feature)
    - [ ] 🔧 Infra CI/CD (changes to configs of workflows)
    - [ ] 💥 BREAKING CHANGE (fix or feature that require a new minimal
    version of the front-end)

    - [x] Core functionality changes
    - [ ] Single module changes
    - [ ] Multiple modules changes
    - [ ] Database migrations required
    - [ ] Other

    - [ ] Added/modified tests that pass the CI
    - [ ] Tested in a pre-prod
    - [x] Tested this locally

    - [ ] Updated docs accordingly (docs.myecl.fr) : <!--[Docs#0 -
    Title](https://github.com/aeecleclair/myecl-documentation/pull/0)-->
    - [ ] Code includes docstrings
    - [x] Inline comment
    - [ ] No documentation needed

    - [ ] My code follows the style guidelines of this project
    - [x] I have commented my code, particularly in hard-to-understand areas
    - [ ] Any dependent changes have been merged and published (_Indicate
    the linked PR for the dependent changes_)

    Add any other context, screenshots, or information about the pull
    request here.

    ---------

    Co-authored-by: Lühmos <guillaume.foucher.pele@gmail.com>

commit 7cd32e9be9e57b5c3ea6aabfa19e87c0262692b7
Author: Rémi <83755025+Pokegali@users.noreply.github.com>
Date:   Wed Feb 18 20:27:01 2026 +0100

    Fix all of those pesky mypy errors (#959)

    There were 18 mypy errors lying around in the main branch, and there are
    none, now.

    None

    None

    None

    - [x] Remove the mypy errors

    <!--Don't touch thses two tags-->
    <details>
    <summary>

    </summary>

    - [x] 🐛 Bug fix (non-breaking change which fixes an issue)
    - [ ] ✨ New feature (non-breaking change which adds functionality)
    - [ ] 🔨 Refactor (non-breaking change that neither fixes a bug nor adds
    a feature)
    - [ ] 🔧 Infra CI/CD (changes to configs of workflows)
    - [ ] 💥 BREAKING CHANGE (fix or feature that require a new minimal
    version of the front-end)
    - [x] 😶‍🌫️ No impact for the end-users

    - [ ] Core functionality changes
    - [ ] Single module changes
    - [x] Multiple modules changes
    - [ ] Database migrations required
    - [ ] Other: ... <!--Not module-oriented: write something!-->

    - [x] 1. Tested this locally
    - [ ] 2. Added/modified tests that pass the CI (or tested in a
    downstream fork)
    - [ ] 3. Tested in a deployed pre-prod
    - [ ] 0. Untestable (exceptionally), will be tested in prod directly

    - [ ] Updated [the docs](docs.myecl.fr) accordingly : <!--[Docs#0 -
    Title](https://github.com/aeecleclair/myecl-documentation/pull/0)-->
    - [ ] `"` Docstrings
    - [ ] `#` Inline comments
    - [ ] No documentation needed

    </details>

commit d43ad5f01ff00ab190279a873fb8761e23e6da83
Author: Marc Andrieu <146140470+Marc-Andrieu@users.noreply.github.com>
Date:   Wed Feb 18 02:24:51 2026 +0100

    Fix(AMAP): write info logs in euros, not cents (#952)

    <!--BRIEF description: DONT'T EXPLAIN the code: JUSTIFY what this PR is
    for!-->
    ![Screenshot_20260205_222008_Element
    Classic](https://github.com/user-attachments/assets/b0e6c4f5-c735-4a11-bcca-f51252b51669)

    That's why

    <!--#### Sources at the end-->

    <!--DESCRIBE the changes: tell the BIG STEPS, use a CHECKLIST to show
    progress. You can explain below how the code works.-->

    - [x] Display the amount in euros (float), rounded with 2 digits after
    comma, then "€".

    <!--Don't touch thses two tags-->
    <details>
    <summary>

    </summary>

    - [x] 🐛 Bug fix (non-breaking change which fixes an issue)
    - [ ] ✨ New feature (non-breaking change which adds functionality)
    - [ ] 🔨 Refactor (non-breaking change that neither fixes a bug nor adds
    a feature)
    - [ ] 🔧 Infra CI/CD (changes to configs of workflows)
    - [ ] 💥 BREAKING CHANGE (fix or feature that require a new minimal
    version of the front-end)
    - [x] 😶‍🌫️ No impact for the end-users

    - [ ] Core functionality changes
    - [x] Single module changes
    - [ ] Multiple modules changes
    - [ ] Database migrations required
    - [ ] Other: ... <!--Not module-oriented: write something!-->

    - [x] 1. Tested this locally
    - [ ] 2. Added/modified tests that pass the CI (or tested in a
    downstream fork)
    - [ ] 3. Tested in a deployed pre-prod
    - [ ] 0. Untestable (exceptionally), will be tested in prod directly

    - [ ] Updated [the docs](docs.myecl.fr) accordingly : <!--[Docs#0 -
    Title](https://github.com/aeecleclair/myecl-documentation/pull/0)-->
    - [ ] `"` Docstrings
    - [ ] `#` Inline comments
    - [x] No documentation needed

    </details>

commit 298d7a23c31cd55592b802a5514263ec1204dd20
Author: Maillard Antoine <145469528+cotanoine@users.noreply.github.com>
Date:   Tue Feb 17 23:56:25 2026 +0100

    Improve loans (#958)

    This PR fixes how slow the get_current_user_loaners endpoint is (the one
    we wait for before the admin button shows up) and improves the tests and
    factory for the loan module.

    The loan factory didn't use real groups to create loaners from, so they
    couldn't be used in the same way as a loan created through the app,
    which defeats the purpose.

    The factory and tests now behave the same way as the endpoints do, by
    creating LoanContent in db.

    The tests now actually check some of the output rather than only the
    response status code.

    Some relationship loading models have been changed to not load
    unnecessary data, which necessitated a really slow call to unique().

    <!--Don't touch these two tags-->
    <details>
    <summary>

    </summary>

    - [x] 🐛 Bug fix (non-breaking change which fixes an issue)
    - [ ] ✨ New feature (non-breaking change which adds functionality)
    - [ ] 🔨 Refactor (non-breaking change that neither fixes a bug nor adds
    a feature)
    - [ ] 🔧 Infra CI/CD (changes to configs of workflows)
    - [ ] 💥 BREAKING CHANGE (fix or feature that require a new minimal
    version of the front-end)
    - [ ] 😶‍🌫️ No impact for the end-users

    - [ ] Core functionality changes
    - [x] Single module changes
    - [ ] Multiple modules changes
    - [ ] Database migrations required
    - [ ] Other: ... <!--Not module-oriented: write something!-->

    - [x] 1. Tested this locally
    - [ ] 2. Added/modified tests that pass the CI (or tested in a
    downstream fork)
    - [ ] 3. Tested in a deployed pre-prod
    - [ ] 0. Untestable (exceptionally), will be tested in prod directly

    - [ ] Updated [the docs](docs.myecl.fr) accordingly : <!--[Docs#0 -
    Title](https://github.com/aeecleclair/myecl-documentation/pull/0)-->
    - [ ] `"` Docstrings
    - [ ] `#` Inline comments
    - [x] No documentation needed

    </details>

commit 707bb52b82fea8d2b9ae0f1716a73cbe56d277f7
Author: Timothée Robert <114694873+Rotheem@users.noreply.github.com>
Date:   Sun Feb 15 20:50:43 2026 +0100

    Allow admin to handle purchases (#955)

    <!--BRIEF description: DONT'T EXPLAIN the code: JUSTIFY what this PR is
    for!-->

    ...

    <!--#### Sources at the end-->

    <!--Use a keyword, then #123 for the same repo or
    aeecleclair/RepoName#123 for another-->

    <!--Keywords: "closes", "fixes", "resolves" -->
    <!--Fixes #-->

    <!--Keywords: "depends on", "blocked by" -->
    <!--Depends on #-->

    <!--DESCRIBE the changes: tell the BIG STEPS, use a CHECKLIST to show
    progress. You can explain below how the code works.-->

    - [x] ...
    - [ ] ...

    <!--Anything relevant that does not quite fit in the summary-->

    <!--Don't touch thses two tags-->
    <details>
    <summary>

    </summary>

    - [ ] 🐛 Bug fix (non-breaking change which fixes an issue)
    - [ ] ✨ New feature (non-breaking change which adds functionality)
    - [ ] 🔨 Refactor (non-breaking change that neither fixes a bug nor adds
    a feature)
    - [ ] 🔧 Infra CI/CD (changes to configs of workflows)
    - [ ] 💥 BREAKING CHANGE (fix or feature that require a new minimal
    version of the front-end)
    - [ ] 😶‍🌫️ No impact for the end-users

    - [ ] Core functionality changes
    - [ ] Single module changes
    - [ ] Multiple modules changes
    - [ ] Database migrations required
    - [ ] Other: ... <!--Not module-oriented: write something!-->

    - [ ] 1. Tested this locally
    - [ ] 2. Added/modified tests that pass the CI (or tested in a
    downstream fork)
    - [ ] 3. Tested in a deployed pre-prod
    - [ ] 0. Untestable (exceptionally), will be tested in prod directly

    - [ ] Updated [the docs](docs.myecl.fr) accordingly : <!--[Docs#0 -
    Title](https://github.com/aeecleclair/myecl-documentation/pull/0)-->
    - [ ] `"` Docstrings
    - [ ] `#` Inline comments
    - [ ] No documentation needed

    </details>

commit fc596b7ebbcfec984e57a552739909f88b93d9a6
Author: Timothée Robert <114694873+Rotheem@users.noreply.github.com>
Date:   Sun Feb 8 02:23:38 2026 +0100

    Challenger more export (#943)

    Added more export options to Challenger

    Added
    - captains exporter
    - sport participants exporter
    - school users exporter
    - school quotas exporter
    - sport quotas exporter

    <!--Don't touch thses two tags-->
    <details>
    <summary>

    </summary>

    - [ ] 🐛 Bug fix (non-breaking change which fixes an issue)
    - [x] ✨ New feature (non-breaking change which adds functionality)
    - [ ] 🔨 Refactor (non-breaking change that neither fixes a bug nor adds
    a feature)
    - [ ] 🔧 Infra CI/CD (changes to configs of workflows)
    - [ ] 💥 BREAKING CHANGE (fix or feature that require a new minimal
    version of the front-end)
    - [ ] 😶‍🌫️ No impact for the end-users

    - [ ] Core functionality changes
    - [x] Single module changes
    - [ ] Multiple modules changes
    - [x] Database migrations required
    - [ ] Other: ... <!--Not module-oriented: write something!-->

    - [x] 1. Tested this locally
    - [x] 2. Added/modified tests that pass the CI (or tested in a
    downstream fork)
    - [ ] 3. Tested in a deployed pre-prod
    - [ ] 0. Untestable (exceptionally), will be tested in prod directly

    - [ ] Updated [the docs](docs.myecl.fr) accordingly : <!--[Docs#0 -
    Title](https://github.com/aeecleclair/myecl-documentation/pull/0)-->
    - [ ] `"` Docstrings
    - [ ] `#` Inline comments
    - [x] No documentation needed

    </details>

commit 1ad10e476b767b6ccc6d23b197a56516031c319e
Author: Timothée Robert <114694873+Rotheem@users.noreply.github.com>
Date:   Fri Feb 6 22:56:45 2026 +0100

    Fix competition counter (#953)

    <!--BRIEF description: DONT'T EXPLAIN the code: JUSTIFY what this PR is
    for!-->

    ...

    <!--#### Sources at the end-->

    <!--Use a keyword, then #123 for the same repo or
    aeecleclair/RepoName#123 for another-->

    <!--Keywords: "closes", "fixes", "resolves" -->
    <!--Fixes #-->

    <!--Keywords: "depends on", "blocked by" -->
    <!--Depends on #-->

    <!--DESCRIBE the changes: tell the BIG STEPS, use a CHECKLIST to show
    progress. You can explain below how the code works.-->

    - [x] ...
    - [ ] ...

    <!--Anything relevant that does not quite fit in the summary-->

    <!--Don't touch thses two tags-->
    <details>
    <summary>

    </summary>

    - [ ] 🐛 Bug fix (non-breaking change which fixes an issue)
    - [ ] ✨ New feature (non-breaking change which adds functionality)
    - [ ] 🔨 Refactor (non-breaking change that neither fixes a bug nor adds
    a feature)
    - [ ] 🔧 Infra CI/CD (changes to configs of workflows)
    - [ ] 💥 BREAKING CHANGE (fix or feature that require a new minimal
    version of the front-end)
    - [ ] 😶‍🌫️ No impact for the end-users

    - [ ] Core functionality changes
    - [ ] Single module changes
    - [ ] Multiple modules changes
    - [ ] Database migrations required
    - [ ] Other: ... <!--Not module-oriented: write something!-->

    - [ ] 1. Tested this locally
    - [ ] 2. Added/modified tests that pass the CI (or tested in a
    downstream fork)
    - [ ] 3. Tested in a deployed pre-prod
    - [ ] 0. Untestable (exceptionally), will be tested in prod directly

    - [ ] Updated [the docs](docs.myecl.fr) accordingly : <!--[Docs#0 -
    Title](https://github.com/aeecleclair/myecl-documentation/pull/0)-->
    - [ ] `"` Docstrings
    - [ ] `#` Inline comments
    - [ ] No documentation needed

    </details>

commit 6f9da70bc41786a5d05c96c1a71ec19641e73727
Author: Marc Andrieu <146140470+Marc-Andrieu@users.noreply.github.com>
Date:   Thu Feb 5 14:50:15 2026 +0100

    Bump 5.0.3

commit 523775aca1dfc8086c98410c2618f4e97a8c5a86
Author: Timothée Robert <114694873+Rotheem@users.noreply.github.com>
Date:   Thu Feb 5 14:46:48 2026 +0100

    Fix competition validation (#951)

    <!--BRIEF description: DONT'T EXPLAIN the code: JUSTIFY what this PR is
    for!-->

    ...

    <!--#### Sources at the end-->

    <!--Use a keyword, then #123 for the same repo or
    aeecleclair/RepoName#123 for another-->

    <!--Keywords: "closes", "fixes", "resolves" -->
    <!--Fixes #-->

    <!--Keywords: "depends on", "blocked by" -->
    <!--Depends on #-->

    <!--DESCRIBE the changes: tell the BIG STEPS, use a CHECKLIST to show
    progress. You can explain below how the code works.-->

    - [x] ...
    - [ ] ...

    <!--Anything relevant that does not quite fit in the summary-->

    <!--Don't touch thses two tags-->
    <details>
    <summary>

    </summary>

    - [ ] 🐛 Bug fix (non-breaking change which fixes an issue)
    - [ ] ✨ New feature (non-breaking change which adds functionality)
    - [ ] 🔨 Refactor (non-breaking change that neither fixes a bug nor adds
    a feature)
    - [ ] 🔧 Infra CI/CD (changes to configs of workflows)
    - [ ] 💥 BREAKING CHANGE (fix or feature that require a new minimal
    version of the front-end)
    - [ ] 😶‍🌫️ No impact for the end-users

    - [ ] Core functionality changes
    - [ ] Single module changes
    - [ ] Multiple modules changes
    - [ ] Database migrations required
    - [ ] Other: ... <!--Not module-oriented: write something!-->

    - [ ] 1. Tested this locally
    - [ ] 2. Added/modified tests that pass the CI (or tested in a
    downstream fork)
    - [ ] 3. Tested in a deployed pre-prod
    - [ ] 0. Untestable (exceptionally), will be tested in prod directly

    - [ ] Updated [the docs](docs.myecl.fr) accordingly : <!--[Docs#0 -
    Title](https://github.com/aeecleclair/myecl-documentation/pull/0)-->
    - [ ] `"` Docstrings
    - [ ] `#` Inline comments
    - [ ] No documentation needed

    </details>

commit f9a3c08070d1b4d0088d6bdc4400ea07333d83ed
Author: Marc Andrieu <146140470+Marc-Andrieu@users.noreply.github.com>
Date:   Tue Feb 3 16:05:27 2026 +0100

    Fix #950

commit d9d08d152c6fac40e9565e2a5cc6294bba28e163
Author: Marc Andrieu <146140470+Marc-Andrieu@users.noreply.github.com>
Date:   Tue Feb 3 15:49:16 2026 +0100

    Pin versions of Postgres, Redis, Python and uv in CI, Dockerfile and Docker composes (#950)

    …Docker composes

    <!--BRIEF description: DONT'T EXPLAIN the code: JUSTIFY what this PR is
    for!-->

    That's obvious

    <!--#### Sources at the end-->

    Subset of #944

    <!--DESCRIBE the changes: tell the BIG STEPS, use a CHECKLIST to show
    progress. You can explain below how the code works.-->

    See diff

    <!--Don't touch thses two tags-->
    <details>
    <summary>

    </summary>

    - [ ] 🐛 Bug fix (non-breaking change which fixes an issue)
    - [ ] ✨ New feature (non-breaking change which adds functionality)
    - [ ] 🔨 Refactor (non-breaking change that neither fixes a bug nor adds
    a feature)
    - [x] 🔧 Infra CI/CD (changes to configs of workflows)
    - [ ] 💥 BREAKING CHANGE (fix or feature that require a new minimal
    version of the front-end)
    - [x] 😶‍🌫️ No impact for the end-users

    - [ ] Core functionality changes
    - [ ] Single module changes
    - [ ] Multiple modules changes
    - [ ] Database migrations required
    - [x] Other: ... <!--Not module-oriented: write something!-->

    - [x] 1. Tested this locally
    - [ ] 2. Added/modified tests that pass the CI (or tested in a
    downstream fork)
    - [ ] 3. Tested in a deployed pre-prod
    - [ ] 0. Untestable (exceptionally), will be tested in prod directly

    - [ ] Updated [the docs](docs.myecl.fr) accordingly : <!--[Docs#0 -
    Title](https://github.com/aeecleclair/myecl-documentation/pull/0)-->
    - [ ] `"` Docstrings
    - [ ] `#` Inline comments
    - [ ] No documentation needed

    </details>

commit 457e7aeb0fdbb45fd16d78bc30e34f42b8135482
Author: Marc Andrieu <146140470+Marc-Andrieu@users.noreply.github.com>
Date:   Sat Jan 31 13:19:32 2026 +0100

    Fix(Git ignorecase=false): keep default_PDF.pdf, remove default_pdf.pdf (#947)

    <!--BRIEF description: DONT'T EXPLAIN the code: JUSTIFY what this PR is
    for!-->

    That damn PDF breaks my local repo bc it conflicts with my global
    `ignorecase = false` git config

    <!--DESCRIBE the changes: tell the BIG STEPS, use a CHECKLIST to show
    progress. You can explain below how the code works.-->

    - [x] `rm default_pdf.pdf` (used once vs thrice for `default_PDF.pdf`)
    - [ ] use only `default_PDF.pdf` in the codebase

    <!--Don't touch thses two tags-->
    <details>
    <summary>

    </summary>

    - [x] 🐛 Bug fix (non-breaking change which fixes an issue)
    - [ ] ✨ New feature (non-breaking change which adds functionality)
    - [ ] 🔨 Refactor (non-breaking change that neither fixes a bug nor adds
    a feature)
    - [ ] 🔧 Infra CI/CD (changes to configs of workflows)
    - [ ] 💥 BREAKING CHANGE (fix or feature that require a new minimal
    version of the front-end)
    - [x] 😶‍🌫️ No impact for the end-users

    - [ ] Core functionality changes
    - [ ] Single module changes
    - [ ] Multiple modules changes
    - [ ] Database migrations required
    - [x] Other:  <!--Not module-oriented: write something!-->

    - [x] 1. Tested this locally
    - [ ] 2. Added/modified tests that pass the CI (or tested in a
    downstream fork)
    - [ ] 3. Tested in a deployed pre-prod
    - [ ] 0. Untestable (exceptionally), will be tested in prod directly

    - [ ] Updated [the docs](docs.myecl.fr) accordingly : <!--[Docs#0 -
    Title](https://github.com/aeecleclair/myecl-documentation/pull/0)-->
    - [ ] `"` Docstrings
    - [ ] `#` Inline comments
    - [x] No documentation needed

    </details>

commit fc7181921895d2a2ae23e5dd09e269bf6fe18e6a
Author: Timothée Robert <114694873+Rotheem@users.noreply.github.com>
Date:   Fri Jan 30 14:22:40 2026 +0100

    feat(phonebook): use modular association groupements (#759)

    Please explain the changes you made here.

    - [ ] Created tests which fail without the change (if possible)
    - [ ] All tests passing
    - [ ] Extended the documentation, if necessary

commit 8bc4861339392268147c249e3d83ee1fbe7e46b2
Author: Timothée Robert <114694873+Rotheem@users.noreply.github.com>
Date:   Mon Jan 19 19:48:09 2026 +0100

    Fix mypayment invoices reference parsing (#941)

    Change MyPayment Invoice reference parsing during creation to improve
    robustness

    Use RegEx to parse any accepted format and not a specific one

    <!--Don't touch thses two tags-->
    <details>
    <summary>

    </summary>

    - [x] 🐛 Bug fix (non-breaking change which fixes an issue)
    - [ ] ✨ New feature (non-breaking change which adds functionality)
    - [ ] 🔨 Refactor (non-breaking change that neither fixes a bug nor adds
    a feature)
    - [ ] 🔧 Infra CI/CD (changes to configs of workflows)
    - [ ] 💥 BREAKING CHANGE (fix or feature that require a new minimal
    version of the front-end)
    - [ ] 😶‍🌫️ No impact for the end-users

    - [x] Core functionality changes
    - [ ] Single module changes
    - [ ] Multiple modules changes
    - [ ] Database migrations required
    - [ ] Other: ... <!--Not module-oriented: write something!-->

    - [x] 1. Tested this locally
    - [ ] 2. Added/modified tests that pass the CI (or tested in a
    downstream fork)
    - [ ] 3. Tested in a deployed pre-prod
    - [ ] 0. Untestable (exceptionally), will be tested in prod directly

    - [ ] Updated [the docs](docs.myecl.fr) accordingly : <!--[Docs#0 -
    Title](https://github.com/aeecleclair/myecl-documentation/pull/0)-->
    - [ ] `"` Docstrings
    - [ ] `#` Inline comments
    - [x] No documentation needed

    </details>

commit dfc6359b7d0116be7b5618d47e2d96bc048391fe
Author: Lühmos <guillaume.foucher.pele@gmail.com>
Date:   Sat Jan 10 01:51:39 2026 +0100

    Make weasyprint optional for development (#936)
    Makes weasyprint optional for development as it's rarely (if even) used.
    Moves the library import inside the function that uses it, moves the
    requirement in a new file only for production (we might need to change
    the github workflow but idk how to do that), and changes the readme
    accordingly.

    <!--BRIEF description: DONT'T EXPLAIN the code: JUSTIFY what this PR is
    for!-->

    ...

    <!--#### Sources at the end-->

    <!--Use a keyword, then #123 for the same repo or
    aeecleclair/RepoName#123 for another-->

    <!--Keywords: "closes", "fixes", "resolves" -->
    <!--Fixes #-->

    <!--Keywords: "depends on", "blocked by" -->
    <!--Depends on #-->

    <!--DESCRIBE the changes: tell the BIG STEPS, use a CHECKLIST to show
    progress. You can explain below how the code works.-->

    - [x] ...
    - [ ] ...

    <!--Anything relevant that does not quite fit in the summary-->

    <!--Don't touch thses two tags-->
    <details>
    <summary>

    </summary>

    - [ ] 🐛 Bug fix (non-breaking change which fixes an issue)
    - [ ] ✨ New feature (non-breaking change which adds functionality)
    - [x] 🔨 Refactor (non-breaking change that neither fixes a bug nor adds
    a feature)
    - [ ] 🔧 Infra CI/CD (changes to configs of workflows)
    - [ ] 💥 BREAKING CHANGE (fix or feature that require a new minimal
    version of the front-end)
    - [ ] 😶‍🌫️ No impact for the end-users

    - [ ] Core functionality changes
    - [ ] Single module changes
    - [ ] Multiple modules changes
    - [ ] Database migrations required
    - [x] Other: development workflow changes <!--Not module-oriented: write
    something!-->

    - [x] 1. Tested this locally
    - [ ] 2. Added/modified tests that pass the CI (or tested in a
    downstream fork)
    - [ ] 3. Tested in a deployed pre-prod
    - [ ] 0. Untestable (exceptionally), will be tested in prod directly

    - [ ] Updated [the docs](docs.myecl.fr) accordingly : <!--[Docs#0 -
    Title](https://github.com/aeecleclair/myecl-documentation/pull/0)-->
    - [ ] `"` Docstrings
    - [ ] `#` Inline comments
    - [x] No documentation needed (?)

    </details>

    ---------

    Co-authored-by: Timothée Robert <timr.web@free.fr>

commit f848c27ee65788e2354206528a541ae2ab8824f6
Author: Marc Andrieu <146140470+Marc-Andrieu@users.noreply.github.com>
Date:   Fri Jan 9 13:57:37 2026 +0100

    Raise Titan's minimal version (#939)

commit c8d4871e2a86e4d9f1dbd9ee1bf52576931b4c3d
Author: Flaim-X2 <cecchinato.mathieu.n@gmail.com>
Date:   Wed Jan 7 01:20:40 2026 +0100

    AMAP in cents (#686)

    Replace float with int.

    ---------

    Co-authored-by: Foucauld Bellanger <63885990+Foukki@users.noreply.github.com>
    Co-authored-by: Thonyk <timr.web@free.fr>
    Co-authored-by: Marc-Andrieu <146140470+Marc-Andrieu@users.noreply.github.com>
    Co-authored-by: Lühmos <guillaume.foucher.pele@gmail.com>
    Co-authored-by: Maillard Antoine <145469528+cotanoine@users.noreply.github.com>
    Co-authored-by: Marc-Andrieu <marc.andrieu@outlook.com>

commit 5ad761ebfd6c36bc3070f54d0f5f1e0fd5ee1cf8
Author: Marc Andrieu <146140470+Marc-Andrieu@users.noreply.github.com>
Date:   Tue Jan 6 13:25:07 2026 +0100

    Rename MyECLPay to MyPayment for genericity & bump CalypSSO (#914)

    <!--BRIEF description: DONT'T EXPLAIN the code: JUSTIFY what this PR is
    for!-->

    Renaming MyECLPay to MyPayment for 2 reasons:
    - Compatibility with CalypSSO: For #879 I need a change on CalypSSO, but
    the current latest (2.6.1) breaks Hyperion, hence this refacto is
    required
    - Genericity: not hard-coding our school's name in the internal payment
    solution to make it easier to fork and deploy for other schools

    <!--#### Sources at the end-->

    <!--Use a keyword, then #123 for the same repo or
    aeecleclair/RepoName#123 for another-->

    <!--Keywords: "closes", "fixes", "resolves" -->
    <!--Fixes #-->

    <!--Keywords: "depends on", "blocked by" -->
    <!--Depends on #-->

    <!--DESCRIBE the changes: tell the BIG STEPS, use a CHECKLIST to show
    progress. You can explain below how the code works.-->

    - [x] Renaming myeclpay to mypayment to fix CalypSSO compatibility
    - [x] Refacto for CalypSSO to work
    - [x] Refactor the displayname for the front-end

    <!--Anything relevant that does not quite fit in the summary-->

    <!--Don't touch thses two tags-->
    <details>
    <summary>

    </summary>

    - [x] 🐛 Bug fix (non-breaking change which fixes an issue)
    - [ ] ✨ New feature (non-breaking change which adds functionality)
    - [x] 🔨 Refactor (non-breaking change that neither fixes a bug nor adds
    a feature)
    - [ ] 🔧 Infra CI/CD (changes to configs of workflows)
    - [x] 💥 BREAKING CHANGE (fix or feature that require a new minimal
    version of the front-end)
    - [ ] 😶‍🌫️ No impact for the end-users

    - [x] Core functionality changes
    - [ ] Single module changes
    - [ ] Multiple modules changes
    - [x] Database migrations required
    - [ ] Other: ... <!--Not module-oriented: write something!-->

    - [x] 1. Tested this locally
    - [x] 2. Added/modified tests that pass the CI (or tested in a
    downstream fork)
    - [ ] 3. Tested in a deployed pre-prod
    - [ ] 0. Untestable (exceptionally), will be tested in prod directly

    - [ ] Updated [the docs](docs.myecl.fr) accordingly : <!--[Docs#0 -
    Title](https://github.com/aeecleclair/myecl-documentation/pull/0)-->
    - [ ] `"` Docstrings
    - [ ] `#` Inline comments
    - [x] No documentation needed

    </details>

commit b5cc8a0218f463909d04ba5039fa5d3c89746f52
Author: Timothée Robert <114694873+Rotheem@users.noreply.github.com>
Date:   Mon Jan 5 12:14:36 2026 +0100

    Initialiaze basic auth permission on startup (#935)

    <!--BRIEF description: DONT'T EXPLAIN the code: JUSTIFY what this PR is
    for!-->

    ...

    <!--#### Sources at the end-->

    <!--Use a keyword, then #123 for the same repo or
    aeecleclair/RepoName#123 for another-->

    <!--Keywords: "closes", "fixes", "resolves" -->
    <!--Fixes #-->

    <!--Keywords: "depends on", "blocked by" -->
    <!--Depends on #-->

    <!--DESCRIBE the changes: tell the BIG STEPS, use a CHECKLIST to show
    progress. You can explain below how the code works.-->

    - [x] ...
    - [ ] ...

    <!--Anything relevant that does not quite fit in the summary-->

    <!--Don't touch thses two tags-->
    <details>
    <summary>

    </summary>

    - [ ] 🐛 Bug fix (non-breaking change which fixes an issue)
    - [ ] ✨ New feature (non-breaking change which adds functionality)
    - [ ] 🔨 Refactor (non-breaking change that neither fixes a bug nor adds
    a feature)
    - [ ] 🔧 Infra CI/CD (changes to configs of workflows)
    - [ ] 💥 BREAKING CHANGE (fix or feature that require a new minimal
    version of the front-end)
    - [ ] 😶‍🌫️ No impact for the end-users

    - [ ] Core functionality changes
    - [ ] Single module changes
    - [ ] Multiple modules changes
    - [ ] Database migrations required
    - [ ] Other: ... <!--Not module-oriented: write something!-->

    - [ ] 1. Tested this locally
    - [ ] 2. Added/modified tests that pass the CI (or tested in a
    downstream fork)
    - [ ] 3. Tested in a deployed pre-prod
    - [ ] 0. Untestable (exceptionally), will be tested in prod directly

    - [ ] Updated [the docs](docs.myecl.fr) accordingly : <!--[Docs#0 -
    Title](https://github.com/aeecleclair/myecl-documentation/pull/0)-->
    - [ ] `"` Docstrings
    - [ ] `#` Inline comments
    - [ ] No documentation needed

    </details>

commit a540c36bb613be965bb41d60fb8cc999972ac335
Author: Timothée Robert <114694873+Rotheem@users.noreply.github.com>
Date:   Fri Jan 2 02:59:46 2026 +0100

    POC: Modular permissions (#679)

    Relying on hardcoded groups for access restriction is prone to be
    limiting at some point. We can't easily change which group owns a
    specific module and it is heavily dependent on Centrale's association
    structure.

    This PR introduces a new concept : Permissions. Represented by
    system-wide unique string they are declared by modules and replace
    completely GroupTypes for endpoint restriction. A user must have the
    endpoint's specific permission to have access to it. A permission can be
    linked to a user through 2 ways :
    - Linking a group to the permission and having the user in the group
    - Linking an account type to the permission and having this account type
    for the user

    Thus, a permission can be linked to multiple groups and/or account type,
    can be easily transferred and allow each Hyperion instance to adapt
    better to any school's association structure.

    The visibility system was introduced to restrict in-app access to
    module, however it was still falling short for direct API calls both in
    synchronization and flexibility. The visibility could be set on/off for
    certain account types or groups while the endpoint would still be
    restricting another group and only GroupType could be used for API
    restriction.

    To address this issue, we use `access_XXX` permissions, this specific
    syntax will be recognized by Titan as a replacement for visibility. As
    permissions are fully modular and uniformized, both issues are resolved
    by replacing visibility by specific permissions.

    Auth providers allow access depending on account types or GroupTypes,
    however as permissions delete GroupTypes there was a need to refacto
    this part. The chosen method is a set of specific permissions for auth
    manually added to the global permission list after the module discovery.

    - [x] add permissions modification logic
    - [x] declare modules' permissions
    - [x] refactor all modules' endpoints restrictions with permissions
    check
    - [x] refactor visibility with specific permissions
    - [x] refactor auth access

    - [ ] 🐛 Bug fix (non-breaking change which fixes an issue)
    - [ ] ✨ New feature (non-breaking change which adds functionality)
    - [ ] 🔨 Refactor (non-breaking change that neither fixes a bug nor adds
    a feature)
    - [ ] 🔧 Infra CI/CD (changes to configs of workflows)
    - [x] 💥 BREAKING CHANGE (fix or feature that require a new minimal
    version of the front-end)

    - [ ] 😶‍🌫️ No impact for the end-users

    - [x] Core functionality changes
    - [ ] Single module changes
    - [ ] Multiple modules changes
    - [ ] Database migrations required

    - [ ] Other: <!--not module-oriented-->

    - [ ] 1. Tested this locally
    - [x] 2. Added/modified tests that pass the CI
    - [ ] 3. Tested in a pre-prod

    - [ ] 0. Untestable (exceptionally), will be tested in prod directly

    - [ ] Updated [the docs](docs.myecl.fr) accordingly : <!--[Docs#0 -
    Title](https://github.com/aeecleclair/myecl-documentation/pull/0)-->
    - [ ] `"` Docstrings
    - [ ] `#` Inline comments

    - [ ] No documentation needed

    </details>

commit 61a12ce906a1260bbff20b645a80e84b4ad27f01
Author: NakoGH <rbelahcene10@gmail.com>
Date:   Wed Dec 31 19:46:25 2025 +0100

    MyECLPay export csv (#927)

    <!--BRIEF description: DONT'T EXPLAIN the code: JUSTIFY what this PR is
    for!-->

    ...

    <!--#### Sources at the end-->

    <!--Use a keyword, then #123 for the same repo or
    aeecleclair/RepoName#123 for another-->

    <!--Keywords: "closes", "fixes", "resolves" -->
    <!--Fixes #-->

    <!--Keywords: "depends on", "blocked by" -->
    <!--Depends on #-->

    <!--DESCRIBE the changes: tell the BIG STEPS, use a CHECKLIST to show
    progress. You can explain below how the code works.-->

    - [x] ...
    - [ ] ...

    <!--Anything relevant that does not quite fit in the summary-->

    <!--Don't touch thses two tags-->
    <details>
    <summary>

    </summary>

    - [ ] 🐛 Bug fix (non-breaking change which fixes an issue)
    - [x] ✨ New feature (non-breaking change which adds functionality)
    - [ ] 🔨 Refactor (non-breaking change that neither fixes a bug nor adds
    a feature)
    - [ ] 🔧 Infra CI/CD (changes to configs of workflows)
    - [ ] 💥 BREAKING CHANGE (fix or feature that require a new minimal
    version of the front-end)
    - [ ] 😶‍🌫️ No impact for the end-users

    - [ ] Core functionality changes
    - [ ] Single module changes
    - [ ] Multiple modules changes
    - [ ] Database migrations required
    - [ ] Other: ... <!--Not module-oriented: write something!-->

    - [ ] 1. Tested this locally
    - [ ] 2. Added/modified tests that pass the CI (or tested in a
    downstream fork)
    - [ ] 3. Tested in a deployed pre-prod
    - [ ] 0. Untestable (exceptionally), will be tested in prod directly

    - [ ] Updated [the docs](docs.myecl.fr) accordingly : <!--[Docs#0 -
    Title](https://github.com/aeecleclair/myecl-documentation/pull/0)-->
    - [ ] `"` Docstrings
    - [ ] `#` Inline comments
    - [ ] No documentation needed

    </details>

    ---------

    Co-authored-by: Thonyk <timr.web@free.fr>

commit c507e2f425b7efb614736335b5c4ae6ea4ade715
Author: Marc Andrieu <146140470+Marc-Andrieu@users.noreply.github.com>
Date:   Wed Dec 31 19:15:42 2025 +0100

    fix: run Codecov project only on main branch (#912)

    <!--BRIEF description: DONT'T EXPLAIN the code: JUSTIFY what this PR is
    for!-->

    Codecov project (not patch) fails in PRs when we don't run all tests
    because... well... not all lines are being tested.

    <!--#### Sources at the end-->
    * https://docs.codecov.com/docs/commit-status

    <!--DESCRIBE the changes: tell the BIG STEPS, use a CHECKLIST to show
    progress. You can explain below how the code works.-->

    - [x] Run the global ("project") only when run on the main branch, not
    in PRs

    <!--Don't touch thses two tags-->
    <details>
    <summary>

    </summary>

    - [ ] 🐛 Bug fix (non-breaking change which fixes an issue)
    - [ ] ✨ New feature (non-breaking change which adds functionality)
    - [ ] 🔨 Refactor (non-breaking change that neither fixes a bug nor adds
    a feature)
    - [x] 🔧 Infra CI/CD (changes to configs of workflows)
    - [ ] 💥 BREAKING CHANGE (fix or feature that require a new minimal
    version of the front-end)
    - [ ] 😶‍🌫️ No impact for the end-users

    - [ ] Core functionality changes
    - [ ] Single module changes
    - [ ] Multiple modules changes
    - [ ] Database migrations required
    - [x] Other: `codecov.yaml` <!--Not module-oriented: write something!-->

    - [ ] 1. Tested this locally
    - [ ] 2. Added/modified tests that pass the CI (or tested in a
    downstream fork)
    - [ ] 3. Tested in a deployed pre-prod
    - [x] 0. Untestable (exceptionally), will be tested in prod directly

    - [ ] Updated [the docs](docs.myecl.fr) accordingly : <!--[Docs#0 -
    Title](https://github.com/aeecleclair/myecl-documentation/pull/0)-->
    - [ ] `"` Docstrings
    - [ ] `#` Inline comments
    - [x] No documentation needed

    </details>

commit 0527f235386860c7e3bec7099961fcda5284c2d9
Author: Armand Didierjean <95971503+armanddidierjean@users.noreply.github.com>
Date:   Wed Dec 31 18:47:41 2025 +0100

    Save tip_amount in db (#919)

    <!--BRIEF description: DONT'T EXPLAIN the code: JUSTIFY what this PR is
    for!-->

    ...

    <!--#### Sources at the end-->

    <!--Use a keyword, then #123 for the same repo or
    aeecleclair/RepoName#123 for another-->

    <!--Keywords: "closes", "fixes", "resolves" -->
    <!--Fixes #-->

    <!--Keywords: "depends on", "blocked by" -->
    <!--Depends on #-->

    <!--DESCRIBE the changes: tell the BIG STEPS, use a CHECKLIST to show
    progress. You can explain below how the code works.-->

    - [x] ...
    - [ ] ...

    <!--Anything relevant that does not quite fit in the summary-->

    <!--Don't touch thses two tags-->
    <details>
    <summary>

    </summary>

    - [ ] 🐛 Bug fix (non-breaking change which fixes an issue)
    - [ ] ✨ New feature (non-breaking change which adds functionality)
    - [ ] 🔨 Refactor (non-breaking change that neither fixes a bug nor adds
    a feature)
    - [ ] 🔧 Infra CI/CD (changes to configs of workflows)
    - [ ] 💥 BREAKING CHANGE (fix or feature that require a new minimal
    version of the front-end)
    - [ ] 😶‍🌫️ No impact for the end-users

    - [ ] Core functionality changes
    - [ ] Single module changes
    - [ ] Multiple modules changes
    - [ ] Database migrations required
    - [ ] Other: ... <!--Not module-oriented: write something!-->

    - [ ] 1. Tested this locally
    - [ ] 2. Added/modified tests that pass the CI (or tested in a
    downstream fork)
    - [ ] 3. Tested in a deployed pre-prod
    - [ ] 0. Untestable (exceptionally), will be tested in prod directly

    - [ ] Updated [the docs](docs.myecl.fr) accordingly : <!--[Docs#0 -
    Title](https://github.com/aeecleclair/myecl-documentation/pull/0)-->
    - [ ] `"` Docstrings
    - [ ] `#` Inline comments
    - [ ] No documentation needed

    </details>

commit 0705ecc8e43cd632e70bfbcd7de4de75b6e09c30
Author: Timothée Robert <114694873+Rotheem@users.noreply.github.com>
Date:   Mon Dec 29 16:14:27 2025 +0100

    Fix competition withdrawal (#932)

    <!--BRIEF description: DONT'T EXPLAIN the code: JUSTIFY what this PR is
    for!-->

    ...

    <!--#### Sources at the end-->

    <!--Use a keyword, then #123 for the same repo or
    aeecleclair/RepoName#123 for another-->

    <!--Keywords: "closes", "fixes", "resolves" -->
    <!--Fixes #-->

    <!--Keywords: "depends on", "blocked by" -->
    <!--Depends on #-->

    <!--DESCRIBE the changes: tell the BIG STEPS, use a CHECKLIST to show
    progress. You can explain below how the code works.-->

    - [x] ...
    - [ ] ...

    <!--Anything relevant that does not quite fit in the summary-->

    <!--Don't touch thses two tags-->
    <details>
    <summary>

    </summary>

    - [ ] 🐛 Bug fix (non-breaking change which fixes an issue)
    - [ ] ✨ New feature (non-breaking change which adds functionality)
    - [ ] 🔨 Refactor (non-breaking change that neither fixes a bug nor adds
    a feature)
    - [ ] 🔧 Infra CI/CD (changes to configs of workflows)
    - [ ] 💥 BREAKING CHANGE (fix or feature that require a new minimal
    version of the front-end)
    - [ ] 😶‍🌫️ No impact for the end-users

    - [ ] Core functionality changes
    - [ ] Single module changes
    - [ ] Multiple modules changes
    - [ ] Database migrations required
    - [ ] Other: ... <!--Not module-oriented: write something!-->

    - [ ] 1. Tested this locally
    - [ ] 2. Added/modified tests that pass the CI (or tested in a
    downstream fork)
    - [ ] 3. Tested in a deployed pre-prod
    - [ ] 0. Untestable (exceptionally), will be tested in prod directly

    - [ ] Updated [the docs](docs.myecl.fr) accordingly : <!--[Docs#0 -
    Title](https://github.com/aeecleclair/myecl-documentation/pull/0)-->
    - [ ] `"` Docstrings
    - [ ] `#` Inline comments
    - [ ] No documentation needed

    </details>

commit f5d2f74c5937dc3ab74e4781aa8b49e7923a6b2f
Author: Armand Didierjean <95971503+armanddidierjean@users.noreply.github.com>
Date:   Wed Dec 17 19:26:26 2025 +0100

    Allow to ask for the email scope (#928)

    <!--BRIEF description: DONT'T EXPLAIN the code: JUSTIFY what this PR is
    for!-->

    Some oidc clients may require to be able to ask for the `email` scope

    <!--#### Sources at the end-->

    <!--Use a keyword, then #123 for the same repo or
    aeecleclair/RepoName#123 for another-->

    <!--Keywords: "closes", "fixes", "resolves" -->
    <!--Fixes #-->

    <!--Keywords: "depends on", "blocked by" -->
    <!--Depends on #-->

    <!--DESCRIBE the changes: tell the BIG STEPS, use a CHECKLIST to show
    progress. You can explain below how the code works.-->

    - [x] ...
    - [ ] ...

    <!--Anything relevant that does not quite fit in the summary-->

    <!--Don't touch thses two tags-->
    <details>
    <summary>

    </summary>

    - [ ] 🐛 Bug fix (non-breaking change which fixes an issue)
    - [x] ✨ New feature (non-breaking change which adds functionality)
    - [ ] 🔨 Refactor (non-breaking change that neither fixes a bug nor adds
    a feature)
    - [ ] 🔧 Infra CI/CD (changes to configs of workflows)
    - [ ] 💥 BREAKING CHANGE (fix or feature that require a new minimal
    version of the front-end)
    - [ ] 😶‍🌫️ No impact for the end-users

    - [x] Core functionality changes
    - [ ] Single module changes
    - [ ] Multiple modules changes
    - [ ] Database migrations required
    - [ ] Other: ... <!--Not module-oriented: write something!-->

    - [ ] 1. Tested this locally
    - [ ] 2. Added/modified tests that pass the CI (or tested in a
    downstream fork)
    - [ ] 3. Tested in a deployed pre-prod
    - [ ] 0. Untestable (exceptionally), will be tested in prod directly

    - [ ] Updated [the docs](docs.myecl.fr) accordingly : <!--[Docs#0 -
    Title](https://github.com/aeecleclair/myecl-documentation/pull/0)-->
    - [ ] `"` Docstrings
    - [ ] `#` Inline comments
    - [ ] No documentation needed

    </details>

commit 2891c6252dbe32c4f6b3ae67d0b90c4642da936c
Author: Timothée Robert <114694873+Rotheem@users.noreply.github.com>
Date:   Wed Dec 17 19:26:13 2025 +0100

    Use correct competition permissions (#929)

    Use correct competition permissions dependencies

    Use correct competition permissions dependencies

    <!--Don't touch thses two tags-->
    <details>
    <summary>

    </summary>

    - [x] 🐛 Bug fix (non-breaking change which fixes an issue)
    - [ ] ✨ New feature (non-breaking change which adds functionality)
    - [ ] 🔨 Refactor (non-breaking change that neither fixes a bug nor adds
    a feature)
    - [ ] 🔧 Infra CI/CD (changes to configs of workflows)
    - [ ] 💥 BREAKING CHANGE (fix or feature that require a new minimal
    version of the front-end)
    - [ ] 😶‍🌫️ No impact for the end-users

    - [ ] Core functionality changes
    - [x] Single module changes
    - [ ] Multiple modules changes
    - [ ] Database migrations required
    - [ ] Other: ... <!--Not module-oriented: write something!-->

    - [x] 1. Tested this locally
    - [ ] 2. Added/modified tests that pass the CI (or tested in a
    downstream fork)
    - [ ] 3. Tested in a deployed pre-prod
    - [ ] 0. Untestable (exceptionally), will be tested in prod directly

    - [ ] Updated [the docs](docs.myecl.fr) accordingly : <!--[Docs#0 -
    Title](https://github.com/aeecleclair/myecl-documentation/pull/0)-->
    - [ ] `"` Docstrings
    - [ ] `#` Inline comments
    - [ ] No documentation needed

    </details>

commit 5fd6acef521510ef80290b200b4ee6ef10c70163
Author: Marc-Andrieu <146140470+Marc-Andrieu@users.noreply.github.com>
Date:   Tue Dec 9 18:36:48 2025 +0100

    Update README.md, and various related changes (#845)

    See the commits for a (rather) clear-cut view of the changes

    ---------

    Co-authored-by: Timothée Robert <114694873+Rotheem@users.noreply.github.com>
    Co-authored-by: Armand Didierjean <95971503+armanddidierjean@users.noreply.github.com>

commit ca3324196c1788e3b85f48e35cdff07c25bb4d73
Author: Timothée Robert <114694873+Rotheem@users.noreply.github.com>
Date:   Tue Dec 9 14:41:53 2025 +0100

    Fix competition migration (#923)

    <!--BRIEF description: DONT'T EXPLAIN the code: JUSTIFY what this PR is
    for!-->

    ...

    <!--#### Sources at the end-->

    <!--Use a keyword, then #123 for the same repo or
    aeecleclair/RepoName#123 for another-->

    <!--Keywords: "closes", "fixes", "resolves" -->
    <!--Fixes #-->

    <!--Keywords: "depends on", "blocked by" -->
    <!--Depends on #-->

    <!--DESCRIBE the changes: tell the BIG STEPS, use a CHECKLIST to show
    progress. You can explain below how the code works.-->

    - [x] ...
    - [ ] ...

    <!--Anything relevant that does not quite fit in the summary-->

    <!--Don't touch thses two tags-->
    <details>
    <summary>

    </summary>

    - [ ] 🐛 Bug fix (non-breaking change which fixes an issue)
    - [ ] ✨ New feature (non-breaking change which adds functionality)
    - [ ] 🔨 Refactor (non-breaking change that neither fixes a bug nor adds
    a feature)
    - [ ] 🔧 Infra CI/CD (changes to configs of workflows)
    - [ ] 💥 BREAKING CHANGE (fix or feature that require a new minimal
    version of the front-end)
    - [ ] 😶‍🌫️ No impact for the end-users

    - [ ] Core functionality changes
    - [ ] Single module changes
    - [ ] Multiple modules changes
    - [ ] Database migrations required
    - [ ] Other: ... <!--Not module-oriented: write something!-->

    - [ ] 1. Tested this locally
    - [ ] 2. Added/modified tests that pass the CI (or tested in a
    downstream fork)
    - [ ] 3. Tested in a deployed pre-prod
    - [ ] 0. Untestable (exceptionally), will be tested in prod directly

    - [ ] Updated [the docs](docs.myecl.fr) accordingly : <!--[Docs#0 -
    Title](https://github.com/aeecleclair/myecl-documentation/pull/0)-->
    - [ ] `"` Docstrings
    - [ ] `#` Inline comments
    - [ ] No documentation needed

    </details>

commit fe8a0b457c038c758cc3ebe43dc2c13785d9493b
Author: Marc-Andrieu <146140470+Marc-Andrieu@users.noreply.github.com>
Date:   Tue Dec 9 14:23:49 2025 +0100

    Bump Hyperion 4.11.1 (#921)

commit b718ba447116b184acf7bdd8536d0da193fb606a
Author: Timothée Robert <114694873+Rotheem@users.noreply.github.com>
Date:   Tue Dec 9 14:21:29 2025 +0100

    Fix competition migration (#920)

    <!--BRIEF description: DONT'T EXPLAIN the code: JUSTIFY what this PR is
    for!-->

    ...

    <!--#### Sources at the end-->

    <!--Use a keyword, then #123 for the same repo or
    aeecleclair/RepoName#123 for another-->

    <!--Keywords: "closes", "fixes", "resolves" -->
    <!--Fixes #-->

    <!--Keywords: "depends on", "blocked by" -->
    <!--Depends on #-->

    <!--DESCRIBE the changes: tell the BIG STEPS, use a CHECKLIST to show
    progress. You can explain below how the code works.-->

    - [x] ...
    - [ ] ...

    <!--Anything relevant that does not quite fit in the summary-->

    <!--Don't touch thses two tags-->
    <details>
    <summary>

    </summary>

    - [ ] 🐛 Bug fix (non-breaking change which fixes an issue)
    - [ ] ✨ New feature (non-breaking change which adds functionality)
    - [ ] 🔨 Refactor (non-breaking change that neither fixes a bug nor adds
    a feature)
    - [ ] 🔧 Infra CI/CD (changes to configs of workflows)
    - [ ] 💥 BREAKING CHANGE (fix or feature that require a new minimal
    version of the front-end)
    - [ ] 😶‍🌫️ No impact for the end-users

    - [ ] Core functionality changes
    - [ ] Single module changes
    - [ ] Multiple modules changes
    - [ ] Database migrations required
    - [ ] Other: ... <!--Not module-oriented: write something!-->

    - [ ] 1. Tested this locally
    - [ ] 2. Added/modified tests that pass the CI (or tested in a
    downstream fork)
    - [ ] 3. Tested in a deployed pre-prod
    - [ ] 0. Untestable (exceptionally), will be tested in prod directly

    - [ ] Updated [the docs](docs.myecl.fr) accordingly : <!--[Docs#0 -
    Title](https://github.com/aeecleclair/myecl-documentation/pull/0)-->
    - [ ] `"` Docstrings
    - [ ] `#` Inline comments
    - [ ] No documentation needed

    </details>

commit a6238d0ca61644b7516d2ff1a6e50a929510aef0
Author: Timothée Robert <114694873+Rotheem@users.noreply.github.com>
Date:   Sat Dec 6 13:15:35 2025 +0100

    Sport competition part 2 (#901)

    <!--BRIEF description: DONT'T EXPLAIN the code: JUSTIFY what this PR is
    for!-->

    ...

    <!--#### Sources at the end-->

    <!--Use a keyword, then #123 for the same repo or
    aeecleclair/RepoName#123 for another-->

    <!--Keywords: "closes", "fixes", "resolves" -->
    <!--Fixes #-->

    <!--Keywords: "depends on", "blocked by" -->
    <!--Depends on #-->

    <!--DESCRIBE the changes: tell the BIG STEPS, use a CHECKLIST to show
    progress. You can explain below how the code works.-->

    - [x] ...
    - [ ] ...

    <!--Anything relevant that does not quite fit in the summary-->

    <!--Don't touch thses two tags-->
    <details>
    <summary>

    </summary>

    - [x] 🐛 Bug fix (non-breaking change which fixes an issue)
    - [x] ✨ New feature (non-breaking change which adds functionality)
    - [ ] 🔨 Refactor (non-breaking change that neither fixes a bug nor adds
    a feature)
    - [ ] 🔧 Infra CI/CD (changes to configs of workflows)
    - [ ] 💥 BREAKING CHANGE (fix or feature that require a new minimal
    version of the front-end)
    - [ ] 😶‍🌫️ No impact for the end-users

    - [ ] Core functionality changes
    - [x] Single module changes
    - [ ] Multiple modules changes
    - [x] Database migrations required
    - [ ] Other: ... <!--Not module-oriented: write something!-->

    - [ ] 1. Tested this locally
    - [x] 2. Added/modified tests that pass the CI (or tested in a
    downstream fork)
    - [ ] 3. Tested in a deployed pre-prod
    - [ ] 0. Untestable (exceptionally), will be tested in prod directly

    - [ ] Updated [the docs](docs.myecl.fr) accordingly : <!--[Docs#0 -
    Title](https://github.com/aeecleclair/myecl-documentation/pull/0)-->
    - [ ] `"` Docstrings
    - [ ] `#` Inline comments
    - [x] No documentation needed

    </details>

commit 2606c2023ad6254e35f5076c1d4caea22aaaa75a
Author: Maillard Antoine <145469528+cotanoine@users.noreply.github.com>
Date:   Sun Nov 30 21:35:35 2025 +0100

    Flappybird fix (#913)

    Some data was stored in db but never accessed

    ---------

    Co-authored-by: Marc-Andrieu <146140470+Marc-Andrieu@users.noreply.github.com>
    Co-authored-by: Marc-Andrieu <marc.andrieu@outlook.com>

commit 814bf45b622aeb32877ca43e32651f38388ed2e0
Author: Marc-Andrieu <146140470+Marc-Andrieu@users.noreply.github.com>
Date:   Sun Nov 30 21:10:45 2025 +0100

    Preprod-building workflow: input PR number instead of branch name (#892)

    <!--Brief description of what this PR does.-->
    <!--Don't explain the code, justify what this PR exists for!-->
    The new manually-triggered workflow to build&push pre-prods has a nice
    dropdown to select the pre-prod...
    But the branch name had to be put in as a string.

    **Now you write the PR number.**
    * Before, it required the dev to search the branch name (which we often
    don't know), but we remember more easily PR numbers because shorter.
    * A branch name is long thus prone to errors, a PR number is less
    error-prone
    * There was no validation before, now a step ensures the PR number makes
    sense in the 1st place.
    The best would have been a nice dropdown (with branch names or PR
    numbers, whatever) because this ensures no error is possible and the dev
    doesn't have to search information.
    But I did not find how to run some command before/inside the top-level
    `on` to generate the dropdown choices.

    <!--Sources/references at the end-->
    <!--Use keywords "closes", "fixes", "resolves", or others at
    https://docs.github.com/en/get-started/writing-on-github/working-with-advanced-formatting/using-keywords-in-issues-and-pull-requests
    -->

    <!--Fixes #-->
    <!--Fixes aeecleclair/CalypSSO#-->
    <!--Use keywords "depends on" or "blocked by", see
    https://github.com/gregsdennis/dependencies-action -->

    <!--Depends on #-->
    <!--Depends on aeecleclair/CalypSSO#-->

    <!--Please describe the changes made in this pull request-->
    <!--Tell the big steps, use a checklist to show progress. You can
    explain here how the code works.-->

    You'd better read the code for this one.

    <!--Anything relevant that does not quite fit in the summary-->

    <details>
    <summary>

    </summary>

    - [ ] 🐛 Bug fix (non-breaking change which fixes an issue)
    - [ ] ✨ New feature (non-breaking change which adds functionality)
    - [ ] 🔨 Refactor (non-breaking change that neither fixes a bug nor adds
    a feature)
    - [x] 🔧 Infra CI/CD (changes to configs of workflows)
    - [ ] 💥 BREAKING CHANGE (fix or feature that require a new minimal
    version of the front-end)

    <!---->
    - [ ] 😶‍🌫️ No impact for the end-users

    - [x] Other: CI/CD<!--not module-oriented-->

    - [ ] Tested on a fork, when the number has an opened PR and when not

    - [x] No documentation needed

    </details>

commit 542646d7f6ce38628a971631198715c4e7474f00
Author: julien4215 <120588494+julien4215@users.noreply.github.com>
Date:   Sun Nov 30 08:20:55 2025 +0100

    Upgrade Python to 3.14 (#915)

commit f02f39f054569d4d7c1b406bfd9791c3931b0434
Author: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Date:   Sat Nov 29 19:01:30 2025 +0100

    Bump glob from 10.4.5 to 10.5.0 in /assets/templates (#911)

    Bumps [glob](https://github.com/isaacs/node-glob) from 10.4.5 to 10.5.0.
    <details>
    <summary>Commits</summary>
    <ul>
    <li><a
    href="https://github.com/isaacs/node-glob/commit/56774ef73b495eb0b17cdd0f42921f5ef62297c1"><code>56774ef</code></a>
    10.5.0</li>
    <li><a
    href="https://github.com/isaacs/node-glob/commit/1e4e297342a09f2aa0ced87fcd4a70ddc325d75f"><code>1e4e297</code></a>
    bin: Do not expose filenames to shell expansion</li>
    <li>See full diff in <a
    href="https://github.com/isaacs/node-glob/compare/v10.4.5...v10.5.0">compare
    view</a></li>
    </ul>
    </details>
    <br />

    [![Dependabot compatibility
    score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=glob&package-manager=npm_and_yarn&previous-version=10.4.5&new-version=10.5.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

    Dependabot will resolve any conflicts with this PR as long as you don't
    alter it yourself. You can also trigger a rebase manually by commenting
    `@dependabot rebase`.

    [//]: # (dependabot-automerge-start)
    [//]: # (dependabot-automerge-end)

    ---

    <details>
    <summary>Dependabot commands and options</summary>
    <br />

    You can trigger Dependabot actions by commenting on this PR:
    - `@dependabot rebase` will rebase this PR
    - `@dependabot recreate` will recreate this PR, overwriting any edits
    that have been made to it
    - `@dependabot merge` will merge this PR after your CI passes on it
    - `@dependabot squash and merge` will squash and merge this PR after
    your CI passes on it
    - `@dependabot cancel merge` will cancel a previously requested merge
    and block automerging
    - `@dependabot reopen` will reopen this PR if it is closed
    - `@dependabot close` will close this PR and stop Dependabot recreating
    it. You can achieve the same result by closing it manually
    - `@dependabot show <dependency name> ignore conditions` will show all
    of the ignore conditions of the specified dependency
    - `@dependabot ignore this major version` will close this PR and stop
    Dependabot creating any more for this major version (unless you reopen
    the PR or upgrade to it yourself)
    - `@dependabot ignore this minor version` will close this PR and stop
    Dependabot creating any more for this minor version (unless you reopen
    the PR or upgrade to it yourself)
    - `@dependabot ignore this dependency` will close this PR and stop
    Dependabot creating any more for this dependency (unless you reopen the
    PR or upgrade to it yourself)
    You can disable automated security fix PRs for this repo from the
    [Security Alerts
    page](https://github.com/aeecleclair/Hyperion/network/alerts).

    </details>

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

commit 4d028162d9c869e4d4182ce13e9c451605545576
Author: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Date:   Sat Nov 29 17:32:52 2025 +0100

    Bump brace-expansion from 2.0.1 to 2.0.2 in /assets/templates (#760)

    Bumps [brace-expansion](https://github.com/juliangruber/brace-expansion)
    from 2.0.1 to 2.0.2.
    <details>
    <summary>Release notes</summary>
    <p><em>Sourced from <a
    href="https://github.com/juliangruber/brace-expansion/releases">brace-expansion's
    releases</a>.</em></p>
    <blockquote>
    <h2>v2.0.2</h2>
    <ul>
    <li>pkg: publish on tag 2.x  14f1d91</li>
    <li>fmt  ed7780a</li>
    <li>Fix potential ReDoS Vulnerability or Inefficient Regular Expression
    (<a
    href="https://redirect.github.com/juliangruber/brace-expansion/issues/65">#65</a>)
    36603d5</li>
    </ul>
    <hr />
    <p><a
    href="https://github.com/juliangruber/brace-expansion/compare/v2.0.1...v2.0.2">https://github.com/juliangruber/brace-expansion/compare/v2.0.1...v2.0.2</a></p>
    </blockquote>
    </details>
    <details>
    <summary>Commits</summary>
    <ul>
    <li><a
    href="https://github.com/juliangruber/brace-expansion/commit/a3efcee659ef0fb381e2b50d759c720900580a15"><code>a3efcee</code></a>
    2.0.2</li>
    <li><a
    href="https://github.com/juliangruber/brace-expansion/commit/14f1d91b0523ffb0c8bbe6a28dc98ddc56ae53bc"><code>14f1d91</code></a>
    pkg: publish on tag 2.x</li>
    <li><a
    href="https://github.com/juliangruber/brace-expansion/commit/ed7780ab1cb8a7696f1813b5a945fcc70d8d1990"><code>ed7780a</code></a>
    fmt</li>
    <li><a
    href="https://github.com/juliangruber/brace-expansion/commit/36603d5f3599a37af9e85eda30acd7d28599c36e"><code>36603d5</code></a>
    Fix potential ReDoS Vulnerability or Inefficient Regular Expression (<a
    href="https://redirect.github.com/juliangruber/brace-expansion/issues/65">#65</a>)</li>
    <li>See full diff in <a
    href="https://github.com/juliangruber/brace-expansion/compare/v2.0.1...v2.0.2">compare
    view</a></li>
    </ul>
    </details>
    <br />

    [![Dependabot compatibility
    score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=brace-expansion&package-manager=npm_and_yarn&previous-version=2.0.1&new-version=2.0.2)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

    Dependabot will resolve any conflicts with this PR as long as you don't
    alter it yourself. You can also trigger a rebase manually by commenting
    `@dependabot rebase`.

    [//]: # (dependabot-automerge-start)
    [//]: # (dependabot-automerge-end)

    ---

    <details>
    <summary>Dependabot commands and options</summary>
    <br />

    You can trigger Dependabot actions by commenting on this PR:
    - `@dependabot rebase` will rebase this PR
    - `@dependabot recreate` will recreate this PR, overwriting any edits
    that have been made to it
    - `@dependabot merge` will merge this PR after your CI passes on it
    - `@dependabot squash and merge` will squash and merge this PR after
    your CI passes on it
    - `@dependabot cancel merge` will cancel a previously requested merge
    and block automerging
    - `@dependabot reopen` will reopen this PR if it is closed
    - `@dependabot close` will close this PR and stop Dependabot recreating
    it. You can achieve the same result by closing it manually
    - `@dependabot show <dependency name> ignore conditions` will show all
    of the ignore conditions of the specified dependency
    - `@dependabot ignore this major version` will close this PR and stop
    Dependabot creating any more for this major version (unless you reopen
    the PR or upgrade to it yourself)
    - `@dependabot ignore this minor version` will close this PR and stop
    Dependabot creating any more for this minor version (unless you reopen
    the PR or upgrade to it yourself)
    - `@dependabot ignore this dependency` will close this PR and stop
    Dependabot creating any more for this dependency (unless you reopen the
    PR or upgrade to it yourself)
    You can disable automated security fix PRs for this repo from the
    [Security Alerts
    page](https://github.com/aeecleclair/Hyperion/network/alerts).

    </details>

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

commit 317d4d4bcba41b2d530c677776fdcf58df7b9b61
Author: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Date:   Sat Nov 29 17:24:59 2025 +0100

    Bump pypdf from 4.3.1 to 6.4.0 (#907)

    Bumps [pypdf](https://github.com/py-pdf/pypdf) from 4.3.1 to 6.4.0.
    <details>
    <summary>Release notes</summary>
    <p><em>Sourced from <a
    href="https://github.com/py-pdf/pypdf/releases">pypdf's
    releases</a>.</em></p>
    <blockquote>
    <h2>Version 6.4.0, 2025-11-23</h2>
    <h2>What's new</h2>
    <h3>Security (SEC)</h3>
    <ul>
    <li>Reduce default limit for LZW decoding by <a
    href="ht…
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

authentication core feat New feature or request help wanted Extra attention is needed migration

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant