okf-parser 0.45.4__tar.gz → 0.45.5__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 (349) hide show
  1. {okf_parser-0.45.4 → okf_parser-0.45.5}/Cargo.lock +2 -2
  2. {okf_parser-0.45.4 → okf_parser-0.45.5}/PKG-INFO +2 -2
  3. {okf_parser-0.45.4 → okf_parser-0.45.5}/README.md +1 -1
  4. okf_parser-0.45.5/changelog/0.45.5/scoped-npm-packages.md +9 -0
  5. {okf_parser-0.45.4 → okf_parser-0.45.5}/docs/native-engine.md +2 -2
  6. {okf_parser-0.45.4 → okf_parser-0.45.5}/docs/releasing.md +9 -7
  7. okf_parser-0.45.5/native-npm-linux-x64/README.md +15 -0
  8. {okf_parser-0.45.4 → okf_parser-0.45.5}/native-npm-linux-x64/package.json +2 -2
  9. {okf_parser-0.45.4 → okf_parser-0.45.5}/okf-engine/Cargo.toml +1 -1
  10. {okf_parser-0.45.4 → okf_parser-0.45.5}/pyproject.toml +1 -1
  11. {okf_parser-0.45.4 → okf_parser-0.45.5}/rfcs/0003-resumable-multi-registry-release.md +28 -7
  12. {okf_parser-0.45.4 → okf_parser-0.45.5}/rust-core/Cargo.toml +2 -2
  13. {okf_parser-0.45.4 → okf_parser-0.45.5}/scripts/registry_state.py +10 -3
  14. {okf_parser-0.45.4 → okf_parser-0.45.5}/scripts/release_contract.py +14 -11
  15. {okf_parser-0.45.4 → okf_parser-0.45.5}/tests/test_release_contract.py +19 -12
  16. {okf_parser-0.45.4 → okf_parser-0.45.5}/typescript/README.md +8 -8
  17. {okf_parser-0.45.4 → okf_parser-0.45.5}/typescript/package-lock.json +11 -11
  18. {okf_parser-0.45.4 → okf_parser-0.45.5}/typescript/package.json +3 -3
  19. {okf_parser-0.45.4 → okf_parser-0.45.5}/typescript/src/rust-core.ts +1 -1
  20. okf_parser-0.45.5/typescript/src/version.ts +1 -0
  21. {okf_parser-0.45.4 → okf_parser-0.45.5}/typescript-duckdb/README.md +6 -6
  22. {okf_parser-0.45.4 → okf_parser-0.45.5}/typescript-duckdb/package-lock.json +13 -13
  23. {okf_parser-0.45.4 → okf_parser-0.45.5}/typescript-duckdb/package.json +4 -4
  24. {okf_parser-0.45.4 → okf_parser-0.45.5}/typescript-duckdb/src/declared.ts +1 -1
  25. {okf_parser-0.45.4 → okf_parser-0.45.5}/typescript-duckdb/src/normalized.ts +1 -1
  26. {okf_parser-0.45.4 → okf_parser-0.45.5}/typescript-duckdb/src/session.ts +1 -1
  27. {okf_parser-0.45.4 → okf_parser-0.45.5}/typescript-duckdb/src/typed.ts +1 -1
  28. {okf_parser-0.45.4 → okf_parser-0.45.5}/typescript-duckdb/test/duckdb.test.ts +2 -2
  29. {okf_parser-0.45.4 → okf_parser-0.45.5}/uv.lock +4 -4
  30. okf_parser-0.45.4/native-npm-linux-x64/README.md +0 -15
  31. okf_parser-0.45.4/typescript/src/version.ts +0 -1
  32. {okf_parser-0.45.4 → okf_parser-0.45.5}/.gitignore +0 -0
  33. {okf_parser-0.45.4 → okf_parser-0.45.5}/Cargo.toml +0 -0
  34. {okf_parser-0.45.4 → okf_parser-0.45.5}/action.yml +0 -0
  35. {okf_parser-0.45.4 → okf_parser-0.45.5}/benchmarks/README.md +0 -0
  36. {okf_parser-0.45.4 → okf_parser-0.45.5}/benchmarks/__init__.py +0 -0
  37. {okf_parser-0.45.4 → okf_parser-0.45.5}/benchmarks/python_parser.py +0 -0
  38. {okf_parser-0.45.4 → okf_parser-0.45.5}/benchmarks/results/2026-08-08-rust-mvp.md +0 -0
  39. {okf_parser-0.45.4 → okf_parser-0.45.5}/benchmarks/results/2026-08-09-rust-e2e.md +0 -0
  40. {okf_parser-0.45.4 → okf_parser-0.45.5}/benchmarks/rust-facts.mjs +0 -0
  41. {okf_parser-0.45.4 → okf_parser-0.45.5}/benchmarks/rust_facts.py +0 -0
  42. {okf_parser-0.45.4 → okf_parser-0.45.5}/benchmarks/typescript-parser.mjs +0 -0
  43. {okf_parser-0.45.4 → okf_parser-0.45.5}/changelog/0.1.0.md +0 -0
  44. {okf_parser-0.45.4 → okf_parser-0.45.5}/changelog/0.10.0.md +0 -0
  45. {okf_parser-0.45.4 → okf_parser-0.45.5}/changelog/0.11.0.md +0 -0
  46. {okf_parser-0.45.4 → okf_parser-0.45.5}/changelog/0.11.1.md +0 -0
  47. {okf_parser-0.45.4 → okf_parser-0.45.5}/changelog/0.12.0.md +0 -0
  48. {okf_parser-0.45.4 → okf_parser-0.45.5}/changelog/0.13.0.md +0 -0
  49. {okf_parser-0.45.4 → okf_parser-0.45.5}/changelog/0.14.0.md +0 -0
  50. {okf_parser-0.45.4 → okf_parser-0.45.5}/changelog/0.14.1.md +0 -0
  51. {okf_parser-0.45.4 → okf_parser-0.45.5}/changelog/0.14.2.md +0 -0
  52. {okf_parser-0.45.4 → okf_parser-0.45.5}/changelog/0.15.0.md +0 -0
  53. {okf_parser-0.45.4 → okf_parser-0.45.5}/changelog/0.15.1.md +0 -0
  54. {okf_parser-0.45.4 → okf_parser-0.45.5}/changelog/0.15.2.md +0 -0
  55. {okf_parser-0.45.4 → okf_parser-0.45.5}/changelog/0.15.3.md +0 -0
  56. {okf_parser-0.45.4 → okf_parser-0.45.5}/changelog/0.15.4.md +0 -0
  57. {okf_parser-0.45.4 → okf_parser-0.45.5}/changelog/0.16.0.md +0 -0
  58. {okf_parser-0.45.4 → okf_parser-0.45.5}/changelog/0.17.0.md +0 -0
  59. {okf_parser-0.45.4 → okf_parser-0.45.5}/changelog/0.18.0.md +0 -0
  60. {okf_parser-0.45.4 → okf_parser-0.45.5}/changelog/0.18.1.md +0 -0
  61. {okf_parser-0.45.4 → okf_parser-0.45.5}/changelog/0.19.0.md +0 -0
  62. {okf_parser-0.45.4 → okf_parser-0.45.5}/changelog/0.19.1.md +0 -0
  63. {okf_parser-0.45.4 → okf_parser-0.45.5}/changelog/0.2.0.md +0 -0
  64. {okf_parser-0.45.4 → okf_parser-0.45.5}/changelog/0.20.0.md +0 -0
  65. {okf_parser-0.45.4 → okf_parser-0.45.5}/changelog/0.20.1.md +0 -0
  66. {okf_parser-0.45.4 → okf_parser-0.45.5}/changelog/0.21.0.md +0 -0
  67. {okf_parser-0.45.4 → okf_parser-0.45.5}/changelog/0.22.0.md +0 -0
  68. {okf_parser-0.45.4 → okf_parser-0.45.5}/changelog/0.23.0.md +0 -0
  69. {okf_parser-0.45.4 → okf_parser-0.45.5}/changelog/0.24.0.md +0 -0
  70. {okf_parser-0.45.4 → okf_parser-0.45.5}/changelog/0.25.0.md +0 -0
  71. {okf_parser-0.45.4 → okf_parser-0.45.5}/changelog/0.26.0.md +0 -0
  72. {okf_parser-0.45.4 → okf_parser-0.45.5}/changelog/0.27.0.md +0 -0
  73. {okf_parser-0.45.4 → okf_parser-0.45.5}/changelog/0.28.0.md +0 -0
  74. {okf_parser-0.45.4 → okf_parser-0.45.5}/changelog/0.29.0.md +0 -0
  75. {okf_parser-0.45.4 → okf_parser-0.45.5}/changelog/0.3.0.md +0 -0
  76. {okf_parser-0.45.4 → okf_parser-0.45.5}/changelog/0.30.0.md +0 -0
  77. {okf_parser-0.45.4 → okf_parser-0.45.5}/changelog/0.31.0.md +0 -0
  78. {okf_parser-0.45.4 → okf_parser-0.45.5}/changelog/0.32.0.md +0 -0
  79. {okf_parser-0.45.4 → okf_parser-0.45.5}/changelog/0.32.1.md +0 -0
  80. {okf_parser-0.45.4 → okf_parser-0.45.5}/changelog/0.33.0.md +0 -0
  81. {okf_parser-0.45.4 → okf_parser-0.45.5}/changelog/0.34.0.md +0 -0
  82. {okf_parser-0.45.4 → okf_parser-0.45.5}/changelog/0.35.0.md +0 -0
  83. {okf_parser-0.45.4 → okf_parser-0.45.5}/changelog/0.36.0.md +0 -0
  84. {okf_parser-0.45.4 → okf_parser-0.45.5}/changelog/0.37.0.md +0 -0
  85. {okf_parser-0.45.4 → okf_parser-0.45.5}/changelog/0.38.0.md +0 -0
  86. {okf_parser-0.45.4 → okf_parser-0.45.5}/changelog/0.39.0.md +0 -0
  87. {okf_parser-0.45.4 → okf_parser-0.45.5}/changelog/0.39.1.md +0 -0
  88. {okf_parser-0.45.4 → okf_parser-0.45.5}/changelog/0.4.0.md +0 -0
  89. {okf_parser-0.45.4 → okf_parser-0.45.5}/changelog/0.40.0.md +0 -0
  90. {okf_parser-0.45.4 → okf_parser-0.45.5}/changelog/0.41.0.md +0 -0
  91. {okf_parser-0.45.4 → okf_parser-0.45.5}/changelog/0.41.1.md +0 -0
  92. {okf_parser-0.45.4 → okf_parser-0.45.5}/changelog/0.41.2.md +0 -0
  93. {okf_parser-0.45.4 → okf_parser-0.45.5}/changelog/0.41.3.md +0 -0
  94. {okf_parser-0.45.4 → okf_parser-0.45.5}/changelog/0.42.0.md +0 -0
  95. {okf_parser-0.45.4 → okf_parser-0.45.5}/changelog/0.42.1.md +0 -0
  96. {okf_parser-0.45.4 → okf_parser-0.45.5}/changelog/0.42.2.md +0 -0
  97. {okf_parser-0.45.4 → okf_parser-0.45.5}/changelog/0.42.3.md +0 -0
  98. {okf_parser-0.45.4 → okf_parser-0.45.5}/changelog/0.42.4.md +0 -0
  99. {okf_parser-0.45.4 → okf_parser-0.45.5}/changelog/0.42.5.md +0 -0
  100. {okf_parser-0.45.4 → okf_parser-0.45.5}/changelog/0.42.6.md +0 -0
  101. {okf_parser-0.45.4 → okf_parser-0.45.5}/changelog/0.42.7.md +0 -0
  102. {okf_parser-0.45.4 → okf_parser-0.45.5}/changelog/0.42.8.md +0 -0
  103. {okf_parser-0.45.4 → okf_parser-0.45.5}/changelog/0.43.0.md +0 -0
  104. {okf_parser-0.45.4 → okf_parser-0.45.5}/changelog/0.43.1.md +0 -0
  105. {okf_parser-0.45.4 → okf_parser-0.45.5}/changelog/0.44.0.md +0 -0
  106. {okf_parser-0.45.4 → okf_parser-0.45.5}/changelog/0.45.0.md +0 -0
  107. {okf_parser-0.45.4 → okf_parser-0.45.5}/changelog/0.45.1.md +0 -0
  108. {okf_parser-0.45.4 → okf_parser-0.45.5}/changelog/0.45.2.md +0 -0
  109. {okf_parser-0.45.4 → okf_parser-0.45.5}/changelog/0.45.3/correct-0-45-2-notes.md +0 -0
  110. {okf_parser-0.45.4 → okf_parser-0.45.5}/changelog/0.45.3/pep723-workflow-python.md +0 -0
  111. {okf_parser-0.45.4 → okf_parser-0.45.5}/changelog/0.45.3/uv-first-release-validation.md +0 -0
  112. {okf_parser-0.45.4 → okf_parser-0.45.5}/changelog/0.45.3/version-belongs-to-the-release.md +0 -0
  113. {okf_parser-0.45.4 → okf_parser-0.45.5}/changelog/0.45.4/agent-first-search-rfc.md +0 -0
  114. {okf_parser-0.45.4 → okf_parser-0.45.5}/changelog/0.45.4/atomic-import-writes.md +0 -0
  115. {okf_parser-0.45.4 → okf_parser-0.45.5}/changelog/0.45.4/codebase-to-okf-lexical-containment.md +0 -0
  116. {okf_parser-0.45.4 → okf_parser-0.45.5}/changelog/0.45.4/codebase-to-okf-local-import-resolution.md +0 -0
  117. {okf_parser-0.45.4 → okf_parser-0.45.5}/changelog/0.45.4/codebase-to-okf-one-shot.md +0 -0
  118. {okf_parser-0.45.4 → okf_parser-0.45.5}/changelog/0.45.4/codebase-to-okf-project-manifest.md +0 -0
  119. {okf_parser-0.45.4 → okf_parser-0.45.5}/changelog/0.45.4/codebase-to-okf-self-describing-types.md +0 -0
  120. {okf_parser-0.45.4 → okf_parser-0.45.5}/changelog/0.45.4/codebase-to-okf-skill.md +0 -0
  121. {okf_parser-0.45.4 → okf_parser-0.45.5}/changelog/0.45.4/duckdb-extension-concepts-slice.md +0 -0
  122. {okf_parser-0.45.4 → okf_parser-0.45.5}/changelog/0.45.4/duckdb-extension-read-surface.md +0 -0
  123. {okf_parser-0.45.4 → okf_parser-0.45.5}/changelog/0.45.4/git-commit-envelope.md +0 -0
  124. {okf_parser-0.45.4 → okf_parser-0.45.5}/changelog/0.45.4/projection-documents.md +0 -0
  125. {okf_parser-0.45.4 → okf_parser-0.45.5}/changelog/0.45.4/referential-schema-export-embed-mode.md +0 -0
  126. {okf_parser-0.45.4 → okf_parser-0.45.5}/changelog/0.45.4/referential-schema-export-key-mode.md +0 -0
  127. {okf_parser-0.45.4 → okf_parser-0.45.5}/changelog/0.45.4/referential-schema-export.md +0 -0
  128. {okf_parser-0.45.4 → okf_parser-0.45.5}/changelog/0.45.4/refs-depth-and-composite-keys.md +0 -0
  129. {okf_parser-0.45.4 → okf_parser-0.45.5}/changelog/0.45.4/rfc-0015-canonical-markdown-ir.md +0 -0
  130. {okf_parser-0.45.4 → okf_parser-0.45.5}/changelog/0.45.4/rfc0009-git-commits.md +0 -0
  131. {okf_parser-0.45.4 → okf_parser-0.45.5}/changelog/0.45.4/rfc0010-native-duckdb-extension.md +0 -0
  132. {okf_parser-0.45.4 → okf_parser-0.45.5}/changelog/0.45.4/rfc0011-tracked-migrations.md +0 -0
  133. {okf_parser-0.45.4 → okf_parser-0.45.5}/changelog/0.45.4/rfc0015-rust-markdown-ast.md +0 -0
  134. {okf_parser-0.45.4 → okf_parser-0.45.5}/changelog/0.45.4/rfc0017-fact-profile.md +0 -0
  135. {okf_parser-0.45.4 → okf_parser-0.45.5}/changelog/0.45.4/rfc0018-projection-export.md +0 -0
  136. {okf_parser-0.45.4 → okf_parser-0.45.5}/changelog/0.45.4/type-specifications.md +0 -0
  137. {okf_parser-0.45.4 → okf_parser-0.45.5}/changelog/0.5.0.md +0 -0
  138. {okf_parser-0.45.4 → okf_parser-0.45.5}/changelog/0.5.1.md +0 -0
  139. {okf_parser-0.45.4 → okf_parser-0.45.5}/changelog/0.6.0.md +0 -0
  140. {okf_parser-0.45.4 → okf_parser-0.45.5}/changelog/0.7.0.md +0 -0
  141. {okf_parser-0.45.4 → okf_parser-0.45.5}/changelog/0.8.0.md +0 -0
  142. {okf_parser-0.45.4 → okf_parser-0.45.5}/changelog/0.9.0.md +0 -0
  143. {okf_parser-0.45.4 → okf_parser-0.45.5}/conformance/content-digests.json +0 -0
  144. {okf_parser-0.45.4 → okf_parser-0.45.5}/conformance/exclusion.json +0 -0
  145. {okf_parser-0.45.4 → okf_parser-0.45.5}/conformance/formatting.json +0 -0
  146. {okf_parser-0.45.4 → okf_parser-0.45.5}/conformance/frontmatter.json +0 -0
  147. {okf_parser-0.45.4 → okf_parser-0.45.5}/conformance/git-commit-messages.json +0 -0
  148. {okf_parser-0.45.4 → okf_parser-0.45.5}/conformance/schema-inference.json +0 -0
  149. {okf_parser-0.45.4 → okf_parser-0.45.5}/conformance/schema-output.json +0 -0
  150. {okf_parser-0.45.4 → okf_parser-0.45.5}/conformance/type-spec-slugs.json +0 -0
  151. {okf_parser-0.45.4 → okf_parser-0.45.5}/docs/architecture.md +0 -0
  152. {okf_parser-0.45.4 → okf_parser-0.45.5}/docs/cli.md +0 -0
  153. {okf_parser-0.45.4 → okf_parser-0.45.5}/docs/graphql.md +0 -0
  154. {okf_parser-0.45.4 → okf_parser-0.45.5}/docs/types/architecture.md +0 -0
  155. {okf_parser-0.45.4 → okf_parser-0.45.5}/docs/types/benchmarkresult.md +0 -0
  156. {okf_parser-0.45.4 → okf_parser-0.45.5}/docs/types/documentation.md +0 -0
  157. {okf_parser-0.45.4 → okf_parser-0.45.5}/docs/types/procedure.md +0 -0
  158. {okf_parser-0.45.4 → okf_parser-0.45.5}/docs/types/project.md +0 -0
  159. {okf_parser-0.45.4 → okf_parser-0.45.5}/docs/types/release-note.md +0 -0
  160. {okf_parser-0.45.4 → okf_parser-0.45.5}/docs/types/release.md +0 -0
  161. {okf_parser-0.45.4 → okf_parser-0.45.5}/docs/types/rfc.md +0 -0
  162. {okf_parser-0.45.4 → okf_parser-0.45.5}/docs/types/skill.md +0 -0
  163. {okf_parser-0.45.4 → okf_parser-0.45.5}/docs/types/spec.md +0 -0
  164. {okf_parser-0.45.4 → okf_parser-0.45.5}/duckdb-extension/Cargo.toml +0 -0
  165. {okf_parser-0.45.4 → okf_parser-0.45.5}/duckdb-extension/Makefile +0 -0
  166. {okf_parser-0.45.4 → okf_parser-0.45.5}/duckdb-extension/README.md +0 -0
  167. {okf_parser-0.45.4 → okf_parser-0.45.5}/duckdb-extension/src/lib.rs +0 -0
  168. {okf_parser-0.45.4 → okf_parser-0.45.5}/duckdb-extension/test/knowledge/index.md +0 -0
  169. {okf_parser-0.45.4 → okf_parser-0.45.5}/duckdb-extension/test/knowledge/node.md +0 -0
  170. {okf_parser-0.45.4 → okf_parser-0.45.5}/examples/minimal/concepts/access-review.md +0 -0
  171. {okf_parser-0.45.4 → okf_parser-0.45.5}/examples/minimal/concepts/onboarding.md +0 -0
  172. {okf_parser-0.45.4 → okf_parser-0.45.5}/examples/minimal/index.md +0 -0
  173. {okf_parser-0.45.4 → okf_parser-0.45.5}/examples/minimal/log.md +0 -0
  174. {okf_parser-0.45.4 → okf_parser-0.45.5}/fastmcp.json +0 -0
  175. {okf_parser-0.45.4 → okf_parser-0.45.5}/okf-engine/src/engine.rs +0 -0
  176. {okf_parser-0.45.4 → okf_parser-0.45.5}/okf-engine/src/lib.rs +0 -0
  177. {okf_parser-0.45.4 → okf_parser-0.45.5}/okf-engine/src/yaml.rs +0 -0
  178. {okf_parser-0.45.4 → okf_parser-0.45.5}/rfcs/0001-python-model-codegen.md +0 -0
  179. {okf_parser-0.45.4 → okf_parser-0.45.5}/rfcs/0002-typescript-sibling-package.md +0 -0
  180. {okf_parser-0.45.4 → okf_parser-0.45.5}/rfcs/0004-gitignore-exclusion-semantics.md +0 -0
  181. {okf_parser-0.45.4 → okf_parser-0.45.5}/rfcs/0005-relational-frontmatter-writes.md +0 -0
  182. {okf_parser-0.45.4 → okf_parser-0.45.5}/rfcs/0006-declared-column-types.md +0 -0
  183. {okf_parser-0.45.4 → okf_parser-0.45.5}/rfcs/0007-declared-relational-constraints.md +0 -0
  184. {okf_parser-0.45.4 → okf_parser-0.45.5}/rfcs/0008-effect-aware-mcp-writes.md +0 -0
  185. {okf_parser-0.45.4 → okf_parser-0.45.5}/rfcs/0009-git-commits-as-okf.md +0 -0
  186. {okf_parser-0.45.4 → okf_parser-0.45.5}/rfcs/0010-native-duckdb-extension.md +0 -0
  187. {okf_parser-0.45.4 → okf_parser-0.45.5}/rfcs/0011-tracked-migrations.md +0 -0
  188. {okf_parser-0.45.4 → okf_parser-0.45.5}/rfcs/0015-canonical-rust-markdown-ast-and-typed-document-model.md +0 -0
  189. {okf_parser-0.45.4 → okf_parser-0.45.5}/rfcs/0016-agent-first-bundle-search-and-retrieval.md +0 -0
  190. {okf_parser-0.45.4 → okf_parser-0.45.5}/rfcs/0017-fact-profile.md +0 -0
  191. {okf_parser-0.45.4 → okf_parser-0.45.5}/rfcs/0018-referential-schema-export-and-projections.md +0 -0
  192. {okf_parser-0.45.4 → okf_parser-0.45.5}/rfcs/0019-self-contained-recipe-skills.md +0 -0
  193. {okf_parser-0.45.4 → okf_parser-0.45.5}/rust-core/.gitignore +0 -0
  194. {okf_parser-0.45.4 → okf_parser-0.45.5}/rust-core/src/engine.rs +0 -0
  195. {okf_parser-0.45.4 → okf_parser-0.45.5}/rust-core/src/main.rs +0 -0
  196. {okf_parser-0.45.4 → okf_parser-0.45.5}/scripts/__init__.py +0 -0
  197. {okf_parser-0.45.4 → okf_parser-0.45.5}/scripts/changelog_notes.py +0 -0
  198. {okf_parser-0.45.4 → okf_parser-0.45.5}/scripts/check_no_duckdb_link.py +0 -0
  199. {okf_parser-0.45.4 → okf_parser-0.45.5}/scripts/native_from_wheel.py +0 -0
  200. {okf_parser-0.45.4 → okf_parser-0.45.5}/scripts/project_version.py +0 -0
  201. {okf_parser-0.45.4 → okf_parser-0.45.5}/scripts/release_summary.py +0 -0
  202. {okf_parser-0.45.4 → okf_parser-0.45.5}/scripts/verify_wheel_scripts.py +0 -0
  203. {okf_parser-0.45.4 → okf_parser-0.45.5}/skills/codebase-to-okf/SKILL.md +0 -0
  204. {okf_parser-0.45.4 → okf_parser-0.45.5}/skills/codebase-to-okf/scripts/codebase_to_okf.py +0 -0
  205. {okf_parser-0.45.4 → okf_parser-0.45.5}/skills/codebase-to-okf/scripts/finalize_codebase_okf.py +0 -0
  206. {okf_parser-0.45.4 → okf_parser-0.45.5}/skills/codebase-to-okf/scripts/python_codebase_to_okf.py +0 -0
  207. {okf_parser-0.45.4 → okf_parser-0.45.5}/skills/codebase-to-okf/scripts/python_project_metadata_to_okf.py +0 -0
  208. {okf_parser-0.45.4 → okf_parser-0.45.5}/skills/codebase-to-okf/scripts/query_codebase_okf.py +0 -0
  209. {okf_parser-0.45.4 → okf_parser-0.45.5}/skills/codebase-to-okf/scripts/resolve_codebase_okf.py +0 -0
  210. {okf_parser-0.45.4 → okf_parser-0.45.5}/src/okf_parser/__init__.py +0 -0
  211. {okf_parser-0.45.4 → okf_parser-0.45.5}/src/okf_parser/apply.py +0 -0
  212. {okf_parser-0.45.4 → okf_parser-0.45.5}/src/okf_parser/bundle.py +0 -0
  213. {okf_parser-0.45.4 → okf_parser-0.45.5}/src/okf_parser/bundle_import.py +0 -0
  214. {okf_parser-0.45.4 → okf_parser-0.45.5}/src/okf_parser/classification.py +0 -0
  215. {okf_parser-0.45.4 → okf_parser-0.45.5}/src/okf_parser/cli.py +0 -0
  216. {okf_parser-0.45.4 → okf_parser-0.45.5}/src/okf_parser/concepts.py +0 -0
  217. {okf_parser-0.45.4 → okf_parser-0.45.5}/src/okf_parser/declared_schema.py +0 -0
  218. {okf_parser-0.45.4 → okf_parser-0.45.5}/src/okf_parser/digests.py +0 -0
  219. {okf_parser-0.45.4 → okf_parser-0.45.5}/src/okf_parser/discovery.py +0 -0
  220. {okf_parser-0.45.4 → okf_parser-0.45.5}/src/okf_parser/duckdb.py +0 -0
  221. {okf_parser-0.45.4 → okf_parser-0.45.5}/src/okf_parser/duckdb_types.py +0 -0
  222. {okf_parser-0.45.4 → okf_parser-0.45.5}/src/okf_parser/edit.py +0 -0
  223. {okf_parser-0.45.4 → okf_parser-0.45.5}/src/okf_parser/engine.py +0 -0
  224. {okf_parser-0.45.4 → okf_parser-0.45.5}/src/okf_parser/exclusion.py +0 -0
  225. {okf_parser-0.45.4 → okf_parser-0.45.5}/src/okf_parser/formatting.py +0 -0
  226. {okf_parser-0.45.4 → okf_parser-0.45.5}/src/okf_parser/git_commit.py +0 -0
  227. {okf_parser-0.45.4 → okf_parser-0.45.5}/src/okf_parser/git_commit_cli.py +0 -0
  228. {okf_parser-0.45.4 → okf_parser-0.45.5}/src/okf_parser/graphql_adapter.py +0 -0
  229. {okf_parser-0.45.4 → okf_parser-0.45.5}/src/okf_parser/ingestion.py +0 -0
  230. {okf_parser-0.45.4 → okf_parser-0.45.5}/src/okf_parser/markdown_style.py +0 -0
  231. {okf_parser-0.45.4 → okf_parser-0.45.5}/src/okf_parser/models.py +0 -0
  232. {okf_parser-0.45.4 → okf_parser-0.45.5}/src/okf_parser/parser.py +0 -0
  233. {okf_parser-0.45.4 → okf_parser-0.45.5}/src/okf_parser/projection_export.py +0 -0
  234. {okf_parser-0.45.4 → okf_parser-0.45.5}/src/okf_parser/projections.py +0 -0
  235. {okf_parser-0.45.4 → okf_parser-0.45.5}/src/okf_parser/pydantic_projection.py +0 -0
  236. {okf_parser-0.45.4 → okf_parser-0.45.5}/src/okf_parser/relational_schema.py +0 -0
  237. {okf_parser-0.45.4 → okf_parser-0.45.5}/src/okf_parser/rust_core.py +0 -0
  238. {okf_parser-0.45.4 → okf_parser-0.45.5}/src/okf_parser/schema_contract.py +0 -0
  239. {okf_parser-0.45.4 → okf_parser-0.45.5}/src/okf_parser/schema_export.py +0 -0
  240. {okf_parser-0.45.4 → okf_parser-0.45.5}/src/okf_parser/schema_lexemes.py +0 -0
  241. {okf_parser-0.45.4 → okf_parser-0.45.5}/src/okf_parser/schema_references.py +0 -0
  242. {okf_parser-0.45.4 → okf_parser-0.45.5}/src/okf_parser/service.py +0 -0
  243. {okf_parser-0.45.4 → okf_parser-0.45.5}/src/okf_parser/spec_scaffold.py +0 -0
  244. {okf_parser-0.45.4 → okf_parser-0.45.5}/src/okf_parser/type_specs.py +0 -0
  245. {okf_parser-0.45.4 → okf_parser-0.45.5}/src/okf_parser/typed_relations.py +0 -0
  246. {okf_parser-0.45.4 → okf_parser-0.45.5}/src/okf_parser/typed_tables.py +0 -0
  247. {okf_parser-0.45.4 → okf_parser-0.45.5}/src/okf_parser/write_support.py +0 -0
  248. {okf_parser-0.45.4 → okf_parser-0.45.5}/tests/__init__.py +0 -0
  249. {okf_parser-0.45.4 → okf_parser-0.45.5}/tests/fixtures/__init__.py +0 -0
  250. {okf_parser-0.45.4 → okf_parser-0.45.5}/tests/fixtures/declared_parity.expected.json +0 -0
  251. {okf_parser-0.45.4 → okf_parser-0.45.5}/tests/fixtures/declared_parity.schema.sql +0 -0
  252. {okf_parser-0.45.4 → okf_parser-0.45.5}/tests/fixtures/pydantic_adversarial_generated.py +0 -0
  253. {okf_parser-0.45.4 → okf_parser-0.45.5}/tests/fixtures/pydantic_generated.py +0 -0
  254. {okf_parser-0.45.4 → okf_parser-0.45.5}/tests/test_apply.py +0 -0
  255. {okf_parser-0.45.4 → okf_parser-0.45.5}/tests/test_apply_preview_token.py +0 -0
  256. {okf_parser-0.45.4 → okf_parser-0.45.5}/tests/test_apply_preview_token_noop.py +0 -0
  257. {okf_parser-0.45.4 → okf_parser-0.45.5}/tests/test_bundle.py +0 -0
  258. {okf_parser-0.45.4 → okf_parser-0.45.5}/tests/test_bundle_import.py +0 -0
  259. {okf_parser-0.45.4 → okf_parser-0.45.5}/tests/test_bundle_import_reserved.py +0 -0
  260. {okf_parser-0.45.4 → okf_parser-0.45.5}/tests/test_changelog_notes.py +0 -0
  261. {okf_parser-0.45.4 → okf_parser-0.45.5}/tests/test_classification.py +0 -0
  262. {okf_parser-0.45.4 → okf_parser-0.45.5}/tests/test_cli.py +0 -0
  263. {okf_parser-0.45.4 → okf_parser-0.45.5}/tests/test_codebase_to_okf_containment.py +0 -0
  264. {okf_parser-0.45.4 → okf_parser-0.45.5}/tests/test_codebase_to_okf_local_resolution.py +0 -0
  265. {okf_parser-0.45.4 → okf_parser-0.45.5}/tests/test_codebase_to_okf_one_shot.py +0 -0
  266. {okf_parser-0.45.4 → okf_parser-0.45.5}/tests/test_codebase_to_okf_project_manifest.py +0 -0
  267. {okf_parser-0.45.4 → okf_parser-0.45.5}/tests/test_codebase_to_okf_skill.py +0 -0
  268. {okf_parser-0.45.4 → okf_parser-0.45.5}/tests/test_codebase_to_okf_type_specs.py +0 -0
  269. {okf_parser-0.45.4 → okf_parser-0.45.5}/tests/test_concepts.py +0 -0
  270. {okf_parser-0.45.4 → okf_parser-0.45.5}/tests/test_conformance.py +0 -0
  271. {okf_parser-0.45.4 → okf_parser-0.45.5}/tests/test_content_digests.py +0 -0
  272. {okf_parser-0.45.4 → okf_parser-0.45.5}/tests/test_declared_schema.py +0 -0
  273. {okf_parser-0.45.4 → okf_parser-0.45.5}/tests/test_declared_schema_correctness.py +0 -0
  274. {okf_parser-0.45.4 → okf_parser-0.45.5}/tests/test_duckdb.py +0 -0
  275. {okf_parser-0.45.4 → okf_parser-0.45.5}/tests/test_duckdb_types.py +0 -0
  276. {okf_parser-0.45.4 → okf_parser-0.45.5}/tests/test_edit.py +0 -0
  277. {okf_parser-0.45.4 → okf_parser-0.45.5}/tests/test_engine_resolution.py +0 -0
  278. {okf_parser-0.45.4 → okf_parser-0.45.5}/tests/test_exclusion.py +0 -0
  279. {okf_parser-0.45.4 → okf_parser-0.45.5}/tests/test_exclusion_integration.py +0 -0
  280. {okf_parser-0.45.4 → okf_parser-0.45.5}/tests/test_formatting.py +0 -0
  281. {okf_parser-0.45.4 → okf_parser-0.45.5}/tests/test_formatting_conformance.py +0 -0
  282. {okf_parser-0.45.4 → okf_parser-0.45.5}/tests/test_git_commit.py +0 -0
  283. {okf_parser-0.45.4 → okf_parser-0.45.5}/tests/test_git_commit_cli.py +0 -0
  284. {okf_parser-0.45.4 → okf_parser-0.45.5}/tests/test_graphql_adapter.py +0 -0
  285. {okf_parser-0.45.4 → okf_parser-0.45.5}/tests/test_import_preview_token.py +0 -0
  286. {okf_parser-0.45.4 → okf_parser-0.45.5}/tests/test_ingestion.py +0 -0
  287. {okf_parser-0.45.4 → okf_parser-0.45.5}/tests/test_markdown_style.py +0 -0
  288. {okf_parser-0.45.4 → okf_parser-0.45.5}/tests/test_mcp.py +0 -0
  289. {okf_parser-0.45.4 → okf_parser-0.45.5}/tests/test_native_from_wheel.py +0 -0
  290. {okf_parser-0.45.4 → okf_parser-0.45.5}/tests/test_parser.py +0 -0
  291. {okf_parser-0.45.4 → okf_parser-0.45.5}/tests/test_project_version.py +0 -0
  292. {okf_parser-0.45.4 → okf_parser-0.45.5}/tests/test_projection_documents.py +0 -0
  293. {okf_parser-0.45.4 → okf_parser-0.45.5}/tests/test_projection_export.py +0 -0
  294. {okf_parser-0.45.4 → okf_parser-0.45.5}/tests/test_pydantic_source.py +0 -0
  295. {okf_parser-0.45.4 → okf_parser-0.45.5}/tests/test_reference_embed.py +0 -0
  296. {okf_parser-0.45.4 → okf_parser-0.45.5}/tests/test_reference_export.py +0 -0
  297. {okf_parser-0.45.4 → okf_parser-0.45.5}/tests/test_registry_state.py +0 -0
  298. {okf_parser-0.45.4 → okf_parser-0.45.5}/tests/test_registry_state_native_npm.py +0 -0
  299. {okf_parser-0.45.4 → okf_parser-0.45.5}/tests/test_relational_schema.py +0 -0
  300. {okf_parser-0.45.4 → okf_parser-0.45.5}/tests/test_release_summary.py +0 -0
  301. {okf_parser-0.45.4 → okf_parser-0.45.5}/tests/test_release_workflow_uv.py +0 -0
  302. {okf_parser-0.45.4 → okf_parser-0.45.5}/tests/test_rust_core.py +0 -0
  303. {okf_parser-0.45.4 → okf_parser-0.45.5}/tests/test_schema_export.py +0 -0
  304. {okf_parser-0.45.4 → okf_parser-0.45.5}/tests/test_schema_inference_conformance.py +0 -0
  305. {okf_parser-0.45.4 → okf_parser-0.45.5}/tests/test_schema_output_conformance.py +0 -0
  306. {okf_parser-0.45.4 → okf_parser-0.45.5}/tests/test_spec_scaffold.py +0 -0
  307. {okf_parser-0.45.4 → okf_parser-0.45.5}/tests/test_type_specs.py +0 -0
  308. {okf_parser-0.45.4 → okf_parser-0.45.5}/tests/test_typed_relations.py +0 -0
  309. {okf_parser-0.45.4 → okf_parser-0.45.5}/tests/test_verify_wheel_scripts.py +0 -0
  310. {okf_parser-0.45.4 → okf_parser-0.45.5}/typescript/.npmignore +0 -0
  311. {okf_parser-0.45.4 → okf_parser-0.45.5}/typescript/LICENSE +0 -0
  312. {okf_parser-0.45.4 → okf_parser-0.45.5}/typescript/scripts/smoke-mcp-stdio.mjs +0 -0
  313. {okf_parser-0.45.4 → okf_parser-0.45.5}/typescript/src/cli.ts +0 -0
  314. {okf_parser-0.45.4 → okf_parser-0.45.5}/typescript/src/core.ts +0 -0
  315. {okf_parser-0.45.4 → okf_parser-0.45.5}/typescript/src/digests.ts +0 -0
  316. {okf_parser-0.45.4 → okf_parser-0.45.5}/typescript/src/engine.ts +0 -0
  317. {okf_parser-0.45.4 → okf_parser-0.45.5}/typescript/src/formatting.ts +0 -0
  318. {okf_parser-0.45.4 → okf_parser-0.45.5}/typescript/src/git-commit.ts +0 -0
  319. {okf_parser-0.45.4 → okf_parser-0.45.5}/typescript/src/index.ts +0 -0
  320. {okf_parser-0.45.4 → okf_parser-0.45.5}/typescript/src/ingestion.ts +0 -0
  321. {okf_parser-0.45.4 → okf_parser-0.45.5}/typescript/src/lexemes.ts +0 -0
  322. {okf_parser-0.45.4 → okf_parser-0.45.5}/typescript/src/mcp-cli.ts +0 -0
  323. {okf_parser-0.45.4 → okf_parser-0.45.5}/typescript/src/mcp.ts +0 -0
  324. {okf_parser-0.45.4 → okf_parser-0.45.5}/typescript/src/schema.ts +0 -0
  325. {okf_parser-0.45.4 → okf_parser-0.45.5}/typescript/src/type-specs.ts +0 -0
  326. {okf_parser-0.45.4 → okf_parser-0.45.5}/typescript/test/bundle.test.ts +0 -0
  327. {okf_parser-0.45.4 → okf_parser-0.45.5}/typescript/test/classification.test.ts +0 -0
  328. {okf_parser-0.45.4 → okf_parser-0.45.5}/typescript/test/content-digests.test.ts +0 -0
  329. {okf_parser-0.45.4 → okf_parser-0.45.5}/typescript/test/engine-resolution.test.ts +0 -0
  330. {okf_parser-0.45.4 → okf_parser-0.45.5}/typescript/test/exclusion.test.ts +0 -0
  331. {okf_parser-0.45.4 → okf_parser-0.45.5}/typescript/test/formatting.test.ts +0 -0
  332. {okf_parser-0.45.4 → okf_parser-0.45.5}/typescript/test/frontmatter.test.ts +0 -0
  333. {okf_parser-0.45.4 → okf_parser-0.45.5}/typescript/test/git-commit.test.ts +0 -0
  334. {okf_parser-0.45.4 → okf_parser-0.45.5}/typescript/test/ingestion.test.ts +0 -0
  335. {okf_parser-0.45.4 → okf_parser-0.45.5}/typescript/test/mcp.test.ts +0 -0
  336. {okf_parser-0.45.4 → okf_parser-0.45.5}/typescript/test/schema-inference-conformance.test.ts +0 -0
  337. {okf_parser-0.45.4 → okf_parser-0.45.5}/typescript/test/schema-output-conformance.test.ts +0 -0
  338. {okf_parser-0.45.4 → okf_parser-0.45.5}/typescript/test/schema.test.ts +0 -0
  339. {okf_parser-0.45.4 → okf_parser-0.45.5}/typescript/test/type-specs.test.ts +0 -0
  340. {okf_parser-0.45.4 → okf_parser-0.45.5}/typescript/tsconfig.build.json +0 -0
  341. {okf_parser-0.45.4 → okf_parser-0.45.5}/typescript/tsconfig.json +0 -0
  342. {okf_parser-0.45.4 → okf_parser-0.45.5}/typescript-duckdb/LICENSE +0 -0
  343. {okf_parser-0.45.4 → okf_parser-0.45.5}/typescript-duckdb/src/cli.ts +0 -0
  344. {okf_parser-0.45.4 → okf_parser-0.45.5}/typescript-duckdb/src/index.ts +0 -0
  345. {okf_parser-0.45.4 → okf_parser-0.45.5}/typescript-duckdb/test/current-load-options.test.ts +0 -0
  346. {okf_parser-0.45.4 → okf_parser-0.45.5}/typescript-duckdb/test/digests.test.ts +0 -0
  347. {okf_parser-0.45.4 → okf_parser-0.45.5}/typescript-duckdb/test/typed.test.ts +0 -0
  348. {okf_parser-0.45.4 → okf_parser-0.45.5}/typescript-duckdb/tsconfig.build.json +0 -0
  349. {okf_parser-0.45.4 → okf_parser-0.45.5}/typescript-duckdb/tsconfig.json +0 -0
