yaga-cli 0.2.1__tar.gz → 0.3.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (401) hide show
  1. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/.github/workflows/ci.yml +2 -2
  2. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/.github/workflows/commit-adoption-qualification.yml +1 -1
  3. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/.github/workflows/commit-quality.yml +1 -1
  4. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/.github/workflows/docs.yml +1 -1
  5. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/.github/workflows/release.yml +6 -6
  6. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/AGENTS.md +32 -3
  7. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/CONTRIBUTING.md +58 -4
  8. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/PKG-INFO +2 -1
  9. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/README.md +1 -0
  10. yaga_cli-0.3.0/_typos.toml +3 -0
  11. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/docs/changelog.md +51 -0
  12. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/docs/commands.md +3 -0
  13. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/docs/commit-policy.md +34 -5
  14. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/docs/configuration.md +11 -2
  15. yaga_cli-0.3.0/docs/designs/examples/test-planning/django-ray.toml +234 -0
  16. yaga_cli-0.3.0/docs/designs/examples/test-planning/polyglot.toml +138 -0
  17. yaga_cli-0.3.0/docs/designs/experiments/django-ray-full-shadow-result.json +242 -0
  18. yaga_cli-0.3.0/docs/designs/experiments/django-ray-shadow-replay/cohort.json +219 -0
  19. yaga_cli-0.3.0/docs/designs/experiments/django-ray-shadow-replay/observations-01.json +1804 -0
  20. yaga_cli-0.3.0/docs/designs/experiments/django-ray-shadow-replay/observations-02.json +1700 -0
  21. yaga_cli-0.3.0/docs/designs/experiments/django-ray-shadow-replay/observations-03.json +1817 -0
  22. yaga_cli-0.3.0/docs/designs/experiments/django-ray-shadow-replay/observations-04.json +1728 -0
  23. yaga_cli-0.3.0/docs/designs/experiments/django-ray-shadow-replay/observations-05.json +1860 -0
  24. yaga_cli-0.3.0/docs/designs/experiments/django-ray-shadow-replay/observations-06.json +295 -0
  25. yaga_cli-0.3.0/docs/designs/experiments/django-ray-shadow-replay/report.json +281 -0
  26. yaga_cli-0.3.0/docs/designs/experiments/django-ray-shadow-replay.md +130 -0
  27. yaga_cli-0.3.0/docs/designs/test-planning.md +812 -0
  28. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/docs/getting-started.md +1 -1
  29. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/docs/github-actions.md +16 -4
  30. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/docs/index.md +2 -0
  31. yaga_cli-0.3.0/docs/test-planning-handoff.md +328 -0
  32. yaga_cli-0.3.0/docs/test-planning.md +281 -0
  33. yaga_cli-0.3.0/examples/test-planning/fixed_handoff.py +152 -0
  34. yaga_cli-0.3.0/examples/test-planning/replay_django_ray.py +431 -0
  35. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/pyproject.toml +1 -1
  36. yaga_cli-0.3.0/release-notes.md +50 -0
  37. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/scripts/check_build.py +431 -0
  38. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/scripts/prepare_commit_action_control.py +10 -1
  39. yaga_cli-0.3.0/src/yaga/changes/git.py +20 -0
  40. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/changes/models.py +9 -27
  41. yaga_cli-0.3.0/src/yaga/changes/patterns.py +57 -0
  42. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/cli.py +2 -0
  43. yaga_cli-0.3.0/src/yaga/commands/test.py +220 -0
  44. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/commits/config.py +12 -0
  45. yaga_cli-0.3.0/src/yaga/commits/dependabot.py +119 -0
  46. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/commits/github_event.py +30 -12
  47. yaga_cli-0.3.0/src/yaga/commits/github_signature.py +268 -0
  48. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/commits/models.py +1 -0
  49. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/commits/reporting.py +3 -0
  50. yaga_cli-0.3.0/src/yaga/files.py +48 -0
  51. yaga_cli-0.2.1/src/yaga/changes/git.py → yaga_cli-0.3.0/src/yaga/git/changes.py +51 -20
  52. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/git/runtime.py +31 -11
  53. yaga_cli-0.2.1/src/yaga/changes/patterns.py → yaga_cli-0.3.0/src/yaga/path_patterns.py +83 -60
  54. yaga_cli-0.3.0/src/yaga/test_planning/__init__.py +1 -0
  55. yaga_cli-0.3.0/src/yaga/test_planning/diagnostics.py +366 -0
  56. yaga_cli-0.3.0/src/yaga/test_planning/evaluation.py +349 -0
  57. yaga_cli-0.3.0/src/yaga/test_planning/evaluation_service.py +95 -0
  58. yaga_cli-0.3.0/src/yaga/test_planning/git.py +55 -0
  59. yaga_cli-0.3.0/src/yaga/test_planning/handoff.py +208 -0
  60. yaga_cli-0.3.0/src/yaga/test_planning/limits.py +21 -0
  61. yaga_cli-0.3.0/src/yaga/test_planning/models.py +228 -0
  62. yaga_cli-0.3.0/src/yaga/test_planning/planner.py +281 -0
  63. yaga_cli-0.3.0/src/yaga/test_planning/policy.py +164 -0
  64. yaga_cli-0.3.0/src/yaga/test_planning/reporting.py +172 -0
  65. yaga_cli-0.3.0/src/yaga/test_planning/reports.py +150 -0
  66. yaga_cli-0.3.0/src/yaga/test_planning/results.py +269 -0
  67. yaga_cli-0.3.0/src/yaga/test_planning/selection.py +49 -0
  68. yaga_cli-0.3.0/src/yaga/test_planning/service.py +45 -0
  69. yaga_cli-0.3.0/src/yaga/test_planning/source.py +73 -0
  70. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/version_requirement.py +1 -1
  71. yaga_cli-0.3.0/tests/fixtures/github-signatures/.gitattributes +4 -0
  72. yaga_cli-0.3.0/tests/fixtures/github-signatures/.typos.toml +3 -0
  73. yaga_cli-0.3.0/tests/fixtures/github-signatures/README.md +45 -0
  74. yaga_cli-0.3.0/tests/fixtures/github-signatures/dependabot-setup-uv.commit +37 -0
  75. yaga_cli-0.3.0/tests/fixtures/github-signatures/dependabot-urllib3-parent.commit +20 -0
  76. yaga_cli-0.3.0/tests/fixtures/github-signatures/dependabot-urllib3.commit +37 -0
  77. yaga_cli-0.3.0/tests/fixtures/github-signatures/web-flow.asc +41 -0
  78. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/test_change_git.py +60 -15
  79. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/test_cli.py +18 -4
  80. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/test_commit_action.py +94 -5
  81. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/test_commit_action_controls.py +11 -2
  82. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/test_commit_config.py +41 -0
  83. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/test_commit_reporting.py +15 -0
  84. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/test_commit_trusted_policy.py +19 -2
  85. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/test_config_init.py +10 -0
  86. yaga_cli-0.3.0/tests/test_dependabot_commit_filter.py +383 -0
  87. yaga_cli-0.3.0/tests/test_github_commit_signature.py +373 -0
  88. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/test_github_pull_request.py +15 -5
  89. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/test_installation.py +2 -2
  90. yaga_cli-0.3.0/tests/test_path_patterns.py +180 -0
  91. yaga_cli-0.3.0/tests/test_regular_file_prefix.py +115 -0
  92. yaga_cli-0.3.0/tests/test_test_planning_cli.py +450 -0
  93. yaga_cli-0.3.0/tests/test_test_planning_diagnostics.py +494 -0
  94. yaga_cli-0.3.0/tests/test_test_planning_evaluate_cli.py +475 -0
  95. yaga_cli-0.3.0/tests/test_test_planning_evaluation.py +471 -0
  96. yaga_cli-0.3.0/tests/test_test_planning_examples.py +665 -0
  97. yaga_cli-0.3.0/tests/test_test_planning_git.py +283 -0
  98. yaga_cli-0.3.0/tests/test_test_planning_handoff.py +545 -0
  99. yaga_cli-0.3.0/tests/test_test_planning_handoff_example.py +106 -0
  100. yaga_cli-0.3.0/tests/test_test_planning_planner.py +350 -0
  101. yaga_cli-0.3.0/tests/test_test_planning_policy.py +532 -0
  102. yaga_cli-0.3.0/tests/test_test_planning_replay.py +563 -0
  103. yaga_cli-0.3.0/tests/test_test_planning_reporting.py +490 -0
  104. yaga_cli-0.3.0/tests/test_test_planning_results.py +277 -0
  105. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/test_tooling.py +30 -0
  106. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/uv.lock +1 -1
  107. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/zensical.toml +3 -0
  108. yaga_cli-0.2.1/release-notes.md +0 -21
  109. yaga_cli-0.2.1/src/yaga/files.py +0 -13
  110. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/.gitattributes +0 -0
  111. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/.github/dependabot.yml +0 -0
  112. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/.github/workflows/commit-policy.yml +0 -0
  113. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/.gitignore +0 -0
  114. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/.pre-commit-hooks.yaml +0 -0
  115. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/.yaga/branch-policy.toml +0 -0
  116. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/.yaga/change-policy.toml +0 -0
  117. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/.yaga/checks/ci.toml +0 -0
  118. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/.yaga/mode-policy.toml +0 -0
  119. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/.yaga/path-policy.toml +0 -0
  120. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/.yaga/size-policy.toml +0 -0
  121. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/.yaga/tree-policy.toml +0 -0
  122. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/CHANGELOG.md +0 -0
  123. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/LICENSE +0 -0
  124. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/Makefile +0 -0
  125. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/SECURITY.md +0 -0
  126. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/action.yml +0 -0
  127. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/actions/commit-check/action.yml +0 -0
  128. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/docs/agent-review-gate.md +0 -0
  129. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/docs/assets/branding/isometric_terminal_y_logo.png +0 -0
  130. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/docs/assets/branding/isometric_terminal_y_logo_transparent.png +0 -0
  131. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/docs/assets/branding/yaga_cli_brand_concept_board.png +0 -0
  132. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/docs/branch-policy.md +0 -0
  133. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/docs/change-policy.md +0 -0
  134. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/docs/ci-adoption.md +0 -0
  135. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/docs/commit-policy-direction.md +0 -0
  136. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/docs/commit-quality.md +0 -0
  137. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/docs/contributing.md +0 -0
  138. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/docs/github-review-adapter.md +0 -0
  139. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/docs/install.ps1 +0 -0
  140. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/docs/install.sh +0 -0
  141. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/docs/mode-policy.md +0 -0
  142. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/docs/path-policy.md +0 -0
  143. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/docs/recipes.md +0 -0
  144. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/docs/releasing.md +0 -0
  145. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/docs/repository-checks.md +0 -0
  146. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/docs/repository-plans.md +0 -0
  147. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/docs/security.md +0 -0
  148. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/docs/size-policy.md +0 -0
  149. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/docs/stylesheets/extra.css +0 -0
  150. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/docs/tree-policy.md +0 -0
  151. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/docs/troubleshooting.md +0 -0
  152. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/docs/usage.md +0 -0
  153. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/docs/workflow-checks.md +0 -0
  154. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/examples/agent-review-policy.toml +0 -0
  155. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/examples/agent-review-results.json +0 -0
  156. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/examples/agent-review.yml +0 -0
  157. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/examples/commit-policy.yml +0 -0
  158. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/examples/review-policy.yml +0 -0
  159. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/overrides/404.html +0 -0
  160. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/scripts/check_description.py +0 -0
  161. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/scripts/check_docs.py +0 -0
  162. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/scripts/check_release.py +0 -0
  163. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/scripts/composite_smoke_python +0 -0
  164. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/__init__.py +0 -0
  165. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/__main__.py +0 -0
  166. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/_update_worker.py +0 -0
  167. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/action.py +0 -0
  168. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/action_cli.py +0 -0
  169. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/agent_review/__init__.py +0 -0
  170. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/agent_review/evaluation.py +0 -0
  171. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/agent_review/github/__init__.py +0 -0
  172. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/agent_review/github/boundary.py +0 -0
  173. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/agent_review/github/candidate.py +0 -0
  174. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/agent_review/github/constants.py +0 -0
  175. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/agent_review/github/events.py +0 -0
  176. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/agent_review/github/evidence.py +0 -0
  177. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/agent_review/github/gate.py +0 -0
  178. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/agent_review/github/publication.py +0 -0
  179. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/agent_review/github/requests.py +0 -0
  180. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/agent_review/github/runs.py +0 -0
  181. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/agent_review/github/runtime.py +0 -0
  182. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/agent_review/plan.py +0 -0
  183. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/agent_review/policy.py +0 -0
  184. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/agent_review/results.py +0 -0
  185. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/agent_review/runtime.py +0 -0
  186. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/branches/__init__.py +0 -0
  187. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/branches/checker.py +0 -0
  188. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/branches/models.py +0 -0
  189. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/branches/patterns.py +0 -0
  190. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/branches/policy.py +0 -0
  191. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/branches/reporting.py +0 -0
  192. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/branches/service.py +0 -0
  193. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/changes/__init__.py +0 -0
  194. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/changes/checker.py +0 -0
  195. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/changes/policy.py +0 -0
  196. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/changes/reporting.py +0 -0
  197. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/changes/service.py +0 -0
  198. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/commands/__init__.py +0 -0
  199. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/commands/branch.py +0 -0
  200. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/commands/change.py +0 -0
  201. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/commands/commit.py +0 -0
  202. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/commands/config.py +0 -0
  203. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/commands/gate.py +0 -0
  204. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/commands/github.py +0 -0
  205. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/commands/mode.py +0 -0
  206. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/commands/path.py +0 -0
  207. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/commands/repo.py +0 -0
  208. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/commands/self_manage.py +0 -0
  209. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/commands/size.py +0 -0
  210. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/commands/tree.py +0 -0
  211. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/commands/workflow.py +0 -0
  212. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/commit_action_cli.py +0 -0
  213. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/commit_action_runtime.py +0 -0
  214. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/commits/__init__.py +0 -0
  215. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/commits/checker.py +0 -0
  216. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/commits/config_explain.py +0 -0
  217. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/commits/config_init.py +0 -0
  218. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/commits/content_policy.py +0 -0
  219. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/commits/git.py +0 -0
  220. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/commits/github_reporting.py +0 -0
  221. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/commits/parser.py +0 -0
  222. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/commits/policy.py +0 -0
  223. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/commits/quality.py +0 -0
  224. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/commits/service.py +0 -0
  225. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/commits/severity.py +0 -0
  226. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/commits/sources.py +0 -0
  227. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/commits/template.py +0 -0
  228. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/commits/trusted_policy.py +0 -0
  229. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/commits/typos.py +0 -0
  230. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/config_scope.py +0 -0
  231. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/errors.py +0 -0
  232. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/git/__init__.py +0 -0
  233. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/git/process.py +0 -0
  234. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/git/tree.py +0 -0
  235. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/github.py +0 -0
  236. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/models.py +0 -0
  237. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/modes/__init__.py +0 -0
  238. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/modes/checker.py +0 -0
  239. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/modes/git.py +0 -0
  240. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/modes/models.py +0 -0
  241. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/modes/patterns.py +0 -0
  242. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/modes/policy.py +0 -0
  243. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/modes/reporting.py +0 -0
  244. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/modes/service.py +0 -0
  245. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/paths/__init__.py +0 -0
  246. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/paths/checker.py +0 -0
  247. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/paths/git.py +0 -0
  248. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/paths/models.py +0 -0
  249. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/paths/policy.py +0 -0
  250. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/paths/reporting.py +0 -0
  251. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/paths/service.py +0 -0
  252. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/repository/__init__.py +0 -0
  253. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/repository/checker.py +0 -0
  254. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/repository/models.py +0 -0
  255. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/repository/plan.py +0 -0
  256. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/repository/reporting.py +0 -0
  257. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/self_update.py +0 -0
  258. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/sizes/__init__.py +0 -0
  259. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/sizes/checker.py +0 -0
  260. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/sizes/git.py +0 -0
  261. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/sizes/models.py +0 -0
  262. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/sizes/patterns.py +0 -0
  263. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/sizes/policy.py +0 -0
  264. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/sizes/reporting.py +0 -0
  265. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/sizes/service.py +0 -0
  266. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/status.py +0 -0
  267. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/trees/__init__.py +0 -0
  268. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/trees/checker.py +0 -0
  269. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/trees/git.py +0 -0
  270. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/trees/models.py +0 -0
  271. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/trees/patterns.py +0 -0
  272. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/trees/policy.py +0 -0
  273. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/trees/reporting.py +0 -0
  274. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/trees/service.py +0 -0
  275. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/workflows/__init__.py +0 -0
  276. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/workflows/actionlint_runtime.py +0 -0
  277. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/workflows/actionlint_snapshot.py +0 -0
  278. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/workflows/checker.py +0 -0
  279. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/workflows/inputs.py +0 -0
  280. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/workflows/lint.py +0 -0
  281. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/workflows/models.py +0 -0
  282. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/workflows/parser.py +0 -0
  283. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/workflows/references.py +0 -0
  284. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/workflows/reporting.py +0 -0
  285. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/workflows/security.py +0 -0
  286. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/workflows/security_facts.py +0 -0
  287. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/workflows/security_models.py +0 -0
  288. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/workflows/security_reporting.py +0 -0
  289. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/workflows/security_rules.py +0 -0
  290. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/src/yaga/workflows/yaml.py +0 -0
  291. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/__init__.py +0 -0
  292. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/codex_support.py +0 -0
  293. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/fixtures/commit_consumer_parity.json +0 -0
  294. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/test_action.py +0 -0
  295. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/test_agent_review_cli.py +0 -0
  296. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/test_agent_review_evaluation.py +0 -0
  297. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/test_agent_review_plan.py +0 -0
  298. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/test_agent_review_policy.py +0 -0
  299. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/test_agent_review_results.py +0 -0
  300. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/test_branch_checker.py +0 -0
  301. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/test_branch_cli.py +0 -0
  302. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/test_branch_models.py +0 -0
  303. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/test_branch_patterns.py +0 -0
  304. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/test_branch_policy.py +0 -0
  305. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/test_branch_reporting.py +0 -0
  306. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/test_branch_service.py +0 -0
  307. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/test_change_checker.py +0 -0
  308. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/test_change_cli.py +0 -0
  309. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/test_change_patterns.py +0 -0
  310. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/test_change_policy.py +0 -0
  311. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/test_change_reporting.py +0 -0
  312. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/test_codex_events.py +0 -0
  313. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/test_codex_evidence.py +0 -0
  314. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/test_codex_evidence_literals.py +0 -0
  315. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/test_codex_gate.py +0 -0
  316. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/test_codex_publication.py +0 -0
  317. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/test_codex_requests.py +0 -0
  318. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/test_codex_runs.py +0 -0
  319. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/test_codex_runtime.py +0 -0
  320. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/test_commit_body_customization.py +0 -0
  321. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/test_commit_checker.py +0 -0
  322. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/test_commit_consumer_policy.py +0 -0
  323. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/test_commit_content_policy.py +0 -0
  324. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/test_commit_explicit_inputs.py +0 -0
  325. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/test_commit_git.py +0 -0
  326. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/test_commit_parser.py +0 -0
  327. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/test_commit_quality.py +0 -0
  328. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/test_commit_quality_workflow.py +0 -0
  329. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/test_commit_service.py +0 -0
  330. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/test_commit_sources.py +0 -0
  331. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/test_commit_template.py +0 -0
  332. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/test_commit_typos.py +0 -0
  333. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/test_commit_warnings.py +0 -0
  334. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/test_config_workflows.py +0 -0
  335. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/test_consumer_policy_entrypoints.py +0 -0
  336. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/test_description.py +0 -0
  337. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/test_docs_links.py +0 -0
  338. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/test_files.py +0 -0
  339. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/test_git_runtime.py +0 -0
  340. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/test_git_tree.py +0 -0
  341. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/test_github.py +0 -0
  342. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/test_github_reporting.py +0 -0
  343. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/test_installers.py +0 -0
  344. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/test_mode_checker.py +0 -0
  345. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/test_mode_cli.py +0 -0
  346. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/test_mode_git.py +0 -0
  347. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/test_mode_models.py +0 -0
  348. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/test_mode_patterns.py +0 -0
  349. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/test_mode_policy.py +0 -0
  350. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/test_mode_reporting.py +0 -0
  351. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/test_mode_service.py +0 -0
  352. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/test_models.py +0 -0
  353. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/test_path_checker.py +0 -0
  354. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/test_path_cli.py +0 -0
  355. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/test_path_git.py +0 -0
  356. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/test_path_models.py +0 -0
  357. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/test_path_policy.py +0 -0
  358. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/test_path_reporting.py +0 -0
  359. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/test_path_service.py +0 -0
  360. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/test_plain_messages.py +0 -0
  361. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/test_pr_proposed_message.py +0 -0
  362. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/test_release.py +0 -0
  363. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/test_repo_cli.py +0 -0
  364. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/test_repository_checker.py +0 -0
  365. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/test_repository_contract.py +0 -0
  366. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/test_repository_models.py +0 -0
  367. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/test_repository_plan.py +0 -0
  368. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/test_repository_reporting.py +0 -0
  369. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/test_size_checker.py +0 -0
  370. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/test_size_cli.py +0 -0
  371. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/test_size_git.py +0 -0
  372. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/test_size_models.py +0 -0
  373. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/test_size_patterns.py +0 -0
  374. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/test_size_policy.py +0 -0
  375. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/test_size_reporting.py +0 -0
  376. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/test_size_service.py +0 -0
  377. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/test_status.py +0 -0
  378. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/test_tree_checker.py +0 -0
  379. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/test_tree_cli.py +0 -0
  380. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/test_tree_git.py +0 -0
  381. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/test_tree_models.py +0 -0
  382. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/test_tree_patterns.py +0 -0
  383. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/test_tree_policy.py +0 -0
  384. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/test_tree_reporting.py +0 -0
  385. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/test_tree_service.py +0 -0
  386. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/test_workflow_checker.py +0 -0
  387. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/test_workflow_inputs.py +0 -0
  388. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/test_workflow_lint.py +0 -0
  389. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/test_workflow_lint_hardening.py +0 -0
  390. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/test_workflow_lint_reporting.py +0 -0
  391. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/test_workflow_provider_inputs.py +0 -0
  392. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/test_workflow_references.py +0 -0
  393. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/test_workflow_reporting.py +0 -0
  394. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/test_workflow_security_cli.py +0 -0
  395. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/test_workflow_security_facts.py +0 -0
  396. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/test_workflow_security_models.py +0 -0
  397. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/test_workflow_security_reporting.py +0 -0
  398. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/test_workflow_security_rules.py +0 -0
  399. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/test_workflow_security_selection.py +0 -0
  400. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/test_workflow_security_service.py +0 -0
  401. {yaga_cli-0.2.1 → yaga_cli-0.3.0}/tests/test_workflow_yaml.py +0 -0
