Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: suitenumerique/docs
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: v3.1.0
Choose a base ref
...
head repository: suitenumerique/docs
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: v3.2.0
Choose a head ref

Commits on Apr 10, 2025

  1. 📝(docs) init architecture documentation

    - Add docs about architecture
    - Add ADR about the CRDT choice
    olaurendeau authored and AntoLC committed Apr 10, 2025
    Copy the full SHA
    ad11b7f View commit details

Commits on Apr 11, 2025

  1. 📝(readme) remove preprod account

    Having a preprod account using a yopmail account was a security bad practice
    
    Co-authored-by: Samuel Paccoud <sampaccoud@users.noreply.github.com>
    2 people authored and AntoLC committed Apr 11, 2025
    Copy the full SHA
    f429eb0 View commit details

Commits on Apr 13, 2025

  1. 🚩(backend) add homepage feature flag

    Add a homepage feature flag that we will
    propagate to the frontend.
    It will be used to enable or disable the
    homepage at runtime.
    AntoLC authored and lunika committed Apr 13, 2025
    Copy the full SHA
    67b69d0 View commit details
  2. 🚩(frontend) integrate homepage feature flag

    If the homepage feature flag is enabled,
    the homepage will be displayed.
    AntoLC authored and lunika committed Apr 13, 2025
    Copy the full SHA
    e9ab099 View commit details
  3. 🚚(frontend) Display homepage on /home url

    The homepage is now accessible at the /home URL.
    Before the homepage was accessible on the /login URL.
    We still keep the /login URL for backward compatibility.
    AntoLC authored and lunika committed Apr 13, 2025
    Copy the full SHA
    ecd0656 View commit details

Commits on Apr 17, 2025

  1. 🚸(backend) make document search on title accent-insensitive

    This should work in both cases:
    - search for "vélo" when the document title contains "velo"
    - search for "velo" when the document title contains "vélo"
    sampaccoud committed Apr 17, 2025
    Copy the full SHA
    419079a View commit details