@@ -447,7 +447,7 @@ dependencies = [
447
447
 
448
448
  [[package]]
449
449
  name = "okf-core"
450
- version = "0.45.4"
450
+ version = "0.45.5"
451
451
  dependencies = [
452
452
  "clap",
453
453
  "okf-engine",
@@ -457,7 +457,7 @@ dependencies = [
457
457
 
458
458
  [[package]]
459
459
  name = "okf-engine"
460
- version = "0.45.4"
460
+ version = "0.45.5"
461
461
  dependencies = [
462
462
  "chrono",
463
463
  "ignore",
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: okf-parser
3
- Version: 0.45.4
3
+ Version: 0.45.5
4
4
  Requires-Dist: cyclopts>=4.22,<5
5
5
  Requires-Dist: duckdb>=1.4,<2
6
6
  Requires-Dist: fastmcp>=3.4,<4
@@ -231,7 +231,7 @@ Add the repository as a CI check:
231
231
  ```yaml
232
232
  steps:
233
233
  - uses: actions/checkout@v7
234
- - uses: franklinbaldo/okf-parser@v0.45.4
234
+ - uses: franklinbaldo/okf-parser@v0.45.5
235
235
  with:
236
236
  path: knowledge
237
237
  ```
@@ -209,7 +209,7 @@ Add the repository as a CI check:
209
209
  ```yaml
210
210
  steps:
211
211
  - uses: actions/checkout@v7
212
- - uses: franklinbaldo/okf-parser@v0.45.4
212
+ - uses: franklinbaldo/okf-parser@v0.45.5
213
213
  with:
214
214
  path: knowledge
215
215
  ```
@@ -0,0 +1,9 @@
1
+ ---
2
+ type: Release Note
3
+ title: publish the npm packages under the @franklinbaldo scope
4
+ ---
5
+
6
+ - Rename all three npm packages to `@franklinbaldo/okf-parser`, `@franklinbaldo/okf-parser-duckdb` and `@franklinbaldo/okf-parser-native-linux-x64`. npm refuses the unscoped name `okf-parser` because its similarity filter considers it too close to the existing `oxc-parser`; the refusal happens on upload, so name availability alone never proved the name was publishable.
7
+ - Keep the PyPI distribution unscoped as `okf-parser`. The Python and npm names are now deliberately different, because only npm imposes the similarity constraint.
8
+ - Update the source contract to expect the scoped names and the tarball file names `npm pack` derives from them, where the scope is flattened into the leading `franklinbaldo-` segment.
9
+ - Resolve the optional native package through its scoped name, so a Linux x64 consumer still finds the packaged engine.
@@ -15,7 +15,7 @@ bundle = load_bundle(root)
15
15
  ```
16
16
 
17
17
  ```ts
18
- import { loadBundle } from "okf-parser";
18
+ import { loadBundle } from "@franklinbaldo/okf-parser";
19
19
 
20
20
  const bundle = await loadBundle(root);
21
21
  ```
@@ -42,7 +42,7 @@ A source installation builds that same executable as part of building the `okf-p
42
42
 
43
43
  ## npm packaging
44
44
 
45
- `okf-parser` declares platform packages as optional dependencies. The first supported target is `okf-parser-native-linux-x64`, which contains the release-matched executable under `bin/okf-core`. The TypeScript resolver discovers that package directly from `node_modules` before consulting environment overrides.
45
+ `@franklinbaldo/okf-parser` declares platform packages as optional dependencies. The first supported target is `@franklinbaldo/okf-parser-native-linux-x64`, which contains the release-matched executable under `bin/okf-core`. The TypeScript resolver discovers that package directly from `node_modules` before consulting environment overrides.
46
46
 
47
47
  Installing with `--omit=optional`, or running on a platform for which no native companion is published, keeps the same `loadBundle()` API and uses the portable TypeScript implementation.
48
48
 
@@ -9,9 +9,11 @@ description: Build, verify and publish synchronized Python and TypeScript releas
9
9
  The repository publishes one synchronized protocol version across one Python project and three npm packages:
10
10
 
11
11
  - Python `okf-parser` on PyPI;
12
- - TypeScript `okf-parser` on npm;
13
- - TypeScript `okf-parser-duckdb` on npm;
14
- - platform npm companion `okf-parser-native-linux-x64` on npm.
12
+ - TypeScript `@franklinbaldo/okf-parser` on npm;
13
+ - TypeScript `@franklinbaldo/okf-parser-duckdb` on npm;
14
+ - platform npm companion `@franklinbaldo/okf-parser-native-linux-x64` on npm.
15
+
16
+ The npm packages are scoped and the PyPI distribution is not. npm refuses the unscoped name `okf-parser`, whose similarity filter considers it too close to the existing `oxc-parser`, and that refusal only happens on upload. The scope is therefore a constraint npm imposes, not a naming preference.
15
17
 
16
18
  There is no `okf-parser-native` PyPI project. The Rust engine is an implementation detail of the `okf-parser` Python distribution and is embedded directly in its single `okf-parser` executable.
17
19
 
@@ -27,10 +29,10 @@ release/
27
29
  │ ├── okf_parser-X.Y.Z-<platform>.whl
28
30
  │ └── okf_parser-X.Y.Z.tar.gz
29
31
  ├── npm/
30
- │ ├── okf-parser-X.Y.Z.tgz
31
- │ └── okf-parser-duckdb-X.Y.Z.tgz
32
+ │ ├── franklinbaldo-okf-parser-X.Y.Z.tgz
33
+ │ └── franklinbaldo-okf-parser-duckdb-X.Y.Z.tgz
32
34
  ├── native-npm/
33
- │ └── okf-parser-native-linux-x64-X.Y.Z.tgz
35
+ │ └── franklinbaldo-okf-parser-native-linux-x64-X.Y.Z.tgz
34
36
  ├── manifest.json
35
37
  ├── registry-state.json
36
38
  └── SHA256SUMS
@@ -52,7 +54,7 @@ Before building, `scripts/release_contract.py verify-source` requires all of the
52
54
  - the Rust crate version;
53
55
  - versions in the npm manifests;
54
56
  - `PROTOCOL_VERSION` in `typescript/src/version.ts`;
55
- - the `okf-parser` peer range in the DuckDB adapter;
57
+ - the `@franklinbaldo/okf-parser` peer range in the DuckDB adapter;
56
58
  - at least one release-note fragment in `changelog/X.Y.Z/`;
57
59
  - an optional stable tag, exactly `vX.Y.Z`.
58
60
 
@@ -0,0 +1,15 @@
1
+ ---
2
+ type: Documentation
3
+ title: okf-parser native Linux x64 package
4
+ description: Platform companion that ships the release-matched okf-core executable for npm consumers
5
+ ---
6
+
7
+ # @franklinbaldo/okf-parser-native-linux-x64
8
+
9
+ Platform companion for `@franklinbaldo/okf-parser` on Linux x64.
10
+
11
+ This package contains the release-matched `okf-core` executable. It is installed as an optional dependency of `@franklinbaldo/okf-parser`; applications should not depend on it directly or hard-code its path. `loadBundle()` discovers it automatically and falls back to the portable TypeScript engine when no compatible native package is installed.
12
+
13
+ The companion version always matches the `@franklinbaldo/okf-parser` release that consumes it, so the resolver never needs to negotiate protocol compatibility at runtime.
14
+
15
+ The executable is built during the release workflow. Rust is never compiled during application installation or startup.
@@ -1,6 +1,6 @@
1
1
  {
2
- "name": "okf-parser-native-linux-x64",
3
- "version": "0.45.4",
2
+ "name": "@franklinbaldo/okf-parser-native-linux-x64",
3
+ "version": "0.45.5",
4
4
  "description": "Linux x64 native okf-core engine for okf-parser",
5
5
  "license": "MIT",
6
6
  "os": ["linux"],
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name = "okf-engine"
3
- version = "0.45.4"
3
+ version = "0.45.5"
4
4
  edition = "2024"
5
5
  license = "MIT"
6
6
  description = "DuckDB-independent OKF semantic ingestion engine"
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "okf-parser"
3
- version = "0.45.4"
3
+ version = "0.45.5"
4
4
  description = "Relational inspection and validation for Open Knowledge Format bundles"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.12"
@@ -13,8 +13,8 @@ Add one tag-driven GitHub Actions release pipeline for the three synchronized
13
13
  artifacts produced by this repository:
14
14
 
15
15
  - the Python `okf-parser` distribution on PyPI;
16
- - the TypeScript `okf-parser` package on npm;
17
- - the optional `okf-parser-duckdb` package on npm.
16
+ - the TypeScript `@franklinbaldo/okf-parser` package on npm;
17
+ - the optional `@franklinbaldo/okf-parser-duckdb` package on npm.
18
18
 
19
19
  The workflow builds all artifacts once from one tagged commit, verifies them as
20
20
  installed consumer artifacts, records checksums and provenance, and then
@@ -40,7 +40,7 @@ is still manual and therefore weaker than the code path it distributes.
40
40
  Three facts make a naive `npm publish && twine upload` workflow unsafe:
41
41
 
42
42
  1. the artifacts live in two independent registries;
43
- 2. `okf-parser-duckdb` has a peer dependency on the main npm package and must
43
+ 2. `@franklinbaldo/okf-parser-duckdb` has a peer dependency on the main npm package and must
44
44
  not become visible first;
45
45
  3. a network or registry failure can occur after one immutable upload succeeds.
46
46
 
@@ -214,7 +214,7 @@ release/
214
214
  │ └── okf_parser-X.Y.Z.tar.gz
215
215
  ├── npm/
216
216
  │ ├── okf-parser-X.Y.Z.tgz
217
- │ └── okf-parser-duckdb-X.Y.Z.tgz
217
+ │ └── franklinbaldo-okf-parser-duckdb-X.Y.Z.tgz
218
218
  └── manifest.json
219
219
  ```
220
220
 
@@ -296,8 +296,8 @@ automatic recovery action.
296
296
  The safe dependency order is:
297
297
 
298
298
  1. Python `okf-parser` to PyPI;
299
- 2. npm `okf-parser`;
300
- 3. npm `okf-parser-duckdb`.
299
+ 2. npm `@franklinbaldo/okf-parser`;
300
+ 3. npm `@franklinbaldo/okf-parser-duckdb`.
301
301
 
302
302
  PyPI and the main npm package do not depend on one another and may technically be
303
303
  published in parallel. This RFC chooses a linear sequence because it produces a
@@ -366,11 +366,32 @@ workflow:
366
366
  4. publish version `X.Y.Z` interactively from a maintainer workstation using
367
367
  npm account MFA;
368
368
  5. configure `release.yml` as the trusted publisher for the new package;
369
- 6. repeat for `okf-parser-duckdb` only after `okf-parser` exists;
369
+ 6. repeat for `@franklinbaldo/okf-parser-duckdb` only after `@franklinbaldo/okf-parser` exists;
370
370
  7. remove any temporary automation credential if one was created;
371
371
  8. re-run the tag workflow, which verifies the existing digest and completes
372
372
  the other registries/finalization idempotently.
373
373
 
374
+ ## Amendment: the npm names are scoped
375
+
376
+ This section originally assumed unscoped npm names matching the PyPI
377
+ distribution. That assumption did not survive contact with the registry.
378
+
379
+ npm refused `okf-parser` with `403 Package name too similar to existing package
380
+ oxc-parser`. The refusal is produced by npm's similarity filter at upload time,
381
+ so the availability check in step 3 above -- which only proves that nobody has
382
+ registered the exact name -- can never predict it. All three packages are
383
+ therefore published under the `@franklinbaldo` scope, while the PyPI
384
+ distribution stays unscoped as `okf-parser`.
385
+
386
+ Scoping does not remove the bootstrap requirement: npm still refuses to
387
+ configure a trusted publisher for a package that does not exist, whether or not
388
+ it is scoped. It does remove the risk of a second similarity refusal, because
389
+ scoped names are not subject to that filter.
390
+
391
+ Two further details in this RFC are stale: the publication workflow is
392
+ `publish.yml`, not `release.yml`, and there are three npm packages rather than
393
+ two, since the platform companion did not exist when this RFC was written.
394
+
374
395
  The first public release version is chosen only after package-name availability
375
396
  is confirmed. If either name has been claimed, package renaming requires a
376
397
  separate reviewed change; the release workflow must not improvise a registry
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name = "okf-core"
3
- version = "0.45.4"
3
+ version = "0.45.5"
4
4
  edition = "2024"
5
5
  license = "MIT"
6
6
  description = "Native OKF CLI and compatibility adapters"
@@ -11,6 +11,6 @@ path = "src/main.rs"
11
11
 
12
12
  [dependencies]
13
13
  clap = { version = "4", features = ["derive"] }
14
- okf-engine = { path = "../okf-engine", version = "0.45.4" }
14
+ okf-engine = { path = "../okf-engine", version = "0.45.5" }
15
15
  serde = { version = "1", features = ["derive"] }
16
16
  serde_json = "1"
@@ -357,15 +357,22 @@ def inspect_registry_state(
357
357
  if timeout <= 0:
358
358
  _fail("registry timeout must be positive")
359
359
  version, artifacts = _artifact_index(manifest)
360
+
361
+ # The published name is read from the manifest rather than repeated here, so
362
+ # a rename in the source contract cannot leave the preflight probing a name
363
+ # that is no longer the one being published.
364
+ def _npm_package(kind: str) -> str:
365
+ return _string(artifacts[kind], "package", "manifest artifact")
366
+
360
367
  entries = [
361
368
  _pypi_state(version, artifacts, fetch, timeout),
362
- _npm_state("okf-parser", artifacts["npm-parser"], fetch, timeout),
363
- _npm_state("okf-parser-duckdb", artifacts["npm-duckdb"], fetch, timeout),
369
+ _npm_state(_npm_package("npm-parser"), artifacts["npm-parser"], fetch, timeout),
370
+ _npm_state(_npm_package("npm-duckdb"), artifacts["npm-duckdb"], fetch, timeout),
364
371
  ]
365
372
  if "npm-native" in artifacts:
366
373
  entries.append(
367
374
  _npm_state(
368
- "okf-parser-native-linux-x64",
375
+ _npm_package("npm-native"),
369
376
  artifacts["npm-native"],
370
377
  fetch,
371
378
  timeout,
@@ -282,16 +282,19 @@ def _verify_npm_manifest(path: Path, package: str, version: str) -> dict[str, ob
282
282
 
283
283
  def _verify_npm_contract(root: Path, version: str) -> None:
284
284
  parser_path = root / "typescript" / "package.json"
285
- parser = _verify_npm_manifest(parser_path, "okf-parser", version)
285
+ parser = _verify_npm_manifest(parser_path, "@franklinbaldo/okf-parser", version)
286
286
  optional = _mapping(parser.get("optionalDependencies"), "optionalDependencies")
287
- if _string(optional, "okf-parser-native-linux-x64", "optionalDependencies") != version:
287
+ if (
288
+ _string(optional, "@franklinbaldo/okf-parser-native-linux-x64", "optionalDependencies")
289
+ != version
290
+ ):
288
291
  _fail(f"native optional dependency must be {version}")
289
292
  native_path = root / "native-npm-linux-x64" / "package.json"
290
- _verify_npm_manifest(native_path, "okf-parser-native-linux-x64", version)
293
+ _verify_npm_manifest(native_path, "@franklinbaldo/okf-parser-native-linux-x64", version)
291
294
  adapter_path = root / "typescript-duckdb" / "package.json"
292
- adapter = _verify_npm_manifest(adapter_path, "okf-parser-duckdb", version)
295
+ adapter = _verify_npm_manifest(adapter_path, "@franklinbaldo/okf-parser-duckdb", version)
293
296
  peers = _mapping(adapter.get("peerDependencies"), "peerDependencies")
294
- if _string(peers, "okf-parser", "peerDependencies") != f"^{version}":
297
+ if _string(peers, "@franklinbaldo/okf-parser", "peerDependencies") != f"^{version}":
295
298
  _fail(f"adapter peer dependency must be ^{version}")
296
299
 
297
300
 
@@ -399,21 +402,21 @@ def _expected(version: str) -> tuple[ExpectedArtifact, ...]:
399
402
  ),
400
403
  ExpectedArtifact(
401
404
  "npm-parser",
402
- "okf-parser",
405
+ "@franklinbaldo/okf-parser",
403
406
  "npm",
404
- filename=f"okf-parser-{version}.tgz",
407
+ filename=f"franklinbaldo-okf-parser-{version}.tgz",
405
408
  ),
406
409
  ExpectedArtifact(
407
410
  "npm-duckdb",
408
- "okf-parser-duckdb",
411
+ "@franklinbaldo/okf-parser-duckdb",
409
412
  "npm",
410
- filename=f"okf-parser-duckdb-{version}.tgz",
413
+ filename=f"franklinbaldo-okf-parser-duckdb-{version}.tgz",
411
414
  ),
412
415
  ExpectedArtifact(
413
416
  "npm-native",
414
- "okf-parser-native-linux-x64",
417
+ "@franklinbaldo/okf-parser-native-linux-x64",
415
418
  "native-npm",
416
- filename=f"okf-parser-native-linux-x64-{version}.tgz",
419
+ filename=f"franklinbaldo-okf-parser-native-linux-x64-{version}.tgz",
417
420
  ),
418
421
  )
419
422
 
@@ -45,23 +45,23 @@ def _write_source(root: Path, *, protocol_version: str = VERSION) -> None:
45
45
  (root / "typescript" / "package.json").write_text(
46
46
  json.dumps(
47
47
  {
48
- "name": "okf-parser",
48
+ "name": "@franklinbaldo/okf-parser",
49
49
  "version": VERSION,
50
- "optionalDependencies": {"okf-parser-native-linux-x64": VERSION},
50
+ "optionalDependencies": {"@franklinbaldo/okf-parser-native-linux-x64": VERSION},
51
51
  }
52
52
  ),
53
53
  encoding="utf-8",
54
54
  )
55
55
  (root / "native-npm-linux-x64" / "package.json").write_text(
56
- json.dumps({"name": "okf-parser-native-linux-x64", "version": VERSION}),
56
+ json.dumps({"name": "@franklinbaldo/okf-parser-native-linux-x64", "version": VERSION}),
57
57
  encoding="utf-8",
58
58
  )
59
59
  (root / "typescript-duckdb" / "package.json").write_text(
60
60
  json.dumps(
61
61
  {
62
- "name": "okf-parser-duckdb",
62
+ "name": "@franklinbaldo/okf-parser-duckdb",
63
63
  "version": VERSION,
64
- "peerDependencies": {"okf-parser": f"^{VERSION}"},
64
+ "peerDependencies": {"@franklinbaldo/okf-parser": f"^{VERSION}"},
65
65
  }
66
66
  ),
67
67
  encoding="utf-8",
@@ -155,18 +155,25 @@ def _write_artifacts(release: Path, extra: dict[str, tuple[str, ...]] | None = N
155
155
  for member in SDIST_MEMBERS + additions.get("python-sdist", ()):
156
156
  _tar_member(archive, f"{root}/{member}", b"content\n")
157
157
  with tarfile.open(
158
- native_dir / f"okf-parser-native-linux-x64-{VERSION}.tgz", mode="w:gz"
158
+ native_dir / f"franklinbaldo-okf-parser-native-linux-x64-{VERSION}.tgz", mode="w:gz"
159
159
  ) as archive:
160
160
  _tar_member(
161
161
  archive,
162
162
  "package/package.json",
163
- json.dumps({"name": "okf-parser-native-linux-x64", "version": VERSION}).encode(),
163
+ json.dumps(
164
+ {"name": "@franklinbaldo/okf-parser-native-linux-x64", "version": VERSION}
165
+ ).encode(),
164
166
  )
165
167
  for member in NPM_NATIVE_MEMBERS + additions.get("npm-native", ()):
166
168
  _tar_member(archive, f"package/{member}", b"content\n")
167
- kinds = {"okf-parser": "npm-parser", "okf-parser-duckdb": "npm-duckdb"}
168
- for package, kind in kinds.items():
169
- with tarfile.open(npm_dir / f"{package}-{VERSION}.tgz", mode="w:gz") as archive:
169
+ # `npm pack` flattens a scope into the leading file-name segment, so the
170
+ # published name and the tarball name differ for every scoped package.
171
+ kinds = {
172
+ "@franklinbaldo/okf-parser": ("npm-parser", "franklinbaldo-okf-parser"),
173
+ "@franklinbaldo/okf-parser-duckdb": ("npm-duckdb", "franklinbaldo-okf-parser-duckdb"),
174
+ }
175
+ for package, (kind, stem) in kinds.items():
176
+ with tarfile.open(npm_dir / f"{stem}-{VERSION}.tgz", mode="w:gz") as archive:
170
177
  _tar_member(
171
178
  archive,
172
179
  "package/package.json",
@@ -201,7 +208,7 @@ def test_verify_source_rejects_stale_native_optional_dependency(tmp_path: Path)
201
208
  _write_source(tmp_path)
202
209
  parser_path = tmp_path / "typescript" / "package.json"
203
210
  parser = json.loads(parser_path.read_text(encoding="utf-8"))
204
- parser["optionalDependencies"]["okf-parser-native-linux-x64"] = "1.2.2"
211
+ parser["optionalDependencies"]["@franklinbaldo/okf-parser-native-linux-x64"] = "1.2.2"
205
212
  parser_path.write_text(json.dumps(parser), encoding="utf-8")
206
213
  with pytest.raises(ContractError, match="native optional dependency"):
207
214
  verify_source(tmp_path)
@@ -320,7 +327,7 @@ def test_verify_contents_rejects_members_outside_package_root(tmp_path: Path) ->
320
327
  _write_source(tmp_path)
321
328
  release = tmp_path / "release"
322
329
  _write_artifacts(release)
323
- tarball = release / "npm" / f"okf-parser-{VERSION}.tgz"
330
+ tarball = release / "npm" / f"franklinbaldo-okf-parser-{VERSION}.tgz"
324
331
  with tarfile.open(tarball, mode="r:gz") as archive:
325
332
  members = [(member.name, _tar_bytes(archive, member)) for member in archive.getmembers()]
326
333
  with tarfile.open(tarball, mode="w:gz") as archive:
@@ -11,12 +11,12 @@ the same observable contract as the Python package while using an idiomatic
11
11
  immutable TypeScript core.
12
12
 
13
13
  ```bash
14
- npm install okf-parser
14
+ npm install @franklinbaldo/okf-parser
15
15
  npx okf-parser-ts check ./knowledge
16
16
  ```
17
17
 
18
18
  ```ts
19
- import { checkBundle, exportZod, parseDocumentContent } from "okf-parser";
19
+ import { checkBundle, exportZod, parseDocumentContent } from "@franklinbaldo/okf-parser";
20
20
 
21
21
  const parsed = parseDocumentContent(`---\ntype: Reference\ncount: 0012\n---\n`);
22
22
  const report = await checkBundle("./knowledge");
@@ -49,15 +49,15 @@ to errors. The slug derivation is shared with the Python package through
49
49
  Formatting is read-only unless `--write` is explicit:
50
50
 
51
51
  ```bash
52
- npx --package okf-parser okf-parser-ts format ./knowledge
53
- npx --package okf-parser okf-parser-ts format ./knowledge --write
52
+ npx --package @franklinbaldo/okf-parser okf-parser-ts format ./knowledge
53
+ npx --package @franklinbaldo/okf-parser okf-parser-ts format ./knowledge --write
54
54
  ```
55
55
 
56
56
  The library exposes both the pure one-document formatter and the filesystem
57
57
  operation:
58
58
 
59
59
  ```ts
60
- import { formatMarkdown, formatPath } from "okf-parser";
60
+ import { formatMarkdown, formatPath } from "@franklinbaldo/okf-parser";
61
61
 
62
62
  const canonical = formatMarkdown("# Heading\n\n- item\n");
63
63
  const report = await formatPath("./knowledge", { write: true });
@@ -74,7 +74,7 @@ formatted before the first write.
74
74
  The package includes a read-only stdio MCP server:
75
75
 
76
76
  ```bash
77
- npx --package okf-parser okf-parser-ts-mcp
77
+ npx --package @franklinbaldo/okf-parser okf-parser-ts-mcp
78
78
  ```
79
79
 
80
80
  A typical host configuration is:
@@ -109,11 +109,11 @@ DuckDB support is published separately so native database bindings are never
109
109
  installed for parser-only consumers:
110
110
 
111
111
  ```bash
112
- npm install okf-parser okf-parser-duckdb
112
+ npm install @franklinbaldo/okf-parser okf-parser-duckdb
113
113
  ```
114
114
 
115
115
  ```ts
116
- import { exportDuckDb } from "okf-parser-duckdb";
116
+ import { exportDuckDb } from "@franklinbaldo/okf-parser-duckdb";
117
117
 
118
118
  await exportDuckDb("./knowledge", { database: "knowledge.duckdb" });
119
119
  ```
@@ -1,12 +1,12 @@
1
1
  {
2
- "name": "okf-parser",
3
- "version": "0.44.0",
2
+ "name": "@franklinbaldo/okf-parser",
3
+ "version": "0.45.5",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
- "name": "okf-parser",
9
- "version": "0.44.0",
8
+ "name": "@franklinbaldo/okf-parser",
9
+ "version": "0.45.5",
10
10
  "license": "MIT",
11
11
  "dependencies": {
12
12
  "@modelcontextprotocol/sdk": "^1.30.0",
@@ -35,12 +35,12 @@
35
35
  "node": ">=22"
36
36
  },
37
37
  "optionalDependencies": {
38
- "okf-parser-native-linux-x64": "0.44.0"
38
+ "@franklinbaldo/okf-parser-native-linux-x64": "file:../native-npm-linux-x64"
39
39
  }
40
40
  },
41
41
  "../native-npm-linux-x64": {
42
- "name": "okf-parser-native-linux-x64",
43
- "version": "0.44.0",
42
+ "name": "@franklinbaldo/okf-parser-native-linux-x64",
43
+ "version": "0.45.5",
44
44
  "cpu": [
45
45
  "x64"
46
46
  ],
@@ -495,6 +495,10 @@
495
495
  "node": ">=18"
496
496
  }
497
497
  },
498
+ "node_modules/@franklinbaldo/okf-parser-native-linux-x64": {
499
+ "resolved": "../native-npm-linux-x64",
500
+ "link": true
501
+ },
498
502
  "node_modules/@hono/node-server": {
499
503
  "version": "2.0.12",
500
504
  "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-2.0.12.tgz",
@@ -2990,10 +2994,6 @@
2990
2994
  "url": "https://github.com/sponsors/ljharb"
2991
2995
  }
2992
2996
  },
2993
- "node_modules/okf-parser-native-linux-x64": {
2994
- "resolved": "../native-npm-linux-x64",
2995
- "link": true
2996
- },
2997
2997
  "node_modules/on-finished": {
2998
2998
  "version": "2.4.1",
2999
2999
  "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
@@ -1,6 +1,6 @@
1
1
  {
2
- "name": "okf-parser",
3
- "version": "0.45.4",
2
+ "name": "@franklinbaldo/okf-parser",
3
+ "version": "0.45.5",
4
4
  "description": "Native TypeScript parser, validator, formatter, graph inspector, schema exporter, and MCP server for Open Knowledge Format bundles",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -15,7 +15,7 @@
15
15
  "bin": {"okf-parser-ts": "./dist/cli.js", "okf-parser-ts-mcp": "./dist/mcp-cli.js"},
16
16
  "scripts": {"build": "tsc -p tsconfig.build.json", "check": "tsc -p tsconfig.json --noEmit", "test": "vitest run", "test:watch": "vitest", "prepack": "npm run build"},
17
17
  "dependencies": {"@modelcontextprotocol/sdk": "^1.30.0", "markdown-it": "^14.1.0", "mdast-util-frontmatter": "^2.0.1", "mdast-util-from-markdown": "^2.0.3", "mdast-util-gfm": "^3.0.0", "mdast-util-to-markdown": "^2.1.2", "micromark-extension-frontmatter": "^2.0.0", "micromark-extension-gfm": "^3.0.0", "yaml": "^2.8.1", "zod": "^4.0.0"},
18
- "optionalDependencies": {"okf-parser-native-linux-x64": "0.45.4"},
18
+ "optionalDependencies": {"@franklinbaldo/okf-parser-native-linux-x64": "0.45.5"},
19
19
  "devDependencies": {"@types/markdown-it": "^14.1.2", "@types/node": "^24.0.0", "@types/unist": "^3.0.3", "typescript": "^5.9.0", "vitest": "^3.2.4"},
20
20
  "keywords": ["okf", "open-knowledge-format", "markdown", "formatter", "knowledge-graph", "json-schema", "zod", "mcp", "model-context-protocol", "typescript"],
21
21
  "repository": {"type": "git", "url": "git+https://github.com/franklinbaldo/okf-parser.git", "directory": "typescript"}
@@ -23,7 +23,7 @@ function binaryName(): string {
23
23
 
24
24
  function nativePackageName(): string | undefined {
25
25
  if (process.platform === "linux" && process.arch === "x64") {
26
- return "okf-parser-native-linux-x64";
26
+ return "@franklinbaldo/okf-parser-native-linux-x64";
27
27
  }
28
28
  return undefined;
29
29
  }
@@ -0,0 +1 @@
1
+ export const PROTOCOL_VERSION = "0.45.5";
@@ -4,19 +4,19 @@ title: okf-parser DuckDB adapter
4
4
  description: Optional native DuckDB materialization for the TypeScript parser
5
5
  ---
6
6
 
7
- # okf-parser-duckdb
7
+ # @franklinbaldo/okf-parser-duckdb
8
8
 
9
- Optional DuckDB materialization adapter for the TypeScript `okf-parser` package.
9
+ Optional DuckDB materialization adapter for the TypeScript `@franklinbaldo/okf-parser` package.
10
10
  It uses the official promise-native `@duckdb/node-api` client and remains a
11
11
  separate package so native database bindings never burden parser-only users.
12
12
 
13
13
  ```bash
14
- npm install okf-parser okf-parser-duckdb
14
+ npm install @franklinbaldo/okf-parser @franklinbaldo/okf-parser-duckdb
15
15
  ```
16
16
 
17
17
  ```ts
18
18
  import { DuckDBConnection } from "@duckdb/node-api";
19
- import { attachOkf } from "okf-parser-duckdb";
19
+ import { attachOkf } from "@franklinbaldo/okf-parser-duckdb";
20
20
 
21
21
  const connection = await DuckDBConnection.create();
22
22
  const report = await attachOkf(connection, "./knowledge");
@@ -25,7 +25,7 @@ const report = await attachOkf(connection, "./knowledge");
25
25
  To create or update a persistent database file:
26
26
 
27
27
  ```ts
28
- import { exportDuckDb } from "okf-parser-duckdb";
28
+ import { exportDuckDb } from "@franklinbaldo/okf-parser-duckdb";
29
29
 
30
30
  const report = await exportDuckDb("./knowledge", {
31
31
  database: "knowledge.duckdb",
@@ -36,7 +36,7 @@ const report = await exportDuckDb("./knowledge", {
36
36
  Or use the CLI:
37
37
 
38
38
  ```bash
39
- npx --package okf-parser-duckdb okf-parser-ts-duckdb ./knowledge \
39
+ npx --package @franklinbaldo/okf-parser-duckdb okf-parser-ts-duckdb ./knowledge \
40
40
  --database knowledge.duckdb
41
41
  ```
42
42