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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (184) hide show
  1. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/.github/CONTRIBUTING.md +19 -19
  2. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/.github/SECURITY.md +9 -23
  3. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/.github/scripts/verify_distributions.py +1 -1
  4. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/.github/workflows/release.yml +7 -2
  5. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/AGENTS.md +4 -5
  6. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/CHANGELOG.md +50 -0
  7. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/CITATION.cff +2 -2
  8. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/MANIFEST.in +1 -0
  9. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/PKG-INFO +24 -16
  10. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/README.md +22 -14
  11. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/causal_continuity_engine/__init__.py +1 -1
  12. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/causal_continuity_engine/cli.py +4 -2
  13. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/causal_continuity_engine.egg-info/PKG-INFO +24 -16
  14. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/causal_continuity_engine.egg-info/SOURCES.txt +1 -0
  15. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/causal_continuity_engine.egg-info/requires.txt +1 -1
  16. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/docs/RELEASE.md +14 -14
  17. causal_continuity_engine-0.1.2/docs/assets/demo.svg +23 -0
  18. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/pyproject.toml +1 -1
  19. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/requirements-dev.in +1 -1
  20. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/tests/test_cli.py +14 -0
  21. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/tests/test_regressions_round8_portability.py +14 -8
  22. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/tests/test_release_controls.py +23 -2
  23. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/.editorconfig +0 -0
  24. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/.gitattributes +0 -0
  25. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/.githooks/commit-msg +0 -0
  26. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/.githooks/pre-commit +0 -0
  27. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/.github/CODEOWNERS +0 -0
  28. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/.github/ISSUE_TEMPLATE/bug.yml +0 -0
  29. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  30. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/.github/ISSUE_TEMPLATE/feature.yml +0 -0
  31. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/.github/SUPPORT.md +0 -0
  32. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/.github/dependabot.yml +0 -0
  33. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/.github/pull_request_template.md +0 -0
  34. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/.github/release.yml +0 -0
  35. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/.github/ruleset.README.md +0 -0
  36. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/.github/ruleset.json +0 -0
  37. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/.github/scripts/bootstrap_tools.py +0 -0
  38. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/.github/scripts/build_distributions.py +0 -0
  39. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/.github/scripts/check_clean.py +0 -0
  40. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/.github/scripts/check_release_metadata.py +0 -0
  41. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/.github/scripts/check_release_tag.py +0 -0
  42. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/.github/scripts/check_stdlib.py +0 -0
  43. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/.github/scripts/prepare_release_tag.py +0 -0
  44. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/.github/scripts/render_api_docs.py +0 -0
  45. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/.github/scripts/run_gates.py +0 -0
  46. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/.github/scripts/verify_public_schemas.py +0 -0
  47. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/.github/tag-ruleset.json +0 -0
  48. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/.github/workflows/ci.yml +0 -0
  49. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/.github/workflows/commit-signature-audit.yml +0 -0
  50. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/.github/workflows/dependency-review.yml +0 -0
  51. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/.github/workflows/no-ai-attribution.yml +0 -0
  52. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/.github/workflows/secret-scan.yml +0 -0
  53. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/.gitignore +0 -0
  54. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/.gitleaks.toml +0 -0
  55. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/.pre-commit-config.yaml +0 -0
  56. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/LICENSE.txt +0 -0
  57. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/NOTICE +0 -0
  58. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/SPEC.md +0 -0
  59. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/benchmarks/__init__.py +0 -0
  60. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/benchmarks/continuitybench/__init__.py +0 -0
  61. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/benchmarks/continuitybench/run.py +0 -0
  62. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/benchmarks/continuitybench/scenarios.py +0 -0
  63. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/causal_continuity_engine/api.py +0 -0
  64. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/causal_continuity_engine/capabilities.py +0 -0
  65. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/causal_continuity_engine/capsule.py +0 -0
  66. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/causal_continuity_engine/core.py +0 -0
  67. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/causal_continuity_engine/engine.py +0 -0
  68. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/causal_continuity_engine/evidence.py +0 -0
  69. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/causal_continuity_engine/extraction.py +0 -0
  70. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/causal_continuity_engine/github.py +0 -0
  71. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/causal_continuity_engine/graph.py +0 -0
  72. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/causal_continuity_engine/invalidation.py +0 -0
  73. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/causal_continuity_engine/lamport.py +0 -0
  74. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/causal_continuity_engine/learning.py +0 -0
  75. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/causal_continuity_engine/memory.py +0 -0
  76. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/causal_continuity_engine/ontology.py +0 -0
  77. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/causal_continuity_engine/partial.py +0 -0
  78. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/causal_continuity_engine/policy.py +0 -0
  79. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/causal_continuity_engine/proof.py +0 -0
  80. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/causal_continuity_engine/py.typed +0 -0
  81. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/causal_continuity_engine/redaction.py +0 -0
  82. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/causal_continuity_engine/resume.py +0 -0
  83. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/causal_continuity_engine/store.py +0 -0
  84. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/causal_continuity_engine/verifiers.py +0 -0
  85. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/causal_continuity_engine.egg-info/dependency_links.txt +0 -0
  86. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/causal_continuity_engine.egg-info/entry_points.txt +0 -0
  87. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/causal_continuity_engine.egg-info/top_level.txt +0 -0
  88. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/docs/API.md +0 -0
  89. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/docs/CAPABILITIES.md +0 -0
  90. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/docs/PUBLIC-FLIP.md +0 -0
  91. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/docs/REQUIREMENTS.md +0 -0
  92. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/docs/REQUIREMENTS_COVERAGE.md +0 -0
  93. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/docs/RESEARCH-ROADMAP.md +0 -0
  94. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/docs/TESTING.md +0 -0
  95. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/docs/adr/ADR-INDEX.md +0 -0
  96. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/docs/assets/social-preview.png +0 -0
  97. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/justfile +0 -0
  98. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/requirements-dev.lock +0 -0
  99. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/schemas/cce.anchor.v1.json +0 -0
  100. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/schemas/cce.capsule.v1.json +0 -0
  101. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/schemas/cce.continuity-receipt.v1.json +0 -0
  102. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/schemas/cce.event.v1.json +0 -0
  103. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/schemas/cce.proof-predicate.v1.json +0 -0
  104. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/schemas/cce.proof.v1.json +0 -0
  105. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/schemas/cce.recovery.v1.json +0 -0
  106. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/schemas/cce.resume.v1.json +0 -0
  107. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/setup.cfg +0 -0
  108. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/tests/__init__.py +0 -0
  109. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/tests/schema_validation.py +0 -0
  110. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/tests/test_api_contract.py +0 -0
  111. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/tests/test_conformance.py +0 -0
  112. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/tests/test_distribution_environment.py +0 -0
  113. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/tests/test_engine_e2e.py +0 -0
  114. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/tests/test_github_redaction.py +0 -0
  115. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/tests/test_instrument_validation.py +0 -0
  116. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/tests/test_invalidation_resume.py +0 -0
  117. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/tests/test_learning_partial_api.py +0 -0
  118. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/tests/test_memory_extraction.py +0 -0
  119. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/tests/test_regressions.py +0 -0
  120. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/tests/test_regressions_round10_release.py +0 -0
  121. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/tests/test_regressions_round11_deep_integrity.py +0 -0
  122. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/tests/test_regressions_round12_release_blockers.py +0 -0
  123. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/tests/test_regressions_round13_jcs.py +0 -0
  124. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/tests/test_regressions_round14_state_integrity.py +0 -0
  125. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/tests/test_regressions_round15_capsule_invalidation_github.py +0 -0
  126. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/tests/test_regressions_round15_public_boundaries.py +0 -0
  127. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/tests/test_regressions_round15_storage_boundaries.py +0 -0
  128. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/tests/test_regressions_round16_cli_api_core_capabilities.py +0 -0
  129. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/tests/test_regressions_round2.py +0 -0
  130. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/tests/test_regressions_round3.py +0 -0
  131. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/tests/test_regressions_round4.py +0 -0
  132. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/tests/test_regressions_round5.py +0 -0
  133. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/tests/test_regressions_round6.py +0 -0
  134. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/tests/test_regressions_round7.py +0 -0
  135. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/tests/test_regressions_round8_boundaries.py +0 -0
  136. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/tests/test_regressions_round8_engine.py +0 -0
  137. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/tests/test_regressions_round8_state.py +0 -0
  138. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/tests/test_regressions_round9_integrity.py +0 -0
  139. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/tests/test_regressions_round9_scope_freshness.py +0 -0
  140. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/tests/test_release_boundary_validation.py +0 -0
  141. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/tests/test_sqlite_lifecycle.py +0 -0
  142. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/tests/test_store_graph.py +0 -0
  143. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/tests/test_trust.py +0 -0
  144. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/vectors/action_intent_wrong_type.json +0 -0
  145. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/vectors/actor_wrong_type.json +0 -0
  146. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/vectors/created_at_invalid_calendar_date.json +0 -0
  147. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/vectors/created_at_noncanonical_offset.json +0 -0
  148. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/vectors/empty_required_authoritative_failure.json +0 -0
  149. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/vectors/empty_required_authoritative_pass.json +0 -0
  150. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/vectors/empty_required_no_results.json +0 -0
  151. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/vectors/empty_required_self_asserted_pass.json +0 -0
  152. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/vectors/generate.py +0 -0
  153. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/vectors/incomplete_failed_check.json +0 -0
  154. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/vectors/index.json +0 -0
  155. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/vectors/input_item_wrong_type.json +0 -0
  156. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/vectors/invalid_result_value.json +0 -0
  157. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/vectors/lamport_fingerprint_spoof.json +0 -0
  158. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/vectors/lamport_no_registry.json +0 -0
  159. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/vectors/lamport_truncated_key.json +0 -0
  160. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/vectors/missing_required_field.json +0 -0
  161. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/vectors/non_binary64_integer.json +0 -0
  162. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/vectors/policy_decision_wrong_type.json +0 -0
  163. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/vectors/retry_cannot_launder_a_failure.json +0 -0
  164. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/vectors/self_asserted_cannot_satisfy.json +0 -0
  165. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/vectors/self_assertion_cannot_poison_authoritative_pass.json +0 -0
  166. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/vectors/status_contradicts_contents.json +0 -0
  167. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/vectors/summary_contradicts_contents.json +0 -0
  168. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/vectors/tamper_statement.json +0 -0
  169. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/vectors/tamper_statement_resealed.json +0 -0
  170. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/vectors/task_id_under_unrelated_field.json +0 -0
  171. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/vectors/unbound_task.json +0 -0
  172. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/vectors/unknown_action_intent_field.json +0 -0
  173. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/vectors/unknown_algorithm.json +0 -0
  174. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/vectors/unknown_schema_version.json +0 -0
  175. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/vectors/unknown_top_level_field.json +0 -0
  176. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/vectors/unverified_forged_body_no_key.json +0 -0
  177. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/vectors/unverified_hmac_no_key.json +0 -0
  178. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/vectors/valid_hmac.json +0 -0
  179. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/vectors/valid_hmac_jcs_edges.json +0 -0
  180. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/vectors/valid_hmac_unicode.json +0 -0
  181. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/vectors/valid_lamport.json +0 -0
  182. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/vectors/wrong_project.json +0 -0
  183. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/verifiers/__init__.py +0 -0
  184. {causal_continuity_engine-0.1.0 → causal_continuity_engine-0.1.2}/verifiers/verify_proof.py +0 -0