@@ -25,7 +25,7 @@ jobs:
25
25
  ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
26
26
  fetch-depth: 0
27
27
  persist-credentials: false
28
- - uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0
28
+ - uses: astral-sh/setup-uv@1c37ad07a6a961277cf70c0d37d6f313000f5884 # v10.3.0
29
29
  with:
30
30
  enable-cache: true
31
31
  version: "0.13.0"
@@ -150,7 +150,7 @@ jobs:
150
150
  - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
151
151
  with:
152
152
  persist-credentials: false
153
- - uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0
153
+ - uses: astral-sh/setup-uv@1c37ad07a6a961277cf70c0d37d6f313000f5884 # v10.3.0
154
154
  with:
155
155
  enable-cache: true
156
156
  version: "0.13.0"
@@ -15,7 +15,7 @@ jobs:
15
15
  strategy:
16
16
  fail-fast: false
17
17
  matrix:
18
- scenario: [valid, invalid, stale, nondefault, nondefault-invalid, advanced-main, typos-valid, typos-message, typos-title, typos-missing, typos-broken, typos-bot, typos-author-bot, typos-author-unlisted, typos-author-stale]
18
+ scenario: [valid, invalid, stale, nondefault, nondefault-invalid, advanced-main, typos-valid, typos-message, typos-title, typos-missing, typos-broken, typos-bot, typos-bot-unsigned, typos-author-bot, typos-author-unlisted, typos-author-stale]
19
19
  steps:
20
20
  - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
21
21
  with:
@@ -33,7 +33,7 @@ jobs:
33
33
  ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
34
34
  fetch-depth: 0
35
35
  persist-credentials: false
36
- - uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0
36
+ - uses: astral-sh/setup-uv@1c37ad07a6a961277cf70c0d37d6f313000f5884 # v10.3.0
37
37
  with:
38
38
  enable-cache: true
39
39
  version: "0.12.7"
@@ -30,7 +30,7 @@ jobs:
30
30
  with:
31
31
  persist-credentials: false
32
32
  - uses: actions/configure-pages@45bfe0192ca1faeb007ade9deae92b16b8254a0d # v6
33
- - uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0
33
+ - uses: astral-sh/setup-uv@1c37ad07a6a961277cf70c0d37d6f313000f5884 # v10.3.0
34
34
  with:
35
35
  version: "0.12.7"
36
36
  - run: uv sync --frozen --group dev --python 3.12
@@ -32,7 +32,7 @@ jobs:
32
32
  run: |
33
33
  test "$(git rev-parse HEAD)" = "$EVENT_SHA"
34
34
  git merge-base --is-ancestor HEAD "refs/remotes/origin/$DEFAULT_BRANCH"
35
- - uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0
35
+ - uses: astral-sh/setup-uv@1c37ad07a6a961277cf70c0d37d6f313000f5884 # v10.3.0
36
36
  with:
37
37
  version: "0.12.7"
38
38
  enable-cache: false
@@ -51,14 +51,14 @@ jobs:
51
51
  run: cargo install typos-cli --version 1.49.0 --locked
52
52
  - name: Run the full gate and retain its validated distributions
53
53
  run: uv run --frozen make ci BUILD_ARGS="--output-dir dist"
54
- - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
54
+ - uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2
55
55
  with:
56
56
  name: distributions
57
57
  path: dist/
58
58
  if-no-files-found: error
59
59
  retention-days: 7
60
60
 
61
- - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
61
+ - uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2
62
62
  with:
63
63
  name: release-notes
64
64
  path: release-notes.md
@@ -77,7 +77,7 @@ jobs:
77
77
  permissions:
78
78
  id-token: write
79
79
  steps:
80
- - uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
80
+ - uses: actions/download-artifact@9000827ccba6bdab643e8b6fd33ac0654aef8333 # v8.0.2
81
81
  with:
82
82
  name: distributions
83
83
  path: dist/
@@ -92,11 +92,11 @@ jobs:
92
92
  permissions:
93
93
  contents: write
94
94
  steps:
95
- - uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
95
+ - uses: actions/download-artifact@9000827ccba6bdab643e8b6fd33ac0654aef8333 # v8.0.2
96
96
  with:
97
97
  name: distributions
98
98
  path: dist/
99
- - uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
99
+ - uses: actions/download-artifact@9000827ccba6bdab643e8b6fd33ac0654aef8333 # v8.0.2
100
100
  with:
101
101
  name: release-notes
102
102
  path: release-notes/
@@ -27,9 +27,19 @@ Agent review gate is the public review contract. Its current provider adapter re
27
27
  read-only commit Action after complete event, runner-context, checkout, configuration, and range
28
28
  validation. Require an exact strictly parsed PR author login `dependabot[bot]`, type `Bot`, and
29
29
  bounded positive ID. Never infer trusted bot identity from Git author/committer data, messages,
30
- titles, branches, actors, or footers. Emit skipped title and commit results with the stable
31
- `Dependabot pull request` reason; ordinary commit/repository checks and every other provider keep
32
- running.
30
+ titles, branches, actors, or footers. Narrow this already eligible quality exemption per commit
31
+ using bounded exact author/committer metadata compatibility. Keep the schema-v1 boolean
32
+ `dependabot-require-github-signature` defaulted to `true`: additionally verify each skipped
33
+ commit's exact object bytes offline against the pinned GitHub signing key using a trusted
34
+ bounded `gpgv` process and private keyring. Missing, failed, unsupported, or over-budget
35
+ verification runs normal checks. `false` retains the forgeable per-commit metadata filter only.
36
+ Ordinary human additions and human rebases must be checked, and mixed PR titles/proposed
37
+ messages must be checked. The shared GitHub key is not exclusive Dependabot identity; never
38
+ use a Signed-off-by footer as proof, query a live badge, fetch keys, or import REST/token code.
39
+ The separate `skip-pull-request-authors` list remains a broad independent explicit exemption;
40
+ do not turn this option into generic bot identity configuration. Preserve the complete selected
41
+ SHA set and stable `Dependabot pull request` skip reason; ordinary commit/repository checks and
42
+ every other provider keep running.
33
43
  - Keep `scope-policy-by-type` as an empty-default schema-v1 mapping with at most 128 safe,
34
44
  case-insensitively unique type keys and closed presence-policy values. Overrides replace the
35
45
  global scope policy for full commits and PR titles; `scope-case` and `allowed-scopes` remain
@@ -100,6 +110,25 @@ Agent review gate is the public review contract. Its current provider adapter re
100
110
  Git paths, visible gitlink changes, disabled rename/external-diff/textconv behavior,
101
111
  unique-pattern caching, and the shared 10,000,000-unit matcher-work ceiling. Keep it out of both
102
112
  Action import graphs.
113
+ - Keep test planning installed-only under `src/yaga/test_planning/`. `test policy check` requires
114
+ one explicit file and no Git access. `test plan` requires explicit policy, profile, and exactly
115
+ one range or revision; revision-only planning requires a full profile. Never discover policy,
116
+ infer HEAD/event/branch/worktree state, fetch, or execute bindings. Keep the pure planner free
117
+ of I/O and collect Git sources through the shared bounded runtime and neutral changed-path
118
+ reader. Require complete range history, one three-dot merge base, and exact endpoint/comparison/
119
+ execution identities; allow shallow revision-only plans with the selected commit/tree present.
120
+ Reject graft overlays before and after collection. Preserve version-one semantic/envelope
121
+ contracts, exact policy-byte SHA-256, optional binding identity, canonical plan digests, complete
122
+ JSON within 4 MiB, at most 256 human reasons with exact omitted counts, and exits 0/2 only.
123
+ Planning never claims tests passed and stays outside repository plans and both Action graphs.
124
+ Keep executor handoff pure and installed-only: a complete fixed registry maps every suite exactly
125
+ once, preserves all variants and required capabilities, and binds executor-definition hashes.
126
+ Require non-null matching binding identity and independent expected policy/commit/tree identities.
127
+ Preserve version-one registry/handoff documents, complete 4 MiB bounded output, prerequisite
128
+ order, and one dispatch per suite even for a matrix. No commands or receipt evaluation enter this
129
+ API. Consumer adapters own real capability checks, execution, cancellation, acceptance, and cleanup.
130
+ Shadow jobs remain advisory and cannot change or cancel required CI. Measure first; set the
131
+ feedback-time adoption threshold before activation, after real pilot observations.
103
132
  - Keep `branch check` installed-only and require an explicit versioned policy plus exact short
104
133
  branch name. Never inspect Git, infer checkout or event state, discover policy, normalize full
105
134
  refs/remotes, or read environment in the domain layer. Schema v1 is a bounded ordered list of
@@ -45,11 +45,52 @@ fallback because the locked PyYAML release does not publish Python 3.15 wheels.
45
45
  ## CLI and commit policy contract
46
46
 
47
47
  The public installed command groups are `branch`, `change`, `commit`, `config`, `github`, `mode`,
48
- `path`, `repo`, `self`, `size`, `tree`, `workflow`, and `gate`.
48
+ `path`, `repo`, `self`, `size`, `test`, `tree`, `workflow`, and `gate`.
49
49
  Keep Typer declarations in `src/yaga/commands/`; keep commit parsing, policy, Git selection,
50
50
  configuration, GitHub event adaptation, and reporting in focused dependency-light modules under
51
51
  `src/yaga/commits/`. Domain behavior must remain directly testable without invoking Typer.
52
52
 
