satroot 3.0.1__tar.gz → 3.0.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (237) hide show
  1. {satroot-3.0.1/src/satroot.egg-info → satroot-3.0.2}/PKG-INFO +1 -1
  2. {satroot-3.0.1 → satroot-3.0.2}/pyproject.toml +1 -1
  3. {satroot-3.0.1 → satroot-3.0.2/src/satroot.egg-info}/PKG-INFO +1 -1
  4. {satroot-3.0.1 → satroot-3.0.2}/src/satroot_export.py +29 -8
  5. {satroot-3.0.1 → satroot-3.0.2}/tests/test_export_verifier.py +56 -0
  6. {satroot-3.0.1 → satroot-3.0.2}/LICENSE +0 -0
  7. {satroot-3.0.1 → satroot-3.0.2}/NOTICE +0 -0
  8. {satroot-3.0.1 → satroot-3.0.2}/README.md +0 -0
  9. {satroot-3.0.1 → satroot-3.0.2}/examples/README.md +0 -0
  10. {satroot-3.0.1 → satroot-3.0.2}/examples/__init__.py +0 -0
  11. {satroot-3.0.1 → satroot-3.0.2}/examples/bundle_index_presets/ai_compute_bundle_index.json +0 -0
  12. {satroot-3.0.1 → satroot-3.0.2}/examples/bundle_index_presets/ai_compute_bundle_index_collection_backed.json +0 -0
  13. {satroot-3.0.1 → satroot-3.0.2}/examples/bundle_index_presets/machine_compute_bundle_index.json +0 -0
  14. {satroot-3.0.1 → satroot-3.0.2}/examples/bundle_index_presets/machine_compute_bundle_index_collection_backed.json +0 -0
  15. {satroot-3.0.1 → satroot-3.0.2}/examples/bundle_index_presets/stable_reference_bundle_index.json +0 -0
  16. {satroot-3.0.1 → satroot-3.0.2}/examples/bundle_index_presets/stable_reference_bundle_index_collection_backed.json +0 -0
  17. {satroot-3.0.1 → satroot-3.0.2}/examples/catalog_presets/ai_compute_catalog.json +0 -0
  18. {satroot-3.0.1 → satroot-3.0.2}/examples/catalog_presets/ai_compute_catalog_collection_backed.json +0 -0
  19. {satroot-3.0.1 → satroot-3.0.2}/examples/catalog_presets/event_stream_catalog.json +0 -0
  20. {satroot-3.0.1 → satroot-3.0.2}/examples/catalog_presets/identity_authority_catalog.json +0 -0
  21. {satroot-3.0.1 → satroot-3.0.2}/examples/catalog_presets/identity_authority_catalog_collection_backed.json +0 -0
  22. {satroot-3.0.1 → satroot-3.0.2}/examples/catalog_presets/license_usage_catalog.json +0 -0
  23. {satroot-3.0.1 → satroot-3.0.2}/examples/catalog_presets/license_usage_catalog_collection_backed.json +0 -0
  24. {satroot-3.0.1 → satroot-3.0.2}/examples/catalog_presets/machine_compute_catalog.json +0 -0
  25. {satroot-3.0.1 → satroot-3.0.2}/examples/catalog_presets/machine_compute_catalog_collection_backed.json +0 -0
  26. {satroot-3.0.1 → satroot-3.0.2}/examples/catalog_presets/receipt_invoice_catalog.json +0 -0
  27. {satroot-3.0.1 → satroot-3.0.2}/examples/catalog_presets/receipt_invoice_catalog_collection_backed.json +0 -0
  28. {satroot-3.0.1 → satroot-3.0.2}/examples/catalog_presets/stable_reference_catalog.json +0 -0
  29. {satroot-3.0.1 → satroot-3.0.2}/examples/catalog_presets/stable_reference_catalog_collection_backed.json +0 -0
  30. {satroot-3.0.1 → satroot-3.0.2}/examples/events_apicredit1.json +0 -0
  31. {satroot-3.0.1 → satroot-3.0.2}/examples/events_event1.json +0 -0
  32. {satroot-3.0.1 → satroot-3.0.2}/examples/events_floor1.json +0 -0
  33. {satroot-3.0.1 → satroot-3.0.2}/examples/events_identity1.json +0 -0
  34. {satroot-3.0.1 → satroot-3.0.2}/examples/events_license1.json +0 -0
  35. {satroot-3.0.1 → satroot-3.0.2}/examples/events_receipt1.json +0 -0
  36. {satroot-3.0.1 → satroot-3.0.2}/examples/events_usdroot1.json +0 -0
  37. {satroot-3.0.1 → satroot-3.0.2}/examples/genesis_apicredit1.json +0 -0
  38. {satroot-3.0.1 → satroot-3.0.2}/examples/genesis_event1.json +0 -0
  39. {satroot-3.0.1 → satroot-3.0.2}/examples/genesis_floor1.json +0 -0
  40. {satroot-3.0.1 → satroot-3.0.2}/examples/genesis_identity1.json +0 -0
  41. {satroot-3.0.1 → satroot-3.0.2}/examples/genesis_license1.json +0 -0
  42. {satroot-3.0.1 → satroot-3.0.2}/examples/genesis_receipt1.json +0 -0
  43. {satroot-3.0.1 → satroot-3.0.2}/examples/genesis_usdroot1.json +0 -0
  44. {satroot-3.0.1 → satroot-3.0.2}/examples/network_presets/ai_compute_publication_network.json +0 -0
  45. {satroot-3.0.1 → satroot-3.0.2}/examples/network_presets/ai_compute_publication_network_collection_backed.json +0 -0
  46. {satroot-3.0.1 → satroot-3.0.2}/examples/network_presets/ai_compute_publication_network_publish.json +0 -0
  47. {satroot-3.0.1 → satroot-3.0.2}/examples/network_presets/machine_compute_publication_network.json +0 -0
  48. {satroot-3.0.1 → satroot-3.0.2}/examples/network_presets/machine_compute_publication_network_collection_backed.json +0 -0
  49. {satroot-3.0.1 → satroot-3.0.2}/examples/network_presets/machine_compute_publication_network_publish.json +0 -0
  50. {satroot-3.0.1 → satroot-3.0.2}/examples/network_presets/stable_reference_publication_network.json +0 -0
  51. {satroot-3.0.1 → satroot-3.0.2}/examples/network_presets/stable_reference_publication_network_collection_backed.json +0 -0
  52. {satroot-3.0.1 → satroot-3.0.2}/examples/publication_catalog_workspace_presets/ai_compute_publication_catalog_workspace.json +0 -0
  53. {satroot-3.0.1 → satroot-3.0.2}/examples/publication_catalog_workspace_presets/ai_compute_publication_catalog_workspace_collection_backed.json +0 -0
  54. {satroot-3.0.1 → satroot-3.0.2}/examples/publication_catalog_workspace_presets/machine_compute_publication_catalog_workspace.json +0 -0
  55. {satroot-3.0.1 → satroot-3.0.2}/examples/publication_catalog_workspace_presets/machine_compute_publication_catalog_workspace_collection_backed.json +0 -0
  56. {satroot-3.0.1 → satroot-3.0.2}/examples/publication_catalog_workspace_presets/stable_reference_publication_catalog_workspace.json +0 -0
  57. {satroot-3.0.1 → satroot-3.0.2}/examples/publication_catalog_workspace_presets/stable_reference_publication_catalog_workspace_collection_backed.json +0 -0
  58. {satroot-3.0.1 → satroot-3.0.2}/examples/publication_descriptor_index_presets/ai_compute_publication_descriptor_index.json +0 -0
  59. {satroot-3.0.1 → satroot-3.0.2}/examples/publication_descriptor_index_presets/machine_compute_publication_descriptor_index.json +0 -0
  60. {satroot-3.0.1 → satroot-3.0.2}/examples/publication_descriptor_index_presets/stable_reference_publication_descriptor_index.json +0 -0
  61. {satroot-3.0.1 → satroot-3.0.2}/examples/publication_metadata_catalog_presets/ai_compute_publication_metadata_catalog.json +0 -0
  62. {satroot-3.0.1 → satroot-3.0.2}/examples/publication_metadata_catalog_presets/ai_compute_publication_metadata_catalog_collection_backed.json +0 -0
  63. {satroot-3.0.1 → satroot-3.0.2}/examples/publication_metadata_catalog_presets/machine_compute_publication_metadata_catalog.json +0 -0
  64. {satroot-3.0.1 → satroot-3.0.2}/examples/publication_metadata_catalog_presets/machine_compute_publication_metadata_catalog_collection_backed.json +0 -0
  65. {satroot-3.0.1 → satroot-3.0.2}/examples/publication_metadata_catalog_presets/stable_reference_publication_metadata_catalog.json +0 -0
  66. {satroot-3.0.1 → satroot-3.0.2}/examples/publication_metadata_catalog_presets/stable_reference_publication_metadata_catalog_collection_backed.json +0 -0
  67. {satroot-3.0.1 → satroot-3.0.2}/examples/registry_presets/ai_compute_publication_registry.json +0 -0
  68. {satroot-3.0.1 → satroot-3.0.2}/examples/registry_presets/ai_compute_publication_registry_collection_backed.json +0 -0
  69. {satroot-3.0.1 → satroot-3.0.2}/examples/registry_presets/ai_compute_publication_registry_workspace_backed.json +0 -0
  70. {satroot-3.0.1 → satroot-3.0.2}/examples/registry_presets/ai_compute_publication_registry_workspace_catalog_release_collection_backed.json +0 -0
  71. {satroot-3.0.1 → satroot-3.0.2}/examples/registry_presets/identity_authority_publication_registry_workspace_catalog_release_collection_backed.json +0 -0
  72. {satroot-3.0.1 → satroot-3.0.2}/examples/registry_presets/license_usage_publication_registry_workspace_catalog_release_collection_backed.json +0 -0
  73. {satroot-3.0.1 → satroot-3.0.2}/examples/registry_presets/machine_compute_publication_registry.json +0 -0
  74. {satroot-3.0.1 → satroot-3.0.2}/examples/registry_presets/machine_compute_publication_registry_collection_backed.json +0 -0
  75. {satroot-3.0.1 → satroot-3.0.2}/examples/registry_presets/machine_compute_publication_registry_workspace_backed.json +0 -0
  76. {satroot-3.0.1 → satroot-3.0.2}/examples/registry_presets/machine_compute_publication_registry_workspace_catalog_release_collection_backed.json +0 -0
  77. {satroot-3.0.1 → satroot-3.0.2}/examples/registry_presets/receipt_invoice_publication_registry_workspace_catalog_release_collection_backed.json +0 -0
  78. {satroot-3.0.1 → satroot-3.0.2}/examples/registry_presets/stable_reference_publication_registry.json +0 -0
  79. {satroot-3.0.1 → satroot-3.0.2}/examples/registry_presets/stable_reference_publication_registry_collection_backed.json +0 -0
  80. {satroot-3.0.1 → satroot-3.0.2}/examples/registry_presets/stable_reference_publication_registry_workspace_backed.json +0 -0
  81. {satroot-3.0.1 → satroot-3.0.2}/examples/registry_presets/stable_reference_publication_registry_workspace_catalog_release_collection_backed.json +0 -0
  82. {satroot-3.0.1 → satroot-3.0.2}/examples/registry_workspace_presets/ai_compute_publication_registry_workspace.json +0 -0
  83. {satroot-3.0.1 → satroot-3.0.2}/examples/registry_workspace_presets/ai_compute_publication_registry_workspace_catalog_release_collection_backed.json +0 -0
  84. {satroot-3.0.1 → satroot-3.0.2}/examples/registry_workspace_presets/ai_compute_publication_registry_workspace_collection_backed.json +0 -0
  85. {satroot-3.0.1 → satroot-3.0.2}/examples/registry_workspace_presets/identity_authority_publication_registry_workspace_catalog_release_collection_backed.json +0 -0
  86. {satroot-3.0.1 → satroot-3.0.2}/examples/registry_workspace_presets/license_usage_publication_registry_workspace_catalog_release_collection_backed.json +0 -0
  87. {satroot-3.0.1 → satroot-3.0.2}/examples/registry_workspace_presets/machine_compute_publication_registry_workspace.json +0 -0
  88. {satroot-3.0.1 → satroot-3.0.2}/examples/registry_workspace_presets/machine_compute_publication_registry_workspace_catalog_release_collection_backed.json +0 -0
  89. {satroot-3.0.1 → satroot-3.0.2}/examples/registry_workspace_presets/machine_compute_publication_registry_workspace_collection_backed.json +0 -0
  90. {satroot-3.0.1 → satroot-3.0.2}/examples/registry_workspace_presets/receipt_invoice_publication_registry_workspace_catalog_release_collection_backed.json +0 -0
  91. {satroot-3.0.1 → satroot-3.0.2}/examples/registry_workspace_presets/stable_reference_publication_registry_workspace.json +0 -0
  92. {satroot-3.0.1 → satroot-3.0.2}/examples/registry_workspace_presets/stable_reference_publication_registry_workspace_catalog_release_collection_backed.json +0 -0
  93. {satroot-3.0.1 → satroot-3.0.2}/examples/registry_workspace_presets/stable_reference_publication_registry_workspace_collection_backed.json +0 -0
  94. {satroot-3.0.1 → satroot-3.0.2}/examples/release_catalog_index_presets/ai_compute_catalog_network.json +0 -0
  95. {satroot-3.0.1 → satroot-3.0.2}/examples/release_catalog_index_presets/ai_compute_catalog_network_collection_backed.json +0 -0
  96. {satroot-3.0.1 → satroot-3.0.2}/examples/release_catalog_index_presets/machine_compute_catalog_network.json +0 -0
  97. {satroot-3.0.1 → satroot-3.0.2}/examples/release_catalog_index_presets/machine_compute_catalog_network_collection_backed.json +0 -0
  98. {satroot-3.0.1 → satroot-3.0.2}/examples/release_catalog_index_presets/stable_reference_catalog_network.json +0 -0
  99. {satroot-3.0.1 → satroot-3.0.2}/examples/release_catalog_index_presets/stable_reference_catalog_network_collection_backed.json +0 -0
  100. {satroot-3.0.1 → satroot-3.0.2}/examples/release_catalog_presets/ai_compute_release_stack.json +0 -0
  101. {satroot-3.0.1 → satroot-3.0.2}/examples/release_catalog_presets/ai_compute_release_stack_collection_backed.json +0 -0
  102. {satroot-3.0.1 → satroot-3.0.2}/examples/release_catalog_presets/machine_compute_release_stack.json +0 -0
  103. {satroot-3.0.1 → satroot-3.0.2}/examples/release_catalog_presets/machine_compute_release_stack_collection_backed.json +0 -0
  104. {satroot-3.0.1 → satroot-3.0.2}/examples/release_catalog_presets/stable_reference_release_stack.json +0 -0
  105. {satroot-3.0.1 → satroot-3.0.2}/examples/release_catalog_presets/stable_reference_release_stack_collection_backed.json +0 -0
  106. {satroot-3.0.1 → satroot-3.0.2}/examples/stack_presets/ai_compute_publication_stack.json +0 -0
  107. {satroot-3.0.1 → satroot-3.0.2}/examples/stack_presets/ai_compute_publication_stack_collection_backed.json +0 -0
  108. {satroot-3.0.1 → satroot-3.0.2}/examples/stack_presets/ai_compute_publication_stack_publish.json +0 -0
  109. {satroot-3.0.1 → satroot-3.0.2}/examples/stack_presets/machine_compute_publication_stack.json +0 -0
  110. {satroot-3.0.1 → satroot-3.0.2}/examples/stack_presets/machine_compute_publication_stack_collection_backed.json +0 -0
  111. {satroot-3.0.1 → satroot-3.0.2}/examples/stack_presets/machine_compute_publication_stack_publish.json +0 -0
  112. {satroot-3.0.1 → satroot-3.0.2}/examples/stack_presets/stable_reference_publication_stack.json +0 -0
  113. {satroot-3.0.1 → satroot-3.0.2}/examples/stack_presets/stable_reference_publication_stack_collection_backed.json +0 -0
  114. {satroot-3.0.1 → satroot-3.0.2}/protocol/__init__.py +0 -0
  115. {satroot-3.0.1 → satroot-3.0.2}/protocol/satroot1.bundle-index.schema.json +0 -0
  116. {satroot-3.0.1 → satroot-3.0.2}/protocol/satroot1.bundle-manifest.schema.json +0 -0
  117. {satroot-3.0.1 → satroot-3.0.2}/protocol/satroot1.demo-catalog-summary.schema.json +0 -0
  118. {satroot-3.0.1 → satroot-3.0.2}/protocol/satroot1.profile-registry.json +0 -0
  119. {satroot-3.0.1 → satroot-3.0.2}/protocol/satroot1.publication-descriptor-index-manifest.schema.json +0 -0
  120. {satroot-3.0.1 → satroot-3.0.2}/protocol/satroot1.publication-descriptor-index.schema.json +0 -0
  121. {satroot-3.0.1 → satroot-3.0.2}/protocol/satroot1.publication-metadata-catalog-manifest.schema.json +0 -0
  122. {satroot-3.0.1 → satroot-3.0.2}/protocol/satroot1.publication-metadata-catalog.schema.json +0 -0
  123. {satroot-3.0.1 → satroot-3.0.2}/protocol/satroot1.publication-metadata-manifest.schema.json +0 -0
  124. {satroot-3.0.1 → satroot-3.0.2}/protocol/satroot1.publication-network-summary.schema.json +0 -0
  125. {satroot-3.0.1 → satroot-3.0.2}/protocol/satroot1.publication-registry-manifest.schema.json +0 -0
  126. {satroot-3.0.1 → satroot-3.0.2}/protocol/satroot1.publication-registry.schema.json +0 -0
  127. {satroot-3.0.1 → satroot-3.0.2}/protocol/satroot1.publication-stack-summary.schema.json +0 -0
  128. {satroot-3.0.1 → satroot-3.0.2}/protocol/satroot1.release-catalog-index-manifest.schema.json +0 -0
  129. {satroot-3.0.1 → satroot-3.0.2}/protocol/satroot1.release-catalog-index.schema.json +0 -0
  130. {satroot-3.0.1 → satroot-3.0.2}/protocol/satroot1.release-catalog-manifest.schema.json +0 -0
  131. {satroot-3.0.1 → satroot-3.0.2}/protocol/satroot1.release-catalog.schema.json +0 -0
  132. {satroot-3.0.1 → satroot-3.0.2}/protocol/satroot1.release-manifest.schema.json +0 -0
  133. {satroot-3.0.1 → satroot-3.0.2}/protocol/satroot1.schema.json +0 -0
  134. {satroot-3.0.1 → satroot-3.0.2}/setup.cfg +0 -0
  135. {satroot-3.0.1 → satroot-3.0.2}/src/satroot.egg-info/SOURCES.txt +0 -0
  136. {satroot-3.0.1 → satroot-3.0.2}/src/satroot.egg-info/dependency_links.txt +0 -0
  137. {satroot-3.0.1 → satroot-3.0.2}/src/satroot.egg-info/entry_points.txt +0 -0
  138. {satroot-3.0.1 → satroot-3.0.2}/src/satroot.egg-info/requires.txt +0 -0
  139. {satroot-3.0.1 → satroot-3.0.2}/src/satroot.egg-info/top_level.txt +0 -0
  140. {satroot-3.0.1 → satroot-3.0.2}/src/satroot1.py +0 -0
  141. {satroot-3.0.1 → satroot-3.0.2}/src/satroot_anchored_demo_smoke.py +0 -0
  142. {satroot-3.0.1 → satroot-3.0.2}/src/satroot_anchored_publication_smoke.py +0 -0
  143. {satroot-3.0.1 → satroot-3.0.2}/src/satroot_collection_lint.py +0 -0
  144. {satroot-3.0.1 → satroot-3.0.2}/src/satroot_commitment.py +0 -0
  145. {satroot-3.0.1 → satroot-3.0.2}/src/satroot_cose.py +0 -0
  146. {satroot-3.0.1 → satroot-3.0.2}/src/satroot_demo_bundle_index_matrix_smoke.py +0 -0
  147. {satroot-3.0.1 → satroot-3.0.2}/src/satroot_demo_release_catalog_index_matrix_smoke.py +0 -0
  148. {satroot-3.0.1 → satroot-3.0.2}/src/satroot_demo_release_catalog_matrix_smoke.py +0 -0
  149. {satroot-3.0.1 → satroot-3.0.2}/src/satroot_envelope_verification_smoke.py +0 -0
  150. {satroot-3.0.1 → satroot-3.0.2}/src/satroot_event_profile_smoke.py +0 -0
  151. {satroot-3.0.1 → satroot-3.0.2}/src/satroot_federated_registry_collection_smoke.py +0 -0
  152. {satroot-3.0.1 → satroot-3.0.2}/src/satroot_identity_demo_bundle_index_smoke.py +0 -0
  153. {satroot-3.0.1 → satroot-3.0.2}/src/satroot_identity_demo_release_catalog_index_smoke.py +0 -0
  154. {satroot-3.0.1 → satroot-3.0.2}/src/satroot_identity_demo_release_catalog_smoke.py +0 -0
  155. {satroot-3.0.1 → satroot-3.0.2}/src/satroot_identity_profile_smoke.py +0 -0
  156. {satroot-3.0.1 → satroot-3.0.2}/src/satroot_jcs.py +0 -0
  157. {satroot-3.0.1 → satroot-3.0.2}/src/satroot_license_demo_bundle_index_smoke.py +0 -0
  158. {satroot-3.0.1 → satroot-3.0.2}/src/satroot_license_demo_release_catalog_index_smoke.py +0 -0
  159. {satroot-3.0.1 → satroot-3.0.2}/src/satroot_license_demo_release_catalog_smoke.py +0 -0
  160. {satroot-3.0.1 → satroot-3.0.2}/src/satroot_license_profile_smoke.py +0 -0
  161. {satroot-3.0.1 → satroot-3.0.2}/src/satroot_machine_demo_bundle_index_smoke.py +0 -0
  162. {satroot-3.0.1 → satroot-3.0.2}/src/satroot_machine_demo_release_catalog_index_smoke.py +0 -0
  163. {satroot-3.0.1 → satroot-3.0.2}/src/satroot_machine_demo_release_catalog_smoke.py +0 -0
  164. {satroot-3.0.1 → satroot-3.0.2}/src/satroot_machine_profile_smoke.py +0 -0
  165. {satroot-3.0.1 → satroot-3.0.2}/src/satroot_onchain_envelope_smoke.py +0 -0
  166. {satroot-3.0.1 → satroot-3.0.2}/src/satroot_operator_proof_smoke.py +0 -0
  167. {satroot-3.0.1 → satroot-3.0.2}/src/satroot_profile_federation_smoke.py +0 -0
  168. {satroot-3.0.1 → satroot-3.0.2}/src/satroot_profile_matrix_smoke.py +0 -0
  169. {satroot-3.0.1 → satroot-3.0.2}/src/satroot_publication_ladder_smoke.py +0 -0
  170. {satroot-3.0.1 → satroot-3.0.2}/src/satroot_receipt_demo_bundle_index_smoke.py +0 -0
  171. {satroot-3.0.1 → satroot-3.0.2}/src/satroot_receipt_demo_release_catalog_index_smoke.py +0 -0
  172. {satroot-3.0.1 → satroot-3.0.2}/src/satroot_receipt_demo_release_catalog_smoke.py +0 -0
  173. {satroot-3.0.1 → satroot-3.0.2}/src/satroot_receipt_profile_smoke.py +0 -0
  174. {satroot-3.0.1 → satroot-3.0.2}/src/satroot_release_gate_smoke.py +0 -0
  175. {satroot-3.0.1 → satroot-3.0.2}/src/satroot_singleton_demo_bundle_index_matrix_smoke.py +0 -0
  176. {satroot-3.0.1 → satroot-3.0.2}/src/satroot_singleton_demo_release_catalog_index_matrix_smoke.py +0 -0
  177. {satroot-3.0.1 → satroot-3.0.2}/src/satroot_singleton_demo_release_catalog_matrix_smoke.py +0 -0
  178. {satroot-3.0.1 → satroot-3.0.2}/src/satroot_singleton_demo_release_smoke_support.py +0 -0
  179. {satroot-3.0.1 → satroot-3.0.2}/src/satroot_singleton_publication_ladder_smoke.py +0 -0
  180. {satroot-3.0.1 → satroot-3.0.2}/src/satroot_stable_demo_bundle_index_smoke.py +0 -0
  181. {satroot-3.0.1 → satroot-3.0.2}/src/satroot_stable_demo_release_catalog_index_smoke.py +0 -0
  182. {satroot-3.0.1 → satroot-3.0.2}/src/satroot_stable_demo_release_catalog_smoke.py +0 -0
  183. {satroot-3.0.1 → satroot-3.0.2}/src/satroot_stable_profile_smoke.py +0 -0
  184. {satroot-3.0.1 → satroot-3.0.2}/src/satroot_test.py +0 -0
  185. {satroot-3.0.1 → satroot-3.0.2}/src/satroot_tsa.py +0 -0
  186. {satroot-3.0.1 → satroot-3.0.2}/tests/test_anchored_demo_smoke.py +0 -0
  187. {satroot-3.0.1 → satroot-3.0.2}/tests/test_anchored_publication_smoke.py +0 -0
  188. {satroot-3.0.1 → satroot-3.0.2}/tests/test_canonicalisation_vs_jcs.py +0 -0
  189. {satroot-3.0.1 → satroot-3.0.2}/tests/test_commitment_backends.py +0 -0
  190. {satroot-3.0.1 → satroot-3.0.2}/tests/test_conformance_vectors.py +0 -0
  191. {satroot-3.0.1 → satroot-3.0.2}/tests/test_cose_statements.py +0 -0
  192. {satroot-3.0.1 → satroot-3.0.2}/tests/test_demo_bundle_index_matrix_smoke.py +0 -0
  193. {satroot-3.0.1 → satroot-3.0.2}/tests/test_demo_release_catalog_index_matrix_smoke.py +0 -0
  194. {satroot-3.0.1 → satroot-3.0.2}/tests/test_demo_release_catalog_matrix_smoke.py +0 -0
  195. {satroot-3.0.1 → satroot-3.0.2}/tests/test_envelope_verification_smoke.py +0 -0
  196. {satroot-3.0.1 → satroot-3.0.2}/tests/test_event_profile_smoke.py +0 -0
  197. {satroot-3.0.1 → satroot-3.0.2}/tests/test_federated_registry_collection_smoke.py +0 -0
  198. {satroot-3.0.1 → satroot-3.0.2}/tests/test_identity_demo_bundle_index_smoke.py +0 -0
  199. {satroot-3.0.1 → satroot-3.0.2}/tests/test_identity_demo_release_catalog_index_smoke.py +0 -0
  200. {satroot-3.0.1 → satroot-3.0.2}/tests/test_identity_demo_release_catalog_smoke.py +0 -0
  201. {satroot-3.0.1 → satroot-3.0.2}/tests/test_identity_profile_smoke.py +0 -0
  202. {satroot-3.0.1 → satroot-3.0.2}/tests/test_jcs_n_interop.py +0 -0
  203. {satroot-3.0.1 → satroot-3.0.2}/tests/test_jcs_n_vectors.py +0 -0
  204. {satroot-3.0.1 → satroot-3.0.2}/tests/test_kernel_adversarial.py +0 -0
  205. {satroot-3.0.1 → satroot-3.0.2}/tests/test_license_demo_bundle_index_smoke.py +0 -0
  206. {satroot-3.0.1 → satroot-3.0.2}/tests/test_license_demo_release_catalog_index_smoke.py +0 -0
  207. {satroot-3.0.1 → satroot-3.0.2}/tests/test_license_demo_release_catalog_smoke.py +0 -0
  208. {satroot-3.0.1 → satroot-3.0.2}/tests/test_license_profile_smoke.py +0 -0
  209. {satroot-3.0.1 → satroot-3.0.2}/tests/test_machine_demo_bundle_index_smoke.py +0 -0
  210. {satroot-3.0.1 → satroot-3.0.2}/tests/test_machine_demo_release_catalog_index_smoke.py +0 -0
  211. {satroot-3.0.1 → satroot-3.0.2}/tests/test_machine_demo_release_catalog_smoke.py +0 -0
  212. {satroot-3.0.1 → satroot-3.0.2}/tests/test_machine_profile_smoke.py +0 -0
  213. {satroot-3.0.1 → satroot-3.0.2}/tests/test_onchain_envelope_smoke.py +0 -0
  214. {satroot-3.0.1 → satroot-3.0.2}/tests/test_operator_proof_smoke.py +0 -0
  215. {satroot-3.0.1 → satroot-3.0.2}/tests/test_packaging_config.py +0 -0
  216. {satroot-3.0.1 → satroot-3.0.2}/tests/test_profile_federation_smoke.py +0 -0
  217. {satroot-3.0.1 → satroot-3.0.2}/tests/test_profile_matrix_smoke.py +0 -0
  218. {satroot-3.0.1 → satroot-3.0.2}/tests/test_publication_ladder_smoke.py +0 -0
  219. {satroot-3.0.1 → satroot-3.0.2}/tests/test_receipt_demo_bundle_index_smoke.py +0 -0
  220. {satroot-3.0.1 → satroot-3.0.2}/tests/test_receipt_demo_release_catalog_index_smoke.py +0 -0
  221. {satroot-3.0.1 → satroot-3.0.2}/tests/test_receipt_demo_release_catalog_smoke.py +0 -0
  222. {satroot-3.0.1 → satroot-3.0.2}/tests/test_receipt_profile_smoke.py +0 -0
  223. {satroot-3.0.1 → satroot-3.0.2}/tests/test_release_gate_smoke.py +0 -0
  224. {satroot-3.0.1 → satroot-3.0.2}/tests/test_rfc8785_official_vectors.py +0 -0
  225. {satroot-3.0.1 → satroot-3.0.2}/tests/test_run_pytest_chunked.py +0 -0
  226. {satroot-3.0.1 → satroot-3.0.2}/tests/test_satroot1.py +0 -0
  227. {satroot-3.0.1 → satroot-3.0.2}/tests/test_singleton_demo_bundle_index_matrix_smoke.py +0 -0
  228. {satroot-3.0.1 → satroot-3.0.2}/tests/test_singleton_demo_release_catalog_index_matrix_smoke.py +0 -0
  229. {satroot-3.0.1 → satroot-3.0.2}/tests/test_singleton_demo_release_catalog_matrix_smoke.py +0 -0
  230. {satroot-3.0.1 → satroot-3.0.2}/tests/test_singleton_publication_ladder_smoke.py +0 -0
  231. {satroot-3.0.1 → satroot-3.0.2}/tests/test_spec_matches_reference.py +0 -0
  232. {satroot-3.0.1 → satroot-3.0.2}/tests/test_stable_demo_bundle_index_smoke.py +0 -0
  233. {satroot-3.0.1 → satroot-3.0.2}/tests/test_stable_demo_release_catalog_index_smoke.py +0 -0
  234. {satroot-3.0.1 → satroot-3.0.2}/tests/test_stable_demo_release_catalog_smoke.py +0 -0
  235. {satroot-3.0.1 → satroot-3.0.2}/tests/test_stable_profile_smoke.py +0 -0
  236. {satroot-3.0.1 → satroot-3.0.2}/tests/test_unbound_ledger_helpers.py +0 -0
  237. {satroot-3.0.1 → satroot-3.0.2}/tests/test_vector_runner.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: satroot
