Add draft release notes for Djblets 5.0.

Review Request #13795 — Created April 25, 2024 and submitted

Information

Djblets
release-5.x

Reviewers

This change adds the draft release notes for Djblets 5.0.

Built HTML and checked the output.

Summary ID
Add draft release notes for Djblets 5.0.
This change adds the draft release notes for Djblets 5.0. Testing Done: Built HTML and checked the output. Reviewed at https://reviews.reviewboard.org/r/13795/
af58a57d04a851a928130a6220123530a1a52fad
Description From Last Updated

We also now require Spina 3.1.x. This impacts extensions and any code importing our TypeScript.

chipx86chipx86

We need to mention that Ink is now required for applications consuming Djblets, and what needs to be done there.

chipx86chipx86

We removed a custom $.delay in favor of the jQuery one.

chipx86chipx86

For configforms, we should document how TypeScript code is now expected to import from this (we flattened the namespace).

chipx86chipx86

We fixed a focus recursion crash when there are multiple modalboxes on the screen using $.fn.modalBox.

chipx86chipx86

For datagrids: We now longer provide age1 through age5, month, or summary column styles.

chipx86chipx86

Djblets UI elements now support dark mode.

chipx86chipx86

Missing items for registries: Registries are now thread-safe (we should explain the implications and which parts), using a reentrant lock. …

chipx86chipx86

Sounds like we're saying "expand" too many times, can take out the "to expand".

maubinmaubin

Might sound better to say "... methods that subclasses can ..."

maubinmaubin

Let's also indicate what versions we've dropped.

chipx86chipx86

We should specify explicitly that 3.2 support has been removed, since this is a major change.

chipx86chipx86

Missing some text after the version.

chipx86chipx86

I realized, we assume the presence of this setting in our code, but we don't ever force it into existence …

chipx86chipx86

We should be specific about this being an issue in the form.

chipx86chipx86

We should :py:class: this.

chipx86chipx86

Since this is a development library, we probably need to go more into detail on this subject, link to the …

chipx86chipx86

We need to specify where this applies to, so people can know where use_distinct is set.

chipx86chipx86

:mailheader: role (legacy naming aside, this is the correct role to use).

chipx86chipx86

Should use :pypi: for the reference. Also, single backticks in ReST don't produce template literals, just broken references.

chipx86chipx86

We should reference the thing include_bundles is on. Should use: :py:attr:`Class.attr <path.to.Class.attr>`. Otherwise the context will be lost.

chipx86chipx86

This should use :pypi:.

chipx86chipx86

Same here.

chipx86chipx86

These need :py:func:.

chipx86chipx86

Two blank lines before reference definitions.

chipx86chipx86

This should reference the filter with :py:func:.

chipx86chipx86

These should reference using :py:class:.

chipx86chipx86

This should reference using :py:func:.

chipx86chipx86

Typo: "a new new items".

chipx86chipx86

This seems to be missing something?

chipx86chipx86

We should mention the version we removed.

chipx86chipx86

Keeping with prior releases, the second sentence should go in the description area. Makes it easier to skim.

chipx86chipx86

Same note as above. Also, it's not just the JavaScript, but anything outputting HTML as well. So maybe "consuming parts …

chipx86chipx86

We should also say that what this defaults to, and maybe give an example of changing this.

chipx86chipx86

Let's link to Ink.

chipx86chipx86

We don't really need it in the static media bundles. We just need it on the page. We're distributing as …

chipx86chipx86

:py:class:

chipx86chipx86

Literals require two backticks in ReST.

chipx86chipx86

This is far too dense to comfortably follow. It'll help readability a lot if we take these code samples and …

chipx86chipx86

These should be :py:meth:. since they're pointing to methods on a class. As-is, we're going to see the function names …

chipx86chipx86

Description should be in its own paragraph. Summary lines should be concise and scannable.

chipx86chipx86

This feels more like description content. Let's give it a more concise summary stating that we added the field, then …

chipx86chipx86

We should reference the class.

chipx86chipx86

These should be :py:meth:.

chipx86chipx86

Can we link nose, so there's context for anyone not familiar?

chipx86chipx86

Should be django.core.files.File.

chipx86chipx86

:py:meth:

chipx86chipx86

:py:meth:

chipx86chipx86

Should be split into a summary / description.

chipx86chipx86

Should be split into a summary / description list.

chipx86chipx86

