openstatspec 0.7.0__tar.gz → 0.7.1__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 (202) hide show
  1. {openstatspec-0.7.0 → openstatspec-0.7.1}/.github/workflows/ci.yml +1 -1
  2. {openstatspec-0.7.0 → openstatspec-0.7.1}/.github/workflows/release.yml +1 -1
  3. {openstatspec-0.7.0 → openstatspec-0.7.1}/CHANGELOG.md +8 -0
  4. {openstatspec-0.7.0 → openstatspec-0.7.1}/PKG-INFO +1 -1
  5. {openstatspec-0.7.0 → openstatspec-0.7.1}/docs/release-readiness.md +5 -7
  6. openstatspec-0.7.1/docs/superpowers/plans/2026-08-12-python-v071-stable-pin.md +158 -0
  7. openstatspec-0.7.1/docs/superpowers/specs/2026-08-12-python-stable-specification-pin-design.md +35 -0
  8. openstatspec-0.7.1/openstatspec-specification/.github/workflows/ci.yml +22 -0
  9. openstatspec-0.7.1/openstatspec-specification/.github/workflows/release.yml +108 -0
  10. openstatspec-0.7.1/openstatspec-specification/.gitignore +5 -0
  11. {openstatspec-0.7.0 → openstatspec-0.7.1}/openstatspec-specification/CHANGELOG.md +26 -5
  12. {openstatspec-0.7.0 → openstatspec-0.7.1}/openstatspec-specification/README.md +9 -2
  13. openstatspec-0.7.1/openstatspec-specification/RELEASING.md +60 -0
  14. {openstatspec-0.7.0 → openstatspec-0.7.1}/openstatspec-specification/ROADMAP.md +45 -23
  15. {openstatspec-0.7.0 → openstatspec-0.7.1}/openstatspec-specification/VERSIONING.md +1 -1
  16. openstatspec-0.7.1/openstatspec-specification/pyproject.toml +21 -0
  17. openstatspec-0.7.1/openstatspec-specification/sql/dialect-profile-baseline.json +1224 -0
  18. openstatspec-0.7.1/openstatspec-specification/sql/dialect-profiles.md +273 -0
  19. openstatspec-0.7.1/openstatspec-specification/sql/dolt-adapter-declaration-schema.json +61 -0
  20. openstatspec-0.7.1/openstatspec-specification/sql/dolt-adapter-declarations/README.md +33 -0
  21. {openstatspec-0.7.0 → openstatspec-0.7.1}/openstatspec-specification/sql/profile-capabilities.md +10 -0
  22. openstatspec-0.7.1/openstatspec-specification/src/openstatspec_specification/__init__.py +19 -0
  23. openstatspec-0.7.1/openstatspec-specification/src/openstatspec_specification/dolt.py +1966 -0
  24. openstatspec-0.7.1/openstatspec-specification/tests/test_dolt_declarations.py +370 -0
  25. openstatspec-0.7.1/openstatspec-specification/tools/validate_repository.py +145 -0
  26. {openstatspec-0.7.0 → openstatspec-0.7.1}/pyproject.toml +1 -1
  27. {openstatspec-0.7.0 → openstatspec-0.7.1}/src/openstatspec/sql/capabilities.py +3 -3
  28. {openstatspec-0.7.0 → openstatspec-0.7.1}/tests/test_cli.py +3 -3
  29. {openstatspec-0.7.0 → openstatspec-0.7.1}/tests/test_sql_profiles.py +4 -4
  30. openstatspec-0.7.0/openstatspec-specification/.github/workflows/ci.yml +0 -15
  31. openstatspec-0.7.0/openstatspec-specification/.gitignore +0 -2
  32. openstatspec-0.7.0/openstatspec-specification/sql/dialect-profile-baseline.json +0 -233
  33. openstatspec-0.7.0/openstatspec-specification/sql/dialect-profiles.md +0 -202
  34. openstatspec-0.7.0/openstatspec-specification/tools/validate_repository.py +0 -934
  35. {openstatspec-0.7.0 → openstatspec-0.7.1}/.github/verify_release_ref.py +0 -0
  36. {openstatspec-0.7.0 → openstatspec-0.7.1}/.gitignore +0 -0
  37. {openstatspec-0.7.0 → openstatspec-0.7.1}/README.md +0 -0
  38. {openstatspec-0.7.0 → openstatspec-0.7.1}/THIRD_PARTY_NOTICES.md +0 -0
  39. {openstatspec-0.7.0 → openstatspec-0.7.1}/docs/architecture.md +0 -0
  40. {openstatspec-0.7.0 → openstatspec-0.7.1}/docs/in-place-transformation.md +0 -0
  41. {openstatspec-0.7.0 → openstatspec-0.7.1}/docs/pyspssio-spike.md +0 -0
  42. {openstatspec-0.7.0 → openstatspec-0.7.1}/docs/sav-profile.md +0 -0
  43. {openstatspec-0.7.0 → openstatspec-0.7.1}/docs/sql-transformation-workflow.md +0 -0
  44. {openstatspec-0.7.0 → openstatspec-0.7.1}/docs/transformations.md +0 -0
  45. {openstatspec-0.7.0 → openstatspec-0.7.1}/openstatspec-specification/CONTRIBUTING.md +0 -0
  46. {openstatspec-0.7.0 → openstatspec-0.7.1}/openstatspec-specification/conformance/fixtures/LICENSE.md +0 -0
  47. {openstatspec-0.7.0 → openstatspec-0.7.1}/openstatspec-specification/conformance/fixtures/README.md +0 -0
  48. {openstatspec-0.7.0 → openstatspec-0.7.1}/openstatspec-specification/conformance/fixtures/core-numeric-string.sav +0 -0
  49. {openstatspec-0.7.0 → openstatspec-0.7.1}/openstatspec-specification/conformance/fixtures/dictionary-and-display.sav +0 -0
  50. {openstatspec-0.7.0 → openstatspec-0.7.1}/openstatspec-specification/conformance/fixtures/generate-fixtures.sps +0 -0
  51. {openstatspec-0.7.0 → openstatspec-0.7.1}/openstatspec-specification/conformance/fixtures/long-utf8-and-attributes.sav +0 -0
  52. {openstatspec-0.7.0 → openstatspec-0.7.1}/openstatspec-specification/conformance/fixtures/missing-rules.sav +0 -0
  53. {openstatspec-0.7.0 → openstatspec-0.7.1}/openstatspec-specification/conformance/fixtures/sets.sav +0 -0
  54. {openstatspec-0.7.0 → openstatspec-0.7.1}/openstatspec-specification/conformance/fixtures/weight-and-string-mr.sav +0 -0
  55. {openstatspec-0.7.0 → openstatspec-0.7.1}/openstatspec-specification/conformance/fixtures/zsav-compressed.zsav +0 -0
  56. {openstatspec-0.7.0 → openstatspec-0.7.1}/openstatspec-specification/conformance/in-place-transformation-0.1.json +0 -0
  57. {openstatspec-0.7.0 → openstatspec-0.7.1}/openstatspec-specification/conformance/in-place-transformation-0.2.json +0 -0
  58. {openstatspec-0.7.0 → openstatspec-0.7.1}/openstatspec-specification/conformance/spss-sav-zsav-1.0.json +0 -0
  59. {openstatspec-0.7.0 → openstatspec-0.7.1}/openstatspec-specification/conformance/spss-syntax-frontend-0.1.json +0 -0
  60. {openstatspec-0.7.0 → openstatspec-0.7.1}/openstatspec-specification/conformance/spss-syntax-frontend-0.2.json +0 -0
  61. {openstatspec-0.7.0 → openstatspec-0.7.1}/openstatspec-specification/conformance/sql-transformation-workflow-0.1.json +0 -0
  62. {openstatspec-0.7.0 → openstatspec-0.7.1}/openstatspec-specification/conformance/transformation-plan-0.1.json +0 -0
  63. {openstatspec-0.7.0 → openstatspec-0.7.1}/openstatspec-specification/conformance/transformation-plan-0.2.json +0 -0
  64. {openstatspec-0.7.0 → openstatspec-0.7.1}/openstatspec-specification/docs/architecture.md +0 -0
  65. {openstatspec-0.7.0 → openstatspec-0.7.1}/openstatspec-specification/docs/implementation-profiles/python-pyspssio-0.5.1.md +0 -0
  66. {openstatspec-0.7.0 → openstatspec-0.7.1}/openstatspec-specification/docs/mssql-dialect-roadmap.md +0 -0
  67. {openstatspec-0.7.0 → openstatspec-0.7.1}/openstatspec-specification/docs/spss-profile.md +0 -0
  68. {openstatspec-0.7.0 → openstatspec-0.7.1}/openstatspec-specification/docs/spss-sav-zsav-profile-1.0.md +0 -0
  69. {openstatspec-0.7.0 → openstatspec-0.7.1}/openstatspec-specification/docs/spss-syntax-frontend-profile-0.1.md +0 -0
  70. {openstatspec-0.7.0 → openstatspec-0.7.1}/openstatspec-specification/docs/spss-syntax-frontend-profile-0.2.md +0 -0
  71. {openstatspec-0.7.0 → openstatspec-0.7.1}/openstatspec-specification/docs/sql-transformation-workflow-profile-0.1.md +0 -0
  72. {openstatspec-0.7.0 → openstatspec-0.7.1}/openstatspec-specification/docs/transformation-plan-profile-0.1.md +0 -0
  73. {openstatspec-0.7.0 → openstatspec-0.7.1}/openstatspec-specification/docs/transformation-plan-profile-0.2.md +0 -0
  74. {openstatspec-0.7.0 → openstatspec-0.7.1}/openstatspec-specification/docs/transformation-plan-sql-binding-0.1.md +0 -0
  75. {openstatspec-0.7.0 → openstatspec-0.7.1}/openstatspec-specification/docs/transformation-plan-sql-binding-0.2.md +0 -0
  76. {openstatspec-0.7.0 → openstatspec-0.7.1}/openstatspec-specification/examples/basic-spss-mapping.md +0 -0
  77. {openstatspec-0.7.0 → openstatspec-0.7.1}/openstatspec-specification/examples/spss-syntax-transformation-0.2.md +0 -0
  78. {openstatspec-0.7.0 → openstatspec-0.7.1}/openstatspec-specification/examples/spss-syntax-transformation.md +0 -0
  79. {openstatspec-0.7.0 → openstatspec-0.7.1}/openstatspec-specification/examples/sql-transformation-workflow.md +0 -0
  80. {openstatspec-0.7.0 → openstatspec-0.7.1}/openstatspec-specification/sql/schema-outline.sql +0 -0
  81. {openstatspec-0.7.0 → openstatspec-0.7.1}/openstatspec-specification/sql/server-version-policy.md +0 -0
  82. {openstatspec-0.7.0 → openstatspec-0.7.1}/openstatspec-specification/sql/transformation-plan-profile-schema.sql +0 -0
  83. {openstatspec-0.7.0 → openstatspec-0.7.1}/openstatspec-specification/sql/transformation-workflow-profile-schema.sql +0 -0
  84. {openstatspec-0.7.0 → openstatspec-0.7.1}/openstatspec-specification/transformation/plan-0.1.schema.json +0 -0
  85. {openstatspec-0.7.0 → openstatspec-0.7.1}/openstatspec-specification/transformation/plan-0.2.schema.json +0 -0
  86. {openstatspec-0.7.0 → openstatspec-0.7.1}/openstatspec-specification/transformation/spss-syntax-frontend-0.1.schema.json +0 -0
  87. {openstatspec-0.7.0 → openstatspec-0.7.1}/openstatspec-specification/transformation/spss-syntax-frontend-0.2.schema.json +0 -0
  88. {openstatspec-0.7.0 → openstatspec-0.7.1}/openstatspec-specification-package/.github/workflows/ci.yml +0 -0
  89. {openstatspec-0.7.0 → openstatspec-0.7.1}/openstatspec-specification-package/.github/workflows/publish.yml +0 -0
  90. {openstatspec-0.7.0 → openstatspec-0.7.1}/openstatspec-specification-package/.gitignore +0 -0
  91. {openstatspec-0.7.0 → openstatspec-0.7.1}/openstatspec-specification-package/CHANGELOG.md +0 -0
  92. {openstatspec-0.7.0 → openstatspec-0.7.1}/openstatspec-specification-package/CONTRIBUTING.md +0 -0
  93. {openstatspec-0.7.0 → openstatspec-0.7.1}/openstatspec-specification-package/README.md +0 -0
  94. {openstatspec-0.7.0 → openstatspec-0.7.1}/openstatspec-specification-package/RELEASING.md +0 -0
  95. {openstatspec-0.7.0 → openstatspec-0.7.1}/openstatspec-specification-package/ROADMAP.md +0 -0
  96. {openstatspec-0.7.0 → openstatspec-0.7.1}/openstatspec-specification-package/VERSIONING.md +0 -0
  97. {openstatspec-0.7.0 → openstatspec-0.7.1}/openstatspec-specification-package/conformance/fixtures/LICENSE.md +0 -0
  98. {openstatspec-0.7.0 → openstatspec-0.7.1}/openstatspec-specification-package/conformance/fixtures/README.md +0 -0
  99. {openstatspec-0.7.0 → openstatspec-0.7.1}/openstatspec-specification-package/conformance/fixtures/core-numeric-string.sav +0 -0
  100. {openstatspec-0.7.0 → openstatspec-0.7.1}/openstatspec-specification-package/conformance/fixtures/dictionary-and-display.sav +0 -0
  101. {openstatspec-0.7.0 → openstatspec-0.7.1}/openstatspec-specification-package/conformance/fixtures/generate-fixtures.sps +0 -0
  102. {openstatspec-0.7.0 → openstatspec-0.7.1}/openstatspec-specification-package/conformance/fixtures/long-utf8-and-attributes.sav +0 -0
  103. {openstatspec-0.7.0 → openstatspec-0.7.1}/openstatspec-specification-package/conformance/fixtures/missing-rules.sav +0 -0
  104. {openstatspec-0.7.0 → openstatspec-0.7.1}/openstatspec-specification-package/conformance/fixtures/sets.sav +0 -0
  105. {openstatspec-0.7.0 → openstatspec-0.7.1}/openstatspec-specification-package/conformance/fixtures/weight-and-string-mr.sav +0 -0
  106. {openstatspec-0.7.0 → openstatspec-0.7.1}/openstatspec-specification-package/conformance/fixtures/zsav-compressed.zsav +0 -0
  107. {openstatspec-0.7.0 → openstatspec-0.7.1}/openstatspec-specification-package/conformance/in-place-transformation-0.1.json +0 -0
  108. {openstatspec-0.7.0 → openstatspec-0.7.1}/openstatspec-specification-package/conformance/in-place-transformation-0.2.json +0 -0
  109. {openstatspec-0.7.0 → openstatspec-0.7.1}/openstatspec-specification-package/conformance/spss-sav-zsav-1.0.json +0 -0
  110. {openstatspec-0.7.0 → openstatspec-0.7.1}/openstatspec-specification-package/conformance/spss-syntax-frontend-0.1.json +0 -0
  111. {openstatspec-0.7.0 → openstatspec-0.7.1}/openstatspec-specification-package/conformance/spss-syntax-frontend-0.2.json +0 -0
  112. {openstatspec-0.7.0 → openstatspec-0.7.1}/openstatspec-specification-package/conformance/sql-transformation-workflow-0.1.json +0 -0
  113. {openstatspec-0.7.0 → openstatspec-0.7.1}/openstatspec-specification-package/conformance/transformation-plan-0.1.json +0 -0
  114. {openstatspec-0.7.0 → openstatspec-0.7.1}/openstatspec-specification-package/conformance/transformation-plan-0.2.json +0 -0
  115. {openstatspec-0.7.0 → openstatspec-0.7.1}/openstatspec-specification-package/docs/architecture.md +0 -0
  116. {openstatspec-0.7.0 → openstatspec-0.7.1}/openstatspec-specification-package/docs/implementation-profiles/python-pyspssio-0.5.1.md +0 -0
  117. {openstatspec-0.7.0 → openstatspec-0.7.1}/openstatspec-specification-package/docs/mssql-dialect-roadmap.md +0 -0
  118. {openstatspec-0.7.0 → openstatspec-0.7.1}/openstatspec-specification-package/docs/spss-profile.md +0 -0
  119. {openstatspec-0.7.0 → openstatspec-0.7.1}/openstatspec-specification-package/docs/spss-sav-zsav-profile-1.0.md +0 -0
  120. {openstatspec-0.7.0 → openstatspec-0.7.1}/openstatspec-specification-package/docs/spss-syntax-frontend-profile-0.1.md +0 -0
  121. {openstatspec-0.7.0 → openstatspec-0.7.1}/openstatspec-specification-package/docs/spss-syntax-frontend-profile-0.2.md +0 -0
  122. {openstatspec-0.7.0 → openstatspec-0.7.1}/openstatspec-specification-package/docs/sql-transformation-workflow-profile-0.1.md +0 -0
  123. {openstatspec-0.7.0 → openstatspec-0.7.1}/openstatspec-specification-package/docs/transformation-plan-profile-0.1.md +0 -0
  124. {openstatspec-0.7.0 → openstatspec-0.7.1}/openstatspec-specification-package/docs/transformation-plan-profile-0.2.md +0 -0
  125. {openstatspec-0.7.0 → openstatspec-0.7.1}/openstatspec-specification-package/docs/transformation-plan-sql-binding-0.1.md +0 -0
  126. {openstatspec-0.7.0 → openstatspec-0.7.1}/openstatspec-specification-package/docs/transformation-plan-sql-binding-0.2.md +0 -0
  127. {openstatspec-0.7.0 → openstatspec-0.7.1}/openstatspec-specification-package/examples/basic-spss-mapping.md +0 -0
  128. {openstatspec-0.7.0 → openstatspec-0.7.1}/openstatspec-specification-package/examples/spss-syntax-transformation-0.2.md +0 -0
  129. {openstatspec-0.7.0 → openstatspec-0.7.1}/openstatspec-specification-package/examples/spss-syntax-transformation.md +0 -0
  130. {openstatspec-0.7.0 → openstatspec-0.7.1}/openstatspec-specification-package/examples/sql-transformation-workflow.md +0 -0
  131. {openstatspec-0.7.0 → openstatspec-0.7.1}/openstatspec-specification-package/pyproject.toml +0 -0
  132. {openstatspec-0.7.0 → openstatspec-0.7.1}/openstatspec-specification-package/sql/dialect-profile-baseline.json +0 -0
  133. {openstatspec-0.7.0 → openstatspec-0.7.1}/openstatspec-specification-package/sql/dialect-profiles.md +0 -0
  134. {openstatspec-0.7.0 → openstatspec-0.7.1}/openstatspec-specification-package/sql/dolt-adapter-declaration-schema.json +0 -0
  135. {openstatspec-0.7.0 → openstatspec-0.7.1}/openstatspec-specification-package/sql/dolt-adapter-declarations/README.md +0 -0
  136. {openstatspec-0.7.0 → openstatspec-0.7.1}/openstatspec-specification-package/sql/profile-capabilities.md +0 -0
  137. {openstatspec-0.7.0 → openstatspec-0.7.1}/openstatspec-specification-package/sql/schema-outline.sql +0 -0
  138. {openstatspec-0.7.0 → openstatspec-0.7.1}/openstatspec-specification-package/sql/server-version-policy.md +0 -0
  139. {openstatspec-0.7.0 → openstatspec-0.7.1}/openstatspec-specification-package/sql/transformation-plan-profile-schema.sql +0 -0
  140. {openstatspec-0.7.0 → openstatspec-0.7.1}/openstatspec-specification-package/sql/transformation-workflow-profile-schema.sql +0 -0
  141. {openstatspec-0.7.0 → openstatspec-0.7.1}/openstatspec-specification-package/src/openstatspec_specification/__init__.py +0 -0
  142. {openstatspec-0.7.0 → openstatspec-0.7.1}/openstatspec-specification-package/src/openstatspec_specification/dolt.py +0 -0
  143. {openstatspec-0.7.0 → openstatspec-0.7.1}/openstatspec-specification-package/tests/test_dolt_declarations.py +0 -0
  144. {openstatspec-0.7.0 → openstatspec-0.7.1}/openstatspec-specification-package/tools/validate_repository.py +0 -0
  145. {openstatspec-0.7.0 → openstatspec-0.7.1}/openstatspec-specification-package/transformation/plan-0.1.schema.json +0 -0
  146. {openstatspec-0.7.0 → openstatspec-0.7.1}/openstatspec-specification-package/transformation/plan-0.2.schema.json +0 -0
  147. {openstatspec-0.7.0 → openstatspec-0.7.1}/openstatspec-specification-package/transformation/spss-syntax-frontend-0.1.schema.json +0 -0
  148. {openstatspec-0.7.0 → openstatspec-0.7.1}/openstatspec-specification-package/transformation/spss-syntax-frontend-0.2.schema.json +0 -0
  149. {openstatspec-0.7.0 → openstatspec-0.7.1}/src/openstatspec/__init__.py +0 -0
  150. {openstatspec-0.7.0 → openstatspec-0.7.1}/src/openstatspec/api.py +0 -0
  151. {openstatspec-0.7.0 → openstatspec-0.7.1}/src/openstatspec/cli.py +0 -0
  152. {openstatspec-0.7.0 → openstatspec-0.7.1}/src/openstatspec/core/__init__.py +0 -0
  153. {openstatspec-0.7.0 → openstatspec-0.7.1}/src/openstatspec/core/results.py +0 -0
  154. {openstatspec-0.7.0 → openstatspec-0.7.1}/src/openstatspec/frontends/__init__.py +0 -0
  155. {openstatspec-0.7.0 → openstatspec-0.7.1}/src/openstatspec/frontends/sas/.gitkeep +0 -0
  156. {openstatspec-0.7.0 → openstatspec-0.7.1}/src/openstatspec/frontends/spss/__init__.py +0 -0
  157. {openstatspec-0.7.0 → openstatspec-0.7.1}/src/openstatspec/frontends/spss/binding.py +0 -0
  158. {openstatspec-0.7.0 → openstatspec-0.7.1}/src/openstatspec/frontends/spss/compiler.py +0 -0
  159. {openstatspec-0.7.0 → openstatspec-0.7.1}/src/openstatspec/frontends/spss/execution.py +0 -0
  160. {openstatspec-0.7.0 → openstatspec-0.7.1}/src/openstatspec/frontends/spss/syntax.py +0 -0
  161. {openstatspec-0.7.0 → openstatspec-0.7.1}/src/openstatspec/frontends/stata/.gitkeep +0 -0
  162. {openstatspec-0.7.0 → openstatspec-0.7.1}/src/openstatspec/spss/__init__.py +0 -0
  163. {openstatspec-0.7.0 → openstatspec-0.7.1}/src/openstatspec/spss/dictionary.py +0 -0
  164. {openstatspec-0.7.0 → openstatspec-0.7.1}/src/openstatspec/spss/raw_dictionary.py +0 -0
  165. {openstatspec-0.7.0 → openstatspec-0.7.1}/src/openstatspec/spss/sav.py +0 -0
  166. {openstatspec-0.7.0 → openstatspec-0.7.1}/src/openstatspec/sql/__init__.py +0 -0
  167. {openstatspec-0.7.0 → openstatspec-0.7.1}/src/openstatspec/sql/catalog_api.py +0 -0
  168. {openstatspec-0.7.0 → openstatspec-0.7.1}/src/openstatspec/sql/catalog_verification.py +0 -0
  169. {openstatspec-0.7.0 → openstatspec-0.7.1}/src/openstatspec/sql/database_urls.py +0 -0
  170. {openstatspec-0.7.0 → openstatspec-0.7.1}/src/openstatspec/sql/dolt_conformance.py +0 -0
  171. {openstatspec-0.7.0 → openstatspec-0.7.1}/src/openstatspec/sql/inplace_transform.py +0 -0
  172. {openstatspec-0.7.0 → openstatspec-0.7.1}/src/openstatspec/sql/normative.py +0 -0
  173. {openstatspec-0.7.0 → openstatspec-0.7.1}/src/openstatspec/sql/profiles.py +0 -0
  174. {openstatspec-0.7.0 → openstatspec-0.7.1}/src/openstatspec/sql/wide.py +0 -0
  175. {openstatspec-0.7.0 → openstatspec-0.7.1}/src/openstatspec/sql/workflow.py +0 -0
  176. {openstatspec-0.7.0 → openstatspec-0.7.1}/src/openstatspec/transform/__init__.py +0 -0
  177. {openstatspec-0.7.0 → openstatspec-0.7.1}/src/openstatspec/transform/errors.py +0 -0
  178. {openstatspec-0.7.0 → openstatspec-0.7.1}/src/openstatspec/transform/plan.py +0 -0
  179. {openstatspec-0.7.0 → openstatspec-0.7.1}/src/openstatspec/transform/schema.py +0 -0
  180. {openstatspec-0.7.0 → openstatspec-0.7.1}/src/openstatspec/transform/validation.py +0 -0
  181. {openstatspec-0.7.0 → openstatspec-0.7.1}/tests/conformance.py +0 -0
  182. {openstatspec-0.7.0 → openstatspec-0.7.1}/tests/test_atomic_import.py +0 -0
  183. {openstatspec-0.7.0 → openstatspec-0.7.1}/tests/test_attribute_catalog.py +0 -0
  184. {openstatspec-0.7.0 → openstatspec-0.7.1}/tests/test_catalog_lifecycle.py +0 -0
  185. {openstatspec-0.7.0 → openstatspec-0.7.1}/tests/test_catalog_persistence_review.py +0 -0
  186. {openstatspec-0.7.0 → openstatspec-0.7.1}/tests/test_conditional_inplace_transform.py +0 -0
  187. {openstatspec-0.7.0 → openstatspec-0.7.1}/tests/test_document_round_trip.py +0 -0
  188. {openstatspec-0.7.0 → openstatspec-0.7.1}/tests/test_dolt_conformance.py +0 -0
  189. {openstatspec-0.7.0 → openstatspec-0.7.1}/tests/test_inplace_transform.py +0 -0
  190. {openstatspec-0.7.0 → openstatspec-0.7.1}/tests/test_loss_reports.py +0 -0
  191. {openstatspec-0.7.0 → openstatspec-0.7.1}/tests/test_normative_catalog.py +0 -0
  192. {openstatspec-0.7.0 → openstatspec-0.7.1}/tests/test_official_conformance.py +0 -0
  193. {openstatspec-0.7.0 → openstatspec-0.7.1}/tests/test_pyspssio_catalog_authority.py +0 -0
  194. {openstatspec-0.7.0 → openstatspec-0.7.1}/tests/test_release_ref.py +0 -0
  195. {openstatspec-0.7.0 → openstatspec-0.7.1}/tests/test_review_transaction_boundary.py +0 -0
  196. {openstatspec-0.7.0 → openstatspec-0.7.1}/tests/test_sav_sqlite.py +0 -0
  197. {openstatspec-0.7.0 → openstatspec-0.7.1}/tests/test_spss_catalog_preflight.py +0 -0
  198. {openstatspec-0.7.0 → openstatspec-0.7.1}/tests/test_sql_services.py +0 -0
  199. {openstatspec-0.7.0 → openstatspec-0.7.1}/tests/test_sql_workflow.py +0 -0
  200. {openstatspec-0.7.0 → openstatspec-0.7.1}/tests/test_strict_catalog_review.py +0 -0
  201. {openstatspec-0.7.0 → openstatspec-0.7.1}/tests/test_transform_frontend.py +0 -0
  202. {openstatspec-0.7.0 → openstatspec-0.7.1}/tests/test_vls_compatible_names.py +0 -0