53
+ Test planning lives under `src/yaga/test_planning/`; see the [command guide](docs/test-planning.md)
54
+ and [design](docs/designs/test-planning.md). Keep explicit policy parsing separate from pure
55
+ selection, reuse the neutral bounded matcher in `src/yaga/path_patterns.py`, and keep both examples
56
+ executable in tests. `test policy check` requires one explicit file and no Git access; `test plan`
57
+ requires policy, profile, and exactly one explicit range or revision. A revision-only plan requires
58
+ a full profile. Keep Git collection in the source adapter, using `src/yaga/git/changes.py` and the
59
+ shared bounded runtime; the pure planner must not discover Git or environment state. Range plans
60
+ require complete history and exact endpoint/comparison/execution identities; revision plans need
61
+ their selected commit and tree only. Both reject graft overlays and never fetch. Preserve exact
62
+ policy-byte identity, optional binding SHA-256, canonical version-one plan digests, complete JSON
63
+ within 4 MiB, and at most 256 human reasons with exact omitted counts. Emit successful output on
64
+ stdout and bounded error envelopes on stderr, with exits 0/2 only. Planning never executes bindings
65
+ or claims tests passed. Keep both commands outside repository plans and both Action runtimes.
66
+
67
+ Keep executor handoff pure and installed-only. `ExecutorRegistry` must map the complete catalog
68
+ exactly once to fixed dispatch IDs, preserve every variant, satisfy declared capabilities, and
69
+ bind immutable executor-definition hashes. `create_handoff` requires a non-preview plan plus
70
+ independent expected policy/commit/tree identities; keep the version-one manifest/handoff shapes
71
+ and 4 MiB complete-output limit. No binding may become a command or credential source. Consumer
72
+ adapters own real capability checks, execution, cancellation, custom acceptance, and cleanup.
73
+ Keep shadow comparisons advisory and full shadow jobs isolated from required CI cancellation.
74
+ Do not claim measured savings or enable skips before actual observations, a documented adoption
75
+ threshold, and complete-result gating. See the [handoff guide](docs/test-planning-handoff.md).
76
+
77
+ Keep selection diagnostics pure and separate from the frozen plan/handoff/comparison documents.
78
+ Retain exact source and policy/registry/plan identities, distinguish selection breadth from the
79
+ reason for full mode, and expose paths bypassed by early full decisions. A missing baseline is
80
+ different from an explicitly empty selection. Strict offline decoding checks closed version-one
81
+ plan semantics and canonical digests; callers still own bounded JSON reads and duplicate-key
82
+ rejection. Complete diagnostic reports must fit within 4 MiB including the final newline.
83
+ Recorded reasons are not proof of dependency coverage, trusted origin, or runtime savings.
84
+
85
+ Keep version-one normalized test results and evaluation separate from frozen plan/handoff formats.
86
+ `test evaluate` requires explicit bounded plan/results files plus independent expected policy,
87
+ manifest, source, run, and aggregate-attempt identities. Keep the evaluator pure and validate every
88
+ selected variant and prerequisite; missing or non-passed work returns 1, malformed or mismatched
89
+ inputs return 2, and only complete passed obligations return 0. Bound complete JSON to 4 MiB and
90
+ diagnostics to 256 with exact omitted counts. Adapters own provenance, custom acceptance, cleanup,
91
+ and retry lineage; an artifact hash or green job alone cannot prove these. No execution, discovery,
92
+ Git access, provider API, required-CI changes, or selective activation belongs in evaluation.
93
+
53
94
  All revision-bound providers use the dependency-free runtime under `src/yaga/git/`. Keep repository
54
95
  and executable discovery, metadata and alternate-object-store boundaries, process execution,
55
96
  environment isolation, time and output limits, object identity parsing, and complete-history checks
@@ -90,9 +131,22 @@ opt-in alternative. Apply it only in the event-aware `github pull-request check`
90
131
  read-only commit Action. Identify Dependabot from one strictly parsed PR author record with exact
91
132
  `dependabot[bot]` login, `Bot` type, and a bounded positive ID; never from Git author/committer
92
133
  metadata, a title, message, branch, actor, or footer. Complete event/context/checkout/config/range
93
- validation before returning skipped title and commit results with the stable reason `Dependabot
94
- pull request`. Ordinary `commit check` and repository plans keep checking, and every non-commit
95
- provider remains independent.
134
+ validation before applying the stable `Dependabot pull request` skip reason. Narrow this already
135
+ eligible quality exemption per commit with bounded exact author/committer metadata compatibility.
136
+ `dependabot-require-github-signature` is a strict schema-v1 boolean defaulting to `true`; it affects
137
+ only this opt-in exemption. Require offline verification of each candidate's exact object bytes
138
+ against the pinned GitHub key using a trusted bounded `gpgv` process and private keyring. Missing
139
+ or failed verification, unsupported signatures, and resource exhaustion run normal checks.
140
+ An explicit `false` retains only the forgeable metadata filter. Check ordinary human additions
141
+ and human rebases, and check titles/proposed messages in mixed PRs. Require metadata for exactly
142
+ the previously selected SHA set, rejecting missing/duplicate records. Preserve that complete set
143
+ in reports. The shared GitHub key does not prove exclusive Dependabot identity. Do not fetch keys,
144
+ query live badges/revocation state, import REST/token code, or treat Signed-off-by as proof.
145
+ The explicit `skip-pull-request-authors` list remains a broad independent exemption, including for
146
+ human additions; do not generalize this option into Renovate/custom bot identity configuration.
147
+ Never use these exemptions to skip tests/security checks. Ordinary `commit check` and repository
148
+ plans keep checking, and every non-commit provider remains independent. Preserve frozen starter
149
+ bytes: omitted signature settings inherit the new default without rewriting existing starters.
96
150
  `breaking-markers` is a schema-v1 enum with `either` as its default. `either` accepts a header `!`,
97
151
  a recognized final `BREAKING CHANGE:` or `BREAKING-CHANGE:` footer, or both; `paired` requires both
98
152
  markers or neither and reports `breaking.marker-pair` for exactly one. Apply marker pairing only to
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: yaga-cli
3
- Version: 0.2.1
3
+ Version: 0.3.0
4
4
  Summary: Configurable developer workflow checks for local use and GitHub Actions
5
5
  Project-URL: Documentation, https://dariuszpanas.github.io/yaga/
6
6
  Project-URL: Changelog, https://dariuszpanas.github.io/yaga/changelog.html