Summary / description. The description isn't correct, though. I fixed this due to hitting it in production with the confirmation …

chipx86chipx86

Installation is always the first section in the release notes.

chipx86chipx86

Two blank lines between content and reference declarations.

chipx86chipx86

This will be 5.x, rather than 5.0.

chipx86chipx86

Let's explicitly document 0.5.x.

chipx86chipx86

This comment was resolved earlier, but we don't need data-theme= for Ink.

chipx86chipx86
maubin
  1. Ship It!
  2. 
      
david
chipx86
  1. 
      
  2. docs/releasenotes/5.0.rst (Diff revision 2)
     
     
    Show all issues

    Let's also indicate what versions we've dropped.

  3. docs/releasenotes/5.0.rst (Diff revision 2)
     
     
    Show all issues

    Missing some text after the version.

  4. docs/releasenotes/5.0.rst (Diff revision 2)
     
     
    Show all issues

    I realized, we assume the presence of this setting in our code, but we don't ever force it into existence anywhere. We either need to either make this a breaking requirement for all consumers, or we need to conditionalize access in some form (which is error-prone to do in every single case).

    Let's discuss on Slack. We need a solution to this.

  5. docs/releasenotes/5.0.rst (Diff revision 2)
     
     
    Show all issues

    We should be specific about this being an issue in the form.

  6. docs/releasenotes/5.0.rst (Diff revision 2)
     
     
    Show all issues

    We should :py:class: this.

  7. docs/releasenotes/5.0.rst (Diff revision 2)
     
     
    Show all issues

    Since this is a development library, we probably need to go more into detail on this subject, link to the affected methods.

  8. docs/releasenotes/5.0.rst (Diff revision 2)
     
     
     
     
     
    Show all issues

    We need to specify where this applies to, so people can know where use_distinct is set.

  9. docs/releasenotes/5.0.rst (Diff revision 2)
     
     
    Show all issues

    :mailheader: role (legacy naming aside, this is the correct role to use).

  10. docs/releasenotes/5.0.rst (Diff revision 2)
     
     
    Show all issues

    Should use :pypi: for the reference.

    Also, single backticks in ReST don't produce template literals, just broken references.

  11. docs/releasenotes/5.0.rst (Diff revision 2)
     
     
    Show all issues

    We should reference the thing include_bundles is on. Should use:

    :py:attr:`Class.attr <path.to.Class.attr>`.
    

    Otherwise the context will be lost.

  12. docs/releasenotes/5.0.rst (Diff revision 2)
     
     
    Show all issues

    This should use :pypi:.

  13. docs/releasenotes/5.0.rst (Diff revision 2)
     
     
    Show all issues

    Same here.

  14. docs/releasenotes/5.0.rst (Diff revision 2)
     
     
     
     
    Show all issues

    These need :py:func:.

  15. docs/releasenotes/5.0.rst (Diff revision 2)
     
     
     
     
    Show all issues

    Two blank lines before reference definitions.

  16. docs/releasenotes/5.0.rst (Diff revision 2)
     
     
    Show all issues

    This should reference the filter with :py:func:.

  17. docs/releasenotes/5.0.rst (Diff revision 2)
     
     
    Show all issues

    These should reference using :py:class:.

  18. docs/releasenotes/5.0.rst (Diff revision 2)
     
     
    Show all issues

    This should reference using :py:func:.

  19. docs/releasenotes/5.0.rst (Diff revision 2)
     
     
    Show all issues

    Typo: "a new new items".

  20. docs/releasenotes/5.0.rst (Diff revision 2)
     
     
     
     
     
     
     
    Show all issues

    This seems to be missing something?

  21. 
      
