yaga-cli 0.2.1__tar.gz → 0.4.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 (431) hide show
  1. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/.github/workflows/ci.yml +2 -2
  2. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/.github/workflows/commit-adoption-qualification.yml +2 -2
  3. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/.github/workflows/commit-quality.yml +1 -1
  4. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/.github/workflows/docs.yml +1 -1
  5. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/.github/workflows/release.yml +7 -7
  6. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/AGENTS.md +55 -3
  7. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/CONTRIBUTING.md +119 -5
  8. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/Makefile +2 -1
  9. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/PKG-INFO +4 -1
  10. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/README.md +2 -0
  11. yaga_cli-0.4.0/_typos.toml +3 -0
  12. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/docs/changelog.md +110 -0
  13. yaga_cli-0.4.0/docs/commands.md +135 -0
  14. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/docs/commit-policy.md +34 -5
  15. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/docs/commit-quality.md +9 -0
  16. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/docs/configuration.md +27 -5
  17. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/docs/contributing.md +16 -1
  18. yaga_cli-0.4.0/docs/designs/examples/test-planning/django-ray.toml +234 -0
  19. yaga_cli-0.4.0/docs/designs/examples/test-planning/polyglot.toml +138 -0
  20. yaga_cli-0.4.0/docs/designs/experiments/django-ray-full-shadow-result.json +242 -0
  21. yaga_cli-0.4.0/docs/designs/experiments/django-ray-shadow-replay/cohort.json +219 -0
  22. yaga_cli-0.4.0/docs/designs/experiments/django-ray-shadow-replay/observations-01.json +1804 -0
  23. yaga_cli-0.4.0/docs/designs/experiments/django-ray-shadow-replay/observations-02.json +1700 -0
  24. yaga_cli-0.4.0/docs/designs/experiments/django-ray-shadow-replay/observations-03.json +1817 -0
  25. yaga_cli-0.4.0/docs/designs/experiments/django-ray-shadow-replay/observations-04.json +1728 -0
  26. yaga_cli-0.4.0/docs/designs/experiments/django-ray-shadow-replay/observations-05.json +1860 -0
  27. yaga_cli-0.4.0/docs/designs/experiments/django-ray-shadow-replay/observations-06.json +295 -0
  28. yaga_cli-0.4.0/docs/designs/experiments/django-ray-shadow-replay/report.json +281 -0
  29. yaga_cli-0.4.0/docs/designs/experiments/django-ray-shadow-replay.md +130 -0
  30. yaga_cli-0.4.0/docs/designs/staged-checks.md +93 -0
  31. yaga_cli-0.4.0/docs/designs/test-planning.md +812 -0
  32. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/docs/getting-started.md +1 -1
  33. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/docs/github-actions.md +16 -4
  34. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/docs/github-review-adapter.md +1 -0
  35. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/docs/index.md +6 -2
  36. yaga_cli-0.4.0/docs/minimum-runtime.md +44 -0
  37. yaga_cli-0.4.0/docs/pull-request-descriptions.md +335 -0
  38. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/docs/repository-checks.md +3 -0
  39. yaga_cli-0.4.0/docs/test-planning-handoff.md +328 -0
  40. yaga_cli-0.4.0/docs/test-planning.md +281 -0
  41. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/docs/troubleshooting.md +31 -13
  42. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/docs/usage.md +16 -9
  43. yaga_cli-0.4.0/examples/description-policy.toml +8 -0
  44. yaga_cli-0.4.0/examples/pull-request-template.md +7 -0
  45. yaga_cli-0.4.0/examples/test-planning/fixed_handoff.py +152 -0
  46. yaga_cli-0.4.0/examples/test-planning/replay_django_ray.py +431 -0
  47. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/pyproject.toml +2 -1
  48. yaga_cli-0.4.0/release-notes.md +58 -0
  49. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/scripts/check_build.py +677 -34
  50. yaga_cli-0.4.0/scripts/check_minimum_runtime.py +168 -0
  51. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/scripts/prepare_commit_action_control.py +10 -1
  52. yaga_cli-0.4.0/src/yaga/changes/git.py +20 -0
  53. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/changes/models.py +9 -27
  54. yaga_cli-0.4.0/src/yaga/changes/patterns.py +57 -0
  55. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/cli.py +10 -1
  56. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/commands/commit.py +4 -1
  57. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/commands/github.py +2 -0
  58. yaga_cli-0.4.0/src/yaga/commands/pull_request.py +124 -0
  59. yaga_cli-0.4.0/src/yaga/commands/test.py +220 -0
  60. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/commits/config.py +12 -0
  61. yaga_cli-0.4.0/src/yaga/commits/dependabot.py +119 -0
  62. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/commits/github_event.py +30 -12
  63. yaga_cli-0.4.0/src/yaga/commits/github_signature.py +268 -0
  64. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/commits/models.py +1 -0
  65. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/commits/reporting.py +3 -0
  66. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/commits/typos.py +22 -3
  67. yaga_cli-0.4.0/src/yaga/descriptions/__init__.py +1 -0
  68. yaga_cli-0.4.0/src/yaga/descriptions/checker.py +213 -0
  69. yaga_cli-0.4.0/src/yaga/descriptions/github.py +294 -0
  70. yaga_cli-0.4.0/src/yaga/descriptions/hygiene.py +70 -0
  71. yaga_cli-0.4.0/src/yaga/descriptions/markdown.py +428 -0
  72. yaga_cli-0.4.0/src/yaga/descriptions/models.py +177 -0
  73. yaga_cli-0.4.0/src/yaga/descriptions/policy.py +64 -0
  74. yaga_cli-0.4.0/src/yaga/descriptions/reporting.py +117 -0
  75. yaga_cli-0.4.0/src/yaga/descriptions/service.py +104 -0
  76. yaga_cli-0.4.0/src/yaga/descriptions/sources.py +137 -0
  77. yaga_cli-0.4.0/src/yaga/files.py +48 -0
  78. yaga_cli-0.2.1/src/yaga/changes/git.py → yaga_cli-0.4.0/src/yaga/git/changes.py +53 -20
  79. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/git/runtime.py +31 -11
  80. yaga_cli-0.2.1/src/yaga/changes/patterns.py → yaga_cli-0.4.0/src/yaga/path_patterns.py +83 -60
  81. yaga_cli-0.4.0/src/yaga/test_planning/__init__.py +1 -0
  82. yaga_cli-0.4.0/src/yaga/test_planning/diagnostics.py +366 -0
  83. yaga_cli-0.4.0/src/yaga/test_planning/evaluation.py +349 -0
  84. yaga_cli-0.4.0/src/yaga/test_planning/evaluation_service.py +95 -0
  85. yaga_cli-0.4.0/src/yaga/test_planning/git.py +55 -0
  86. yaga_cli-0.4.0/src/yaga/test_planning/handoff.py +208 -0
  87. yaga_cli-0.4.0/src/yaga/test_planning/limits.py +21 -0
  88. yaga_cli-0.4.0/src/yaga/test_planning/models.py +228 -0
  89. yaga_cli-0.4.0/src/yaga/test_planning/planner.py +281 -0
  90. yaga_cli-0.4.0/src/yaga/test_planning/policy.py +164 -0
  91. yaga_cli-0.4.0/src/yaga/test_planning/reporting.py +172 -0
  92. yaga_cli-0.4.0/src/yaga/test_planning/reports.py +150 -0
  93. yaga_cli-0.4.0/src/yaga/test_planning/results.py +269 -0
  94. yaga_cli-0.4.0/src/yaga/test_planning/selection.py +49 -0
  95. yaga_cli-0.4.0/src/yaga/test_planning/service.py +45 -0
  96. yaga_cli-0.4.0/src/yaga/test_planning/source.py +73 -0
  97. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/version_requirement.py +1 -1
  98. yaga_cli-0.4.0/tests/fixtures/github-signatures/.gitattributes +4 -0
  99. yaga_cli-0.4.0/tests/fixtures/github-signatures/.typos.toml +3 -0
  100. yaga_cli-0.4.0/tests/fixtures/github-signatures/README.md +45 -0
  101. yaga_cli-0.4.0/tests/fixtures/github-signatures/dependabot-setup-uv.commit +37 -0
  102. yaga_cli-0.4.0/tests/fixtures/github-signatures/dependabot-urllib3-parent.commit +20 -0
  103. yaga_cli-0.4.0/tests/fixtures/github-signatures/dependabot-urllib3.commit +37 -0
  104. yaga_cli-0.4.0/tests/fixtures/github-signatures/web-flow.asc +41 -0
  105. yaga_cli-0.4.0/tests/test_build_git_isolation.py +68 -0
  106. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/test_change_cli.py +51 -0
  107. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/test_change_git.py +91 -15
  108. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/test_cli.py +53 -9
  109. yaga_cli-0.4.0/tests/test_command_guide.py +114 -0
  110. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/test_commit_action.py +94 -5
  111. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/test_commit_action_controls.py +11 -2
  112. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/test_commit_config.py +41 -0
  113. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/test_commit_reporting.py +15 -0
  114. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/test_commit_trusted_policy.py +19 -2
  115. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/test_commit_typos.py +81 -1
  116. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/test_commit_warnings.py +35 -0
  117. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/test_config_init.py +10 -0
  118. yaga_cli-0.4.0/tests/test_dependabot_commit_filter.py +383 -0
  119. yaga_cli-0.4.0/tests/test_description_checker.py +297 -0
  120. yaga_cli-0.4.0/tests/test_description_cli.py +664 -0
  121. yaga_cli-0.4.0/tests/test_description_github.py +407 -0
  122. yaga_cli-0.4.0/tests/test_description_hygiene.py +301 -0
  123. yaga_cli-0.4.0/tests/test_description_markdown.py +181 -0
  124. yaga_cli-0.4.0/tests/test_description_policy.py +138 -0
  125. yaga_cli-0.4.0/tests/test_description_remote_cli.py +317 -0
  126. yaga_cli-0.4.0/tests/test_description_sources.py +296 -0
  127. yaga_cli-0.4.0/tests/test_description_structure.py +222 -0
  128. yaga_cli-0.4.0/tests/test_github_commit_signature.py +373 -0
  129. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/test_github_pull_request.py +15 -5
  130. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/test_installation.py +2 -2
  131. yaga_cli-0.4.0/tests/test_minimum_runtime.py +71 -0
  132. yaga_cli-0.4.0/tests/test_path_patterns.py +180 -0
  133. yaga_cli-0.4.0/tests/test_regular_file_prefix.py +115 -0
  134. yaga_cli-0.4.0/tests/test_test_planning_cli.py +450 -0
  135. yaga_cli-0.4.0/tests/test_test_planning_diagnostics.py +494 -0
  136. yaga_cli-0.4.0/tests/test_test_planning_evaluate_cli.py +475 -0
  137. yaga_cli-0.4.0/tests/test_test_planning_evaluation.py +471 -0
  138. yaga_cli-0.4.0/tests/test_test_planning_examples.py +665 -0
  139. yaga_cli-0.4.0/tests/test_test_planning_git.py +283 -0
  140. yaga_cli-0.4.0/tests/test_test_planning_handoff.py +545 -0
  141. yaga_cli-0.4.0/tests/test_test_planning_handoff_example.py +106 -0
  142. yaga_cli-0.4.0/tests/test_test_planning_planner.py +350 -0
  143. yaga_cli-0.4.0/tests/test_test_planning_policy.py +532 -0
  144. yaga_cli-0.4.0/tests/test_test_planning_replay.py +563 -0
  145. yaga_cli-0.4.0/tests/test_test_planning_reporting.py +490 -0
  146. yaga_cli-0.4.0/tests/test_test_planning_results.py +277 -0
  147. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/test_tooling.py +41 -1
  148. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/uv.lock +20 -18
  149. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/zensical.toml +6 -0
  150. yaga_cli-0.2.1/docs/commands.md +0 -48
  151. yaga_cli-0.2.1/release-notes.md +0 -21
  152. yaga_cli-0.2.1/src/yaga/files.py +0 -13
  153. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/.gitattributes +0 -0
  154. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/.github/dependabot.yml +0 -0
  155. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/.github/workflows/commit-policy.yml +0 -0
  156. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/.gitignore +0 -0
  157. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/.pre-commit-hooks.yaml +0 -0
  158. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/.yaga/branch-policy.toml +0 -0
  159. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/.yaga/change-policy.toml +0 -0
  160. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/.yaga/checks/ci.toml +0 -0
  161. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/.yaga/mode-policy.toml +0 -0
  162. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/.yaga/path-policy.toml +0 -0
  163. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/.yaga/size-policy.toml +0 -0
  164. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/.yaga/tree-policy.toml +0 -0
  165. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/CHANGELOG.md +0 -0
  166. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/LICENSE +0 -0
  167. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/SECURITY.md +0 -0
  168. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/action.yml +0 -0
  169. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/actions/commit-check/action.yml +0 -0
  170. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/docs/agent-review-gate.md +0 -0
  171. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/docs/assets/branding/isometric_terminal_y_logo.png +0 -0
  172. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/docs/assets/branding/isometric_terminal_y_logo_transparent.png +0 -0
  173. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/docs/assets/branding/yaga_cli_brand_concept_board.png +0 -0
  174. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/docs/branch-policy.md +0 -0
  175. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/docs/change-policy.md +0 -0
  176. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/docs/ci-adoption.md +0 -0
  177. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/docs/commit-policy-direction.md +0 -0
  178. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/docs/install.ps1 +0 -0
  179. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/docs/install.sh +0 -0
  180. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/docs/mode-policy.md +0 -0
  181. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/docs/path-policy.md +0 -0
  182. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/docs/recipes.md +0 -0
  183. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/docs/releasing.md +0 -0
  184. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/docs/repository-plans.md +0 -0
  185. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/docs/security.md +0 -0
  186. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/docs/size-policy.md +0 -0
  187. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/docs/stylesheets/extra.css +0 -0
  188. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/docs/tree-policy.md +0 -0
  189. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/docs/workflow-checks.md +0 -0
  190. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/examples/agent-review-policy.toml +0 -0
  191. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/examples/agent-review-results.json +0 -0
  192. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/examples/agent-review.yml +0 -0
  193. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/examples/commit-policy.yml +0 -0
  194. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/examples/review-policy.yml +0 -0
  195. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/overrides/404.html +0 -0
  196. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/scripts/check_description.py +0 -0
  197. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/scripts/check_docs.py +0 -0
  198. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/scripts/check_release.py +0 -0
  199. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/scripts/composite_smoke_python +0 -0
  200. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/__init__.py +0 -0
  201. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/__main__.py +0 -0
  202. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/_update_worker.py +0 -0
  203. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/action.py +0 -0
  204. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/action_cli.py +0 -0
  205. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/agent_review/__init__.py +0 -0
  206. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/agent_review/evaluation.py +0 -0
  207. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/agent_review/github/__init__.py +0 -0
  208. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/agent_review/github/boundary.py +0 -0
  209. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/agent_review/github/candidate.py +0 -0
  210. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/agent_review/github/constants.py +0 -0
  211. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/agent_review/github/events.py +0 -0
  212. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/agent_review/github/evidence.py +0 -0
  213. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/agent_review/github/gate.py +0 -0
  214. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/agent_review/github/publication.py +0 -0
  215. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/agent_review/github/requests.py +0 -0
  216. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/agent_review/github/runs.py +0 -0
  217. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/agent_review/github/runtime.py +0 -0
  218. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/agent_review/plan.py +0 -0
  219. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/agent_review/policy.py +0 -0
  220. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/agent_review/results.py +0 -0
  221. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/agent_review/runtime.py +0 -0
  222. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/branches/__init__.py +0 -0
  223. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/branches/checker.py +0 -0
  224. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/branches/models.py +0 -0
  225. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/branches/patterns.py +0 -0
  226. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/branches/policy.py +0 -0
  227. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/branches/reporting.py +0 -0
  228. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/branches/service.py +0 -0
  229. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/changes/__init__.py +0 -0
  230. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/changes/checker.py +0 -0
  231. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/changes/policy.py +0 -0
  232. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/changes/reporting.py +0 -0
  233. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/changes/service.py +0 -0
  234. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/commands/__init__.py +0 -0
  235. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/commands/branch.py +0 -0
  236. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/commands/change.py +0 -0
  237. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/commands/config.py +0 -0
  238. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/commands/gate.py +0 -0
  239. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/commands/mode.py +0 -0
  240. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/commands/path.py +0 -0
  241. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/commands/repo.py +0 -0
  242. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/commands/self_manage.py +0 -0
  243. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/commands/size.py +0 -0
  244. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/commands/tree.py +0 -0
  245. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/commands/workflow.py +0 -0
  246. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/commit_action_cli.py +0 -0
  247. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/commit_action_runtime.py +0 -0
  248. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/commits/__init__.py +0 -0
  249. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/commits/checker.py +0 -0
  250. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/commits/config_explain.py +0 -0
  251. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/commits/config_init.py +0 -0
  252. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/commits/content_policy.py +0 -0
  253. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/commits/git.py +0 -0
  254. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/commits/github_reporting.py +0 -0
  255. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/commits/parser.py +0 -0
  256. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/commits/policy.py +0 -0
  257. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/commits/quality.py +0 -0
  258. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/commits/service.py +0 -0
  259. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/commits/severity.py +0 -0
  260. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/commits/sources.py +0 -0
  261. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/commits/template.py +0 -0
  262. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/commits/trusted_policy.py +0 -0
  263. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/config_scope.py +0 -0
  264. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/errors.py +0 -0
  265. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/git/__init__.py +0 -0
  266. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/git/process.py +0 -0
  267. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/git/tree.py +0 -0
  268. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/github.py +0 -0
  269. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/models.py +0 -0
  270. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/modes/__init__.py +0 -0
  271. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/modes/checker.py +0 -0
  272. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/modes/git.py +0 -0
  273. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/modes/models.py +0 -0
  274. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/modes/patterns.py +0 -0
  275. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/modes/policy.py +0 -0
  276. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/modes/reporting.py +0 -0
  277. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/modes/service.py +0 -0
  278. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/paths/__init__.py +0 -0
  279. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/paths/checker.py +0 -0
  280. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/paths/git.py +0 -0
  281. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/paths/models.py +0 -0
  282. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/paths/policy.py +0 -0
  283. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/paths/reporting.py +0 -0
  284. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/paths/service.py +0 -0
  285. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/repository/__init__.py +0 -0
  286. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/repository/checker.py +0 -0
  287. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/repository/models.py +0 -0
  288. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/repository/plan.py +0 -0
  289. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/repository/reporting.py +0 -0
  290. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/self_update.py +0 -0
  291. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/sizes/__init__.py +0 -0
  292. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/sizes/checker.py +0 -0
  293. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/sizes/git.py +0 -0
  294. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/sizes/models.py +0 -0
  295. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/sizes/patterns.py +0 -0
  296. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/sizes/policy.py +0 -0
  297. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/sizes/reporting.py +0 -0
  298. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/sizes/service.py +0 -0
  299. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/status.py +0 -0
  300. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/trees/__init__.py +0 -0
  301. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/trees/checker.py +0 -0
  302. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/trees/git.py +0 -0
  303. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/trees/models.py +0 -0
  304. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/trees/patterns.py +0 -0
  305. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/trees/policy.py +0 -0
  306. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/trees/reporting.py +0 -0
  307. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/trees/service.py +0 -0
  308. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/workflows/__init__.py +0 -0
  309. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/workflows/actionlint_runtime.py +0 -0
  310. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/workflows/actionlint_snapshot.py +0 -0
  311. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/workflows/checker.py +0 -0
  312. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/workflows/inputs.py +0 -0
  313. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/workflows/lint.py +0 -0
  314. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/workflows/models.py +0 -0
  315. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/workflows/parser.py +0 -0
  316. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/workflows/references.py +0 -0
  317. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/workflows/reporting.py +0 -0
  318. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/workflows/security.py +0 -0
  319. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/workflows/security_facts.py +0 -0
  320. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/workflows/security_models.py +0 -0
  321. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/workflows/security_reporting.py +0 -0
  322. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/workflows/security_rules.py +0 -0
  323. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/src/yaga/workflows/yaml.py +0 -0
  324. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/__init__.py +0 -0
  325. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/codex_support.py +0 -0
  326. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/fixtures/commit_consumer_parity.json +0 -0
  327. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/test_action.py +0 -0
  328. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/test_agent_review_cli.py +0 -0
  329. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/test_agent_review_evaluation.py +0 -0
  330. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/test_agent_review_plan.py +0 -0
  331. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/test_agent_review_policy.py +0 -0
  332. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/test_agent_review_results.py +0 -0
  333. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/test_branch_checker.py +0 -0
  334. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/test_branch_cli.py +0 -0
  335. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/test_branch_models.py +0 -0
  336. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/test_branch_patterns.py +0 -0
  337. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/test_branch_policy.py +0 -0
  338. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/test_branch_reporting.py +0 -0
  339. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/test_branch_service.py +0 -0
  340. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/test_change_checker.py +0 -0
  341. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/test_change_patterns.py +0 -0
  342. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/test_change_policy.py +0 -0
  343. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/test_change_reporting.py +0 -0
  344. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/test_codex_events.py +0 -0
  345. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/test_codex_evidence.py +0 -0
  346. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/test_codex_evidence_literals.py +0 -0
  347. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/test_codex_gate.py +0 -0
  348. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/test_codex_publication.py +0 -0
  349. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/test_codex_requests.py +0 -0
  350. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/test_codex_runs.py +0 -0
  351. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/test_codex_runtime.py +0 -0
  352. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/test_commit_body_customization.py +0 -0
  353. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/test_commit_checker.py +0 -0
  354. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/test_commit_consumer_policy.py +0 -0
  355. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/test_commit_content_policy.py +0 -0
  356. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/test_commit_explicit_inputs.py +0 -0
  357. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/test_commit_git.py +0 -0
  358. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/test_commit_parser.py +0 -0
  359. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/test_commit_quality.py +0 -0
  360. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/test_commit_quality_workflow.py +0 -0
  361. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/test_commit_service.py +0 -0
  362. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/test_commit_sources.py +0 -0
  363. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/test_commit_template.py +0 -0
  364. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/test_config_workflows.py +0 -0
  365. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/test_consumer_policy_entrypoints.py +0 -0
  366. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/test_description.py +0 -0
  367. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/test_docs_links.py +0 -0
  368. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/test_files.py +0 -0
  369. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/test_git_runtime.py +0 -0
  370. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/test_git_tree.py +0 -0
  371. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/test_github.py +0 -0
  372. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/test_github_reporting.py +0 -0
  373. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/test_installers.py +0 -0
  374. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/test_mode_checker.py +0 -0
  375. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/test_mode_cli.py +0 -0
  376. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/test_mode_git.py +0 -0
  377. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/test_mode_models.py +0 -0
  378. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/test_mode_patterns.py +0 -0
  379. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/test_mode_policy.py +0 -0
  380. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/test_mode_reporting.py +0 -0
  381. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/test_mode_service.py +0 -0
  382. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/test_models.py +0 -0
  383. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/test_path_checker.py +0 -0
  384. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/test_path_cli.py +0 -0
  385. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/test_path_git.py +0 -0
  386. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/test_path_models.py +0 -0
  387. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/test_path_policy.py +0 -0
  388. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/test_path_reporting.py +0 -0
  389. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/test_path_service.py +0 -0
  390. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/test_plain_messages.py +0 -0
  391. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/test_pr_proposed_message.py +0 -0
  392. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/test_release.py +0 -0
  393. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/test_repo_cli.py +0 -0
  394. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/test_repository_checker.py +0 -0
  395. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/test_repository_contract.py +0 -0
  396. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/test_repository_models.py +0 -0
  397. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/test_repository_plan.py +0 -0
  398. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/test_repository_reporting.py +0 -0
  399. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/test_size_checker.py +0 -0
  400. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/test_size_cli.py +0 -0
  401. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/test_size_git.py +0 -0
  402. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/test_size_models.py +0 -0
  403. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/test_size_patterns.py +0 -0
  404. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/test_size_policy.py +0 -0
  405. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/test_size_reporting.py +0 -0
  406. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/test_size_service.py +0 -0
  407. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/test_status.py +0 -0
  408. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/test_tree_checker.py +0 -0
  409. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/test_tree_cli.py +0 -0
  410. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/test_tree_git.py +0 -0
  411. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/test_tree_models.py +0 -0
  412. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/test_tree_patterns.py +0 -0
  413. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/test_tree_policy.py +0 -0
  414. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/test_tree_reporting.py +0 -0
  415. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/test_tree_service.py +0 -0
  416. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/test_workflow_checker.py +0 -0
  417. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/test_workflow_inputs.py +0 -0
  418. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/test_workflow_lint.py +0 -0
  419. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/test_workflow_lint_hardening.py +0 -0
  420. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/test_workflow_lint_reporting.py +0 -0
  421. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/test_workflow_provider_inputs.py +0 -0
  422. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/test_workflow_references.py +0 -0
  423. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/test_workflow_reporting.py +0 -0
  424. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/test_workflow_security_cli.py +0 -0
  425. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/test_workflow_security_facts.py +0 -0
  426. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/test_workflow_security_models.py +0 -0
  427. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/test_workflow_security_reporting.py +0 -0
  428. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/test_workflow_security_rules.py +0 -0
  429. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/test_workflow_security_selection.py +0 -0
  430. {yaga_cli-0.2.1 → yaga_cli-0.4.0}/tests/test_workflow_security_service.py +0 -0
  431. {yaga_cli-0.2.1 → yaga_cli-0.4.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@07a047e608db84b3d8c06cd9a7c7dcc9c355c18e # v10.3.2
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@07a047e608db84b3d8c06cd9a7c7dcc9c355c18e # v10.3.2
154
154
  with:
155
155
  enable-cache: true
156
156
  version: "0.13.0"
@@ -15,12 +15,12 @@ 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:
22
22
  persist-credentials: false
23
- - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
23
+ - uses: actions/setup-python@6d4fd22b20465ccc0f7354476588e8df7c9ca0e0 # v7.1.0
24
24
  with:
25
25
  python-version: "3.12"
26
26
  - name: Install pinned Typos for spelling controls
@@ -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@07a047e608db84b3d8c06cd9a7c7dcc9c355c18e # v10.3.2
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@07a047e608db84b3d8c06cd9a7c7dcc9c355c18e # v10.3.2
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@07a047e608db84b3d8c06cd9a7c7dcc9c355c18e # v10.3.2
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,11 +77,11 @@ 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/
84
- - uses: pypa/gh-action-pypi-publish@dc37677b2e1c63e2034f94d8a5b11f265b73ba33 # v1.14.2
84
+ - uses: pypa/gh-action-pypi-publish@7245906fb61fa33a13554f9d5fb856fe61758086 # v1.14.3
85
85
 
86
86
  github-release:
87
87
  name: Create GitHub Release
@@ -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/
@@ -13,6 +13,29 @@ Agent review gate is the public review contract. Its current provider adapter re
13
13
 
14
14
  ## Preserve the CLI contract
15
15
 
16
+ - Keep pull-request description checks installed-only under `src/yaga/descriptions/`, with one
17
+ explicit versioned policy and file/stdin/event/PR source plus an optional explicit Markdown template.
18
+ Keep the checker pure, Markdown support deliberate, and Typos execution bounded and isolated.
19
+ Require meaningful content and unique ordered template headings; preserve schema-v1 reports,
20
+ exact finding counts, 256 stored diagnostics, 64 KiB policy/body/template and 1 MiB event limits.
21
+ Keep `heading-min-level` defaulted to 2 and `heading-max-length` to 120, with strict integer
22
+ ranges 1–6 and 1–256. Apply these rules to top-level ATX and Setext headings, reject raw HTML
23
+ heading tags outside comments/code/escaped literals, and reject conflicting templates.
24
+ Preserve the `description.heading-*` and `description.html-heading` diagnostic boundaries;
25
+ structural checks are neither a complete Markdown renderer nor an HTML sanitizer.
26
+ Keep text hygiene source-located and code/comment/escape-aware. Diagnose invisible format
27
+ controls, prose tabs, high-confidence literal newline escapes, and unmatched backticks without
28
+ rejecting ordinary Unicode joining/emoji sequences or guessing arbitrary emphasis. Reject
29
+ unsupported control characters and bare CR before normalization; preserve LF/CRLF input.
30
+ Keep file/stdin/event sources offline. Only explicit `--pr` may fetch the current body through
31
+ the installed authenticated `gh` CLI: require a canonical HTTPS URL or a positive number plus
32
+ `--repo [HOST/]OWNER/REPO`, reject mixed sources and URL/repository ambiguity, and never infer
33
+ checkout or environment selection. Use shell-free bounded process execution, verify returned
34
+ PR identity and strict JSON, preserve the 64 KiB decoded-body limit, and never expose raw process
35
+ output or credentials. Keep the 30-second, 512 KiB stdout, and 64 KiB stderr bounds. Fetches may
36
+ check open/closed/merged PRs, without retrieving historical descriptions or writing to GitHub.
37
+ Never discover templates or policy, access Git history, or inherit commit-author exemptions.
38
+ Keep this provider outside repository plans and both Action import graphs.
16
39
  - `commit check` accepts one explicit source or defaults to `HEAD`; never silently combine sources,
17
40
  fetch history, reduce a Git selection, or ignore a missing base.
18
41
  - Treat commit messages, Git output, revisions, paths, and displayed labels as untrusted. Bound
@@ -27,9 +50,19 @@ Agent review gate is the public review contract. Its current provider adapter re
27
50
  read-only commit Action after complete event, runner-context, checkout, configuration, and range
28
51
  validation. Require an exact strictly parsed PR author login `dependabot[bot]`, type `Bot`, and
29
52
  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.
53
+ titles, branches, actors, or footers. Narrow this already eligible quality exemption per commit
54
+ using bounded exact author/committer metadata compatibility. Keep the schema-v1 boolean
55
+ `dependabot-require-github-signature` defaulted to `true`: additionally verify each skipped
56
+ commit's exact object bytes offline against the pinned GitHub signing key using a trusted
57
+ bounded `gpgv` process and private keyring. Missing, failed, unsupported, or over-budget
58
+ verification runs normal checks. `false` retains the forgeable per-commit metadata filter only.
59
+ Ordinary human additions and human rebases must be checked, and mixed PR titles/proposed
60
+ messages must be checked. The shared GitHub key is not exclusive Dependabot identity; never
61
+ use a Signed-off-by footer as proof, query a live badge, fetch keys, or import REST/token code.
62
+ The separate `skip-pull-request-authors` list remains a broad independent explicit exemption;
63
+ do not turn this option into generic bot identity configuration. Preserve the complete selected
64
+ SHA set and stable `Dependabot pull request` skip reason; ordinary commit/repository checks and
65
+ every other provider keep running.
33
66
  - Keep `scope-policy-by-type` as an empty-default schema-v1 mapping with at most 128 safe,
34
67
  case-insensitively unique type keys and closed presence-policy values. Overrides replace the
35
68
  global scope policy for full commits and PR titles; `scope-case` and `allowed-scopes` remain
@@ -100,6 +133,25 @@ Agent review gate is the public review contract. Its current provider adapter re
100
133
  Git paths, visible gitlink changes, disabled rename/external-diff/textconv behavior,
101
134
  unique-pattern caching, and the shared 10,000,000-unit matcher-work ceiling. Keep it out of both
102
135
  Action import graphs.
136
+ - Keep test planning installed-only under `src/yaga/test_planning/`. `test policy check` requires
137
+ one explicit file and no Git access. `test plan` requires explicit policy, profile, and exactly
138
+ one range or revision; revision-only planning requires a full profile. Never discover policy,
139
+ infer HEAD/event/branch/worktree state, fetch, or execute bindings. Keep the pure planner free
140
+ of I/O and collect Git sources through the shared bounded runtime and neutral changed-path
141
+ reader. Require complete range history, one three-dot merge base, and exact endpoint/comparison/
142
+ execution identities; allow shallow revision-only plans with the selected commit/tree present.
143
+ Reject graft overlays before and after collection. Preserve version-one semantic/envelope
144
+ contracts, exact policy-byte SHA-256, optional binding identity, canonical plan digests, complete
145
+ JSON within 4 MiB, at most 256 human reasons with exact omitted counts, and exits 0/2 only.
146
+ Planning never claims tests passed and stays outside repository plans and both Action graphs.
147
+ Keep executor handoff pure and installed-only: a complete fixed registry maps every suite exactly
148
+ once, preserves all variants and required capabilities, and binds executor-definition hashes.
149
+ Require non-null matching binding identity and independent expected policy/commit/tree identities.
150
+ Preserve version-one registry/handoff documents, complete 4 MiB bounded output, prerequisite
151
+ order, and one dispatch per suite even for a matrix. No commands or receipt evaluation enter this
152
+ API. Consumer adapters own real capability checks, execution, cancellation, acceptance, and cleanup.
153
+ Shadow jobs remain advisory and cannot change or cancel required CI. Measure first; set the
154
+ feedback-time adoption threshold before activation, after real pilot observations.
103
155
  - Keep `branch check` installed-only and require an explicit versioned policy plus exact short
104
156
  branch name. Never inspect Git, infer checkout or event state, discover policy, normalize full
105
157
  refs/remotes, or read environment in the domain layer. Schema v1 is a bounded ordered list of
@@ -42,14 +42,81 @@ with project and Python environment leakage removed.
42
42
  That strict build gate runs on Python 3.12. The Python 3.15 test jobs permit PyYAML's source-build
43
43
  fallback because the locked PyYAML release does not publish Python 3.15 wheels.
44
44
 
45
+ The default `make ci` changed-path check covers only `HEAD^..HEAD`. To qualify a complete pull
46
+ request, use exact base/head SHAs that are already available in complete local history, and run
47
+ from the head checkout:
48
+
49
+ ```bash
50
+ uv run yaga commit check --range '<base-sha>..<head-sha>'
51
+ uv run make ci CHANGE_RANGE='<base-sha>...<head-sha>'
52
+ ```
53
+
54
+ The independent two-dot commit check selects branch-only commits; the three-dot changed-path
55
+ check compares the head against its unique merge base. Neither command fetches or infers a remote
56
+ branch. The range override does not change workflow, formatting, or test inputs: those still use
57
+ the current checkout. A final docs-only commit must not hide an earlier source change from the
58
+ complete PR check.
59
+
60
+ Minimum runtime compatibility has a separate optional check:
61
+
62
+ ```bash
63
+ uv run --locked --python 3.12 python scripts/check_minimum_runtime.py --report minimum-runtime.json
64
+ ```
65
+
66
+ It builds a fresh base wheel, resolves the lowest runtime dependency versions outside the checkout,
67
+ checks installed provenance and dependency consistency, and exercises representative CLI/report
68
+ paths. See [minimum runtime qualification](docs/minimum-runtime.md) for scope and retained evidence;
69
+ this complements the frozen-lock `make ci` and strict package build gates.
70
+
45
71
  ## CLI and commit policy contract
46
72
 
47
73
  The public installed command groups are `branch`, `change`, `commit`, `config`, `github`, `mode`,
48
- `path`, `repo`, `self`, `size`, `tree`, `workflow`, and `gate`.
74
+ `path`, `pull-request`, `repo`, `self`, `size`, `test`, `tree`, `workflow`, and `gate`.
49
75
  Keep Typer declarations in `src/yaga/commands/`; keep commit parsing, policy, Git selection,
50
76
  configuration, GitHub event adaptation, and reporting in focused dependency-light modules under
51
77
  `src/yaga/commits/`. Domain behavior must remain directly testable without invoking Typer.
52
78
 
79
+ Test planning lives under `src/yaga/test_planning/`; see the [command guide](docs/test-planning.md)
80
+ and [design](docs/designs/test-planning.md). Keep explicit policy parsing separate from pure
81
+ selection, reuse the neutral bounded matcher in `src/yaga/path_patterns.py`, and keep both examples
82
+ executable in tests. `test policy check` requires one explicit file and no Git access; `test plan`
83
+ requires policy, profile, and exactly one explicit range or revision. A revision-only plan requires
84
+ a full profile. Keep Git collection in the source adapter, using `src/yaga/git/changes.py` and the
85
+ shared bounded runtime; the pure planner must not discover Git or environment state. Range plans
86
+ require complete history and exact endpoint/comparison/execution identities; revision plans need
87
+ their selected commit and tree only. Both reject graft overlays and never fetch. Preserve exact
88
+ policy-byte identity, optional binding SHA-256, canonical version-one plan digests, complete JSON
89
+ within 4 MiB, and at most 256 human reasons with exact omitted counts. Emit successful output on
90
+ stdout and bounded error envelopes on stderr, with exits 0/2 only. Planning never executes bindings
91
+ or claims tests passed. Keep both commands outside repository plans and both Action runtimes.
92
+
93
+ Keep executor handoff pure and installed-only. `ExecutorRegistry` must map the complete catalog
94
+ exactly once to fixed dispatch IDs, preserve every variant, satisfy declared capabilities, and
95
+ bind immutable executor-definition hashes. `create_handoff` requires a non-preview plan plus
96
+ independent expected policy/commit/tree identities; keep the version-one manifest/handoff shapes
97
+ and 4 MiB complete-output limit. No binding may become a command or credential source. Consumer
98
+ adapters own real capability checks, execution, cancellation, custom acceptance, and cleanup.
99
+ Keep shadow comparisons advisory and full shadow jobs isolated from required CI cancellation.
100
+ Do not claim measured savings or enable skips before actual observations, a documented adoption
101
+ threshold, and complete-result gating. See the [handoff guide](docs/test-planning-handoff.md).
102
+
103
+ Keep selection diagnostics pure and separate from the frozen plan/handoff/comparison documents.
104
+ Retain exact source and policy/registry/plan identities, distinguish selection breadth from the
105
+ reason for full mode, and expose paths bypassed by early full decisions. A missing baseline is
106
+ different from an explicitly empty selection. Strict offline decoding checks closed version-one
107
+ plan semantics and canonical digests; callers still own bounded JSON reads and duplicate-key
108
+ rejection. Complete diagnostic reports must fit within 4 MiB including the final newline.
109
+ Recorded reasons are not proof of dependency coverage, trusted origin, or runtime savings.
110
+
111
+ Keep version-one normalized test results and evaluation separate from frozen plan/handoff formats.
112
+ `test evaluate` requires explicit bounded plan/results files plus independent expected policy,
113
+ manifest, source, run, and aggregate-attempt identities. Keep the evaluator pure and validate every
114
+ selected variant and prerequisite; missing or non-passed work returns 1, malformed or mismatched
115
+ inputs return 2, and only complete passed obligations return 0. Bound complete JSON to 4 MiB and
116
+ diagnostics to 256 with exact omitted counts. Adapters own provenance, custom acceptance, cleanup,
117
+ and retry lineage; an artifact hash or green job alone cannot prove these. No execution, discovery,
118
+ Git access, provider API, required-CI changes, or selective activation belongs in evaluation.
119
+
53
120
  All revision-bound providers use the dependency-free runtime under `src/yaga/git/`. Keep repository
54
121
  and executable discovery, metadata and alternate-object-store boundaries, process execution,
55
122
  environment isolation, time and output limits, object identity parsing, and complete-history checks
@@ -90,9 +157,22 @@ opt-in alternative. Apply it only in the event-aware `github pull-request check`
90
157
  read-only commit Action. Identify Dependabot from one strictly parsed PR author record with exact
91
158
  `dependabot[bot]` login, `Bot` type, and a bounded positive ID; never from Git author/committer
92
159
  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.
160
+ validation before applying the stable `Dependabot pull request` skip reason. Narrow this already
161
+ eligible quality exemption per commit with bounded exact author/committer metadata compatibility.
162
+ `dependabot-require-github-signature` is a strict schema-v1 boolean defaulting to `true`; it affects
163
+ only this opt-in exemption. Require offline verification of each candidate's exact object bytes
164
+ against the pinned GitHub key using a trusted bounded `gpgv` process and private keyring. Missing
165
+ or failed verification, unsupported signatures, and resource exhaustion run normal checks.
166
+ An explicit `false` retains only the forgeable metadata filter. Check ordinary human additions
167
+ and human rebases, and check titles/proposed messages in mixed PRs. Require metadata for exactly
168
+ the previously selected SHA set, rejecting missing/duplicate records. Preserve that complete set
169
+ in reports. The shared GitHub key does not prove exclusive Dependabot identity. Do not fetch keys,
170
+ query live badges/revocation state, import REST/token code, or treat Signed-off-by as proof.
171
+ The explicit `skip-pull-request-authors` list remains a broad independent exemption, including for
172
+ human additions; do not generalize this option into Renovate/custom bot identity configuration.
173
+ Never use these exemptions to skip tests/security checks. Ordinary `commit check` and repository
174
+ plans keep checking, and every non-commit provider remains independent. Preserve frozen starter
175
+ bytes: omitted signature settings inherit the new default without rewriting existing starters.
96
176
  `breaking-markers` is a schema-v1 enum with `either` as its default. `either` accepts a header `!`,
97
177
  a recognized final `BREAKING CHANGE:` or `BREAKING-CHANGE:` footer, or both; `paired` requires both
98
178
  markers or neither and reports `breaking.marker-pair` for exactly one. Apply marker pairing only to
@@ -126,6 +206,36 @@ diagnostics.
126
206
  must refuse to shadow any effective discovered configuration, never edit `pyproject.toml`, and keep
127
207
  its deterministic starter template round-trippable through the strict loader.
128
208
 
209
+ Pull-request description policy lives under `src/yaga/descriptions/` and remains installed-only.
210
+ Require one explicit versioned policy and description source, plus an optional explicit template.
211
+ Keep the Markdown subset and checker pure; file/stdin/event loading, explicit current-PR fetching,
212
+ and bounded isolated Typos execution belong in adapters. File/stdin/event sources remain offline.
213
+ Only `--pr` invokes the installed authenticated `gh` CLI to read the current description. Require
214
+ a canonical HTTPS PR URL or a positive number plus `--repo [HOST/]OWNER/REPO`; reject mixed sources,
215
+ URL/repository ambiguity, and implicit checkout/environment selection. Use the shared shell-free
216
+ bounded process runtime with a 30-second timeout, 512 KiB stdout, and 64 KiB stderr; strictly parse
217
+ JSON and verify returned PR identity before checking its bounded body. Do not expose raw process
218
+ output or credentials. Support open, closed, and merged PRs without historical-description reads.
219
+ No Git history access, policy/template discovery, author exemptions, or writes belong in this
220
+ provider. Schema v1 controls prose word minimum, total character maximum,
221
+ heading level/length, whole-line placeholders, task completion, and optional spelling. Default
222
+ `heading-min-level` to 2 (strict integer 1 through 6) and `heading-max-length` to 120 (strict integer
223
+ 1 through 256). Apply level/length/content checks to top-level ATX and Setext headings; Setext
224
+ paragraphs do not contribute prose words. Reject raw HTML `h1` through `h6` tags outside comments,
225
+ code, and escaped literal markup; this narrow rule does not sanitize or forbid other HTML.
226
+ Template headings must occur once in order with meaningful section content; hidden comments and
227
+ fenced code cannot satisfy it. Reject template/policy conflicts as configuration errors.
228
+ Keep fixed text hygiene checks code/comment/escape-aware: suspicious invisible Unicode characters,
229
+ prose tabs, high-confidence literal newline escapes, and unmatched backtick delimiters. Preserve
230
+ ordinary Unicode joining/emoji behavior and source byte-column locations. Reject unsupported
231
+ control characters and bare CR before normalization; accept LF and CRLF. Do not infer lost text,
232
+ rewrite descriptions, or claim complete Markdown rendering or HTML sanitization.
233
+ Preserve 64 KiB policy/body/template bounds, the 1 MiB event bound, 64 template headings, exact
234
+ finding counts with 256 stored diagnostics, schema-v1 reports, and exits 0/1/2. The GitHub body
235
+ adapter validates supported open-PR events without claiming authenticated identity or requiring
236
+ commit metadata. Keep both commands outside repository plans and both Action import graphs.
237
+ See [pull-request descriptions](docs/pull-request-descriptions.md) for the complete public contract.
238
+
129
239
  Branch-name policy lives under `src/yaga/branches/` and remains installed-only. `branch check`
130
240
  requires one explicit versioned policy and one explicit short name; never inspect Git, infer the
131
241
  current branch, discover policy, parse an event, normalize `refs/` or remote prefixes, or read an
@@ -345,7 +455,11 @@ gate. Its PR-head configuration is contributor-controlled and is only a quality
345
455
  ## Action contract
346
456
 
347
457
  The public inputs are exactly `gate`, `operation`, `github-token`, `prerequisite-workflow`,
348
- `lifecycle-workflow`, `owner-id`, `approval-marker`, `request-timeout`, and `job-timeout-minutes`.
458
+ `lifecycle-workflow`, `owner-id`, `approval-marker`, `request-timeout`, `job-timeout-minutes`, and
459
+ `agent-review-policy-file`. The last input defaults to empty; nonempty values are deliberately
460
+ rejected before API access because this fixed GitHub adapter cannot execute named lenses or bind
461
+ their outcomes to a policy digest. Provider-neutral `gate agent-review policy` commands remain
462
+ available to external adapters.
349
463
  `operation` is closed to `invalidate`, `prepare`, `authorize`, `observe`, `request`, and `finalize`.
350
464
  Only `prepare` emits the closed `route` capability and `pull_request_number` used by the template;
351
465
  its routes are `skip`, `done`, `observe`, `owner`, `external`, and `approved`. Candidate identity
@@ -2,6 +2,7 @@
2
2
 
3
3
  DOCS_ADDR ?= localhost:9000
4
4
  BUILD_ARGS ?=
5
+ CHANGE_RANGE ?= HEAD^..HEAD
5
6
 
6
7
  actionlint:
7
8
  uv run yaga workflow lint .github/workflows examples
@@ -23,7 +24,7 @@ check:
23
24
  uv run ty check
24
25
  uv run pre-commit validate-manifest .pre-commit-hooks.yaml
25
26
  uv run yaga repo check --plan .yaga/checks/ci.toml --commit HEAD --revision HEAD
26
- uv run yaga change check --policy .yaga/change-policy.toml --range HEAD^..HEAD
27
+ uv run yaga change check --policy .yaga/change-policy.toml --range "$(CHANGE_RANGE)"
27
28
  bash -n scripts/composite_smoke_python
28
29
 
29
30
  test:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: yaga-cli
3
- Version: 0.2.1
3
+ Version: 0.4.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
@@ -24,6 +24,7 @@ Requires-Python: >=3.12
24
24
  Requires-Dist: pyyaml<7,>=6.0.3
25
25
  Requires-Dist: typer<1,>=0.27.2
26
26
  Provides-Extra: quality
27
+ Requires-Dist: certifi>=2026.10.19; extra == 'quality'
27
28
  Requires-Dist: torch<3,>=2.13; extra == 'quality'
28
29
  Requires-Dist: transformers<6,>=5.10; extra == 'quality'
29
30
  Provides-Extra: quality-bedrock
@@ -45,10 +46,12 @@ become another review conversation. Start with one check and adopt more as your
45
46
  | Problem | What YAGA checks |
46
47
  | --- | --- |
47
48
  | Commit messages and branch names follow inconsistent conventions | [Commit policy](https://dariuszpanas.github.io/yaga/commit-policy.html) and [branch naming](https://dariuszpanas.github.io/yaga/branch-policy.html) defined by your team |
49
+ | Pull requests omit useful context or leave template sections unfinished | [Description checks](https://dariuszpanas.github.io/yaga/pull-request-descriptions.html) for required content, templates, and optional spelling |
48
50
  | A change lands without the related files your project expects | [Changed-path rules](https://dariuszpanas.github.io/yaga/change-policy.html), such as source changes accompanied by tests |
49
51
  | 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
52
  | 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
53
  | Local checks and CI enforce different policies | An explicit [repository plan](https://dariuszpanas.github.io/yaga/repository-plans.html) used in both places |
54
+ | 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
55
 
53
56
  Checks produce actionable findings and reports for automation. You choose the policies and checks;
54
57
  YAGA does not require adopting the entire CLI at once.
@@ -13,10 +13,12 @@ become another review conversation. Start with one check and adopt more as your
13
13
  | Problem | What YAGA checks |
14
14
  | --- | --- |
15
15
  | Commit messages and branch names follow inconsistent conventions | [Commit policy](https://dariuszpanas.github.io/yaga/commit-policy.html) and [branch naming](https://dariuszpanas.github.io/yaga/branch-policy.html) defined by your team |
16
+ | Pull requests omit useful context or leave template sections unfinished | [Description checks](https://dariuszpanas.github.io/yaga/pull-request-descriptions.html) for required content, templates, and optional spelling |
16
17
  | A change lands without the related files your project expects | [Changed-path rules](https://dariuszpanas.github.io/yaga/change-policy.html), such as source changes accompanied by tests |
17
18
  | 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
19
  | 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
20
  | Local checks and CI enforce different policies | An explicit [repository plan](https://dariuszpanas.github.io/yaga/repository-plans.html) used in both places |
21
+ | 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
22
 
21
23
  Checks produce actionable findings and reports for automation. You choose the policies and checks;
22
24
  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,116 @@
2
2
 
3
3
  ## [Unreleased]
4
4
 
5
+ ## [0.4.0] - 2026-10-29
6
+
7
+ ### Added
8
+
9
+ - Add installed `pull-request description check` and `github pull-request description check`
10
+ commands for explicit Markdown files, stdin, and GitHub event bodies. Version-one policies
11
+ check meaningful content, word and character limits, unfinished placeholders, optional task
12
+ completion, and isolated Typos spelling. Explicit templates require ordered, filled sections
13
+ and replacement of unchanged prompts. Reports support text, JSON, and GitHub annotations;
14
+ existing commit checks and composite Actions retain their separate contracts.
15
+
16
+ - Check description heading structure even without a template. Default to H2 or deeper and at
17
+ most 120 heading-text characters; reject empty headings and raw HTML heading tags. Recognize
18
+ top-level Setext headings so a whole paragraph formatted as an H1 or H2 cannot count as prose.
19
+ Reject templates whose headings conflict with the selected policy.
20
+
21
+ - Detect suspicious invisible characters, prose tabs, literal escaped line breaks, and unmatched
22
+ backticks outside code and comments. Reject bare carriage returns and identify unsupported
23
+ control characters without rendering them. Document literal UTF-8 file authoring to preserve
24
+ Markdown through shell commands.
25
+
26
+ - Add `pull-request description check --pr` for the current body of an existing GitHub pull
27
+ request. Accept an explicit URL or a number with `--repo`, fetch through the installed
28
+ authenticated `gh` CLI with bounded process execution, and run the same policy/template checks
29
+ without a checkout or Actions. File, stdin, and event checks remain offline.
30
+
31
+ - Add a separate minimum-runtime qualification helper that builds a fresh base wheel, installs
32
+ the lowest resolved runtime dependencies outside the checkout, checks installed imports, and
33
+ runs the shared CLI smoke checks. Its JSON receipt records actual versions and the wheel hash;
34
+ the frozen-lock matrix and strict package build gate remain required.
35
+
36
+ - Make source types, prerequisites, network behavior, reports, repository-plan membership, and
37
+ Action availability discoverable from installed help and the command guide, with tested local
38
+ and complete-PR recipes.
39
+
40
+ - Document the staged-check design assessment, including index semantics, report compatibility,
41
+ and implementation acceptance criteria. Staged execution is not included in this release.
42
+
43
+ ### Fixed
44
+
45
+ - Reject Git object-path selectors in changed-path range endpoints before repository access, so
46
+ a crafted gitlink cannot redirect the selected comparison and hide policy findings.
47
+
48
+ - Isolate installed-wheel smoke Git setup from ambient repository variables, user/system
49
+ configuration, and templates, preserving unrelated repositories during qualification.
50
+
51
+ - Allow an explicit `CHANGE_RANGE` override for local `make ci` qualification. Document the
52
+ independent full commit range check and the default last-commit-only comparison.
53
+
54
+ - Require `certifi>=2026.10.19` in the published `quality` extra, including wheel metadata, to
55
+ prevent supported model-download stacks retaining older affected certificate bundles. This
56
+ applies when installing/upgrading with the extra; base and Bedrock requirements are unchanged.
57
+
58
+ - Reject inconsistent Typos success/finding responses instead of silently accepting unexpected
59
+ output as a clean spelling result.
60
+
61
+ - Correct the documented repository-plan key, stdout/stderr capture, lifecycle exit codes,
62
+ quality-provider help, and the fixed GitHub Action's rejecting policy-file input.
63
+
64
+ ## [0.3.0] - 2026-10-18
65
+
66
+ ### Added
67
+
68
+ - Add the internal version-one test qualification policy and pure selection planner, with
69
+ strict bounded validation, additive path/tag rules, full-suite fallback, complete variants,
70
+ prerequisite ordering, and tested polyglot and django-ray examples.
71
+
72
+ - Add installed `test policy check` and `test plan` commands, with explicit policy/profile and
73
+ Git range or full-profile revision inputs. Plans bind exact commit/tree and policy identities,
74
+ carry deterministic version-one JSON digests, and explain selected suites and variants.
75
+ Git collection remains bounded and never fetches. Planning does not run tests or enable skips;
76
+ normalized receipt evaluation is available separately.
77
+
78
+ - Add a pure version-one executor registry and handoff API with complete fixed job mappings,
79
+ binding/source/policy identity checks, exact variant preservation, capability preflight,
80
+ and bounded dispatch/cell output. Add runnable polyglot and django-ray examples, installed-wheel
81
+ smoke, and a django-ray shadow-pilot guide. Existing required CI stays enabled. Historical
82
+ selection replay and one full shadow observation are recorded; measured selective feedback
83
+ savings, an adoption threshold, and selective activation remain pending.
84
+
85
+ - Add pure version-one selection diagnostics and strict offline plan decoding, preserving
86
+ source/policy identities, fallback causes, selection breadth, unclassified paths, and explicit
87
+ baseline comparisons. Add optional separate replay diagnostics without changing existing plan
88
+ or comparison formats. Complete reports stay within 4 MiB and make no execution claims.
89
+
90
+ - Add version-one normalized test results and pure evaluation, plus installed `test evaluate`
91
+ with explicit plan/results files and independent policy, manifest, source, run, and attempt
92
+ identities. Missing prerequisites or variants and non-passed outcomes block success; malformed,
93
+ stale, duplicate, or extra results fail validation. Preserve bounded reports, offline operation,
94
+ both Action import boundaries, and existing required CI. Selective activation remains pending.
95
+
96
+ - Add the schema-v1 boolean `dependabot-require-github-signature`, defaulting to `true`.
97
+ Each otherwise eligible Dependabot-skipped commit must verify offline against the pinned
98
+ GitHub signing key. Missing or failed verification runs normal checks. An explicit `false`
99
+ retains the per-commit metadata filter; explicit PR-author exemptions remain independent.
100
+
101
+ ### Fixed
102
+
103
+ - Map eight exact application-test files to application qualification in the django-ray example,
104
+ include latency for changes to the shared Docker scenario helper, and preserve the shared lease
105
+ dependencies added by the coordinated django-ray release work. Add complete historical
106
+ path, unknown-path, lockfile, rename/deletion, and variant regressions. Required CI and the
107
+ conservative full/unknown fallback behavior remain enabled.
108
+
109
+ - Narrow the opt-in Dependabot commit-message exemption per commit, so ordinary human additions
110
+ and human rebases are checked even inside a Dependabot PR. Mixed PR titles and proposed
111
+ messages are checked too. Signature verification requires an available trusted `gpgv` and
112
+ adds no API or token access. The shared GitHub key does not prove exclusive bot authorship,
113
+ and this quality exemption does not authorize skipping other checks.
114
+
5
115
  ## [0.2.1] - 2026-10-10
6
116
 
7
117
  ### Added