CHANGES updated for ASF release 1.15.0
diff --git a/CHANGES b/CHANGES
index 672c16e..268f262 100644
--- a/CHANGES
+++ b/CHANGES
@@ -1,12 +1,124 @@
-Next Version
+Version 1.15.0  (September 2023)
 
 Upgrade Instructions
 
-  More to come!
+  To install updated dependencies, run:
+    pip install -r requirements.txt --no-deps --upgrade --upgrade-strategy=only-if-needed
+  Run: `paster ensure_index development.ini` in Allura dir
+
+  If switching to a new version of Python, you will need to make a completely new python virtual environment,
+  and run `pip install ...` in it, and then use it to run Allura.
+
+  If using docker, rebuild the allura image and restart containers.
+
+Major New Features
+ * added support for Python 3.8 through 3.11
+ * introduced Content-Security-Policy headers
+
+Security
+ * Allow csp_form_actions environ override; more obvious warning if github oauth .ini settings missing
+ * better defaults for CSP to avoid warnings when developing
+ * [#8470] Add CSP Headers
+ * [#8479] CSP Headers Add Support For script-src
+ * [#8510] Add HTTP Header Add Permissions-Policy
+ * [#8511] Add HTTP Header Referrer-Policy
+ * [#8504] CSP Headers Add Support For script-src-attr
+
+SEO
+ * noindex,follow for ticket milestone pages
+ * h1 title improvement for wiki sections browse pages and browse labels
+ * Make canonical tag on activities pages overridable
+ * [#8492] Update noindex Logic for User Profiles
+ * [#8464] Add noindex, follow on List Tools
+ * [#8469] Add Missing Canonical Tag
+ * [#8477] More Canonical Urls
+
+Performance
+ * chunked_find: avoid redundant query at end
+ * performance optimizations related to anonymous()
+ * speedup: private_project for anonymous
+ * [#8497] ForgeMarkdown speedup
+
+Tickets
+ * fix error on feed url for non-existant ticket
+ * remove ticket history records when uninstalling a ticket tool
+
+Wikis
+ * fix failing trac wiki tests that were previously unused and apparently wrong
+ * [#8471] check for comments when setting wiki noindex
 
 General
- * [#8445] Switched all tests from nose to pytest
+ * Move GA snippet down slightly
+ * added noindex meta tag to new tickets page
+ * use error template for 410 Gone statuses too
+ * ignore a pure reformatting change
+ * add @ to url autolink pattern
+ * avoid unhandled error on bad input to /nf/markdown_to_html
+ * improve artifact_feed.author_link index by including field it is sorted on
+ * add indexes to Post for update_stats() queries
+ * make oauth api_key unique, to match child class that has it unique
+ * add --rm to single-use docker-compose commands, so container is cleaned up after
+ * remove .travis.yml since ASF isn't using travis any more; we could make a GitHub action instead
+ * Escape colons in the registration_ip field for IPv6 addresses
+ * Add the r prefix to escape sequence for search fields
+ * set c.project during add_artifacts task, like c.app already has been
+ * Make sure filenames are interpreted as utf8
+ * when a password reset link doesn't work, make the error more obvious and don't show them a login form since that's confusing
+ * task command: add another filter option for days
+ * fix weird HTTPError issue; details at https://github.com/agronholm/exceptiongroup/issues/39
+ * further fix for latin1 in etag headers
+ * [#8508] Generate unique id for screenshots
+ * [#8484] Add Support For Fediverse Addresses
+ * [#8489] support python 3.8
+ * [#8483] Markdown: image target URL fails when reaches 100 chars + FIX(?)
+ * [#8486] Git should look for 'main' branch
+ * [#8475] Return 404 on "Awaiting Moderation" Threads
+ * [#8473] use jinja's tojson instead of h.escape_json
+ * [#8487] Enable Analytics In Debug Mode
+ * [#8481] Commit Activity More Context
+ * [#8463] Commit Statuses For Repositories
+ * [#8467] support defopt with ScriptTasks
+ * [#8498] PEP8 Cleanup
+ * [#8482] saved comments (memorable) race condition
+ * [#8488] Incorrect name of web docker image in compose files
+ * [#8493] Make tracking snippet more self-contained
+ * [#8472] Project Activity Delete Issue
+ * [#8496] Trove Category Skip Limit for Admins
+ * [#8499] Update Deprecated Method Form Validation
 
+For Developers
+ * Fix phone.attempts_limit check, if user had surpassed it already
+ * autopep8 -i --max-line-length 9999 on many files
+ * type hint for chunked_find
+ * change [pep8] to [pycodestyle]
+ * first substantial test file mostly passing under pytest
+ * [#8455] Convert from nosetests to pytest
+ * All tests in ./Allura collecting, and test_auth completely passing
+ * pytest: ignore other package's namespace warnings
+ * update deprecated html unescape function
+ * upgrade regex-as-re-globally for py3.11 issue
+ * fixes for Python 3.10 & 3.11
+ * run pyupgrade (targeting 3.7 still)
+ * Fix getiterator() deprecated in Python 3.9
+ * restore scripts/ApacheAccessHandler.py to py2 compatible
+ * with recent versions of pip but no wheel pkg, "pip install -e .." needs setuptools, so --no-index is a problem.  Remove that, and update folder paths to be clearly folders to ensure they don't get installed from PyPI
+ * pytest: short (normal) tracebacks
+ * fix "reindex" cmd help string
+ * Update copyright year
+ * fix rebuild-all.bash SVN replacement to match updated format
+ * Add a helper method to TroveCategory to find by fullpath(s)
+ * [#8500] upgrade TurboGears
+ * [#8501] remove twemoji
+ * [#8502] Replace pyflake with ruff
+ * [#8490] Fix Failing Parallel Tests
+ * [#8461] replace python-oauth2 with oauthlib
+ * [#8494] Python Package Upgrades
+ * [#8476] Upgrade Underscore Library
+ * [#8491] JS Libraries Tablesorter and Sylvester
+ * [#8495] fix DeprecationWarnings
+ * [#6556] Error on undefined template vars, during development
+ * [#8505] python 3.11 - jenkins setup
+ * [#8513] Jenkins Buikd Docker Error