@@ -89,13 +89,14 @@ just test # should be green before you change anythi
89
89
  ```
90
90
 
91
91
  Install gitleaks. It is load-bearing here, not decoration: GitHub's native
92
- secret scanning and repository push protection are unavailable on this private
93
- personal-account repository. The local hook catches a credential before it
94
- leaves the machine; the `secrets` workflow scans pull requests, pushes to
95
- `main`, and the full history weekly. The hook warns rather than refuses when
96
- gitleaks is missing, so that server-side scan remains visible after a local
97
- `--no-verify`. The committed ruleset makes it merge-blocking, but the live
98
- ruleset still requires only `ci`; see `.github/ruleset.README.md`. If a
92
+ secret scanning and push protection are enabled on this repository, but both
93
+ act only once content reaches GitHub. The local hook catches a credential
94
+ before it leaves the machine; the `secrets` workflow scans pull requests,
95
+ pushes to `main`, and the full history weekly. The hook warns rather than
96
+ refuses when gitleaks is missing, so that server-side scan remains visible
97
+ after a local `--no-verify`. The live ruleset requires `ci`, `attribution`,
98
+ `secrets`, and `DCO`, so a failing scan blocks the merge; see
99
+ `.github/ruleset.README.md`. If a
99
100
  synthetic test value trips the scan,
100
101
  allowlist it in `.gitleaks.toml` by value, never by path, so a real secret in
101
102
  the same file is still caught.
@@ -139,10 +140,9 @@ wheel. The `ci` job fans all those paths into one context.
139
140
 
140
141
  Attribution is not one of these, and it is not a lint rule. It is enforced by
141
142
  `.githooks/pre-commit` locally and by the `attribution` job in
142
- `.github/workflows/no-ai-attribution.yml`. The committed desired ruleset
143
- requires both `attribution` and `secrets`; the live ruleset does not yet,
144
- and that operational drift is a blocker documented in
145
- `.github/ruleset.README.md`.
143
+ `.github/workflows/no-ai-attribution.yml`. The live ruleset requires both
144
+ `attribution` and `secrets` to pass before a merge; the apply and read-back
145
+ procedure is in `.github/ruleset.README.md`.
146
146
 
147
147
  `docs/CAPABILITIES.md` is generated, never hand-edited. If your change moves a
148
148
  symbol a claim points at, run
@@ -223,20 +223,20 @@ sdist, and checksum manifest to a separate draft-to-final publish job. See
223
223
 
224
224
  **Sign off your commits.** Contributions are accepted under the
225
225
  [Developer Certificate of Origin 1.1](https://developercertificate.org/), and
226
- external contributions are asked for a
226
+ every commit in a pull request must carry a
227
227
  `Signed-off-by` trailer:
228
228
 
229
229
  ```bash