@@ -20,7 +20,7 @@ jobs:
20
20
  uses: actions/checkout@v7
21
21
  with: &specification-checkout
22
22
  repository: OpenStatSpec/specification
23
- ref: f2fdf687d8cb32b944ca55a3e9e7215ffc603019
23
+ ref: cd8f198c68b849eb8ed018a894670a0904c2181d
24
24
  path: openstatspec-specification
25
25
  - name: Checkout required SPSS engine
26
26
  uses: actions/checkout@v7
@@ -48,7 +48,7 @@ jobs:
48
48
  uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
49
49
  with:
50
50
  repository: OpenStatSpec/specification
51
- ref: f2fdf687d8cb32b944ca55a3e9e7215ffc603019
51
+ ref: cd8f198c68b849eb8ed018a894670a0904c2181d
52
52
  path: openstatspec-specification
53
53
  - name: Checkout specification package source
54
54
  uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
@@ -6,6 +6,14 @@ All notable changes to this reference implementation are documented here.
6
6
 
7
7
  _No unreleased changes._
8
8
 
9
+ ## 0.7.1 - 2026-08-12
10
+
11
+ ### Changed
12
+
13
+ - Pinned capability declarations, conformance fixtures, and release validation
14
+ to the published OpenStatSpec specification `v0.3.0` at exact commit
15
+ `cd8f198c68b849eb8ed018a894670a0904c2181d`.
16
+
9
17
  ## 0.7.0 - 2026-08-11
10
18
 
11
19
  ### Added
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: openstatspec
3
- Version: 0.7.0
3
+ Version: 0.7.1
4
4
  Summary: Reference adapter for the OpenStatSpec relational contract
5
5
  Author: OpenStatSpec
6
6
  License: Apache-2.0
@@ -1,4 +1,4 @@
1
- # 0.7.0 release readiness
1
+ # 0.7.1 release readiness
2
2
 
3
3
  This page records the expected release contract, not a publication event.
4
4
  Creating a version tag remains a separate maintainer action.
@@ -114,12 +114,10 @@ capability claim, or implied support.
114
114
  4. Build with `python -m build` and install the generated wheel in a clean
115
115
  environment.
116
116
  5. Confirm `openstatspec capabilities` reflects the intended support boundary.
117
- 6. Confirm CI, release fixtures, and capabilities use the untagged OpenStatSpec
118
- specification release candidate at exact commit
119
- `f2fdf687d8cb32b944ca55a3e9e7215ffc603019`, publish
120
- `specification_status=release_candidate`, and leave
121
- `specification_release` null. If that exact commit receives a stable tag
122
- before this package is tagged, update the identity and re-run every gate.
117
+ 6. Confirm CI, release fixtures, and capabilities use the published OpenStatSpec
118
+ specification `v0.3.0` at exact commit
119
+ `cd8f198c68b849eb8ed018a894670a0904c2181d`, publish
120
+ `specification_status=stable`, and set `specification_release` to `v0.3.0`.
123
121
  7. Review this document, the README, and CHANGELOG for accurate scope.
124
122
 
125
123
  The tag-triggered release workflow repeats the non-service test suite, builds
@@ -0,0 +1,158 @@
1
+ # Python 0.7.1 Stable Specification Pin Implementation Plan
2
+
3
+ > **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
4
+
5
+ **Goal:** Release Python adapter `0.7.1` with stable, exact provenance for specification `v0.3.0`.
6
+
7
+ **Architecture:** Keep the provenance values centralized in `src/openstatspec/sql/capabilities.py`; tests and capability declarations consume those values. CI and release-readiness documentation pin the same immutable specification commit, while the package version changes only in packaging metadata.
8
+
9
+ **Tech Stack:** Python 3.11–3.14, pytest, GitHub Actions, `python -m build`, Twine, PyPI Trusted Publishing.
10
+
11
+ ## Global Constraints
12
+
13
+ - Specification commit: `cd8f198c68b849eb8ed018a894670a0904c2181d`.
14
+ - Specification status: `stable`.
15
+ - Specification release: `v0.3.0`.
16
+ - Package version: `0.7.1`.
17
+ - Keep the SPSS engine pin, companion package pin, SQL profile matrix, and runtime behavior unchanged.
18
+ - Do not publish or change the normative specification package in this task.
19
+
20
+ ---
21
+
22
+ ### Task 1: Update provenance contract tests first
23
+
24
+ **Files:**
25
+ - Modify: `tests/test_cli.py:44-48`
26
+ - Modify: `tests/test_sql_profiles.py:32-40`
27
+
28
+ **Interfaces:**
29
+ - Consumes: public `openstatspec.capability_matrix()` and SQL profile declarations.
30
+ - Produces: executable expectations for stable `v0.3.0` provenance.
31
+
32
+ - [ ] **Step 1: Change the assertions to the stable identity**
33
+
34
+ Replace the candidate expectations with:
35
+
36
+ ```python
37
+ assert matrix["specification_status"] == "stable"
38
+ assert matrix["specification_release"] == "v0.3.0"
39
+ assert matrix["specification_commit"] == "cd8f198c68b849eb8ed018a894670a0904c2181d"
40
+ ```
41
+
42
+ Apply the same three values to each profile declaration assertion.
43
+
44
+ - [ ] **Step 2: Run the focused tests and confirm the expected red state**
45
+
46
+ Run:
47
+
48
+ ```bash
49
+ python -m pytest -q tests/test_cli.py::test_capability_matrix_is_public_and_cli_matches_engine_boundary tests/test_sql_profiles.py::test_profile_declarations_publish_stable_specification_provenance
50
+ ```
51
+
52
+ Expected: both tests fail because production constants still expose the old release-candidate identity.
53
+
54
+ - [ ] **Step 3: Commit the failing-test update**
55
+
56
+ ```bash
57
+ git add tests/test_cli.py tests/test_sql_profiles.py
58
+ git commit -m "test: expect stable specification v0.3.0"
59
+ ```
60
+
61
+ ### Task 2: Bind production provenance and release metadata
62
+
63
+ **Files:**
64
+ - Modify: `src/openstatspec/sql/capabilities.py:20-23`
65
+ - Modify: `pyproject.toml:7`
66
+ - Modify: `.github/workflows/ci.yml:23`
67
+ - Modify: `.github/workflows/release.yml:51`
68
+ - Modify: `docs/release-readiness.md:1,116-123`
69
+ - Modify: `CHANGELOG.md` after the `Unreleased` section
70
+
71
+ **Interfaces:**
72
+ - Consumes: the exact specification commit from the published `v0.3.0` tag.
73
+ - Produces: capability output and release automation identifying `stable`, `v0.3.0`, and `cd8f198c...`.
74
+
75
+ - [ ] **Step 1: Update the centralized capability constants**
76
+
77
+ Set the declarations to:
78
+
79
+ ```python
80
+ SPECIFICATION_COMMIT = "cd8f198c68b849eb8ed018a894670a0904c2181d"
81
+ SPECIFICATION_STATUS = "stable"
82
+ SPECIFICATION_RELEASE: str | None = "v0.3.0"
83
+ ```
84
+
85
+ - [ ] **Step 2: Bump the package and CI fixture pin**
86
+
87
+ Set `project.version` in `pyproject.toml` to `0.7.1`. Replace the old specification checkout ref in both workflows with the exact commit `cd8f198c68b849eb8ed018a894670a0904c2181d`; leave the companion package ref unchanged.
88
+
89
+ - [ ] **Step 3: Update release documentation and changelog**
90
+
91
+ Rename the readiness heading to `0.7.1 release readiness`, change its specification checklist to the stable commit/release identity, and add a dated `0.7.1` entry explaining that the adapter now pins published specification `v0.3.0`.
92
+
93
+ - [ ] **Step 4: Run focused tests and confirm green**
94
+
95
+ Run the focused command from Task 1. Expected: both tests pass.
96
+
97
+ - [ ] **Step 5: Commit the implementation and metadata**
98
+
99
+ ```bash
100
+ git add src/openstatspec/sql/capabilities.py pyproject.toml .github/workflows/ci.yml .github/workflows/release.yml docs/release-readiness.md CHANGELOG.md
101
+ git commit -m "release: pin Python adapter to specification v0.3.0"
102
+ ```
103
+
104
+ ### Task 3: Verify the complete Python release candidate
105
+
106
+ **Files:**
107
+ - Verify: all tracked files in the Python repository.
108
+
109
+ - [ ] **Step 1: Check the diff and stale current references**
110
+
111
+ Run:
112
+
113
+ ```bash
114
+ git diff --check
115
+ rg -n 'f2fdf687d8cb32b944ca55a3e9e7215ffc603019|specification_status.*release_candidate|specification_release.*None|version = "0\.7\.0"' src tests .github docs pyproject.toml
116
+ ```
117
+
118
+ Expected: no stale current references; historical changelog entries may retain their original release evidence.
119
+
120
+ - [ ] **Step 2: Run the non-service test suite**
121
+
122
+ ```bash
123
+ python -m pytest -m "not services"
124
+ ```
125
+
126
+ Expected: zero failures.
127
+
128
+ - [ ] **Step 3: Build and smoke-test the package**
129
+
130
+ ```bash
131
+ rm -rf /tmp/openstatspec-v071-dist /tmp/openstatspec-v071-smoke
132
+ python -m build --outdir /tmp/openstatspec-v071-dist
133
+ python -m twine check /tmp/openstatspec-v071-dist/*
134
+ python -m venv /tmp/openstatspec-v071-smoke
135
+ /tmp/openstatspec-v071-smoke/bin/python -m pip install ./openstatspec-pyspssio
136
+ /tmp/openstatspec-v071-smoke/bin/python -m pip install /tmp/openstatspec-v071-dist/openstatspec-0.7.1-*.whl
137
+ /tmp/openstatspec-v071-smoke/bin/openstatspec capabilities
138
+ ```
139
+
140
+ Expected: build and Twine checks pass, and capabilities reports `stable`, `v0.3.0`, and the exact commit.
141
+
142
+ ### Task 4: Review, publish, and release
143
+
144
+ - [ ] **Step 1: Run the local review loop and fix every actionable finding**
145
+
146
+ Review the complete branch diff against `origin/main`; repeat the tests after each fix until no actionable findings remain.
147
+
148
+ - [ ] **Step 2: Push the branch and open a draft PR**
149
+
150
+ Push `agent/stable-spec-v071` to `OpenStatSpec/python`, open a PR targeting `main`, mark it ready for review, and add `@codex review`.
151
+
152
+ - [ ] **Step 3: Iterate on GitHub review and CI**
153
+
154
+ Inspect every Codex review finding and failing check, fix actionable issues locally, push, and repeat until the review and required checks are clean.
155
+
156
+ - [ ] **Step 4: After merge, create and push annotated tag `v0.7.1`**
157
+
158
+ Verify the tag targets the merge commit and wait for tag-context CI to pass before relying on the existing PyPI workflow.
@@ -0,0 +1,35 @@
1
+ # Python 0.7.1 stable specification pin
2
+
3
+ ## Goal
4
+
5
+ Publish the Python adapter's first patch release after Python adapter `v0.7.0`
6
+ with its capability declarations and conformance fixtures bound to the
7
+ published OpenStatSpec specification `v0.3.0`.
8
+
9
+ ## Scope
10
+
11
+ - Bump the Python distribution from `0.7.0` to `0.7.1`.
12
+ - Replace the release-candidate specification identity with:
13
+ - commit `cd8f198c68b849eb8ed018a894670a0904c2181d`;
14
+ - status `stable`;
15
+ - release `v0.3.0`.
16
+ - Update unit expectations, CI fixture checkouts, release-readiness guidance,
17
+ and the changelog so every release surface carries the same identity.
18
+ - Keep the required SPSS engine pin, specification companion package pin,
19
+ database version matrix, and runtime behavior unchanged.
20
+ - Separately update the specification repository roadmap to mark the completed
21
+ `v0.3.0` release gates and current public release.
22
+
23
+ ## Release and verification
24
+
25
+ The Python change is reviewed through a pull request. Before tagging `v0.7.1`,
26
+ run the non-service suite, package build and wheel smoke test, and the full
27
+ GitHub CI matrix. The annotated `v0.7.1` tag must target the merged release
28
+ commit; its tag-context workflow must pass before the existing trusted-PyPI
29
+ workflow publishes the package artifacts.
30
+
31
+ ## Non-goals
32
+
33
+ This work does not add transformation behavior, change SQL dialect support,
34
+ modify the normative specification, or publish a new specification package
35
+ version.
@@ -0,0 +1,22 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ pull_request:
6
+
7
+ permissions:
8
+ contents: read
9
+
10
+ jobs:
11
+ specification:
12
+ runs-on: ubuntu-latest
13
+ steps:
14
+ # v7.0.1: https://github.com/actions/checkout/commit/3d3c42e5aac5ba805825da76410c181273ba90b1
15
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1
16
+ with:
17
+ persist-credentials: false
18
+ # v7.0.0: https://github.com/actions/setup-python/commit/5fda3b95a4ea91299a34e894583c3862153e4b97
19
+ - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97
20
+ with:
21
+ python-version: "3.13"
22
+ - run: python tools/validate_repository.py
@@ -0,0 +1,108 @@
1
+ name: Publish Python specification package
2
+
3
+ on:
4
+ push:
5
+ tags:
6
+ - "package-v*"
7
+ workflow_dispatch:
8
+
9
+ permissions:
10
+ contents: read
11
+
12
+ jobs:
13
+ build:
14
+ name: Build and verify distribution
15
+ runs-on: ubuntu-latest
16
+
17
+ steps:
18
+ - name: Check out repository
19
+ uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
20
+ with:
21
+ persist-credentials: false
22
+
23
+ - name: Set up Python
24
+ uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
25
+ with:
26
+ python-version: "3.13"
27
+
28
+ - name: Build distribution
29
+ run: |
30
+ python -m pip install --upgrade pip
31
+ python -m pip install build twine pytest
32
+ python -m pip install -e .
33
+ python -m pytest -q tests/test_dolt_declarations.py
34
+ python tools/validate_repository.py
35
+ python -m build
36
+
37
+ - name: Verify distribution metadata
38
+ run: python -m twine check dist/*
39
+
40
+ - name: Verify release tag version
41
+ if: startsWith(github.ref, 'refs/tags/package-v')
42
+ env:
43
+ RELEASE_TAG: ${{ github.ref_name }}
44
+ run: |
45
+ python - <<'PY'
46
+ import os
47
+ import tomllib
48
+ from pathlib import Path
49
+
50
+ project = tomllib.loads(Path("pyproject.toml").read_text())
51
+ version = project["project"]["version"]
52
+ tag = os.environ["RELEASE_TAG"]
53
+ if tag != f"package-v{version}":
54
+ raise SystemExit(
55
+ f"release tag {tag!r} does not match project version package-v{version}"
56
+ )
57
+ PY
58
+
59
+ - name: Store distribution artifacts
60
+ uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
61
+ with:
62
+ name: python-package-distributions
63
+ path: dist/
64
+ if-no-files-found: error
65
+
66
+ publish-testpypi:
67
+ name: Publish to TestPyPI
68
+ if: github.event_name == 'workflow_dispatch'
69
+ needs: build
70
+ runs-on: ubuntu-latest
71
+ environment:
72
+ name: testpypi
73
+ url: https://test.pypi.org/p/openstatspec-specification
74
+ permissions:
75
+ id-token: write
76
+
77
+ steps:
78
+ - name: Download distribution artifacts
79
+ uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
80
+ with:
81
+ name: python-package-distributions
82
+ path: dist/
83
+
84
+ - name: Publish distribution to TestPyPI
85
+ uses: pypa/gh-action-pypi-publish@dc37677b2e1c63e2034f94d8a5b11f265b73ba33 # v1.14.2
86
+ with:
87
+ repository-url: https://test.pypi.org/legacy/
88
+
89
+ publish-pypi:
90
+ name: Publish to PyPI
91
+ if: startsWith(github.ref, 'refs/tags/package-v')
92
+ needs: build
93
+ runs-on: ubuntu-latest
94
+ environment:
95
+ name: pypi
96
+ url: https://pypi.org/p/openstatspec-specification
97
+ permissions:
98
+ id-token: write
99
+
100
+ steps:
101
+ - name: Download distribution artifacts
102
+ uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
103
+ with:
104
+ name: python-package-distributions
105
+ path: dist/
106
+
107
+ - name: Publish distribution to PyPI
108
+ uses: pypa/gh-action-pypi-publish@dc37677b2e1c63e2034f94d8a5b11f265b73ba33 # v1.14.2
@@ -0,0 +1,5 @@
1
+ __pycache__/
2
+ *.py[cod]
3
+ dist/
4
+ build/
5
+ *.egg-info/
@@ -2,9 +2,15 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
- Target stable specification release: `v0.3.0` (not published).
5
+ Future changes will be listed here.
6
6
 
7
- Until a protected or signed `v0.3.0` tag targets this work, implementations MUST identify it with `specification_status: release_candidate`, `specification_release: null`, and the exact immutable specification commit. The entries below do not constitute a stable release.
7
+ ## v0.3.0 - 2026-08-12
8
+
9
+ Release preparation for the planned stable `v0.3.0` tag. Until a protected or
10
+ signed `v0.3.0` tag targets this exact release commit, implementations MUST
11
+ identify it with `specification_status: release_candidate`,
12
+ `specification_release: null`, and the exact immutable specification commit.
13
+ The entries below become the stable release only when that tag exists.
8
14
 
9
15
  - Added backward-compatible Transformation Plan and SPSS Syntax Frontend 0.2
10
16
  contracts for sequential numeric `COMPUTE` and conditional `IF`, bounded
@@ -17,9 +23,24 @@ Until a protected or signed `v0.3.0` tag targets this work, implementations MUST
17
23
  action followed by an existing-target apply with no automatic Dolt commit.
18
24
  - Added independent synthetic golden fixtures, hashes, examples, and repository
19
25
  validation gates for the new contracts.
20
- - Corrected the SPSS Syntax Frontend 0.1 schema's `$defs` and `$ref` keywords
21
- so typed value-label values are constrained as the existing contract states;
22
- this is eligible for a patch-series backport under the schema-defect policy.
26
+
27
+ - Packaged the repository's Dolt declaration validator and authoritative SQL
28
+ resources as the `openstatspec-specification` companion distribution.
29
+ - Bound every concrete Dolt declaration to a declaration ID, adapter
30
+ implementation and exact version, exact specification commit, and conformance
31
+ run ID; exact single-match selection is required before mutation.
32
+
33
+ - Added a pending symbolic Dolt profile template and a separate concrete adapter
34
+ declaration schema/path and contract for tested active-version identity,
35
+ numeric limits, DDL atomicity, audit-safe cleanup failure, and machine-linked
36
+ boundary/fault evidence.
37
+
38
+ ## v0.2.1 - 2026-08-04
39
+
40
+ - Corrected the SPSS Syntax Frontend 0.1 schema's `$defs` and `$ref`
41
+ keywords so typed value-label values are constrained as the existing
42
+ contract states. This maintenance release contains no Transformation Plan or
43
+ SPSS Syntax Frontend 0.2 work.
23
44
 
24
45
  ## v0.2.0 - 2026-07-31
25
46
 
@@ -25,7 +25,7 @@ remains an explicitly unsupported [future dialect](docs/mssql-dialect-roadmap.md
25
25
 
26
26
  OpenStatSpec does not define long-form cells, EAV storage, table splitting, reshaping, automatic harmonization, or questionnaire/study entities. It does not infer respondent keys or combine datasets. All conformant database-object identifiers are generic; the double-underscore prefix is reserved for standard technical identifiers.
27
27
 
28
- [Versioning](VERSIONING.md) defines compatibility and release rules. [Roadmap](ROADMAP.md) tracks remaining project work and maintainer setup.
28
+ [Versioning](VERSIONING.md) defines compatibility and release rules. [Releasing](RELEASING.md) defines the maintainer release checklist. [Roadmap](ROADMAP.md) tracks remaining project work and maintainer setup.
29
29
 
30
30
  ## Optional SQL transformation workflow
31
31
 
@@ -59,6 +59,13 @@ to be provisioned separately before an in-place transformation apply.
59
59
  - `docs/spss-profile.md` — SPSS source-faithful mapping rules.
60
60
  - [Python / pinned pyspssio implementation profile](docs/implementation-profiles/python-pyspssio-0.5.1.md) — Python adapter pyspssio capability boundary; it does not relax the normative SAV/ZSAV profile.
61
61
  - `sql/dialect-profiles.md` — initial SQLite, PostgreSQL, MySQL/MariaDB and Dolt physical profiles.
62
+ - `sql/dolt-adapter-declaration-schema.json` — machine-readable contract for
63
+ concrete Dolt adapter declarations.
64
+ - `sql/dolt-adapter-declarations/` — declaration and evidence resources; the
65
+ checked-in baseline remains a symbolic template until a concrete adapter
66
+ declaration is published.
67
+ - `openstatspec-specification` — installable companion distribution exposing
68
+ the shared Dolt declaration validator and authoritative SQL resources.
62
69
  - `sql/` — dialect-neutral schema outline and profile notes.
63
70
  - `sql/transformation-workflow-profile-schema.sql` - optional derived-data
64
71
  catalog outline, separate from the immutable core catalog.
@@ -76,7 +83,7 @@ to be provisioned separately before an in-place transformation apply.
76
83
 
77
84
  Implementations must preflight target capabilities before import. If the target cannot faithfully create one wide table because of column, identifier, string, or row limits, import must fail atomically with a machine-readable capability diagnostic. It must never silently truncate, drop, split, transpose, pivot, or transform source data.
78
85
 
79
- This specification repository publishes only normative Transformation Plan and SPSS syntax frontend schemas, documentation, and declarative fixtures. Executable validation or behavioral conformance code, including parser, SQL-engine, transaction, and adapter behavior, belongs in each implementation or adapter repository.
86
+ This specification repository publishes normative Transformation Plan and SPSS syntax frontend schemas, documentation, declarative fixtures, and its own structural/hash/fixture validation in tools/validate_repository.py. It does not contain executable implementation or behavioral conformance code: parser, SQL-engine, transaction, and adapter behavior belong in each implementation or adapter repository.
80
87
 
81
88
  ## Who it is for
82
89
 
@@ -0,0 +1,60 @@
1
+ # Releasing OpenStatSpec
2
+
3
+ This checklist governs releases of this specification repository. It does not
4
+ publish an implementation package and does not substitute for implementation
5
+ or adapter conformance evidence.
6
+
7
+ The repository release maintainer with repository-admin authority is responsible
8
+ for completing this checklist and preserving the release controls it requires.
9
+
10
+ The Python companion distribution is released separately from the specification.
11
+ Package tags use the `package-vX.Y.Z` convention; specification tags use
12
+ `vX.Y.Z`. A specification tag MUST NOT publish the package, and a package tag
13
+ MUST match the version declared in `pyproject.toml`.
14
+
15
+ ## Before preparing a release
16
+
17
+ - Choose an exact reviewed commit on the appropriate branch and record its
18
+ full commit ID. Stable tags use the convention `vX.Y.Z`.
19
+ - Keep maintenance releases on their maintained release branch. Merge the
20
+ equivalent corrective change to `main` separately when it is also needed by
21
+ the next minor release; do not make a maintenance tag point at unrelated
22
+ unreleased `main` work.
23
+ - Run the repository validation at that exact commit and confirm the required
24
+ CI run for that commit is successful. A green run for a nearby commit is not
25
+ sufficient.
26
+ - Gate a specification release on its normative artifacts, review, versioning,
27
+ repository validation, and exact-commit CI. Adapter conformance and
28
+ service-matrix evidence are downstream: they gate only an implementation's
29
+ support or conformance claims and package releases against the exact
30
+ specification commit and, once published, its release identifier. They do not
31
+ gate specification publication.
32
+ - Confirm the changelog, versioning impact, and release notes describe only
33
+ the included specification changes.
34
+
35
+ ## Tag and release
36
+
37
+ - Create and push `vX.Y.Z` only after the exact release commit has passed
38
+ CI. Use the selected signed annotated-tag path where signing is available,
39
+ or the selected protected-tag path restricted to release maintainers. Do not
40
+ move or reuse a published tag.
41
+ - Wait for the CI run in that exact tag context to succeed before creating or
42
+ publishing the immutable GitHub release; a branch-commit CI result is not a
43
+ substitute for the tag-context result.
44
+ - Create the GitHub release as a draft from that exact tag and verify the tag
45
+ target, title, notes, links, and any release assets before publication.
46
+ - Before publishing, verify the repository immutable-releases setting is
47
+ enabled. If that setting or the selected signed-or-protected tag path is
48
+ unavailable, stop and restore the missing selected control before publishing.
49
+ - Publish the release only after those checks are confirmed.
50
+
51
+ ## After publication
52
+
53
+ - Verify GitHub reports immutable true for the published release and its tag as
54
+ the intended full commit ID.
55
+ - Verify the tag-triggered CI run is successful and that the release notes are
56
+ visible from the repository release page.
57
+ - Track implementation conformance and service-matrix work separately from
58
+ specification release gates. Publishing a specification does not assert
59
+ implementation conformance, and incomplete implementation evidence does not
60
+ block specification publication.
@@ -26,10 +26,12 @@ Prerequisite: the core mapping and canonical fixtures are stable enough to test
26
26
 
27
27
  ## 4. CI, releases, and documentation
28
28
 
29
- - [x] Add continuous checks for specification links, schema examples, fixtures, and adapter conformance once the relevant repositories exist.
29
+ - [x] Add continuous specification-repository checks for links, schema examples,
30
+ and fixtures.
31
+ - [x] Define adapter conformance guidance; each adapter repository owns its runtime CI and evidence.
30
32
  - [x] Define versioning and compatibility guidance for the specification and profiles.
31
- - [x] Publish release notes and tagged specification releases; `v0.2.0` is the
32
- current public specification release.
33
+ - [x] Publish release notes and tagged specification releases; `v0.2.1` is the
34
+ current public specification release and is immutable.
33
35
  - [ ] Expand implementation, dialect-profile, and adoption documentation from real adapter experience.
34
36
 
35
37
  ## 5. Future adapters
@@ -45,7 +47,10 @@ Prerequisite: the SPSS profile, fixtures, and reference-adapter lessons are matu
45
47
  - [x] Define parameter binding, lineage, hashes, audit, metadata and weight
46
48
  propagation, dialect boundaries, and atomic publication.
47
49
  - [x] Add machine-readable positive and failure conformance cases.
48
- - [ ] Run all cases in reference adapters before publishing profile 1.0.
50
+ - [ ] Publish profile 1.0 after its normative contract, declarative cases, and
51
+ specification-repository checks are complete.
52
+ - [ ] Require each implementation to pass the relevant cases before claiming
53
+ profile 1.0 conformance.
49
54
 
50
55
  ## 7. Canonical transformation plans and syntax frontends
51
56
 
@@ -55,8 +60,9 @@ Prerequisite: the SPSS profile, fixtures, and reference-adapter lessons are matu
55
60
  machine-readable conformance cases.
56
61
  - [x] Define the in-place binding that preserves dataset/table identity on
57
62
  supported SQL profiles and never creates an OpenStatSpec undo/copy layer.
58
- - [ ] Run the in-place apply service matrix against every claimed SQL profile
59
- before publishing execution claims.
63
+ - [ ] Require each implementation to run the in-place apply service matrix
64
+ against every claimed SQL profile before publishing its execution claims;
65
+ this does not block specification publication.
60
66
  - [ ] Evaluate additional language frontends as separate adapters that lower to
61
67
  the same canonical plan.
62
68
 
@@ -69,32 +75,42 @@ scope without creating a capability claim.
69
75
  - [ ] Select and pin Python and PHP driver stacks after fidelity and security evaluation.
70
76
  - [ ] Define T-SQL types, quoting, catalog binding, identity probes and effective-limit preflight.
71
77
  - [ ] Add exact cumulative-update CI services and complete conformance/fault-injection evidence.
72
- - [ ] Publish an independent dialect profile only after both reference adapters pass the evidence gate.
78
+ - [ ] Publish an independent dialect profile after its normative T-SQL contract,
79
+ declarative cases, and specification-repository checks are complete.
80
+ - [ ] Require each reference adapter to pass the relevant evidence gate before
81
+ claiming Microsoft SQL Server support.
73
82
  - [ ] Evaluate Azure SQL identities separately; do not inherit a SQL Server claim implicitly.
74
83
 
75
84
  ## 9. Next release dependency order
76
85
 
77
- The next release work must proceed in this order. Completion of an earlier
78
- artifact is a dependency, not evidence that later adapter or service-matrix
79
- work has passed.
86
+ The specification release and implementation claims have separate gates. The
87
+ specification defines and publishes the contract first; implementation evidence
88
+ follows and does not block specification publication.
80
89
 
81
90
  1. [x] Merged Transformation Plan and SPSS Frontend profile 0.2 as
82
91
  unreleased, release-candidate work for the planned specification `v0.3.0`.
83
- 2. [ ] Rebase Python `0.5.0` conditional transformations on the lifecycle
84
- implementation, pin the final profile commit, and pass the combined service
85
- and conformance gates before making an adapter claim.
86
- 3. [ ] Migrate PHP to the canonical transformation plan and pass the same
87
- relevant conformance cases before it claims conditional profile 0.2 support.
88
- 4. [ ] Select the exact intended `v0.3.0` commit and require that
89
- same commit to pass repository validation and all required reference-adapter
90
- gates. Only after those gates pass and release-tag signing or protection is
91
- configured, create a signed or protected `v0.3.0` tag on that commit.
92
+ 2. [ ] Complete and review the normative `v0.3.0` documents, schemas,
93
+ declarative fixtures, and hashes; select the exact release commit and pass
94
+ this repository's validation and CI on that commit.
95
+ 3. [ ] After confirming release-tag signing or protection, create a signed or
96
+ protected `v0.3.0` tag on that commit, require its exact tag-context CI run
97
+ to pass, and follow the [release checklist](RELEASING.md) draft and control
98
+ verification before publishing the immutable release.
92
99
  Until then claims use `release_candidate`, a null release identifier, and
93
100
  the exact tested commit.
101
+ 4. [ ] Have Python pin the exact specification commit and, once published,
102
+ record its `v0.3.0` release identifier; rebase conditional transformations
103
+ on the lifecycle implementation and pass the combined service and
104
+ conformance gates before making an adapter claim or package release.
105
+ 5. [ ] Have PHP pin the exact specification commit and, once published, record
106
+ its `v0.3.0` release identifier; migrate to the canonical transformation plan
107
+ and pass the relevant conformance cases before making an adapter claim or
108
+ package release.
94
109
 
95
110
  The pending in-place service matrix and adapter conformance work in sections 6
96
- and 7 remains required; implementation package publication does not complete
97
- either evidence gate.
111
+ and 7 are downstream implementation gates. They do not block the `v0.3.0`
112
+ specification release, and publishing the specification does not complete those
113
+ implementation evidence gates.
98
114
 
99
115
  ## Maintainer setup
100
116
 
@@ -108,5 +124,11 @@ These are maintainer actions, not implementation tasks for the specification rep
108
124
  - [x] Register and publish the OpenStatSpec PHP package through Packagist. The
109
125
  public package establishes the registry setup; repository update ownership
110
126
  still needs release-process verification.
111
- - [ ] Decide the release owner(s), tag naming convention, and release checklist for every repository.
112
- - [ ] Protect the default branches and ensure release tags are created only by the agreed release workflow; `main` is currently unprotected.
127
+ - [x] Define the specification release tag convention and maintainer checklist in
128
+ [RELEASING.md](RELEASING.md); the repository release maintainer with repository-admin responsibility owns release-process controls.
129
+ - [x] Protect the default branch and release tags. main requires pull requests,
130
+ successful specification CI, and resolved conversations; force pushes and
131
+ deletion are disabled, and these controls apply to administrators. The active
132
+ v* tag ruleset permits bypass only to repository administrators. GitHub
133
+ Actions use full-SHA, GitHub-owned actions, and merged head branches are
134
+ automatically deleted.