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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (264) hide show
  1. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/.github/CONTRIBUTING.md +6 -5
  2. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/.github/scripts/verify_distributions.py +4 -1
  3. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/.github/scripts/verify_public_schemas.py +22 -4
  4. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/AGENTS.md +11 -8
  5. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/CHANGELOG.md +58 -0
  6. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/CITATION.cff +2 -2
  7. {causal_continuity_engine-0.1.6/causal_continuity_engine.egg-info → causal_continuity_engine-0.2.0}/PKG-INFO +189 -91
  8. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/README.md +188 -90
  9. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/SPEC.md +69 -15
  10. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/benchmarks/continuitybench/run.py +4 -0
  11. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/benchmarks/continuitybench/scenarios.py +89 -40
  12. causal_continuity_engine-0.2.0/causal_continuity_engine/__init__.py +27 -0
  13. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/causal_continuity_engine/api.py +55 -16
  14. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/causal_continuity_engine/capsule.py +122 -9
  15. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/causal_continuity_engine/cli.py +78 -6
  16. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/causal_continuity_engine/engine.py +908 -187
  17. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/causal_continuity_engine/extraction.py +20 -16
  18. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/causal_continuity_engine/graph.py +11 -1
  19. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/causal_continuity_engine/invalidation.py +22 -11
  20. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/causal_continuity_engine/mcp.py +79 -13
  21. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/causal_continuity_engine/memory.py +20 -4
  22. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/causal_continuity_engine/partial.py +2 -1
  23. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/causal_continuity_engine/policy.py +9 -8
  24. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/causal_continuity_engine/proof.py +44 -12
  25. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/causal_continuity_engine/resume.py +281 -85
  26. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/causal_continuity_engine/store.py +73 -10
  27. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0/causal_continuity_engine.egg-info}/PKG-INFO +189 -91
  28. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/causal_continuity_engine.egg-info/SOURCES.txt +43 -0
  29. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/docs/API.md +18 -5
  30. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/docs/RELEASE.md +52 -16
  31. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/docs/REQUIREMENTS_COVERAGE.md +18 -12
  32. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/docs/adr/ADR-INDEX.md +572 -1
  33. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/pyproject.toml +1 -1
  34. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/requirements-dev.in +1 -1
  35. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/requirements-dev.lock +3 -3
  36. causal_continuity_engine-0.2.0/schemas/cce.capsule.v2.json +232 -0
  37. causal_continuity_engine-0.2.0/schemas/cce.continuity-receipt.v2.json +787 -0
  38. causal_continuity_engine-0.2.0/schemas/cce.proof-predicate.v2.json +85 -0
  39. causal_continuity_engine-0.2.0/schemas/cce.proof.v2.json +565 -0
  40. causal_continuity_engine-0.2.0/schemas/cce.resume.v2.json +864 -0
  41. causal_continuity_engine-0.2.0/tests/authority_helpers.py +25 -0
  42. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/tests/test_api_contract.py +12 -5
  43. causal_continuity_engine-0.2.0/tests/test_authority_atomic_append.py +418 -0
  44. causal_continuity_engine-0.2.0/tests/test_authority_cli.py +550 -0
  45. causal_continuity_engine-0.2.0/tests/test_authority_consumers.py +461 -0
  46. causal_continuity_engine-0.2.0/tests/test_authority_criticality.py +164 -0
  47. causal_continuity_engine-0.2.0/tests/test_authority_extraction.py +165 -0
  48. causal_continuity_engine-0.2.0/tests/test_authority_producer.py +203 -0
  49. causal_continuity_engine-0.2.0/tests/test_authority_read_reuse.py +252 -0
  50. causal_continuity_engine-0.2.0/tests/test_authority_redteam.py +293 -0
  51. causal_continuity_engine-0.2.0/tests/test_authority_withdrawal_classification.py +68 -0
  52. causal_continuity_engine-0.2.0/tests/test_benchmark_authority.py +91 -0
  53. causal_continuity_engine-0.2.0/tests/test_benchmark_cleanup.py +80 -0
  54. causal_continuity_engine-0.2.0/tests/test_capsule_packet_clock.py +124 -0
  55. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/tests/test_cli.py +92 -2
  56. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/tests/test_conformance.py +4 -4
  57. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/tests/test_engine_e2e.py +164 -74
  58. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/tests/test_identity_compatibility.py +39 -37
  59. causal_continuity_engine-0.2.0/tests/test_installed_contracts.py +167 -0
  60. causal_continuity_engine-0.2.0/tests/test_installed_packet_bounds.py +95 -0
  61. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/tests/test_instrument_validation.py +77 -20
  62. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/tests/test_invalidation_resume.py +67 -106
  63. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/tests/test_learning_partial_api.py +13 -4
  64. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/tests/test_mcp_server.py +34 -5
  65. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/tests/test_memory_extraction.py +60 -46
  66. causal_continuity_engine-0.2.0/tests/test_obligation_boundaries.py +149 -0
  67. causal_continuity_engine-0.2.0/tests/test_obligation_completeness.py +366 -0
  68. causal_continuity_engine-0.2.0/tests/test_obligation_contract_repairs.py +136 -0
  69. causal_continuity_engine-0.2.0/tests/test_packet_byte_bounds.py +431 -0
  70. causal_continuity_engine-0.2.0/tests/test_packet_byte_transports.py +331 -0
  71. causal_continuity_engine-0.2.0/tests/test_packet_complete_trust.py +42 -0
  72. causal_continuity_engine-0.2.0/tests/test_packet_failure_boundaries.py +36 -0
  73. causal_continuity_engine-0.2.0/tests/test_packet_scope_receipts.py +88 -0
  74. causal_continuity_engine-0.2.0/tests/test_packet_scope_wire.py +368 -0
  75. causal_continuity_engine-0.2.0/tests/test_packet_validity_frontier.py +200 -0
  76. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/tests/test_processor_compatibility.py +14 -3
  77. causal_continuity_engine-0.2.0/tests/test_proof_obligation_wire.py +238 -0
  78. causal_continuity_engine-0.2.0/tests/test_readme_contract.py +100 -0
  79. causal_continuity_engine-0.2.0/tests/test_receipt_spec_contract.py +101 -0
  80. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/tests/test_regressions.py +10 -3
  81. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/tests/test_regressions_round10_release.py +10 -0
  82. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/tests/test_regressions_round11_deep_integrity.py +4 -9
  83. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/tests/test_regressions_round14_state_integrity.py +17 -6
  84. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/tests/test_regressions_round17_backfill_layout.py +8 -4
  85. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/tests/test_regressions_round18_assumption_edits.py +120 -76
  86. causal_continuity_engine-0.2.0/tests/test_regressions_round18_co_assertion.py +163 -0
  87. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/tests/test_regressions_round18_negation.py +69 -28
  88. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/tests/test_regressions_round18_source_order.py +97 -18
  89. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/tests/test_regressions_round2.py +31 -36
  90. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/tests/test_regressions_round3.py +59 -12
  91. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/tests/test_regressions_round4.py +2 -3
  92. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/tests/test_regressions_round5.py +3 -4
  93. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/tests/test_regressions_round6.py +25 -20
  94. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/tests/test_regressions_round7.py +61 -42
  95. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/tests/test_regressions_round8_engine.py +32 -17
  96. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/tests/test_regressions_round8_portability.py +29 -18
  97. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/tests/test_regressions_round9_integrity.py +2 -3
  98. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/tests/test_release_boundary_validation.py +16 -4
  99. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/tests/test_release_controls.py +31 -26
  100. causal_continuity_engine-0.2.0/tests/test_resume_prose_origin.py +189 -0
  101. causal_continuity_engine-0.2.0/tests/test_schema_release_identities.py +136 -0
  102. causal_continuity_engine-0.2.0/tests/test_task_packet_review.py +215 -0
  103. causal_continuity_engine-0.2.0/tests/test_task_packets.py +369 -0
  104. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/tests/test_trust.py +2 -3
  105. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/vectors/action_intent_wrong_type.json +25 -20
  106. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/vectors/actor_wrong_type.json +25 -20
  107. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/vectors/created_at_invalid_calendar_date.json +24 -19
  108. causal_continuity_engine-0.2.0/vectors/created_at_leap_second.json +177 -0
  109. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/vectors/created_at_lowercase_designators.json +24 -19
  110. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/vectors/created_at_missing_timezone.json +24 -19
  111. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/vectors/created_at_noncanonical_offset.json +24 -19
  112. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/vectors/created_at_space_separator.json +24 -19
  113. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/vectors/empty_required_authoritative_failure.json +17 -12
  114. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/vectors/empty_required_authoritative_pass.json +17 -12
  115. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/vectors/empty_required_no_results.json +17 -12
  116. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/vectors/empty_required_self_asserted_pass.json +17 -12
  117. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/vectors/generate.py +48 -13
  118. causal_continuity_engine-0.2.0/vectors/historical_proof_version.json +177 -0
  119. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/vectors/incomplete_failed_check.json +24 -19
  120. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/vectors/index.json +42 -0
  121. causal_continuity_engine-0.2.0/vectors/input_item_wrong_type.json +178 -0
  122. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/vectors/invalid_result_value.json +25 -20
  123. causal_continuity_engine-0.2.0/vectors/lamport_fingerprint_spoof.json +1463 -0
  124. causal_continuity_engine-0.2.0/vectors/lamport_no_registry.json +1459 -0
  125. causal_continuity_engine-0.2.0/vectors/lamport_truncated_key.json +1459 -0
  126. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/vectors/missing_required_field.json +25 -20
  127. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/vectors/non_binary64_integer.json +25 -20
  128. causal_continuity_engine-0.2.0/vectors/obligation_duplicate.json +182 -0
  129. causal_continuity_engine-0.2.0/vectors/obligation_duplicate_task.json +178 -0
  130. causal_continuity_engine-0.1.6/vectors/created_at_leap_second.json → causal_continuity_engine-0.2.0/vectors/obligation_missing.json +21 -21
  131. causal_continuity_engine-0.2.0/vectors/obligation_wrong_kind.json +177 -0
  132. causal_continuity_engine-0.2.0/vectors/obligation_wrong_task.json +177 -0
  133. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/vectors/policy_decision_wrong_type.json +23 -18
  134. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/vectors/retry_cannot_launder_a_failure.json +29 -24
  135. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/vectors/self_asserted_cannot_satisfy.json +25 -20
  136. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/vectors/self_assertion_cannot_poison_authoritative_pass.json +29 -24
  137. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/vectors/status_contradicts_contents.json +25 -20
  138. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/vectors/summary_contradicts_contents.json +25 -20
  139. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/vectors/tamper_statement.json +25 -20
  140. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/vectors/tamper_statement_resealed.json +25 -20
  141. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/vectors/task_id_under_unrelated_field.json +20 -20
  142. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/vectors/unbound_task.json +17 -17
  143. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/vectors/unknown_action_intent_field.json +25 -20
  144. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/vectors/unknown_algorithm.json +25 -20
  145. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/vectors/unknown_evidence_context_field.json +25 -20
  146. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/vectors/unknown_execution_field.json +25 -20
  147. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/vectors/unknown_schema_version.json +25 -20
  148. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/vectors/unknown_top_level_field.json +25 -20
  149. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/vectors/unknown_verification_field.json +25 -20
  150. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/vectors/unverified_forged_body_no_key.json +25 -20
  151. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/vectors/unverified_hmac_no_key.json +25 -20
  152. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/vectors/valid_hmac.json +26 -21
  153. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/vectors/valid_hmac_jcs_edges.json +26 -21
  154. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/vectors/valid_hmac_unicode.json +26 -21
  155. causal_continuity_engine-0.2.0/vectors/valid_lamport.json +1463 -0
  156. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/vectors/wrong_project.json +25 -20
  157. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/verifiers/verify_proof.py +16 -3
  158. causal_continuity_engine-0.1.6/causal_continuity_engine/__init__.py +0 -21
  159. causal_continuity_engine-0.1.6/tests/test_regressions_round18_co_assertion.py +0 -119
  160. causal_continuity_engine-0.1.6/vectors/input_item_wrong_type.json +0 -163
  161. causal_continuity_engine-0.1.6/vectors/lamport_fingerprint_spoof.json +0 -1458
  162. causal_continuity_engine-0.1.6/vectors/lamport_no_registry.json +0 -1454
  163. causal_continuity_engine-0.1.6/vectors/lamport_truncated_key.json +0 -1454
  164. causal_continuity_engine-0.1.6/vectors/valid_lamport.json +0 -1458
  165. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/.editorconfig +0 -0
  166. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/.gitattributes +0 -0
  167. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/.githooks/commit-msg +0 -0
  168. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/.githooks/pre-commit +0 -0
  169. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/.github/CODEOWNERS +0 -0
  170. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/.github/ISSUE_TEMPLATE/bug.yml +0 -0
  171. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  172. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/.github/ISSUE_TEMPLATE/feature.yml +0 -0
  173. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/.github/SECURITY.md +0 -0
  174. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/.github/SUPPORT.md +0 -0
  175. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/.github/dependabot.yml +0 -0
  176. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/.github/pull_request_template.md +0 -0
  177. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/.github/release.yml +0 -0
  178. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/.github/ruleset.README.md +0 -0
  179. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/.github/ruleset.json +0 -0
  180. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/.github/scripts/bootstrap_tools.py +0 -0
  181. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/.github/scripts/build_distributions.py +0 -0
  182. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/.github/scripts/check_attribution.py +0 -0
  183. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/.github/scripts/check_clean.py +0 -0
  184. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/.github/scripts/check_content_marks.py +0 -0
  185. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/.github/scripts/check_release_metadata.py +0 -0
  186. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/.github/scripts/check_release_tag.py +0 -0
  187. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/.github/scripts/check_stdlib.py +0 -0
  188. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/.github/scripts/prepare_release_tag.py +0 -0
  189. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/.github/scripts/render_api_docs.py +0 -0
  190. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/.github/scripts/run_gates.py +0 -0
  191. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/.github/scripts/run_isolated_review.py +0 -0
  192. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/.github/tag-ruleset.json +0 -0
  193. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/.github/workflows/ci.yml +0 -0
  194. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/.github/workflows/commit-signature-audit.yml +0 -0
  195. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/.github/workflows/content-integrity-pr.yml +0 -0
  196. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/.github/workflows/content-integrity.yml +0 -0
  197. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/.github/workflows/dependency-review.yml +0 -0
  198. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/.github/workflows/no-ai-attribution.yml +0 -0
  199. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/.github/workflows/release.yml +0 -0
  200. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/.github/workflows/secret-scan.yml +0 -0
  201. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/.gitignore +0 -0
  202. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/.gitleaks.toml +0 -0
  203. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/.pre-commit-config.yaml +0 -0
  204. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/LICENSE.txt +0 -0
  205. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/MANIFEST.in +0 -0
  206. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/NOTICE +0 -0
  207. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/benchmarks/__init__.py +0 -0
  208. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/benchmarks/continuitybench/__init__.py +0 -0
  209. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/causal_continuity_engine/capabilities.py +0 -0
  210. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/causal_continuity_engine/core.py +0 -0
  211. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/causal_continuity_engine/evidence.py +0 -0
  212. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/causal_continuity_engine/github.py +0 -0
  213. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/causal_continuity_engine/lamport.py +0 -0
  214. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/causal_continuity_engine/learning.py +0 -0
  215. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/causal_continuity_engine/ontology.py +0 -0
  216. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/causal_continuity_engine/py.typed +0 -0
  217. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/causal_continuity_engine/redaction.py +0 -0
  218. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/causal_continuity_engine/verifiers.py +0 -0
  219. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/causal_continuity_engine.egg-info/dependency_links.txt +0 -0
  220. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/causal_continuity_engine.egg-info/entry_points.txt +0 -0
  221. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/causal_continuity_engine.egg-info/requires.txt +0 -0
  222. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/causal_continuity_engine.egg-info/top_level.txt +0 -0
  223. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/docs/CAPABILITIES.md +0 -0
  224. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/docs/CONTENT-INGRESS-FIREWALL.md +0 -0
  225. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/docs/PUBLIC-FLIP.md +0 -0
  226. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/docs/REQUIREMENTS.md +0 -0
  227. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/docs/RESEARCH-ROADMAP.md +0 -0
  228. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/docs/TESTING.md +0 -0
  229. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/docs/V0.1.5-TRUST-CLOSURE.md +0 -0
  230. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/docs/assets/demo.svg +0 -0
  231. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/docs/assets/social-preview.png +0 -0
  232. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/examples/backfill_github.py +0 -0
  233. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/examples/quickstart.py +0 -0
  234. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/justfile +0 -0
  235. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/schemas/cce.anchor.v1.json +0 -0
  236. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/schemas/cce.capsule.v1.json +0 -0
  237. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/schemas/cce.continuity-receipt.v1.json +0 -0
  238. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/schemas/cce.event.v1.json +0 -0
  239. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/schemas/cce.proof-predicate.v1.json +0 -0
  240. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/schemas/cce.proof.v1.json +0 -0
  241. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/schemas/cce.recovery.v1.json +0 -0
  242. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/schemas/cce.resume.v1.json +0 -0
  243. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/setup.cfg +0 -0
  244. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/tests/__init__.py +0 -0
  245. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/tests/schema_validation.py +0 -0
  246. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/tests/test_attribution_controls.py +0 -0
  247. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/tests/test_benchmark_runner.py +0 -0
  248. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/tests/test_content_marks.py +0 -0
  249. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/tests/test_distribution_environment.py +0 -0
  250. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/tests/test_github_redaction.py +0 -0
  251. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/tests/test_isolated_review.py +0 -0
  252. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/tests/test_regressions_round12_release_blockers.py +0 -0
  253. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/tests/test_regressions_round13_jcs.py +0 -0
  254. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/tests/test_regressions_round15_capsule_invalidation_github.py +0 -0
  255. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/tests/test_regressions_round15_public_boundaries.py +0 -0
  256. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/tests/test_regressions_round15_storage_boundaries.py +0 -0
  257. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/tests/test_regressions_round16_cli_api_core_capabilities.py +0 -0
  258. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/tests/test_regressions_round18_journal.py +0 -0
  259. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/tests/test_regressions_round8_boundaries.py +0 -0
  260. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/tests/test_regressions_round8_state.py +0 -0
  261. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/tests/test_regressions_round9_scope_freshness.py +0 -0
  262. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/tests/test_sqlite_lifecycle.py +0 -0
  263. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/tests/test_store_graph.py +0 -0
  264. {causal_continuity_engine-0.1.6 → causal_continuity_engine-0.2.0}/verifiers/__init__.py +0 -0