230
230
  git commit -s -m "fix(graph): bound traversal at the configured budget"
231
231
  ```
232
232
 
233
- This is not enforced today. There is no DCO app, workflow, or `commit-msg`
234
- check for the trailer, so a pull request is not yet blocked for missing it.
235
- Existing history predates enforcement and is not being rewritten merely to
236
- add trailers. The DCO app will be enabled, and its check made required, when
237
- the repository goes public. `git rebase --signoff` will add the trailer if you
238
- forget it on an unpublished branch. By signing off you certify the DCO's terms
239
- and license your contribution under the repository's Apache-2.0 license.
233
+ This is enforced. The DCO app checks every commit in a pull request and its
234
+ `DCO` check is a required status, so a pull request missing the trailer is
235
+ blocked from merging. Existing history predates enforcement and is not being
236
+ rewritten merely to add trailers. `git rebase --signoff` will add the trailer
237
+ if you forget it on an unpublished branch. By signing off you certify the
238
+ DCO's terms and license your contribution under the repository's Apache-2.0
239
+ license.
240
240
 
241
241
  Keep the branch focused. One defect, one pull request. Do not reformat
242
242
  adjacent code, rename things you did not introduce, or clean up unrelated dead
@@ -15,15 +15,14 @@ quarantine barrier, the redaction path, and the event and audit chains.
15
15
 
16
16
  | Version | Supported |
17
17
  |---|---|
18
- | Before the first release — latest commit on `main` | Yes |
18
+ | Latest commit on `main` | Yes |
19
19
  | 0.1.x — latest published release | Yes |
20
20
  | Older releases and arbitrary commits | No |
21
21
  | Anything else | No such version exists |
22
22
 
23
23
  This is pre-1.0 software with no release branches. A fix lands on `main`; if it
24
24
  affects the latest published release, the supported delivery is a new 0.1.x
25
- patch release rather than mutating or backporting to an older artifact. Before
26
- the first release, the reviewed tip of `main` is the only supported version.
25
+ patch release rather than mutating or backporting to an older artifact.
27
26
 
28
27
  Hosted CI requires fixes to pass on Python 3.11, 3.12, 3.13 and 3.14 on Linux,
29
28
  and on Python 3.14 natively on Windows and macOS 15 ARM64.
@@ -34,24 +33,11 @@ and on Python 3.14 natively on Windows and macOS 15 ARM64.
34
33
  either — if you are unsure whether something is a vulnerability, treat it as
35
34
  one until it has been triaged.
36
35
 
37
- **While this repository is private, there is no reporting channel at all.**
38
- GitHub's private vulnerability reporting is unavailable to outside
39
- reporters; repository security advisories are unavailable on private
40
- repositories under this account, so there is no draft advisory to open even
41
- with repository access; GitHub has no user-to-user messaging; and the
42
- maintainer's GitHub no-reply address does not accept inbound mail. This
43
- project is therefore **not soliciting external security reports** while it
44
- is private. If you have found something, hold the report until the
45
- repository is public rather than routing it somewhere public in the
46
- meantime.
47
-
48
- Standing up a monitored contact address is a prerequisite for making this
49
- repository public. The flip does not happen before there is somewhere for a
50
- report to land.
51
-
52
- **Once this repository is public**, use GitHub private vulnerability
53
- reporting: Security tab → **Report a vulnerability**. That is the channel,
54
- and it is the point at which reports become welcome.
36
+ **Use GitHub private vulnerability reporting: Security tab → Report a
37
+ vulnerability.** That is the channel, and reports are welcome. It is the only
38
+ one: GitHub has no user-to-user messaging, and the maintainer's GitHub
39
+ no-reply address does not accept inbound mail, so a report sent anywhere else
40
+ will not arrive.
55
41
 
56
42
  This project has one maintainer and no on-call rotation. There is no
57
43
  guaranteed response time and no bug bounty. What is offered instead: a
@@ -173,8 +159,8 @@ this project wants reported. Concretely:
173
159
 
174
160
  ## Coordinated disclosure
175
161
 
176
- Once the public private-vulnerability-reporting channel above is live, report
177
- there and give a fix a reasonable window before publishing. If a
162
+ Report through the private-vulnerability-reporting channel above and give a
163
+ fix a reasonable window before publishing. If a
178
164
  report is valid, the advisory will credit you by whatever name and link you
179
165
  ask for, or anonymously if you prefer. If a report is not valid, you will get
180
166
  the reasoning rather than silence.
@@ -77,7 +77,7 @@ GITHOOK_FILES = {
77
77
  SDIST_SOURCE_TREES = {
78
78
  "benchmarks": {".py"},
79
79
  IMPORT_PACKAGE: {".py", "py.typed"},
80
- "docs": {".md", ".png"},
80
+ "docs": {".md", ".png", ".svg"},
81
81
  "schemas": {".json"},
82
82
  "tests": {".py"},
83
83
  "vectors": {".json", ".py"},
@@ -129,10 +129,14 @@ jobs:
129
129
  sdist="$(find dist -maxdepth 1 -type f -name 'causal_continuity_engine-*.tar.gz' -print -quit)"
130
130
  expected_manifest="$(mktemp)"
131
131
  trap 'rm -f "$expected_manifest"' EXIT
132
+ # SHA256SUMS is defined as filename-ordered by both the builder and
133
+ # verify_distributions.py, so sort on the filename field. Sorting the
134
+ # whole line would order by digest and match only when the digests
135
+ # happen to sort the same way the filenames do.
132
136
  for artifact in "$sdist" "$wheel"; do
133
137
  digest="$(sha256sum "$artifact" | cut -d ' ' -f 1)"
134
138
  printf '%s %s\n' "$digest" "$(basename "$artifact")"
135
- done | LC_ALL=C sort > "$expected_manifest"
139
+ done | LC_ALL=C sort -k2 > "$expected_manifest"
136
140
  cmp --silent "$expected_manifest" dist/SHA256SUMS
137
141
  echo "validated artifact $ARTIFACT_ID at sha256:$EXPECTED_ARTIFACT_DIGEST"
138
142
 
@@ -246,10 +250,11 @@ jobs:
246
250
  test -f dist/SHA256SUMS
247
251
  expected_manifest="$(mktemp)"
248
252
  trap 'rm -f "$expected_manifest"' EXIT
253
+ # Filename-ordered, matching the builder and verify_distributions.py.
249
254
  for artifact in "$sdist" "$wheel"; do
250
255
  digest="$(sha256sum "$artifact" | cut -d ' ' -f 1)"
251
256
  printf '%s %s\n' "$digest" "$(basename "$artifact")"
252
- done | LC_ALL=C sort > "$expected_manifest"
257
+ done | LC_ALL=C sort -k2 > "$expected_manifest"
253
258
  cmp --silent "$expected_manifest" dist/SHA256SUMS
254
259
  mkdir upload
255
260
  mv "$wheel" "$sdist" upload/
@@ -42,8 +42,7 @@ gates too, not optional extras. The `test` job in
42
42
  to `main`, across Python 3.11, 3.12, 3.13 and 3.14. The runner stops at the first
43
43
  failure. Native Windows and macOS 15 ARM64 invoke the same sequence on 3.14,
44
44
  and the artifact job builds twice and exercises an installed wheel. The `ci`
45
- job fans all four paths in. It is the only status context required by the live branch
46
- ruleset today.
45
+ job fans all four paths in.
47
46
  The committed desired state in `.github/ruleset.json` was applied and read
48
47
  back on 2026-08-08: branch ruleset `20590966` is active with no bypass
49
48
  actors, required signatures, and merge-blocking `ci`, `attribution`,
@@ -53,9 +52,9 @@ settings are mutable — re-read the live objects rather than trusting this
53
52
  sentence.
54
53
  `commit-signature-audit.yml` reports GitHub's verdict for the exact pushed
55
54
  `main` SHA, but it runs after the commit has landed. It is a detective signal,
56
- not a substitute for the desired preventive `required_signatures` branch rule.
57
- Treat `.github/ruleset.README.md` as the drift register and do not describe
58
- the desired controls as live enforcement.
55
+ not a substitute for the preventive `required_signatures` branch rule.
56
+ Treat `.github/ruleset.README.md` as the drift register: re-read the live
57
+ objects before describing any control as enforced.
59
58
 
60
59
  The `justfile` exposes focused local commands. Hosted Linux, Windows, macOS,
61
60
  and release jobs use `run_gates.py` so no separately downloaded command runner can
@@ -9,6 +9,56 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
9
9
 
10
10
  No unreleased changes.
11
11
 
12
+ ## 0.1.2 — 2026-08-09
13
+
14
+ A documentation and hygiene release. No engine, schema, proof, or HTTP
15
+ behaviour changed; the only executable changes are the credential-handling and
16
+ release-workflow fixes below.
17
+
18
+ `v0.1.1` was tagged from this same work and never published: the release
19
+ workflow's checksum recheck rejected its own verified artifacts, for the reason
20
+ recorded under Fixed. The tag is left in place so that failure stays
21
+ attributable, and the version was incremented rather than reused.
22
+
23
+ ### Fixed
24
+
25
+ - **`cce-engine serve` no longer echoes a byte of the API token file.** A
26
+ token file containing non-ASCII bytes surfaced Python's decode error, which
27
+ quotes the offending byte value. The raw bytes are now checked before
28
+ decoding and the command fails with `api token file must be ASCII`, naming
29
+ no content. Found while closing out a CodeQL triage: the alert itself was a
30
+ false positive, this residue was not.
31
+ - **The release workflow's checksum recheck compared the manifest in the wrong
32
+ order.** `SHA256SUMS` is filename-ordered, as both `build_distributions.py`
33
+ and `verify_distributions.py` define it, but the two shell rechecks in
34
+ `release.yml` sorted whole lines — which begin with the digest. The
35
+ comparison therefore succeeded only when the artifacts' digests happened to
36
+ sort the same way their filenames do, making every release a coin flip that
37
+ 0.1.0 won and the 0.1.1 attempt lost. Both rechecks now sort on the filename
38
+ field, and a regression test pins the contract.
39
+ - **Documentation that described the repository as private and unpublished.**
40
+ Those statements were accurate when written and became false when the
41
+ repository went public and 0.1.0 shipped. The security policy was the
42
+ serious one — it stated there was no reporting channel at all and told
43
+ anyone who found a defect to withhold the report until the repository was
44
+ public, while private vulnerability reporting was already enabled.
45
+ `CONTRIBUTING.md` also said sign-off was unenforced and that native secret
46
+ scanning was unavailable, and `docs/RELEASE.md` said the release workflow
47
+ did not upload to PyPI and that installation instructions must not name
48
+ `pip install`. Each now states the live state, re-read from the API rather
49
+ than assumed.
50
+ - **The README demo image is referenced by an absolute URL.** PyPI does not
51
+ resolve repository-relative image paths, so the relative form would have
52
+ rendered as a broken image on the project page while rendering correctly on
53
+ GitHub.
54
+
55
+ ### Added
56
+
57
+ - A terminal quickstart demo on the README's first screen, built from real
58
+ captured command output.
59
+ - `.svg` assets under `docs/` are admitted to the reviewed source contract and
60
+ ship in the sdist, alongside the existing `.png` allowance.
61
+
12
62
  ## 0.1.0 — 2026-08-08
13
63
 
14
64
  Everything below is new; this is the first release.
@@ -8,8 +8,8 @@ authors:
8
8
  - given-names: Thomas
9
9
  family-names: Albrecht
10
10
  alias: The Quantum Falcon
11
- version: 0.1.0
12
- date-released: 2026-08-08
11
+ version: 0.1.2
12
+ date-released: 2026-08-09
13
13
  license: Apache-2.0
14
14
  repository-code: https://github.com/thequantumfalcon/causal-continuity-engine
15
15
  url: https://github.com/thequantumfalcon/causal-continuity-engine
@@ -6,6 +6,7 @@ recursive-include causal_continuity_engine *.py py.typed
6
6
  recursive-include benchmarks *.py
7
7
  recursive-include docs *.md
8
8
  include docs/assets/social-preview.png
9
+ include docs/assets/demo.svg
9
10
  recursive-include schemas *.json
10
11
  recursive-include tests *.py
11
12
  recursive-include vectors *.py *.json
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: causal-continuity-engine
3
- Version: 0.1.0
3
+ Version: 0.1.2
4
4
  Summary: Causal Continuity Engine - continuity, causal invalidation, and proof for long-running coding agents
5
5
  Author: Thomas Albrecht
6
6
  License-Expression: Apache-2.0
@@ -30,7 +30,7 @@ Requires-Dist: pytest==9.1.1; extra == "dev"
30
30
  Requires-Dist: ruff==0.16.1; extra == "dev"
31
31
  Requires-Dist: build==1.5.0; extra == "dev"
32
32
  Requires-Dist: jsonschema==4.26.0; extra == "dev"
33
- Requires-Dist: pip==26.1.2; extra == "dev"
33
+ Requires-Dist: pip==26.2; extra == "dev"
34
34
  Dynamic: license-file
35
35
 
36
36
  # Causal Continuity Engine
@@ -41,6 +41,8 @@ Continuity, causal invalidation, and proof for long-running coding agents.
41
41
  ![license](https://img.shields.io/badge/license-Apache_2.0-blue.svg)
42
42
  ![python](https://img.shields.io/badge/python-3.11%2B-blue.svg)
43
43
 
44
+ <p align="center"><img src="https://raw.githubusercontent.com/thequantumfalcon/causal-continuity-engine/main/docs/assets/demo.svg" alt="cce-engine quickstart: install, init, audit verify, assumptions" width="760"></p>
45
+
44
46
  ## The problem
45
47
 
46
48
  An agent working a codebase over weeks does not fail by forgetting text. It
@@ -85,23 +87,29 @@ parsing rather than importing, so a lazy or guarded import is caught too. CI
85
87
  invokes the same `.github/scripts/check_stdlib.py` scanner through
86
88
  `run_gates.py` on every pull request and every push to `main`.
87
89
 
88
- The intended PyPI distribution name is `causal-continuity-engine`, the import
89
- package is `causal_continuity_engine`, and the executable is `cce-engine`. The
90
- distribution is not yet published; the coordinated name-claim step is tracked
91
- in [docs/PUBLIC-FLIP.md](docs/PUBLIC-FLIP.md). Those longer names are
92
- intentional: the shorter `cce` distribution, import namespace, and command are
93
- already used by an unrelated published project.
90
+ The PyPI distribution name is `causal-continuity-engine`, the import package is
91
+ `causal_continuity_engine`, and the executable is `cce-engine`. Those longer
92
+ names are intentional: the shorter `cce` distribution, import namespace, and
93
+ command are already used by an unrelated published project.
94
94
 
95
95
  ## Quickstart
96
96
 
97
97
  Under five minutes, no dependencies beyond the package itself.
98
98
 
99
99
  ```bash
