causal-continuity-engine 0.1.3__tar.gz → 0.2.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.
- causal_continuity_engine-0.2.0/.githooks/commit-msg +31 -0
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/.githooks/pre-commit +40 -27
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/.github/CONTRIBUTING.md +18 -12
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/.github/pull_request_template.md +2 -2
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/.github/scripts/bootstrap_tools.py +57 -21
- causal_continuity_engine-0.2.0/.github/scripts/check_attribution.py +485 -0
- causal_continuity_engine-0.2.0/.github/scripts/check_content_marks.py +2367 -0
- causal_continuity_engine-0.2.0/.github/scripts/check_release_tag.py +1698 -0
- causal_continuity_engine-0.2.0/.github/scripts/prepare_release_tag.py +364 -0
- causal_continuity_engine-0.2.0/.github/scripts/run_gates.py +244 -0
- causal_continuity_engine-0.2.0/.github/scripts/run_isolated_review.py +2044 -0
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/.github/scripts/verify_distributions.py +194 -6
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/.github/scripts/verify_public_schemas.py +54 -5
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/.github/workflows/ci.yml +12 -5
- causal_continuity_engine-0.2.0/.github/workflows/content-integrity-pr.yml +167 -0
- causal_continuity_engine-0.2.0/.github/workflows/content-integrity.yml +64 -0
- causal_continuity_engine-0.2.0/.github/workflows/no-ai-attribution.yml +79 -0
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/.github/workflows/release.yml +137 -10
- causal_continuity_engine-0.2.0/.gitleaks.toml +34 -0
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/.pre-commit-config.yaml +10 -1
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/AGENTS.md +38 -19
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/CHANGELOG.md +350 -5
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/CITATION.cff +2 -2
- {causal_continuity_engine-0.1.3/causal_continuity_engine.egg-info → causal_continuity_engine-0.2.0}/PKG-INFO +229 -51
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/README.md +225 -47
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/SPEC.md +69 -15
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/benchmarks/continuitybench/run.py +30 -2
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/benchmarks/continuitybench/scenarios.py +159 -35
- causal_continuity_engine-0.2.0/causal_continuity_engine/__init__.py +27 -0
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/causal_continuity_engine/api.py +55 -16
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/causal_continuity_engine/capsule.py +122 -9
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/causal_continuity_engine/cli.py +146 -16
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/causal_continuity_engine/engine.py +2001 -228
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/causal_continuity_engine/extraction.py +95 -22
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/causal_continuity_engine/github.py +9 -3
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/causal_continuity_engine/graph.py +25 -4
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/causal_continuity_engine/invalidation.py +30 -12
- causal_continuity_engine-0.2.0/causal_continuity_engine/mcp.py +445 -0
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/causal_continuity_engine/memory.py +20 -4
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/causal_continuity_engine/partial.py +2 -1
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/causal_continuity_engine/policy.py +13 -0
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/causal_continuity_engine/proof.py +44 -12
- causal_continuity_engine-0.2.0/causal_continuity_engine/redaction.py +241 -0
- causal_continuity_engine-0.2.0/causal_continuity_engine/resume.py +1127 -0
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/causal_continuity_engine/store.py +182 -17
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/causal_continuity_engine/verifiers.py +24 -1
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0/causal_continuity_engine.egg-info}/PKG-INFO +229 -51
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/causal_continuity_engine.egg-info/SOURCES.txt +71 -0
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/causal_continuity_engine.egg-info/requires.txt +3 -3
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/docs/API.md +18 -5
- causal_continuity_engine-0.2.0/docs/CONTENT-INGRESS-FIREWALL.md +228 -0
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/docs/PUBLIC-FLIP.md +49 -27
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/docs/RELEASE.md +281 -49
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/docs/REQUIREMENTS_COVERAGE.md +18 -12
- causal_continuity_engine-0.2.0/docs/V0.1.5-TRUST-CLOSURE.md +175 -0
- causal_continuity_engine-0.2.0/docs/adr/ADR-INDEX.md +3502 -0
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/examples/backfill_github.py +79 -10
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/justfile +7 -2
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/pyproject.toml +4 -4
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/requirements-dev.in +4 -4
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/requirements-dev.lock +28 -28
- causal_continuity_engine-0.2.0/schemas/cce.capsule.v2.json +232 -0
- causal_continuity_engine-0.2.0/schemas/cce.continuity-receipt.v2.json +787 -0
- causal_continuity_engine-0.2.0/schemas/cce.proof-predicate.v2.json +85 -0
- causal_continuity_engine-0.2.0/schemas/cce.proof.v2.json +565 -0
- causal_continuity_engine-0.2.0/schemas/cce.resume.v2.json +864 -0
- causal_continuity_engine-0.2.0/tests/authority_helpers.py +25 -0
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/tests/test_api_contract.py +18 -6
- causal_continuity_engine-0.2.0/tests/test_attribution_controls.py +533 -0
- causal_continuity_engine-0.2.0/tests/test_authority_atomic_append.py +418 -0
- causal_continuity_engine-0.2.0/tests/test_authority_cli.py +550 -0
- causal_continuity_engine-0.2.0/tests/test_authority_consumers.py +461 -0
- causal_continuity_engine-0.2.0/tests/test_authority_criticality.py +164 -0
- causal_continuity_engine-0.2.0/tests/test_authority_extraction.py +165 -0
- causal_continuity_engine-0.2.0/tests/test_authority_producer.py +203 -0
- causal_continuity_engine-0.2.0/tests/test_authority_read_reuse.py +252 -0
- causal_continuity_engine-0.2.0/tests/test_authority_redteam.py +293 -0
- causal_continuity_engine-0.2.0/tests/test_authority_withdrawal_classification.py +68 -0
- causal_continuity_engine-0.2.0/tests/test_benchmark_authority.py +91 -0
- causal_continuity_engine-0.2.0/tests/test_benchmark_cleanup.py +80 -0
- causal_continuity_engine-0.2.0/tests/test_benchmark_runner.py +104 -0
- causal_continuity_engine-0.2.0/tests/test_capsule_packet_clock.py +124 -0
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/tests/test_cli.py +204 -1
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/tests/test_conformance.py +4 -4
- causal_continuity_engine-0.2.0/tests/test_content_marks.py +931 -0
- causal_continuity_engine-0.2.0/tests/test_engine_e2e.py +461 -0
- causal_continuity_engine-0.2.0/tests/test_github_redaction.py +562 -0
- causal_continuity_engine-0.2.0/tests/test_identity_compatibility.py +339 -0
- causal_continuity_engine-0.2.0/tests/test_installed_contracts.py +167 -0
- causal_continuity_engine-0.2.0/tests/test_installed_packet_bounds.py +95 -0
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/tests/test_instrument_validation.py +77 -20
- causal_continuity_engine-0.2.0/tests/test_invalidation_resume.py +528 -0
- causal_continuity_engine-0.2.0/tests/test_isolated_review.py +757 -0
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/tests/test_learning_partial_api.py +13 -4
- causal_continuity_engine-0.2.0/tests/test_mcp_server.py +1015 -0
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/tests/test_memory_extraction.py +238 -19
- causal_continuity_engine-0.2.0/tests/test_obligation_boundaries.py +149 -0
- causal_continuity_engine-0.2.0/tests/test_obligation_completeness.py +366 -0
- causal_continuity_engine-0.2.0/tests/test_obligation_contract_repairs.py +136 -0
- causal_continuity_engine-0.2.0/tests/test_packet_byte_bounds.py +431 -0
- causal_continuity_engine-0.2.0/tests/test_packet_byte_transports.py +331 -0
- causal_continuity_engine-0.2.0/tests/test_packet_complete_trust.py +42 -0
- causal_continuity_engine-0.2.0/tests/test_packet_failure_boundaries.py +36 -0
- causal_continuity_engine-0.2.0/tests/test_packet_scope_receipts.py +88 -0
- causal_continuity_engine-0.2.0/tests/test_packet_scope_wire.py +368 -0
- causal_continuity_engine-0.2.0/tests/test_packet_validity_frontier.py +200 -0
- causal_continuity_engine-0.2.0/tests/test_processor_compatibility.py +3908 -0
- causal_continuity_engine-0.2.0/tests/test_proof_obligation_wire.py +238 -0
- causal_continuity_engine-0.2.0/tests/test_readme_contract.py +100 -0
- causal_continuity_engine-0.2.0/tests/test_receipt_spec_contract.py +101 -0
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/tests/test_regressions.py +10 -3
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/tests/test_regressions_round10_release.py +211 -32
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/tests/test_regressions_round11_deep_integrity.py +5 -10
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/tests/test_regressions_round12_release_blockers.py +11 -2
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/tests/test_regressions_round14_state_integrity.py +99 -7
- causal_continuity_engine-0.2.0/tests/test_regressions_round17_backfill_layout.py +354 -0
- causal_continuity_engine-0.2.0/tests/test_regressions_round18_assumption_edits.py +397 -0
- causal_continuity_engine-0.2.0/tests/test_regressions_round18_co_assertion.py +163 -0
- causal_continuity_engine-0.2.0/tests/test_regressions_round18_journal.py +200 -0
- causal_continuity_engine-0.2.0/tests/test_regressions_round18_negation.py +180 -0
- causal_continuity_engine-0.2.0/tests/test_regressions_round18_source_order.py +354 -0
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/tests/test_regressions_round2.py +31 -36
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/tests/test_regressions_round3.py +59 -12
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/tests/test_regressions_round4.py +2 -3
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/tests/test_regressions_round5.py +25 -12
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/tests/test_regressions_round6.py +58 -20
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/tests/test_regressions_round7.py +61 -42
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/tests/test_regressions_round8_engine.py +90 -5
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/tests/test_regressions_round8_portability.py +357 -47
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/tests/test_regressions_round9_integrity.py +2 -3
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/tests/test_release_boundary_validation.py +16 -4
- causal_continuity_engine-0.2.0/tests/test_release_controls.py +3338 -0
- causal_continuity_engine-0.2.0/tests/test_resume_prose_origin.py +189 -0
- causal_continuity_engine-0.2.0/tests/test_schema_release_identities.py +136 -0
- causal_continuity_engine-0.2.0/tests/test_task_packet_review.py +215 -0
- causal_continuity_engine-0.2.0/tests/test_task_packets.py +369 -0
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/tests/test_trust.py +63 -3
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/vectors/action_intent_wrong_type.json +28 -23
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/vectors/actor_wrong_type.json +28 -23
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/vectors/created_at_invalid_calendar_date.json +27 -22
- causal_continuity_engine-0.2.0/vectors/created_at_leap_second.json +177 -0
- causal_continuity_engine-0.2.0/vectors/created_at_lowercase_designators.json +177 -0
- causal_continuity_engine-0.2.0/vectors/created_at_missing_timezone.json +177 -0
- causal_continuity_engine-0.2.0/vectors/created_at_noncanonical_offset.json +177 -0
- causal_continuity_engine-0.2.0/vectors/created_at_space_separator.json +177 -0
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/vectors/empty_required_authoritative_failure.json +20 -15
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/vectors/empty_required_authoritative_pass.json +20 -15
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/vectors/empty_required_no_results.json +20 -15
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/vectors/empty_required_self_asserted_pass.json +20 -15
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/vectors/generate.py +77 -13
- causal_continuity_engine-0.2.0/vectors/historical_proof_version.json +177 -0
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/vectors/incomplete_failed_check.json +28 -23
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/vectors/index.json +91 -0
- causal_continuity_engine-0.2.0/vectors/input_item_wrong_type.json +178 -0
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/vectors/invalid_result_value.json +28 -23
- causal_continuity_engine-0.2.0/vectors/lamport_fingerprint_spoof.json +1463 -0
- causal_continuity_engine-0.2.0/vectors/lamport_no_registry.json +1459 -0
- causal_continuity_engine-0.2.0/vectors/lamport_truncated_key.json +1459 -0
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/vectors/missing_required_field.json +28 -23
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/vectors/non_binary64_integer.json +28 -23
- causal_continuity_engine-0.2.0/vectors/obligation_duplicate.json +182 -0
- causal_continuity_engine-0.2.0/vectors/obligation_duplicate_task.json +178 -0
- causal_continuity_engine-0.1.3/vectors/created_at_noncanonical_offset.json → causal_continuity_engine-0.2.0/vectors/obligation_missing.json +25 -25
- causal_continuity_engine-0.2.0/vectors/obligation_wrong_kind.json +177 -0
- causal_continuity_engine-0.2.0/vectors/obligation_wrong_task.json +177 -0
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/vectors/policy_decision_wrong_type.json +26 -21
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/vectors/retry_cannot_launder_a_failure.json +32 -27
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/vectors/self_asserted_cannot_satisfy.json +28 -23
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/vectors/self_assertion_cannot_poison_authoritative_pass.json +32 -27
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/vectors/status_contradicts_contents.json +28 -23
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/vectors/summary_contradicts_contents.json +28 -23
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/vectors/tamper_statement.json +28 -23
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/vectors/tamper_statement_resealed.json +28 -23
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/vectors/task_id_under_unrelated_field.json +24 -24
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/vectors/unbound_task.json +18 -18
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/vectors/unknown_action_intent_field.json +28 -23
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/vectors/unknown_algorithm.json +28 -23
- causal_continuity_engine-0.2.0/vectors/unknown_evidence_context_field.json +178 -0
- causal_continuity_engine-0.2.0/vectors/unknown_execution_field.json +178 -0
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/vectors/unknown_schema_version.json +28 -23
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/vectors/unknown_top_level_field.json +28 -23
- causal_continuity_engine-0.2.0/vectors/unknown_verification_field.json +178 -0
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/vectors/unverified_forged_body_no_key.json +28 -23
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/vectors/unverified_hmac_no_key.json +28 -23
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/vectors/valid_hmac.json +29 -24
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/vectors/valid_hmac_jcs_edges.json +29 -24
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/vectors/valid_hmac_unicode.json +29 -24
- causal_continuity_engine-0.2.0/vectors/valid_lamport.json +1463 -0
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/vectors/wrong_project.json +28 -23
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/verifiers/verify_proof.py +16 -3
- causal_continuity_engine-0.1.3/.githooks/commit-msg +0 -19
- causal_continuity_engine-0.1.3/.github/scripts/check_release_tag.py +0 -561
- causal_continuity_engine-0.1.3/.github/scripts/prepare_release_tag.py +0 -270
- causal_continuity_engine-0.1.3/.github/scripts/run_gates.py +0 -132
- causal_continuity_engine-0.1.3/.github/workflows/no-ai-attribution.yml +0 -129
- causal_continuity_engine-0.1.3/.gitleaks.toml +0 -28
- causal_continuity_engine-0.1.3/causal_continuity_engine/__init__.py +0 -21
- causal_continuity_engine-0.1.3/causal_continuity_engine/redaction.py +0 -94
- causal_continuity_engine-0.1.3/causal_continuity_engine/resume.py +0 -653
- causal_continuity_engine-0.1.3/docs/adr/ADR-INDEX.md +0 -1890
- causal_continuity_engine-0.1.3/tests/test_engine_e2e.py +0 -286
- causal_continuity_engine-0.1.3/tests/test_github_redaction.py +0 -193
- causal_continuity_engine-0.1.3/tests/test_invalidation_resume.py +0 -205
- causal_continuity_engine-0.1.3/tests/test_release_controls.py +0 -861
- causal_continuity_engine-0.1.3/vectors/input_item_wrong_type.json +0 -163
- causal_continuity_engine-0.1.3/vectors/lamport_fingerprint_spoof.json +0 -1458
- causal_continuity_engine-0.1.3/vectors/lamport_no_registry.json +0 -1454
- causal_continuity_engine-0.1.3/vectors/lamport_truncated_key.json +0 -1454
- causal_continuity_engine-0.1.3/vectors/valid_lamport.json +0 -1458
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/.editorconfig +0 -0
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/.gitattributes +0 -0
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/.github/CODEOWNERS +0 -0
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/.github/ISSUE_TEMPLATE/bug.yml +0 -0
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/.github/ISSUE_TEMPLATE/feature.yml +0 -0
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/.github/SECURITY.md +0 -0
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/.github/SUPPORT.md +0 -0
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/.github/dependabot.yml +0 -0
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/.github/release.yml +0 -0
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/.github/ruleset.README.md +0 -0
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/.github/ruleset.json +0 -0
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/.github/scripts/build_distributions.py +0 -0
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/.github/scripts/check_clean.py +0 -0
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/.github/scripts/check_release_metadata.py +0 -0
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/.github/scripts/check_stdlib.py +0 -0
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/.github/scripts/render_api_docs.py +0 -0
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/.github/tag-ruleset.json +0 -0
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/.github/workflows/commit-signature-audit.yml +0 -0
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/.github/workflows/dependency-review.yml +0 -0
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/.github/workflows/secret-scan.yml +0 -0
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/.gitignore +0 -0
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/LICENSE.txt +0 -0
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/MANIFEST.in +0 -0
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/NOTICE +0 -0
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/benchmarks/__init__.py +0 -0
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/benchmarks/continuitybench/__init__.py +0 -0
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/causal_continuity_engine/capabilities.py +0 -0
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/causal_continuity_engine/core.py +0 -0
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/causal_continuity_engine/evidence.py +0 -0
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/causal_continuity_engine/lamport.py +0 -0
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/causal_continuity_engine/learning.py +0 -0
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/causal_continuity_engine/ontology.py +0 -0
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/causal_continuity_engine/py.typed +0 -0
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/causal_continuity_engine.egg-info/dependency_links.txt +0 -0
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/causal_continuity_engine.egg-info/entry_points.txt +0 -0
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/causal_continuity_engine.egg-info/top_level.txt +0 -0
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/docs/CAPABILITIES.md +0 -0
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/docs/REQUIREMENTS.md +0 -0
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/docs/RESEARCH-ROADMAP.md +0 -0
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/docs/TESTING.md +0 -0
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/docs/assets/demo.svg +0 -0
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/docs/assets/social-preview.png +0 -0
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/examples/quickstart.py +0 -0
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/schemas/cce.anchor.v1.json +0 -0
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/schemas/cce.capsule.v1.json +0 -0
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/schemas/cce.continuity-receipt.v1.json +0 -0
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/schemas/cce.event.v1.json +0 -0
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/schemas/cce.proof-predicate.v1.json +0 -0
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/schemas/cce.proof.v1.json +0 -0
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/schemas/cce.recovery.v1.json +0 -0
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/schemas/cce.resume.v1.json +0 -0
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/setup.cfg +0 -0
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/tests/__init__.py +0 -0
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/tests/schema_validation.py +0 -0
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/tests/test_distribution_environment.py +0 -0
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/tests/test_regressions_round13_jcs.py +0 -0
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/tests/test_regressions_round15_capsule_invalidation_github.py +0 -0
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/tests/test_regressions_round15_public_boundaries.py +0 -0
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/tests/test_regressions_round15_storage_boundaries.py +0 -0
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/tests/test_regressions_round16_cli_api_core_capabilities.py +0 -0
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/tests/test_regressions_round8_boundaries.py +0 -0
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/tests/test_regressions_round8_state.py +0 -0
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/tests/test_regressions_round9_scope_freshness.py +0 -0
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/tests/test_sqlite_lifecycle.py +0 -0
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/tests/test_store_graph.py +0 -0
- {causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/verifiers/__init__.py +0 -0
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
#!/bin/sh
|
|
2
|
+
if command -v python3 >/dev/null 2>&1 &&
|
|
3
|
+
python3 -c 'import sys; raise SystemExit(sys.version_info < (3, 11))' \
|
|
4
|
+
>/dev/null 2>&1; then
|
|
5
|
+
python_command=python3
|
|
6
|
+
elif command -v python >/dev/null 2>&1 &&
|
|
7
|
+
python -c 'import sys; raise SystemExit(sys.version_info < (3, 11))' \
|
|
8
|
+
>/dev/null 2>&1; then
|
|
9
|
+
python_command=python
|
|
10
|
+
else
|
|
11
|
+
echo "ERROR: Python 3.11 or newer is required for repository policy checks." >&2
|
|
12
|
+
exit 1
|
|
13
|
+
fi
|
|
14
|
+
identity_input="$(mktemp)" || exit 1
|
|
15
|
+
trap 'rm -f "$identity_input"' EXIT HUP INT TERM
|
|
16
|
+
cat "$1" > "$identity_input" || exit 1
|
|
17
|
+
git var GIT_AUTHOR_IDENT >> "$identity_input" || exit 1
|
|
18
|
+
git var GIT_COMMITTER_IDENT >> "$identity_input" || exit 1
|
|
19
|
+
"$python_command" .github/scripts/check_content_marks.py \
|
|
20
|
+
--stdin '<commit-message-and-identities>' < "$identity_input"
|
|
21
|
+
content_status=$?
|
|
22
|
+
if [ "$content_status" -ne 0 ]; then
|
|
23
|
+
echo "ERROR: commit metadata content-integrity scan did not pass." >&2
|
|
24
|
+
exit "$content_status"
|
|
25
|
+
fi
|
|
26
|
+
"$python_command" -I .github/scripts/check_attribution.py --message-file "$1"
|
|
27
|
+
attribution_status=$?
|
|
28
|
+
if [ "$attribution_status" -ne 0 ]; then
|
|
29
|
+
echo "ERROR: commit attribution scan did not pass." >&2
|
|
30
|
+
exit "$attribution_status"
|
|
31
|
+
fi
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
#!/bin/sh
|
|
2
|
-
# Repository pre-commit gate.
|
|
3
|
-
# when installed and emits an explicit warning when
|
|
2
|
+
# Repository pre-commit gate. Content integrity and attribution are blocking;
|
|
3
|
+
# gitleaks is blocking when installed and emits an explicit warning when
|
|
4
|
+
# unavailable.
|
|
4
5
|
#
|
|
5
6
|
# WHY BOTH LIVE HERE: git honours exactly one hook path. This repository sets
|
|
6
7
|
# `core.hooksPath = .githooks`, and the pre-commit framework refuses to install
|
|
@@ -15,35 +16,47 @@
|
|
|
15
16
|
# independently (.github/workflows/no-ai-attribution.yml), so a contributor who
|
|
16
17
|
# runs neither hook path is still caught before merge.
|
|
17
18
|
|
|
19
|
+
if command -v python3 >/dev/null 2>&1 &&
|
|
20
|
+
python3 -c 'import sys; raise SystemExit(sys.version_info < (3, 11))' \
|
|
21
|
+
>/dev/null 2>&1; then
|
|
22
|
+
python_command=python3
|
|
23
|
+
elif command -v python >/dev/null 2>&1 &&
|
|
24
|
+
python -c 'import sys; raise SystemExit(sys.version_info < (3, 11))' \
|
|
25
|
+
>/dev/null 2>&1; then
|
|
26
|
+
python_command=python
|
|
27
|
+
else
|
|
28
|
+
echo "ERROR: Python 3.11 or newer is required for repository policy checks." >&2
|
|
29
|
+
exit 1
|
|
30
|
+
fi
|
|
31
|
+
|
|
32
|
+
# ---------------------------------------------------------- content integrity
|
|
33
|
+
# Scan the complete proposed index, including unchanged staged blobs. A diff or
|
|
34
|
+
# working-tree scan can miss a marked blob that is already staged, and an
|
|
35
|
+
# incomplete scan is not clean.
|
|
36
|
+
"$python_command" .github/scripts/check_content_marks.py --index
|
|
37
|
+
content_status=$?
|
|
38
|
+
if [ "$content_status" -ne 0 ]; then
|
|
39
|
+
echo "ERROR: staged content-integrity scan did not pass." >&2
|
|
40
|
+
exit "$content_status"
|
|
41
|
+
fi
|
|
42
|
+
|
|
18
43
|
# ---------------------------------------------------------------- attribution
|
|
19
|
-
# The
|
|
20
|
-
#
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
':(exclude).github/workflows/no-ai-attribution.yml' \
|
|
29
|
-
|| git_grep_status=$?
|
|
30
|
-
case "$git_grep_status" in
|
|
31
|
-
0)
|
|
32
|
-
echo "ERROR: AI attribution found in staged changes. Remove it before committing." >&2
|
|
33
|
-
exit 1
|
|
34
|
-
;;
|
|
35
|
-
1) ;;
|
|
36
|
-
*)
|
|
37
|
-
echo "ERROR: git grep failed; attribution status is unknown." >&2
|
|
38
|
-
exit "$git_grep_status"
|
|
39
|
-
;;
|
|
40
|
-
esac
|
|
44
|
+
# The policy scanner reads the complete proposed index as exact Git blobs. Its
|
|
45
|
+
# lexical grammar keeps sentence-form product discussion and Markdown vendor
|
|
46
|
+
# headings/lists legal; no path is exempt from the scan.
|
|
47
|
+
"$python_command" -I .github/scripts/check_attribution.py --index
|
|
48
|
+
attribution_status=$?
|
|
49
|
+
if [ "$attribution_status" -ne 0 ]; then
|
|
50
|
+
echo "ERROR: staged attribution scan did not pass." >&2
|
|
51
|
+
exit "$attribution_status"
|
|
52
|
+
fi
|
|
41
53
|
|
|
42
54
|
# --------------------------------------------------------------------- secrets
|
|
43
55
|
# Load-bearing, not decoration. GitHub secret scanning and push protection are
|
|
44
|
-
#
|
|
45
|
-
# installed and this hook is not bypassed, it is the only
|
|
46
|
-
# pasted credential reaches the remote; the
|
|
56
|
+
# enabled on this public repository and catch a pushed credential server side.
|
|
57
|
+
# When gitleaks is installed and this hook is not bypassed, it is the only
|
|
58
|
+
# scan that runs before a pasted credential reaches the remote at all; the
|
|
59
|
+
# server workflow runs after push.
|
|
47
60
|
# .gitleaks.toml allowlists the synthetic token the redaction tests need by
|
|
48
61
|
# VALUE rather than by path, so a real secret in the same file is still caught.
|
|
49
62
|
if command -v gitleaks >/dev/null 2>&1; then
|
|
@@ -53,21 +53,25 @@ do. `just setup` installs every direct and transitive tool from
|
|
|
53
53
|
`requirements-dev.lock` in pip's all-or-nothing hash-checking mode, refuses
|
|
54
54
|
source distributions, then installs `causal-continuity-engine` editable without dependency
|
|
55
55
|
resolution or an isolated build environment. The reviewed direct inputs are
|
|
56
|
-
`pytest` 9.1.1, `ruff` 0.16.
|
|
57
|
-
`setuptools`
|
|
56
|
+
`pytest` 9.1.1, `ruff` 0.16.7, `build` 1.6.1, `jsonschema` 4.26.0,
|
|
57
|
+
`setuptools` 84.0.0, and `pip` 26.2.1. None is imported by the engine; jsonschema validates
|
|
58
58
|
emitted receipt instances only in the test/release gate.
|
|
59
59
|
|
|
60
|
-
The
|
|
61
|
-
|
|
60
|
+
The security review on 2026-09-15 recorded setuptools 83.0.0 as the first
|
|
61
|
+
patched release for
|
|
62
62
|
[GHSA-h35f-9h28-mq5c](https://github.com/advisories/GHSA-h35f-9h28-mq5c)
|
|
63
|
-
and
|
|
63
|
+
and pip 26.2.1 is later than the first patched release for
|
|
64
|
+
[GHSA-wf93-45jw-7689](https://github.com/advisories/GHSA-wf93-45jw-7689);
|
|
64
65
|
pytest 9.1.1 is newer than the 9.0.3 fix for
|
|
65
66
|
[GHSA-6w46-j5rx-g56g](https://github.com/advisories/GHSA-6w46-j5rx-g56g),
|
|
66
67
|
and the lock carries Pygments 2.20.0, the fix for
|
|
67
68
|
[GHSA-5239-wwwm-4pmq](https://github.com/advisories/GHSA-5239-wwwm-4pmq).
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
review
|
|
69
|
+
On that date pytest 9.1.1, ruff 0.16.7, build 1.6.1, jsonschema 4.26.0 and pip
|
|
70
|
+
26.2.1 were the current stable releases on PyPI; build 1.5.1 remains yanked.
|
|
71
|
+
That review retained setuptools 83.0.0 without evaluating 84.0.0. The current
|
|
72
|
+
84.0.0 pin is a subsequent build-tool update, with matching direct inputs and
|
|
73
|
+
hash lock. The security review is a dated record, not a claim that pins stay
|
|
74
|
+
current without future review.
|
|
71
75
|
|
|
72
76
|
When a direct pin changes, edit `pyproject.toml` and `requirements-dev.in`,
|
|
73
77
|
regenerate the lock with the command recorded in its header, and review the
|
|
@@ -104,9 +108,10 @@ the same file is still caught.
|
|
|
104
108
|
`.pre-commit-config.yaml` remains supported for contributors who prefer the
|
|
105
109
|
framework, with one constraint: git honours exactly one hook path, and
|
|
106
110
|
pre-commit refuses to install while `core.hooksPath` is set. Unset it first
|
|
107
|
-
(`git config --unset core.hooksPath`). That path covers
|
|
108
|
-
|
|
109
|
-
|
|
111
|
+
(`git config --unset core.hooksPath`). That path covers the complete staged
|
|
112
|
+
content-integrity scan, gitleaks, `ruff check` (the same lint gate as `just
|
|
113
|
+
lint` and CI), and file hygiene, but not the attribution scan. It deliberately
|
|
114
|
+
carries no `ruff-format` hook — see the `fmt-check` note
|
|
110
115
|
in the `justfile`. CI enforces the attribution rule independently either way
|
|
111
116
|
(`.github/workflows/no-ai-attribution.yml`), so nothing that reaches a pull
|
|
112
117
|
request depends on which hook path you chose.
|
|
@@ -130,12 +135,13 @@ wheel. The `ci` job fans all those paths into one context.
|
|
|
130
135
|
| Recipe | Direct equivalent | What it establishes |
|
|
131
136
|
|---|---|---|
|
|
132
137
|
| `just setup` | `python -m pip install --force-reinstall --require-hashes --only-binary=:all: -r requirements-dev.lock`, then `python -m pip check`, then `python -m pip install --no-deps --no-build-isolation -e .` | Nothing on its own. It installs the reviewed, hash-locked tool closure, checks dependency consistency, and installs the local package without undeclared resolution. |
|
|
138
|
+
| `just content-integrity` | `python .github/scripts/check_content_marks.py --index` | Every staged Git blob was inspected completely and contains no recognized carrier or repository-disallowed hidden control. It does not detect an unpublished statistical text mark. |
|
|
133
139
|
| `just lint` | `python -m ruff check .` | Ruff passes under the rule set pinned in `pyproject.toml` `[tool.ruff.lint]` — `E`, `F`, `W`, `I`, line length 100. That set, and nothing wider: it is not passed on the command line, so widening the gate means editing `pyproject.toml`. |
|
|
134
140
|
| `just deps` | `python .github/scripts/check_stdlib.py` | `causal_continuity_engine/` imports nothing outside the standard library. It parses the AST instead of importing, so a lazy, guarded, or function-local import is caught too. This is the gate behind the zero-runtime-dependency claim. |
|
|
135
141
|
| `just test` | `python -m pytest tests/ -q` | The complete regression suite and planted instrument-validation cases pass. |
|
|
136
142
|
| `just corpus` | `python vectors/generate.py --check` | The reference implementation still reaches every committed verdict. Cross-implementation agreement is established by `just test`, not here. |
|
|
137
143
|
| `just caps` | `python -m causal_continuity_engine.capabilities --write` then `git diff --exit-code -- docs/CAPABILITIES.md` | Every capability claim resolves to real symbols, files, and tests, and the committed `docs/CAPABILITIES.md` is identical to what the audit generates. |
|
|
138
|
-
| `just bench` | `python -m benchmarks.continuitybench.run` | All
|
|
144
|
+
| `just bench` | `python -m benchmarks.continuitybench.run` | All eleven ContinuityBench scenarios still pass and all six metrics are still at their gates. |
|
|
139
145
|
| `just build` | the scripts under `.github/scripts/` | Each pass first binds physical source bytes without Git filters to the exact `HEAD`/index blobs, stages only those bytes in an empty disposable source directory, validates a canonical closed-manifest sdist before materializing it, and builds the wheel only from that exact normalized payload; two passes are byte-identical under the locked backend, backend execution leaves source unchanged, the checksum manifest is exact, shipped bytes equal the source tree, the audit surface is present, and an isolated installed wheel passes dependency-free import/CLI probes before exact locked tools run capability and behavioral checks. |
|
|
140
146
|
|
|
141
147
|
Attribution is not one of these, and it is not a lint rule. It is enforced by
|
{causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/.github/pull_request_template.md
RENAMED
|
@@ -12,11 +12,11 @@
|
|
|
12
12
|
- [ ] `just test` passes.
|
|
13
13
|
- [ ] `just lint` passes.
|
|
14
14
|
- [ ] `just deps` passes — `causal_continuity_engine/` still imports nothing outside the standard library.
|
|
15
|
-
- [ ] `just bench` passes — all
|
|
15
|
+
- [ ] `just bench` passes — all eleven ContinuityBench scenarios, every metric at target.
|
|
16
16
|
- [ ] `just corpus` passes — the reference still agrees with the committed vectors in `vectors/`.
|
|
17
17
|
- [ ] `just caps` passes — every capability claim still resolves to real symbols, files, and tests. If the claims changed, `docs/CAPABILITIES.md` was regenerated with `python -m causal_continuity_engine.capabilities --write` rather than hand-edited.
|
|
18
18
|
- [ ] `just build` passes if packaging, generated assets, or release machinery changed — both builds match and the clean-installed wheel audits successfully.
|
|
19
|
-
- [ ] Every commit carries a `Signed-off-by` trailer (`git commit -s`).
|
|
19
|
+
- [ ] Every commit carries a `Signed-off-by` trailer (`git commit -s`). Enforced: the `DCO` check is a required status on `main`, so a pull request with any commit missing the trailer cannot merge.
|
|
20
20
|
- [ ] No gate was weakened, skipped, or made conditional in order to get a test to pass. If a gate had to change, that change is the subject of this PR and is argued for above.
|
|
21
21
|
- [ ] No AI attribution anywhere in the diff, commit messages, or PR title or body.
|
|
22
22
|
|
{causal_continuity_engine-0.1.3 → causal_continuity_engine-0.2.0}/.github/scripts/bootstrap_tools.py
RENAMED
|
@@ -17,7 +17,11 @@ ENSUREPIP_TIMEOUT_SECONDS = 300
|
|
|
17
17
|
TOOL_INSTALL_TIMEOUT_SECONDS = 600
|
|
18
18
|
TOOL_CHECK_TIMEOUT_SECONDS = 120
|
|
19
19
|
LOCAL_INSTALL_TIMEOUT_SECONDS = 300
|
|
20
|
-
|
|
20
|
+
# The slowest child (pytest) has a 30-minute ceiling. Reserve another 15
|
|
21
|
+
# minutes for the gates around it, output collection and descendant cleanup.
|
|
22
|
+
# Hosted jobs that run this complete sequence reserve a further 20 minutes for
|
|
23
|
+
# checkout, interpreter setup, this isolated bootstrap and final reporting.
|
|
24
|
+
GATE_RUNNER_TIMEOUT_SECONDS = 45 * 60
|
|
21
25
|
|
|
22
26
|
_CLOSURE_PROBE = r"""
|
|
23
27
|
import importlib.metadata
|
|
@@ -183,7 +187,8 @@ def _run_checked(
|
|
|
183
187
|
print(result.stderr, end="", file=sys.stderr)
|
|
184
188
|
|
|
185
189
|
|
|
186
|
-
def _install_toolchain(
|
|
190
|
+
def _install_toolchain(
|
|
191
|
+
python: Path, environment: dict[str, str], *, install_project: bool = True) -> None:
|
|
187
192
|
_run_checked(
|
|
188
193
|
[
|
|
189
194
|
str(python),
|
|
@@ -212,21 +217,22 @@ def _install_toolchain(python: Path, environment: dict[str, str]) -> None:
|
|
|
212
217
|
label="exact tool-closure verification",
|
|
213
218
|
timeout_seconds=TOOL_CHECK_TIMEOUT_SECONDS,
|
|
214
219
|
)
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
220
|
+
if install_project:
|
|
221
|
+
_run_checked(
|
|
222
|
+
[
|
|
223
|
+
str(python),
|
|
224
|
+
"-m",
|
|
225
|
+
"pip",
|
|
226
|
+
"install",
|
|
227
|
+
"--no-deps",
|
|
228
|
+
"--no-build-isolation",
|
|
229
|
+
"-e",
|
|
230
|
+
str(ROOT),
|
|
231
|
+
],
|
|
232
|
+
environment=environment,
|
|
233
|
+
label="local package installation",
|
|
234
|
+
timeout_seconds=LOCAL_INSTALL_TIMEOUT_SECONDS,
|
|
235
|
+
)
|
|
230
236
|
|
|
231
237
|
|
|
232
238
|
def _bootstrap_pip(python: Path, environment: dict[str, str]) -> None:
|
|
@@ -243,8 +249,20 @@ def main(argv: list[str] | None = None) -> int:
|
|
|
243
249
|
parser = argparse.ArgumentParser()
|
|
244
250
|
mode = parser.add_mutually_exclusive_group()
|
|
245
251
|
mode.add_argument("--release", action="store_true")
|
|
246
|
-
mode.add_argument("--
|
|
252
|
+
mode.add_argument("--release-build", action="store_true")
|
|
253
|
+
mode.add_argument("--artifacts-structural", action="store_true")
|
|
254
|
+
mode.add_argument("--structure-only", action="store_true")
|
|
255
|
+
mode.add_argument("--behavior-only", action="store_true")
|
|
256
|
+
parser.add_argument("--portable-semantic", action="store_true")
|
|
257
|
+
parser.add_argument("--source-epoch", type=int)
|
|
258
|
+
parser.add_argument("--dist", type=Path)
|
|
247
259
|
args = parser.parse_args(argv)
|
|
260
|
+
if args.dist is not None and not (args.structure_only or args.behavior_only):
|
|
261
|
+
parser.error("--dist requires --structure-only or --behavior-only")
|
|
262
|
+
if args.portable_semantic != (args.source_epoch is not None):
|
|
263
|
+
parser.error("--portable-semantic and --source-epoch must be supplied together")
|
|
264
|
+
if args.portable_semantic and not args.structure_only:
|
|
265
|
+
parser.error("portable structural options require --structure-only")
|
|
248
266
|
|
|
249
267
|
with tempfile.TemporaryDirectory(prefix="cce-tools-") as temp:
|
|
250
268
|
environment_root = Path(temp) / "venv"
|
|
@@ -253,12 +271,30 @@ def main(argv: list[str] | None = None) -> int:
|
|
|
253
271
|
environment = _clean_environment(
|
|
254
272
|
Path(temp) / "process-environment", python.parent)
|
|
255
273
|
_bootstrap_pip(python, environment)
|
|
256
|
-
_install_toolchain(
|
|
274
|
+
_install_toolchain(
|
|
275
|
+
python, environment,
|
|
276
|
+
install_project=not (args.structure_only or args.behavior_only))
|
|
257
277
|
command = [str(python), str(ROOT / ".github/scripts/run_gates.py")]
|
|
258
278
|
if args.release:
|
|
259
279
|
command.append("--release")
|
|
260
|
-
elif args.
|
|
261
|
-
command.append("--
|
|
280
|
+
elif args.release_build:
|
|
281
|
+
command.append("--release-build")
|
|
282
|
+
elif args.artifacts_structural:
|
|
283
|
+
command.append("--artifacts-structural")
|
|
284
|
+
elif args.structure_only:
|
|
285
|
+
command.append("--structure-only")
|
|
286
|
+
if args.portable_semantic:
|
|
287
|
+
command.extend([
|
|
288
|
+
"--portable-semantic",
|
|
289
|
+
"--source-epoch",
|
|
290
|
+
str(args.source_epoch),
|
|
291
|
+
])
|
|
292
|
+
if args.dist is not None:
|
|
293
|
+
command.extend(["--dist", str(args.dist)])
|
|
294
|
+
elif args.behavior_only:
|
|
295
|
+
command.append("--behavior-only")
|
|
296
|
+
if args.dist is not None:
|
|
297
|
+
command.extend(["--dist", str(args.dist)])
|
|
262
298
|
_run_checked(
|
|
263
299
|
command,
|
|
264
300
|
environment=environment,
|