@@ -54,10 +54,10 @@ do. `just setup` installs every direct and transitive tool from
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
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
57
+ `setuptools` 84.0.0, and `pip` 26.2.1. None is imported by the engine; jsonschema validates
58
58
  emitted receipt instances only in the test/release gate.
59
59
 
60
- The pins were last revalidated on 2026-09-15. Setuptools 83.0.0 is the first
60
+ The security review on 2026-09-15 recorded setuptools 83.0.0 as the first
61
61
  patched release for
62
62
  [GHSA-h35f-9h28-mq5c](https://github.com/advisories/GHSA-h35f-9h28-mq5c)
63
63
  and pip 26.2.1 is later than the first patched release for
@@ -68,9 +68,10 @@ and the lock carries Pygments 2.20.0, the fix for
68
68
  [GHSA-5239-wwwm-4pmq](https://github.com/advisories/GHSA-5239-wwwm-4pmq).
69
69
  On that date pytest 9.1.1, ruff 0.16.7, build 1.6.1, jsonschema 4.26.0 and pip
70
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
+ That review retained setuptools 83.0.0 without evaluating 84.0.0. The current
72
+ 84.0.0 pin is a subsequent build-tool update, with matching direct inputs and
73
+ hash lock. The security review is a dated record, not a claim that pins stay
74
+ current without future review.
74
75
 
75
76
  When a direct pin changes, edit `pyproject.toml` and `requirements-dev.in`,
76
77
  regenerate the lock with the command recorded in its header, and review the
@@ -96,7 +96,8 @@ SDIST_GENERATED_FILES = {
96
96
  f"{EGG_INFO}/top_level.txt",
97
97
  }
98
98
  # Selected shipped test modules, chosen to cover the installed
99
- # CLI, the store and graph, trust, conformance vectors and the MCP server
99
+ # CLI, store and graph, trust, conformance, authority/scoped-packet contracts
100
+ # and bounded CLI/HTTP/MCP transports
100
101
  # against the artifact itself. The rest ship as audit evidence a reader can
101
102
  # run, not as checks this gate executes.
102
103
  WHEEL_BEHAVIOR_TESTS = (
@@ -107,6 +108,8 @@ WHEEL_BEHAVIOR_TESTS = (
107
108
  "tests/test_cli.py",
108
109
  "tests/test_conformance.py",
109
110
  "tests/test_mcp_server.py",
111
+ "tests/test_installed_contracts.py",
112
+ "tests/test_installed_packet_bounds.py",
110
113
  )
111
114
  WHEEL_EVIDENCE_TREES = {
112
115
  "benchmarks": {".py"},
@@ -19,6 +19,21 @@ RAW_ORIGIN = (
19
19
  TAG_RE = re.compile(r"v[0-9]+\.[0-9]+\.[0-9]+\Z")
20
20
  SCHEMA_VERSION_RE = re.compile(r"cce\.[a-z][a-z0-9-]*\.v[1-9][0-9]*\Z")
21
21
  MAX_SCHEMA_BYTES = 2 * 1024 * 1024
22
+ SCHEMA_RELEASES = {
23
+ "cce.anchor.v1.json": "v0.1.0",
24
+ "cce.capsule.v1.json": "v0.1.0",
25
+ "cce.continuity-receipt.v1.json": "v0.1.0",
26
+ "cce.event.v1.json": "v0.1.0",
27
+ "cce.proof-predicate.v1.json": "v0.1.0",
28
+ "cce.proof.v1.json": "v0.1.0",
29
+ "cce.recovery.v1.json": "v0.1.0",
30
+ "cce.resume.v1.json": "v0.1.0",
31
+ "cce.capsule.v2.json": "v0.2.0",
32
+ "cce.continuity-receipt.v2.json": "v0.2.0",
33
+ "cce.proof-predicate.v2.json": "v0.2.0",
34
+ "cce.proof.v2.json": "v0.2.0",
35
+ "cce.resume.v2.json": "v0.2.0",
36
+ }
22
37
 
23
38
 
24
39
  def _runtime_schema_versions(root: Path) -> dict[str, str]:
@@ -61,8 +76,11 @@ def _runtime_schema_versions(root: Path) -> dict[str, str]:
61
76
  def _schema_public_urls(root: Path) -> dict[str, str]:
62
77
  names = sorted(
63
78
  f"{version}.json" for version in _runtime_schema_versions(root).values())
79
+ unreviewed = sorted(set(names) - SCHEMA_RELEASES.keys())
80
+ if unreviewed:
81
+ raise SystemExit("unreviewed schema release identity: " + ", ".join(unreviewed))
64
82
  return {
65
- name: f"{RAW_ORIGIN}/v0.1.0/schemas/{name}"
83
+ name: f"{RAW_ORIGIN}/{SCHEMA_RELEASES[name]}/schemas/{name}"
66
84
  for name in names
67
85
  }
68
86
 
@@ -147,8 +165,8 @@ def verify(
147
165
  "public schema inventory differs from the reviewed runtime contract")
148
166
 
149
167
  # A schema TypeURI identifies that schema version, not the package release
150
- # currently carrying it. Later package tags must continue to verify the
151
- # immutable v0.1.0 URLs instead of silently repointing the v1 identities.
168
+ # currently carrying it. Each reviewed filename retains its assigned release
169
+ # independently of both the package tag and the payload's claimed $id.
152
170
  expected_urls = set(schema_public_urls.values())
153
171
  observed_ids: set[str] = set()
154
172
  for name in schema_names:
@@ -171,7 +189,7 @@ def verify(
171
189
  + ", ".join(sorted(unexpected_urls)))
172
190
 
173
191
  # Fetch the committed identity itself. The explicit map above freezes
174
- # today's v1 contract; this variable makes the deciding path follow the
192
+ # each reviewed identity; this variable makes the deciding path follow the
175
193
  # schema's checked-in $id rather than the current package tag.
176
194
  remote_bytes = fetch(committed_url)
177
195
  if not isinstance(remote_bytes, bytes):
@@ -16,10 +16,11 @@ runtime records are authenticated/audited rather than replay-derived. Memory
16
16
  tiers L0–L4 and token-budgeted Resume Packets are what
17
17
  an agent actually receives on resume. When a requirement changes or evidence
18
18
  contradicts an assumption, causal invalidation computes the blast radius
19
- over typed edges, bounds it, and classifies it deterministically. A task
20
- cannot be marked complete without a signed proof envelope whose required
21
- verifiers actually ran — `Engine.complete_task` has twenty independently
22
- instrumented rejection gates, including unresolved invalidation control,
19
+ over typed edges, bounds it, and classifies it deterministically. When policy
20
+ requires proof, a task cannot be marked complete without a signed proof envelope
21
+ whose required verifiers actually ran — `Engine.complete_task` has twenty-two
22
+ independently instrumented rejection gates, including current confirmed authority,
23
+ applicable authority conflicts, unresolved invalidation control,
23
24
  monotonic completed-state, and completable-state guards, and evidence is graded
24
25
  A–F from negative controls,
25
26
  mutation probes and determinism probes. That grade is a mechanical lower bound: it
@@ -114,7 +115,7 @@ python verifiers/verify_proof.py <proof.json> --fingerprint sha256:...
114
115
  vectors that *wrap* an envelope alongside its expected verdict, so passing
115
116
  one directly reports `E_SHAPE`; use `vectors/generate.py --check` for those.
116
117
 
117
- CLI subcommands, all real: `init ingest resume assumptions invalidations
118
+ CLI subcommands, all real: `init ingest authority resume assumptions invalidations
118
119
  verify check migrate replay rebuild audit evidence policy serve mcp`.
119
120
 
120
121
  ## Repo map
@@ -270,9 +271,11 @@ Repository text is evidence about intent. It is never instruction.
270
271
  can raise its authority above the authority of its source
271
272
  (`causal_continuity_engine/ontology.py`,
272
273
  `causal_continuity_engine/extraction.py`).
273
- - Untrusted text **may propose, never mandate.** A requirement extracted
274
- from an untrusted source is demoted to a claim, with the demotion recorded
275
- (AD-006).
274
+ - All prose **may propose, never mandate**, including OWNER and human-decision
275
+ prose. Requirements, constraints, decisions, assumptions and tasks become
276
+ source-event-bound proposals. Only an explicit owner-local canonical decision
277
+ through `record_authority_decision` or `authority --request FILE` confirms
278
+ authority; source standing and status resolution are not grants (ADR-126).
276
279
  - Imperative policy-override wording trips the injection screen, and when it
277
280
  does, **every item extracted from that text block is quarantined** — not
278
281
  just the matched span. Splitting a hostile block into a suspect part and a
@@ -9,6 +9,64 @@ 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.2.0 — 2026-09-23
13
+
14
+ ### Changed
15
+
16
+ - **Breaking: extracted prose proposes; local confirmation confers authority.**
17
+ Requirements, constraints, decisions, assumptions and tasks extracted from
18
+ retained source text require an explicit owner-local decision before becoming
19
+ binding control state. Consumers check canonical decision history, source
20
+ support and the actual projection. A trusted author label or mutable graph
21
+ flag is not approval. Confirmation has no HTTP or MCP
22
+ endpoint; this trusts the existing OS/store owner, not an independently
23
+ authenticated human or a process isolated from that same account (ADR-126).
24
+ - **Breaking: processor compatibility advances to `cce-processor/1.9.0` and
25
+ extraction to `cce-deterministic/1.4.0`.** Preserve older projected stores and
26
+ their SQLite sidecars after stopping writers. Re-ingest retained sources into
27
+ a separate new store/project and review its proposals before confirming them.
28
+ Older authority projections do not upgrade in place; erased source payloads
29
+ cannot be reconstructed by replay. Existing finite admission limits still
30
+ apply; the version check is not a claim of complete database provenance.
31
+ - **Proof v2 binds the complete applicable obligation set.** Confirmed task
32
+ proofs include applicable requirements, constraints, decisions and assumptions,
33
+ their canonical scope and the relevant policy. Caller-supplied links cannot
34
+ subtract mandatory controls. Initial and final deciding reads are separate;
35
+ later changes can stale the proof. A verifier's evidence grade remains a
36
+ mechanical binding check, not proof of the obligation's semantic truth
37
+ (ADR-127).
38
+ - **Resume v2 is complete and explicitly project- or task-scoped.** Mandatory
39
+ controls, work, policy and trust information cannot be silently trimmed to fit
40
+ a budget. Watermarks are scope-specific; descriptive target metadata is not
41
+ a task selector. Current capsule v2 and continuity-receipt v2 remain project-only.
42
+ Historical v1 schemas are retained for interpretation, not current proof or
43
+ receipt acceptance (ADR-128).
44
+ - **Successful resume responses have a hard serialized-byte bound.** The default
45
+ is 131,072 bytes; the accepted range is 1 through 1,048,576. Engine, CLI, HTTP
46
+ and MCP count their actual final representation, including the relevant wrapper
47
+ and line ending. Only optional sections may be removed. Mandatory overflow
48
+ refuses before signing, collision audit or watermark advancement. Packet-budget
49
+ refusals have a separate 1,024-byte bound. This does not bound computation,
50
+ input memory, HTTP headers, arbitrary reserialization or an outer capsule
51
+ (ADR-129).
52
+
53
+ ### Fixed
54
+
55
+ - **Task expiry during packet composition used two validity instants.** Final
56
+ watermark admission now retains the selected instant while rechecking canonical
57
+ authority, source support, projected semantics and live status. Later freshness
58
+ uses current time; an as-of packet is not a lease. Unrelated late failures do
59
+ not promise to refund a consumed signature (ADR-130).
60
+ - **One obligation read repeatedly reconstructed the same canonical witnesses.**
61
+ Validated control witnesses and shared scope-task identities are reused only
62
+ within that non-mutating call, never across requests or a writer's own changes.
63
+ Measured read counts fall without dropping authority checks. Distinct witnesses
64
+ still traverse history; no latency or total-history scaling bound is claimed
65
+ (ADR-131).
66
+ - **The continuity-receipt specification named the historical v1 contract.**
67
+ SPEC §12 now matches the current project-only v2 producer and verifier, including
68
+ expected-scope binding and archived-v1 refusal. Historical schemas are unchanged.
69
+
12
70
  ## 0.1.6 — 2026-09-20
13
71
 
14
72
  Carries the unpublished 0.1.5 line forward with processor compatibility,
@@ -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.6
12
- date-released: 2026-09-20
11
+ version: 0.2.0
12
+ date-released: 2026-09-23
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
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: causal-continuity-engine
3
- Version: 0.1.6
3
+ Version: 0.2.0
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
@@ -73,8 +73,8 @@ assumptions, requirements and evidence become nodes in a bi-temporal causal
73
73
  graph over an application-enforced append-only, hash-chained event log, so
74
74
  *why* is a queryable edge and not a memory. When a requirement changes or evidence contradicts an assumption, the
75
75
  blast radius is computed over typed edges, bounded, and classified
76
- deterministically. And a task cannot be marked complete without a signed proof
77
- envelope whose required verifiers actually ran — the rejection gates are
76
+ deterministically. When policy requires proof, a task cannot be marked complete
77
+ without a signed envelope whose required verifiers actually ran — the rejection gates are
78
78
  mechanically enumerated and mutation-tested below.
79
79
 
80
80
  Event integrity separates two facts that are easy to conflate:
@@ -102,18 +102,32 @@ can read a project's control state directly. Four read-only tools:
102
102
 
103
103
  The subcommand first ships in 0.1.6. The published 0.1.0, 0.1.2 and 0.1.3
104
104
  packages do not include it; 0.1.4 was prepared but never published, and 0.1.5
105
- was tagged but never published. The candidate lifecycle has been exercised with
105
+ was tagged but never published. The released 0.1.6 lifecycle has been exercised with
106
106
  the reference MCP SDK; other clients are expected to work over the same
107
107
  transport but have not been exercised here.
108
108
 
109
+ Initialize a fresh project with the quickstart below before connecting a client.
110
+ Use the absolute path to the installed `cce-engine` executable and the initialized
111
+ project directory in the client configuration; an editor may not inherit your
112
+ terminal's virtual environment or working directory. For example, on macOS/Linux:
113
+
109
114
  ```json
110
115
  {
111
116
  "mcpServers": {
112
- "cce": {"command": "cce-engine", "args": ["--dir", ".", "mcp"]}
117
+ "cce": {
118
+ "command": "/absolute/path/to/.venv/bin/cce-engine",
119
+ "args": ["--dir", "/absolute/path/to/cce-demo", "mcp"]
120
+ }
113
121
  }
114
122
  }
115
123
  ```
116
124
 
125
+ On Windows, use the virtual environment's `Scripts/cce-engine.exe`; forward
126
+ slashes avoid JSON backslash escaping. Replace both example paths with real paths.
127
+ MCP observes a closed store: stop writers cleanly before connecting. Any SQLite
128
+ WAL, SHM, or rollback-journal sidecar causes refusal rather than a partial view.
129
+ Never delete a sidecar to force admission; it may contain recovery data.
130
+
117
131
  The server is read-only by design. An MCP client is an untrusted caller in this
118
132
  project's authority model, so nothing exposed here mutates state, mints a proof,
119
133
  or grants autonomy — a test fails if a future tool name suggests otherwise. It
@@ -122,25 +136,61 @@ than the official SDK, which would pull in more than twenty packages.
122
136
 
123
137
  ## Quickstart
124
138
 
125
- Under five minutes, no dependencies beyond the package itself.
139
+ The installation commands below install the package PyPI currently serves; to
140
+ run this exact checkout, including its authority and v2 packet examples, use
141
+ the editable installation that follows.
142
+
143
+ Python 3.11 or newer is required; the engine has no third-party runtime
144
+ dependencies. Choose the block for your platform and run it in a new working
145
+ directory.
146
+
147
+ macOS/Linux:
126
148
 
127
149
  ```bash
128
- python -m venv .venv
129
- # Activate with: source .venv/bin/activate (macOS/Linux)
130
- # or: .venv\Scripts\Activate.ps1 (Windows PowerShell)
150
+ python3 -m venv .venv
151
+ source .venv/bin/activate
152
+ python -m pip install causal-continuity-engine
153
+ ```
154
+
155
+ Windows PowerShell:
156
+
157
+ ```powershell
158
+ py -3 -m venv .venv
159
+ .\.venv\Scripts\Activate.ps1
131
160
  python -m pip install causal-continuity-engine
132
161
  ```
133
162
 
134
- To work on the engine instead of using it, install the checkout editable — see
135
- [.github/CONTRIBUTING.md](.github/CONTRIBUTING.md) for the full toolchain:
163
+ If PowerShell blocks activation, do not weaken its execution policy: install
164
+ with `.\.venv\Scripts\python.exe -m pip install causal-continuity-engine`
165
+ and invoke the environment's `cce-engine.exe` by its absolute path in the
166
+ commands below. After activation, `cce-engine --help` checks the installation.
167
+
168
+ **Upgrading an existing project:** this release uses processor 1.9.0 and
169
+ extractor 1.4.0; projections written by 0.1.6's processor 1.8.0 or earlier
170
+ processors are refused. There is no in-place projection or authority upgrade. Stop writers,
171
+ preserve the complete old project state (including its database and any SQLite
172
+ sidecars), and re-ingest retained sources into a separate new project/store.
173
+ Review and explicitly confirm the new proposals there; old prose is not approval.
174
+ Do not remove markers or sidecars to bypass refusal. Payloads already removed
175
+ by retention cannot be reconstructed from their digests. New users can simply
176
+ start a fresh project. See [the upgrade notes for this release](CHANGELOG.md#020--2026-09-23);
177
+ the [0.1.6 notes](CHANGELOG.md#016--2026-09-20) remain historical.
178
+
179
+ To run this exact checkout instead of the published package, or to work on the
180
+ engine, replace the path below with the checkout's path and install it
181
+ editable — see [.github/CONTRIBUTING.md](.github/CONTRIBUTING.md) for the
182
+ development toolchain:
136
183
 
137
184
  ```bash
138
- git clone https://github.com/thequantumfalcon/causal-continuity-engine
139
- cd causal-continuity-engine
140
- python -m venv .venv
185
+ cd /absolute/path/to/this/local/checkout
186
+ python3 -m venv .venv
187
+ source .venv/bin/activate
141
188
  python -m pip install -e .
142
189
  ```
143
190
 
191
+ On Windows, use the PowerShell environment-creation and activation commands
192
+ above, then `python -m pip install -e .` from the checkout.
193
+
144
194
  Global flags come **before** the subcommand: `cce-engine --dir <path> <subcommand>`.
145
195
 
146
196
  ```bash
@@ -209,103 +259,138 @@ cce-engine --dir . ingest --event push --delivery-id d2 --file push.json
209
259
  # ingested push: 0 node(s), 0 invalidation(s), 0 conflict(s)
210
260
  ```
211
261
 
212
- The extractor typed that prose by authority and pulled out what is now
213
- control state:
262
+ The extractor proposed three claims: a requirement, a constraint and an
263
+ assumption. Even an `OWNER` source does not approve them. At this point:
214
264
 
215
265
  ```bash
216
266
  cce-engine --dir . assumptions --status active
217
- # [active/medium] the upstream feed is ordered by timestamp (asm_...)
267
+ # no assumptions
218
268
  ```
219
269
 
220
- A Resume Packet is what an agent picking up the work receives instead of a
221
- summary — token-budgeted, with omissions stated rather than silent:
270
+ Only for this **fresh, initialized demo directory that you control**, save the
271
+ following as `prepare_reviews.py`. It prepares review operands for the three
272
+ exact statements above; it does not approve them or read signing keys. This is
273
+ an owner-local Python example, not a general secure filesystem opener or a
274
+ read-only guarantee: `Engine` normally opens writable, schema-capable storage.
275
+
276
+ <!-- quickstart-review-requests -->
277
+
278
+ ```python
279
+ import json
280
+ from pathlib import Path
281
+
282
+ from causal_continuity_engine.engine import Engine
283
+
284
+ root = Path.cwd()
285
+ meta = json.loads((root / ".cce" / "meta.json").read_text(encoding="utf-8"))
286
+ engine = Engine(root / ".cce" / "cce.db", tenant_id=meta["tenant_id"], workdir=root)
287
+ try:
288
+ def prepare(kind, text):
289
+ matches = [node for node in engine.graph.current(
290
+ meta["project_id"], "claim", tenant_id=meta["tenant_id"])
291
+ if node["data"].get("proposed_kind") == kind
292
+ and node["data"].get("statement") == text]
293
+ if len(matches) != 1:
294
+ raise ValueError("expected exactly one matching retained proposal")
295
+ proposal = engine.authority_proposal(meta["project_id"], matches[0]["node_id"])
296
+ request = {
297
+ "operation": "confirm", "request_id": "quickstart-" + kind,
298
+ "tenant_id": meta["tenant_id"], "project_id": meta["project_id"],
299
+ **proposal, "authority_scope": {"kind": "global"},
300
+ }
301
+ (root / ("review-" + kind + ".json")).write_text(
302
+ json.dumps(request, indent=2) + "\n", encoding="utf-8")
303
+
304
+ prepare("requirement", "Exporter must stream rows instead of buffering")
305
+ prepare("constraint", "The exporter must not hold the whole result set in memory")
306
+ prepare("assumption", "the upstream feed is ordered by timestamp")
307
+ finally:
308
+ engine.close()
309
+ ```
222
310
 
223
311
  ```bash
224
- cce-engine --dir . resume --token-budget 1500
312
+ python prepare_reviews.py
225
313
  ```
226
314
 
227
- ```markdown
228
- # CCE Resume Packet
229
- Packet `rsp_...` | generated ... | state at event:evt_...
230
-
231
- ## Mission
232
- **Project:** octo/demo
233
- **Objective:** No explicit mission pinned; see open work.
234
- **Target:** {}
235
-
236
- ## Mission control state
237
- ### Pinned
238
- - none pinned
239
- ### Retired
240
- - none retired
241
-
242
- ## Authority
243
- - instruction precedence: tenant_policy > human_decision > repository_authoritative > agent_inference > untrusted_content
244
- ### Active constraints
245
- - The exporter must not hold the whole result set in memory (high)
246
- ### Active requirements
247
- - Exporter must stream rows instead of buffering
315
+ Inspect the complete source in `issue.json`, the exact retained proposal text,
316
+ and **each complete request file**, including its tenant/project and global
317
+ scope. Stop if they do not match what you intend to authorize. Preparing these
318
+ files is not approval. Submit each only if you approve that individual statement:
248
319
 
249
- ## Accepted decisions
250
- - none
320
+ ```bash
321
+ # Only after approving the requirement:
322
+ cce-engine --dir . --json authority --request review-requirement.json
323
+ # Only after approving the constraint:
324
+ cce-engine --dir . --json authority --request review-constraint.json
325
+ # Only after approving the assumption:
326
+ cce-engine --dir . --json authority --request review-assumption.json
327
+ ```
251
328
 
252
- ## Invalidated state
253
- - none open
329
+ Each command returns a receipt naming the confirmation and canonical event.
330
+ Now `cce-engine --dir . assumptions --status active` lists the confirmed
331
+ assumption. Owner-local authority means possession of the local OS/store
332
+ capability, not independent authentication of a human. Neither HTTP nor MCP
333
+ exposes this confirmation operation. Revocation and scope replacement also use
334
+ explicit structured decisions; editing a source does not silently approve new text.
254
335
 
255
- ## Assumptions
256
- ### Active
257
- - [active] the upstream feed is ordered by timestamp (asm_...)
258
- ### Uncertain
259
- - none
336
+ A Resume Packet is what an agent picking up the work receives instead of a
337
+ summary. A project packet includes all applicable mandatory control, work,
338
+ policy and trust state. `resume --task-id <confirmed-task-id>` explicitly selects
339
+ a live confirmed task and its applicable controls; descriptive `--issue` or
340
+ target metadata does not select authority. Task and project freshness records
341
+ are separate, while broad project safety changes can stale both. Capsules and
342
+ continuity receipts remain project-only, not task-specific verdicts.
343
+
344
+ The token budget is an advisory trimming target, not a hard ceiling; mandatory
345
+ state is not dropped to meet it. `token_estimate` is not a model-specific
346
+ tokenizer count. Separately, `--max-response-bytes` is a hard bound on the final
347
+ UTF-8 response (default `131072`, allowed `1`–`1048576`). For CLI output that
348
+ includes JSON formatting or terminal sanitization and the final newline. HTTP
349
+ measures its JSON body; MCP measures the complete result frame including its
350
+ request ID and newline. Re-encoding elsewhere is not covered by this bound.
351
+
352
+ Only optional context may be trimmed, with omissions disclosed. If complete
353
+ mandatory state cannot fit, CCE refuses before packet signing or a new success
354
+ watermark. The CLI returns exit 2 with the fixed `packet_budget_exceeded` error
355
+ on stderr, not a partial packet; the small error frame has its own bound.
356
+ Use an adequate limit or legitimate narrower task scope, never truncate authority.
260
357
 
261
- ## Verified progress
262
- - none
358
+ ```bash
359
+ cce-engine --dir . resume --token-budget 1500
360
+ ```
263
361
 
264
- ## Open work
265
- - none visible
266
- ### Blockers
267
- - none
362
+ Selected lines from that real Markdown output follow. `...` marks excerpted
363
+ content here, not a packet omission; the actual output includes the complete
364
+ mandatory members, configured policy and other sections.
268
365
 
269
- **Next safe action:** No open tasks; verify project state and await instruction.
366
+ <!-- quickstart-packet-excerpt -->
270
367
 
271
- ## Environment
272
- - {"note": "no environment fingerprint recorded"}
368
+ ```markdown
369
+ Scope: {"kind": "project"} | complete: True
370
+ Response: cli-markdown | max bytes: 131072
273
371
 
372
+ ## Mandatory control
373
+ ...
374
+ ## Authority
375
+ ...
376
+ ### Active requirements
377
+ - Exporter must stream rows instead of buffering
378
+ ...
274
379
  ## Trust
275
380
  - autonomy level: 0
276
381
  - required verifiers: none
277
382
  - verification gaps: policy:proof-required-without-required-verifiers
278
- ### Completed checks
279
- - none
280
- ### Failed or stale checks
281
- - none
282
-
283
- ## Evidence index
284
- - asm_...: evt_...
285
-
286
- ## Recent context
287
- - none
288
-
289
- ## Continuity lineage
290
- - source session: none
291
- - checkpoints: []
292
- - packet generation time: ...
293
-
294
- ## Omissions
295
- - none
296
-
383
+ ...
297
384
  ## Transport and cryptographic metadata
298
- - Full canonical values are retained in the JSON packet; the human view does not reproduce signatures, digests, or the complete state-basis object.
299
- - schema: cce.resume.v1
385
+ ...
386
+ - schema: cce.resume.v2
300
387
  - packet digest present: True
301
388
  - signature present: True
302
-
303
- Evidence coverage: 100% | ~... tokens
304
389
  ```
305
390
 
306
- That is the whole human-view shape, with generated identifiers and timestamps
307
- abbreviated. Every schema field is either rendered or named as metadata kept
308
- in canonical JSON; empty decision sections are literal rather than silent.
391
+ The full human view renders each schema field or declares it as metadata kept
392
+ in canonical JSON. Use `resume --format json` for those complete canonical
393
+ field values, including signatures, digests and the state-basis object.
309
394
 
310
395
  The named verification gap is expected on a fresh project: proof is required
311
396
  by default, but CCE cannot safely invent a project-specific verifier
@@ -436,9 +521,10 @@ contract is generated from the live route registry in [docs/API.md](docs/API.md)
436
521
 
437
522
  ## How it decides a task is done
438
523
 
439
- `complete_task` is the false-completion gate. When policy requires proof for
440
- `task_complete`, a completion attempt passes through twenty independently
441
- instrumented rejection paths:
524
+ `complete_task` is the false-completion gate, with twenty-two independently
525
+ instrumented rejection paths. Authority and state guards apply even when proof
526
+ is optional. For a new completion, any supplied proof is validated; missing
527
+ proof is rejected when policy requires it:
442
528
 
443
529
  1. **The target is a task in this project.** Another entity type, tenant, or
444
530
  project cannot be completed through a borrowed identifier.
@@ -475,7 +561,10 @@ instrumented rejection paths:
475
561
  15. **The proof is current.** If a named deliverable or any linked task,
476
562
  requirement, decision, assumption, artifact, evidence or action changed
477
563
  its signed semantic/version digest since attestation, the proof describes
478
- a world that no longer exists.
564
+ a world that no longer exists. It also binds the complete applicable
565
+ requirement, constraint, decision and assumption set and verifier policy:
566
+ newly applicable controls, withdrawals and scope changes cannot hide behind
567
+ an unchanged caller-selected list of links.
479
568
  16. **The policy declares required verifiers.** Demanding proof without saying
480
569
  what must be proven lets the claimant set its own pass mark. This is a
481
570
  configuration error and refusing it names the fix.
@@ -492,6 +581,12 @@ instrumented rejection paths:
492
581
  20. **The task state did not race validation.** Its version is re-read before
493
582
  the proof is claimed and completion is written; a concurrent change forces
494
583
  a retry against the new state.
584
+ 21. **The task has current authority.** Its owner-local confirmation must still
585
+ have the required canonical decision and retained source witnesses; mutable
586
+ graph labels or an old approval receipt cannot substitute for them.
587
+ 22. **Applicable authority is not conflicted.** An applicable blocked, uncertain,
588
+ review-required or explicitly conflicted control prevents completion, even
589
+ under proof-optional policy.
495
590
 
496
591
  The instrument-validation suite plants exactly one defect for each path and
497
592
  asserts that the intended gate, rather than a neighboring one, rejects it.
@@ -599,7 +694,7 @@ determinism`; both exit non-zero on failure.
599
694
 
600
695
  ## Verifying a proof without trusting the engine
601
696
 
602
- [SPEC.md](SPEC.md) is normative: it defines the `cce.proof.v1` envelope and
697
+ [SPEC.md](SPEC.md) is normative: it defines the `cce.proof.v2` envelope and
603
698
  the five checks (digest, signature, authenticity, sufficiency, scope) well
604
699
  enough to reimplement from that text alone.
605
700
  [verifiers/verify_proof.py](verifiers/verify_proof.py) is such a
@@ -608,6 +703,9 @@ reimplementation — standard library only, and it imports nothing from
608
703
  so agreement between the two is evidence rather than the same code run twice.
609
704
  [vectors/](vectors/) is a committed conformance corpus, including honest
610
705
  negatives and adversarial forgeries, that pins both implementations in CI.
706
+ Published v1 schemas remain historical contracts; v1 proofs are not current
707
+ completion evidence. The v2 schema URLs are bound to the `v0.2.0` release tag,
708
+ and the release workflow verifies that each serves the checked-out bytes.
611
709
 
612
710
  ```bash
613
711
  # The complete configured verifier set must already be pinned in project policy.
@@ -680,7 +778,7 @@ outside the envelope — a fingerprint obtained out of band. SPEC §6 requires
680
778
  such a registry and says nothing about how it travels, because nothing here
681
779
  solves that. No amount of verifier code closes it.
682
780
 
683
- **There is no revocation.** A fingerprint in the registry is trusted for every
781
+ **Signing-key revocation is not implemented.** A fingerprint in the registry is trusted for every
684
782
  envelope it ever signed. Withdrawing a key is not a mechanism this has.
685
783
 
686
784
  **A stranger cannot tell whether an envelope is still fresh.** An envelope is a