100
- git clone https://github.com/thequantumfalcon/causal-continuity-engine
101
- cd causal-continuity-engine
102
100
  python -m venv .venv
103
101
  # Activate with: source .venv/bin/activate (macOS/Linux)
104
102
  # or: .venv\Scripts\Activate.ps1 (Windows PowerShell)
103
+ python -m pip install causal-continuity-engine
104
+ ```
105
+
106
+ To work on the engine instead of using it, install the checkout editable — see
107
+ [.github/CONTRIBUTING.md](.github/CONTRIBUTING.md) for the full toolchain:
108
+
109
+ ```bash
110
+ git clone https://github.com/thequantumfalcon/causal-continuity-engine
111
+ cd causal-continuity-engine
112
+ python -m venv .venv
105
113
  python -m pip install -e .
106
114
  ```
107
115
 
@@ -674,9 +682,9 @@ change, and there is no deprecation policy yet.
674
682
  - Hosted CI requires the full suite on Python 3.11, 3.12, 3.13 and 3.14 on
675
683
  Linux and natively on Windows 3.14 and macOS 15 ARM64/Python 3.14; 10/10
676
684
  ContinuityBench scenarios pass with all 6 metrics at target
677
- - Repository-policy JSON records the stricter desired state, not current live
678
- enforcement. The exact remote drift and apply/read-back procedure are in
679
- [.github/ruleset.README.md](.github/ruleset.README.md).
685
+ - Repository-policy JSON was applied and read back against the live rulesets.
686
+ Remote settings are mutable, so the apply/read-back procedure that re-checks
687
+ them is in [.github/ruleset.README.md](.github/ruleset.README.md).
680
688
  - The accepted ADRs in [docs/adr/ADR-INDEX.md](docs/adr/ADR-INDEX.md),
681
689
  including the per-round review notes
682
690
  - Capability claims that must mechanically resolve, generated into
@@ -710,9 +718,9 @@ condition.
710
718
  of every requirement identifier used by code, tests, ADRs, and coverage.
711
719
  - [docs/REQUIREMENTS_COVERAGE.md](docs/REQUIREMENTS_COVERAGE.md) — the
712
720
  per-requirement implementation status and supporting evidence.
713
- - [docs/PUBLIC-FLIP.md](docs/PUBLIC-FLIP.md) — what is deliberately switched off
714
- while this repository is private, and the exact command that turns each one
715
- on. Read it before changing the repository's visibility.
721
+ - [docs/PUBLIC-FLIP.md](docs/PUBLIC-FLIP.md) — the register of every control
722
+ that could not be enabled while this repository was private, with the exact
723
+ command that turned each one on at the flip.
716
724
  - [docs/RELEASE.md](docs/RELEASE.md) — the reproducible, signed, immutable-ready
717
725
  release procedure and its continuity-bound attestation roadmap.
718
726
  - [docs/RESEARCH-ROADMAP.md](docs/RESEARCH-ROADMAP.md) — standards-backed
@@ -6,6 +6,8 @@ Continuity, causal invalidation, and proof for long-running coding agents.
6
6
  ![license](https://img.shields.io/badge/license-Apache_2.0-blue.svg)
7
7
  ![python](https://img.shields.io/badge/python-3.11%2B-blue.svg)
8
8
 
9
+ <p align="center"><img src="https://raw.githubusercontent.com/thequantumfalcon/causal-continuity-engine/main/docs/assets/demo.svg" alt="cce-engine quickstart: install, init, audit verify, assumptions" width="760"></p>
10
+
9
11
  ## The problem
10
12
 
11
13
  An agent working a codebase over weeks does not fail by forgetting text. It
@@ -50,23 +52,29 @@ parsing rather than importing, so a lazy or guarded import is caught too. CI
50
52
  invokes the same `.github/scripts/check_stdlib.py` scanner through
51
53
  `run_gates.py` on every pull request and every push to `main`.
52
54
 
53
- The intended PyPI distribution name is `causal-continuity-engine`, the import
54
- package is `causal_continuity_engine`, and the executable is `cce-engine`. The
55
- distribution is not yet published; the coordinated name-claim step is tracked
56
- in [docs/PUBLIC-FLIP.md](docs/PUBLIC-FLIP.md). Those longer names are
57
- intentional: the shorter `cce` distribution, import namespace, and command are
58
- already used by an unrelated published project.
55
+ The PyPI distribution name is `causal-continuity-engine`, the import package is
56
+ `causal_continuity_engine`, and the executable is `cce-engine`. Those longer
57
+ names are intentional: the shorter `cce` distribution, import namespace, and
58
+ command are already used by an unrelated published project.
59
59
 
60
60
  ## Quickstart
61
61
 
62
62
  Under five minutes, no dependencies beyond the package itself.
63
63
 
64
64
  ```bash
