causal-continuity-engine 0.1.2__tar.gz → 0.1.6__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (230) hide show
  1. causal_continuity_engine-0.1.6/.githooks/commit-msg +31 -0
  2. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/.githooks/pre-commit +40 -27
  3. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/.github/CONTRIBUTING.md +17 -12
  4. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/.github/pull_request_template.md +2 -2
  5. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/.github/scripts/bootstrap_tools.py +57 -21
  6. causal_continuity_engine-0.1.6/.github/scripts/check_attribution.py +485 -0
  7. causal_continuity_engine-0.1.6/.github/scripts/check_content_marks.py +2367 -0
  8. causal_continuity_engine-0.1.6/.github/scripts/check_release_tag.py +1698 -0
  9. causal_continuity_engine-0.1.6/.github/scripts/prepare_release_tag.py +364 -0
  10. causal_continuity_engine-0.1.6/.github/scripts/run_gates.py +244 -0
  11. causal_continuity_engine-0.1.6/.github/scripts/run_isolated_review.py +2044 -0
  12. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/.github/scripts/verify_distributions.py +195 -7
  13. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/.github/scripts/verify_public_schemas.py +32 -1
  14. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/.github/workflows/ci.yml +12 -5
  15. causal_continuity_engine-0.1.6/.github/workflows/content-integrity-pr.yml +167 -0
  16. causal_continuity_engine-0.1.6/.github/workflows/content-integrity.yml +64 -0
  17. causal_continuity_engine-0.1.6/.github/workflows/no-ai-attribution.yml +79 -0
  18. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/.github/workflows/release.yml +137 -10
  19. causal_continuity_engine-0.1.6/.gitleaks.toml +34 -0
  20. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/.pre-commit-config.yaml +10 -1
  21. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/AGENTS.md +27 -11
  22. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/CHANGELOG.md +361 -0
  23. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/CITATION.cff +2 -2
  24. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/MANIFEST.in +1 -0
  25. {causal_continuity_engine-0.1.2/causal_continuity_engine.egg-info → causal_continuity_engine-0.1.6}/PKG-INFO +94 -14
  26. causal_continuity_engine-0.1.2/PKG-INFO → causal_continuity_engine-0.1.6/README.md +89 -44
  27. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/benchmarks/continuitybench/run.py +26 -2
  28. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/benchmarks/continuitybench/scenarios.py +75 -0
  29. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/causal_continuity_engine/__init__.py +1 -1
  30. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/causal_continuity_engine/cli.py +68 -10
  31. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/causal_continuity_engine/engine.py +1139 -87
  32. causal_continuity_engine-0.1.6/causal_continuity_engine/extraction.py +479 -0
  33. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/causal_continuity_engine/github.py +9 -3
  34. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/causal_continuity_engine/graph.py +14 -3
  35. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/causal_continuity_engine/invalidation.py +8 -1
  36. causal_continuity_engine-0.1.6/causal_continuity_engine/mcp.py +379 -0
  37. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/causal_continuity_engine/policy.py +12 -0
  38. causal_continuity_engine-0.1.6/causal_continuity_engine/redaction.py +241 -0
  39. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/causal_continuity_engine/resume.py +323 -45
  40. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/causal_continuity_engine/store.py +109 -7
  41. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/causal_continuity_engine/verifiers.py +24 -1
  42. causal_continuity_engine-0.1.2/README.md → causal_continuity_engine-0.1.6/causal_continuity_engine.egg-info/PKG-INFO +125 -10
  43. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/causal_continuity_engine.egg-info/SOURCES.txt +30 -0
  44. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/causal_continuity_engine.egg-info/requires.txt +3 -3
  45. causal_continuity_engine-0.1.6/docs/CONTENT-INGRESS-FIREWALL.md +228 -0
  46. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/docs/PUBLIC-FLIP.md +49 -27
  47. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/docs/RELEASE.md +237 -41
  48. causal_continuity_engine-0.1.6/docs/V0.1.5-TRUST-CLOSURE.md +175 -0
  49. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/docs/adr/ADR-INDEX.md +1041 -0
  50. causal_continuity_engine-0.1.6/examples/backfill_github.py +299 -0
  51. causal_continuity_engine-0.1.6/examples/quickstart.py +199 -0
  52. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/justfile +7 -2
  53. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/pyproject.toml +3 -3
  54. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/requirements-dev.in +3 -3
  55. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/requirements-dev.lock +25 -25
  56. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/tests/test_api_contract.py +6 -1
  57. causal_continuity_engine-0.1.6/tests/test_attribution_controls.py +533 -0
  58. causal_continuity_engine-0.1.6/tests/test_benchmark_runner.py +104 -0
  59. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/tests/test_cli.py +113 -0
  60. causal_continuity_engine-0.1.6/tests/test_content_marks.py +931 -0
  61. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/tests/test_engine_e2e.py +85 -0
  62. causal_continuity_engine-0.1.6/tests/test_github_redaction.py +562 -0
  63. causal_continuity_engine-0.1.6/tests/test_identity_compatibility.py +337 -0
  64. causal_continuity_engine-0.1.6/tests/test_invalidation_resume.py +567 -0
  65. causal_continuity_engine-0.1.6/tests/test_isolated_review.py +757 -0
  66. causal_continuity_engine-0.1.6/tests/test_mcp_server.py +986 -0
  67. causal_continuity_engine-0.1.6/tests/test_memory_extraction.py +698 -0
  68. causal_continuity_engine-0.1.6/tests/test_processor_compatibility.py +3897 -0
  69. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/tests/test_regressions_round10_release.py +201 -32
  70. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/tests/test_regressions_round11_deep_integrity.py +1 -1
  71. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/tests/test_regressions_round12_release_blockers.py +11 -2
  72. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/tests/test_regressions_round14_state_integrity.py +82 -1
  73. causal_continuity_engine-0.1.6/tests/test_regressions_round17_backfill_layout.py +350 -0
  74. causal_continuity_engine-0.1.6/tests/test_regressions_round18_assumption_edits.py +353 -0
  75. causal_continuity_engine-0.1.6/tests/test_regressions_round18_co_assertion.py +119 -0
  76. causal_continuity_engine-0.1.6/tests/test_regressions_round18_journal.py +200 -0
  77. causal_continuity_engine-0.1.6/tests/test_regressions_round18_negation.py +139 -0
  78. causal_continuity_engine-0.1.6/tests/test_regressions_round18_source_order.py +275 -0
  79. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/tests/test_regressions_round5.py +22 -8
  80. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/tests/test_regressions_round6.py +33 -0
  81. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/tests/test_regressions_round8_engine.py +70 -0
  82. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/tests/test_regressions_round8_portability.py +330 -29
  83. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/tests/test_regressions_round9_integrity.py +26 -0
  84. causal_continuity_engine-0.1.6/tests/test_release_controls.py +3333 -0
  85. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/tests/test_trust.py +61 -0
  86. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/vectors/action_intent_wrong_type.json +23 -23
  87. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/vectors/actor_wrong_type.json +23 -23
  88. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/vectors/created_at_invalid_calendar_date.json +22 -22
  89. causal_continuity_engine-0.1.6/vectors/created_at_leap_second.json +172 -0
  90. causal_continuity_engine-0.1.6/vectors/created_at_lowercase_designators.json +172 -0
  91. causal_continuity_engine-0.1.6/vectors/created_at_missing_timezone.json +172 -0
  92. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/vectors/created_at_noncanonical_offset.json +22 -22
  93. causal_continuity_engine-0.1.6/vectors/created_at_space_separator.json +172 -0
  94. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/vectors/empty_required_authoritative_failure.json +15 -15
  95. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/vectors/empty_required_authoritative_pass.json +15 -15
  96. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/vectors/empty_required_no_results.json +15 -15
  97. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/vectors/empty_required_self_asserted_pass.json +15 -15
  98. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/vectors/generate.py +29 -0
  99. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/vectors/incomplete_failed_check.json +23 -23
  100. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/vectors/index.json +49 -0
  101. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/vectors/input_item_wrong_type.json +17 -17
  102. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/vectors/invalid_result_value.json +23 -23
  103. causal_continuity_engine-0.1.6/vectors/lamport_fingerprint_spoof.json +1458 -0
  104. causal_continuity_engine-0.1.6/vectors/lamport_no_registry.json +1454 -0
  105. causal_continuity_engine-0.1.6/vectors/lamport_truncated_key.json +1454 -0
  106. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/vectors/missing_required_field.json +23 -23
  107. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/vectors/non_binary64_integer.json +23 -23
  108. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/vectors/policy_decision_wrong_type.json +21 -21
  109. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/vectors/retry_cannot_launder_a_failure.json +27 -27
  110. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/vectors/self_asserted_cannot_satisfy.json +23 -23
  111. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/vectors/self_assertion_cannot_poison_authoritative_pass.json +27 -27
  112. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/vectors/status_contradicts_contents.json +23 -23
  113. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/vectors/summary_contradicts_contents.json +23 -23
  114. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/vectors/tamper_statement.json +23 -23
  115. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/vectors/tamper_statement_resealed.json +23 -23
  116. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/vectors/task_id_under_unrelated_field.json +23 -23
  117. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/vectors/unbound_task.json +17 -17
  118. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/vectors/unknown_action_intent_field.json +23 -23
  119. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/vectors/unknown_algorithm.json +23 -23
  120. causal_continuity_engine-0.1.6/vectors/unknown_evidence_context_field.json +173 -0
  121. causal_continuity_engine-0.1.6/vectors/unknown_execution_field.json +173 -0
  122. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/vectors/unknown_schema_version.json +23 -23
  123. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/vectors/unknown_top_level_field.json +23 -23
  124. causal_continuity_engine-0.1.6/vectors/unknown_verification_field.json +173 -0
  125. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/vectors/unverified_forged_body_no_key.json +23 -23
  126. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/vectors/unverified_hmac_no_key.json +23 -23
  127. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/vectors/valid_hmac.json +24 -24
  128. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/vectors/valid_hmac_jcs_edges.json +24 -24
  129. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/vectors/valid_hmac_unicode.json +24 -24
  130. causal_continuity_engine-0.1.6/vectors/valid_lamport.json +1458 -0
  131. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/vectors/wrong_project.json +23 -23
  132. causal_continuity_engine-0.1.2/.githooks/commit-msg +0 -19
  133. causal_continuity_engine-0.1.2/.github/scripts/check_release_tag.py +0 -561
  134. causal_continuity_engine-0.1.2/.github/scripts/prepare_release_tag.py +0 -270
  135. causal_continuity_engine-0.1.2/.github/scripts/run_gates.py +0 -132
  136. causal_continuity_engine-0.1.2/.github/workflows/no-ai-attribution.yml +0 -129
  137. causal_continuity_engine-0.1.2/.gitleaks.toml +0 -28
  138. causal_continuity_engine-0.1.2/causal_continuity_engine/extraction.py +0 -263
  139. causal_continuity_engine-0.1.2/causal_continuity_engine/redaction.py +0 -94
  140. causal_continuity_engine-0.1.2/tests/test_github_redaction.py +0 -193
  141. causal_continuity_engine-0.1.2/tests/test_invalidation_resume.py +0 -205
  142. causal_continuity_engine-0.1.2/tests/test_memory_extraction.py +0 -151
  143. causal_continuity_engine-0.1.2/tests/test_release_controls.py +0 -861
  144. causal_continuity_engine-0.1.2/vectors/lamport_fingerprint_spoof.json +0 -1458
  145. causal_continuity_engine-0.1.2/vectors/lamport_no_registry.json +0 -1454
  146. causal_continuity_engine-0.1.2/vectors/lamport_truncated_key.json +0 -1454
  147. causal_continuity_engine-0.1.2/vectors/valid_lamport.json +0 -1458
  148. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/.editorconfig +0 -0
  149. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/.gitattributes +0 -0
  150. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/.github/CODEOWNERS +0 -0
  151. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/.github/ISSUE_TEMPLATE/bug.yml +0 -0
  152. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  153. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/.github/ISSUE_TEMPLATE/feature.yml +0 -0
  154. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/.github/SECURITY.md +0 -0
  155. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/.github/SUPPORT.md +0 -0
  156. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/.github/dependabot.yml +0 -0
  157. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/.github/release.yml +0 -0
  158. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/.github/ruleset.README.md +0 -0
  159. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/.github/ruleset.json +0 -0
  160. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/.github/scripts/build_distributions.py +0 -0
  161. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/.github/scripts/check_clean.py +0 -0
  162. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/.github/scripts/check_release_metadata.py +0 -0
  163. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/.github/scripts/check_stdlib.py +0 -0
  164. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/.github/scripts/render_api_docs.py +0 -0
  165. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/.github/tag-ruleset.json +0 -0
  166. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/.github/workflows/commit-signature-audit.yml +0 -0
  167. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/.github/workflows/dependency-review.yml +0 -0
  168. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/.github/workflows/secret-scan.yml +0 -0
  169. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/.gitignore +0 -0
  170. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/LICENSE.txt +0 -0
  171. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/NOTICE +0 -0
  172. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/SPEC.md +0 -0
  173. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/benchmarks/__init__.py +0 -0
  174. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/benchmarks/continuitybench/__init__.py +0 -0
  175. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/causal_continuity_engine/api.py +0 -0
  176. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/causal_continuity_engine/capabilities.py +0 -0
  177. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/causal_continuity_engine/capsule.py +0 -0
  178. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/causal_continuity_engine/core.py +0 -0
  179. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/causal_continuity_engine/evidence.py +0 -0
  180. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/causal_continuity_engine/lamport.py +0 -0
  181. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/causal_continuity_engine/learning.py +0 -0
  182. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/causal_continuity_engine/memory.py +0 -0
  183. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/causal_continuity_engine/ontology.py +0 -0
  184. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/causal_continuity_engine/partial.py +0 -0
  185. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/causal_continuity_engine/proof.py +0 -0
  186. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/causal_continuity_engine/py.typed +0 -0
  187. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/causal_continuity_engine.egg-info/dependency_links.txt +0 -0
  188. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/causal_continuity_engine.egg-info/entry_points.txt +0 -0
  189. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/causal_continuity_engine.egg-info/top_level.txt +0 -0
  190. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/docs/API.md +0 -0
  191. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/docs/CAPABILITIES.md +0 -0
  192. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/docs/REQUIREMENTS.md +0 -0
  193. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/docs/REQUIREMENTS_COVERAGE.md +0 -0
  194. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/docs/RESEARCH-ROADMAP.md +0 -0
  195. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/docs/TESTING.md +0 -0
  196. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/docs/assets/demo.svg +0 -0
  197. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/docs/assets/social-preview.png +0 -0
  198. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/schemas/cce.anchor.v1.json +0 -0
  199. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/schemas/cce.capsule.v1.json +0 -0
  200. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/schemas/cce.continuity-receipt.v1.json +0 -0
  201. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/schemas/cce.event.v1.json +0 -0
  202. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/schemas/cce.proof-predicate.v1.json +0 -0
  203. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/schemas/cce.proof.v1.json +0 -0
  204. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/schemas/cce.recovery.v1.json +0 -0
  205. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/schemas/cce.resume.v1.json +0 -0
  206. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/setup.cfg +0 -0
  207. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/tests/__init__.py +0 -0
  208. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/tests/schema_validation.py +0 -0
  209. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/tests/test_conformance.py +0 -0
  210. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/tests/test_distribution_environment.py +0 -0
  211. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/tests/test_instrument_validation.py +0 -0
  212. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/tests/test_learning_partial_api.py +0 -0
  213. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/tests/test_regressions.py +0 -0
  214. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/tests/test_regressions_round13_jcs.py +0 -0
  215. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/tests/test_regressions_round15_capsule_invalidation_github.py +0 -0
  216. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/tests/test_regressions_round15_public_boundaries.py +0 -0
  217. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/tests/test_regressions_round15_storage_boundaries.py +0 -0
  218. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/tests/test_regressions_round16_cli_api_core_capabilities.py +0 -0
  219. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/tests/test_regressions_round2.py +0 -0
  220. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/tests/test_regressions_round3.py +0 -0
  221. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/tests/test_regressions_round4.py +0 -0
  222. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/tests/test_regressions_round7.py +0 -0
  223. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/tests/test_regressions_round8_boundaries.py +0 -0
  224. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/tests/test_regressions_round8_state.py +0 -0
  225. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/tests/test_regressions_round9_scope_freshness.py +0 -0
  226. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/tests/test_release_boundary_validation.py +0 -0
  227. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/tests/test_sqlite_lifecycle.py +0 -0
  228. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/tests/test_store_graph.py +0 -0
  229. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/verifiers/__init__.py +0 -0
  230. {causal_continuity_engine-0.1.2 → causal_continuity_engine-0.1.6}/verifiers/verify_proof.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. Attribution is blocking; gitleaks is blocking
3
- # when installed and emits an explicit warning when unavailable.
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 three enforcement files necessarily contain the expression they search
20
- # for, so only those exact files are excluded. No directory is exempt.
21
- PATTERN='co-authored-by:.*(anthropic|chatgpt|claude|codex|copilot|gemini|openai)|noreply@(anthropic|openai)\.com|generated (with|by)[[:space:]]+\[?(chatgpt|claude|codex|copilot|gemini|openai)'
22
- # Search the proposed index tree rather than raw diff text. Deleted lines must
23
- # not prevent the commit that removes a violation.
24
- git_grep_status=0
25
- git grep --cached -nEi "$PATTERN" -- . \
26
- ':(exclude).githooks/pre-commit' \
27
- ':(exclude).githooks/commit-msg' \
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
- # unavailable here (private repository, personal Pro plan). When gitleaks is
45
- # installed and this hook is not bypassed, it is the only local scan before a
46
- # pasted credential reaches the remote; the server workflow runs after push.
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,24 @@ 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.1, `build` 1.5.0, `jsonschema` 4.26.0,
57
- `setuptools` 83.0.0, and `pip` 26.1.2. None is imported by the engine; jsonschema validates
56
+ `pytest` 9.1.1, `ruff` 0.16.7, `build` 1.6.1, `jsonschema` 4.26.0,
57
+ `setuptools` 83.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 pins were revalidated on 2026-08-04. Setuptools 83.0.0 and pip 26.1.2
61
- are the first patched releases for
60
+ The pins were last revalidated on 2026-09-15. Setuptools 83.0.0 is the first
61
+ patched release for
62
62
  [GHSA-h35f-9h28-mq5c](https://github.com/advisories/GHSA-h35f-9h28-mq5c)
63
- and [GHSA-wf93-45jw-7689](https://github.com/advisories/GHSA-wf93-45jw-7689);
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
- Build remains at 1.5.0 because PyPI marks 1.5.1 yanked; jsonschema 4.26.0 and
69
- ruff 0.16.1 were the current stable releases on that date. This is a dated
70
- review record, not a claim that pins stay current without future 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
+ Setuptools stays at 83.0.0: 84.0.0 is a new major release that this review did
72
+ not evaluate. This is a dated review record, not a claim that pins stay current
73
+ without future review.
71
74
 
72
75
  When a direct pin changes, edit `pyproject.toml` and `requirements-dev.in`,
73
76
  regenerate the lock with the command recorded in its header, and review the
@@ -104,9 +107,10 @@ the same file is still caught.
104
107
  `.pre-commit-config.yaml` remains supported for contributors who prefer the
105
108
  framework, with one constraint: git honours exactly one hook path, and
106
109
  pre-commit refuses to install while `core.hooksPath` is set. Unset it first
107
- (`git config --unset core.hooksPath`). That path covers gitleaks, `ruff check` (the same
108
- lint gate as `just lint` and CI) and file hygiene, but not the attribution
109
- scan. It deliberately carries no `ruff-format` hook — see the `fmt-check` note
110
+ (`git config --unset core.hooksPath`). That path covers the complete staged
111
+ content-integrity scan, gitleaks, `ruff check` (the same lint gate as `just
112
+ lint` and CI), and file hygiene, but not the attribution scan. It deliberately
113
+ carries no `ruff-format` hook — see the `fmt-check` note
110
114
  in the `justfile`. CI enforces the attribution rule independently either way
111
115
  (`.github/workflows/no-ai-attribution.yml`), so nothing that reaches a pull
112
116
  request depends on which hook path you chose.
@@ -130,12 +134,13 @@ wheel. The `ci` job fans all those paths into one context.
130
134
  | Recipe | Direct equivalent | What it establishes |
131
135
  |---|---|---|
132
136
  | `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. |
137
+ | `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
138
  | `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
139
  | `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
140
  | `just test` | `python -m pytest tests/ -q` | The complete regression suite and planted instrument-validation cases pass. |
136
141
  | `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
142
  | `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 ten ContinuityBench scenarios still pass and all six metrics are still at their gates. |
143
+ | `just bench` | `python -m benchmarks.continuitybench.run` | All eleven ContinuityBench scenarios still pass and all six metrics are still at their gates. |
139
144
  | `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
145
 
141
146
  Attribution is not one of these, and it is not a lint rule. It is enforced by
@@ -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 ten ContinuityBench scenarios, every metric at target.
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`). Asked for, not enforced — nothing blocks a PR without it today.
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
 
@@ -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
- GATE_RUNNER_TIMEOUT_SECONDS = 1500
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(python: Path, environment: dict[str, str]) -> None:
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
- _run_checked(
216
- [
217
- str(python),
218
- "-m",
219
- "pip",
220
- "install",
221
- "--no-deps",
222
- "--no-build-isolation",
223
- "-e",
224
- str(ROOT),
225
- ],
226
- environment=environment,
227
- label="local package installation",
228
- timeout_seconds=LOCAL_INSTALL_TIMEOUT_SECONDS,
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("--artifacts-only", action="store_true")
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(python, environment)
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.artifacts_only:
261
- command.append("--artifacts-only")
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,