chipx86
  1. 
      
  2. Show all issues

    We also now require Spina 3.1.x. This impacts extensions and any code importing our TypeScript.

  3. Show all issues

    We need to mention that Ink is now required for applications consuming Djblets, and what needs to be done there.

  4. Show all issues

    We removed a custom $.delay in favor of the jQuery one.

  5. Show all issues

    For configforms, we should document how TypeScript code is now expected to import from this (we flattened the namespace).

  6. Show all issues

    We fixed a focus recursion crash when there are multiple modalboxes on the screen using $.fn.modalBox.

  7. Show all issues

    For datagrids:

    • We now longer provide age1 through age5, month, or summary column styles.
  8. Show all issues

    Djblets UI elements now support dark mode.

    1. Is enabling this as simple as defining data-ink-color-scheme="dark" data-theme="dark" in the HTML element?

    2. Yeah, and including Ink CSS. We only need the data-ink-color-scheme. The data-theme is a holdover and can be ignored in Djblets.

      Since we lack Ink docs, we can't really point anyone to that, but we could mention that Ink supports light, dark, and system themes.

  9. Show all issues

    Missing items for registries:

    1. Registries are now thread-safe (we should explain the implications and which parts), using a reentrant lock.
    2. Subclasses can override pre/post handlers for populate(), register(), unregister(), and reset(). Subclasses must move to this instead of overriding these methods in order to ensure thread safety.
    3. The populated attribute is deprecated. We now have a state attribute.
    1. I'm not sure I have the full picture of this in my head. Mind writing this part?

    2. Yeah, assign me a task and I'll write something up in a bit.

    3. * Registries are now thread-safe.
      
        Previously, it was possible for two threads to perform modifications to the registry at the same time. This could include populating the registry, resetting it, registering items, or unregistering items. Depending on the order of operations, this could lead to bad registry data, missing or duplicate items, or crashes.
      
        Now only one thread may make changes to a registry at a time. Other registries are blocked on the operation until the work is completed, and will consider the operation a success if another thread has made the same change.
      
      * Added new thread-safe methods subclasses can override to customize registry operations.
      
        Subclasses are no longer encouraged to override :py:meth:`~djblets.registries.registry.Registry.populate`, :py:meth:`~djblets.registries.registry.Registry.register`, :py:meth:`~djblets.registries.registry.Registry.unregister`, or :py:meth:`~djblets.registries.registry.Registry.reset`. Doing so is now deprecated.
      
        Instead, they are expected to override any or all of the following thread-safe methods:
      
        * :py:meth:`~djblets.registries.registry.Registry.on_item_registering`
        * :py:meth:`~djblets.registries.registry.Registry.on_item_registered`
        * :py:meth:`~djblets.registries.registry.Registry.on_item_unregistering`
        * :py:meth:`~djblets.registries.registry.Registry.on_item_unregistered`
        * :py:meth:`~djblets.registries.registry.Registry.on_populating`
        * :py:meth:`~djblets.registries.registry.Registry.on_populated`
        * :py:meth:`~djblets.registries.registry.Registry.on_resetting`
        * :py:meth:`~djblets.registries.registry.Registry.on_reset`
      
      * The state of the registry is now accessible via :py:attr:`Registry.state <djblets.registries.registry.Registry.state>`.
      
        This replaces the now-deprecated :py:attr:`Registry.populated <djblets.registries.registry.Registry.populated>`. The new state information can inform the caller as to whether the registry is pending population, currently populating, or ready for use (populated). See :py:class:`~djblets.registries.registry.RegistryState` for the state documentation.
      

      (Should double-check the references work.)

  10. docs/releasenotes/5.0.rst (Diff revision 2)
     
     
    Show all issues

    We should specify explicitly that 3.2 support has been removed, since this is a major change.

  11. 
      
