actenon-kernel 1.0.0__tar.gz → 1.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 (288) hide show
  1. {actenon_kernel-1.0.0/actenon_kernel.egg-info → actenon_kernel-1.2.0}/PKG-INFO +71 -4
  2. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/README.md +69 -3
  3. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/cli.py +4 -2
  4. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/conformance/test_countersignature_conformance.py +1 -1
  5. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/conformance/test_transparency_log_conformance.py +1 -1
  6. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/conformance/test_trust_artifacts_conformance.py +1 -1
  7. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/local_runtime.py +28 -0
  8. actenon_kernel-1.2.0/actenon/mcp_server.py +559 -0
  9. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/verifier/countersignature.py +1 -1
  10. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/verifier/transparency.py +1 -1
  11. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/verifier/trust_artifacts.py +1 -1
  12. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0/actenon_kernel.egg-info}/PKG-INFO +71 -4
  13. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon_kernel.egg-info/SOURCES.txt +1 -0
  14. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon_kernel.egg-info/entry_points.txt +1 -0
  15. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon_kernel.egg-info/requires.txt +1 -0
  16. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/pyproject.toml +13 -1
  17. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/tests/test_neutrality.py +3 -3
  18. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/LICENSE +0 -0
  19. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/__init__.py +0 -0
  20. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/adapters/__init__.py +0 -0
  21. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/adapters/_authorization.py +0 -0
  22. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/adapters/base.py +0 -0
  23. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/adapters/edge.py +0 -0
  24. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/adapters/fastapi.py +0 -0
  25. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/adapters/langchain.py +0 -0
  26. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/adapters/mcp.py +0 -0
  27. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/anchors/__init__.py +0 -0
  28. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/anchors/local_log.py +0 -0
  29. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/anchors/models.py +0 -0
  30. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/api/__init__.py +0 -0
  31. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/api/intake.py +0 -0
  32. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/api/invoice_payment.py +0 -0
  33. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/api/refund.py +0 -0
  34. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/boundary/__init__.py +0 -0
  35. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/conformance/__init__.py +0 -0
  36. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/conformance/helpers.py +0 -0
  37. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/conformance/manifest.py +0 -0
  38. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/conformance/test_artifact_shape_conformance.py +0 -0
  39. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/conformance/test_canonicalization_strict_conformance.py +0 -0
  40. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/conformance/test_execution_state_conformance.py +0 -0
  41. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/conformance/test_outcome_attestation_conformance.py +0 -0
  42. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/conformance/test_replay_conformance.py +0 -0
  43. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/conformance/test_verifier_sdk_conformance.py +0 -0
  44. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/conformance/vectors/canonicalization_strict_v1/cases.json +0 -0
  45. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/conformance/vectors/canonicalization_strict_v1/profile.json +0 -0
  46. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/conformance/vectors/verifier_sdk_v1/README.md +0 -0
  47. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/conformance/vectors/verifier_sdk_v1/action_intent.json +0 -0
  48. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/conformance/vectors/verifier_sdk_v1/cases.json +0 -0
  49. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/conformance/vectors/verifier_sdk_v1/pccb.json +0 -0
  50. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/conformance/version.py +0 -0
  51. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/core/__init__.py +0 -0
  52. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/core/errors.py +0 -0
  53. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/core/json.py +0 -0
  54. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/core/kernel.py +0 -0
  55. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/core/redaction.py +0 -0
  56. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/coverage_matrix.py +0 -0
  57. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/credentials/__init__.py +0 -0
  58. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/credentials/broker.py +0 -0
  59. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/demo/__init__.py +0 -0
  60. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/demo/local_proof.py +0 -0
  61. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/demo/portable_local_proof.py +0 -0
  62. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/escrow/__init__.py +0 -0
  63. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/escrow/base.py +0 -0
  64. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/escrow/memory.py +0 -0
  65. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/escrow/service.py +0 -0
  66. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/escrow/sqlite.py +0 -0
  67. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/evidence/__init__.py +0 -0
  68. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/evidence/query.py +0 -0
  69. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/evidence/stores.py +0 -0
  70. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/execution/__init__.py +0 -0
  71. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/execution/mode_aware.py +0 -0
  72. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/execution/protected_executor.py +0 -0
  73. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/execution_graph.py +0 -0
  74. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/gate.py +0 -0
  75. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/idempotency.py +0 -0
  76. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/local_runtime_server.py +0 -0
  77. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/models/__init__.py +0 -0
  78. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/models/contracts.py +0 -0
  79. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/models/evidence.py +0 -0
  80. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/models/execution.py +0 -0
  81. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/models/intent_record.py +0 -0
  82. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/models/invoice_payment.py +0 -0
  83. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/models/policy_bundle.py +0 -0
  84. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/models/runtime.py +0 -0
  85. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/models/serialization.py +0 -0
  86. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/outcomes.py +0 -0
  87. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/policy/__init__.py +0 -0
  88. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/policy/engine.py +0 -0
  89. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/policy/evidence.py +0 -0
  90. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/policy/invoice_payment.py +0 -0
  91. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/policy/refund.py +0 -0
  92. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/preflight/__init__.py +0 -0
  93. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/preflight/engine.py +0 -0
  94. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/preflight/evidence.py +0 -0
  95. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/preflight/models.py +0 -0
  96. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/preflight/policy_packs.py +0 -0
  97. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/proof/__init__.py +0 -0
  98. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/proof/audit.py +0 -0
  99. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/proof/canonical.py +0 -0
  100. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/proof/local.py +0 -0
  101. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/proof/refusal_messages.py +0 -0
  102. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/proof/service.py +0 -0
  103. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/proof/signers/__init__.py +0 -0
  104. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/proof/signers/aws_kms.py +0 -0
  105. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/proof/signers/base.py +0 -0
  106. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/proof/signers/external_managed.py +0 -0
  107. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/proof/signers/hsm.py +0 -0
  108. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/proof/signers/key_lifecycle.py +0 -0
  109. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/proof/signers/kms.py +0 -0
  110. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/proof/signers/local.py +0 -0
  111. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/proof/signers/proof_seal.py +0 -0
  112. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/proof/signers/well_known.py +0 -0
  113. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/proof/signing.py +0 -0
  114. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/receipts/__init__.py +0 -0
  115. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/receipts/attestation.py +0 -0
  116. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/receipts/factory.py +0 -0
  117. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/receipts/invoice_payment.py +0 -0
  118. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/receipts/refund.py +0 -0
  119. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/receipts/store.py +0 -0
  120. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/receipts/writers.py +0 -0
  121. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/reconciliation/__init__.py +0 -0
  122. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/reconciliation/base.py +0 -0
  123. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/replay/__init__.py +0 -0
  124. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/replay/base.py +0 -0
  125. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/replay/dbapi.py +0 -0
  126. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/replay/postgres.py +0 -0
  127. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/replay/service.py +0 -0
  128. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/replay/sqlite.py +0 -0
  129. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/scanner.py +0 -0
  130. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/ui/__init__.py +0 -0
  131. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/ui/trace_viewer/__init__.py +0 -0
  132. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/ui/trace_viewer/app.py +0 -0
  133. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/ui/trace_viewer/static/app.js +0 -0
  134. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/ui/trace_viewer/static/index.html +0 -0
  135. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/ui/trace_viewer/static/styles.css +0 -0
  136. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/ui/trace_viewer/trace_loader.py +0 -0
  137. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/verifier/__init__.py +0 -0
  138. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/verifier/endpoint.py +0 -0
  139. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/verifier/middleware.py +0 -0
  140. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon/verifier/sdk.py +0 -0
  141. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon_kernel.egg-info/dependency_links.txt +0 -0
  142. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/actenon_kernel.egg-info/top_level.txt +0 -0
  143. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/conformance/CHANGELOG.md +0 -0
  144. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/conformance/MATRIX.md +0 -0
  145. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/conformance/README.md +0 -0
  146. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/conformance/VERSION +0 -0
  147. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/conformance/__init__.py +0 -0
  148. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/conformance/suite.json +0 -0
  149. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/conformance/vector-lock.json +0 -0
  150. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/conformance/vectors/cloud_invoice_payment_v1/action_intent.json +0 -0
  151. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/conformance/vectors/cloud_invoice_payment_v1/issuer_keys.json +0 -0
  152. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/conformance/vectors/cloud_invoice_payment_v1/mutations/action_hash_changed_pccb.json +0 -0
  153. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/conformance/vectors/cloud_invoice_payment_v1/mutations/amount_changed_action_intent.json +0 -0
  154. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/conformance/vectors/cloud_invoice_payment_v1/mutations/audience_changed_pccb.json +0 -0
  155. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/conformance/vectors/cloud_invoice_payment_v1/mutations/expired_pccb.json +0 -0
  156. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/conformance/vectors/cloud_invoice_payment_v1/mutations/outcome_attestation_hard_revoked_issuer_keys.json +0 -0
  157. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/conformance/vectors/cloud_invoice_payment_v1/mutations/outcome_attestation_wrong_purpose_issuer_keys.json +0 -0
  158. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/conformance/vectors/cloud_invoice_payment_v1/mutations/receipt_attestation_artifact_digest_changed.json +0 -0
  159. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/conformance/vectors/cloud_invoice_payment_v1/mutations/receipt_attestation_issued_at_changed.json +0 -0
  160. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/conformance/vectors/cloud_invoice_payment_v1/mutations/receipt_attestation_issuer_changed.json +0 -0
  161. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/conformance/vectors/cloud_invoice_payment_v1/mutations/receipt_attestation_outcome_artifact_changed.json +0 -0
  162. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/conformance/vectors/cloud_invoice_payment_v1/mutations/receipt_attestation_proof_binding_changed.json +0 -0
  163. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/conformance/vectors/cloud_invoice_payment_v1/mutations/receipt_attestation_signature_changed.json +0 -0
  164. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/conformance/vectors/cloud_invoice_payment_v1/mutations/refusal_attestation_issued_at_changed.json +0 -0
  165. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/conformance/vectors/cloud_invoice_payment_v1/mutations/refusal_attestation_issuer_changed.json +0 -0
  166. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/conformance/vectors/cloud_invoice_payment_v1/mutations/refusal_attestation_signature_changed.json +0 -0
  167. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/conformance/vectors/cloud_invoice_payment_v1/mutations/signature_changed_pccb.json +0 -0
  168. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/conformance/vectors/cloud_invoice_payment_v1/mutations/wrong_kid_pccb.json +0 -0
  169. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/conformance/vectors/cloud_invoice_payment_v1/mutations/wrong_purpose_issuer_keys.json +0 -0
  170. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/conformance/vectors/cloud_invoice_payment_v1/pccb.json +0 -0
  171. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/conformance/vectors/cloud_invoice_payment_v1/receipt.json +0 -0
  172. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/conformance/vectors/cloud_invoice_payment_v1/receipt_attestation.json +0 -0
  173. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/conformance/vectors/cloud_invoice_payment_v1/refusal.json +0 -0
  174. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/conformance/vectors/cloud_invoice_payment_v1/refusal_attestation.json +0 -0
  175. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/conformance/vectors/receipt_countersignature_v1/countersignature.json +0 -0
  176. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/conformance/vectors/receipt_countersignature_v1/mutations/countersignature_altered_digest.json +0 -0
  177. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/conformance/vectors/receipt_countersignature_v1/mutations/countersignature_unknown_kid.json +0 -0
  178. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/conformance/vectors/receipt_countersignature_v1/mutations/trusted_keys_wrong_key.json +0 -0
  179. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/conformance/vectors/receipt_countersignature_v1/receipt.json +0 -0
  180. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/conformance/vectors/receipt_countersignature_v1/trusted_keys.json +0 -0
  181. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/conformance/vectors/transparency_log_v1/checkpoint_new.json +0 -0
  182. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/conformance/vectors/transparency_log_v1/checkpoint_old.json +0 -0
  183. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/conformance/vectors/transparency_log_v1/consistency_proof.json +0 -0
  184. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/conformance/vectors/transparency_log_v1/countersignature.json +0 -0
  185. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/conformance/vectors/transparency_log_v1/inclusion_proof.json +0 -0
  186. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/conformance/vectors/transparency_log_v1/leaf_digest.json +0 -0
  187. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/conformance/vectors/transparency_log_v1/mutations/checkpoint_new_forked.json +0 -0
  188. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/conformance/vectors/transparency_log_v1/mutations/checkpoint_unknown_kid.json +0 -0
  189. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/conformance/vectors/transparency_log_v1/mutations/countersignature_orphan.json +0 -0
  190. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/conformance/vectors/transparency_log_v1/trusted_keys.json +0 -0
  191. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/conformance/vectors/trust_artifacts_v1/README.md +0 -0
  192. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/conformance/vectors/trust_artifacts_v1/action_intent.json +0 -0
  193. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/conformance/vectors/trust_artifacts_v1/approval.json +0 -0
  194. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/conformance/vectors/trust_artifacts_v1/approval_trusted_keys.json +0 -0
  195. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/conformance/vectors/trust_artifacts_v1/issuer.json +0 -0
  196. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/conformance/vectors/trust_artifacts_v1/issuer_status_expired.json +0 -0
  197. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/conformance/vectors/trust_artifacts_v1/issuer_status_good.json +0 -0
  198. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/conformance/vectors/trust_artifacts_v1/issuer_status_revoked.json +0 -0
  199. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/conformance/vectors/trust_artifacts_v1/issuer_status_stale.json +0 -0
  200. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/conformance/vectors/trust_artifacts_v1/issuer_status_trusted_keys.json +0 -0
  201. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/conformance/vectors/trust_artifacts_v1/mutations/approval_action_changed.json +0 -0
  202. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/conformance/vectors/trust_artifacts_v1/mutations/approval_signature_changed.json +0 -0
  203. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/conformance/vectors/trust_artifacts_v1/mutations/issuer_status_signature_changed.json +0 -0
  204. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/examples/__init__.py +0 -0
  205. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/examples/adversarial_rsa_policy_stress_test.py +0 -0
  206. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/examples/claude_managed_agents_protected_tool/tool.py +0 -0
  207. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/examples/credential_broker_infra_delete/__init__.py +0 -0
  208. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/examples/credential_broker_infra_delete/demo.py +0 -0
  209. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/examples/crewai_protected_tool/tool.py +0 -0
  210. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/examples/edge_templates/__init__.py +0 -0
  211. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/examples/edge_templates/_support.py +0 -0
  212. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/examples/edge_templates/ci_cd.py +0 -0
  213. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/examples/edge_templates/cloud.py +0 -0
  214. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/examples/edge_templates/communications.py +0 -0
  215. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/examples/edge_templates/database.py +0 -0
  216. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/examples/edge_templates/http_api.py +0 -0
  217. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/examples/edge_templates/iam.py +0 -0
  218. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/examples/edge_templates/ot.py +0 -0
  219. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/examples/edge_templates/storage.py +0 -0
  220. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/examples/fastapi_protected_route/app.py +0 -0
  221. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/examples/fastapi_resource_boundary_refund/__init__.py +0 -0
  222. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/examples/fastapi_resource_boundary_refund/app.py +0 -0
  223. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/examples/fastapi_resource_boundary_refund/test_resource_boundary_refund.py +0 -0
  224. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/examples/fastapi_verifier_only_refund/__init__.py +0 -0
  225. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/examples/fastapi_verifier_only_refund/app.py +0 -0
  226. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/examples/fastapi_verifier_only_refund/issuer.py +0 -0
  227. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/examples/fastapi_verifier_only_refund/test_verifier_only_refund.py +0 -0
  228. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/examples/fastmcp_financial_transfer/__init__.py +0 -0
  229. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/examples/fastmcp_financial_transfer/mcp_server.py +0 -0
  230. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/examples/fastmcp_financial_transfer/test_fastmcp_financial_transfer.py +0 -0
  231. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/examples/financial_agent_protected_transfer/financial_agent.py +0 -0
  232. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/examples/financial_agent_protected_transfer/test_financial_agent.py +0 -0
  233. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/examples/hello_protected_endpoint/server.py +0 -0
  234. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/examples/hello_world_protected_resource_python/__init__.py +0 -0
  235. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/examples/hello_world_protected_resource_python/protected_resource.py +0 -0
  236. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/examples/integration_support.py +0 -0
  237. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/examples/interactive_execution_demo.py +0 -0
  238. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/examples/invoice_payment_guard_local/__init__.py +0 -0
  239. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/examples/invoice_payment_guard_local/protected_endpoint.py +0 -0
  240. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/examples/langchain_protected_tool/tool.py +0 -0
  241. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/examples/llamaindex_protected_tool/tool.py +0 -0
  242. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/examples/mcp_protected_tool/__init__.py +0 -0
  243. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/examples/mcp_protected_tool/demo.py +0 -0
  244. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/examples/mcp_server_protected_tool/__init__.py +0 -0
  245. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/examples/mcp_server_protected_tool/demo.py +0 -0
  246. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/examples/mcp_server_protected_tool/proof_gate.py +0 -0
  247. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/examples/mcp_server_protected_tool/server.py +0 -0
  248. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/examples/openai_agents_sdk_protected_tool/app.py +0 -0
  249. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/examples/production-reference/client.py +0 -0
  250. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/examples/production-reference/verifier_service.py +0 -0
  251. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/examples/protected_clinical_ehr_agent/protected_clinical_ehr_agent.py +0 -0
  252. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/examples/protected_clinical_ehr_agent/test_protected_clinical_ehr_agent.py +0 -0
  253. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/examples/protected_iam_control_plane/protected_iam_control_plane.py +0 -0
  254. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/examples/protected_iam_control_plane/test_protected_iam_control_plane.py +0 -0
  255. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/examples/protected_langchain_finance_agent/protected_langchain_finance_agent.py +0 -0
  256. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/examples/protected_langchain_finance_agent/test_protected_langchain_finance_agent.py +0 -0
  257. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/examples/protected_multi_agent_swarm/protected_multi_agent_swarm.py +0 -0
  258. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/examples/protected_multi_agent_swarm/test_protected_multi_agent_swarm.py +0 -0
  259. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/examples/protected_policy_preflight_refund/__init__.py +0 -0
  260. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/examples/protected_policy_preflight_refund/policy_preflight_refund.py +0 -0
  261. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/examples/protected_policy_preflight_refund/test_policy_preflight_refund.py +0 -0
  262. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/examples/quickstart_min.py +0 -0
  263. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/examples/refund_guard_local/__init__.py +0 -0
  264. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/examples/refund_guard_local/call_endpoint.py +0 -0
  265. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/examples/refund_guard_local/protected_endpoint.py +0 -0
  266. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/examples/refund_guard_local/server.py +0 -0
  267. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/examples/semantic_kernel_protected_tool/tool.py +0 -0
  268. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/schemas/__init__.py +0 -0
  269. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/schemas/action_intent.v1.json +0 -0
  270. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/schemas/approval_artifact.v1.json +0 -0
  271. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/schemas/issuer_status.v1.json +0 -0
  272. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/schemas/pccb.v1.json +0 -0
  273. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/schemas/receipt.v1.json +0 -0
  274. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/schemas/receipt_attestation.v2alpha1.json +0 -0
  275. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/schemas/receipt_countersignature.v1.json +0 -0
  276. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/schemas/refusal.v1.json +0 -0
  277. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/schemas/refusal_attestation.v2alpha1.json +0 -0
  278. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/schemas/transparency_checkpoint.v1.json +0 -0
  279. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/schemas/transparency_consistency_proof.v1.json +0 -0
  280. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/schemas/transparency_inclusion_proof.v1.json +0 -0
  281. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/setup.cfg +0 -0
  282. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/tests/test_adversarial_rsa_policy_stress_test.py +0 -0
  283. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/tests/test_cloud_optional.py +0 -0
  284. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/tests/test_dx_adoption_fixes.py +0 -0
  285. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/tests/test_independence.py +0 -0
  286. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/tests/test_interactive_execution_demo.py +0 -0
  287. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/tests/test_protocol_drift.py +0 -0
  288. {actenon_kernel-1.0.0 → actenon_kernel-1.2.0}/tests/test_verification_independence.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: actenon-kernel
3
- Version: 1.0.0
3
+ Version: 1.2.0
4
4
  Summary: Open proof-required execution kernel for consequential actions.
5
5
  Author: Ross Buckley
6
6
  License-Expression: Apache-2.0
@@ -20,6 +20,7 @@ Description-Content-Type: text/markdown
20
20
  License-File: LICENSE
21
21
  Requires-Dist: actenon-protocol<2,>=1.1.0
22
22
  Requires-Dist: pyyaml<7,>=6.0
23
+ Requires-Dist: cryptography>=42
23
24
  Provides-Extra: asymmetric
24
25
  Requires-Dist: cryptography>=42; extra == "asymmetric"
25
26
  Provides-Extra: aws
@@ -42,6 +43,8 @@ Dynamic: license-file
42
43
 
43
44
  # Actenon Kernel
44
45
 
46
+ <!-- mcp-name: io.github.actenon/kernel -->
47
+
45
48
  > The open verifier for proof-bound consequential execution. Defines what a valid proof is. Verifies proofs at the execution edge; issues no grants; runs no policy decisions.
46
49
 
47
50
  [![License: Apache-2.0](https://img.shields.io/badge/License-Apache--2.0-blue.svg)](LICENSE)
@@ -55,11 +58,41 @@ Dynamic: license-file
55
58
  [![SDKs: Py · TS · Go · Rust](https://img.shields.io/badge/SDKs-Py%20%C2%B7%20TS%20%C2%B7%20Go%20%C2%B7%20Rust-orange.svg)](docs/SDK_SELECTION_GUIDE.md)
56
59
  [![CI](https://github.com/Actenon/actenon-kernel/actions/workflows/ci.yml/badge.svg)](https://github.com/Actenon/actenon-kernel/actions/workflows/ci.yml)
57
60
  [![Invariants](https://github.com/Actenon/actenon-kernel/actions/workflows/invariants.yml/badge.svg)](https://github.com/Actenon/actenon-kernel/actions/workflows/invariants.yml)
61
+ [![claims: machine-verified](https://img.shields.io/github/actions/workflow/status/Actenon/actenon-kernel/verify-claims.yml?branch=main&label=claims%3A%20machine-verified)](https://github.com/Actenon/actenon-kernel/actions/workflows/verify-claims.yml)
62
+ [![MCP server](https://img.shields.io/badge/MCP-connectable%20server-8A2BE2.svg)](docs/integrations/MCP_QUICKSTART.md)
58
63
  [![Code style: ruff](https://img.shields.io/badge/Code%20style-ruff-black.svg)](https://docs.astral.sh/ruff/)
59
64
  [![No runtime cloud dependency](https://img.shields.io/badge/Runtime-no%20cloud%20calls-2ea44f.svg)](#independence)
60
65
  [![Offline verification](https://img.shields.io/badge/Verify-offline%20capable-2ea44f.svg)](tests/test_neutrality.py)
61
66
  [![Kernel independence](https://img.shields.io/badge/Deps-kernel%20independent-2ea44f.svg)](tests/test_independence.py)
62
67
 
68
+ ### Every claim above is machine-verified
69
+
70
+ The `claims: machine-verified` badge links to a CI gate
71
+ ([`verify-claims.yml`](.github/workflows/verify-claims.yml)) that fails on
72
+ every PR, push to `main`, and once a day if any factual claim this README
73
+ makes about the kernel stops being true:
74
+
75
+ - **Zero network calls during verification** — [`tests/test_neutrality.py`](tests/test_neutrality.py)
76
+ runs in the gate, not just behind a badge link.
77
+ - **Runs without Permit, Cloud, or Scan** — [`tests/test_independence.py`](tests/test_independence.py),
78
+ plus a source scan proving the kernel never imports Cloud or Permit, plus
79
+ [`scripts/assert_dep_direction.py`](scripts/assert_dep_direction.py)
80
+ (runtime deps are exactly `actenon-protocol`).
81
+ - **The conformance count** — "51 conformance vectors" is compared against
82
+ what `actenon-kernel conformance run` actually executes; the vector files
83
+ themselves are hash-locked by
84
+ [`scripts/verify_conformance_manifest.py`](scripts/verify_conformance_manifest.py).
85
+ - **Install commands** — every `pip install` in this README is resolved
86
+ against the live registry; the Python badge is generated, not hand-edited.
87
+ - **The ecosystem table** — rendered from the protocol's `ecosystem.yaml`,
88
+ never hand-edited.
89
+
90
+ The [Invariants](.github/workflows/invariants.yml) workflow additionally
91
+ proves on every PR that a clean, no-extras install verifies the full
92
+ conformance surface — 33/33 tests, zero skips — including Ed25519.
93
+
94
+ If a claim drifts, the badge goes red before a human notices.
95
+
63
96
  ---
64
97
 
65
98
  ## The Actenon ecosystem
@@ -189,10 +222,44 @@ For deployments that need portable cryptographic attestation of origin, the Kern
189
222
  Python 3.10+ for the Kernel alone. The full stack including Permit requires 3.11+.
190
223
 
191
224
  ```bash
192
- pip install actenon-kernel # core verifier (pure Python, no asymmetric extra)
193
- pip install "actenon-kernel[asymmetric]" # Ed25519 + Outcome Attestation verification
225
+ pip install actenon-kernel # full verifier: HMAC and Ed25519
226
+ ```
227
+
228
+ Since 1.1.0 the base install verifies everything the ecosystem produces,
229
+ including Ed25519 proofs and Outcome Attestations. (The `[asymmetric]` extra
230
+ still resolves for backward compatibility; it installs nothing additional.)
231
+
232
+ ## Connect it to an agent (MCP, 60 seconds, zero install)
233
+
234
+ The Kernel ships a runnable MCP server, so a model can ask it whether an
235
+ action is allowed *before* the action runs — and read back exactly why it was
236
+ refused. Paste this into any MCP client (Claude Desktop, ChatGPT, or anything
237
+ else that speaks MCP):
238
+
239
+ ```json
240
+ {
241
+ "mcpServers": {
242
+ "actenon": {
243
+ "command": "uvx",
244
+ "args": ["--from", "actenon-kernel[mcp]", "actenon-mcp", "--demo"]
245
+ }
246
+ }
247
+ }
194
248
  ```
195
249
 
250
+ `uvx` fetches and runs it — nothing to install first. `--demo` runs offline
251
+ with an ephemeral key and in-memory state; it is clearly marked **DEMO MODE**
252
+ in every tool description and must not be used in production.
253
+
254
+ Three tools: `actenon_verify` (is this proof good for this exact action?),
255
+ `actenon_gate` (ALLOW or a typed refusal), `actenon_receipt` (the
256
+ hash-chained receipt for a prior decision). Every refusal carries both the
257
+ machine code and the human-readable reason.
258
+
259
+ Full walkthrough, including a real transcript of an agent being refused for
260
+ widening a refund and then succeeding within scope:
261
+ [`docs/integrations/MCP_QUICKSTART.md`](docs/integrations/MCP_QUICKSTART.md).
262
+
196
263
  ## Use as a verifier (resource boundary)
197
264
 
198
265
  ```python
@@ -235,7 +302,7 @@ result = verifier.verify_boundary(BoundaryVerificationRequest(
235
302
  ## Use as a minter + executor (brokered mode, full local proof)
236
303
 
237
304
  ```bash
238
- python3 -m pip install -e ".[asymmetric]"
305
+ python3 -m pip install -e .
239
306
  python3 -m actenon.cli up
240
307
  python3 -m actenon.cli doctor
241
308
  python3 -m actenon.cli simulate --incident replit
@@ -1,5 +1,7 @@
1
1
  # Actenon Kernel
2
2
 
3
+ <!-- mcp-name: io.github.actenon/kernel -->
4
+
3
5
  > The open verifier for proof-bound consequential execution. Defines what a valid proof is. Verifies proofs at the execution edge; issues no grants; runs no policy decisions.
4
6
 
5
7
  [![License: Apache-2.0](https://img.shields.io/badge/License-Apache--2.0-blue.svg)](LICENSE)
@@ -13,11 +15,41 @@
13
15
  [![SDKs: Py · TS · Go · Rust](https://img.shields.io/badge/SDKs-Py%20%C2%B7%20TS%20%C2%B7%20Go%20%C2%B7%20Rust-orange.svg)](docs/SDK_SELECTION_GUIDE.md)
14
16
  [![CI](https://github.com/Actenon/actenon-kernel/actions/workflows/ci.yml/badge.svg)](https://github.com/Actenon/actenon-kernel/actions/workflows/ci.yml)
15
17
  [![Invariants](https://github.com/Actenon/actenon-kernel/actions/workflows/invariants.yml/badge.svg)](https://github.com/Actenon/actenon-kernel/actions/workflows/invariants.yml)
18
+ [![claims: machine-verified](https://img.shields.io/github/actions/workflow/status/Actenon/actenon-kernel/verify-claims.yml?branch=main&label=claims%3A%20machine-verified)](https://github.com/Actenon/actenon-kernel/actions/workflows/verify-claims.yml)
19
+ [![MCP server](https://img.shields.io/badge/MCP-connectable%20server-8A2BE2.svg)](docs/integrations/MCP_QUICKSTART.md)
16
20
  [![Code style: ruff](https://img.shields.io/badge/Code%20style-ruff-black.svg)](https://docs.astral.sh/ruff/)
17
21
  [![No runtime cloud dependency](https://img.shields.io/badge/Runtime-no%20cloud%20calls-2ea44f.svg)](#independence)
18
22
  [![Offline verification](https://img.shields.io/badge/Verify-offline%20capable-2ea44f.svg)](tests/test_neutrality.py)
19
23
  [![Kernel independence](https://img.shields.io/badge/Deps-kernel%20independent-2ea44f.svg)](tests/test_independence.py)
20
24
 
25
+ ### Every claim above is machine-verified
26
+
27
+ The `claims: machine-verified` badge links to a CI gate
28
+ ([`verify-claims.yml`](.github/workflows/verify-claims.yml)) that fails on
29
+ every PR, push to `main`, and once a day if any factual claim this README
30
+ makes about the kernel stops being true:
31
+
32
+ - **Zero network calls during verification** — [`tests/test_neutrality.py`](tests/test_neutrality.py)
33
+ runs in the gate, not just behind a badge link.
34
+ - **Runs without Permit, Cloud, or Scan** — [`tests/test_independence.py`](tests/test_independence.py),
35
+ plus a source scan proving the kernel never imports Cloud or Permit, plus
36
+ [`scripts/assert_dep_direction.py`](scripts/assert_dep_direction.py)
37
+ (runtime deps are exactly `actenon-protocol`).
38
+ - **The conformance count** — "51 conformance vectors" is compared against
39
+ what `actenon-kernel conformance run` actually executes; the vector files
40
+ themselves are hash-locked by
41
+ [`scripts/verify_conformance_manifest.py`](scripts/verify_conformance_manifest.py).
42
+ - **Install commands** — every `pip install` in this README is resolved
43
+ against the live registry; the Python badge is generated, not hand-edited.
44
+ - **The ecosystem table** — rendered from the protocol's `ecosystem.yaml`,
45
+ never hand-edited.
46
+
47
+ The [Invariants](.github/workflows/invariants.yml) workflow additionally
48
+ proves on every PR that a clean, no-extras install verifies the full
49
+ conformance surface — 33/33 tests, zero skips — including Ed25519.
50
+
51
+ If a claim drifts, the badge goes red before a human notices.
52
+
21
53
  ---
22
54
 
23
55
  ## The Actenon ecosystem
@@ -147,10 +179,44 @@ For deployments that need portable cryptographic attestation of origin, the Kern
147
179
  Python 3.10+ for the Kernel alone. The full stack including Permit requires 3.11+.
148
180
 
149
181
  ```bash
150
- pip install actenon-kernel # core verifier (pure Python, no asymmetric extra)
151
- pip install "actenon-kernel[asymmetric]" # Ed25519 + Outcome Attestation verification
182
+ pip install actenon-kernel # full verifier: HMAC and Ed25519
183
+ ```
184
+
185
+ Since 1.1.0 the base install verifies everything the ecosystem produces,
186
+ including Ed25519 proofs and Outcome Attestations. (The `[asymmetric]` extra
187
+ still resolves for backward compatibility; it installs nothing additional.)
188
+
189
+ ## Connect it to an agent (MCP, 60 seconds, zero install)
190
+
191
+ The Kernel ships a runnable MCP server, so a model can ask it whether an
192
+ action is allowed *before* the action runs — and read back exactly why it was
193
+ refused. Paste this into any MCP client (Claude Desktop, ChatGPT, or anything
194
+ else that speaks MCP):
195
+
196
+ ```json
197
+ {
198
+ "mcpServers": {
199
+ "actenon": {
200
+ "command": "uvx",
201
+ "args": ["--from", "actenon-kernel[mcp]", "actenon-mcp", "--demo"]
202
+ }
203
+ }
204
+ }
152
205
  ```
153
206
 
207
+ `uvx` fetches and runs it — nothing to install first. `--demo` runs offline
208
+ with an ephemeral key and in-memory state; it is clearly marked **DEMO MODE**
209
+ in every tool description and must not be used in production.
210
+
211
+ Three tools: `actenon_verify` (is this proof good for this exact action?),
212
+ `actenon_gate` (ALLOW or a typed refusal), `actenon_receipt` (the
213
+ hash-chained receipt for a prior decision). Every refusal carries both the
214
+ machine code and the human-readable reason.
215
+
216
+ Full walkthrough, including a real transcript of an agent being refused for
217
+ widening a refund and then succeeding within scope:
218
+ [`docs/integrations/MCP_QUICKSTART.md`](docs/integrations/MCP_QUICKSTART.md).
219
+
154
220
  ## Use as a verifier (resource boundary)
155
221
 
156
222
  ```python
@@ -193,7 +259,7 @@ result = verifier.verify_boundary(BoundaryVerificationRequest(
193
259
  ## Use as a minter + executor (brokered mode, full local proof)
194
260
 
195
261
  ```bash
196
- python3 -m pip install -e ".[asymmetric]"
262
+ python3 -m pip install -e .
197
263
  python3 -m actenon.cli up
198
264
  python3 -m actenon.cli doctor
199
265
  python3 -m actenon.cli simulate --incident replit
@@ -313,9 +313,11 @@ def _print_simulation_report(*, args: argparse.Namespace, report) -> None:
313
313
  print(f" Artifacts: {result['artifact_dir']}")
314
314
  if result.get("summary_path") is not None:
315
315
  print(f" Incident summary: {result['summary_path']}")
316
- if result["refusal_code"] is not None:
316
+ # Incident results carry a different shape than scenario results
317
+ # and may omit these keys entirely.
318
+ if result.get("refusal_code") is not None:
317
319
  print(f" Refusal code: {result['refusal_code']}")
318
- if result["receipt_id"] is not None:
320
+ if result.get("receipt_id") is not None:
319
321
  print(f" Receipt: {result['receipt_id']}")
320
322
  if result.get("perspectives"):
321
323
  print(" Perspectives:")
@@ -27,7 +27,7 @@ def _load(relative_path: str) -> dict[str, object]:
27
27
 
28
28
  @unittest.skipUnless(
29
29
  find_spec("cryptography") is not None,
30
- "receipt counter-signature conformance requires the 'asymmetric' extra",
30
+ "receipt counter-signature conformance requires the 'cryptography' package (a base dependency since 1.1.0)",
31
31
  )
32
32
  class CounterSignatureConformanceTests(unittest.TestCase):
33
33
  def test_valid_historical_kid_verifies_offline(self) -> None:
@@ -32,7 +32,7 @@ def _load(relative_path: str) -> dict[str, object]:
32
32
 
33
33
  @unittest.skipUnless(
34
34
  find_spec("cryptography") is not None,
35
- "transparency-log conformance requires the 'asymmetric' extra",
35
+ "transparency-log conformance requires the 'cryptography' package (a base dependency since 1.1.0)",
36
36
  )
37
37
  class TransparencyLogConformanceTests(unittest.TestCase):
38
38
  def test_checkpoint_rotation_inclusion_and_consistency_verify_offline(self) -> None:
@@ -30,7 +30,7 @@ def _load(relative_path: str) -> dict[str, object]:
30
30
 
31
31
  @unittest.skipUnless(
32
32
  find_spec("cryptography") is not None,
33
- "trust-artifact conformance requires the 'asymmetric' extra",
33
+ "trust-artifact conformance requires the 'cryptography' package (a base dependency since 1.1.0)",
34
34
  )
35
35
  class TrustArtifactConformanceTests(unittest.TestCase):
36
36
  def test_good_status_and_exact_action_approval_verify(self) -> None:
@@ -1,6 +1,7 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import base64
4
+ import gc
4
5
  import hashlib
5
6
  import json
6
7
  import shutil
@@ -2740,6 +2741,32 @@ def _simulate_replay_refused(scenario_dir: Path) -> SimulationScenarioResult:
2740
2741
  )
2741
2742
 
2742
2743
 
2744
+ def _stabilize_sqlite_state(paths: LocalRuntimePaths) -> None:
2745
+ """Settle SQLite files under the runtime root before they are hashed.
2746
+
2747
+ Replay stores may hold connections whose WAL content is checkpointed
2748
+ into the main database file only when the connection is finalized —
2749
+ which CPython may do at any point, including between the manifest
2750
+ hash pass and the archive write. That produces a bundle whose
2751
+ ``*.sqlite3`` bytes no longer match the manifest ("File hash
2752
+ mismatch: .../replay.sqlite3"). Collect garbage so lingering
2753
+ connections close now, then force a TRUNCATE checkpoint so every
2754
+ database file is complete and byte-stable before hashing.
2755
+ """
2756
+ gc.collect()
2757
+ for db_path in sorted(paths.root.rglob("*.sqlite3")):
2758
+ try:
2759
+ connection = sqlite3.connect(db_path)
2760
+ try:
2761
+ connection.execute("PRAGMA wal_checkpoint(TRUNCATE);")
2762
+ finally:
2763
+ connection.close()
2764
+ except sqlite3.Error:
2765
+ # A corrupt or locked database is the verifier's finding to
2766
+ # report, not the exporter's to mask — hash whatever is there.
2767
+ continue
2768
+
2769
+
2743
2770
  def export_local_runtime_bundle(
2744
2771
  runtime_dir: str | Path | None = None,
2745
2772
  *,
@@ -2760,6 +2787,7 @@ def export_local_runtime_bundle(
2760
2787
  raise ValueError(f"bundle output already exists at {target}; pass --force to replace it")
2761
2788
  _ensure_removed(target)
2762
2789
 
2790
+ _stabilize_sqlite_state(paths)
2763
2791
  bundle_manifest = _build_bundle_manifest(paths)
2764
2792
 
2765
2793
  target.parent.mkdir(parents=True, exist_ok=True)