commitguardian 0.1.1__tar.gz → 0.1.2__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.
- {commitguardian-0.1.1 → commitguardian-0.1.2}/CHANGELOG.md +12 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/CITATION.cff +1 -1
- {commitguardian-0.1.1 → commitguardian-0.1.2}/PKG-INFO +1 -1
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/api/README.md +1 -1
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/cli/doctor.md +1 -1
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/deployment/README.md +1 -1
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/deployment/local.md +1 -1
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/deployment/production.md +1 -1
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/deployment/troubleshooting.md +1 -1
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/maintainers/release-process.md +1 -1
- {commitguardian-0.1.1 → commitguardian-0.1.2}/pyproject.toml +1 -1
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/__init__.py +1 -1
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/git/repository.py +6 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/services/hooks.py +17 -1
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/integration/hooks/test_pre_push.py +25 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/.gitignore +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/CODE_OF_CONDUCT.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/CONTRIBUTING.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/LICENSE +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/README.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/SECURITY.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/action.yml +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/config/default.yaml +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/config/examples/allow-ai.yaml +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/config/examples/block-ai-coauthors.yaml +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/config/examples/enterprise.yaml +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/config/strict.yaml +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/README.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/adr/001-detection-separate-from-policy.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/adr/002-rules-as-data.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/adr/003-fail-closed.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/adr/004-trusted-policy-source.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/adr/005-no-regex-trailer-parser.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/adr/006-mandatory-policy-only-strengthens.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/adr/007-immutable-evidence.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/adr/008-not-published-to-pypi.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/adr/009-published-to-pypi-as-commitguardian.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/adr/README.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/api/audit.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/api/authentication.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/api/authorization.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/api/bulk-operations.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/api/compliance-exports.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/api/errors.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/api/exceptions.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/api/github-installations.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/api/notifications.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/api/organizations.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/api/pagination.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/api/policies.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/api/policy-drafts.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/api/rate-limits.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/api/repositories.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/api/repository-groups.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/api/rollouts.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/api/rules.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/api/scan-schedules.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/api/scans.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/api/security-posture.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/api/simulations.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/api/violations.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/api/webhooks.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/architecture.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/cli/README.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/cli/benchmark.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/cli/github.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/cli/init.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/cli/install.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/cli/policy.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/cli/reproduce.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/cli/scan.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/community/README.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/community/case-study-template.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/community/data-policy.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/community/external-evaluation.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/community/feedback-triage.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/community/good-first-issues.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/community/pilot-program.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/compliance-reporting.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/configuration.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/dashboard.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/deployment/github-actions.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/deployment/github-app.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/deployment/organization.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/deployment/self-hosted.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/deployment.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/detection-engine.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/evidence/cli.json +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/evidence/phase-10-report.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/evidence/phase-10-verification-report.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/evidence/tests.json +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/evidence/timeline.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/evidence/validation-matrix.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/getting-started/quickstart.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/git-hooks.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/github-app.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/github-enforcement.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/maintainers/README.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/maintainers/architecture.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/maintainers/benchmarking.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/maintainers/development.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/maintainers/incident-response.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/maintainers/repository-management.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/maintainers/security.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/merge-queue.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/notifications.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/operations/runbook.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/organization-governance.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/policy-engine.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/policy-exceptions.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/policy-inheritance.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/policy-management.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/policy-rollouts.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/policy-simulation.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/presentations/commitguard-technical-overview.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/presentations/technical-article.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/recovery.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/repository-management.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/research/README.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/research/bypass-resistance.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/research/commitguard-architecture.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/research/cross-platform-validation.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/research/detection-evaluation.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/research/fuzzing.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/research/github-enforcement-validation.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/research/impact.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/research/innovation.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/research/limitations.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/research/merge-queue-security.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/research/methodology.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/research/performance-evaluation.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/research/policy-tampering.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/research/problem-definition.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/research/reliability-evaluation.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/research/reproducibility.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/research/roadmap.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/security/README.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/security/authorization-matrix.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/security/ci-pipeline-security.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/security/incident-response.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/security/review-guide.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/security/security-boundaries.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/security/supply-chain.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/security/threat-model.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/security/vulnerability-response.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/security-posture.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/support/compatibility-policy.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/support/compatibility.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/support/maintenance-policy.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/docs/threat-model.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/examples/README.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/examples/basic/.commitguard.yaml +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/examples/basic/README.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/examples/basic/commits/ai-coauthor.txt +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/examples/basic/commits/ai-tool-footer.txt +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/examples/basic/commits/clean.txt +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/examples/basic/commits/disguised-coauthor.txt +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/examples/basic/commits/malformed-trailer.txt +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/examples/basic/expected.json +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/examples/exceptions/README.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/examples/github-actions/README.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/examples/github-actions/commitguard.yml +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/examples/github-app/README.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/examples/organization-policy/README.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/examples/organization-policy/mandatory-policy.yaml +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/examples/organization-policy/repository-attempt.yaml +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/examples/policy-rollout/README.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/hooks/README.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/hooks/commit-msg +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/hooks/pre-commit +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/hooks/pre-push +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/requirements/ci.in +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/requirements/ci.txt +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/rules/ai-domains.yaml +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/rules/ai-identities.yaml +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/rules/bot-identities.yaml +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/rules/patterns.yaml +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/__main__.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/api/__init__.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/api/app.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/api/governance.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/api/hosting.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/api/http.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/api/settings.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/audit/__init__.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/audit/logger.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/audit/models.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/audit/storage.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/ci/__init__.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/ci/context.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/cli/__init__.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/cli/app.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/cli/commands/__init__.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/cli/commands/benchmark.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/cli/commands/check.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/cli/commands/ci.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/cli/commands/dashboard.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/cli/commands/doctor.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/cli/commands/github.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/cli/commands/hook.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/cli/commands/init.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/cli/commands/install.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/cli/commands/policy.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/cli/commands/report.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/cli/commands/reproduce.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/cli/commands/scan.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/cli/common.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/cli/output.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/cli/render.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/config/__init__.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/config/defaults.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/config/enforcement.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/config/loader.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/config/schema.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/config/sources.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/controlplane/__init__.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/controlplane/access.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/controlplane/commands.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/controlplane/errors.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/controlplane/identity.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/controlplane/members.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/controlplane/notifications.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/controlplane/pagination.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/controlplane/policies.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/controlplane/queries.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/controlplane/results.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/controlplane/rules.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/controlplane/views.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/core/__init__.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/core/context.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/core/decision.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/core/engine.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/core/result.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/detectors/__init__.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/detectors/base.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/detectors/bot.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/detectors/coauthor.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/detectors/identity.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/detectors/registry.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/detectors/trailer.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/exceptions/__init__.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/exceptions/base.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/exceptions/configuration.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/exceptions/detection.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/exceptions/git.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/exceptions/service.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/git/__init__.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/git/commands.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/git/commit.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/git/diff.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/git/hooks.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/git/push.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/git/ranges.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/github/__init__.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/github/actions.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/github/app.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/github/auth.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/github/check_runs.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/github/checks.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/github/client.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/github/enforcement_status.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/github/errors.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/github/events.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/github/identifiers.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/github/installations.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/github/markdown.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/github/permissions.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/github/pull_requests.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/github/queue.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/github/recovery.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/github/repositories.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/github/server.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/github/settings.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/github/storage.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/github/webhooks.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/github/worker.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/github/workflow.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/governance/__init__.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/governance/bulk.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/governance/cache.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/governance/common.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/governance/exceptions.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/governance/groups.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/governance/inventory.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/governance/posture.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/governance/resolver.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/governance/rollouts.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/governance/rules.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/governance/schedules.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/governance/service.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/governance/settings.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/governance/simulation.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/governance/workflow.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/notifications/__init__.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/notifications/channels/__init__.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/notifications/channels/base.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/notifications/channels/email.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/notifications/channels/in_app.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/notifications/channels/sink.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/notifications/channels/webhook.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/notifications/deduplication.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/notifications/dispatcher.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/notifications/models.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/notifications/outbox.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/notifications/preferences.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/notifications/retry.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/notifications/service.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/notifications/settings.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/notifications/templates.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/observability/__init__.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/observability/logging.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/observability/metrics.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/policies/__init__.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/policies/defaults.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/policies/evaluator.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/policies/governance.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/policies/loader.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/policies/mandatory.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/policies/model.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/provenance/__init__.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/provenance/author.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/provenance/committer.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/provenance/normalization.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/provenance/signatures.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/provenance/trailers.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/research/__init__.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/research/compare.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/research/datasets.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/research/detection.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/research/environment.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/research/gitenv.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/research/hooks.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/research/metrics.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/research/performance.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/research/platform.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/research/report.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/research/repository.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/research/reproduction.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/research/results.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/rules/__init__.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/rules/loader.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/rules/matcher.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/rules/models.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/security/__init__.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/security/hashing.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/security/rate_limit.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/security/safe_yaml.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/security/sanitization.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/security/secrets.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/security/validation.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/services/__init__.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/services/analysis.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/services/audit.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/services/ci.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/services/enforcement.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/services/push_fix.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/services/remediation.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/services/reports.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/services/scan.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/utils/__init__.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/utils/filesystem.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/utils/platform.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/src/commitguard/utils/subprocess.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/conftest.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/e2e/dashboard_harness.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/fixtures/commits/ai_agent_author.yaml +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/fixtures/commits/ai_wording_only.yaml +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/fixtures/commits/bot_author.yaml +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/fixtures/commits/chatgpt_coauthor.yaml +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/fixtures/commits/claude_coauthor.yaml +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/fixtures/commits/copilot_coauthor.yaml +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/fixtures/commits/generated_with_trailer.yaml +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/fixtures/commits/human_coauthor.yaml +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/fixtures/commits/malformed_trailer.yaml +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/fixtures/commits/malicious_message.yaml +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/fixtures/commits/multiple_coauthors.yaml +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/fixtures/commits/normal_human.yaml +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/fixtures/commits/unknown_ai_agent.yaml +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/fixtures/policies/alias.yaml +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/fixtures/policies/duplicate-keys.yaml +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/fixtures/policies/null-action.yaml +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/fixtures/policies/python-tag.yaml +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/fixtures/policies/string-boolean.yaml +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/fixtures/policies/unknown-key.yaml +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/fixtures/policies/unknown-policy.yaml +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/fixtures/policies/valid-minimal.yaml +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/fixtures/repositories/README.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/fixtures/webhooks/README.md +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/fixtures/webhooks/installation.created.json +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/fixtures/webhooks/installation.deleted.json +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/fixtures/webhooks/installation_repositories.added.json +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/fixtures/webhooks/installation_repositories.removed.json +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/fixtures/webhooks/pull_request.closed.json +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/fixtures/webhooks/pull_request.opened.json +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/fixtures/webhooks/pull_request.reopened.json +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/fixtures/webhooks/pull_request.synchronize.json +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/fixtures/webhooks/push.json +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/integration/git/test_cli_commands.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/integration/git/test_repository.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/integration/github/app/conftest.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/integration/github/app/dashboard/conftest.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/integration/github/app/dashboard/test_dashboard_api.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/integration/github/app/dashboard/test_dashboard_authorization.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/integration/github/app/dashboard/test_dashboard_lifecycle.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/integration/github/app/dashboard/test_dashboard_notifications.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/integration/github/app/dashboard/test_dashboard_performance.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/integration/github/app/dashboard/test_dashboard_policies.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/integration/github/app/dashboard/test_dashboard_recovery.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/integration/github/app/dashboard/test_dashboard_security.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/integration/github/app/dashboard/test_governance_end_to_end.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/integration/github/app/dashboard/test_governance_isolation.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/integration/github/app/dashboard/test_governance_operations.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/integration/github/app/dashboard/test_governance_performance.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/integration/github/app/dashboard/test_governance_policies.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/integration/github/app/dashboard/test_governance_rollouts.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/integration/github/app/dashboard/test_governance_workflow.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/integration/github/app/security/test_server_enforcement_experiments.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/integration/github/app/test_app_action_consistency.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/integration/github/app/test_app_cli.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/integration/github/app/test_app_concurrency.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/integration/github/app/test_app_end_to_end.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/integration/github/app/test_app_http.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/integration/github/app/test_app_merge_queue_reruns.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/integration/github/app/test_app_security.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/integration/github/conftest.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/integration/github/security/test_bypass_resistance.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/integration/github/test_action_scripts.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/integration/github/test_ci_github.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/integration/github/test_ci_security.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/integration/github/test_defense_in_depth.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/integration/github/test_github_cli.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/integration/github/test_github_placeholder.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/integration/hooks/conftest.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/integration/hooks/test_commit_hooks.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/integration/hooks/test_end_to_end.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/integration/hooks/test_hook_templates.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/integration/hooks/test_install.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/integration/test_examples.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/security/conftest.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/security/test_fuzz_parsers.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/security/test_properties.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/security/test_redos.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/unit/config/test_config_validation.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/unit/controlplane/test_controlplane.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/unit/controlplane/test_governance_units.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/unit/core/test_decision.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/unit/core/test_engine.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/unit/core/test_result.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/unit/detectors/test_bot.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/unit/detectors/test_coauthor.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/unit/detectors/test_identity.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/unit/detectors/test_registry.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/unit/detectors/test_trailer.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/unit/git/test_hook_rendering.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/unit/git/test_push_parsing.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/unit/github/app/conftest.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/unit/github/app/test_auth.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/unit/github/app/test_client.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/unit/github/app/test_phase7_events_and_storage.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/unit/github/app/test_policy_and_checks.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/unit/github/app/test_secrets_and_logging.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/unit/github/app/test_service_entry_points.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/unit/github/app/test_storage.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/unit/github/app/test_webhook_events.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/unit/github/app/test_webhooks.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/unit/github/test_events_and_output.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/unit/github/test_workflows_static.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/unit/notifications/test_notification_units.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/unit/policies/test_evaluator.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/unit/policies/test_governance_resolution.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/unit/policies/test_policy_loader.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/unit/provenance/test_identity_parsing.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/unit/provenance/test_models.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/unit/provenance/test_trailers.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/unit/research/test_compare.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/unit/rules/test_matcher.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/unit/rules/test_rules_loader.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/unit/security/test_safe_subprocess.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/unit/security/test_sanitization.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/unit/security/test_validation.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/unit/services/test_analyzer.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/unit/services/test_remediation.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/unit/test_architecture.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/unit/test_documented_commands.py +0 -0
- {commitguardian-0.1.1 → commitguardian-0.1.2}/tests/unit/test_env_example.py +0 -0
|
@@ -6,6 +6,18 @@ All notable changes to this project are documented here. The format follows
|
|
|
6
6
|
|
|
7
7
|
## [Unreleased]
|
|
8
8
|
|
|
9
|
+
## [0.1.2] - 2026-09-19
|
|
10
|
+
|
|
11
|
+
### Fixed
|
|
12
|
+
|
|
13
|
+
- `remediation.fix_on_push` did nothing for `git push origin HEAD` or
|
|
14
|
+
`git push origin HEAD:main`. For those forms Git reports the local ref as plain
|
|
15
|
+
`HEAD`, which the "only move local branches" guard did not recognise, so the
|
|
16
|
+
push was blocked instead of cleaned (safely - nothing was rewritten or sent).
|
|
17
|
+
`HEAD` is now resolved to the checked-out branch when that branch's tip is the
|
|
18
|
+
commit being pushed; a detached `HEAD` is still refused. Found by testing the
|
|
19
|
+
released 0.1.1 package on a real machine.
|
|
20
|
+
|
|
9
21
|
## [0.1.1] - 2026-09-19
|
|
10
22
|
|
|
11
23
|
### Added
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: commitguardian
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.2
|
|
4
4
|
Summary: Block AI, bot and agent attribution in Git commits, locally and on GitHub.
|
|
5
5
|
Project-URL: Homepage, https://github.com/oyinlola-tech/commitguard
|
|
6
6
|
Project-URL: Repository, https://github.com/oyinlola-tech/commitguard
|
|
@@ -5,7 +5,7 @@ dashboard is built on it. It exposes repositories, scans, violations, policies
|
|
|
5
5
|
and their governance, exceptions, audit events, notifications and GitHub
|
|
6
6
|
installations. The same process also receives GitHub webhooks.
|
|
7
7
|
|
|
8
|
-
> **Stability.** CommitGuard is pre-alpha (`0.1.
|
|
8
|
+
> **Stability.** CommitGuard is pre-alpha (`0.1.2`, "Development Status :: 2
|
|
9
9
|
> - Pre-Alpha"). The API is versioned `v1` in its path, but no compatibility
|
|
10
10
|
> promise exists yet. Endpoints, fields and error codes can change between
|
|
11
11
|
> commits. There is no OpenAPI document; these pages, the view models in
|
|
@@ -60,7 +60,7 @@ commitguard doctor --json
|
|
|
60
60
|
|
|
61
61
|
```json
|
|
62
62
|
{
|
|
63
|
-
"commitguard_version": "0.1.
|
|
63
|
+
"commitguard_version": "0.1.2",
|
|
64
64
|
"status": "HEALTHY",
|
|
65
65
|
"enforcement": "LOCAL ENFORCEMENT ONLY",
|
|
66
66
|
"counts": {"PASS": 14, "INFO": 1, "NOT CONFIGURED": 2, "WARNING": 0, "FAIL": 0},
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Deploying CommitGuard
|
|
2
2
|
|
|
3
|
-
CommitGuard 0.1.
|
|
3
|
+
CommitGuard 0.1.2 is pre-alpha software. This section describes the ways it
|
|
4
4
|
can be deployed today, what each way protects against, and what it does not.
|
|
5
5
|
Every mode runs the same detection engine and policy evaluator; they differ in
|
|
6
6
|
where the check runs, who controls it, and whether it can prevent a merge.
|
|
@@ -25,7 +25,7 @@ and `commitguard-cli` on PyPI are unrelated projects.)
|
|
|
25
25
|
|
|
26
26
|
```bash
|
|
27
27
|
pipx install commitguardian
|
|
28
|
-
commitguard --version # commitguard 0.1.
|
|
28
|
+
commitguard --version # commitguard 0.1.2
|
|
29
29
|
|
|
30
30
|
# or pinned to an exact commit:
|
|
31
31
|
pipx install "git+https://github.com/oyinlola-tech/commitguard@<commit-sha>"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Running the App service in production
|
|
2
2
|
|
|
3
|
-
> Status: **Experimental.** CommitGuard is pre-alpha (0.1.
|
|
3
|
+
> Status: **Experimental.** CommitGuard is pre-alpha (0.1.2).
|
|
4
4
|
> No external production deployments have been recorded yet.
|
|
5
5
|
> The App service and organization governance have been validated only by this
|
|
6
6
|
> repository's test suites, against an offline model of GitHub. There are no
|
|
@@ -30,7 +30,7 @@ repository. Uninstall it and install from source, pinned to a commit:
|
|
|
30
30
|
```bash
|
|
31
31
|
python -m pip uninstall commitguard
|
|
32
32
|
pipx install "git+https://github.com/oyinlola-tech/commitguard@<commit-sha>"
|
|
33
|
-
commitguard --version # commitguard 0.1.
|
|
33
|
+
commitguard --version # commitguard 0.1.2
|
|
34
34
|
```
|
|
35
35
|
|
|
36
36
|
**`the GitHub App needs the optional dependencies: pip install 'commitguard[app]'`**
|
|
@@ -29,7 +29,7 @@ Artifacts are not signed, and no build provenance attestation is generated.
|
|
|
29
29
|
| Runtime version (`commitguard --version`) | `src/commitguard/__init__.py`, `__version__` |
|
|
30
30
|
| Dashboard package version | `web/package.json` (`"private": true`, not released separately; currently `0.1.0`, independent of the Python version) |
|
|
31
31
|
|
|
32
|
-
Both Python locations must be changed together; today they both say `0.1.
|
|
32
|
+
Both Python locations must be changed together; today they both say `0.1.2`.
|
|
33
33
|
`tests/integration/git/test_cli_commands.py` checks that `commitguard --version`
|
|
34
34
|
prints `__version__`; no test compares it with `pyproject.toml`, so check both by
|
|
35
35
|
hand. The name in `pyproject.toml` is pinned by
|
|
@@ -7,7 +7,7 @@ build-backend = "hatchling.build"
|
|
|
7
7
|
# "commitguard-cli", belong to two unrelated projects (see docs/adr/009). The
|
|
8
8
|
# import package and the console script stay `commitguard`.
|
|
9
9
|
name = "commitguardian"
|
|
10
|
-
version = "0.1.
|
|
10
|
+
version = "0.1.2"
|
|
11
11
|
description = "Block AI, bot and agent attribution in Git commits, locally and on GitHub."
|
|
12
12
|
readme = "README.md"
|
|
13
13
|
license = "MIT"
|
|
@@ -425,6 +425,12 @@ class Repository:
|
|
|
425
425
|
raise MalformedGitOutputError("git hash-object returned no object id")
|
|
426
426
|
return sha
|
|
427
427
|
|
|
428
|
+
def current_branch(self) -> str | None:
|
|
429
|
+
"""``refs/heads/<name>`` that ``HEAD`` points at, or None when detached."""
|
|
430
|
+
result = self._git(["symbolic-ref", "--quiet", "HEAD"], check=False)
|
|
431
|
+
ref = result.stdout.decode("utf-8", errors="replace").strip()
|
|
432
|
+
return ref if result.ok and ref.startswith("refs/heads/") else None
|
|
433
|
+
|
|
428
434
|
def not_on_any_remote(self, shas: Sequence[str]) -> set[str]:
|
|
429
435
|
"""The subset of ``shas`` not reachable from any remote-tracking branch.
|
|
430
436
|
|
|
@@ -228,6 +228,22 @@ def plan_push(
|
|
|
228
228
|
return plans, list(ordered)
|
|
229
229
|
|
|
230
230
|
|
|
231
|
+
def _branch_ref(repository: Repository, update: PushUpdate) -> str:
|
|
232
|
+
"""The local ref a push update really moves.
|
|
233
|
+
|
|
234
|
+
``git push origin HEAD`` (and ``HEAD:main``) makes Git report the local ref
|
|
235
|
+
as plain ``HEAD``. It is the checked-out branch when ``HEAD`` points at one
|
|
236
|
+
whose tip is exactly the commit being pushed; otherwise it stays ``HEAD``,
|
|
237
|
+
which ``fix_on_push`` refuses to move (a detached ``HEAD`` is not a branch).
|
|
238
|
+
"""
|
|
239
|
+
if update.local_ref != "HEAD":
|
|
240
|
+
return update.local_ref
|
|
241
|
+
branch = repository.current_branch()
|
|
242
|
+
if branch is not None and repository.ref_commit(branch) == update.local_oid:
|
|
243
|
+
return branch
|
|
244
|
+
return update.local_ref
|
|
245
|
+
|
|
246
|
+
|
|
231
247
|
def run_pre_push(
|
|
232
248
|
repository: Repository,
|
|
233
249
|
remote: str,
|
|
@@ -256,7 +272,7 @@ def run_pre_push(
|
|
|
256
272
|
analyzer,
|
|
257
273
|
[
|
|
258
274
|
BranchUpdate(
|
|
259
|
-
local_ref=plan.update
|
|
275
|
+
local_ref=_branch_ref(repository, plan.update),
|
|
260
276
|
local_oid=plan.update.local_oid,
|
|
261
277
|
commits=plan.commits,
|
|
262
278
|
)
|
|
@@ -556,3 +556,28 @@ def test_doctor_reports_that_fix_on_push_is_on(fixing_repo) -> None: # type: ig
|
|
|
556
556
|
check=False,
|
|
557
557
|
)
|
|
558
558
|
assert "remediation.fix_on_push is on" in result.stdout
|
|
559
|
+
|
|
560
|
+
|
|
561
|
+
@pytest.mark.parametrize("refspec", ["main", "HEAD", "HEAD:main"])
|
|
562
|
+
def test_fix_on_push_works_for_every_way_of_naming_the_branch(fixing_repo, refspec: str) -> None: # type: ignore[no-untyped-def]
|
|
563
|
+
"""`git push origin HEAD` makes Git report the local ref as plain `HEAD`.
|
|
564
|
+
|
|
565
|
+
That form was refused on 0.1.1 because `HEAD` is not `refs/heads/...`: found
|
|
566
|
+
by testing the released package on a real machine, not by the suite.
|
|
567
|
+
"""
|
|
568
|
+
fixing_repo.commit(AI)
|
|
569
|
+
result = push(fixing_repo, refspec)
|
|
570
|
+
assert result.returncode != 0
|
|
571
|
+
assert "CLEANED 1 unpushed commit" in result.stderr, result.stderr
|
|
572
|
+
assert "Claude" not in messages(fixing_repo)
|
|
573
|
+
|
|
574
|
+
|
|
575
|
+
def test_fix_on_push_refuses_a_detached_head(fixing_repo) -> None: # type: ignore[no-untyped-def]
|
|
576
|
+
"""A detached HEAD is not a branch, so there is nothing safe to move."""
|
|
577
|
+
bad = fixing_repo.commit(AI)
|
|
578
|
+
fixing_repo.git("checkout", "--quiet", "--detach", bad)
|
|
579
|
+
result = push(fixing_repo, "HEAD:refs/heads/main")
|
|
580
|
+
assert result.returncode != 0
|
|
581
|
+
assert "PUSH BLOCKED" in result.stderr
|
|
582
|
+
assert "CLEANED" not in result.stderr
|
|
583
|
+
assert fixing_repo.head() == bad
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{commitguardian-0.1.1 → commitguardian-0.1.2}/docs/adr/001-detection-separate-from-policy.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{commitguardian-0.1.1 → commitguardian-0.1.2}/docs/adr/006-mandatory-policy-only-strengthens.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{commitguardian-0.1.1 → commitguardian-0.1.2}/docs/adr/009-published-to-pypi-as-commitguardian.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{commitguardian-0.1.1 → commitguardian-0.1.2}/docs/presentations/commitguard-technical-overview.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{commitguardian-0.1.1 → commitguardian-0.1.2}/docs/research/github-enforcement-validation.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{commitguardian-0.1.1 → commitguardian-0.1.2}/examples/organization-policy/mandatory-policy.yaml
RENAMED
|
File without changes
|
{commitguardian-0.1.1 → commitguardian-0.1.2}/examples/organization-policy/repository-attempt.yaml
RENAMED
|
File without changes
|
|
File without changes
|