david
david
chipx86
  1. 
      
  2. docs/releasenotes/5.0.rst (Diff revision 4)
     
     
    Show all issues

    We should mention the version we removed.

    1. We didn't remove any python versions.

    2. Oh, I thought we dropped 3.7. You're right. We did that in 6.0.

  3. docs/releasenotes/5.0.rst (Diff revision 4)
     
     
    Show all issues

    Keeping with prior releases, the second sentence should go in the description area. Makes it easier to skim.

  4. docs/releasenotes/5.0.rst (Diff revision 4)
     
     
     
     
    Show all issues

    Same note as above.

    Also, it's not just the JavaScript, but anything outputting HTML as well. So maybe "consuming parts of Djblets that use JavaScript or provide HTML, ..."

  5. docs/releasenotes/5.0.rst (Diff revision 4)
     
     
     
     
     
    Show all issues

    We should also say that what this defaults to, and maybe give an example of changing this.

  6. docs/releasenotes/5.0.rst (Diff revision 4)
     
     
    Show all issues

    Let's link to Ink.

  7. docs/releasenotes/5.0.rst (Diff revision 4)
     
     
    Show all issues

    We don't really need it in the static media bundles. We just need it on the page. We're distributing as compiled CSS/JS files that can be used directly.

    I'd say, "Assuming you have added the Ink CSS file to your page, ..."

  8. docs/releasenotes/5.0.rst (Diff revision 4)
     
     
    Show all issues

    :py:class:

  9. docs/releasenotes/5.0.rst (Diff revision 4)
     
     
    Show all issues

    Literals require two backticks in ReST.

  10. docs/releasenotes/5.0.rst (Diff revision 4)
     
     
     
     
     
     
    Show all issues

    This is far too dense to comfortably follow. It'll help readability a lot if we take these code samples and turn them into code blocks.

  11. docs/releasenotes/5.0.rst (Diff revision 4)
     
     
     
     
     
     
     
     
     
     
    Show all issues

    These should be :py:meth:. since they're pointing to methods on a class.

    As-is, we're going to see the function names and not the parent classes. That mixed with us talking about two classes makes this a bit confusing.

    I'd suggest we break this into two paragraphs, one per class, and add a reference for the class we're talking about. So, instead of "datagrid subclasses can ...", do a :py:class: with the DataGrid class. And then same with the Column class.

  12. docs/releasenotes/5.0.rst (Diff revision 4)
     
     
     
     
    Show all issues

    Description should be in its own paragraph. Summary lines should be concise and scannable.

  13. docs/releasenotes/5.0.rst (Diff revision 4)
     
     
     
     
    Show all issues

    This feels more like description content. Let's give it a more concise summary stating that we added the field, then explain the field.

  14. docs/releasenotes/5.0.rst (Diff revision 4)
     
     
    Show all issues

    We should reference the class.

  15. docs/releasenotes/5.0.rst (Diff revision 4)
     
     
     
     
    Show all issues

    These should be :py:meth:.

  16. docs/releasenotes/5.0.rst (Diff revision 4)
     
     
    Show all issues

    Can we link nose, so there's context for anyone not familiar?

  17. docs/releasenotes/5.0.rst (Diff revision 4)
     
     
    Show all issues

    Should be django.core.files.File.

  18. docs/releasenotes/5.0.rst (Diff revision 4)
     
     
    Show all issues

    :py:meth:

  19. docs/releasenotes/5.0.rst (Diff revision 4)
     
     
     
     
    Show all issues

    :py:meth:

  20. docs/releasenotes/5.0.rst (Diff revision 4)
     
     
     
     
    Show all issues

    Should be split into a summary / description.

  21. docs/releasenotes/5.0.rst (Diff revision 4)
     
     
     
     
     
     
    Show all issues

    Should be split into a summary / description list.

  22. docs/releasenotes/5.0.rst (Diff revision 4)
     
     
     
     
    Show all issues

    Summary / description.

    The description isn't correct, though. I fixed this due to hitting it in production with the confirmation dialog for deleting a review within the Review Dialog. It blew up with crashes in the JavaScript console. Still operational, but we've been spamming crashes when bringing up a second dialog for many versions now.

  23. 
      
david
maubin
  1. 
      
  2. docs/releasenotes/5.0.rst (Diff revisions 1 - 5)
     
     
    Show all issues

    Sounds like we're saying "expand" too many times, can take out the "to expand".

  3. docs/releasenotes/5.0.rst (Diff revisions 1 - 5)
     
     
    Show all issues

    Might sound better to say "... methods that subclasses can ..."

  4. 
      
david
maubin
  1. Ship It!
  2. 
      
chipx86
  1. Looks good! A few small changes.

  2. docs/releasenotes/5.0.rst (Diff revision 6)
     
     
     
    Show all issues

    Installation is always the first section in the release notes.

  3. docs/releasenotes/5.0.rst (Diff revision 6)
     
     
     
     
    Show all issues

    Two blank lines between content and reference declarations.

  4. docs/releasenotes/5.0.rst (Diff revision 6)
     
     
    Show all issues

    This will be 5.x, rather than 5.0.

  5. docs/releasenotes/5.0.rst (Diff revision 6)
     
     
    Show all issues

    Let's explicitly document 0.5.x.

  6. docs/releasenotes/5.0.rst (Diff revision 6)
     
     
    Show all issues

    This comment was resolved earlier, but we don't need data-theme= for Ink.

  7. 
      
david
david
chipx86
  1. Ship It!
  2. 
      
david
Review request changed
Status:
Completed
Change Summary:
Pushed to release-5.x (4368a6c)