3
- Version: 3.0.1
3
+ Version: 3.0.2
4
4
  Summary: SATROOT-1: one native satoshi as root witness for unbounded semantic token state.
5
5
  Author-email: parthod0x <parthms.id@gmail.com>
6
6
  License: Apache-2.0
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "satroot"
7
- version = "3.0.1"
7
+ version = "3.0.2"
8
8
  description = "SATROOT-1: one native satoshi as root witness for unbounded semantic token state."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: satroot
3
- Version: 3.0.1
3
+ Version: 3.0.2
4
4
  Summary: SATROOT-1: one native satoshi as root witness for unbounded semantic token state.
5
5
  Author-email: parthod0x <parthms.id@gmail.com>
6
6
  License: Apache-2.0
@@ -290,10 +290,24 @@ def verify_export(
290
290
  events = _read_json(export_path / "bundle" / "signed_events.json")
291
291
  verifier = sr.make_ed25519_verifier(public_keys)
292
292
 
293
+ # The order of the records is not evidence, so it is reported, not
294
+ # enforced. Each anchor is checked on its own below: its state hash
295
+ # against the ledger prefix it names, its action-log head against the log,
296
+ # its token against its checkpoint - which is what detects rewriting and
297
+ # truncation, in any order. Requiring a strictly rising event_count made
298
+ # three honest histories unverifiable for good: two anchors at one
299
+ # event_count because only the action log had moved (a new checkpoint),
300
+ # repeated records of one checkpoint written by a scheduler before the
301
+ # producer stopped re-anchoring unchanged states, and two overlapping
302
+ # anchor runs whose timestamps returned in the opposite order. A token's
303
+ # genTime, not a line number, is when a checkpoint existed.
293
304
  published = 0
294
305
  pinned_count = 0
295
- previous_count = -1
296
306
  pinned_event_count = 0
307
+ present_event_count = 0
308
+ in_order = True
309
+ repeated = 0
310
+ previous_position = None
297
311
  attestations = []
298
312
  for index, anchor in enumerate(anchors):
299
313
  for field in ("root_id", "state_hash", "event_count"):
@@ -303,12 +317,16 @@ def verify_export(
303
317
  raise VerificationError(f"anchor {index}: root_id does not match")
304
318
 
305
319
  count = anchor["event_count"]
306
- if count <= previous_count:
307
- raise VerificationError(
308
- f"anchor {index}: event_count {count} does not advance on "
309
- f"{previous_count}; the anchor history runs backwards"
310
- )
311
- previous_count = count
320
+ if not isinstance(count, int) or isinstance(count, bool) or count < 1:
321
+ raise VerificationError(f"anchor {index}: event_count {count!r} is not a positive integer")
322
+ position = (count, anchor.get("action_log_entries"), anchor.get("action_log_head"))
323
+ if previous_position is not None:
324
+ if position == previous_position:
325
+ repeated += 1
326
+ elif (count, position[1] or 0) < (previous_position[0], previous_position[1] or 0):
327
+ in_order = False
328
+ previous_position = position
329
+ present_event_count = max(present_event_count, count)
312
330
  if count > len(events):
313
331
  raise VerificationError(
314
332
  f"anchor {index} commits to {count} events but the ledger holds "
@@ -460,6 +478,9 @@ def verify_export(
460
478
  # itself carries.
461
479
  "token_signature_verified": published > 0,
462
480
  "signers_pinned": pinned_count,
481
+ # Reported, not enforced: see the comment above the loop.
482
+ "in_file_order": in_order,
483
+ "repeated_checkpoints": repeated,
463
484
  # The only field that means third-party evidence.
464
485
  "third_party_timestamp_verified": pinned_count == published > 0,
465
486
  "attestations": attestations,
@@ -480,7 +501,7 @@ def verify_export(
480
501
  "ledger_completeness_checked": False,
481
502
  # Only anchors that actually carry a verified signature count.
482
503
  "history_pinned_to_event": pinned_event_count,
483
- "anchors_present_pin_to_event": previous_count if anchors else 0,
504
+ "anchors_present_pin_to_event": present_event_count,
484
505
  }
485
506
 
486
507
 
@@ -85,3 +85,59 @@ def test_run_isolated_from_inside_the_export_planted_code_never_runs(export):
85
85
 
86
86
  def test_exports_no_longer_need_to_carry_code():
87
87
  assert not (FIXTURE / "verify_export.py").exists() and not (FIXTURE / "tokenverify.py").exists()
88
+
89
+
90
+ # ---- 3.0.2: the order of anchor records is reported, not enforced ---------------------------
91
+
92
+ def _offline_anchor(export, entries):
93
+ """An unpublished anchor at event 1 attesting the first `entries` action-log entries."""
94
+ import satroot1 as sr
95
+ from satroot_onchain_envelope_smoke import CONTENT_TYPE, build_envelope_payload, build_envelope_script
96
+
97
+ events = json.loads((export / "bundle" / "signed_events.json").read_text(encoding="utf-8"))
98
+ keys = json.loads((export / "bundle" / "public_keys.json").read_text(encoding="utf-8"))
99
+ state_hash = sr.replay(events[:1], verifier=sr.make_ed25519_verifier(keys), allow_unbound_keys=True).state_hash()
100
+ log = [json.loads(line) for line in (export / "action_log.jsonl").read_text(encoding="utf-8").splitlines() if line.strip()]
101
+ payload = build_envelope_payload(events[0]["root_id"], state_hash)
102
+ return {"content_type": CONTENT_TYPE, "root_id": events[0]["root_id"], "state_hash": state_hash,
103
+ "envelope_script_hex": build_envelope_script(CONTENT_TYPE, payload).hex(),
104
+ "payload_json": payload.decode("utf-8"), "event_count": 1, "published": False,
105
+ "action_log_entries": entries, "action_log_head": log[entries - 1]["entry_hash"] if entries else "genesis"}
106
+
107
+
108
+ def _write_anchors(export, anchors):
109
+ (export / "anchor_commitments.json").write_text(json.dumps(anchors, indent=2) + "\n", encoding="utf-8")
110
+
111
+
112
+ def test_anchors_at_one_event_count_verify_when_only_the_action_log_moved(export):
113
+ """Found on a production ledger: an action recorded between two anchors gives a new
114
+ checkpoint at the same event_count, and the strictly-rising rule refused the export for good."""
115
+ _write_anchors(export, [_offline_anchor(export, 0), _offline_anchor(export, 1)])
116
+ result = sx.verify_export(export)
117
+ assert result["anchors"]["count"] == 2
118
+ assert result["anchors"]["in_file_order"] is True and result["anchors"]["repeated_checkpoints"] == 0
119
+ assert result["anchors_present_pin_to_event"] == 1
120
+
121
+
122
+ def test_repeated_and_reordered_anchor_records_are_reported_not_refused(export):
123
+ first, second = _offline_anchor(export, 0), _offline_anchor(export, 1)
124
+ _write_anchors(export, [second, second, first])
125
+ result = sx.verify_export(export)
126
+ assert result["anchors"]["repeated_checkpoints"] == 1
127
+ assert result["anchors"]["in_file_order"] is False
128
+
129
+
130
+ def test_order_does_not_rescue_a_rewritten_anchor(export):
131
+ forged = _offline_anchor(export, 1)
132
+ forged["state_hash"] = "sha256:" + "99" * 32
133
+ _write_anchors(export, [_offline_anchor(export, 0), forged])
134
+ with pytest.raises(sx.VerificationError):
135
+ sx.verify_export(export)
136
+
137
+
138
+ def test_an_anchor_event_count_must_be_a_positive_integer(export):
139
+ bad = _offline_anchor(export, 0)
140
+ bad["event_count"] = 0
141
+ _write_anchors(export, [bad])
142
+ with pytest.raises(sx.VerificationError, match="positive integer"):
143
+ sx.verify_export(export)
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes