Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
207 changes: 207 additions & 0 deletions .github/release-control-contract.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,207 @@
{
"schema_version": 1,
"contract_edition": "wp562-f1-c",
"repository": {
"owner": "aisystant",
"name": "aist_bot"
},
"source_refs": {
"pilot": "pilot",
"production": "new-architecture"
},
"artifact": {
"digest_kind": "oci_manifest",
"oci_repository": "registry.example.invalid/team/app",
"platform": {
"os": "linux",
"architecture": "amd64"
},
"immutable_reference_required": true,
"embedded_manifest_excludes": [
"artifact_digest",
"manifest_hash"
]
},
"authority": {
"audience": "iwe.release-control.runner",
"independent_approver_required": true,
"max_uses": 1,
"purpose": "iwe.release-control.authority.v1",
"trust_root_identity": "release-authority-root",
"required_signed_fields": [
"approver_identity",
"audience",
"authority_id",
"contract_digest",
"contract_edition",
"expires_at",
"issued_at",
"key_id",
"max_uses",
"nonce",
"operation_fingerprint",
"purpose",
"release_id",
"repository",
"required_checks_digest",
"runner_identity",
"schema_version",
"target"
],
"ttl_seconds": 3600
},
"ledger": {
"append_only_required": true,
"claim_field_allowlist": [
"artifact_digest",
"authorization_id",
"contract_digest",
"evidence_hash",
"external_id",
"operation_fingerprint",
"operation_kind",
"target_key"
],
"durable_claim_required": true,
"external_receipt_required": true,
"raw_evidence_forbidden": true,
"target_version_cas_required": true
},
"promotion": {
"build_once": true,
"check_suite_max_age_seconds": 3600,
"check_suite_receipt_required": true,
"independent_review_required": true,
"pilot_qualification_independent_verifier_required": true,
"pilot_qualification_max_age_seconds": 300,
"pilot_qualification_receipt_required": true,
"pilot_qualification_required_signals": [
"canary",
"data-invariants",
"readiness",
"runtime-attestation"
],
"provider_deadline_required": true,
"provider_fencing_required": true,
"provider_idempotency_required": true,
"same_digest_required": true,
"source_candidate_max_age_seconds": 3600,
"source_candidate_receipt_required": true,
"reconciliation": {
"zero": "observed_not_applied",
"one": "observed_applied",
"many": "manual_review"
},
"reconciliation_settling_seconds": 60,
"zero_settlement_min_interval_seconds": 30,
"zero_settlement_observations": 2
},
"rollback": {
"compatibility_max_age_seconds": 1800,
"compatibility_receipt_required": true,
"historical_build_contract_receipt_required": true,
"independent_verifier_required": true,
"same_previous_good_digest": true,
"rebuild_forbidden": true,
"require_can_rollback": true,
"require_schema_compatibility": true,
"retention_recheck_seconds": 3600,
"reattestation_seconds": 1800
},
"required_checks": [
"bandit-sast",
"full-regression",
"l1-l2-smoke-regression",
"pilot-production-semantic-parity",
"pip-audit",
"release-candidate-build",
"release-control-contract",
"scenario-compliance"
],
"forbidden_paths": [
"hashlib.py",
"hashlib/__init__.py",
"pytest.py",
"pytest/__init__.py",
"pytest/__main__.py",
"release_manifest/__init__.py",
"scripts.py",
"scripts/__init__.py",
"scripts/pytest.py",
"scripts/release_control/__init__.py",
"scripts/release_manifest.py",
"scripts/sitecustomize.py",
"scripts/usercustomize.py",
"sitecustomize.py",
"tests/conftest.py",
"usercustomize.py"
],
"protected_paths": [
".dockerignore",
".gitattributes",
".githooks/pre-push",
".github/CODEOWNERS",
".github/actions/reject-python-shadows/action.yml",
".github/release-control-contract.json",
".github/release-metadata.json",
".github/workflows/check-dt-indicators.yml",
".github/workflows/pilot-prod-sync.yml",
".github/workflows/release-control-dry-run.yml",
".github/workflows/scenario-compliance.yml",
".github/workflows/security.yml",
".github/workflows/smoke-tests.yml",
".gitmodules",
"CLAUDE.md",
"Dockerfile",
"PROCESSES.md",
"bot.py",
"clients/github_content.py",
"config/settings.py",
"conftest.py",
"core/autofix.py",
"core/health_check.py",
"core/scheduler.py",
"db/migrations/**",
"db/models.py",
"db/queries/autofix.py",
"oauth_server.py",
"pytest.ini",
"railway.json",
"readiness.py",
"release-manifest.unavailable.json",
"release_attestation.py",
"release_manifest.py",
"requirements.in",
"requirements.txt",
"scripts/build_release_manifest.py",
"scripts/check_pilot_prod_parity.py",
"scripts/check_release_metadata.py",
"scripts/record_pilot_prod_correspondence.py",
"scripts/release_control.py",
"tests/__init__.py",
"tests/test_autofix_security.py",
"tests/test_build_release_manifest.py",
"tests/test_health_check_l3.py",
"tests/test_pilot_prod_correspondence.py",
"tests/test_pilot_prod_parity.py",
"tests/test_readiness.py",
"tests/test_release_attestation.py",
"tests/test_release_control.py",
"tests/test_release_control_workflows.py",
"tests/test_release_manifest.py",
"tests/test_release_metadata.py",
"tests/test_repo/__init__.py",
"tests/test_repo/requirements-scenarios.yaml",
"tests/test_repo/scripts/__init__.py",
"tests/test_repo/scripts/checker.py",
"tests/test_repo/scripts/code_analyzer.py",
"tests/test_repo/scripts/report_generator.py",
"wheels/activity_hub-0.1.0-py3-none-any.whl"
],
"cutover": {
"enabled": false,
"negative_matrix_required": true,
"negative_matrix_max_age_seconds": 86400,
"negative_matrix_evidence_ref": null
}
}
Loading
Loading