yaga-cli 0.3.0__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 (430) hide show
  1. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/.github/workflows/ci.yml +2 -2
  2. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/.github/workflows/commit-adoption-qualification.yml +1 -1
  3. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/.github/workflows/commit-quality.yml +1 -1
  4. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/.github/workflows/docs.yml +1 -1
  5. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/.github/workflows/release.yml +2 -2
  6. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/AGENTS.md +23 -0
  7. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/CONTRIBUTING.md +62 -2
  8. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/Makefile +2 -1
  9. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/PKG-INFO +3 -1
  10. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/README.md +1 -0
  11. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/docs/changelog.md +59 -0
  12. yaga_cli-0.4.0/docs/commands.md +135 -0
  13. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/docs/commit-quality.md +9 -0
  14. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/docs/configuration.md +16 -3
  15. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/docs/contributing.md +16 -1
  16. yaga_cli-0.4.0/docs/designs/staged-checks.md +93 -0
  17. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/docs/getting-started.md +1 -1
  18. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/docs/github-review-adapter.md +1 -0
  19. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/docs/index.md +4 -2
  20. yaga_cli-0.4.0/docs/minimum-runtime.md +44 -0
  21. yaga_cli-0.4.0/docs/pull-request-descriptions.md +335 -0
  22. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/docs/repository-checks.md +3 -0
  23. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/docs/troubleshooting.md +31 -13
  24. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/docs/usage.md +16 -9
  25. yaga_cli-0.4.0/examples/description-policy.toml +8 -0
  26. yaga_cli-0.4.0/examples/pull-request-template.md +7 -0
  27. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/pyproject.toml +2 -1
  28. yaga_cli-0.4.0/release-notes.md +58 -0
  29. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/scripts/check_build.py +246 -34
  30. yaga_cli-0.4.0/scripts/check_minimum_runtime.py +168 -0
  31. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/cli.py +8 -1
  32. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/commands/commit.py +4 -1
  33. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/commands/github.py +2 -0
  34. yaga_cli-0.4.0/src/yaga/commands/pull_request.py +124 -0
  35. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/commits/typos.py +22 -3
  36. yaga_cli-0.4.0/src/yaga/descriptions/__init__.py +1 -0
  37. yaga_cli-0.4.0/src/yaga/descriptions/checker.py +213 -0
  38. yaga_cli-0.4.0/src/yaga/descriptions/github.py +294 -0
  39. yaga_cli-0.4.0/src/yaga/descriptions/hygiene.py +70 -0
  40. yaga_cli-0.4.0/src/yaga/descriptions/markdown.py +428 -0
  41. yaga_cli-0.4.0/src/yaga/descriptions/models.py +177 -0
  42. yaga_cli-0.4.0/src/yaga/descriptions/policy.py +64 -0
  43. yaga_cli-0.4.0/src/yaga/descriptions/reporting.py +117 -0
  44. yaga_cli-0.4.0/src/yaga/descriptions/service.py +104 -0
  45. yaga_cli-0.4.0/src/yaga/descriptions/sources.py +137 -0
  46. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/git/changes.py +2 -0
  47. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/version_requirement.py +1 -1
  48. yaga_cli-0.4.0/tests/test_build_git_isolation.py +68 -0
  49. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_change_cli.py +51 -0
  50. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_change_git.py +31 -0
  51. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_cli.py +36 -6
  52. yaga_cli-0.4.0/tests/test_command_guide.py +114 -0
  53. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_commit_typos.py +81 -1
  54. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_commit_warnings.py +35 -0
  55. yaga_cli-0.4.0/tests/test_description_checker.py +297 -0
  56. yaga_cli-0.4.0/tests/test_description_cli.py +664 -0
  57. yaga_cli-0.4.0/tests/test_description_github.py +407 -0
  58. yaga_cli-0.4.0/tests/test_description_hygiene.py +301 -0
  59. yaga_cli-0.4.0/tests/test_description_markdown.py +181 -0
  60. yaga_cli-0.4.0/tests/test_description_policy.py +138 -0
  61. yaga_cli-0.4.0/tests/test_description_remote_cli.py +317 -0
  62. yaga_cli-0.4.0/tests/test_description_sources.py +296 -0
  63. yaga_cli-0.4.0/tests/test_description_structure.py +222 -0
  64. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_installation.py +2 -2
  65. yaga_cli-0.4.0/tests/test_minimum_runtime.py +71 -0
  66. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_tooling.py +12 -2
  67. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/uv.lock +20 -18
  68. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/zensical.toml +3 -0
  69. yaga_cli-0.3.0/docs/commands.md +0 -51
  70. yaga_cli-0.3.0/release-notes.md +0 -50
  71. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/.gitattributes +0 -0
  72. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/.github/dependabot.yml +0 -0
  73. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/.github/workflows/commit-policy.yml +0 -0
  74. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/.gitignore +0 -0
  75. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/.pre-commit-hooks.yaml +0 -0
  76. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/.yaga/branch-policy.toml +0 -0
  77. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/.yaga/change-policy.toml +0 -0
  78. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/.yaga/checks/ci.toml +0 -0
  79. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/.yaga/mode-policy.toml +0 -0
  80. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/.yaga/path-policy.toml +0 -0
  81. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/.yaga/size-policy.toml +0 -0
  82. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/.yaga/tree-policy.toml +0 -0
  83. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/CHANGELOG.md +0 -0
  84. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/LICENSE +0 -0
  85. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/SECURITY.md +0 -0
  86. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/_typos.toml +0 -0
  87. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/action.yml +0 -0
  88. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/actions/commit-check/action.yml +0 -0
  89. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/docs/agent-review-gate.md +0 -0
  90. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/docs/assets/branding/isometric_terminal_y_logo.png +0 -0
  91. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/docs/assets/branding/isometric_terminal_y_logo_transparent.png +0 -0
  92. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/docs/assets/branding/yaga_cli_brand_concept_board.png +0 -0
  93. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/docs/branch-policy.md +0 -0
  94. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/docs/change-policy.md +0 -0
  95. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/docs/ci-adoption.md +0 -0
  96. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/docs/commit-policy-direction.md +0 -0
  97. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/docs/commit-policy.md +0 -0
  98. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/docs/designs/examples/test-planning/django-ray.toml +0 -0
  99. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/docs/designs/examples/test-planning/polyglot.toml +0 -0
  100. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/docs/designs/experiments/django-ray-full-shadow-result.json +0 -0
  101. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/docs/designs/experiments/django-ray-shadow-replay/cohort.json +0 -0
  102. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/docs/designs/experiments/django-ray-shadow-replay/observations-01.json +0 -0
  103. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/docs/designs/experiments/django-ray-shadow-replay/observations-02.json +0 -0
  104. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/docs/designs/experiments/django-ray-shadow-replay/observations-03.json +0 -0
  105. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/docs/designs/experiments/django-ray-shadow-replay/observations-04.json +0 -0
  106. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/docs/designs/experiments/django-ray-shadow-replay/observations-05.json +0 -0
  107. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/docs/designs/experiments/django-ray-shadow-replay/observations-06.json +0 -0
  108. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/docs/designs/experiments/django-ray-shadow-replay/report.json +0 -0
  109. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/docs/designs/experiments/django-ray-shadow-replay.md +0 -0
  110. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/docs/designs/test-planning.md +0 -0
  111. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/docs/github-actions.md +0 -0
  112. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/docs/install.ps1 +0 -0
  113. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/docs/install.sh +0 -0
  114. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/docs/mode-policy.md +0 -0
  115. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/docs/path-policy.md +0 -0
  116. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/docs/recipes.md +0 -0
  117. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/docs/releasing.md +0 -0
  118. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/docs/repository-plans.md +0 -0
  119. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/docs/security.md +0 -0
  120. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/docs/size-policy.md +0 -0
  121. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/docs/stylesheets/extra.css +0 -0
  122. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/docs/test-planning-handoff.md +0 -0
  123. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/docs/test-planning.md +0 -0
  124. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/docs/tree-policy.md +0 -0
  125. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/docs/workflow-checks.md +0 -0
  126. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/examples/agent-review-policy.toml +0 -0
  127. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/examples/agent-review-results.json +0 -0
  128. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/examples/agent-review.yml +0 -0
  129. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/examples/commit-policy.yml +0 -0
  130. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/examples/review-policy.yml +0 -0
  131. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/examples/test-planning/fixed_handoff.py +0 -0
  132. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/examples/test-planning/replay_django_ray.py +0 -0
  133. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/overrides/404.html +0 -0
  134. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/scripts/check_description.py +0 -0
  135. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/scripts/check_docs.py +0 -0
  136. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/scripts/check_release.py +0 -0
  137. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/scripts/composite_smoke_python +0 -0
  138. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/scripts/prepare_commit_action_control.py +0 -0
  139. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/__init__.py +0 -0
  140. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/__main__.py +0 -0
  141. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/_update_worker.py +0 -0
  142. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/action.py +0 -0
  143. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/action_cli.py +0 -0
  144. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/agent_review/__init__.py +0 -0
  145. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/agent_review/evaluation.py +0 -0
  146. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/agent_review/github/__init__.py +0 -0
  147. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/agent_review/github/boundary.py +0 -0
  148. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/agent_review/github/candidate.py +0 -0
  149. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/agent_review/github/constants.py +0 -0
  150. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/agent_review/github/events.py +0 -0
  151. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/agent_review/github/evidence.py +0 -0
  152. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/agent_review/github/gate.py +0 -0
  153. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/agent_review/github/publication.py +0 -0
  154. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/agent_review/github/requests.py +0 -0
  155. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/agent_review/github/runs.py +0 -0
  156. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/agent_review/github/runtime.py +0 -0
  157. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/agent_review/plan.py +0 -0
  158. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/agent_review/policy.py +0 -0
  159. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/agent_review/results.py +0 -0
  160. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/agent_review/runtime.py +0 -0
  161. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/branches/__init__.py +0 -0
  162. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/branches/checker.py +0 -0
  163. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/branches/models.py +0 -0
  164. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/branches/patterns.py +0 -0
  165. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/branches/policy.py +0 -0
  166. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/branches/reporting.py +0 -0
  167. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/branches/service.py +0 -0
  168. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/changes/__init__.py +0 -0
  169. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/changes/checker.py +0 -0
  170. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/changes/git.py +0 -0
  171. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/changes/models.py +0 -0
  172. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/changes/patterns.py +0 -0
  173. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/changes/policy.py +0 -0
  174. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/changes/reporting.py +0 -0
  175. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/changes/service.py +0 -0
  176. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/commands/__init__.py +0 -0
  177. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/commands/branch.py +0 -0
  178. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/commands/change.py +0 -0
  179. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/commands/config.py +0 -0
  180. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/commands/gate.py +0 -0
  181. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/commands/mode.py +0 -0
  182. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/commands/path.py +0 -0
  183. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/commands/repo.py +0 -0
  184. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/commands/self_manage.py +0 -0
  185. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/commands/size.py +0 -0
  186. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/commands/test.py +0 -0
  187. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/commands/tree.py +0 -0
  188. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/commands/workflow.py +0 -0
  189. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/commit_action_cli.py +0 -0
  190. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/commit_action_runtime.py +0 -0
  191. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/commits/__init__.py +0 -0
  192. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/commits/checker.py +0 -0
  193. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/commits/config.py +0 -0
  194. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/commits/config_explain.py +0 -0
  195. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/commits/config_init.py +0 -0
  196. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/commits/content_policy.py +0 -0
  197. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/commits/dependabot.py +0 -0
  198. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/commits/git.py +0 -0
  199. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/commits/github_event.py +0 -0
  200. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/commits/github_reporting.py +0 -0
  201. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/commits/github_signature.py +0 -0
  202. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/commits/models.py +0 -0
  203. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/commits/parser.py +0 -0
  204. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/commits/policy.py +0 -0
  205. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/commits/quality.py +0 -0
  206. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/commits/reporting.py +0 -0
  207. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/commits/service.py +0 -0
  208. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/commits/severity.py +0 -0
  209. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/commits/sources.py +0 -0
  210. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/commits/template.py +0 -0
  211. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/commits/trusted_policy.py +0 -0
  212. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/config_scope.py +0 -0
  213. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/errors.py +0 -0
  214. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/files.py +0 -0
  215. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/git/__init__.py +0 -0
  216. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/git/process.py +0 -0
  217. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/git/runtime.py +0 -0
  218. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/git/tree.py +0 -0
  219. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/github.py +0 -0
  220. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/models.py +0 -0
  221. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/modes/__init__.py +0 -0
  222. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/modes/checker.py +0 -0
  223. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/modes/git.py +0 -0
  224. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/modes/models.py +0 -0
  225. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/modes/patterns.py +0 -0
  226. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/modes/policy.py +0 -0
  227. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/modes/reporting.py +0 -0
  228. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/modes/service.py +0 -0
  229. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/path_patterns.py +0 -0
  230. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/paths/__init__.py +0 -0
  231. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/paths/checker.py +0 -0
  232. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/paths/git.py +0 -0
  233. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/paths/models.py +0 -0
  234. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/paths/policy.py +0 -0
  235. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/paths/reporting.py +0 -0
  236. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/paths/service.py +0 -0
  237. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/repository/__init__.py +0 -0
  238. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/repository/checker.py +0 -0
  239. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/repository/models.py +0 -0
  240. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/repository/plan.py +0 -0
  241. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/repository/reporting.py +0 -0
  242. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/self_update.py +0 -0
  243. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/sizes/__init__.py +0 -0
  244. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/sizes/checker.py +0 -0
  245. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/sizes/git.py +0 -0
  246. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/sizes/models.py +0 -0
  247. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/sizes/patterns.py +0 -0
  248. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/sizes/policy.py +0 -0
  249. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/sizes/reporting.py +0 -0
  250. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/sizes/service.py +0 -0
  251. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/status.py +0 -0
  252. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/test_planning/__init__.py +0 -0
  253. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/test_planning/diagnostics.py +0 -0
  254. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/test_planning/evaluation.py +0 -0
  255. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/test_planning/evaluation_service.py +0 -0
  256. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/test_planning/git.py +0 -0
  257. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/test_planning/handoff.py +0 -0
  258. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/test_planning/limits.py +0 -0
  259. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/test_planning/models.py +0 -0
  260. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/test_planning/planner.py +0 -0
  261. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/test_planning/policy.py +0 -0
  262. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/test_planning/reporting.py +0 -0
  263. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/test_planning/reports.py +0 -0
  264. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/test_planning/results.py +0 -0
  265. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/test_planning/selection.py +0 -0
  266. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/test_planning/service.py +0 -0
  267. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/test_planning/source.py +0 -0
  268. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/trees/__init__.py +0 -0
  269. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/trees/checker.py +0 -0
  270. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/trees/git.py +0 -0
  271. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/trees/models.py +0 -0
  272. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/trees/patterns.py +0 -0
  273. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/trees/policy.py +0 -0
  274. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/trees/reporting.py +0 -0
  275. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/trees/service.py +0 -0
  276. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/workflows/__init__.py +0 -0
  277. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/workflows/actionlint_runtime.py +0 -0
  278. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/workflows/actionlint_snapshot.py +0 -0
  279. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/workflows/checker.py +0 -0
  280. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/workflows/inputs.py +0 -0
  281. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/workflows/lint.py +0 -0
  282. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/workflows/models.py +0 -0
  283. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/workflows/parser.py +0 -0
  284. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/workflows/references.py +0 -0
  285. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/workflows/reporting.py +0 -0
  286. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/workflows/security.py +0 -0
  287. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/workflows/security_facts.py +0 -0
  288. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/workflows/security_models.py +0 -0
  289. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/workflows/security_reporting.py +0 -0
  290. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/workflows/security_rules.py +0 -0
  291. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/workflows/yaml.py +0 -0
  292. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/__init__.py +0 -0
  293. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/codex_support.py +0 -0
  294. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/fixtures/commit_consumer_parity.json +0 -0
  295. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/fixtures/github-signatures/.gitattributes +0 -0
  296. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/fixtures/github-signatures/.typos.toml +0 -0
  297. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/fixtures/github-signatures/README.md +0 -0
  298. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/fixtures/github-signatures/dependabot-setup-uv.commit +0 -0
  299. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/fixtures/github-signatures/dependabot-urllib3-parent.commit +0 -0
  300. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/fixtures/github-signatures/dependabot-urllib3.commit +0 -0
  301. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/fixtures/github-signatures/web-flow.asc +0 -0
  302. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_action.py +0 -0
  303. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_agent_review_cli.py +0 -0
  304. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_agent_review_evaluation.py +0 -0
  305. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_agent_review_plan.py +0 -0
  306. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_agent_review_policy.py +0 -0
  307. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_agent_review_results.py +0 -0
  308. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_branch_checker.py +0 -0
  309. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_branch_cli.py +0 -0
  310. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_branch_models.py +0 -0
  311. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_branch_patterns.py +0 -0
  312. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_branch_policy.py +0 -0
  313. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_branch_reporting.py +0 -0
  314. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_branch_service.py +0 -0
  315. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_change_checker.py +0 -0
  316. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_change_patterns.py +0 -0
  317. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_change_policy.py +0 -0
  318. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_change_reporting.py +0 -0
  319. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_codex_events.py +0 -0
  320. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_codex_evidence.py +0 -0
  321. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_codex_evidence_literals.py +0 -0
  322. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_codex_gate.py +0 -0
  323. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_codex_publication.py +0 -0
  324. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_codex_requests.py +0 -0
  325. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_codex_runs.py +0 -0
  326. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_codex_runtime.py +0 -0
  327. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_commit_action.py +0 -0
  328. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_commit_action_controls.py +0 -0
  329. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_commit_body_customization.py +0 -0
  330. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_commit_checker.py +0 -0
  331. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_commit_config.py +0 -0
  332. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_commit_consumer_policy.py +0 -0
  333. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_commit_content_policy.py +0 -0
  334. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_commit_explicit_inputs.py +0 -0
  335. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_commit_git.py +0 -0
  336. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_commit_parser.py +0 -0
  337. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_commit_quality.py +0 -0
  338. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_commit_quality_workflow.py +0 -0
  339. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_commit_reporting.py +0 -0
  340. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_commit_service.py +0 -0
  341. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_commit_sources.py +0 -0
  342. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_commit_template.py +0 -0
  343. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_commit_trusted_policy.py +0 -0
  344. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_config_init.py +0 -0
  345. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_config_workflows.py +0 -0
  346. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_consumer_policy_entrypoints.py +0 -0
  347. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_dependabot_commit_filter.py +0 -0
  348. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_description.py +0 -0
  349. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_docs_links.py +0 -0
  350. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_files.py +0 -0
  351. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_git_runtime.py +0 -0
  352. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_git_tree.py +0 -0
  353. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_github.py +0 -0
  354. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_github_commit_signature.py +0 -0
  355. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_github_pull_request.py +0 -0
  356. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_github_reporting.py +0 -0
  357. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_installers.py +0 -0
  358. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_mode_checker.py +0 -0
  359. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_mode_cli.py +0 -0
  360. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_mode_git.py +0 -0
  361. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_mode_models.py +0 -0
  362. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_mode_patterns.py +0 -0
  363. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_mode_policy.py +0 -0
  364. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_mode_reporting.py +0 -0
  365. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_mode_service.py +0 -0
  366. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_models.py +0 -0
  367. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_path_checker.py +0 -0
  368. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_path_cli.py +0 -0
  369. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_path_git.py +0 -0
  370. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_path_models.py +0 -0
  371. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_path_patterns.py +0 -0
  372. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_path_policy.py +0 -0
  373. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_path_reporting.py +0 -0
  374. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_path_service.py +0 -0
  375. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_plain_messages.py +0 -0
  376. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_pr_proposed_message.py +0 -0
  377. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_regular_file_prefix.py +0 -0
  378. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_release.py +0 -0
  379. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_repo_cli.py +0 -0
  380. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_repository_checker.py +0 -0
  381. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_repository_contract.py +0 -0
  382. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_repository_models.py +0 -0
  383. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_repository_plan.py +0 -0
  384. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_repository_reporting.py +0 -0
  385. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_size_checker.py +0 -0
  386. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_size_cli.py +0 -0
  387. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_size_git.py +0 -0
  388. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_size_models.py +0 -0
  389. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_size_patterns.py +0 -0
  390. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_size_policy.py +0 -0
  391. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_size_reporting.py +0 -0
  392. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_size_service.py +0 -0
  393. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_status.py +0 -0
  394. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_test_planning_cli.py +0 -0
  395. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_test_planning_diagnostics.py +0 -0
  396. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_test_planning_evaluate_cli.py +0 -0
  397. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_test_planning_evaluation.py +0 -0
  398. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_test_planning_examples.py +0 -0
  399. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_test_planning_git.py +0 -0
  400. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_test_planning_handoff.py +0 -0
  401. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_test_planning_handoff_example.py +0 -0
  402. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_test_planning_planner.py +0 -0
  403. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_test_planning_policy.py +0 -0
  404. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_test_planning_replay.py +0 -0
  405. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_test_planning_reporting.py +0 -0
  406. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_test_planning_results.py +0 -0
  407. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_tree_checker.py +0 -0
  408. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_tree_cli.py +0 -0
  409. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_tree_git.py +0 -0
  410. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_tree_models.py +0 -0
  411. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_tree_patterns.py +0 -0
  412. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_tree_policy.py +0 -0
  413. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_tree_reporting.py +0 -0
  414. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_tree_service.py +0 -0
  415. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_workflow_checker.py +0 -0
  416. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_workflow_inputs.py +0 -0
  417. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_workflow_lint.py +0 -0
  418. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_workflow_lint_hardening.py +0 -0
  419. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_workflow_lint_reporting.py +0 -0
  420. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_workflow_provider_inputs.py +0 -0
  421. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_workflow_references.py +0 -0
  422. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_workflow_reporting.py +0 -0
  423. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_workflow_security_cli.py +0 -0
  424. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_workflow_security_facts.py +0 -0
  425. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_workflow_security_models.py +0 -0
  426. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_workflow_security_reporting.py +0 -0
  427. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_workflow_security_rules.py +0 -0
  428. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_workflow_security_selection.py +0 -0
  429. {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_workflow_security_service.py +0 -0
  430. {yaga_cli-0.3.0 → 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@1c37ad07a6a961277cf70c0d37d6f313000f5884 # v10.3.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@1c37ad07a6a961277cf70c0d37d6f313000f5884 # v10.3.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"
@@ -20,7 +20,7 @@ jobs:
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@1c37ad07a6a961277cf70c0d37d6f313000f5884 # v10.3.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@1c37ad07a6a961277cf70c0d37d6f313000f5884 # v10.3.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@1c37ad07a6a961277cf70c0d37d6f313000f5884 # v10.3.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
@@ -81,7 +81,7 @@ jobs:
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
@@ -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
@@ -42,10 +42,36 @@ 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`, `test`, `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.
@@ -180,6 +206,36 @@ diagnostics.
180
206
  must refuse to shadow any effective discovered configuration, never edit `pyproject.toml`, and keep
181
207
  its deterministic starter template round-trippable through the strict loader.
182
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
+
183
239
  Branch-name policy lives under `src/yaga/branches/` and remains installed-only. `branch check`
184
240
  requires one explicit versioned policy and one explicit short name; never inspect Git, infer the
185
241
  current branch, discover policy, parse an event, normalize `refs/` or remote prefixes, or read an
@@ -399,7 +455,11 @@ gate. Its PR-head configuration is contributor-controlled and is only a quality
399
455
  ## Action contract
400
456
 
401
457
  The public inputs are exactly `gate`, `operation`, `github-token`, `prerequisite-workflow`,
402
- `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.
403
463
  `operation` is closed to `invalidate`, `prepare`, `authorize`, `observe`, `request`, and `finalize`.
404
464
  Only `prepare` emits the closed `route` capability and `pull_request_number` used by the template;
405
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.3.0
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,6 +46,7 @@ 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 |
@@ -13,6 +13,7 @@ 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 |
@@ -2,6 +2,65 @@
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
+
5
64
  ## [0.3.0] - 2026-10-18
6
65
 
7
66
  ### Added
@@ -0,0 +1,135 @@
1
+ # Command index
2
+
3
+ Start with the source you intend to check, then read the linked reference for its policy,
4
+ diagnostics, and limits. Run `yaga <group> --help` for the installed version's exact options.
5
+ Checks never imply an all-checks mode or automatically run another provider.
6
+
7
+ ## Choose a source and prerequisites
8
+
9
+ "Offline" below describes checking after installation. Optional spelling requires an installed
10
+ Typos executable; Git-backed commands require local objects and never fetch. No command in the
11
+ first table needs GitHub credentials except an explicit description `--pr` fetch.
12
+
13
+ | Command and reference | Source and required selection | External tools and execution |
14
+ | --- | --- | --- |
15
+ | [`yaga commit check`](commit-policy.md) | One literal title/message, editor file, file, stdin, commit, or range; defaults to `HEAD`. One discovered or explicit commit config. | Offline. Git for history and `--edit`; Typos if spelling is enabled. |
16
+ | [`yaga branch check`](branch-policy.md) | Literal short name via `--name` and explicit `--policy`. | Offline; no Git. |
17
+ | [`yaga pull-request description check`](pull-request-descriptions.md) | File, stdin, or current PR; explicit `--policy`, optional `--template`. | File/stdin are offline. Only `--pr` uses authenticated `gh` and network to read current metadata; no checkout. Typos if enabled. |
18
+ | [`yaga change check`](change-policy.md) | Committed changed paths from explicit `--range A..B` or `A...B` and `--policy`. | Offline Git; complete history and a unique three-dot merge base. |
19
+ | [`yaga tree check`](tree-policy.md) | Committed path names; explicit `--revision` and `--policy`. | Offline Git; selected commit/tree must exist. |
20
+ | [`yaga path check`](path-policy.md) | Committed path portability; explicit `--revision` and `--policy`. | Offline Git; selected commit/tree must exist. |
21
+ | [`yaga mode check`](mode-policy.md) | Committed entry modes; explicit `--revision` and `--policy`. | Offline Git; selected commit/tree must exist. |
22
+ | [`yaga size check`](size-policy.md) | Committed blob sizes; explicit `--revision` and `--policy`. | Offline Git; selected commit/tree/blobs must exist. |
23
+ | [`yaga workflow check`](workflow-checks.md) | Current workflow files: explicit paths or documented `.github/workflows` defaults. | Offline; installed YAML parser, no external tool. |
24
+ | [`yaga workflow security`](workflow-checks.md) | Same current files; frozen `recommended-v1` default, optional explicit profile/rules. | Offline; installed YAML parser, no external tool. |
25
+ | [`yaga workflow lint`](workflow-checks.md) | Current workflows plus bounded transitive local workflow/Action support files. | Docker CLI and Linux daemon; may pull the pinned image. Container networking is disabled. The active context can be remote and receives the snapshot. |
26
+ | [`yaga github pull-request check`](github-actions.md) | Event snapshot, matching runner identity/checkout, complete commit history, and commit config. | Offline Git; no API/token. Typos if enabled; trusted `gpgv` for the opt-in signed Dependabot exemption, otherwise normal checks run. |
27
+ | [`yaga github pull-request description check`](pull-request-descriptions.md#github-actions) | Explicit `--event-file`, `--policy`, optional `--template`. | Offline; no Git/checkout. Typos if enabled. |
28
+ | [`yaga repo check`](repository-plans.md) | Explicit provider list or `--plan`; selected providers' runtime inputs. | Inherits each selected provider's tools and execution boundary. |
29
+
30
+ `tree`, `path`, `mode`, and `size` do not see staged, untracked, or working-file changes. A
31
+ `repo check --revision SHA` sets only their committed source; it does not make workflow checks
32
+ read that revision. Policies and workflow files remain current runtime inputs.
33
+
34
+ ## Planning and optional review
35
+
36
+ | Command and reference | Source and required selection | External tools and execution |
37
+ | --- | --- | --- |
38
+ | [`yaga test policy check`](test-planning.md) | Explicit policy via `--file`. | Offline; no Git or test execution. |
39
+ | [`yaga test plan`](test-planning.md) | Explicit policy/profile and exactly one range or revision; revision requires a full profile. | Offline Git; no test execution. Range needs complete history; revision needs its commit/tree. |
40
+ | [`yaga test evaluate`](test-planning.md#evaluate-normalized-results) | Explicit plan/results and independent policy, binding, commit/tree, run, and attempt identities. | Offline; no Git, provider API, or test execution. |
41
+ | [`yaga commit quality`](commit-quality.md) | One message, file, stdin, commit, or range; default `HEAD`; quality config and optional provider overrides. | Optional provider extra. Hugging Face runs locally but may download models; cached `--offline` prevents downloads. Bedrock sends selected text remotely and needs AWS credentials/region/access. Git for history. |
42
+ | [`yaga gate agent-review policy check`](agent-review-gate.md) | Explicit named-lens policy via `--file`. | Offline; no agent execution or credentials. |
43
+ | [`yaga gate agent-review policy plan`](agent-review-gate.md) | Explicit named-lens policy via `--file`. | Offline; describes work for an external adapter, does not run it. |
44
+ | [`yaga gate agent-review policy template`](agent-review-gate.md) | Explicit named-lens policy via `--file`. | Offline; emits a pending receipt scaffold. |
45
+ | [`yaga gate agent-review policy evaluate`](agent-review-gate.md) | Explicit policy and adapter results via `--file` and `--results`. | Offline; validates receipts, does not authenticate external provenance. |
46
+ | [`yaga gate agent-review <operation>`](github-review-adapter.md) | Trusted GitHub environment/event, lifecycle evidence, permissions and applicable approval marker. | Network and environment-only GitHub token. May write comments/statuses; trusted default-branch workflows only. |
47
+
48
+ ## Reports and execution surfaces
49
+
50
+ For ordinary checks, `0` means passed, `1` means findings, and `2` means the check could not
51
+ complete. Receipt evaluation uses `1` for failed or incomplete obligations. Reports use stdout;
52
+ structured operational errors use stderr. CLI usage errors may be plain text even with
53
+ `--format json`; see [exit-aware capture](troubleshooting.md#read-the-exit-code-first).
54
+
55
+ | Commands | Formats; exits | Repository plan | Bundled Action |
56
+ | --- | --- | --- | --- |
57
+ | `commit check`; `workflow check`, `security`, `lint`; `tree`, `path`, `mode`, `size` checks | Text, JSON, GitHub; `0/1/2` | Exactly these eight providers; tree/path/mode/size require plan v2. | None directly; commit policy is reused by the event-aware commit Action. |
58
+ | `repo check` | Text, JSON, GitHub; `0/1/2` with operational errors taking precedence | Runs a selected plan. | None. |
59
+ | `branch check`, `change check`, both description checks, `commit quality` | Text, JSON, GitHub; `0/1/2` | No. | None. |
60
+ | `github pull-request check` | Text, JSON, GitHub; `0/1/2` | No. | Read-only `actions/commit-check`. |
61
+ | `test policy check`, `test plan` | Text, JSON; `0/2` | No. | None. |
62
+ | `test evaluate` | Text, JSON; `0/1/2` | No. | None. |
63
+ | `gate agent-review policy check`, `plan` | Text, JSON; `0/2` | No. | None. |
64
+ | `gate agent-review policy template` | JSON scaffold; `0/2` | No. | None. |
65
+ | `gate agent-review policy evaluate` | Text, JSON, GitHub; `0/1/2` | No. | None. |
66
+ | `gate agent-review <operation>` | Lifecycle output; `GateError` returns `1`, not the policy-check error code | No. | Trusted write-capable root Action. Nonempty `agent-review-policy-file` is rejected. |
67
+
68
+ All installed commands can run in suitable ordinary CI with their stated prerequisites. The two
69
+ bundled Actions are narrow adapters, not wrappers for every checker. Quality advice remains
70
+ advisory; a plan is not evidence that tests or reviews ran. See [Usage modes](usage.md) and
71
+ [Assess and adopt in CI](ci-adoption.md) before choosing required gates.
72
+
73
+ ## Copyable starting points
74
+
75
+ These Bash recipes assume the named policies/input files exist. Choose policies from the linked
76
+ references; YAGA does not discover standalone policies or fetch missing history.
77
+
78
+ ### Before creating a commit
79
+
80
+ ```bash
81
+ yaga commit check --file message.txt --config .yaga.toml
82
+ yaga branch check --policy .yaga/branch-policy.toml --name feat/parser
83
+ yaga workflow check .github/workflows
84
+ yaga workflow security .github/workflows --profile recommended-v3
85
+ yaga pull-request description check --policy .yaga/description-policy.toml --file pr-description.md
86
+ ```
87
+
88
+ These select the prospective message, supplied branch name, current workflow files, and local
89
+ description. Committed-tree checks still need a commit containing the intended changes.
90
+
91
+ ### A complete committed pull request
92
+
93
+ Set `YAGA_BASE_SHA` and `YAGA_HEAD_SHA` to the exact base/head commits already available locally.
94
+ Use two dots for branch-only commit messages and three dots for changed paths against the merge
95
+ base. This repository plan must select `commit` and at least one committed-tree provider:
96
+
97
+ ```bash
98
+ : "${YAGA_BASE_SHA:?Set the exact PR base SHA}"
99
+ : "${YAGA_HEAD_SHA:?Set the exact PR head SHA}"
100
+ yaga repo check --plan .yaga/checks/ci.toml \
101
+ --range "$YAGA_BASE_SHA..$YAGA_HEAD_SHA" --revision "$YAGA_HEAD_SHA"
102
+ yaga change check --policy .yaga/change-policy.toml \
103
+ --range "$YAGA_BASE_SHA...$YAGA_HEAD_SHA"
104
+ ```
105
+
106
+ Check out the intended head separately for working-file workflow checks. A last-commit-only range
107
+ can miss earlier source changes followed by a docs-only commit. YAGA contributors can use the
108
+ explicit local qualification override in [Contributing](contributing.md#development-loop).
109
+ For a plan without committed-tree providers, omit `--revision`.
110
+
111
+ ### Descriptions when Actions are unavailable
112
+
113
+ The local command above works offline. To read a current published description, authenticate
114
+ `gh` for the intended host and supply the full canonical PR URL; no checkout is required:
115
+
116
+ ```bash
117
+ : "${YAGA_PR_URL:?Set the canonical HTTPS pull-request URL}"
118
+ yaga pull-request description check --policy .yaga/description-policy.toml --pr "$YAGA_PR_URL"
119
+ ```
120
+
121
+ Use `--pr 123 --repo OWNER/REPO` instead when choosing a numeric PR explicitly. This reads the
122
+ current body; it does not check event-bound commit history or edit the pull request.
123
+
124
+ ## Authoring and installation helpers
125
+
126
+ [`yaga config show`](configuration.md) reads one discovered or explicit config;
127
+ [`yaga config init`](configuration.md) creates a new standalone config with no-overwrite semantics
128
+ and supports `--dry-run`. Both are offline, use text/JSON, and return `0/2`.
129
+ [`yaga commit template`](commit-policy.md#read-only-message-templates) prints an incomplete message
130
+ from explicit conventional components or plain policy; it is offline, text-only, and returns
131
+ `0/2`. None belongs to repository plans or the bundled Actions.
132
+
133
+ For installation maintenance, use [`yaga self update`](getting-started.md#update-or-uninstall)
134
+ or `yaga self update --dry-run` to verify a uv tool installation without updating it. Actual
135
+ updates invoke uv and may access the package index; this is maintenance, not a policy check.
@@ -10,6 +10,15 @@ through 3.14 for this extra. The repository's Linux CPU index has Python 3.15 wh
10
10
  index selection is not part of the published wheel metadata. The core CLI and the separate
11
11
  `quality-bedrock` extra do not require PyTorch.
12
12
 
13
+ The published `quality` extra also requires `certifi>=2026.10.19` for certificate bundles used
14
+ by supported online model-download dependencies. The [certifi advisory](https://github.com/certifi/python-certifi/security/advisories/GHSA-6q48-6c7w-9gw2)
15
+ identifies 2026.10.18 as removing the affected roots; [PyPA recommends 2026.10.19 or later](https://github.com/pypa/advisory-database/blob/main/vulns/certifi/PYSEC-2026-4320.yaml),
16
+ which restores unaffected roots. Upgrade with `pip install --upgrade 'yaga-cli[quality]'` (or
17
+ the equivalent command for your environment) to apply this extra-scoped floor. Wheel metadata
18
+ cannot repair untouched environments, installations using `--no-deps`, or incompatible external
19
+ constraints. This direct requirement also installs certifi if a future model-download dependency
20
+ graph no longer needs it; base CLI and `quality-bedrock` requirements are unchanged.
21
+
13
22
  ## When to use it
14
23
 
15
24
  Run both checks when exact policy enforcement and broader writing feedback are useful:
@@ -273,11 +273,23 @@ a tree or workflow policy:
273
273
  | `.yaga/path-policy.toml` | `path-policy-version = 1` | exact `--revision` |
274
274
  | `.yaga/mode-policy.toml` | `mode-policy-version = 1` | exact `--revision` |
275
275
  | `.yaga/size-policy.toml` | `size-policy-version = 1` | exact `--revision` |
276
- | `.yaga/checks/*.toml` | `repository-plan-version` | explicit `--plan` |
276
+ | `.yaga/checks/*.toml` | `plan-version = 1` or `plan-version = 2` | explicit `--plan` |
277
277
 
278
278
  These files are quality policy only. A pull-request-controlled plan or policy is never trusted
279
279
  security authority for a privileged workflow.
280
280
 
281
+ A minimal workflow-only repository plan uses the same explicit version key as larger plans:
282
+
283
+ ```toml
284
+ # workflow-checks.toml
285
+ plan-version = 2
286
+ checks = ["workflow"]
287
+ ```
288
+
289
+ Run it with `yaga repo check --plan workflow-checks.toml`; workflow files come from the current
290
+ checkout. See [Repository plans](repository-plans.md) for all eight supported providers and
291
+ their runtime inputs.
292
+
281
293
  ## Provider configuration examples
282
294
 
283
295
  ```toml
@@ -340,8 +352,9 @@ diagnostics, and revision requirements.
340
352
  Use the narrowest provider that expresses the requirement. `commit` checks message structure and
341
353
  footers; `change` checks relationships between changed paths; `branch` checks one supplied branch
342
354
  name; `tree`, `path`, `mode`, and `size` check one committed snapshot; and the workflow providers
343
- check Actions files. Combine them only through explicit `repo check` selections or a checked-in
344
- plan. A policy file never causes another provider to run.
355
+ check Actions files. Repository plans combine only the supported commit, workflow, tree, path,
356
+ mode, and size providers; invoke branch and change checks separately. A policy file never causes
357
+ another provider to run.
345
358
 
346
359
  For a committed-tree provider, always pass the exact revision that CI checked out:
347
360
 
@@ -22,7 +22,22 @@ uv run make ci
22
22
  ```
23
23
 
24
24
  The full gate covers formatting, lint, type checks, tests, repository policies, workflow linting,
25
- documentation, and the package build. The documentation-only loop is:
25
+ documentation, and the package build. Its default changed-path range is only `HEAD^..HEAD`.
26
+ For a complete PR, run from the head checkout with exact base/head SHAs already available in
27
+ complete local history:
28
+
29
+ ```bash
30
+ uv run yaga commit check --range '<base-sha>..<head-sha>'
31
+ uv run make ci CHANGE_RANGE='<base-sha>...<head-sha>'
32
+ ```
33
+
34
+ The two-dot command checks all branch-only commit messages; the three-dot override checks paths
35
+ against the unique merge base. No remote branch is inferred and no history is fetched. Workflow,
36
+ formatting, and test checks still read the current checkout. The independent
37
+ [minimum runtime qualification](minimum-runtime.md) checks the base wheel's lowest dependency
38
+ resolution; it does not replace the locked gate.
39
+
40
+ The documentation-only loop is:
26
41
 
27
42
  ```bash
28
43
  make docs
@@ -0,0 +1,93 @@
1
+ # Staged repository checks: design assessment
2
+
3
+ ## Decision for YAGA 0.4.0
4
+
5
+ Complete the assessment requested in [#243](https://github.com/dariuszpanas/yaga/issues/243);
6
+ retain the existing committed-only commands in this release. An explicit index source is useful
7
+ for local feedback before a commit, especially for required paths, forbidden generated files,
8
+ executable bits, portability, and oversized blobs. It needs a separate source and reporting
9
+ contract before implementation. This assessment does not introduce a `--staged` option.
10
+
11
+ The current result is intentional: creating or staging a required file does not change
12
+ `tree check --revision HEAD`; committing it does. Workflows and literal message/description
13
+ checks already offer useful checks before committing. Staged checks would complement them and
14
+ would not establish the final commit identity or replace committed CI checks.
15
+
16
+ ## Proposed scope
17
+
18
+ Start with an explicit `--staged` source for `tree`, `path`, `mode`, and `size`, mutually exclusive
19
+ with `--revision`. Require exactly one source and an explicit policy, retaining `--repo .` as the
20
+ only repository default. Do not infer HEAD, merge staged and working files, include untracked
21
+ files, discover policy, fetch objects, or write the caller's index. Repository-plan integration,
22
+ change coupling, test planning, and both composite Actions remain separate decisions.
23
+
24
+ Reuse each provider's pure checker and policy version where its meaning stays identical. The
25
+ adapter should provide the complete proposed index tree, not just changed entries, so required
26
+ paths and total-size policy have their normal meaning. Reuse the shared bounded Git runtime;
27
+ do not create a commit or use `write-tree` to manufacture a committed identity.
28
+
29
+ ## Required semantics
30
+
31
+ | Index state | Proposed behavior |
32
+ | --- | --- |
33
+ | Addition or deletion | Check the complete index after the staged change; absence is a deletion. |
34
+ | Rename | Treat the indexed destination and removed source as paths; no rename detection. |
35
+ | Partial staging | Inspect indexed blob identities and sizes, never current file contents. |
36
+ | Unstaged or untracked work | Exclude it, including edits made after `git add`. |
37
+ | Unmerged entries | Return an operational error; never choose a conflict stage. |
38
+ | Intent-to-add entry | Return an operational error until actual content is staged; do not silently treat it as an empty blob. |
39
+ | Symlink | Check the indexed mode and stored link-blob size; never follow/read its target. |
40
+ | Executable mode | Check the index mode, independent of host permissions. |
41
+ | Gitlink | Treat it as one leaf, never recurse; size excludes it as today. |
42
+ | LFS pointer | Count the stored pointer bytes, not downloaded LFS content. |
43
+ | Duplicate blob ID | Count bytes per path, as in the committed size provider. |
44
+ | Missing required object | Return an operational error without lazy fetch. |
45
+ | Sparse or split index | Support only after proving complete expansion and snapshot identity; initial implementation may reject these explicitly. |
46
+ | Index changes during collection | Fail the collection or operate on a validated private snapshot; never mix observations. |
47
+
48
+ An unborn repository can have a valid staged snapshot without a HEAD commit. Empty index behavior
49
+ must be explicit: tree requirements can fail, while empty path/mode/size input can pass according
50
+ to policy. The snapshot covers the entire repository even when `--repo` names a subdirectory.
51
+
52
+ ## Snapshot and trust requirements
53
+
54
+ Before implementation, a small native-Git spike must prove a bounded way to capture an index
55
+ snapshot and identify unmerged, intent-to-add, sparse, split, and unsupported extension states.
56
+ Plain `ls-files --stage` output alone is insufficient evidence for all of these distinctions.
57
+ Private snapshotting must account for linked worktrees and shared-index dependencies and validate
58
+ regular-file type, identity, size, and any before/after race observations. If a stable snapshot
59
+ cannot be established, fail closed. Document the concurrency guarantee instead of presenting
60
+ two matching reads as an atomic transaction against a malicious writer.
61
+
62
+ Use shell-free fixed Git commands with the existing trusted executable, isolated environment,
63
+ no prompts, no replacements, no lazy fetch, bounded cleanup, and graft checks. An implementation
64
+ must not run hooks, filters, external diff/textconv, or inspect symlink targets. Size lookup should
65
+ read object metadata by validated object ID, not materialize file contents. Keep the existing
66
+ 30-second process, 64 MiB tree-output, 50,000-entry, 4,096-byte path, 64-component path,
67
+ 10,000,000 matcher-work-unit, portable-integer, and 256-stored-diagnostic boundaries.
68
+
69
+ ## Reporting compatibility decision
70
+
71
+ Keep committed-source schema-v1 reports unchanged. Introduce a separately versioned staged
72
+ report envelope before exposing the new source; do not put an index hash in `commit_sha` or
73
+ `tree_sha`, or emit invented/null identities under an unchanged committed schema. The proposed
74
+ envelope needs an explicit `source.kind = index`, a canonical ordered entry-manifest digest,
75
+ and policy/source identity sufficient to distinguish repeated observations. Specify the digest
76
+ grammar and object hash algorithm before use. It identifies observed input, not a trusted origin
77
+ or a commit that will later be created.
78
+
79
+ Preserve provider diagnostic codes, exact totals, first-pattern attribution, text/JSON/GitHub
80
+ formats, and exits 0/1/2. Text and annotations must say staged/index. Report schema selection
81
+ and future repository aggregation need explicit compatibility tests and documentation.
82
+
83
+ ## Implementation gate
84
+
85
+ Implementation is appropriate after a concrete local-hook/editor consumer confirms the need and
86
+ the snapshot spike passes on Linux and Windows with supported Git versions. Acceptance must cover
87
+ every row above, linked worktrees, subdirectory selection, hostile Git environment/configuration,
88
+ malformed/bounded output, missing objects, race failures, and clean temporary-file ownership.
89
+ Installed-wheel tests must compare staged versus committed results and verify that neither index
90
+ bytes nor repository history change. Required CI continues checking exact committed sources.
91
+
92
+ This closes the design assessment for YAGA 0.4.0. Shipping staged execution requires a
93
+ separate implementation decision and the above evidence; it is not part of this release's CLI.
@@ -1,6 +1,6 @@
1
1
  # Get started
2
2
 
3
- This guide covers **YAGA 0.3.0 (Beta)**. YAGA requires Python 3.12 or newer. Install the **`yaga-cli`** distribution from PyPI;
3
+ This guide covers **YAGA 0.4.0 (Beta)**. YAGA requires Python 3.12 or newer. Install the **`yaga-cli`** distribution from PyPI;
4
4
  the executable and import package are **`yaga`**. The `yaga` distribution is an unrelated project.
5
5
 
6
6
  The core CLI is tested on Python 3.12 through 3.15. Python 3.15 installations currently use