65
- git clone https://github.com/thequantumfalcon/causal-continuity-engine
66
- cd causal-continuity-engine
67
65
  python -m venv .venv
68
66
  # Activate with: source .venv/bin/activate (macOS/Linux)
69
67
  # or: .venv\Scripts\Activate.ps1 (Windows PowerShell)
68
+ python -m pip install causal-continuity-engine
69
+ ```
70
+
71
+ To work on the engine instead of using it, install the checkout editable — see
72
+ [.github/CONTRIBUTING.md](.github/CONTRIBUTING.md) for the full toolchain:
73
+
74
+ ```bash
75
+ git clone https://github.com/thequantumfalcon/causal-continuity-engine
76
+ cd causal-continuity-engine
77
+ python -m venv .venv
70
78
  python -m pip install -e .
71
79
  ```
72
80
 
@@ -639,9 +647,9 @@ change, and there is no deprecation policy yet.
639
647
  - Hosted CI requires the full suite on Python 3.11, 3.12, 3.13 and 3.14 on
640
648
  Linux and natively on Windows 3.14 and macOS 15 ARM64/Python 3.14; 10/10
641
649
  ContinuityBench scenarios pass with all 6 metrics at target
642
- - Repository-policy JSON records the stricter desired state, not current live
643
- enforcement. The exact remote drift and apply/read-back procedure are in
644
- [.github/ruleset.README.md](.github/ruleset.README.md).
650
+ - Repository-policy JSON was applied and read back against the live rulesets.
651
+ Remote settings are mutable, so the apply/read-back procedure that re-checks
652
+ them is in [.github/ruleset.README.md](.github/ruleset.README.md).
645
653
  - The accepted ADRs in [docs/adr/ADR-INDEX.md](docs/adr/ADR-INDEX.md),
646
654
  including the per-round review notes
647
655
  - Capability claims that must mechanically resolve, generated into
@@ -675,9 +683,9 @@ condition.
675
683
  of every requirement identifier used by code, tests, ADRs, and coverage.
676
684
  - [docs/REQUIREMENTS_COVERAGE.md](docs/REQUIREMENTS_COVERAGE.md) — the
677
685
  per-requirement implementation status and supporting evidence.
678
- - [docs/PUBLIC-FLIP.md](docs/PUBLIC-FLIP.md) — what is deliberately switched off
679
- while this repository is private, and the exact command that turns each one
680
- on. Read it before changing the repository's visibility.
686
+ - [docs/PUBLIC-FLIP.md](docs/PUBLIC-FLIP.md) — the register of every control
687
+ that could not be enabled while this repository was private, with the exact
688
+ command that turned each one on at the flip.
681
689
  - [docs/RELEASE.md](docs/RELEASE.md) — the reproducible, signed, immutable-ready
682
690
  release procedure and its continuity-bound attestation roadmap.
683
691
  - [docs/RESEARCH-ROADMAP.md](docs/RESEARCH-ROADMAP.md) — standards-backed
@@ -7,7 +7,7 @@ authenticated runtime records are not replay-derived (ADR-001). Storage is
7
7
  SQLite implementing the PostgreSQL-first relational adjacency design (ADR-011).
8
8
  """
9
9
 
10
- __version__ = "0.1.0"
10
+ __version__ = "0.1.2"
11
11
 
12
12
  SCHEMA_VERSIONS = {
13
13
  "anchor": "cce.anchor.v1",
@@ -1144,8 +1144,10 @@ def cmd_serve(args):
1144
1144
  engine, meta = _engine(args)
1145
1145
  root = Path("." if args.dir is None else args.dir)
1146
1146
  _, cce_dir = _physical_cce_directory(root, root / ".cce")
1147
- api_token = _read_private(_secret_path(cce_dir, meta["api_token_file"])) \
1148
- .decode("ascii")
1147
+ token_bytes = _read_private(_secret_path(cce_dir, meta["api_token_file"]))
1148
+ if not token_bytes.isascii():
1149
+ raise ValueError("api token file must be ASCII")
1150
+ api_token = token_bytes.decode("ascii")
1149
1151
  webhook_secret = _read_private(
1150
1152
  _secret_path(cce_dir, meta["webhook_secret_file"]))
1151
1153
  print(_sanitize_human(
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: causal-continuity-engine
3
- Version: 0.1.0
3
+ Version: 0.1.2
4
4
  Summary: Causal Continuity Engine - continuity, causal invalidation, and proof for long-running coding agents
5
5
  Author: Thomas Albrecht
6
6
  License-Expression: Apache-2.0
@@ -30,7 +30,7 @@ Requires-Dist: pytest==9.1.1; extra == "dev"
30
30
  Requires-Dist: ruff==0.16.1; extra == "dev"
31
31
  Requires-Dist: build==1.5.0; extra == "dev"
32
32
  Requires-Dist: jsonschema==4.26.0; extra == "dev"
33
- Requires-Dist: pip==26.1.2; extra == "dev"
33
+ Requires-Dist: pip==26.2; extra == "dev"
34
34
  Dynamic: license-file
35
35
 
36
36
  # Causal Continuity Engine
@@ -41,6 +41,8 @@ Continuity, causal invalidation, and proof for long-running coding agents.
41
41
  ![license](https://img.shields.io/badge/license-Apache_2.0-blue.svg)
42
42
  ![python](https://img.shields.io/badge/python-3.11%2B-blue.svg)
43
43
 
44
+ <p align="center"><img src="https://raw.githubusercontent.com/thequantumfalcon/causal-continuity-engine/main/docs/assets/demo.svg" alt="cce-engine quickstart: install, init, audit verify, assumptions" width="760"></p>
45
+
44
46
  ## The problem
45
47
 
46
48
  An agent working a codebase over weeks does not fail by forgetting text. It
@@ -85,23 +87,29 @@ parsing rather than importing, so a lazy or guarded import is caught too. CI
85
87
  invokes the same `.github/scripts/check_stdlib.py` scanner through
86
88
  `run_gates.py` on every pull request and every push to `main`.
87
89
 
88
- The intended PyPI distribution name is `causal-continuity-engine`, the import
89
- package is `causal_continuity_engine`, and the executable is `cce-engine`. The
90
- distribution is not yet published; the coordinated name-claim step is tracked
91
- in [docs/PUBLIC-FLIP.md](docs/PUBLIC-FLIP.md). Those longer names are
92
- intentional: the shorter `cce` distribution, import namespace, and command are
93
- already used by an unrelated published project.
90
+ The PyPI distribution name is `causal-continuity-engine`, the import package is
91
+ `causal_continuity_engine`, and the executable is `cce-engine`. Those longer
92
+ names are intentional: the shorter `cce` distribution, import namespace, and
93
+ command are already used by an unrelated published project.
94
94
 
95
95
  ## Quickstart
96
96
 
97
97
  Under five minutes, no dependencies beyond the package itself.
98
98
 
99
99
  ```bash