@@ -49,6 +49,7 @@ become another review conversation. Start with one check and adopt more as your
49
49
  | Unwanted files, oversized blobs, or incompatible paths enter the repository | [Committed-file checks](https://dariuszpanas.github.io/yaga/repository-checks.html) for contents, sizes, names, and entry modes |
50
50
  | GitHub Actions workflows drift from your security and maintenance rules | [Workflow checks](https://dariuszpanas.github.io/yaga/workflow-checks.html) for immutable references, permission and checkout rules, and syntax |
51
51
  | Local checks and CI enforce different policies | An explicit [repository plan](https://dariuszpanas.github.io/yaga/repository-plans.html) used in both places |
52
+ | A small change needs a clear test and qualification plan | [Test planning](https://dariuszpanas.github.io/yaga/test-planning.html) selects suites and required variants from explicit changed paths |
52
53
 
53
54
  Checks produce actionable findings and reports for automation. You choose the policies and checks;
54
55
  YAGA does not require adopting the entire CLI at once.
@@ -17,6 +17,7 @@ become another review conversation. Start with one check and adopt more as your
17
17
  | Unwanted files, oversized blobs, or incompatible paths enter the repository | [Committed-file checks](https://dariuszpanas.github.io/yaga/repository-checks.html) for contents, sizes, names, and entry modes |
18
18
  | GitHub Actions workflows drift from your security and maintenance rules | [Workflow checks](https://dariuszpanas.github.io/yaga/workflow-checks.html) for immutable references, permission and checkout rules, and syntax |
19
19
  | Local checks and CI enforce different policies | An explicit [repository plan](https://dariuszpanas.github.io/yaga/repository-plans.html) used in both places |
20
+ | A small change needs a clear test and qualification plan | [Test planning](https://dariuszpanas.github.io/yaga/test-planning.html) selects suites and required variants from explicit changed paths |
20
21
 
21
22
  Checks produce actionable findings and reports for automation. You choose the policies and checks;
22
23
  YAGA does not require adopting the entire CLI at once.
@@ -0,0 +1,3 @@
1
+ [default]
2
+ # The vendored public key is exact cryptographic data; prose remains checked.
3
+ extend-ignore-re = ['(?s)\b_KEYRING_BASE64 = \(\s*(?:"[A-Za-z0-9+/=]+"\s*)+\)']
@@ -2,6 +2,57 @@
2
2
 
3
3
  ## [Unreleased]
4
4
 
5
+ ## [0.3.0] - 2026-10-18
6
+
7
+ ### Added
8
+
9
+ - Add the internal version-one test qualification policy and pure selection planner, with
10
+ strict bounded validation, additive path/tag rules, full-suite fallback, complete variants,
11
+ prerequisite ordering, and tested polyglot and django-ray examples.
12
+
13
+ - Add installed `test policy check` and `test plan` commands, with explicit policy/profile and
14
+ Git range or full-profile revision inputs. Plans bind exact commit/tree and policy identities,
15
+ carry deterministic version-one JSON digests, and explain selected suites and variants.
16
+ Git collection remains bounded and never fetches. Planning does not run tests or enable skips;
17
+ normalized receipt evaluation is available separately.
18
+
19
+ - Add a pure version-one executor registry and handoff API with complete fixed job mappings,
20
+ binding/source/policy identity checks, exact variant preservation, capability preflight,
21
+ and bounded dispatch/cell output. Add runnable polyglot and django-ray examples, installed-wheel
22
+ smoke, and a django-ray shadow-pilot guide. Existing required CI stays enabled. Historical
23
+ selection replay and one full shadow observation are recorded; measured selective feedback
24
+ savings, an adoption threshold, and selective activation remain pending.
25
+
26
+ - Add pure version-one selection diagnostics and strict offline plan decoding, preserving
27
+ source/policy identities, fallback causes, selection breadth, unclassified paths, and explicit
28
+ baseline comparisons. Add optional separate replay diagnostics without changing existing plan
29
+ or comparison formats. Complete reports stay within 4 MiB and make no execution claims.
30
+
31
+ - Add version-one normalized test results and pure evaluation, plus installed `test evaluate`
32
+ with explicit plan/results files and independent policy, manifest, source, run, and attempt
33
+ identities. Missing prerequisites or variants and non-passed outcomes block success; malformed,
34
+ stale, duplicate, or extra results fail validation. Preserve bounded reports, offline operation,
35
+ both Action import boundaries, and existing required CI. Selective activation remains pending.
36
+
37
+ - Add the schema-v1 boolean `dependabot-require-github-signature`, defaulting to `true`.
38
+ Each otherwise eligible Dependabot-skipped commit must verify offline against the pinned
39
+ GitHub signing key. Missing or failed verification runs normal checks. An explicit `false`
40
+ retains the per-commit metadata filter; explicit PR-author exemptions remain independent.
41
+
42
+ ### Fixed
43
+
44
+ - Map eight exact application-test files to application qualification in the django-ray example,
45
+ include latency for changes to the shared Docker scenario helper, and preserve the shared lease
46
+ dependencies added by the coordinated django-ray release work. Add complete historical
47
+ path, unknown-path, lockfile, rename/deletion, and variant regressions. Required CI and the
48
+ conservative full/unknown fallback behavior remain enabled.
49
+
50
+ - Narrow the opt-in Dependabot commit-message exemption per commit, so ordinary human additions
51
+ and human rebases are checked even inside a Dependabot PR. Mixed PR titles and proposed
52
+ messages are checked too. Signature verification requires an available trusted `gpgv` and
53
+ adds no API or token access. The shared GitHub key does not prove exclusive bot authorship,
54
+ and this quality exemption does not authorize skipping other checks.
55
+
5
56
  ## [0.2.1] - 2026-10-10
6
57
 
7
58
  ### Added
@@ -29,6 +29,9 @@ or `yaga self update --dry-run` to verify a uv tool installation without updatin
29
29
  | `yaga workflow security` | Versioned permission and checkout policies | [Workflow checks](workflow-checks.md) |
30
30
  | `yaga workflow lint` | Syntax checks through Docker actionlint | [Workflow checks](workflow-checks.md) |
31
31
  | `yaga github pull-request check` | Exact event-bound title and commit validation | [GitHub Actions](github-actions.md) |
32
+ | `yaga test policy check` | Validate an explicit test-suite catalog and selection policy | [Test planning](test-planning.md) |
33
+ | `yaga test plan` | Select suites and variants for an explicit Git source and profile | [Test planning](test-planning.md) |
34
+ | `yaga test evaluate` | Check normalized cell results against a trusted plan and explicit execution identities | [Test evaluation](test-planning.md#evaluate-normalized-results) |
32
35
 
33
36
  Evaluating YAGA for another repository? Start with [Assess and adopt in CI](ci-adoption.md).
34
37
 
@@ -63,6 +63,7 @@ body-min-words = 8
63
63
  # Omit body-max-line-length unless this repository wants a wrapping limit.
64
64
  # Set body-paragraph-splitting = "check" to catch sentence-like prose split by blank lines.
65
65
  dependabot-pull-requests = "skip" # check or skip in event-aware PR checks
66
+ dependabot-require-github-signature = true # default; applies only to the Dependabot skip
66
67
  merge-commits = "reject" # ignore, check, or reject
67
68
  ignored-headers = ['Revert "*"'] # bounded, case-sensitive glob patterns
68
69
  max-commits = 64
@@ -78,10 +79,38 @@ policy evaluation only in `yaga github pull-request check` and the read-only com
78
79
  and only when the event's pull-request author is exactly the GitHub `dependabot[bot]` Bot account,
79
80
  following [GitHub's event-author guidance for Dependabot
80
81
  automation](https://docs.github.com/en/code-security/tutorials/secure-your-dependencies/automate-dependabot-with-actions?learn=dependency_version_updates).
81
- The adapter still validates the complete event and runner context, verifies the checked-out head,
82
- loads configuration, and enumerates the bounded exact commit range before returning a visible
83
- `Dependabot pull request` skip. It does not skip change, mode, path, size, tree, workflow, test, or
84
- review-gate checks.
82
+ After validating the complete event, runner context, checkout, configuration, and exact commit
83
+ range, the adapter filters each selected commit independently. An exemption requires exact
84
+ `dependabot[bot]` author metadata with either `49699333+dependabot[bot]@users.noreply.github.com`
85
+ or `dependabot[bot]@users.noreply.github.com`, plus a committer with that bot name/email or
86
+ `GitHub <noreply@github.com>`. The default `dependabot-require-github-signature = true` additionally
87
+ requires a valid signature over the exact selected commit object using the pinned GitHub signing
88
+ key with full fingerprint `968479A1AFF927E37D1A566BB5690EEEBB952194`. YAGA verifies this offline
89
+ with an available trusted `gpgv` executable and a private keyring containing
90
+ [GitHub's published public key](https://github.com/web-flow.gpg). It does not call the GitHub API,
91
+ accept a token, download keys during a check, or use the user's keyring.
92
+
93
+ Missing signatures, unavailable verification tools, unsupported or invalid signatures, verification
94
+ errors, and exhausted verification limits all run normal checks for the affected commits.
95
+ Ordinary human additions and bot-authored commits rebased by a human are also checked. If any
96
+ commit is ineligible for the exemption, the title and optional proposed message are checked too.
97
+ Otherwise their exemption is retained. Skipped results retain the `Dependabot pull request`
98
+ reason, and every selected commit remains in the report.
99
+
100
+ This option is a strict schema-v1 boolean and affects only `dependabot-pull-requests = "skip"`.
101
+ Explicitly setting `dependabot-require-github-signature = false` retains only the per-commit
102
+ metadata filter. Those metadata fields are forgeable, so this opt-out permits a human who forges
103
+ both identities inside an eligible Dependabot PR to evade the filter. `Signed-off-by` footers are
104
+ never consulted as proof. With the default requirement, the signature proves that the payload
105
+ was signed by the pinned GitHub key; that shared key alone does not establish exclusive Dependabot
106
+ authorship. This offline check does not query GitHub's live verification badge or refresh key
107
+ revocation information. Keep `dependabot-pull-requests = "check"` to check every commit message.
108
+ The exemption never skips change, mode, path, size, tree, workflow, test, or review-gate checks.
109
+
110
+ The separate [`skip-pull-request-authors`](configuration.md#explicit-pr-author-exemptions) list
111
+ remains a broader explicit exemption for the entire PR and does not require this signature check.
112
+ Adding Dependabot to that list therefore bypasses the narrower per-commit policy. Signature-based
113
+ identity policies for Renovate or custom bots are not part of this option.
85
114
 
86
115
  Ordinary `commit check` and the `commit` provider inside `repo check` never infer Dependabot from a
87
116
  Git author name, email, message, or branch because those values are author-controlled. They keep
@@ -263,7 +292,7 @@ Typos configuration is used; direct message and Git-backed sources follow the sa
263
292
 
264
293
  With the commit Action's `trusted-config` mode, `typos = "check"` applies to both the
265
294
  PR title and every selected full commit message. Structural title checks remain header-only.
266
- Authentic Dependabot skips and existing skipped commit types also skip spelling checks.
295
+ Eligible Dependabot commit exemptions and existing skipped commit types also skip spelling checks.
267
296
  Findings fail with exit `1`; a missing or broken tool fails with exit `2`.
268
297
 
269
298
  Install a pinned Typos executable outside the checkout before invoking the Action.
@@ -128,7 +128,8 @@ version. Pin the installation separately when CI must always use one exact relea
128
128
  | `body-max-line-length` | Optional maximum body-line length; omitted means unlimited. |
129
129
  | `body-paragraph-splitting` | `skip` (default) or `check` for likely sentence splits across blank lines. |
130
130
  | `skip-pull-request-authors` | Empty-default list of up to 128 explicit GitHub PR author logins exempt from title and commit checks. |
131
- | `dependabot-pull-requests` | `check` (default) or `skip` in event-aware PR checks only. |
131
+ | `dependabot-pull-requests` | `check` (default) or a per-commit metadata/signature-filtered `skip` in eligible event-aware PR checks only. |
132
+ | `dependabot-require-github-signature` | Boolean, default `true`. Requires offline verification against the pinned GitHub signing key for each Dependabot-skipped commit. Missing or failed verification runs normal checks. Only affects `dependabot-pull-requests = "skip"`; `false` retains the metadata filter alone. |
132
133
  | `typos` | `skip` (default) or `check` with an installed Typos CLI. |
133
134
  | `typos-config` | `repository` (default) discovers Typos settings; `isolated` disables discovery. Trusted Actions always isolate. |
134
135
  | `quality` | Nested non-secret defaults for `commit quality`; provider, task, model, revision, threshold, region, max-tokens, max-input-tokens, and input-mode. |
@@ -378,7 +379,15 @@ checkout, policy, and commit-range validation. Reports use `Configured pull requ
378
379
  It does not exempt ordinary `commit check`, repository checks, or other providers.
379
380
  Unlike the narrower `dependabot-pull-requests = "skip"` option in trusted mode, this explicit
380
381
  list applies regardless of head repository or branch. Listing an account opts into that scope.
381
- The existing Dependabot option retains its identity and trusted same-repository/branch checks.
382
+ The Dependabot option retains its identity and trusted same-repository/branch checks, then narrows
383
+ the exemption per commit with the [metadata and signature checks](commit-policy.md).
384
+ `dependabot-require-github-signature` defaults to `true`; an unavailable `gpgv`, missing signature,
385
+ or failed verification runs normal checks. Setting it to `false` retains a forgeable metadata
386
+ filter. The pinned GitHub key is shared, and verification does not prove exclusive bot authorship
387
+ or query live revocation state. Explicit author exemptions remain broader and intentionally skip
388
+ the entire PR even when it contains human-added commits. They bypass the Dependabot signature
389
+ requirement, including when `dependabot[bot]` itself appears in this list. This does not add a
390
+ generic signature or identity policy for Renovate or custom bots.
382
391
 
383
392
  Use `trusted-config` when the exemption must come from the default-branch policy. Default
384
393
  PR-head mode intentionally reads PR policy, including this list; it is not trusted merge authority.