You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tooling.apache.org by sb...@apache.org on 2026/07/30 14:59:53 UTC

(tooling-trusted-releases) branch tertia updated (60ad2123 -> 1c71523e)

This is an automated email from the ASF dual-hosted git repository.

sbp pushed a change to branch tertia
in repository https://gitbox.apache.org/repos/asf/tooling-trusted-releases.git


    from 60ad2123 #1370 - initial admin page for renaming, moving and deleting projects
     add dbb5c710 Update components (#1377)
     add 085bc83f #1373 - sort order for committee projects
     add 7090e86b #1358 - enforce JTI claim for workflow SSH keys
     add b542ea5c #1373 - fix sort order for committee projects on other pages
     add c24f02f4 Fix a database query bug in the API endpoint to start a vote
     add 8a62b362 Default the revision when the user starts a vote on their own revision
     add 4c585cb8 Make the revision number optional when announcing a release
     add 58079ab1 Skip empty files in lightweight license checks
     add 53675524 Add a major version variable for use in download paths
     add ca985b8d Convert catalogue links to buttons
     add 2755ee90 Render the banner from a database table edited by admins
     add 5c3859ed Fix a bug with download paths
     add a420564c Make the public SVN URL configurable
     add 5289b06d Ensure that only PMC members and committer RMs can publish to SVN
     add 082b2391 Update dependencies
     add 38001e0c #1363 - fix email when release is only reported by the SVN watcher
     add e85ddb26 Use templates by default in the API when constructing vote messages
     add f62697a7 Use templates by default in the API for announcement messages
     add d37c5694 Adjust downloads menu target (#1394)
     add 4c1f99d1 Use the policy vote duration in the API by default
     add e00c80a5 #1363 - change email content for watched vs announced
     add 8fc2a43f #1400 - classify SBOMs as SBOMs
     add ef5a1496 #1370 - support import and export of PMC CSVs
     add 2f2d1e78 Allow SHA-512 files to be generated without signatures
     add 2626a239 Move the wording about breaking the embargo during expedited releases
     add 7eca2f37 Document the finish process on the corresponding page
     add 6777c5e3 Remove the ability for admins to regenerate all KEYS files
     add 911c5142 Relax migration immutability check - branches should be able to reorder their own migrations or rebase on a changed main
     add 8d64257d #1371 - release archival
     add 99b3fac1 Replace dist/atr on non-live environments properly
     add 9a7d41c1 Bump astral-sh/setup-uv from 8.2.0 to 8.3.1
     add 56b1e14a Bump docker/setup-buildx-action from 4.1.0 to 4.2.0
     add a5011177 Bump docker/build-push-action from 7.2.0 to 7.3.0
     add d98e4188 Update CodeQL actions, and ensure smoother Dependabot updates
     add d548108f Bump astral-sh/setup-uv from 8.3.1 to 8.3.2
     add a11f55c0 Bump the codeql-action group with 2 updates
     add 99e8934f Bump advanced-security/dismiss-alerts from 2.0.2 to 2.0.3
     add 3e2dba96 Fix bug with null download suffix
     add b65a7ab6 Add suggestion to avoid double-prefixing files in dist
     add 4aa8c4e8 Use existing KEYS URLs instead of linking to the removed downloads directory
     add 34ccffe4 #1400 - SBOM check as a suggestion
     add 91de479d Document resource management
     add b0311e37 #1403 - validate spec parity in SBOM tooling
     add 5f42d9a6 #1403 - enhance spec handling for CLI
     add 0c6c7630 #1417 - Fail signature check when key has expired
     add b4293764 Add a committee property for automatically managing KEYS files
     add c809c1de Add more detailed KEYS publication result types
     add 1fd58a4f Only publish KEYS files to SVN when the committee configures that
     add d9c1873f #1399 - new SBOM report showing content, linked from the artifact itself
     add ec16d9aa Report to users when KEYS publication to SVN is not enabled
     add 1a470914 Fix a problem with displaying committees
     add ae799ff7 Add a unit test that committee pages successfully render
     add e02af201 Report KEYS publication status in relevant API responses
     add 79013389 Let PMC members toggle automated KEYS publication
     add e797ceee #1417 - Support for subkeys
     add ba9e46e7 Report KEYS publication failures more widely
     add 0e72dad8 Fail early when the state directory is not writeable
     add c9cd800e Check in CI that the server can run without root
     add 32f6de19 Create an ATR user and group inside the container
     add 14e7fb89 Make the compose container user configurable
     add 95a11605 Run the compose server containers under an init
     add f29c190f Prevent privilege escalation in the compose containers
     add 5cbc21c3 Create an empty state directory in the Alpine container
     add ae4cb279 Run the Alpine container as the ATR user instead of root
     add 3faf688e Add an API endpoint to generate augmented SBOMs
     add 7b9bf6b6 Update dependencies
     add 98ac0978 Update rpgp-py
     add 9511471a Do not load releases in projects
     add 33b62a39 Load only user projects instead of all active projects
     add 7019111f Consolidate release queries for the navigation menu
     add f2df23be Consolidate release queries on the user home dashboard
     add 00285513 Count releases instead of loading them on the projects page
     add ad89580c Add the option to specify an expected latest revision during API uploads
     add 53bb2564 Properly handle revoked and expired OpenPGP self signatures
     add b42df9fd Update dependencies
     add c5bb29f8 Allow SBOM signatures
     add 956a15a4 Parse attestable files in JSON mode
     add 5545dc1a Parse attestable checks files in JSON mode
     add a95c7ab8 Remove links to ATR's own downloads area
     add 5def9227 #1417 - Reject on revoked
     add 8c36af5a #1427 - revert token change
     add b424c793 #1420 - auto-archive on CAP approval and handle failure to do so
     add 75c7612d Remove all writes to the downloads directory
     add cbebbbc4 #1419 - Datamodel update to handle subkeys. Prevent overwriting older keys.
     add f67fc10f #1404 - move completed scheduled tasks to file logging and remove from database
     add 5a77e115 Remove the option to preserve download files
     add 3f04183a Remove all remaining stale references to the downloads directory
     add c63be6d8 Remove the temporary performance monitoring code
     add 029d7c47 Make some check results more prominent and include a description
     add 61cd541a Make the RAT overview check result a note in most cases
     add 03c4fc67 Remove confusing outdated terminology about issues
     add 59fe2410 Make check result pages public
     add 20f6a6e2 Add an explanatory paragraph about check result counting for archives
     add c2884337 Update dependencies
     add ff12466e Pin to an ASFQuart branch that will not be automatically deleted
     add 1d8f09a8 Switch the ASFQuart branch to main
     add 425e0209 Update Bootstrap with a 7 day cooldown
     add cef94e61 #1445 - fix model ordering in dist watcher
     add 405d2021 #1445 - handle errors in logging releases
     add 742be1a3 #1444 - add confirm textbox to CAP archive request, refactor handlers
     add 6e6aed09 #1444 - remove download button from releases and reword files button
     add 592fc819 Move download path suffix to the top of the policy form
     add eae70edd Rename the disclaimer template variable for podlings
     add 2fcad662 Validate submitted template variable names
     add 99267277 Improve SBOM output usefulness - update artifact name/version
     add 590d6e8d Preserve and act upon LDAP connection errors
     add a95b8c1a Improve SVN error handling for import and publication
     add 81fc20b1 Require download publication to announce a release
     add c4932f6b Don't show temp path in SBOM filenames
     add 88d91da9 Fix named license showing as category X
     add 6e3c6ba9 Fix primary component in generated SBOMs where we can do so
     add 819befb5 #1443 - validate template variables in a common way across form and .asf.yaml entry
     add 2516ee88 Add descriptions to vote mode option values
     add f5a200ef Disallow zero hour vote durations in production mode
     add 58d772ed Raise message task exceptions if no recipients could be sent to
     add 2bc686df Show message delivery problems to users
     add f156b994 Check that the mail relay is reachable before announcing a release
     add 68169dbf Make the source tree comparison task fail if there is a problem
     add ec7c3b4b #1448 - static release catalog site generation
     add 1fc148ff Allow vote durations of up to 168 hours
     add 0bccac39 #1448 - move enums and add increased timeout capability for task types
     add 26191c59 Clarify that tests are not susceptible to URL sanitsation concerns
     add da069f20 Do not log task arguments potentially associated with embargoed releases
     add ec9e7cae #1448 - overloaded version param by accident
     add 6caca60c Link SBOM reports together and add some license info
     add 6c88e06d Report a concern if an artifact was not signed by the uploader
     add 38a46f37 Update dependencies
     add 59f913be #1454 - fix incubator retirement message
     add 52f8c256 #1448 - add catalog site dir to managed paths
     add b430a94f #1452 - fix icon size
     add f06806ff #1453 - move artifacts JSON link to a pill link
     add 30a485d8 #1457 - match card formatting for committee catalog page and include logos. Live PMCs only
     add edc271ee #1455 - incubator page for podlings
     add 738373e4 #1456 - attic page
     add 3e995a72 #1460 - KEYS download link
     add 49df4d73 Add trademarks to the footer (#1459)
     add 4255139d Reuse app footer
     add f50486b8 Fix on dist watcher for whole-directory adds
     add ace7218a #1461 - rearrange catalog
     add 70f821b1 Add a broken status to indicate tasks which may be retried
     add 5e6bc5b2 Record failed and broken checks as exception results
     add 2d9ebc44 Reclassify some check exceptions to allow retrying
     add 71d0eee2 #1461 - add missing header
     add 3e74da22 #1469 - make sure  CLE is populated in release artifacts
     add ec764fe4 #1463 - add public domain to license handling
     add ae9896c2 Bump actions/checkout from 7.0.0 to 7.0.1
     add 108f3589 Bump actions/setup-python from 6.3.0 to 7.0.0
     add 177490d8 Bump astral-sh/setup-uv from 8.3.2 to 9.0.0
     add fd161e23 Bump the codeql-action group with 2 updates
     add 96460923 Retry OSV requests
     add 50466bff Fix function orders
     add 3055495e Report temporary OSV failures clearly
     add 41e21694 #1470 - Add cycles to catalog
     add 0e422418 #1462 - support for archiving committee in the database, and a reviewed flag for catalog notifications
     add eb105771 Add unit tests for the PubSub listener
     add 57b49b7f Make the PubSub listener more resilient and report if it exits
     add 1c71523e Move where PubSub handler errors are raised from

No new revisions were added by this update.

Summary of changes:
 .github/dependabot.yml                             |   4 +
 .github/workflows/allowlistchecker.yml             |   2 +-
 .github/workflows/analyze.yml                      |   6 +-
 .github/workflows/build.yml                        |  59 +-
 .github/workflows/client-compat.yml                |   4 +-
 .github/workflows/codeql.yaml                      |   8 +-
 .github/workflows/generatesbom.yml                 |  11 +-
 .pre-commit-config.yaml                            |   6 +-
 DEVELOPMENT.md                                     |  16 +
 Dockerfile.alpine                                  |  28 +-
 atr/admin/__init__.py                              | 484 ++++++++++++--
 atr/admin/templates/catalog-committee.html         |   4 +
 atr/admin/templates/catalog-import-preview.html    |  12 +
 atr/admin/templates/catalog-import.html            |  59 ++
 .../{update-keys.html => update-catalog-site.html} |  22 +-
 atr/analysis.py                                    |  41 +-
 atr/api/__init__.py                                | 260 +++++--
 atr/archives.py                                    |  15 +-
 atr/attestable.py                                  |  31 +-
 atr/blueprints/common.py                           |   4 +-
 atr/cache.py                                       |  36 +
 atr/catalog_site.py                                | 475 +++++++++++++
 atr/classify.py                                    |  58 +-
 atr/cle.py                                         |  30 +
 atr/config.py                                      |  19 +-
 atr/constants.py                                   |   1 -
 atr/construct.py                                   |  78 ++-
 atr/cycles.py                                      | 169 +++--
 atr/db/__init__.py                                 |  76 ++-
 atr/db/interaction.py                              | 140 ++--
 atr/docs/asfquart-usage.md                         |   2 +-
 atr/docs/authentication-security.md                |   2 +
 atr/docs/checks.md                                 |   6 +-
 atr/docs/components.md                             |  50 --
 atr/docs/database.md                               |   6 +-
 atr/docs/developer-guide.md                        |   1 +
 atr/docs/index.md                                  |   3 +-
 atr/docs/resource-management.md                    |  62 ++
 atr/docs/signing-artifacts.md                      |   2 +-
 atr/docs/storage-interface.md                      |  13 +-
 atr/docs/terminology.md                            |  66 ++
 atr/docs/user-guide.md                             |  54 +-
 atr/form.py                                        |  16 +-
 atr/get/__init__.py                                |   2 -
 atr/get/announce.py                                |  71 +-
 atr/get/catalog.py                                 |   6 +-
 atr/get/checks.py                                  |  65 +-
 atr/get/committees.py                              |  47 +-
 atr/get/compose.py                                 |  32 -
 atr/get/distribution.py                            |  18 +-
 atr/get/download.py                                |  17 +-
 atr/get/file.py                                    | 144 +++-
 atr/get/finish.py                                  | 154 ++++-
 atr/get/keys.py                                    | 127 ++--
 atr/get/projects.py                                | 120 +++-
 atr/get/published.py                               | 126 ----
 atr/get/ref.py                                     |   3 +-
 atr/get/release.py                                 |   6 +-
 atr/get/report.py                                  |  59 +-
 atr/get/resolve.py                                 |   9 +
 atr/get/result.py                                  |  11 +-
 atr/get/root.py                                    |  86 ++-
 atr/get/sbom.py                                    | 411 +++++++++---
 atr/get/vote.py                                    |  42 +-
 atr/get/voting.py                                  |  26 +-
 atr/jwtoken.py                                     |  53 +-
 atr/ldap.py                                        |  56 +-
 atr/log.py                                         |  13 -
 atr/loggers.py                                     |   2 +-
 atr/mail.py                                        |  17 +
 atr/manager.py                                     |  64 +-
 atr/models/api.py                                  |  54 +-
 atr/models/args.py                                 |  17 +-
 atr/models/attestable.py                           |   2 +
 atr/models/checkdata.py                            |   1 +
 atr/models/results.py                              |  15 +
 atr/models/safe.py                                 |   3 +
 atr/models/sql.py                                  | 175 +++--
 atr/models/validation.py                           |   6 +-
 atr/paths.py                                       |  44 +-
 atr/pgp.py                                         | 338 ++++++++++
 atr/post/__init__.py                               |   2 +
 atr/post/announce.py                               |  20 +-
 atr/post/draft.py                                  |  16 +-
 atr/post/file.py                                   | 214 ++++++
 atr/post/finish.py                                 |   4 +-
 atr/post/keys.py                                   | 104 ++-
 atr/post/projects.py                               |  43 +-
 atr/post/sbom.py                                   |  56 +-
 atr/principal.py                                   |   6 +
 atr/pubsub.py                                      |  61 +-
 atr/render.py                                      |  57 +-
 atr/sbom/__init__.py                               |  17 +-
 atr/sbom/components.py                             |  64 ++
 atr/sbom/constants/licenses.py                     |  96 +++
 atr/sbom/cyclonedx.py                              |  11 +-
 atr/sbom/licenses.py                               | 170 +++--
 atr/sbom/models/__init__.py                        |   4 +-
 atr/sbom/models/{patch.py => components.py}        |  50 +-
 atr/sbom/osv.py                                    |  66 +-
 atr/server.py                                      |  83 +--
 atr/sessions.py                                    |  30 +
 atr/shared/announce.py                             |   6 +
 atr/shared/catalog.py                              |  99 ++-
 atr/shared/catalogue_diff.py                       | 491 ++++++++++++++
 atr/shared/catalogue_import.py                     | 318 +++++++++
 atr/shared/catalogue_rows.py                       | 138 ++++
 atr/shared/keys.py                                 |  48 +-
 atr/shared/projects.py                             |  77 ++-
 atr/shared/repoint.py                              |   6 +-
 atr/shared/sbom.py                                 |  36 +-
 atr/shared/voting.py                               |   5 +-
 atr/static/css/atr.css                             |  21 +
 atr/storage/__init__.py                            |   7 +
 atr/storage/datatypes.py                           |  33 +-
 atr/storage/readers/releases.py                    |  13 +
 atr/storage/writers/__init__.py                    |   2 +
 atr/storage/writers/announce.py                    | 175 +++--
 atr/storage/writers/banner.py                      |  54 ++
 atr/storage/writers/catalogue.py                   | 299 +++++++--
 atr/storage/writers/committee.py                   |  44 ++
 atr/storage/writers/keys.py                        | 568 +++++++++-------
 atr/storage/writers/mail.py                        |   1 +
 atr/storage/writers/notifications.py               |   4 +
 atr/storage/writers/policy.py                      |  25 +-
 atr/storage/writers/project.py                     |  34 +
 atr/storage/writers/release.py                     | 744 +++++++++++----------
 atr/storage/writers/revision.py                    |  11 +-
 atr/storage/writers/sbom.py                        |  53 ++
 atr/storage/writers/ssh.py                         |  14 +
 atr/storage/writers/vote.py                        |   8 +-
 atr/svn/__init__.py                                | 157 ++++-
 atr/svn/catalog.py                                 | 116 +++-
 atr/tasks/__init__.py                              | 172 +++--
 atr/tasks/cap.py                                   |  88 ++-
 atr/tasks/catalog_site.py                          |  61 ++
 atr/tasks/checks/__init__.py                       |  49 +-
 atr/tasks/checks/compare.py                        | 170 +++--
 atr/tasks/checks/hashing.py                        |  20 +-
 atr/tasks/checks/license.py                        |  45 +-
 atr/tasks/checks/parity.py                         |   5 +-
 atr/tasks/checks/paths.py                          |  79 ++-
 atr/tasks/checks/rat.py                            |  45 +-
 atr/tasks/checks/sbom.py                           |  84 +++
 atr/tasks/checks/signature.py                      | 329 +++++++--
 atr/tasks/checks/targz.py                          |  21 +-
 atr/tasks/checks/zipformat.py                      |  20 +-
 atr/tasks/keys.py                                  |   2 +-
 atr/tasks/maintenance.py                           |  53 +-
 atr/tasks/message.py                               |   3 +
 atr/tasks/quarantine.py                            |   7 +-
 atr/tasks/sbom.py                                  | 163 ++++-
 atr/tasks/svn.py                                   |  45 +-
 atr/tasks/svnpub.py                                |   4 +-
 atr/tasks/task.py                                  | 169 ++++-
 atr/tasks/vote.py                                  |   5 +-
 atr/templates/_catalog_version.html                |  10 +-
 atr/templates/catalog.html                         |  23 +-
 atr/templates/catalog_site/_project_back_link.html |  13 +
 atr/templates/catalog_site/_release_list.html      |  18 +
 atr/templates/catalog_site/_unreviewed.html        |   5 +
 atr/templates/catalog_site/_version.html           |  20 +
 atr/templates/catalog_site/attic.html              |  19 +
 atr/templates/catalog_site/catalog_site_base.html  |  36 +
 atr/templates/catalog_site/incubator.html          |  41 ++
 atr/templates/catalog_site/index.html              |  49 ++
 atr/templates/catalog_site/project.html            |  66 ++
 atr/templates/catalog_site/project_archive.html    |  23 +
 atr/templates/catalog_site/release.html            |  51 ++
 atr/templates/check-selected-path-table.html       |  13 +-
 atr/templates/committee-directory.html             |   2 +-
 atr/templates/committee-view.html                  |  22 +-
 atr/templates/draft-tools.html                     |   8 +-
 atr/templates/includes/footer.html                 |   5 +
 atr/templates/includes/topnav.html                 |  29 +-
 atr/templates/layouts/base.html                    |   6 +-
 atr/templates/macros/flash.html                    |   3 +
 atr/templates/releases-finished.html               |  12 +-
 atr/templates/report-selected-path.html            |   6 +-
 atr/templates/resolve-tabulated.html               |  13 +
 atr/user.py                                        |  36 +-
 atr/util.py                                        | 184 +++--
 atr/worker.py                                      | 259 +++----
 bootstrap/source/package-lock.json                 |  44 +-
 docker-compose.yml                                 |   4 +
 ....29_ca1ec0de.py => 0105_2026.07.09_3414415d.py} |  31 +-
 ....29_ca1ec0de.py => 0106_2026.07.10_805ec889.py} |  29 +-
 migrations/versions/0107_2026.07.14_cb5f8249.py    |  82 +++
 ....29_ca1ec0de.py => 0108_2026.07.14_ba53474d.py} |  24 +-
 ....29_ca1ec0de.py => 0109_2026.07.15_91de479d.py} |  22 +-
 migrations/versions/0110_2026.07.20_7c41ab93.py    | 211 ++++++
 ....29_ca1ec0de.py => 0111_2026.07.22_f67fc10f.py} |  24 +-
 ....29_ca1ec0de.py => 0112_2026.07.22_d374db02.py} |  27 +-
 migrations/versions/0113_2026.07.28_dd069840.py    | 124 ++++
 ....29_ca1ec0de.py => 0114_2026.07.29_4a3ce951.py} |  26 +-
 pip-audit.requirements                             |  44 +-
 playwright/test.py                                 |  27 +-
 pyproject.toml                                     |   4 +-
 scripts/backfill_signing_keys.py                   |  81 +++
 scripts/check_migrations_immutable.py              |  48 +-
 scripts/check_templates.py                         |   2 +-
 scripts/ci/check_sbom_spec_parity.py               | 116 ++++
 scripts/ci/check_syft_cli_spec.sh                  |  21 +
 scripts/hints_import.py                            |   6 +-
 scripts/keys_import.py                             |   6 +-
 scripts/purge_recurring_task_history.py            | 167 +++++
 start-atr.sh                                       |   9 +-
 start-dev.sh                                       |   9 +-
 tests/docker-compose.yml                           |   6 +
 tests/e2e/announce/test_get.py                     |   7 +-
 tests/e2e/sbom/test_post.py                        |  16 +
 tests/unit/pgp_fixtures.py                         | 215 ++++++
 atr/filters.py => tests/unit/sboms.py              |  23 +-
 tests/unit/test_admin_catalog.py                   |  63 +-
 tests/unit/test_announce_deletion_order.py         |  22 +-
 .../test_get.py => unit/test_api_key_results.py}   |  25 +-
 tests/unit/test_api_release_announce.py            | 127 ++++
 tests/unit/test_api_sbom_generate.py               | 220 ++++++
 tests/unit/test_api_vote_start.py                  | 104 +++
 tests/unit/test_archive_root_variants.py           |  19 +-
 tests/unit/test_archived_project_writer_guards.py  |  20 +
 tests/unit/test_asf_yaml_export.py                 |  29 +-
 tests/unit/test_attestable.py                      |  23 +-
 tests/unit/test_blueprints.py                      |   9 +
 tests/unit/test_catalog.py                         |  65 +-
 tests/unit/test_catalogue_diff.py                  | 458 +++++++++++++
 tests/unit/test_catalogue_import_apply.py          | 514 ++++++++++++++
 tests/unit/test_checks_compare.py                  |  58 +-
 tests/unit/test_checks_license.py                  |  54 +-
 tests/unit/test_checks_rat.py                      |  38 +-
 tests/unit/test_checks_signature.py                | 120 ++++
 tests/unit/test_checks_table.py                    |  43 +-
 tests/unit/test_classify.py                        |  45 +-
 tests/unit/test_committees_view.py                 |  88 +++
 tests/unit/test_construct_announce.py              |  71 +-
 tests/unit/test_create_revision.py                 | 132 ++++
 tests/unit/test_cycles.py                          |  72 ++
 tests/unit/test_distribution_maven_guidance.py     |   4 +-
 tests/unit/test_download_path_suffix.py            |  45 +-
 tests/unit/test_get_projects.py                    | 125 ++++
 tests/unit/test_get_root.py                        | 130 ++++
 tests/unit/test_get_sbom_tally.py                  |  51 ++
 tests/unit/test_keys_delete.py                     |  89 ++-
 tests/unit/test_keys_post.py                       |  34 +-
 tests/unit/test_keys_shared.py                     |  42 ++
 tests/unit/test_keys_writer.py                     | 252 ++++---
 tests/unit/test_ldap.py                            |  87 +++
 tests/unit/test_mail.py                            |  59 ++
 tests/unit/test_manager_terminate.py               |  78 +++
 tests/unit/test_message.py                         |  60 ++
 tests/unit/test_paths.py                           |  39 +-
 tests/unit/test_pgp.py                             | 248 +++++++
 .../unit/test_policy_announce_default.py           |  24 +-
 tests/unit/test_policy_update_args.py              |   4 +-
 tests/unit/test_policy_writer.py                   |  49 ++
 tests/unit/test_pubsub.py                          | 136 ++++
 tests/unit/test_quarantine_task.py                 |  18 +-
 tests/unit/test_release_archive_approval.py        | 159 +++++
 tests/unit/test_release_notification.py            |  22 +-
 tests/unit/test_release_writer_archive.py          | 149 ++---
 tests/unit/test_release_writer_hashgen.py          |  95 +--
 tests/unit/test_report_reconciliation.py           |  56 ++
 tests/unit/test_safe_types.py                      |   6 +
 tests/unit/test_sbom_candidates.py                 |  49 ++
 tests/unit/test_sbom_components.py                 |  52 ++
 tests/unit/test_sbom_licenses.py                   | 158 +++++
 tests/unit/test_sbom_osv.py                        | 141 ++++
 tests/unit/test_sessions.py                        |  56 ++
 tests/unit/test_signature_provenance.py            |  61 +-
 tests/unit/test_source_artifact_check.py           |  82 ++-
 tests/unit/test_svn_errors.py                      | 155 +++++
 tests/unit/test_svn_publish_announce.py            | 127 +++-
 tests/unit/test_svn_publish_helpers.py             | 131 +++-
 tests/unit/test_svn_publish_start_vote.py          |  50 ++
 tests/unit/test_svn_publish_writer.py              |  80 ++-
 tests/unit/test_task_finalise.py                   | 129 ++++
 tests/unit/test_template_variables.py              |  75 +++
 tests/unit/test_topnav.py                          | 171 +++++
 tests/unit/test_user.py                            |  63 ++
 tests/unit/test_vote_duration_zero.py              |  67 ++
 tests/unit/test_vote_rendering.py                  |  32 +
 tests/unit/test_vote_resolution.py                 |   2 +
 tests/unit/test_worker_complete.py                 | 107 +++
 tests/unit/test_worker_defer.py                    | 113 ++++
 tests/unit/test_workflow_jti_replay.py             | 139 ++++
 uv.lock                                            | 614 +++++++++--------
 286 files changed, 16998 insertions(+), 3866 deletions(-)
 create mode 100644 atr/admin/templates/catalog-import-preview.html
 create mode 100644 atr/admin/templates/catalog-import.html
 copy atr/admin/templates/{update-keys.html => update-catalog-site.html} (72%)
 create mode 100644 atr/catalog_site.py
 delete mode 100644 atr/docs/components.md
 create mode 100644 atr/docs/resource-management.md
 create mode 100644 atr/docs/terminology.md
 delete mode 100644 atr/get/published.py
 create mode 100644 atr/pgp.py
 create mode 100644 atr/post/file.py
 create mode 100644 atr/sbom/components.py
 copy atr/sbom/models/{patch.py => components.py} (57%)
 create mode 100644 atr/shared/catalogue_diff.py
 create mode 100644 atr/shared/catalogue_import.py
 create mode 100644 atr/shared/catalogue_rows.py
 create mode 100644 atr/storage/writers/banner.py
 create mode 100644 atr/tasks/catalog_site.py
 create mode 100644 atr/tasks/checks/sbom.py
 create mode 100644 atr/templates/catalog_site/_project_back_link.html
 create mode 100644 atr/templates/catalog_site/_release_list.html
 create mode 100644 atr/templates/catalog_site/_unreviewed.html
 create mode 100644 atr/templates/catalog_site/_version.html
 create mode 100644 atr/templates/catalog_site/attic.html
 create mode 100644 atr/templates/catalog_site/catalog_site_base.html
 create mode 100644 atr/templates/catalog_site/incubator.html
 create mode 100644 atr/templates/catalog_site/index.html
 create mode 100644 atr/templates/catalog_site/project.html
 create mode 100644 atr/templates/catalog_site/project_archive.html
 create mode 100644 atr/templates/catalog_site/release.html
 copy migrations/versions/{0099_2026.06.29_ca1ec0de.py => 0105_2026.07.09_3414415d.py} (52%)
 copy migrations/versions/{0099_2026.06.29_ca1ec0de.py => 0106_2026.07.10_805ec889.py} (59%)
 create mode 100644 migrations/versions/0107_2026.07.14_cb5f8249.py
 copy migrations/versions/{0099_2026.06.29_ca1ec0de.py => 0108_2026.07.14_ba53474d.py} (60%)
 copy migrations/versions/{0099_2026.06.29_ca1ec0de.py => 0109_2026.07.15_91de479d.py} (62%)
 create mode 100644 migrations/versions/0110_2026.07.20_7c41ab93.py
 copy migrations/versions/{0099_2026.06.29_ca1ec0de.py => 0111_2026.07.22_f67fc10f.py} (60%)
 copy migrations/versions/{0099_2026.06.29_ca1ec0de.py => 0112_2026.07.22_d374db02.py} (60%)
 create mode 100644 migrations/versions/0113_2026.07.28_dd069840.py
 copy migrations/versions/{0099_2026.06.29_ca1ec0de.py => 0114_2026.07.29_4a3ce951.py} (53%)
 create mode 100644 scripts/backfill_signing_keys.py
 create mode 100755 scripts/ci/check_sbom_spec_parity.py
 create mode 100755 scripts/ci/check_syft_cli_spec.sh
 create mode 100644 scripts/purge_recurring_task_history.py
 create mode 100644 tests/unit/pgp_fixtures.py
 copy atr/filters.py => tests/unit/sboms.py (57%)
 copy tests/{e2e/merge/test_get.py => unit/test_api_key_results.py} (58%)
 create mode 100644 tests/unit/test_api_release_announce.py
 create mode 100644 tests/unit/test_api_sbom_generate.py
 create mode 100644 tests/unit/test_api_vote_start.py
 create mode 100644 tests/unit/test_catalogue_diff.py
 create mode 100644 tests/unit/test_catalogue_import_apply.py
 create mode 100644 tests/unit/test_committees_view.py
 create mode 100644 tests/unit/test_get_projects.py
 create mode 100644 tests/unit/test_get_root.py
 create mode 100644 tests/unit/test_get_sbom_tally.py
 create mode 100644 tests/unit/test_keys_shared.py
 create mode 100644 tests/unit/test_manager_terminate.py
 create mode 100644 tests/unit/test_pgp.py
 copy atr/tasks/task.py => tests/unit/test_policy_announce_default.py (54%)
 create mode 100644 tests/unit/test_pubsub.py
 create mode 100644 tests/unit/test_release_archive_approval.py
 create mode 100644 tests/unit/test_report_reconciliation.py
 create mode 100644 tests/unit/test_sbom_candidates.py
 create mode 100644 tests/unit/test_sbom_components.py
 create mode 100644 tests/unit/test_sbom_licenses.py
 create mode 100644 tests/unit/test_sbom_osv.py
 create mode 100644 tests/unit/test_svn_errors.py
 create mode 100644 tests/unit/test_task_finalise.py
 create mode 100644 tests/unit/test_template_variables.py
 create mode 100644 tests/unit/test_topnav.py
 create mode 100644 tests/unit/test_vote_duration_zero.py
 create mode 100644 tests/unit/test_worker_complete.py
 create mode 100644 tests/unit/test_worker_defer.py
 create mode 100644 tests/unit/test_workflow_jti_replay.py


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@tooling.apache.org
For additional commands, e-mail: commits-help@tooling.apache.org