100
- git clone https://github.com/thequantumfalcon/causal-continuity-engine
101
- cd causal-continuity-engine
102
100
  python -m venv .venv
103
101
  # Activate with: source .venv/bin/activate (macOS/Linux)
104
102
  # or: .venv\Scripts\Activate.ps1 (Windows PowerShell)
103
+ python -m pip install causal-continuity-engine
104
+ ```
105
+
106
+ To work on the engine instead of using it, install the checkout editable — see
107
+ [.github/CONTRIBUTING.md](.github/CONTRIBUTING.md) for the full toolchain:
108
+
109
+ ```bash
110
+ git clone https://github.com/thequantumfalcon/causal-continuity-engine
111
+ cd causal-continuity-engine
112
+ python -m venv .venv
105
113
  python -m pip install -e .
106
114
  ```
107
115
 
@@ -674,9 +682,9 @@ change, and there is no deprecation policy yet.
674
682
  - Hosted CI requires the full suite on Python 3.11, 3.12, 3.13 and 3.14 on
675
683
  Linux and natively on Windows 3.14 and macOS 15 ARM64/Python 3.14; 10/10
676
684
  ContinuityBench scenarios pass with all 6 metrics at target
677
- - Repository-policy JSON records the stricter desired state, not current live
678
- enforcement. The exact remote drift and apply/read-back procedure are in
679
- [.github/ruleset.README.md](.github/ruleset.README.md).
685
+ - Repository-policy JSON was applied and read back against the live rulesets.
686
+ Remote settings are mutable, so the apply/read-back procedure that re-checks
687
+ them is in [.github/ruleset.README.md](.github/ruleset.README.md).
680
688
  - The accepted ADRs in [docs/adr/ADR-INDEX.md](docs/adr/ADR-INDEX.md),
681
689
  including the per-round review notes
682
690
  - Capability claims that must mechanically resolve, generated into
@@ -710,9 +718,9 @@ condition.
710
718
  of every requirement identifier used by code, tests, ADRs, and coverage.
711
719
  - [docs/REQUIREMENTS_COVERAGE.md](docs/REQUIREMENTS_COVERAGE.md) — the
712
720
  per-requirement implementation status and supporting evidence.
713
- - [docs/PUBLIC-FLIP.md](docs/PUBLIC-FLIP.md) — what is deliberately switched off
714
- while this repository is private, and the exact command that turns each one
715
- on. Read it before changing the repository's visibility.
721
+ - [docs/PUBLIC-FLIP.md](docs/PUBLIC-FLIP.md) — the register of every control
722
+ that could not be enabled while this repository was private, with the exact
723
+ command that turned each one on at the flip.
716
724
  - [docs/RELEASE.md](docs/RELEASE.md) — the reproducible, signed, immutable-ready
717
725
  release procedure and its continuity-bound attestation roadmap.
718
726
  - [docs/RESEARCH-ROADMAP.md](docs/RESEARCH-ROADMAP.md) — standards-backed
@@ -86,6 +86,7 @@ docs/REQUIREMENTS_COVERAGE.md
86
86
  docs/RESEARCH-ROADMAP.md
87
87
  docs/TESTING.md
88
88
  docs/adr/ADR-INDEX.md
89
+ docs/assets/demo.svg
89
90
  docs/assets/social-preview.png
90
91
  justfile
91
92
  pyproject.toml
@@ -4,4 +4,4 @@ pytest==9.1.1
4
4
  ruff==0.16.1
5
5
  build==1.5.0
6
6
  jsonschema==4.26.0
7
- pip==26.1.2
7
+ pip==26.2
@@ -13,9 +13,8 @@ and remain bound to the reviewed tag.
13
13
  2. Preserve the repository-level requirement for full-length commit SHAs on
14
14
  every GitHub Action reference. The 2026-08-04 API read-back reports
15
15
  `sha_pinning_required: true`.
16
- 3. Preserve release immutability. It was enabled and read back through the
17
- GitHub API on 2026-08-04, before any tag or release existed. The setting is
18
- not retroactive, so verify it again before the first tag.
16
+ 3. Preserve release immutability. It was enabled before any tag or release
17
+ existed. The setting is not retroactive, so verify it again before each tag.
19
18
  4. Confirm the maintainer's signing key renders both commits and signed tags
20
19
  as **Verified** on GitHub, and record the expected key fingerprint or SSH
21
20
  principal in the operator's release record.
@@ -181,17 +180,18 @@ Python image (or an equivalently authenticated interpreter distribution).
181
180
 
182
181
  ## Python package index publication
183
182
 
184
- The GitHub release workflow does **not** currently upload to PyPI. The intended
185
- name `causal-continuity-engine` was unclaimed when checked on 2026-08-04, and a
186
- [pending Trusted Publisher does not reserve it](https://docs.pypi.org/trusted-publishers/creating-a-project-through-oidc/).
187
- Before claiming registry availability, configure a protected `pypi` GitHub
188
- environment and a pending publisher bound exactly to this owner, repository,
189
- and `release.yml`. Then add a separately reviewed OIDC publish job that receives
190
- only the already verified wheel and sdist, uses no long-lived token, emits
191
- PEP 740 attestations, and verifies PyPI's exposed SHA-256 digests before the
192
- release is announced. Until that path is approved and exercised, installation
193
- instructions remain source/GitHub based and must not say `pip install
194
- causal-continuity-engine`.
183
+ The GitHub release workflow uploads to PyPI. The name
184
+ `causal-continuity-engine` was claimed by the first successful publish
185
+ (0.1.0, 2026-08-08); a
186
+ [pending Trusted Publisher does not reserve a name](https://docs.pypi.org/trusted-publishers/creating-a-project-through-oidc/),
187
+ only publishing does.
188
+
189
+ The `pypi` job runs after `verify` and `publish`, is gated on the protected
190
+ `pypi` environment, and authenticates by OIDC Trusted Publishing bound to this
191
+ owner, repository, and `release.yml` — no long-lived token. It receives only
192
+ the already verified wheel and sdist, re-checks them against the checksum
193
+ manifest before upload, and emits PEP 740 attestations. Require PyPI's exposed
194
+ SHA-256 digests to match the GitHub release assets before announcing.
195
195
 
196
196
  Do not reuse a failed version or replace an asset. Correct the cause, increment
197
197
  the version, and create a new signed tag so the failure remains attributable.