diff --git a/pages/site/releases/3.4.md b/pages/site/releases/3.4.md
index 8c6b41c..fae4ba5 100644
--- a/pages/site/releases/3.4.md
+++ b/pages/site/releases/3.4.md
@@ -1,5 +1,5 @@
 ---
-title: "Gerrit 3.4.0 Release (in development)"
+title: "Gerrit 3.4.0-rc0 release (in development)"
 permalink: 3.4.html
 hide_sidebar: true
 hide_navtoggle: true
@@ -10,15 +10,1328 @@
 
 Documentation: **[3.4.0](https://gerrit-documentation.storage.googleapis.com/Documentation/3.4.0/index.html)**
 
-## Release Highlights
+## Release highlights
 
-## Important Notes
+## Important notes
 
-### Schema Changes
+### JCraft JSch client library is disabled per default
 
-### Breaking Changes
+Deprecated JCraft JSch client library is replaced with MINA SSHD client library
+per default. There is still option to switch to using JCraft JSch client library.
+Support for JCraft JSch will be removed in the next gerrit release.
 
-## New Features
+### Default support for Java 11
 
-## Dependency Updates
+The java language level is now set to Java 11 by default for Gerrit.
 
+* [Issue 13494](https://bugs.chromium.org/p/gerrit/issues/detail?id=13494);
+  Generate a Java 11 Eclipse project by default
+
+* Update dev-{eclipse,intellij} development for Java 11.
+
+Gerrit source code is still compatible with Java 8.
+
+### Schema changes
+
+This release contains schema changes. To upgrade:
+
+``` sh
+  java -jar gerrit.war init -d site_path
+```
+
+### Breaking changes
+
+HTML plugin support is removed. HTML plugins should be migrated to JavaScript plugins.
+This also implies Polymer 2 plugins wouldn't work any more. See also this announcement
+for more [details](https://groups.google.com/g/repo-discuss/c/YJY8oQZZo44/m/wt-OAosQBAAJ).
+
+## Native packaging
+
+## New features
+
+### REST APIs
+
+* Accounts
+* Changes
+* Groups
+* Projects
+
+## End-to-end tests
+
+## Plugin changes
+
+## Polygerrit UI changes
+
+* Limit overview image interactions to primary mouse button
+
+* Fix: cannot select names in hovercards in the reply dialog
+
+* Fix thick border on votes in reply dialog
+
+* Add a simple hovercard for check runs
+
+* Add hover states to summary chips
+
+* Align relation chain section with the change info section and button
+
+* Show 'show all' button only when commit message has 17 or more lines
+
+* Show hovercard actions in submit requirement account chips
+
+* Update UX for selecting and filter checks
+
+* Show hovercard actions in change log
+
+* Fix condition check of show_file_comment_button
+
+* Do not try to open reply dialog when change is not loaded
+
+* Fix Show all button on related changes for wide screen
+
+* Explicitly refit overlay for cherry pick dialog
+
+* Align text and radio button in cherry pick dialog
+
+* PolyGerrit: Simplify some regular expressions
+
+* Redesign Show all button in related changes
+
+* Add View Diff button to comment context
+
+* Fix show more button
+
+* Comments tab - radio buttons
+
+* [Issue 14057](https://bugs.chromium.org/p/gerrit/issues/detail?id=14057);
+  Add check for undefined commentThread property in submit dialog
+
+* Do not render confirm submit dialog until it is opened
+
+* Show unresolved comments in the confirm submit dialog
+
+* Show View Diff button for merge change messages
+
+* trigger range highlight on long range comment chip hover
+
+* [Issue 13905](https://bugs.chromium.org/p/gerrit/issues/detail?id=13905);
+  Fix attention icon in reply dialog
+
+* Enable prev/next button on first/last file to go to change page
+
+* A11y - when dialog opened make rest of page unfocusable
+
+* Add feedback button to top bar
+
+* Fix the "View Diff" button padding
+
+* Disable cherry pick button if branch is not specified
+
+* Add tooltip when Send Reply button is disabled
+
+* Do not show quick approve button on merged changes
+
+* Use RestApiService instead of Polymer element
+
+* Move chunks - UX improvements
+
+* Show quick-approve button even when change is already approved
+
+* A11y - Shortcuts tables in dialog
+
+* A11y - return focus when closing dialog
+
+* Provide clearer above / below mapping for context expansion buttons
+
+* Ensure changes with outdated patchsets have a disabled submit button
+
+* Add Publish button to editor
+
+* Update Save button to Save & Close file in edit view
+
+* A11y - Fix reading whole diff preferences dialog
+
+* Replace polymer readonly attribute with ts readonly
+
+* [Issue 13511](https://bugs.chromium.org/p/gerrit/issues/detail?id=13511);
+  Fix repositioning the reply dialog when the attention section expands
+
+* [Issue 13506](https://bugs.chromium.org/p/gerrit/issues/detail?id=13506);
+  Change the tooltip of the 'MODIFY' button to be fancier
+
+* Fix 'Send' button being enabled even without the user making any changes
+
+* Add more functionalities to hovercard
+
+* Change when and how attention can be modified in the reply dialog
+
+* Use a selection chip also in the attention summary of the reply dialog
+
+* [Issue 13427](https://bugs.chromium.org/p/gerrit/issues/detail?id=13427);
+  Do not show attention related hovercard actions to guest users
+
+## Documentation changes
+
+* Documentation: SHA-1 iso. SHA1
+
+* [Issue 14295](https://bugs.chromium.org/p/gerrit/issues/detail?id=14295);
+  Tidy up cross-repository-changes documentation
+
+* Add user privacy documentation
+
+* Document how to get pretty-printed JSON for REST calls
+
+* Fix image url in documentation page
+
+* Documentation: avoid * in ref expressions.
+
+* Document a 24h waiting period for features/API extension
+
+* Update the documentation of `ReviewInput.tag`
+
+* Document when cherry pick fields in ChangeInfo are set
+
+* Fix documentation of config_web_links field in ProjectAccessInfo
+
+* Add documentation for change.maxFiles and change.maxPatchSets
+
+* Add user documentation for ported comments
+
+* DeleteTags: document corner case behavior
+
+* CreateTag: document why we don't check for visibility
+
+* CommitsCollection: document parseBody() call
+
+* Tidy up dev-plugins documentation table of files
+
+* Add more details of what a plugin's documentation contains
+
+* Fix documentation for MoveAPI keepAllVotes option
+
+* [Issue 11621](https://bugs.chromium.org/p/gerrit/issues/detail?id=11621);
+  Document that a CVE should be filed for security issues
+
+* Document that external-ids paths variably nested
+
+* Documentation: clarify how the default branch is set
+
+* Document log4j config override
+
+* Document how to generate the html documentation
+
+* Replace obsolete ACCOUNT_GROUPS table in documentation
+
+* Document how vacant non-Google ESC seats get refilled
+
+## JGit changes
+
+* Update JGit to c82818e0e
+
+This update includes this [change](https://git.eclipse.org/r/c/jgit/jgit/+/122288),
+which (when configured) will make repacking with Gerrit less racy by ensuring a pruned
+object is still available for some amount of time after repacking finishes.
+
+* Update jgit to 9bfb0f3a4
+
+* Update jgit to 4560bdf7e
+
+* InitJgitConfig: Git protocol v2 is enabled per default
+
+* Add passing the 'compression-level' argument to the JGit ArchiveCommand
+
+* Update JGit to 59420886e98bfcb574511cea191ccb3953004610
+
+* Update JGit to 415788df2
+
+* [Issue 13544](https://bugs.chromium.org/p/gerrit/issues/detail?id=13544);
+  Upgrade JGit to 5cd485e5
+
+## Elasticsearch changes
+
+* Move elasticsearch back to WORKSPACE
+
+* Elasticsearch: Add support for configuring REST client timeouts
+
+## Other dependency changes
+
+* [Issue 14075](https://bugs.chromium.org/p/gerrit/issues/detail?id=14075);
+  Bazel: Specify exact dependencies for licenses rules
+
+* Upgrade Flexmark to 0.50.42
+
+* Upgrade jackson-core to 2.12.0
+
+* Upgrade protobuf version to 3.14.0
+
+* Upgrade jetty version to 9.4.36.v20210114
+
+* Upgrade rules_nodejs version to 3.2.3
+
+* Upgrade MINA SSHD version to 2.6.0
+
+* Trim dependencies in httpd/auth/restapi/BUILD
+
+## Other core changes
+
+* [Issue 13140](https://bugs.chromium.org/p/gerrit/issues/detail?id=13140);
+  [Issue 14330](https://bugs.chromium.org/p/gerrit/issues/detail?id=14330);
+  OpenID: Remove support for Yahoo! OpenID provider
+
+* ChangeInfo: change _number from int to Integer
+
+* PatchScriptFactory: Access Metrics constants in static way
+
+* MissingMetaObjectException: Add default serialVersionUID
+
+* Flush file diff cache after change Ic1eeccfeb6b18f6
+
+* Support panning magnified image by dragging
+
+* Add comments on boolean arg for calls of ProjectLevelConfig#getWithInheritance
+
+* Re-render diff when useNewImageDiffUi is changed
+
+* Include the boy scout rule in Gerrit contribution guide
+
+* Add the meta_diff endpoint to the Change API
+
+* Indicate soft hyphen in diff
+
+* Use MINA sshd library for key generation and export
+
+* [Issue 12599](https://bugs.chromium.org/p/gerrit/issues/detail?id=12599);
+  Git transport: Switch to using Apache MINA ssh client per default
+
+* [Issue 12599](https://bugs.chromium.org/p/gerrit/issues/detail?id=12599);
+  Git transport: Add option to switch to using MINA ssh client
+
+* Update file status colors
+
+* Make rows in change log with same height (36px)
+
+* Fix file size for executable files in new diff cache
+
+* Ensure image diff data URLs are accepted by goog.html.SafeUrl
+
+* [Issue 14301](https://bugs.chromium.org/p/gerrit/issues/detail?id=14301);
+  Fix change reload not loading because js error in checks service
+
+* [Issue 14300](https://bugs.chromium.org/p/gerrit/issues/detail?id=14300);
+  Revert "Revert "Convert gr-app_test to typescript""
+
+* Convert SectionSortCache to use get/loader instead of getIfPresent/put
+
+* Add comments chips to tab navigation
+
+* [Issue 14300](https://bugs.chromium.org/p/gerrit/issues/detail?id=14300);
+  Revert "Convert gr-app_test to typescript"
+
+* Expose auto-value-gson in plugin API
+
+* Improve vote chips in dark theme
+
+* Let image diff builder know when to use new UI
+
+* Add border outline for +1, -1
+
+* Glossary terms regarding Events
+
+* Improve alert message for syntax highlighting turned off
+
+* Show both 'Expand All' and 'Collapse All' if some files are expanded
+
+* Add the missing green-400 color
+
+* Add basic overlay / blink image viewer
+
+* Fix regression - enable insensitive search for repo search
+
+* Introduce a glossary section
+
+* Move all soy templates files to unique namespaces
+
+* Add commitSha to the Checks API fetch() interface
+
+* Load multiple groups more efficiently
+
+* Persist group cache by uuid
+
+* Preload comments with context
+
+* Add simple attempt support to Checks UI
+
+* Update the header of the Checks tab
+
+* Specify background color for dark theme for ported comments
+
+* Move InternalGroup to the entities package
+
+* Add an internalId to check runs and results
+
+* Fix expanded result rows to not react on click to expand/collapse
+
+* [Issue 12639](https://bugs.chromium.org/p/gerrit/issues/detail?id=12639);
+  Bump guice version to 5.0.1
+
+* Compute AutoMerge commits synchronously when processing merge commits
+
+* Reduce tooltip delay from 500 to 200 ms
+
+* Add comment context to draft comments
+
+* Add 6 colors for check result tags
+
+* Update colors
+
+* SubmitRecords: Accept empty records from the change index
+
+* ChangeData: Disallow computing submit rules when serving query results
+
+* Fix computation of ChangeData#merge
+
+* Describe Timing reporting constants
+
+* Adapt old path in FileInfoJsonNewImpl to old diff cache representation
+
+* Fix NPE in FileInfoJsonComparingImpl when base = null
+
+* Add ChangeInfo to the ChangeData that the Checks API send to plugins
+
+* Introduce reporting constants - Timing
+
+* Navigate to previous unreviewed file when pressing "p"
+
+* Add timeout to DiffOperations
+
+* Switch GetDiff to use the new diff cache
+
+* Add spacing between party poppers and text in the comment tab
+
+* Add more spacing between related changes sections
+
+* Stop container jump on show all/less in Other Labels
+
+* Implement host-level default for 'HEAD' when new projects are created.
+
+* Add user guide for using topics.
+
+* Fix auto-merge detection in new diff cache
+
+* Replace tap by click event
+
+* Ignore new work-in-progress status if it hasn't changed
+
+* Add frontend reporting of "usp" URL parameter
+
+* Add tracking to the global Gerrit object
+
+* Fix endpoint parameters for check result rows
+
+* Fix typing of 'reply' event
+
+* Add link that mentions bots to the attention set user guide
+
+* Introduce reporting constants - Execution
+
+* Lowercase C in 'No Comments'
+
+* GrCursorManager: One-way-bind index
+
+* Move GrCursorManager element hooks to parents
+
+* [Issue 14214](https://bugs.chromium.org/p/gerrit/issues/detail?id=14214);
+  Fix alert text color
+
+* Replace this.async() with setTimeout()
+
+* Dark launch the new diff cache for the list files endpoint
+
+* Nothing to be forward-compatible with Lit 2
+
+* Replace at-/de-tached with dis-connectedCallback
+
+* Introduce reporting constants - Life Cycle
+
+* Related changes sections use all space if needed
+
+* Autocomplete for adding topic
+
+* Update designdoc to current state
+
+* Show toast when user stars a change
+
+* [Issue 14199](https://bugs.chromium.org/p/gerrit/issues/detail?id=14199);
+  Add attention operator for auto-complete
+
+* UI improvements for show all bar in commit message
+
+* Clean up ported comments experiment
+
+* Fix tracking of plugin-api calls
+
+* Update logic for clicking checks chips in the summary
+
+* Adapt old/new paths of the new diff cache to current Get Diff behaviour
+
+* Add tooltips to check links
+
+* Do not mark file reviewed when navigating using "n"
+
+* Read SubmitRecords back from NoteDb if allowClosed is false
+
+* PatchScriptFactory: Add logging statements for dark launch in mismatch
+
+* Minor improvements to ported comments message without range
+
+* Show arrows that indicate collapsed ancestors/descendents
+
+* Add count of results to section headers of check results
+
+* Add a 'usp' URL parameter that can be used for tracking
+
+* Hide comment context if screen width is less than 1200 px
+
+* Minor improvements to comment context
+
+* Add a request parameter to the Get Diff endpoint to use new diff cache
+
+* [Issue 12983](https://bugs.chromium.org/p/gerrit/issues/detail?id=12983);
+  Allow users to specify default branch when creating a repo
+
+* Add commit message to ChangeData of Checks API interface
+
+* Move show file comment to RenderPreferences
+
+* Convert ranged comment and move chips into hints
+
+* Implement syntax highlighting for comment context
+
+* Only show run and results filters in new Checks UI when needed
+
+* Modify the GetDiff endpoint to use the redesigned diff cache
+
+* Use Python 3 in populate-fixture-data.py
+
+* Fix reading empty subsections from plugin config
+
+* Add tracking for all frontend API calls
+
+* Add regular polling for checks
+
+* Implement patchset picker for new Checks UI
+
+* ProjectLevelConfig: Cache parsed config and avoid reparsing
+
+* Feedback for triggered actions
+
+* Fix tiny performance nit in ApprovalInferance
+
+* Enforce size limits for post submit diffs
+
+* Do not call Diff Cache when not needed
+
+* New Change Summary - fixing styling issues
+
+* Use StringBuilder instead of String concatenation to avoid O(n^2) performance.
+
+* Add separator between date and patchset in change log
+
+* Add a loading state to the checks model and use it for the summary
+
+* Fix how the change gets updated in the change-model and -service
+
+* [Issue 14141](https://bugs.chromium.org/p/gerrit/issues/detail?id=14141);
+  Add more data to successful runs in the new Checks UI
+
+* Update all rows of a change on the dashboard when one is changed
+
+* Handle checks summary chip clicks by filtering the tab accordingly
+
+* ReviewJson: Load SubmitRecords from ChangeData to avoid reevaluation in loop
+
+* Fix caching for SubmitRecords in ChangeData
+
+* Implement expanding and collapsing of run and result sections
+
+* Replace all colors with css vars defined in app-theme
+
+* Fix chip styles in Checks UI for dark theme
+
+* Introduce components for new image diff UI
+
+* Fix alignment of runnable chip title
+
+* Retry the creation of auto-merge commits more persistently
+
+* Use primary background color var to support dark theme
+
+* Retry submits more persistently
+
+* Add 'parentof' operator that matches parent changes for a change
+
+* Allow CCs to change the attention set
+
+* Avoid using underscores for private properties
+
+* Implement filtering and lazy loading of checks
+
+* New change summary - align count nonvisible changes
+
+* Change the long comment threshold from 5 to 10.
+
+* Adding sameTopic, mergeConflicts, cherrypicks to new change summary
+
+* Fix rebase action in new change summary
+
+* Expose instanceId in GerritInfo
+
+* Add readonly to restApiService property
+
+* Properly check the required 'action' property
+
+* Change the Checks fetch API to send a data object
+
+* Add a plugin endpoint to the expanded check result
+
+* Add support for top-level actions
+
+* Do not render more than 5 links in one check result row
+
+* Fix the gap between commit message and summaries
+
+* Limit total lines of context shown
+
+* Highlight the entire line in comment context for line comments
+
+* Click on comment chip will select same category in comments tab
+
+* Move render only properties to RenderPreferences
+
+* Filter out merged changes when submitting a topic
+
+* [Issue 14102](https://bugs.chromium.org/p/gerrit/issues/detail?id=14102);
+  Return empty context if the comment range is outside file boundaries
+
+* GetChange: provide meta=SHA1 option
+
+* Change expand diff context shortcut to be a toggle
+
+* New Change Summary - small fixes
+
+* Disallow creating projects with Gerrit internal refs as branch input
+
+* Add context padding to comment context request
+
+* Add zero state messages for Checks and Comments
+
+* Reduce the gap between commit message and summaries
+
+* GetChange: populate ChangeInfo.metaRevId with the NoteDb meta ref SHA1
+
+* Change cursor to pointer for run selection chips
+
+* Fix 'Completed without results.' font-weight
+
+* Highlight comment range
+
+* Vertically align first run section with first result section
+
+* Show the lines of code around a comment as context
+
+* Adding Related changes to new change summary
+
+* Request comment context along with the comments from server
+
+* Exclude unneeded ref prefixes when getting refs
+
+* Set commit message min-height to 100px
+
+* Add resolved text to comment
+
+* Filter robotComments without Human Reply
+
+* Change horizontal padding of summary chip from 4px to 8px
+
+* Add experiment ID for new image diff UI
+
+* Support experiment features in Gerrit backend
+
+* Create and move plugin APIs to api/ folder
+
+* [Issue 14080](https://bugs.chromium.org/p/gerrit/issues/detail?id=14080);
+  Split configs for RevisionDiffIT to different subclasses
+
+* Manually revert RefFilterOptions.returnMostRecentRefChanges
+
+* Check for old and new file modes in FileDiffCacheImpl
+
+* Handle single file diffs for non-existent files
+
+* Fix the alignment of the Change Info section
+
+* Change SAVE to SEND AS WIP
+
+* Set min-width for search
+
+* Add handling for run actions in new Checks UI
+
+* uploadPackAuditEventLog: Avoid commit timestamp mismatch
+
+* Find out why the error-manager initiates page reloads
+
+* Fix bug: don't lookup in NoteDb when reading cached changes
+
+* InternalServerWithUserMessageException: Add serialVersionUID
+
+* [Issue 14046](https://bugs.chromium.org/p/gerrit/issues/detail?id=14046);
+  Fix bug: Do not change WIP status when not needed during rebase
+
+* Fix long range comment selection on Firefox
+
+* Clarify LOST value of LineNumber
+
+* Fix the height and background color of comments tab header
+
+* Fix the metadata reviewers line height
+
+* Small styling fix of successful check summary
+
+* Collapsing related changes
+
+* [Issue 13836](https://bugs.chromium.org/p/gerrit/issues/detail?id=13836);
+  Add a css var for coloring change log entries by service users
+
+* Fix account overflow problems in Change Log
+
+* Fix bug: also advertise refs/changes/../robot-comments when applicable
+
+* Fix bug not loading robot comments notes
+
+* Show all bar when editing commit message
+
+* Clean up auto reload dashboard experiment
+
+* Fix CmdLineParser.MyParser to not throw ClassCastException
+
+* Add option to dismiss new messages toast
+
+* [Issue 13717](https://bugs.chromium.org/p/gerrit/issues/detail?id=13717);
+  Add reviewers to attention set when replying to WIP changes
+
+* Some small checks summary UI tweaks
+
+* Fix a tiny bug in FileDiffCache for commit messages
+
+* Add selection of check run chips
+
+* Update comment tooltip if shortcuts are disabled
+
+* Drop outdated comments from Change.java
+
+* Configure maximum allowed value for the number of context padding lines
+
+* Add the context-padding parameter to the comment context
+
+* [Issue 13571](https://bugs.chromium.org/p/gerrit/issues/detail?id=13571);
+  Suppress keyboard shortcuts if user has disabled them
+
+* Revise the summary of the new Checks UI
+
+* Inline entity protobufs directly into cache protobufs
+
+* Fix FilesInCommitCollection when parent = 0
+
+* Add to missing `declare` statements
+
+* New Change Summary - Submitted together
+
+* FileEdits: Simplify instance creation
+
+* Retry more often on submit
+
+* Show avatars for unresolved comments authors
+
+* Extract persistent cache base factory
+
+* Move DiffLayer to the API
+
+* Move move-link-click event details to API
+
+* Move LineNumber to API
+
+* Move ContentLoadNeededEventDetail to the API
+
+* Make GrDiffGroupRange use LineRange
+
+* Fix being able to reload the Checks UI
+
+* Comments summary - unresolved comments + styling
+
+* Introducing new component for relation chain
+
+* Use a new custom exception instead of StorageException on submit
+
+* Left align 'No changes need your attention' message'
+
+* Add a RefFilterOption to always return all most recent ref changes
+
+* Send all user's votes instead of only changed votes
+
+* Add single file diff to the DiffOperations interface
+
+* [Issue 14034](https://bugs.chromium.org/p/gerrit/issues/detail?id=14034);
+  Fix bug of removableReviewers without votes
+
+* Add extra width to display full names
+
+* Resolve TODO about removing SPECIAL_PATCH_SET_NUM
+
+* Comments Summary - initial work
+
+* [Issue 13392](https://bugs.chromium.org/p/gerrit/issues/detail?id=13392);
+  Fix text overflow in account labels
+
+* [Issue 12536](https://bugs.chromium.org/p/gerrit/issues/detail?id=12536);
+  Auto focus on the first input field
+
+* [Issue 14000](https://bugs.chromium.org/p/gerrit/issues/detail?id=14000);
+  Fix being able to flip your own attention flag
+
+* Fix font-weight in new Checks UI
+
+* LocalDiskRepositoryManager: Don't compute base path before it is needed
+
+* Handle the comment context for merge list
+
+* Fix comment context for commit messages
+
+* New change summary - commit message with show all bar
+
+* Apply same spacing rules for long range chips as in move detection
+
+* Add message that files were not changed on submit
+
+* Fix loading of plugin provided coverage layer
+
+* Allow user to re-vote their same vote
+
+* ReviewerRecommender: Fix an imprecise comment
+
+* Add author name to new messages toast
+
+* [Issue 2335](https://bugs.chromium.org/p/gerrit/issues/detail?id=2335);
+  Add repository browser link to repo detail page
+
+* Adapt getRefs + filter to use the more efficient implementation
+
+* Use quotes in search query only when neccessary
+
+* Use the redesigned diff cache in the list files endpoint
+
+* Fix diff cursor side for chunks on first or last line of file
+
+* Add undefined check for accessing account id
+
+* Change linked URL for topic
+
+* Return the commit message and merge list for auto-merge with \> 2 parents
+
+* Prevent duplicate ranged comment chips on rerender
+
+* Update message text in ported comments
+
+* Replace the placeholders in checks tab with something more decent
+
+* Allow posting the same vote on a new patchset
+
+* Do not show fake runs by default, but allow them to be toggled
+
+* Introduce material web components for use
+
+* Prevent skipping chunks on first or last line of file
+
+* A11y - announce that change is in edit mode
+
+* Propagate error's text received from backend to a plugin
+
+* Add an option for checks to provide HTML results
+
+* [Issue 12838](https://bugs.chromium.org/p/gerrit/issues/detail?id=12838);
+  Add manual sync of cursor for gr-change-list
+
+* Move CommentRange to api/
+
+* Move GetOAuthToken out of the core restapi
+
+* Return empty comment context if line and range info are not available
+
+* Add basic support for expanding a checks row
+
+* Fix issue with rounding in calculation of time duration
+
+* Reload dashboard when visibility changes
+
+* [Issue 13970](https://bugs.chromium.org/p/gerrit/issues/detail?id=13970);
+  Increase the memory allocation for acceptance tests to 512m
+
+* Move the Side enum to the API
+
+* Reload ported comments when patchset picker is changed
+
+* [Issue 13914](https://bugs.chromium.org/p/gerrit/issues/detail?id=13914);
+  Prioritize 'ADDED' entries over 'DELETED' for file diffs
+
+* Refine the Checks Results UI
+
+* A11y - Each page should have only one main
+
+* Fix getSelection error
+
+* Reland: Use LoadingCache#getAll in AccountCacheImpl
+
+* Adapt voting chips to new chip style sizing
+
+* Handle clicks on new checks chips
+
+* Refine the UI of the checks chips
+
+* Add long range comment chip
+
+* Add ported drafts to comment count string
+
+* Throw one exception for both unresolvable commits and permission denied
+
+* Move OAuth and LDAP support out of server target
+
+* Add lit elements for Runs and Results
+
+* Only allow involved users to change the attention set
+
+* Disallow creating branches in Gerrit internal or tag refs namespaces
+
+* Create Branch: clarify that BranchInput and URL should match for ref
+
+* Add tracking when user navigates to original comment
+
+* Propagate the exception cause in CherryPickChange#cherryPick
+
+* DeleteRef: clarify 'prefix' argument
+
+* Make code compile in Eclipse
+
+* Rebase: Include conflicting files into the conflict response
+
+* Allow rebase with conflicts
+
+* Exempt JimFS from Library-Compliance.
+
+* tools/coverage.sh: Expand bash aliases and source bash profile
+
+* Add handling for Commit message and Rebase change messages
+
+* Add handling for ported comments with side=Parent
+
+* CheckAccess: print a useful message if no rules apply
+
+* restapi/project: move CheckAccessReadView into CheckAccess
+
+* restapi/project: add some comments
+
+* restapi/accounts: clarify permission related behaviors
+
+* Introduce the new DiffsOperations interface
+
+* Replace enable_context with enable-context in docs
+
+* Set path to null after filling the comment context
+
+* Allow users to select which changes to cherry pick
+
+* Create enum for the progress status of cherry picked change
+
+* Expose the entire commit message instead of only the subject
+
+* Disallow creating changes on internal Gerrit refs
+
+* Filter disabled experiments from settings view
+
+* Add the file diff cache
+
+* ExternalUser: Allow specifying a PropertyMap
+
+* Expose email addresses for ExternalUsers
+
+* Increase visibility of failed retries
+
+* Avoid passing @Singleton to args4j
+
+* Move ExternalUser from change.query into server package
+
+* Add status chip to file dropdown in diff view
+
+* [Issue 13571](https://bugs.chromium.org/p/gerrit/issues/detail?id=13571);
+  Add preference to disable all keyboard shortcuts
+
+* Update _computeMessageContent to use optional properties
+
+* Add diff between patchset N vs N - 1 on uploaded messages
+
+* Use current timestamp for creating group
+
+* CurrentUser: Expose set of ExternalId.Keys
+
+* GroupBackend: Accept CurrentUser instead of IdentifiedUser
+
+* CreateChange: Allow specifying correct project
+
+* Take empty arrays into account to break down chunks
+
+* Disallow creating changes on NoteDb refs
+
+* Fix compile error because of required new `actions` parameter
+
+* Fix unquoted properties of HTMLElementEventMap
+
+* Verify destination change of cherry-pick before trying to update it
+
+* Fix the z-index of the main header
+
+* Add top-level actions for Checks API
+
+* Allow porting comments to contribute to comment count string
+
+* Update comment route to handle comments created with side=PARENT
+
+* Only request ported comments when experiment is enabled
+
+* Add checks service
+
+* Add a model for router and change
+
+* Update existing change on cherry-pick with CommitApi
+
+* Implement mergedafter and mergedbefore change search operator
+
+* Change the default permissions from READ on refs/* to refs/heads/*
+
+* Support refs/users/self for the GET branch rest endpoint
+
+* Fixes for tools/coverage.sh
+
+* Adopt last updated time predicates to reuse for merged time predicates
+
+* Add an extension point to extend the change message on post review
+
+* Port drafts across patchsets
+
+* New change summary - introduce edit pencil
+
+* Fix PluginLogFile to not open multiple appenders when run in parallel
+
+* Port comments across patchsets
+
+* Fix for text selection in comment
+
+* Hide quick-approve for your own change or if you have already given max vote
+
+* Move __editing property to be part of only UIDraft
+
+* Add missing parameter to getThreadsBy* call
+
+* Add an option to keep votes when moving the change to another branch.
+
+* Clean up error reporting
+
+* [Issue 13770](https://bugs.chromium.org/p/gerrit/issues/detail?id=13770);
+  Do not add owner to the attention set when added as reviewer
+
+* Define a default errFn for REST API calls from plugins
+
+* Convert commentSide to diffSide in GrCommentThread
+
+* Move chunks: Add links to line numbers
+
+* Change all components to use the service for rest-api-interface
+
+* Add a service for rest-api
+
+* Set AutocompleteSuggestion property value to be string
+
+* Expose the mergedOn date of a change in ChangeNotes
+
+* Ignore no-unused-vars rule on args pattern ^_
+
+* Do not collapse lines of code with less than 4 lines
+
+* Get rid of some globals
+
+* Avoid throwing IllegalArgumentException when failing to parse an enum
+
+* Extend PatchSetWebLink to include subject and branch name
+
+* Replace non-standard event.path with event.composedPath
+
+* Show Submitted Date in change summary
+
+* [Issue 13728](https://bugs.chromium.org/p/gerrit/issues/detail?id=13728);
+  Fix dashboard not showing up for not-logged in user
+
+* A11y - improve announcing
+
+* Add a constant for 'current'
+
+* [Issue 13734](https://bugs.chromium.org/p/gerrit/issues/detail?id=13734);
+  Fix the change message for removing cc
+
+* Move java_tools javac argument into tools parameter.
+
+* Fix A11y regression
+
+* Fix DynamicOptions to support a custom bean
+
+* Exempt guava from LC review
+
+* New change summary ui - flag, metadata
+
+* Do not re-initialise toast displayed time when navigating
+
+* Add braces to arrow functions returning void
+
+* Add simple visual distinction for move control text
+
+* A11y - Fix tabbing out of searchbar
+
+* Replace comment route in url bar with meaningful url
+
+* Clean-up ChangeNotesCache.Weigher
+
+* Add basic scaffolding for the checks tab
+
+* Add 'prefer null' to frontend style guide
+
+* Wrap isAtStart/End() in GrDiffCursor
+
+* Move some of the old diff cache entities to a new package
+
+* Add the git file diff cache
+
+* Make isAtStart/End() return true when no stops
+
+* Show all comments upon creation if user had hidden them
+
+* Show robot id for robot comments in comment card
+
+* Pass on CursorMoveResult
+
+* Show reviewer on comment tooltip
+
+* ChangeInfo: Serve reviewers when LABELS are requested
+
+* A11y - Improve diff a11y
+
+* Show alert when syntax highlighting is turned off
+
+* Improve description of moved chunks
+
+* Fix empty filter handling in list-view
+
+* [Issue 13689](https://bugs.chromium.org/p/gerrit/issues/detail?id=13689);
+  Bazel: Fix eclipse project generation
+
+* Fix Shift-A shortcut for hiding the left side of the diff
+
+* Update stops when a diff starts or stops loading
+
+* Make show_on... fields boolean
+
+* ProjectConfig: Write resolved groups to file
+
+* ChangeNotes: Don't use ChangeIndex when we can avoid it
+
+* [Issue 13612](https://bugs.chromium.org/p/gerrit/issues/detail?id=13612);
+  Fix bazel run_shell usage for newer versions
+
+* [Issue 13669](https://bugs.chromium.org/p/gerrit/issues/detail?id=13669);
+  Remove --line-height-code in favor of calc() rules
+
+* Reduce boiler plate for event listening
+
+* When added as author, be added as CC and not reviewer
+
+* auth-check: Set content length only if authorization is valid
+
+* Add new ChecksApi to PluginApi
+
+* Treat spaces as ordinary characters in diff view
+
+* [Issue 13658](https://bugs.chromium.org/p/gerrit/issues/detail?id=13658);
+  Convert comment counts to comment thread counts around the UI
+
+* Specify line-height for code in terms of rem
+
+* Refuse to expand skip groups with WHOLE_FILE
+
+* Fix showing "Add Patchset Description" for users that are not logged in
+
+* Support diffing for octopus merges against a specific parent
+
+* Fix broken link to release notes of 2.2.2 in prolog cookbook
+
+* Update developer list in Maven pom files
+
+* Abort cursor movements across a loading diff
+
+* [Issue 7458](https://bugs.chromium.org/p/gerrit/issues/detail?id=7458);
+  Fix iron-dropdown positioning
+
+* Abort cursor moves via a sentinel, not a callback
+
+* Don't unset scroll on non-existant stop
+
+* ported draft comments: Require authentication
+
+* Allow multiple plugins to provide coverage data
+
+* Hide patch file download when the commit has multiple parents
+
+* Add support to skip chunks
+
+* [Issue 13336](https://bugs.chromium.org/p/gerrit/issues/detail?id=13336);
+  Support accessing other users' named queries
+
+* Only request ported drafts if user is logged in
+
+* Catch errors in getPortedComments request
+
+* Allow adding and removing invisible users to the attention set
+
+* [Issue 13336](https://bugs.chromium.org/p/gerrit/issues/detail?id=13336);
+  Support to query for user specific named destinations
+
+* Ensure users are active on the change when adding to attention set
+
+* Use ChangeData in LabelJson
+
+* Add latency tracking for porting comments
+
+* Add hasDrafts property to re-compute attention set
+
+* Fix headline for user queries for users without name
+
+* A11y - headlines for Diff Page
+
+* A11y - headlines for Change Page
+
+* Flip the defaults of the attention and assignee flags
+
+* A11y - headlines for Dashboard Page
+
+* Add the GitModifiedFilesCache and ModifiedFilesCache
+
+* Add constant for Service Users
+
+* Linkify branch name in repo detail list
+
+* Do not navigate to Base vs X if X is Base and file is unchanged
+
+* Submit emails should always be sent
+
+* [Issue 13522](https://bugs.chromium.org/p/gerrit/issues/detail?id=13522);
+  Fix topic creation in command line to send a topicEditedEvent
+
+* Improve message if submit fails due to non-fulfilled submit requirements
+
+* Add fatal to consistency and validation error enums
+
+* Add keyboard shortcut 'f' to open file list in diff view
+
+* Fix DefaultPermissionBackend#absentUser to work outside the request scope
+
+* [Issue 13543](https://bugs.chromium.org/p/gerrit/issues/detail?id=13543);
+  Fix navigate back to change page with '[' on first diff.
+
+* Update mixins to avoid compilation issues
+
+* Required fixes to match internal google rules
+
+* Ensure that all assignment to window.Gerrit properties are safe
+
+* Use overridden ChangeEmail#add instead of OutgoingEmail#add
+
+* Show comment in viewport when navigating to Base vs X
+
+* Do not skip lines marked as dueToMove
+
+* Replace parseInt() with Number
+
+* Fix TseTse errors
+
+* DefaultPermissionBackend: Reuse current user where possible
+
+* Add event detail interfaces for dispatchEventThroughTarget
+
+* Replace "Since" by "Waiting"
+
+* Fix patchset comparison when adding coverages
+
+* Compute known groups lazily when writing groups to the trace
+
+* Fix TseTse errors.
+
+* Toggle default to show unresolved comments
+
+* Do not add reviewer to the attention set when they add themselves
+
+* Fix attention set tip not showing up
+
+* Add email notification option ATTENTION_SET_ONLY
+
+* Add more fine logging to SubmitStrategyOp
+
+* Replace dispatchEvent with dispatchEventThroughTarget
+
+* Add a header about attention set for all change emails
+
+* IdentifiedUser.RequestFactory#runAs allow passing properties
+
+* Allow user preference to receive emails only when in attention set
+
+* Fix TseTse error
+
+* Convert patchNum into integer if possible
+
+* Bold the user name, if they are in the attention set
+
+* Fix showing the CC section in the attention modify section
+
+* Change attention set logic to take unresolved state into account
+
+* Do not add the owner to an otherwise empty attention set
+
+* Fix "Do not update attention set" message
+
+* Do not rely on SortedMap / Set semantics for Flogger tags
+
+* Cache the comment context
+
+* Add 'Since' and 'Submitted' columns to dashboard sections
+
+* Change the sorting of changes in the 'Your Turn' dashboard section
+
+* Highlight the dashboard rows with attention as reviewer
+
+* Use auto-value-gson
+
+* Maintain all attention set updates in ChangeNotesState
+
+* ReceivePackRefCache, locate patch-sets instead of refs
+
+* Include repo config into CommitReceivedEvent
+
+* PostWatchedProjects: Throw BRE in case of empty input
+
+* CheckAccess: Return ACL debug logs
+
+* download-commands: use unqiue constants for each download command
+
+## Bugfix releases