Commits on Apr 22, 2025

  1. ♻️(frontend) refacto useCunninghamTheme

    Refacto useCunninghamTheme, we don't need a function
    to have access to the tokens anymore.
    AntoLC committed Apr 22, 2025
    Copy the full SHA
    101cef7 View commit details
  2. ⚡️(frontend) reduce unblocking time for config

    We will serve the config from the cache if available
    in waiting for the config to be loaded.
    It will remove the loading time for the config except
    when the config is not available in the cache.
    AntoLC committed Apr 22, 2025
    Copy the full SHA
    3bf33d2 View commit details
  3. 🐛(backend) race condition create doc

    When 2 docs are created almost at the same time,
    the second one will fail because the first one.
    We get a unicity error on the path key already
    used ("impress_document_path_key").
    To fix this issue, we will lock the table the
    time to create the document, the next query will
    wait for the lock to be released.
    AntoLC committed Apr 22, 2025
    Copy the full SHA
    4307b4f View commit details
  4. 📝(readme) update xl packages info (#885)

    Info message so people fulfill their licencing obligations
    
    Signed-off-by: virgile-deville <virgile.deville@beta.gouv.fr>
    virgile-dev authored Apr 22, 2025
    Copy the full SHA
    cdafe6f View commit details

Commits on Apr 23, 2025

  1. Copy the full SHA
    5268699 View commit details

Commits on Apr 28, 2025

  1. ✨(settings) Allow configuring PKCE for the SSO (#886)

    C.f.
    https://mozilla-django-oidc.readthedocs.io/en/latest/settings.html#OIDC_USE_PKCE
    
    ## Purpose
    
    Add pkce settings
    
    ## Proposal
    Get the settings from the environment
    
    Signed-off-by: Tom Hubrecht <github@mail.hubrecht.ovh>
    Tom-Hubrecht authored Apr 28, 2025
    Copy the full SHA
    5cdbdbf View commit details
  2. ⬆️(dependencies) update python dependencies (#847)

    This PR contains the following updates:
    
    | Package | Change | Age | Adoption | Passing | Confidence |
    |---|---|---|---|---|---|
    | [boto3](https://redirect.github.com/boto/boto3) | `==1.37.24` ->
    `==1.37.33` |
    [![age](https://developer.mend.io/api/mc/badges/age/pypi/boto3/1.37.33?slim=true)](https://docs.renovatebot.com/merge-confidence/)
    |
    [![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/boto3/1.37.33?slim=true)](https://docs.renovatebot.com/merge-confidence/)
    |
    [![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/boto3/1.37.24/1.37.33?slim=true)](https://docs.renovatebot.com/merge-confidence/)
    |
    [![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/boto3/1.37.24/1.37.33?slim=true)](https://docs.renovatebot.com/merge-confidence/)
    |
    | [celery](https://docs.celeryq.dev/)
    ([source](https://redirect.github.com/celery/celery),
    [changelog](https://docs.celeryq.dev/en/stable/changelog.html)) |
    `==5.5.0` -> `==5.5.1` |
    [![age](https://developer.mend.io/api/mc/badges/age/pypi/celery/5.5.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
    |
    [![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/celery/5.5.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
    |
    [![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/celery/5.5.0/5.5.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
    |
    [![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/celery/5.5.0/5.5.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
    |
    | [django](https://redirect.github.com/django/django)
    ([changelog](https://docs.djangoproject.com/en/stable/releases/)) |
    `==5.1.8` -> `==5.2` |
    [![age](https://developer.mend.io/api/mc/badges/age/pypi/django/5.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
    |
    [![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/django/5.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
    |
    [![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/django/5.1.8/5.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
    |
    [![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/django/5.1.8/5.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
    |
    |
    [django-extensions](https://redirect.github.com/django-extensions/django-extensions)
    ([changelog](https://redirect.github.com/django-extensions/django-extensions/blob/main/CHANGELOG.md))
    | `==3.2.3` -> `==4.1` |
    [![age](https://developer.mend.io/api/mc/badges/age/pypi/django-extensions/4.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
    |
    [![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/django-extensions/4.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
    |
    [![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/django-extensions/3.2.3/4.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
    |
    [![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/django-extensions/3.2.3/4.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
    |
    |
    [django-storages](https://redirect.github.com/jschneier/django-storages)
    ([changelog](https://redirect.github.com/jschneier/django-storages/blob/master/CHANGELOG.rst))
    | `==1.14.5` -> `==1.14.6` |
    [![age](https://developer.mend.io/api/mc/badges/age/pypi/django-storages/1.14.6?slim=true)](https://docs.renovatebot.com/merge-confidence/)
    |
    [![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/django-storages/1.14.6?slim=true)](https://docs.renovatebot.com/merge-confidence/)
    |
    [![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/django-storages/1.14.5/1.14.6?slim=true)](https://docs.renovatebot.com/merge-confidence/)
    |
    [![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/django-storages/1.14.5/1.14.6?slim=true)](https://docs.renovatebot.com/merge-confidence/)
    |
    |
    [drf-spectacular-sidecar](https://redirect.github.com/tfranzel/drf-spectacular-sidecar)
    | `==2025.3.1` -> `==2025.4.1` |
    [![age](https://developer.mend.io/api/mc/badges/age/pypi/drf-spectacular-sidecar/2025.4.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
    |
    [![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/drf-spectacular-sidecar/2025.4.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
    |
    [![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/drf-spectacular-sidecar/2025.3.1/2025.4.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
    |
    [![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/drf-spectacular-sidecar/2025.3.1/2025.4.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
    |
    | [ipython](https://redirect.github.com/ipython/ipython) | `==9.0.2` ->
    `==9.1.0` |
    [![age](https://developer.mend.io/api/mc/badges/age/pypi/ipython/9.1.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
    |
    [![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/ipython/9.1.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
    |
    [![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/ipython/9.0.2/9.1.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
    |
    [![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/ipython/9.0.2/9.1.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
    |
    | [lxml](https://lxml.de/)
    ([source](https://redirect.github.com/lxml/lxml),
    [changelog](https://git.launchpad.net/lxml/plain/CHANGES.txt)) |
    `==5.3.1` -> `==5.3.2` |
    [![age](https://developer.mend.io/api/mc/badges/age/pypi/lxml/5.3.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
    |
    [![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/lxml/5.3.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
    |
    [![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/lxml/5.3.1/5.3.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
    |
    [![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/lxml/5.3.1/5.3.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
    |
    | [markdown](https://redirect.github.com/Python-Markdown/markdown)
    ([changelog](https://python-markdown.github.io/changelog/)) | `==3.7` ->
    `==3.8` |
    [![age](https://developer.mend.io/api/mc/badges/age/pypi/markdown/3.8?slim=true)](https://docs.renovatebot.com/merge-confidence/)
    |
    [![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/markdown/3.8?slim=true)](https://docs.renovatebot.com/merge-confidence/)
    |
    [![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/markdown/3.7/3.8?slim=true)](https://docs.renovatebot.com/merge-confidence/)
    |
    [![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/markdown/3.7/3.8?slim=true)](https://docs.renovatebot.com/merge-confidence/)
    |
    | [openai](https://redirect.github.com/openai/openai-python) |
    `==1.70.0` -> `==1.73.0` |
    [![age](https://developer.mend.io/api/mc/badges/age/pypi/openai/1.73.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
    |
    [![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/openai/1.73.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
    |
    [![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/openai/1.70.0/1.73.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
    |
    [![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/openai/1.70.0/1.73.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
    |
    | [pycrdt](https://redirect.github.com/jupyter-server/pycrdt) |
    `==0.12.10` -> `==0.12.12` |
    [![age](https://developer.mend.io/api/mc/badges/age/pypi/pycrdt/0.12.12?slim=true)](https://docs.renovatebot.com/merge-confidence/)
    |
    [![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/pycrdt/0.12.12?slim=true)](https://docs.renovatebot.com/merge-confidence/)
    |
    [![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/pycrdt/0.12.10/0.12.12?slim=true)](https://docs.renovatebot.com/merge-confidence/)
    |
    [![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/pycrdt/0.12.10/0.12.12?slim=true)](https://docs.renovatebot.com/merge-confidence/)
    |
    | [pytest-cov](https://redirect.github.com/pytest-dev/pytest-cov)
    ([changelog](https://pytest-cov.readthedocs.io/en/latest/changelog.html))
    | `==6.0.0` -> `==6.1.1` |
    [![age](https://developer.mend.io/api/mc/badges/age/pypi/pytest-cov/6.1.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
    |
    [![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/pytest-cov/6.1.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
    |
    [![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/pytest-cov/6.0.0/6.1.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
    |
    [![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/pytest-cov/6.0.0/6.1.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
    |
    | [pytest-django](https://redirect.github.com/pytest-dev/pytest-django)
    ([changelog](https://pytest-django.readthedocs.io/en/latest/changelog.html))
    | `==4.10.0` -> `==4.11.1` |
    [![age](https://developer.mend.io/api/mc/badges/age/pypi/pytest-django/4.11.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
    |
    [![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/pytest-django/4.11.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
    |
    [![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/pytest-django/4.10.0/4.11.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
    |
    [![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/pytest-django/4.10.0/4.11.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
    |
    | [ruff](https://docs.astral.sh/ruff)
    ([source](https://redirect.github.com/astral-sh/ruff),
    [changelog](https://redirect.github.com/astral-sh/ruff/blob/main/CHANGELOG.md))
    | `==0.11.2` -> `==0.11.5` |
    [![age](https://developer.mend.io/api/mc/badges/age/pypi/ruff/0.11.5?slim=true)](https://docs.renovatebot.com/merge-confidence/)
    |
    [![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/ruff/0.11.5?slim=true)](https://docs.renovatebot.com/merge-confidence/)
    |
    [![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/ruff/0.11.2/0.11.5?slim=true)](https://docs.renovatebot.com/merge-confidence/)
    |
    [![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/ruff/0.11.2/0.11.5?slim=true)](https://docs.renovatebot.com/merge-confidence/)
    |
    | [sentry-sdk](https://redirect.github.com/getsentry/sentry-python)
    ([changelog](https://redirect.github.com/getsentry/sentry-python/blob/master/CHANGELOG.md))
    | `==2.25.0` -> `==2.25.1` |
    [![age](https://developer.mend.io/api/mc/badges/age/pypi/sentry-sdk/2.25.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
    |
    [![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/sentry-sdk/2.25.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
    |
    [![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/sentry-sdk/2.25.0/2.25.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
    |
    [![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/sentry-sdk/2.25.0/2.25.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
    |
    
    ---
    
    ### Release Notes
    
    <details>
    <summary>boto/boto3 (boto3)</summary>
    
    ###
    [`v1.37.33`](https://redirect.github.com/boto/boto3/blob/HEAD/CHANGELOG.rst#13733)
    
    [Compare
    Source](https://redirect.github.com/boto/boto3/compare/1.37.32...1.37.33)
    
    \=======
    
    - api-change:`connect-contact-lens`: \[`botocore`] Making sentiment
    optional for ListRealtimeContactAnalysisSegments Response depending on
    conversational analytics configuration
    - api-change:`datazone`: \[`botocore`] Raise hard limit of authorized
    principals per SubscriptionTarget from 10 to 20.
    - api-change:`detective`: \[`botocore`] Add support for Detective
    DualStack endpoints
    - api-change:`dynamodb`: \[`botocore`] Doc only update for API
    descriptions.
    - api-change:`marketplace-entitlement`: \[`botocore`] Add support for
    Marketplace Entitlement Service dual-stack endpoints for CN and GOV
    regions
    - api-change:`meteringmarketplace`: \[`botocore`] Add support for
    Marketplace Metering Service dual-stack endpoints for CN regions
    - api-change:`pcs`: \[`botocore`] Changed the minimum length of
    clusterIdentifier, computeNodeGroupIdentifier, and queueIdentifier to 3.
    - api-change:`verifiedpermissions`: \[`botocore`] Adds deletion
    protection support to policy stores. Deletion protection is disabled by
    default, can be enabled via the CreatePolicyStore or UpdatePolicyStore
    APIs, and is visible in GetPolicyStore.
    - bugfix:`download_fileobj`: Fileobj provided in append mode will no
    longer allow concurrent writes to preserve data integrity.
    
    ###
    [`v1.37.32`](https://redirect.github.com/boto/boto3/blob/HEAD/CHANGELOG.rst#13732)
    
    [Compare
    Source](https://redirect.github.com/boto/boto3/compare/1.37.31...1.37.32)
    
    \=======
    
    - api-change:`application-autoscaling`: \[`botocore`] Application Auto
    Scaling now supports horizontal scaling for Elasticache Memcached
    self-designed clusters using target tracking scaling policies and
    scheduled scaling.
    - api-change:`elasticache`: \[`botocore`] AWS ElastiCache SDK now
    supports using MemcachedUpgradeConfig parameter with ModifyCacheCluster
    API to enable updating Memcached cache node types. Please refer to
    updated AWS ElastiCache public documentation for detailed information on
    API usage and implementation.
    - api-change:`m2`: \[`botocore`] Introduce three new APIs:
    CreateDataSetExportTask, GetDataSetExportTask and
    ListDataSetExportHistory. Add support for batch restart for Blu Age
    applications.
    - api-change:`medialive`: \[`botocore`] AWS Elemental MediaLive /
    Features : Add support for CMAF Ingest CaptionLanguageMappings,
    TimedMetadataId3 settings, and Link InputResolution.
    - api-change:`qbusiness`: \[`botocore`] Adds functionality to
    enable/disable a new Q Business Hallucination Reduction feature. If
    enabled, Q Business will detect and attempt to remove Hallucinations
    from certain Chat requests.
    - api-change:`quicksight`: \[`botocore`] Add support to analysis and
    sheet level highlighting in QuickSight.
    
    ###
    [`v1.37.31`](https://redirect.github.com/boto/boto3/blob/HEAD/CHANGELOG.rst#13731)
    
    [Compare
    Source](https://redirect.github.com/boto/boto3/compare/1.37.30...1.37.31)
    
    \=======
    
    - api-change:`controlcatalog`: \[`botocore`] The GetControl API now
    surfaces a control's Severity, CreateTime, and Identifier for a
    control's Implementation. The ListControls API now surfaces a control's
    Behavior, Severity, CreateTime, and Identifier for a control's
    Implementation.
    - api-change:`dynamodb`: \[`botocore`] Documentation update for
    secondary indexes and Create_Table.
    - api-change:`glue`: \[`botocore`] The TableOptimizer APIs in AWS Glue
    now return the DpuHours field in each TableOptimizerRun, providing
    clients visibility to the DPU-hours used for billing in managed Apache
    Iceberg table compaction optimization.
    - api-change:`groundstation`: \[`botocore`] Support tagging Agents and
    adjust input field validations
    - api-change:`transfer`: \[`botocore`] This launch includes 2
    enhancements to SFTP connectors user-experience: 1) Customers can
    self-serve concurrent connections setting for their connectors, and 2)
    Customers can discover the public host key of remote servers using their
    SFTP connectors.
    
    ###
    [`v1.37.30`](https://redirect.github.com/boto/boto3/blob/HEAD/CHANGELOG.rst#13730)
    
    [Compare
    Source](https://redirect.github.com/boto/boto3/compare/1.37.29...1.37.30)
    
    \=======
    
    - api-change:`bedrock-runtime`: \[`botocore`] This release introduces
    our latest bedrock runtime API, InvokeModelWithBidirectionalStream. The
    API supports both input and output streams and is supported by only
    HTTP2.0.
    - api-change:`ce`: \[`botocore`] This release supports Pagination traits
    on Cost Anomaly Detection APIs.
    - api-change:`cost-optimization-hub`: \[`botocore`] This release adds
    resource type "MemoryDbReservedInstances" and resource type
    "DynamoDbReservedCapacity" to the GetRecommendation,
    ListRecommendations, and ListRecommendationSummaries APIs to support new
    MemoryDB and DynamoDB RI recommendations.
    - api-change:`iotfleetwise`: \[`botocore`] This release adds the option
    to update the strategy of state templates already associated to a
    vehicle, without the need to remove and re-add them.
    - api-change:`securityhub`: \[`botocore`] Documentation updates for AWS
    Security Hub.
    - api-change:`storagegateway`: \[`botocore`] Added new
    ActiveDirectoryStatus value, ListCacheReports paginator, and support for
    longer pagination tokens.
    - api-change:`taxsettings`: \[`botocore`] Uzbekistan Launch on
    TaxSettings Page
    
    ###
    [`v1.37.29`](https://redirect.github.com/boto/boto3/blob/HEAD/CHANGELOG.rst#13729)
    
    [Compare
    Source](https://redirect.github.com/boto/boto3/compare/1.37.28...1.37.29)
    
    \=======
    
    - api-change:`bedrock`: \[`botocore`] New options for how to handle
    harmful content detected by Amazon Bedrock Guardrails.
    - api-change:`bedrock-runtime`: \[`botocore`] New options for how to
    handle harmful content detected by Amazon Bedrock Guardrails.
    - api-change:`codebuild`: \[`botocore`] AWS CodeBuild now offers an
    enhanced debugging experience.
    - api-change:`glue`: \[`botocore`] Add input validations for multiple
    Glue APIs
    - api-change:`medialive`: \[`botocore`] AWS Elemental MediaLive now
    supports SDI inputs to MediaLive Anywhere Channels in workflows that use
    AWS SDKs.
    - api-change:`personalize`: \[`botocore`] Add support for eventsConfig
    for CreateSolution, UpdateSolution, DescribeSolution,
    DescribeSolutionVersion. Add support for GetSolutionMetrics to return
    weighted NDCG metrics when eventsConfig is enabled for the solution.
    - api-change:`transfer`: \[`botocore`] This launch enables customers to
    manage contents of their remote directories, by deleting old files or
    moving files to archive folders in remote servers once they have been
    retrieved. Customers will be able to automate the process using
    event-driven architecture.
    
    ###
    [`v1.37.28`](https://redirect.github.com/boto/boto3/blob/HEAD/CHANGELOG.rst#13728)
    
    [Compare
    Source](https://redirect.github.com/boto/boto3/compare/1.37.27...1.37.28)
    
    \=======
    
    - api-change:`ds-data`: \[`botocore`] Doc only update - fixed broken
    links.
    -   api-change:`ec2`: \[`botocore`] Doc-only updates for Amazon EC2
    - api-change:`events`: \[`botocore`] Amazon EventBridge adds support for
    customer-managed keys on Archives and validations for two fields:
    eventSourceArn and kmsKeyIdentifier.
    - api-change:`s3control`: \[`botocore`] Updated max size of Prefixes
    parameter of Scope data type.
    
    ###
    [`v1.37.27`](https://redirect.github.com/boto/boto3/blob/HEAD/CHANGELOG.rst#13727)
    
    [Compare
    Source](https://redirect.github.com/boto/boto3/compare/1.37.26...1.37.27)
    
    \=======
    
    - api-change:`bedrock-agent`: \[`botocore`] Added optional
    "customMetadataField" for Amazon Aurora knowledge bases, allowing
    single-column metadata. Also added optional "textIndexName" for MongoDB
    Atlas knowledge bases, enabling hybrid search support.
    - api-change:`chime-sdk-voice`: \[`botocore`] Added FOC date as an
    attribute of PhoneNumberOrder, added AccessDeniedException as a possible
    return type of ValidateE911Address
    - api-change:`mailmanager`: \[`botocore`] Add support for Dual_Stack and
    PrivateLink types of IngressPoint. For configuration requests, SES Mail
    Manager will now accept both IPv4/IPv6 dual-stack endpoints and AWS
    PrivateLink VPC endpoints for email receiving.
    - api-change:`opensearch`: \[`botocore`] Improve descriptions for
    various API commands and data types.
    - api-change:`route53`: \[`botocore`] Added us-gov-east-1 and
    us-gov-west-1 as valid Latency Based Routing regions for
    change-resource-record-sets.
    - api-change:`sagemaker`: \[`botocore`] Adds support for i3en, m7i, r7i
    instance types for SageMaker Hyperpod
    - api-change:`sesv2`: \[`botocore`] This release enables customers to
    provide attachments in the SESv2 SendEmail and SendBulkEmail APIs.
    - api-change:`transcribe`: \[`botocore`] This Feature Adds Support for
    the "zh-HK" Locale for Batch Operations
    - enhancement:Eventstream: \[`botocore`] The event streams maximum
    payload size is now required to be 24Mb or less.
    
    ###
    [`v1.37.26`](https://redirect.github.com/boto/boto3/blob/HEAD/CHANGELOG.rst#13726)
    
    [Compare
    Source](https://redirect.github.com/boto/boto3/compare/1.37.25...1.37.26)
    
    \=======
    
    - api-change:`application-signals`: \[`botocore`] Application Signals
    now supports creating Service Level Objectives on service dependencies.
    Users can now create or update SLOs on discovered service dependencies
    to monitor their standard application metrics.
    - api-change:`codebuild`: \[`botocore`] This release adds support for
    environment type WINDOWS_SERVER\_2022\_CONTAINER in ProjectEnvironment
    - api-change:`ecr`: \[`botocore`] Fix for customer issues related to AWS
    account ID and size limitation for token.
    - api-change:`ecs`: \[`botocore`] This is an Amazon ECS documentation
    only update to address various tickets.
    - api-change:`lexv2-models`: \[`botocore`] Release feature of
    errorlogging for lex bot, customer can config this feature in bot
    version to generate log for error exception which helps debug
    - api-change:`medialive`: \[`botocore`] Added support for SMPTE 2110
    inputs when running a channel in a MediaLive Anywhere cluster. This
    feature enables ingestion of SMPTE 2110-compliant video, audio, and
    ancillary streams by reading SDP files that AWS Elemental MediaLive can
    retrieve from a network source.
    
    ###
    [`v1.37.25`](https://redirect.github.com/boto/boto3/blob/HEAD/CHANGELOG.rst#13725)
    
    [Compare
    Source](https://redirect.github.com/boto/boto3/compare/1.37.24...1.37.25)
    
    \=======
    
    - api-change:`cleanrooms`: \[`botocore`] This release adds support for
    updating the analytics engine of a collaboration.
    - api-change:`sagemaker`: \[`botocore`] Added tagging support for
    SageMaker notebook instance lifecycle configurations
    
    </details>
    
    <details>
    <summary>celery/celery (celery)</summary>
    
    ###
    [`v5.5.1`](https://redirect.github.com/celery/celery/blob/HEAD/Changelog.rst#551)
    
    [Compare
    Source](https://redirect.github.com/celery/celery/compare/v5.5.0...v5.5.1)
    
    \=====
    
    :release-date: 2025-04-08
    :release-by: Tomer Nosrati
    
    What's Changed
    
    ```
    
    - Fixed "AttributeError: list object has no attribute strip" with quorum queues and failover brokers (#&#8203;9657)
    - Prepare for release: v5.5.1 (#&#8203;9660)
    
    .. _version-5.5.0:
    ```
    
    </details>
    
    <details>
    <summary>django/django (django)</summary>
    
    ###
    [`v5.2`](https://redirect.github.com/django/django/compare/5.1.8...5.2)
    
    [Compare
    Source](https://redirect.github.com/django/django/compare/5.1.8...5.2)
    
    </details>
    
    <details>
    <summary>django-extensions/django-extensions
    (django-extensions)</summary>
    
    ###
    [`v4.1`](https://redirect.github.com/django-extensions/django-extensions/blob/HEAD/CHANGELOG.md#41)
    
    [Compare
    Source](https://redirect.github.com/django-extensions/django-extensions/compare/4.0...4.1)
    
    Changes:
    
    - Add: show_permissions command
    ([#&#8203;1920](https://redirect.github.com/django-extensions/django-extensions/issues/1920))
    - Improvement: graph_models, style per app
    ([#&#8203;1848](https://redirect.github.com/django-extensions/django-extensions/issues/1848))
    - Fix: JSONField, bulk_update's
    ([#&#8203;1924](https://redirect.github.com/django-extensions/django-extensions/issues/1924))
    
    ###
    [`v4.0`](https://redirect.github.com/django-extensions/django-extensions/blob/HEAD/CHANGELOG.md#40)
    
    [Compare
    Source](https://redirect.github.com/django-extensions/django-extensions/compare/3.2.3...4.0)
    
    Changes:
    
    -   Improvement: Support for Python 3.12 and 3.13
    -   Improvement: Support for Django 5.x
    -   Improvement: Switch from setup.{cfg,py} to pyproject.toml
    - Improvement: graph_models, Add option to display field choices in
    graph_models
    ([#&#8203;1854](https://redirect.github.com/django-extensions/django-extensions/issues/1854))
    - Improvement: graph_models, Add webp support
    ([#&#8203;1857](https://redirect.github.com/django-extensions/django-extensions/issues/1857))
    - Improvement: graph_models, Support for ordering edges on
    pydot/dot/graphviz
    ([#&#8203;1914](https://redirect.github.com/django-extensions/django-extensions/issues/1914))
    - Improvement: mail_debug, Update mail_debug command to use aiosmtpd
    ([#&#8203;1880](https://redirect.github.com/django-extensions/django-extensions/issues/1880))
    - Improvement: shell_plus, Improve error message for missing import
    ([#&#8203;1898](https://redirect.github.com/django-extensions/django-extensions/issues/1898))
    - Improvement: reset_db, Add reset_db support for django_tenants
    ([#&#8203;1855](https://redirect.github.com/django-extensions/django-extensions/issues/1855))
    - Improvement: docs, various improvements
    ([#&#8203;1852](https://redirect.github.com/django-extensions/django-extensions/issues/1852),
    [#&#8203;1888](https://redirect.github.com/django-extensions/django-extensions/issues/1888),
    [#&#8203;1882](https://redirect.github.com/django-extensions/django-extensions/issues/1882),
    [#&#8203;1901](https://redirect.github.com/django-extensions/django-extensions/issues/1901),
    [#&#8203;1912](https://redirect.github.com/django-extensions/django-extensions/issues/1912),
    [#&#8203;1913](https://redirect.github.com/django-extensions/django-extensions/issues/1913))
    - Improvement: jobs, Handle non-package modules when looking for job
    definitions
    ([#&#8203;1887](https://redirect.github.com/django-extensions/django-extensions/issues/1887))
    - Improvement: Add django-prometheus DB backends support
    ([#&#8203;1800](https://redirect.github.com/django-extensions/django-extensions/issues/1800))
    - Improvement: Call post_command when the command raises an unhandled
    exception
    ([#&#8203;1837](https://redirect.github.com/django-extensions/django-extensions/issues/1837))
    - Fix: sqldiff, do not consider ('serial', 'integer') nor ('bigserial',
    'bigint') as a `field-type-differ`
    ([#&#8203;1867](https://redirect.github.com/django-extensions/django-extensions/issues/1867))
    - Fix: shell_plus, Fix start up order and add history
    ([#&#8203;1869](https://redirect.github.com/django-extensions/django-extensions/issues/1869))
    - Remove pipchecker and associated tests
    ([#&#8203;1906](https://redirect.github.com/django-extensions/django-extensions/issues/1906))
    - Following Django's release numbering style more closely (see
    https://docs.djangoproject.com/en/5.2/internals/release-process/ )
    
    </details>
    
    <details>
    <summary>jschneier/django-storages (django-storages)</summary>
    
    ###
    [`v1.14.6`](https://redirect.github.com/jschneier/django-storages/compare/1.14.5...1.14.6)
    
    [Compare
    Source](https://redirect.github.com/jschneier/django-storages/compare/1.14.5...1.14.6)
    
    </details>
    
    <details>
    <summary>tfranzel/drf-spectacular-sidecar
    (drf-spectacular-sidecar)</summary>
    
    ###
    [`v2025.4.1`](https://redirect.github.com/tfranzel/drf-spectacular-sidecar/compare/2025.3.1...2025.4.1)
    
    [Compare
    Source](https://redirect.github.com/tfranzel/drf-spectacular-sidecar/compare/2025.3.1...2025.4.1)
    
    </details>
    
    <details>
    <summary>ipython/ipython (ipython)</summary>
    
    ###
    [`v9.1.0`](https://redirect.github.com/ipython/ipython/compare/9.0.2...9.1.0)
    
    [Compare
    Source](https://redirect.github.com/ipython/ipython/compare/9.0.2...9.1.0)
    
    </details>
    
    <details>
    <summary>lxml/lxml (lxml)</summary>
    
    ###
    [`v5.3.2`](https://redirect.github.com/lxml/lxml/blob/HEAD/CHANGES.txt#532-2025-04-05)
    
    [Compare
    Source](https://redirect.github.com/lxml/lxml/compare/lxml-5.3.1...lxml-5.3.2)
    
    \==================
    
    This release resolves CVE-2025-24928 as described in
    https://gitlab.gnome.org/GNOME/libxml2/-/issues/847
    
    ## Bugs fixed
    
    -   Binary wheels use libxml2 2.12.10 and libxslt 1.1.42.
    
    - Binary wheels for Windows use a patched libxml2 2.11.9 and libxslt
    1.1.39.
    
    </details>
    
    <details>
    <summary>Python-Markdown/markdown (markdown)</summary>
    
    ###
    [`v3.8`](https://redirect.github.com/Python-Markdown/markdown/releases/tag/3.8)
    
    [Compare
    Source](https://redirect.github.com/Python-Markdown/markdown/compare/3.7...3.8)
    
    ##### Changed
    
    - DRY fix in `abbr` extension by introducing method `create_element`
    ([#&#8203;1483](https://redirect.github.com/Python-Markdown/markdown/issues/1483)).
    -   Clean up test directory by removing some redundant tests and port
        non-redundant cases to the newer test framework.
    - Improved performance of the raw HTML post-processor
    ([#&#8203;1510](https://redirect.github.com/Python-Markdown/markdown/issues/1510)).
    
    ##### Fixed
    
    - Backslash Unescape IDs set via `attr_list` on `toc`
    ([#&#8203;1493](https://redirect.github.com/Python-Markdown/markdown/issues/1493)).
    - Ensure `md_in_html` processes content inside "markdown" blocks as they
    are
    parsed outside of "markdown" blocks to keep things more consistent for
    third-party extensions
    ([#&#8203;1503](https://redirect.github.com/Python-Markdown/markdown/issues/1503)).
    - `md_in_html` handle tags within inline code blocks better
    ([#&#8203;1075](https://redirect.github.com/Python-Markdown/markdown/issues/1075)).
    - `md_in_html` fix handling of one-liner block HTML handling
    ([#&#8203;1074](https://redirect.github.com/Python-Markdown/markdown/issues/1074)).
    - Ensure `<center>` is treated like a block-level element
    ([#&#8203;1481](https://redirect.github.com/Python-Markdown/markdown/issues/1481)).
    - Ensure that `abbr` extension respects `AtomicString` and does not
    process
    perceived abbreviations in these strings
    ([#&#8203;1512](https://redirect.github.com/Python-Markdown/markdown/issues/1512)).
    - Ensure `smarty` extension correctly renders nested closing quotes
    ([#&#8203;1514](https://redirect.github.com/Python-Markdown/markdown/issues/1514)).
    
    </details>
    
    <details>
    <summary>openai/openai-python (openai)</summary>
    
    ###
    [`v1.73.0`](https://redirect.github.com/openai/openai-python/blob/HEAD/CHANGELOG.md#1730-2025-04-12)
    
    [Compare
    Source](https://redirect.github.com/openai/openai-python/compare/v1.72.0...v1.73.0)
    
    Full Changelog:
    [v1.72.0...v1.73.0](https://redirect.github.com/openai/openai-python/compare/v1.72.0...v1.73.0)
    
    ##### Features
    
    - **api:** manual updates
    ([a3253dd](https://redirect.github.com/openai/openai-python/commit/a3253dd798c1eccd9810d4fc593e8c2a568bcf4f))
    
    ##### Bug Fixes
    
    - **perf:** optimize some hot paths
    ([f79d39f](https://redirect.github.com/openai/openai-python/commit/f79d39fbcaea8f366a9e48c06fb1696bab3e607d))
    - **perf:** skip traversing types for NotGiven values
    ([28d220d](https://redirect.github.com/openai/openai-python/commit/28d220de3b4a09d80450d0bcc9b347bbf68f81ec))
    
    ##### Chores
    
    - **internal:** expand CI branch coverage
    ([#&#8203;2295](https://redirect.github.com/openai/openai-python/issues/2295))
    ([0ae783b](https://redirect.github.com/openai/openai-python/commit/0ae783b99122975be521365de0b6d2bce46056c9))
    - **internal:** reduce CI branch coverage
    ([2fb7d42](https://redirect.github.com/openai/openai-python/commit/2fb7d425cda679a54aa3262090479fd747363bb4))
    - slight wording improvement in README
    ([#&#8203;2291](https://redirect.github.com/openai/openai-python/issues/2291))
    ([e020759](https://redirect.github.com/openai/openai-python/commit/e0207598d16a2a9cb3cb3a8e8e97fa9cfdccd5e8))
    - workaround build errors
    ([4e10c96](https://redirect.github.com/openai/openai-python/commit/4e10c96a483db28dedc2d8c2908765fb7317e049))
    
    ###
    [`v1.72.0`](https://redirect.github.com/openai/openai-python/blob/HEAD/CHANGELOG.md#1720-2025-04-08)
    
    [Compare
    Source](https://redirect.github.com/openai/openai-python/compare/v1.71.0...v1.72.0)
    
    Full Changelog:
    [v1.71.0...v1.72.0](https://redirect.github.com/openai/openai-python/compare/v1.71.0...v1.72.0)
    
    ##### Features
    
    - **api:** Add evalapi to sdk
    ([#&#8203;2287](https://redirect.github.com/openai/openai-python/issues/2287))
    ([35262fc](https://redirect.github.com/openai/openai-python/commit/35262fcef6ccb7d1f75c9abdfdc68c3dcf87ef53))
    
    ##### Chores
    
    - **internal:** fix examples
    ([#&#8203;2288](https://redirect.github.com/openai/openai-python/issues/2288))
    ([39defd6](https://redirect.github.com/openai/openai-python/commit/39defd61e81ea0ec6b898be12e9fb7e621c0e532))
    - **internal:** skip broken test
    ([#&#8203;2289](https://redirect.github.com/openai/openai-python/issues/2289))
    ([e2c9bce](https://redirect.github.com/openai/openai-python/commit/e2c9bce1f59686ee053b495d06ea118b4a89e09e))
    - **internal:** slight transform perf improvement
    ([#&#8203;2284](https://redirect.github.com/openai/openai-python/issues/2284))
    ([746174f](https://redirect.github.com/openai/openai-python/commit/746174fae7a018ece5dab54fb0b5a15fcdd18f2f))
    - **tests:** improve enum examples
    ([#&#8203;2286](https://redirect.github.com/openai/openai-python/issues/2286))
    ([c9dd81c](https://redirect.github.com/openai/openai-python/commit/c9dd81ce0277e8b1f5db5e0a39c4c2bcd9004bcc))
    
    ###
    [`v1.71.0`](https://redirect.github.com/openai/openai-python/blob/HEAD/CHANGELOG.md#1710-2025-04-07)
    
    [Compare
    Source](https://redirect.github.com/openai/openai-python/compare/v1.70.0...v1.71.0)
    
    Full Changelog:
    [v1.70.0...v1.71.0](https://redirect.github.com/openai/openai-python/compare/v1.70.0...v1.71.0)
    
    ##### Features
    
    - **api:** manual updates
    ([bf8b4b6](https://redirect.github.com/openai/openai-python/commit/bf8b4b69906bfaea622c9c644270e985d92e2df2))
    - **api:** manual updates
    ([3e37aa3](https://redirect.github.com/openai/openai-python/commit/3e37aa3e151d9738625a1daf75d6243d6fdbe8f2))
    - **api:** manual updates
    ([dba9b65](https://redirect.github.com/openai/openai-python/commit/dba9b656fa5955b6eba8f6910da836a34de8d59d))
    - **api:** manual updates
    ([f0c463b](https://redirect.github.com/openai/openai-python/commit/f0c463b47836666d091b5f616871f1b94646d346))
    
    ##### Chores
    
    - **deps:** allow websockets v15
    ([#&#8203;2281](https://redirect.github.com/openai/openai-python/issues/2281))
    ([19c619e](https://redirect.github.com/openai/openai-python/commit/19c619ea95839129a86c19d5b60133e1ed9f2746))
    - **internal:** only run examples workflow in main repo
    ([#&#8203;2282](https://redirect.github.com/openai/openai-python/issues/2282))
    ([c3e0927](https://redirect.github.com/openai/openai-python/commit/c3e0927d3fbbb9f753ba12adfa682a4235ba530a))
    - **internal:** remove trailing character
    ([#&#8203;2277](https://redirect.github.com/openai/openai-python/issues/2277))
    ([5a21a2d](https://redirect.github.com/openai/openai-python/commit/5a21a2d7994e39bb0c86271eeb807983a9ae874a))
    - Remove deprecated/unused remote spec feature
    ([23f76eb](https://redirect.github.com/openai/openai-python/commit/23f76eb0b9ddf12bcb04a6ad3f3ec5e956d2863f))
    
    </details>
    
    <details>
    <summary>jupyter-server/pycrdt (pycrdt)</summary>
    
    ###
    [`v0.12.12`](https://redirect.github.com/jupyter-server/pycrdt/blob/HEAD/CHANGELOG.md#01212)
    
    [Compare
    Source](https://redirect.github.com/jupyter-server/pycrdt/compare/0.12.11...0.12.12)
    
    -   Add doc and shared type `events()` async event iterator.
    -   Fix deadlock while getting root type from within transaction.
    
    ###
    [`v0.12.11`](https://redirect.github.com/jupyter-server/pycrdt/blob/HEAD/CHANGELOG.md#01211)
    
    [Compare
    Source](https://redirect.github.com/jupyter-server/pycrdt/compare/0.12.10...0.12.11)
    
    -   Upgrade `pyo3` to v0.24.1.
    
    </details>
    
    <details>
    <summary>pytest-dev/pytest-cov (pytest-cov)</summary>
    
    ###
    [`v6.1.1`](https://redirect.github.com/pytest-dev/pytest-cov/blob/HEAD/CHANGELOG.rst#611-2025-04-05)
    
    [Compare
    Source](https://redirect.github.com/pytest-dev/pytest-cov/compare/v6.1.0...v6.1.1)
    
    - Fixed breakage that occurs when `--cov-context` and the `no_cover`
    marker are used together.
    
    ###
    [`v6.1.0`](https://redirect.github.com/pytest-dev/pytest-cov/blob/HEAD/CHANGELOG.rst#610-2025-04-01)
    
    [Compare
    Source](https://redirect.github.com/pytest-dev/pytest-cov/compare/v6.0.0...v6.1.0)
    
    - Change terminal output to use full width lines for the coverage
    header.
    Contributed by Tsvika Shapira in `#&#8203;678
    <https://github.com/pytest-dev/pytest-cov/pull/678>`\_.
    - Removed unnecessary CovFailUnderWarning. Fixes `#&#8203;675
    <https://github.com/pytest-dev/pytest-cov/issues/675>`\_.
    - Fixed the term report not using the precision specified via
    `--cov-precision`.
    
    </details>
    
    <details>
    <summary>pytest-dev/pytest-django (pytest-django)</summary>
    
    ###
    [`v4.11.1`](https://redirect.github.com/pytest-dev/pytest-django/releases/tag/v4.11.1)
    
    [Compare
    Source](https://redirect.github.com/pytest-dev/pytest-django/compare/v4.11.0...v4.11.1)
    
    
    https://github.com/pytest-dev/pytest-django/blob/main/docs/changelog.rst#v4111-2025-04-03
    
    ###
    [`v4.11.0`](https://redirect.github.com/pytest-dev/pytest-django/releases/tag/v4.11.0)
    
    [Compare
    Source](https://redirect.github.com/pytest-dev/pytest-django/compare/v4.10.0...v4.11.0)
    
    
    https://github.com/pytest-dev/pytest-django/blob/main/docs/changelog.rst#v4110-2025-04-01
    
    </details>
    
    <details>
    <summary>astral-sh/ruff (ruff)</summary>
    
    ###
    [`v0.11.5`](https://redirect.github.com/astral-sh/ruff/blob/HEAD/CHANGELOG.md#0115)
    
    [Compare
    Source](https://redirect.github.com/astral-sh/ruff/compare/0.11.4...0.11.5)
    
    ##### Preview features
    
    - \[`airflow`] Add missing `AIR302` attribute check
    ([#&#8203;17115](https://redirect.github.com/astral-sh/ruff/pull/17115))
    - \[`airflow`] Expand module path check to individual symbols (`AIR302`)
    ([#&#8203;17278](https://redirect.github.com/astral-sh/ruff/pull/17278))
    - \[`airflow`] Extract `AIR312` from `AIR302` rules (`AIR302`, `AIR312`)
    ([#&#8203;17152](https://redirect.github.com/astral-sh/ruff/pull/17152))
    - \[`airflow`] Update oudated `AIR301`, `AIR302` rules
    ([#&#8203;17123](https://redirect.github.com/astral-sh/ruff/pull/17123))
    - \[syntax-errors] Async comprehension in sync comprehension
    ([#&#8203;17177](https://redirect.github.com/astral-sh/ruff/pull/17177))
    - \[syntax-errors] Check annotations in annotated assignments
    ([#&#8203;17283](https://redirect.github.com/astral-sh/ruff/pull/17283))
    - \[syntax-errors] Extend annotation checks to `await`
    ([#&#8203;17282](https://redirect.github.com/astral-sh/ruff/pull/17282))
    
    ##### Bug fixes
    
    - \[`flake8-pie`] Avoid false positive for multiple assignment with
    `auto()` (`PIE796`)
    ([#&#8203;17274](https://redirect.github.com/astral-sh/ruff/pull/17274))
    
    ##### Rule changes
    
    - \[`ruff`] Fix `RUF100` to detect unused file-level `noqa` directives
    with specific codes
    ([#&#8203;17042](https://redirect.github.com/astral-sh/ruff/issues/17042))
    ([#&#8203;17061](https://redirect.github.com/astral-sh/ruff/pull/17061))
    - \[`flake8-pytest-style`] Avoid false positive for legacy form of
    `pytest.raises` (`PT011`)
    ([#&#8203;17231](https://redirect.github.com/astral-sh/ruff/pull/17231))
    
    ##### Documentation
    
    - Fix formatting of "See Style Guide" link
    ([#&#8203;17272](https://redirect.github.com/astral-sh/ruff/pull/17272))
    
    ###
    [`v0.11.4`](https://redirect.github.com/astral-sh/ruff/blob/HEAD/CHANGELOG.md#0114)
    
    [Compare
    Source](https://redirect.github.com/astral-sh/ruff/compare/0.11.3...0.11.4)
    
    ##### Preview features
    
    - \[`ruff`] Implement `invalid-rule-code` as `RUF102`
    ([#&#8203;17138](https://redirect.github.com/astral-sh/ruff/pull/17138))
    - \[syntax-errors] Detect duplicate keys in `match` mapping patterns
    ([#&#8203;17129](https://redirect.github.com/astral-sh/ruff/pull/17129))
    - \[syntax-errors] Detect duplicate attributes in `match` class patterns
    ([#&#8203;17186](https://redirect.github.com/astral-sh/ruff/pull/17186))
    - \[syntax-errors] Detect invalid syntax in annotations
    ([#&#8203;17101](https://redirect.github.com/astral-sh/ruff/pull/17101))
    
    ##### Bug fixes
    
    - \[syntax-errors] Fix multiple assignment error for class fields in
    `match` patterns
    ([#&#8203;17184](https://redirect.github.com/astral-sh/ruff/pull/17184))
    - Don't skip visiting non-tuple slice in `typing.Annotated` subscripts
    ([#&#8203;17201](https://redirect.github.com/astral-sh/ruff/pull/17201))
    
    ###
    [`v0.11.3`](https://redirect.github.com/astral-sh/ruff/blob/HEAD/CHANGELOG.md#0113)
    
    [Compare
    Source](https://redirect.github.com/astral-sh/ruff/compare/0.11.2...0.11.3)
    
    ##### Preview features
    
    - \[`airflow`] Add more autofixes for `AIR302`
    ([#&#8203;16876](https://redirect.github.com/astral-sh/ruff/pull/16876),
    [#&#8203;16977](https://redirect.github.com/astral-sh/ruff/pull/16977),
    [#&#8203;16976](https://redirect.github.com/astral-sh/ruff/pull/16976),
    [#&#8203;16965](https://redirect.github.com/astral-sh/ruff/pull/16965))
    - \[`airflow`] Move `AIR301` to `AIR002`
    ([#&#8203;16978](https://redirect.github.com/astral-sh/ruff/pull/16978))
    - \[`airflow`] Move `AIR302` to `AIR301` and `AIR303` to `AIR302`
    ([#&#8203;17151](https://redirect.github.com/astral-sh/ruff/pull/17151))
    - \[`flake8-bandit`] Mark `str` and `list[str]` literals as trusted
    input (`S603`)
    ([#&#8203;17136](https://redirect.github.com/astral-sh/ruff/pull/17136))
    - \[`ruff`] Support slices in `RUF005`
    ([#&#8203;17078](https://redirect.github.com/astral-sh/ruff/pull/17078))
    - \[syntax-errors] Start detecting compile-time syntax errors
    ([#&#8203;16106](https://redirect.github.com/astral-sh/ruff/pull/16106))
    - \[syntax-errors] Duplicate type parameter names
    ([#&#8203;16858](https://redirect.github.com/astral-sh/ruff/pull/16858))
    - \[syntax-errors] Irrefutable `case` pattern before final case
    ([#&#8203;16905](https://redirect.github.com/astral-sh/ruff/pull/16905))
    - \[syntax-errors] Multiple assignments in `case` pattern
    ([#&#8203;16957](https://redirect.github.com/astral-sh/ruff/pull/16957))
    - \[syntax-errors] Single starred assignment target
    ([#&#8203;17024](https://redirect.github.com/astral-sh/ruff/pull/17024))
    - \[syntax-errors] Starred expressions in `return`, `yield`, and `for`
    ([#&#8203;17134](https://redirect.github.com/astral-sh/ruff/pull/17134))
    - \[syntax-errors] Store to or delete `__debug__`
    ([#&#8203;16984](https://redirect.github.com/astral-sh/ruff/pull/16984))
    
    ##### Bug fixes
    
    - Error instead of `panic!` when running Ruff from a deleted directory
    ([#&#8203;16903](https://redirect.github.com/astral-sh/ruff/issues/16903))
    ([#&#8203;17054](https://redirect.github.com/astral-sh/ruff/pull/17054))
    - \[syntax-errors] Fix false positive for parenthesized tuple index
    ([#&#8203;16948](https://redirect.github.com/astral-sh/ruff/pull/16948))
    
    ##### CLI
    
    - Check `pyproject.toml` correctly when it is passed via stdin
    ([#&#8203;16971](https://redirect.github.com/astral-sh/ruff/pull/16971))
    
    ##### Configuration
    
    - \[`flake8-import-conventions`] Add import `numpy.typing as npt` to
    default `flake8-import-conventions.aliases`
    ([#&#8203;17133](https://redirect.github.com/astral-sh/ruff/pull/17133))
    
    ##### Documentation
    
    - \[`refurb`] Document why `UserDict`, `UserList`, and `UserString` are
    preferred over `dict`, `list`, and `str` (`FURB189`)
    ([#&#8203;16927](https://redirect.github.com/astral-sh/ruff/pull/16927))
    
    </details>
    
    <details>
    <summary>getsentry/sentry-python (sentry-sdk)</summary>
    
    ###
    [`v2.25.1`](https://redirect.github.com/getsentry/sentry-python/blob/HEAD/CHANGELOG.md#2251)
    
    [Compare
    Source](https://redirect.github.com/getsentry/sentry-python/compare/2.25.0...2.25.1)
    
    ##### Various fixes & improvements
    
    - fix(logs): Add a class which batches groups of logs together.
    ([#&#8203;4229](https://redirect.github.com/getsentry/sentry-python/issues/4229))
    by [@&#8203;colin-sentry](https://redirect.github.com/colin-sentry)
    - fix(logs): Use repr instead of json for message and arguments
    ([#&#8203;4227](https://redirect.github.com/getsentry/sentry-python/issues/4227))
    by [@&#8203;colin-sentry](https://redirect.github.com/colin-sentry)
    - fix(logs): Debug output from Sentry logs should always be `debug`
    level.
    ([#&#8203;4224](https://redirect.github.com/getsentry/sentry-python/issues/4224))
    by [@&#8203;antonpirker](https://redirect.github.com/antonpirker)
    - fix(ai): Do not consume anthropic streaming stop
    ([#&#8203;4232](https://redirect.github.com/getsentry/sentry-python/issues/4232))
    by [@&#8203;colin-sentry](https://redirect.github.com/colin-sentry)
    - fix(spotlight): Do not spam sentry_sdk.warnings logger w/ Spotlight
    ([#&#8203;4219](https://redirect.github.com/getsentry/sentry-python/issues/4219))
    by [@&#8203;BYK](https://redirect.github.com/BYK)
    - fix(docs): fixed code snippet
    ([#&#8203;4218](https://redirect.github.com/getsentry/sentry-python/issues/4218))
    by [@&#8203;antonpirker](https://redirect.github.com/antonpirker)
    - build(deps): bump actions/create-github-app-token from 1.11.7 to
    1.12.0
    ([#&#8203;4214](https://redirect.github.com/getsentry/sentry-python/issues/4214))
    by [@&#8203;dependabot](https://redirect.github.com/dependabot)
    
    </details>
    
    ---
    
    ### Configuration
    
    📅 **Schedule**: Branch creation - "before 7am on monday" (UTC),
    Automerge - At any time (no schedule defined).
    
    🚦 **Automerge**: Disabled by config. Please merge this manually once you
    are satisfied.
    
    ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the
    rebase/retry checkbox.
    
    👻 **Immortal**: This PR will be recreated if closed unmerged. Get
    [config
    help](https://redirect.github.com/renovatebot/renovate/discussions) if
    that's undesired.
    
    ---
    
    - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
    this box
    
    ---
    
    This PR was generated by [Mend Renovate](https://mend.io/renovate/).
    View the [repository job
    log](https://developer.mend.io/github/suitenumerique/docs).
    
    <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4yMjcuMyIsInVwZGF0ZWRJblZlciI6IjM5LjIzOC4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJkZXBlbmRlbmNpZXMiLCJub0NoYW5nZUxvZyJdfQ==-->
    
    ---------
    
    Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
    Co-authored-by: Manuel Raynaud <manu@raynaud.io>
    renovate[bot] and lunika authored Apr 28, 2025
    Copy the full SHA
    b29daa2 View commit details
  3. 🌐(i18n) add spanish and chinese (#884)

    All the spanish and chinese translations are complete on crowdin. We
    activate it in django settings and download all translations from
    crowdin
    
    Signed-off-by: virgile-deville <virgile.deville@beta.gouv.fr>
    virgile-dev authored Apr 28, 2025
    Copy the full SHA
    98f11ff View commit details
  4. 🔒(frontend) enhance file download security (#889)

    ## Purpose
    
    Added a safety check for URLs in the FileDownloadButton component. Now,
    before opening a URL, it verifies if the URL is safe using the isSafeUrl
    function.
    This prevents potentially unsafe URLs from being opened in a new tab.
    PanchoutNathan authored Apr 28, 2025
    Copy the full SHA
    9465f1a View commit details
  5. 🔧(backend) Allow overwriting the data directory (#893)

    ## Purpose
    
    Deployments that don't rely on Docker should be given the option to use
    a different data directory.
    
    ## Proposal
    
    Allow customization of the `DATA_DIR` through an environment variable of
    the same name.
    
    If the environment variable is not set the behaviour remains the same as
    before.
    
    Signed-off-by: Martin Weinelt <hexa@darmstadt.ccc.de>
    mweinelt authored Apr 28, 2025
    Copy the full SHA
    96f6aee View commit details
  6. 🐛(nginx) fix 404 when accessing a doc

    We improve the nginx way to access to a specific
    doc.
    We stop to wait for a initial attempt that
    give a 404. If we see a UUID in the url we will
    redirect to the doc/[id] page. Next will then
    manage the 404.
    AntoLC committed Apr 28, 2025
    Copy the full SHA
    b58c991 View commit details
  7. 🔧(helmfile) personalize keycloak configuration

    The keycloak configuration used in dev environment is too generic and we
    can have a conflict with other project that are using the same ingress
    domain. Also the namespace was missing in the keycloak extra ConfigMap
    leading to creating it in the default namespace.
    lunika authored and AntoLC committed Apr 28, 2025
    Copy the full SHA
    df173c3 View commit details

Commits on Apr 29, 2025

  1. ➕(backend) add django-lasuite dependency

    Use the OIDC backend from the new library and add settings to setup OIDC
    token storage required for later calls to OIDC Resource Servers.
    qbey committed Apr 29, 2025
    Copy the full SHA
    2557c6b View commit details

Commits on Apr 30, 2025

  1. 🔒️(drf) disable browsable HTML API renderer (#919)

    The `BrowsableAPIRenderer` generates a form to test POST/PUT/... actions
    and fill the FK fields with unfiltered data. This issue has been spoted
    on visio and fixed suitenumerique/meet#508
    lunika authored Apr 30, 2025
    Copy the full SHA
    7f0eb91 View commit details
  2. ♻️(frontend) bind ui with ability access

    Some actions were not available in the frontend
    but allowed in the backend, this commit binds the frontend
    ui with the ability access coming from the backend.
    AntoLC committed Apr 30, 2025
    Copy the full SHA
    9ca7968 View commit details
  3. Copy the full SHA
    4ad9179 View commit details
  4. 🔥(frontend) remove Quote custom block

    Last Blocknote upgrade included a Quote block,
    better to use their built-in one.
    AntoLC committed Apr 30, 2025
    Copy the full SHA
    7f2a21c View commit details
  5. ➕(frontend) add @blocknote/code-block

    To reduce the bundles size, the highlight syntax
    library is not included in blocknote core anymore.
    We need to add a separate dependency in order
    to have the code block syntax highlight feature.
    AntoLC committed Apr 30, 2025
    Copy the full SHA
    c32fdb6 View commit details
  6. ✨(frontend) add advanced table features

    We added advanced table features to the
    table editor, including:
    - split / merge cells
    - cell background color
    - cell text color
    - header
    
    We adapted the export and brought some improvements
    compare to the previous version.
    
    The export PDF supports colspan (merge horizontally),
    but does not support the rowspan (merge vertically)
    for now.
    AntoLC committed Apr 30, 2025
    Copy the full SHA
    f8a40cf View commit details

Commits on May 2, 2025

  1. 🌐(i18n) remove chinese language

    We're going to make languages ​​configurable
    per instance, but until we manage that, we're going
    to remove Chinese from the default language list.
    
    - Remove the chinese language from the default language
    list.
    - Change Spanish to Español
    AntoLC committed May 2, 2025
    Copy the full SHA
    12524f3 View commit details
  2. 🌐(i18n) add PO of new languages

    New languages were added to Crowdin.
    We import the new translations from Crowdin
    to version them in the repository.
    AntoLC committed May 2, 2025
    Copy the full SHA
    5ad30b4 View commit details

Commits on May 5, 2025

  1. 🌐(i18n) update translated strings

    Update translated files with new translations
    AntoLC committed May 5, 2025
    Copy the full SHA
    9b2f796 View commit details
  2. 🚩(backend) default enable FRONTEND_HOMEPAGE_FEATURE_ENABLED

    We decided to enable the FRONTEND_HOMEPAGE_FEATURE_ENABLED
    feature flag by default.
    It will not be a breaking change like that.
    AntoLC committed May 5, 2025
    Copy the full SHA
    12ef1a2 View commit details

Commits on May 6, 2025

  1. 🌐(i18n) update translated strings

    Update translated files with new translations
    AntoLC committed May 6, 2025
    Copy the full SHA
    349cbf8 View commit details
  2. 🔖(minor) release 3.2.0

    Added:
    - 🚸(backend) make document search on title
      accent-insensitive
    - 🚩 add homepage feature flag
    - ✨(settings) Allow configuring PKCE for the SSO
    - 🌐(i18n) activate chinese and spanish languages
    - 🔧(backend) allow overwriting the data directory
    - ➕(backend) add  `django-lasuite` dependency
      (breaking change)
    - ✨(frontend) advanced table features
    
    Changed:
    - ⚡️(frontend) reduce unblocking time for config
    - ♻️(frontend) bind UI with ability access
    - ♻️(frontend) use built-in Quote block
    
    Fixed:
    - 🐛(nginx) fix 404 when accessing a doc
    - 🔒️(drf) disable browsable HTML API renderer
    - 🔒(frontend) enhance file download security
    - 🐛(backend) race condition create doc
    - 🐛(frontend) fix breaklines in custom blocks
    AntoLC committed May 6, 2025
    Copy the full SHA
    74165f6 View commit details
Showing with 21,176 additions and 17,855 deletions.
  1. +28 −2 CHANGELOG.md
  2. +5 −9 README.md
  3. +193 −0 docs/adr/ADR-0001-20250106-use-yjs-for-docs-editing.md
  4. +19 −0 docs/architecture.md
  5. +7 −2 docs/env.md
  6. +2 −2 docs/examples/impress.values.yaml
  7. +10 −0 renovate.json
  8. +34 −3 src/backend/core/api/filters.py
  9. +25 −2 src/backend/core/api/viewsets.py
  10. +31 −102 src/backend/core/authentication/backends.py
  11. +0 −18 src/backend/core/authentication/urls.py
  12. +0 −137 src/backend/core/authentication/views.py
  13. +10 −0 src/backend/core/migrations/0021_activate_unaccent_extension.py
  14. +60 −98 src/backend/core/tests/authentication/test_backends.py
  15. +0 −10 src/backend/core/tests/authentication/test_urls.py
  16. +0 −231 src/backend/core/tests/authentication/test_views.py
  17. +1 −1 src/backend/core/tests/documents/test_api_document_accesses_create.py
  18. +39 −0 src/backend/core/tests/documents/test_api_documents_children_create.py
  19. +31 −0 src/backend/core/tests/documents/test_api_documents_create.py
  20. +31 −0 src/backend/core/tests/documents/test_api_documents_create_for_owner.py
  21. +11 −4 src/backend/core/tests/documents/test_api_documents_descendants_filters.py
  22. +2 −0 src/backend/core/tests/test_api_config.py
  23. +1 −1 src/backend/core/tests/test_models_documents.py
  24. +1 −1 src/backend/core/urls.py
  25. +50 −7 src/backend/impress/settings.py
  26. +390 −0 src/backend/locale/br_FR/LC_MESSAGES/django.po
  27. +399 −0 src/backend/locale/cn_CN/LC_MESSAGES/django.po
  28. +93 −98 src/backend/locale/de_DE/LC_MESSAGES/django.po
  29. +89 −94 src/backend/locale/en_US/LC_MESSAGES/django.po
  30. +390 −0 src/backend/locale/es_ES/LC_MESSAGES/django.po
  31. +162 −167 src/backend/locale/fr_FR/LC_MESSAGES/django.po
  32. +390 −0 src/backend/locale/it_IT/LC_MESSAGES/django.po
  33. +90 −95 src/backend/locale/nl_NL/LC_MESSAGES/django.po
  34. +390 −0 src/backend/locale/pt_PT/LC_MESSAGES/django.po
  35. +390 −0 src/backend/locale/sl_SI/LC_MESSAGES/django.po
  36. +390 −0 src/backend/locale/sv_SE/LC_MESSAGES/django.po
  37. +390 −0 src/backend/locale/tr_TR/LC_MESSAGES/django.po
  38. +390 −0 src/backend/locale/zh_CN/LC_MESSAGES/django.po
  39. +16 −15 src/backend/pyproject.toml
  40. +3 −3 src/frontend/apps/e2e/.eslintrc.js
  41. +23 −0 src/frontend/apps/e2e/__tests__/app-impress/common.ts
  42. +11 −28 src/frontend/apps/e2e/__tests__/app-impress/config.spec.ts
  43. +6 −6 src/frontend/apps/e2e/__tests__/app-impress/doc-export.spec.ts
  44. +0 −5 src/frontend/apps/e2e/__tests__/app-impress/doc-member-list.spec.ts
  45. +5 −2 src/frontend/apps/e2e/__tests__/app-impress/doc-routing.spec.ts
  46. +25 −0 src/frontend/apps/e2e/__tests__/app-impress/home.spec.ts
  47. +2 −9 src/frontend/apps/e2e/__tests__/app-impress/language.spec.ts
  48. +3 −3 src/frontend/apps/e2e/package.json
  49. +2 −2 src/frontend/apps/impress/conf/default.conf
  50. +31 −30 src/frontend/apps/impress/package.json
  51. +1 −1 src/frontend/apps/impress/src/components/Card.tsx
  52. +9 −7 src/frontend/apps/impress/src/components/DropdownMenu.tsx
  53. +1 −2 src/frontend/apps/impress/src/components/quick-search/QuickSearchInput.tsx
  54. +1 −2 src/frontend/apps/impress/src/components/quick-search/QuickSearchItemContent.tsx
  55. +1 −1 src/frontend/apps/impress/src/components/separators/HorizontalSeparator.tsx
  56. +3 −5 src/frontend/apps/impress/src/components/separators/SeparatedSection.tsx
  57. +34 −8 src/frontend/apps/impress/src/core/config/api/useConfig.tsx
  58. +1 −1 src/frontend/apps/impress/src/cunningham/__tests__/useCunninghamTheme.spec.tsx
  59. +41 −27 src/frontend/apps/impress/src/cunningham/useCunninghamTheme.tsx
  60. +10 −4 src/frontend/apps/impress/src/features/auth/components/Auth.tsx
  61. +11 −5 src/frontend/apps/impress/src/features/docs/doc-editor/components/BlockNoteEditor.tsx
  62. +1 −5 src/frontend/apps/impress/src/features/docs/doc-editor/components/BlockNoteSuggestionMenu.tsx
  63. +1 −6 ...ontend/apps/impress/src/features/docs/doc-editor/components/BlockNoteToolBar/BlockNoteToolbar.tsx
  64. +6 −1 ...tend/apps/impress/src/features/docs/doc-editor/components/BlockNoteToolBar/FileDownloadButton.tsx
  65. +1 −1 src/frontend/apps/impress/src/features/docs/doc-editor/components/DocEditor.tsx
  66. +2 −2 src/frontend/apps/impress/src/features/docs/doc-editor/components/custom-blocks/DividerBlock.tsx
  67. +0 −68 src/frontend/apps/impress/src/features/docs/doc-editor/components/custom-blocks/QuoteBlock.tsx
  68. +0 −1 src/frontend/apps/impress/src/features/docs/doc-editor/components/custom-blocks/index.ts
  69. +10 −11 src/frontend/apps/impress/src/features/docs/doc-editor/styles.tsx
  70. +1 −1 src/frontend/apps/impress/src/features/docs/doc-export/blocks-mapping/dividerDocx.tsx
  71. +1 −1 src/frontend/apps/impress/src/features/docs/doc-export/blocks-mapping/dividerPDF.tsx
  72. +103 −29 src/frontend/apps/impress/src/features/docs/doc-export/blocks-mapping/tablePDF.tsx
  73. +5 −2 src/frontend/apps/impress/src/features/docs/doc-export/components/ModalExport.tsx
  74. +6 −8 src/frontend/apps/impress/src/features/docs/doc-header/components/DocHeader.tsx
  75. +1 −1 src/frontend/apps/impress/src/features/docs/doc-header/components/DocTitle.tsx
  76. +3 −6 src/frontend/apps/impress/src/features/docs/doc-header/components/DocToolBox.tsx
  77. +1 −2 src/frontend/apps/impress/src/features/docs/doc-header/components/DocVersionHeader.tsx
  78. +0 −23 src/frontend/apps/impress/src/features/docs/doc-management/hooks/useTrans.tsx
  79. +20 −23 src/frontend/apps/impress/src/features/docs/doc-share/components/DocRoleDropdown.tsx
  80. +6 −8 src/frontend/apps/impress/src/features/docs/doc-share/components/DocShareAddMemberList.tsx
  81. +9 −11 src/frontend/apps/impress/src/features/docs/doc-share/components/DocShareAddMemberListItem.tsx
  82. +1 −2 src/frontend/apps/impress/src/features/docs/doc-share/components/DocShareInvitationItem.tsx
  83. +11 −8 src/frontend/apps/impress/src/features/docs/doc-share/components/DocShareMemberItem.tsx
  84. +117 −88 src/frontend/apps/impress/src/features/docs/doc-share/components/DocShareModal.tsx
  85. +6 −8 src/frontend/apps/impress/src/features/docs/doc-share/components/DocVisibility.tsx
  86. +4 −4 src/frontend/apps/impress/src/features/docs/doc-share/components/SearchUserRow.tsx
  87. +1 −1 src/frontend/apps/impress/src/features/docs/doc-table-content/components/Heading.tsx
  88. +1 −2 src/frontend/apps/impress/src/features/docs/doc-table-content/components/TableContent.tsx
  89. +3 −4 src/frontend/apps/impress/src/features/docs/doc-versioning/components/VersionItem.tsx
  90. +2 −3 src/frontend/apps/impress/src/features/docs/docs-grid/components/DocsGridItem.tsx
  91. +2 −3 src/frontend/apps/impress/src/features/docs/docs-grid/components/SimpleDocItem.tsx
  92. +1 −1 src/frontend/apps/impress/src/features/footer/Footer.tsx
  93. +7 −10 src/frontend/apps/impress/src/features/header/components/Header.tsx
  94. +1 −1 src/frontend/apps/impress/src/features/header/components/LaGaufre.tsx
  95. +2 −3 src/frontend/apps/impress/src/features/header/components/Title.tsx
  96. +2 −3 src/frontend/apps/impress/src/features/home/components/HomeBanner.tsx
  97. +3 −4 src/frontend/apps/impress/src/features/home/components/HomeBottom.tsx
  98. +1 −1 src/frontend/apps/impress/src/features/home/components/HomeContent.tsx
  99. +2 −3 src/frontend/apps/impress/src/features/home/components/HomeHeader.tsx
  100. +7 −8 src/frontend/apps/impress/src/features/home/components/HomeSection.tsx
  101. +1 −1 src/frontend/apps/impress/src/features/language/hooks/useLanguageSynchronizer.ts
  102. +5 −7 src/frontend/apps/impress/src/features/left-panel/components/LefPanelTargetFilters.tsx
  103. +8 −6 src/frontend/apps/impress/src/features/left-panel/components/LeftPanel.tsx
  104. +1 −2 src/frontend/apps/impress/src/features/left-panel/components/LeftPanelDocContent.tsx
  105. +2 −2 src/frontend/apps/impress/src/features/left-panel/components/LeftPanelFavoriteItem.tsx
  106. +1 −2 src/frontend/apps/impress/src/features/left-panel/components/LeftPanelFavorites.tsx
  107. +819 −27 src/frontend/apps/impress/src/i18n/translations.json
  108. +2 −3 src/frontend/apps/impress/src/layouts/MainLayout.tsx
  109. +1 −1 src/frontend/apps/impress/src/pages/accessibility/index.tsx
  110. +8 −0 src/frontend/apps/impress/src/pages/home/index.tsx
  111. +1 −1 src/frontend/apps/impress/src/pages/legal-notice/index.tsx
  112. +1 −1 src/frontend/apps/impress/src/pages/personal-data-cookies/index.tsx
  113. +110 −0 src/frontend/apps/impress/src/utils/__tests__/url.test.tsx
  114. +51 −0 src/frontend/apps/impress/src/utils/url.ts
  115. +10 −10 src/frontend/package.json
  116. +6 −7 src/frontend/packages/eslint-config-impress/package.json
  117. +2 −2 src/frontend/packages/i18n/package.json
  118. +3 −0 src/frontend/servers/y-provider/.eslintrc.cjs
  119. +13 −13 src/frontend/servers/y-provider/package.json
  120. +14,983 −16,141 src/frontend/yarn.lock
  121. +7 −7 src/helm/env.d/dev/values.impress.yaml.gotmpl
  122. +4 −3 src/helm/helmfile.yaml
  123. +1 −1 src/helm/impress/Chart.yaml
  124. +1 −1 src/mail/package.json
30 changes: 28 additions & 2 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -8,6 +8,32 @@ and this project adheres to

## [Unreleased]

## [3.2.0] - 2025-05-05

## Added

- 🚸(backend) make document search on title accent-insensitive #874
- 🚩 add homepage feature flag #861
- ✨(settings) Allow configuring PKCE for the SSO #886
- 🌐(i18n) activate chinese and spanish languages #884
- 🔧(backend) allow overwriting the data directory #893
- ➕(backend) add `django-lasuite` dependency #839
- ✨(frontend) advanced table features #908

## Changed

- ⚡️(frontend) reduce unblocking time for config #867
- ♻️(frontend) bind UI with ability access #900
- ♻️(frontend) use built-in Quote block #908

## Fixed

- 🐛(nginx) fix 404 when accessing a doc #866
- 🔒️(drf) disable browsable HTML API renderer #919
- 🔒(frontend) enhance file download security #889
- 🐛(backend) race condition create doc #633
- 🐛(frontend) fix breaklines in custom blocks #908

## [3.1.0] - 2025-04-07

## Added
@@ -135,7 +161,6 @@ and this project adheres to
- ♻️(frontend) improve table pdf rendering
- 🐛(email) invitation emails in receivers language


## [2.2.0] - 2025-02-10

## Added
@@ -524,7 +549,8 @@ and this project adheres to
- ✨(frontend) Coming Soon page (#67)
- 🚀 Impress, project to manage your documents easily and collaboratively.

[unreleased]: https://github.com/numerique-gouv/impress/compare/v3.1.0...main
[unreleased]: https://github.com/numerique-gouv/impress/compare/v3.2.0...main
[v3.2.0]: https://github.com/numerique-gouv/impress/releases/v3.2.0
[v3.1.0]: https://github.com/numerique-gouv/impress/releases/v3.1.0
[v3.0.0]: https://github.com/numerique-gouv/impress/releases/v3.0.0
[v2.6.0]: https://github.com/numerique-gouv/impress/releases/v2.6.0
14 changes: 5 additions & 9 deletions README.md
Original file line number Diff line number Diff line change
@@ -24,8 +24,6 @@ Welcome to Docs! The open source document editor where your notes can become kno

## Why use Docs ❓

⚠️ **Note that Docs provides docs/pdf exporters by loading [two BlockNote packages](https://github.com/suitenumerique/docs/blob/main/src/frontend/apps/impress/package.json#L22C7-L23C53), which we use under the AGPL-3.0 licence. Until we comply with the terms of this license, we recommend that you don't run Docs as a commercial product, unless you are willing to sponsor [BlockNote](https://github.com/TypeCellOS/BlockNote).**

Docs is a collaborative text editor designed to address common challenges in knowledge building and sharing.

### Write
@@ -39,21 +37,18 @@ Docs is a collaborative text editor designed to address common challenges in kno
* 🤝 Collaborate with your team in real time
* 🔒 Granular access control to ensure your information is secure and only shared with the right people
* 📑 Professional document exports in multiple formats (.odt, .doc, .pdf) with customizable templates
* 📚 Built-in wiki functionality to turn your team's collaborative work into organized knowledge `ETA 02/2025`
* 📚 Built-in wiki functionality to turn your team's collaborative work into organized knowledge `ETA 05/2025`

### Self-host
* 🚀 Easy to install, scalable and secure alternative to Notion, Outline or Confluence

⚠️ For the PDF and Docx export Docs relies on XL packages from BlockNote licenced in AGPL-3.0. Please make sure you fulfill your obligations regarding BlockNote licensing (see https://github.com/TypeCellOS/BlockNote/blob/main/packages/xl-pdf-exporter/LICENSE and https://www.blocknotejs.org/about#partner-with-us).

## Getting started 🔧

### Test it

Test Docs on your browser by logging in on this [environment](https://impress-preprod.beta.numerique.gouv.fr/)

```
email: test.docs@yopmail.com
password: I'd<3ToTestDocs
```
Test Docs on your browser by visiting this [demo document](https://impress-preprod.beta.numerique.gouv.fr/docs/6ee5aac4-4fb9-457d-95bf-bb56c2467713/)

### Run it locally

@@ -123,6 +118,7 @@ $ make run-backend
```

**Adding content**

You can create a basic demo site by running:

```shellscript
193 changes: 193 additions & 0 deletions docs/adr/ADR-0001-20250106-use-yjs-for-docs-editing.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,193 @@
## Decision TLDR;

We will use Yjs a CRDT-based library for the collaborative editing of the documents.

## Status

Accepted

## Context

We need to implement a collaborative editing feature for the documents that supports real-time collaboration, offline capabilities, and seamless integration with our Django backend.

## Considered alternatives

### ProseMirror

A robust toolkit for building rich-text editors with collaboration capabilities.

| Pros | Cons |
| --- | --- |
| Mature ecosystem | Complex integration with Django |
| Rich text editing features | Steeper learning curve |
| Used by major companies | More complex to implement offline support |
| Large community | |

### ShareDB

Real-time database backend based on Operational Transformation.

| Pros | Cons |
| --- | --- |
| Battle-tested in production | Complex setup required |
| Strong consistency model | Requires specific backend architecture |
| Good documentation | Less flexible with different backends |
| | Higher latency compared to CRDTs |

### Convergence

Complete enterprise solution for real-time collaboration.

| Pros | Cons |
| --- | --- |
| Full-featured solution | Commercial licensing |
| Built-in presence features | Less community support |
| Enterprise support | More expensive |
| Good offline support | Overkill for basic needs |

### CRDT-based Solutions Comparison

A CRDT-based library specifically designed for real-time collaboration.

| Category | Pros | Cons |
|----------|------|------|
| Technical Implementation | • Native real-time collaboration<br>• No central conflict resolution needed<br>• Works well with Django backend<br>• Automatic state synchronization | • Learning curve for CRDT concepts<br>• More complex initial setup<br>• Additional metadata overhead |
| User Experience | • Instant local updates<br>• Works offline by default<br>• Low latency<br>• Smooth concurrent editing | • Eventual consistency might cause brief inconsistencies<br>• UI must handle temporary conflicts |
| Performance | • Excellent scaling with multiple users<br>• Reduced server load<br>• Efficient network usage<br>• Good memory optimization (especially Yjs) | • Slightly higher memory usage<br>• Initial state sync can be larger |
| Development | • No need to build conflict resolution<br>• Simple integration with text editors<br>• Future-proof architecture | • Team needs to learn new concepts<br>• Fewer ready-made solutions<br>• May need to build some features from scratch |
| Maintenance | • Less server infrastructure<br>• Simpler deployment<br>• Fewer points of failure | • Debugging can be more complex<br>• State management requires careful handling |
| Business Impact | • Better offline support for users<br>• Scales well as user base grows<br>• No licensing costs (with Yjs) | • Initial development time might be longer<br>• Team training required |

#### Yjs
- **Type**: State-based CRDT
- **Implementation**: JavaScript/TypeScript
- **Features**:
- Rich text collaboration
- Shared types (Array, Map, XML)
- Binary encoding
- P2P support
- **Performance**: Excellent for text editing
- **Memory Usage**: Optimized
- **License**: MIT

#### Automerge
- **Type**: Operation-based CRDT
- **Implementation**: JavaScript/Rust
- **Features**:
- JSON-like data structures
- Change history
- Undo/Redo
- Binary format
- **Performance**: Good, with Rust backend
- **Memory Usage**: Higher than Yjs
- **License**: MIT

#### Legion
- **Type**: State-based CRDT
- **Implementation**: Rust with JS bindings
- **Features**:
- High performance
- Memory efficient
- Binary protocol
- **Performance**: Excellent
- **Memory Usage**: Very efficient
- **License**: Apache 2.0

#### Diamond Types
- **Type**: Operation-based CRDT
- **Implementation**: TypeScript
- **Features**:
- Specialized for text
- Small memory footprint
- Simple API
- **Performance**: Good for text
- **Memory Usage**: Efficient
- **License**: MIT

Comparison Table:

| Feature | Yjs | Automerge | Legion | Diamond Types |
|---------|-----|-----------|--------|---------------|
| Text Editing | ✅ Excellent | ✅ Good | ⚠️ Basic | ✅ Excellent |
| Structured Data |||| ⚠️ |
| Memory Efficiency | ✅ High | ⚠️ Medium | ✅ Very High | ✅ High |
| Network Efficiency || ⚠️ |||
| Maturity ||| ⚠️ | ⚠️ |
| Community Size | ✅ Large | ✅ Large | ⚠️ Small | ⚠️ Small |
| Documentation ||| ⚠️ | ⚠️ |
| Backend Options | ✅ Many | ✅ Many | ⚠️ Limited | ⚠️ Limited |

Key Differences:
1. **Implementation Approach**:
- Yjs: Optimized for text and rich-text editing
- Automerge: General-purpose JSON CRDT
- Legion: Performance-focused with Rust
- Diamond Types: Specialized for text collaboration

2. **Performance Characteristics**:
- Yjs: Best for text editing scenarios
- Automerge: Good all-around performance
- Legion: Excellent raw performance
- Diamond Types: Optimized for text

3. **Ecosystem Integration**:
- Yjs: Wide range of integrations
- Automerge: Good JavaScript ecosystem
- Legion: Limited but growing
- Diamond Types: Focused on text editors

This analysis reinforces our choice of Yjs for the CRDT-based option as it provides:
- Best-in-class text editing performance
- Mature ecosystem
- Active community
- Excellent documentation
- Wide range of backend options

## Decision

After evaluating the alternatives, we choose Yjs for the following reasons:

1. **Technical Fit:**
- Native CRDT support ensures reliable collaboration
- Excellent offline capabilities
- Good performance characteristics
- Flexible backend integration options

2. **Project Requirements Match:**
- Easy integration with our Django backend
- Supports our core collaborative features
- Manageable learning curve for the team

3. **Community & Support:**
- Active development
- Growing community
- Good documentation
- Open source with MIT license

### Comparison of Key Features:

| Feature | Yjs (CRDT) | ProseMirror | ShareDB | Convergence |
|---------|-----|-------------|----------|-------------|
| Real-time Collaboration |||||
| Offline Support || ⚠️ | ⚠️ ||
| Django Integration | Easy | Complex | Complex | Moderate |
| Learning Curve | Medium | High | High | Medium |
| Cost | Free | Free | Free | Paid |
| Community Size | Growing | Large | Medium | Small |

## Consequences

### Positive
- Simplified implementation of real-time collaboration
- Good developer experience
- Future-proof technology choice
- No licensing costs

### Negative
- Team needs to learn CRDT concepts
- Newer technology compared to alternatives
- May need to build some features available out-of-the-box in other solutions

### Risks
- Community support might not grow as expected
- May discover limitations as we scale
19 changes: 19 additions & 0 deletions docs/architecture.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
## Architecture

### Global system architecture

```mermaid
flowchart TD
User -- HTTP --> Front("Frontend (NextJS SPA)")
Front -- REST API --> Back("Backend (Django)")
Front -- WebSocket --> Yserver("Microservice Yjs (Express)") -- WebSocket --> CollaborationServer("Collaboration server (Hocuspocus)") -- REST API <--> Back
Front -- OIDC --> Back -- OIDC ---> OIDC("Keycloak / ProConnect")
Back -- REST API --> Yserver
Back --> DB("Database (PostgreSQL)")
Back <--> Celery --> DB
Back ----> S3("Minio (S3)")
```

### Architecture decision records

- [ADR-0001-20250106-use-yjs-for-docs-editing](./adr/ADR-0001-20250106-use-yjs-for-docs-editing.md)
9 changes: 7 additions & 2 deletions docs/env.md
Original file line number Diff line number Diff line change
@@ -47,6 +47,11 @@ These are the environmental variables you can set for the impress-backend contai
| COLLABORATION_API_URL | collaboration api host | |
| COLLABORATION_SERVER_SECRET | collaboration api secret | |
| COLLABORATION_WS_URL | collaboration websocket url | |
| FRONTEND_CSS_URL | To add a external css file to the app | |
| FRONTEND_HOMEPAGE_FEATURE_ENABLED | frontend feature flag to display the homepage | false |
| FRONTEND_FOOTER_FEATURE_ENABLED | frontend feature flag to display the footer | false |
| FRONTEND_FOOTER_VIEW_CACHE_TIMEOUT | Cache duration of the json footer | 86400 |
| FRONTEND_URL_JSON_FOOTER | Url with a json to configure the footer | |
| FRONTEND_THEME | frontend theme to use | |
| POSTHOG_KEY | posthog key for analytics | |
| CRISP_WEBSITE_ID | crisp website id for support | |
@@ -73,8 +78,8 @@ These are the environmental variables you can set for the impress-backend contai
| OIDC_FALLBACK_TO_EMAIL_FOR_IDENTIFICATION | faillback to email for identification | true |
| OIDC_ALLOW_DUPLICATE_EMAILS | Allow dupplicate emails | false |
| USER_OIDC_ESSENTIAL_CLAIMS | essential claims in OIDC token | [] |
| USER_OIDC_FIELDS_TO_FULLNAME | OIDC token claims to create full name | ["first_name", "last_name"] |
| USER_OIDC_FIELD_TO_SHORTNAME | OIDC token claims to create shortname | first_name |
| OIDC_USERINFO_FULLNAME_FIELDS | OIDC token claims to create full name | ["first_name", "last_name"] |
| OIDC_USERINFO_SHORTNAME_FIELD | OIDC token claims to create shortname | first_name |
| ALLOW_LOGOUT_GET_METHOD | Allow get logout method | true |
| AI_API_KEY | AI key to be used for AI Base url | |
| AI_BASE_URL | OpenAI compatible AI base url | |
4 changes: 2 additions & 2 deletions docs/examples/impress.values.yaml
Original file line number Diff line number Diff line change
@@ -33,8 +33,8 @@ backend:
OIDC_RP_SIGN_ALGO: RS256
OIDC_RP_SCOPES: "openid email"
OIDC_VERIFY_SSL: False
USER_OIDC_FIELD_TO_SHORTNAME: "given_name"
USER_OIDC_FIELDS_TO_FULLNAME: "given_name,usual_name"
OIDC_USERINFO_SHORTNAME_FIELD: "given_name"
OIDC_USERINFO_FULLNAME_FIELDS: "given_name,usual_name"
OIDC_REDIRECT_ALLOWED_HOSTS: https://impress.127.0.0.1.nip.io
OIDC_AUTH_REQUEST_EXTRA_PARAMS: "{'acr_values': 'eidas1'}"
LOGIN_REDIRECT_URL: https://impress.127.0.0.1.nip.io
10 changes: 10 additions & 0 deletions renovate.json
Original file line number Diff line number Diff line change
@@ -9,6 +9,16 @@
"matchManagers": ["pep621"],
"matchPackageNames": []
},
{
"groupName": "allowed django versions",
"matchManagers": [
"pep621"
],
"matchPackageNames": [
"Django"
],
"allowedVersions": "<5.2"
},
{
"enabled": false,
"groupName": "ignored js dependencies",
Loading