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.
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/.github/workflows/ci.yml +2 -2
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/.github/workflows/commit-adoption-qualification.yml +1 -1
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/.github/workflows/commit-quality.yml +1 -1
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/.github/workflows/docs.yml +1 -1
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/.github/workflows/release.yml +2 -2
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/AGENTS.md +23 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/CONTRIBUTING.md +62 -2
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/Makefile +2 -1
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/PKG-INFO +3 -1
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/README.md +1 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/docs/changelog.md +59 -0
- yaga_cli-0.4.0/docs/commands.md +135 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/docs/commit-quality.md +9 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/docs/configuration.md +16 -3
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/docs/contributing.md +16 -1
- yaga_cli-0.4.0/docs/designs/staged-checks.md +93 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/docs/getting-started.md +1 -1
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/docs/github-review-adapter.md +1 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/docs/index.md +4 -2
- yaga_cli-0.4.0/docs/minimum-runtime.md +44 -0
- yaga_cli-0.4.0/docs/pull-request-descriptions.md +335 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/docs/repository-checks.md +3 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/docs/troubleshooting.md +31 -13
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/docs/usage.md +16 -9
- yaga_cli-0.4.0/examples/description-policy.toml +8 -0
- yaga_cli-0.4.0/examples/pull-request-template.md +7 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/pyproject.toml +2 -1
- yaga_cli-0.4.0/release-notes.md +58 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/scripts/check_build.py +246 -34
- yaga_cli-0.4.0/scripts/check_minimum_runtime.py +168 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/cli.py +8 -1
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/commands/commit.py +4 -1
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/commands/github.py +2 -0
- yaga_cli-0.4.0/src/yaga/commands/pull_request.py +124 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/commits/typos.py +22 -3
- yaga_cli-0.4.0/src/yaga/descriptions/__init__.py +1 -0
- yaga_cli-0.4.0/src/yaga/descriptions/checker.py +213 -0
- yaga_cli-0.4.0/src/yaga/descriptions/github.py +294 -0
- yaga_cli-0.4.0/src/yaga/descriptions/hygiene.py +70 -0
- yaga_cli-0.4.0/src/yaga/descriptions/markdown.py +428 -0
- yaga_cli-0.4.0/src/yaga/descriptions/models.py +177 -0
- yaga_cli-0.4.0/src/yaga/descriptions/policy.py +64 -0
- yaga_cli-0.4.0/src/yaga/descriptions/reporting.py +117 -0
- yaga_cli-0.4.0/src/yaga/descriptions/service.py +104 -0
- yaga_cli-0.4.0/src/yaga/descriptions/sources.py +137 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/git/changes.py +2 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/version_requirement.py +1 -1
- yaga_cli-0.4.0/tests/test_build_git_isolation.py +68 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_change_cli.py +51 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_change_git.py +31 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_cli.py +36 -6
- yaga_cli-0.4.0/tests/test_command_guide.py +114 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_commit_typos.py +81 -1
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_commit_warnings.py +35 -0
- yaga_cli-0.4.0/tests/test_description_checker.py +297 -0
- yaga_cli-0.4.0/tests/test_description_cli.py +664 -0
- yaga_cli-0.4.0/tests/test_description_github.py +407 -0
- yaga_cli-0.4.0/tests/test_description_hygiene.py +301 -0
- yaga_cli-0.4.0/tests/test_description_markdown.py +181 -0
- yaga_cli-0.4.0/tests/test_description_policy.py +138 -0
- yaga_cli-0.4.0/tests/test_description_remote_cli.py +317 -0
- yaga_cli-0.4.0/tests/test_description_sources.py +296 -0
- yaga_cli-0.4.0/tests/test_description_structure.py +222 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_installation.py +2 -2
- yaga_cli-0.4.0/tests/test_minimum_runtime.py +71 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_tooling.py +12 -2
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/uv.lock +20 -18
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/zensical.toml +3 -0
- yaga_cli-0.3.0/docs/commands.md +0 -51
- yaga_cli-0.3.0/release-notes.md +0 -50
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/.gitattributes +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/.github/dependabot.yml +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/.github/workflows/commit-policy.yml +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/.gitignore +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/.pre-commit-hooks.yaml +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/.yaga/branch-policy.toml +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/.yaga/change-policy.toml +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/.yaga/checks/ci.toml +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/.yaga/mode-policy.toml +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/.yaga/path-policy.toml +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/.yaga/size-policy.toml +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/.yaga/tree-policy.toml +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/CHANGELOG.md +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/LICENSE +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/SECURITY.md +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/_typos.toml +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/action.yml +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/actions/commit-check/action.yml +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/docs/agent-review-gate.md +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/docs/assets/branding/isometric_terminal_y_logo.png +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/docs/assets/branding/isometric_terminal_y_logo_transparent.png +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/docs/assets/branding/yaga_cli_brand_concept_board.png +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/docs/branch-policy.md +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/docs/change-policy.md +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/docs/ci-adoption.md +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/docs/commit-policy-direction.md +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/docs/commit-policy.md +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/docs/designs/examples/test-planning/django-ray.toml +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/docs/designs/examples/test-planning/polyglot.toml +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/docs/designs/experiments/django-ray-full-shadow-result.json +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/docs/designs/experiments/django-ray-shadow-replay/cohort.json +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/docs/designs/experiments/django-ray-shadow-replay/observations-01.json +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/docs/designs/experiments/django-ray-shadow-replay/observations-02.json +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/docs/designs/experiments/django-ray-shadow-replay/observations-03.json +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/docs/designs/experiments/django-ray-shadow-replay/observations-04.json +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/docs/designs/experiments/django-ray-shadow-replay/observations-05.json +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/docs/designs/experiments/django-ray-shadow-replay/observations-06.json +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/docs/designs/experiments/django-ray-shadow-replay/report.json +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/docs/designs/experiments/django-ray-shadow-replay.md +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/docs/designs/test-planning.md +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/docs/github-actions.md +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/docs/install.ps1 +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/docs/install.sh +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/docs/mode-policy.md +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/docs/path-policy.md +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/docs/recipes.md +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/docs/releasing.md +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/docs/repository-plans.md +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/docs/security.md +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/docs/size-policy.md +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/docs/stylesheets/extra.css +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/docs/test-planning-handoff.md +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/docs/test-planning.md +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/docs/tree-policy.md +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/docs/workflow-checks.md +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/examples/agent-review-policy.toml +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/examples/agent-review-results.json +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/examples/agent-review.yml +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/examples/commit-policy.yml +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/examples/review-policy.yml +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/examples/test-planning/fixed_handoff.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/examples/test-planning/replay_django_ray.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/overrides/404.html +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/scripts/check_description.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/scripts/check_docs.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/scripts/check_release.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/scripts/composite_smoke_python +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/scripts/prepare_commit_action_control.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/__init__.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/__main__.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/_update_worker.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/action.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/action_cli.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/agent_review/__init__.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/agent_review/evaluation.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/agent_review/github/__init__.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/agent_review/github/boundary.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/agent_review/github/candidate.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/agent_review/github/constants.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/agent_review/github/events.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/agent_review/github/evidence.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/agent_review/github/gate.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/agent_review/github/publication.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/agent_review/github/requests.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/agent_review/github/runs.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/agent_review/github/runtime.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/agent_review/plan.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/agent_review/policy.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/agent_review/results.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/agent_review/runtime.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/branches/__init__.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/branches/checker.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/branches/models.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/branches/patterns.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/branches/policy.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/branches/reporting.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/branches/service.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/changes/__init__.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/changes/checker.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/changes/git.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/changes/models.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/changes/patterns.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/changes/policy.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/changes/reporting.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/changes/service.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/commands/__init__.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/commands/branch.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/commands/change.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/commands/config.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/commands/gate.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/commands/mode.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/commands/path.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/commands/repo.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/commands/self_manage.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/commands/size.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/commands/test.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/commands/tree.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/commands/workflow.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/commit_action_cli.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/commit_action_runtime.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/commits/__init__.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/commits/checker.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/commits/config.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/commits/config_explain.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/commits/config_init.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/commits/content_policy.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/commits/dependabot.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/commits/git.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/commits/github_event.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/commits/github_reporting.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/commits/github_signature.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/commits/models.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/commits/parser.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/commits/policy.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/commits/quality.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/commits/reporting.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/commits/service.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/commits/severity.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/commits/sources.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/commits/template.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/commits/trusted_policy.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/config_scope.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/errors.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/files.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/git/__init__.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/git/process.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/git/runtime.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/git/tree.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/github.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/models.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/modes/__init__.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/modes/checker.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/modes/git.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/modes/models.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/modes/patterns.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/modes/policy.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/modes/reporting.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/modes/service.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/path_patterns.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/paths/__init__.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/paths/checker.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/paths/git.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/paths/models.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/paths/policy.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/paths/reporting.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/paths/service.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/repository/__init__.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/repository/checker.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/repository/models.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/repository/plan.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/repository/reporting.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/self_update.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/sizes/__init__.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/sizes/checker.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/sizes/git.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/sizes/models.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/sizes/patterns.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/sizes/policy.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/sizes/reporting.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/sizes/service.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/status.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/test_planning/__init__.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/test_planning/diagnostics.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/test_planning/evaluation.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/test_planning/evaluation_service.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/test_planning/git.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/test_planning/handoff.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/test_planning/limits.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/test_planning/models.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/test_planning/planner.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/test_planning/policy.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/test_planning/reporting.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/test_planning/reports.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/test_planning/results.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/test_planning/selection.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/test_planning/service.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/test_planning/source.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/trees/__init__.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/trees/checker.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/trees/git.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/trees/models.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/trees/patterns.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/trees/policy.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/trees/reporting.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/trees/service.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/workflows/__init__.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/workflows/actionlint_runtime.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/workflows/actionlint_snapshot.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/workflows/checker.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/workflows/inputs.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/workflows/lint.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/workflows/models.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/workflows/parser.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/workflows/references.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/workflows/reporting.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/workflows/security.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/workflows/security_facts.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/workflows/security_models.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/workflows/security_reporting.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/workflows/security_rules.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/src/yaga/workflows/yaml.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/__init__.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/codex_support.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/fixtures/commit_consumer_parity.json +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/fixtures/github-signatures/.gitattributes +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/fixtures/github-signatures/.typos.toml +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/fixtures/github-signatures/README.md +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/fixtures/github-signatures/dependabot-setup-uv.commit +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/fixtures/github-signatures/dependabot-urllib3-parent.commit +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/fixtures/github-signatures/dependabot-urllib3.commit +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/fixtures/github-signatures/web-flow.asc +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_action.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_agent_review_cli.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_agent_review_evaluation.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_agent_review_plan.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_agent_review_policy.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_agent_review_results.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_branch_checker.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_branch_cli.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_branch_models.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_branch_patterns.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_branch_policy.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_branch_reporting.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_branch_service.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_change_checker.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_change_patterns.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_change_policy.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_change_reporting.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_codex_events.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_codex_evidence.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_codex_evidence_literals.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_codex_gate.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_codex_publication.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_codex_requests.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_codex_runs.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_codex_runtime.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_commit_action.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_commit_action_controls.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_commit_body_customization.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_commit_checker.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_commit_config.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_commit_consumer_policy.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_commit_content_policy.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_commit_explicit_inputs.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_commit_git.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_commit_parser.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_commit_quality.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_commit_quality_workflow.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_commit_reporting.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_commit_service.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_commit_sources.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_commit_template.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_commit_trusted_policy.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_config_init.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_config_workflows.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_consumer_policy_entrypoints.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_dependabot_commit_filter.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_description.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_docs_links.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_files.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_git_runtime.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_git_tree.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_github.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_github_commit_signature.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_github_pull_request.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_github_reporting.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_installers.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_mode_checker.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_mode_cli.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_mode_git.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_mode_models.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_mode_patterns.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_mode_policy.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_mode_reporting.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_mode_service.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_models.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_path_checker.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_path_cli.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_path_git.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_path_models.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_path_patterns.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_path_policy.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_path_reporting.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_path_service.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_plain_messages.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_pr_proposed_message.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_regular_file_prefix.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_release.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_repo_cli.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_repository_checker.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_repository_contract.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_repository_models.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_repository_plan.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_repository_reporting.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_size_checker.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_size_cli.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_size_git.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_size_models.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_size_patterns.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_size_policy.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_size_reporting.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_size_service.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_status.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_test_planning_cli.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_test_planning_diagnostics.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_test_planning_evaluate_cli.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_test_planning_evaluation.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_test_planning_examples.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_test_planning_git.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_test_planning_handoff.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_test_planning_handoff_example.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_test_planning_planner.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_test_planning_policy.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_test_planning_replay.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_test_planning_reporting.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_test_planning_results.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_tree_checker.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_tree_cli.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_tree_git.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_tree_models.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_tree_patterns.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_tree_policy.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_tree_reporting.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_tree_service.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_workflow_checker.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_workflow_inputs.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_workflow_lint.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_workflow_lint_hardening.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_workflow_lint_reporting.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_workflow_provider_inputs.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_workflow_references.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_workflow_reporting.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_workflow_security_cli.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_workflow_security_facts.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_workflow_security_models.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_workflow_security_reporting.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_workflow_security_rules.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_workflow_security_selection.py +0 -0
- {yaga_cli-0.3.0 → yaga_cli-0.4.0}/tests/test_workflow_security_service.py +0 -0
- {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@
|
|
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@
|
|
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@
|
|
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@
|
|
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@
|
|
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@
|
|
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@
|
|
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`,
|
|
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
|
|
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
|
+
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` | `
|
|
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.
|
|
344
|
-
|
|
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.
|
|
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
|
+
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
|