okf-parser 0.45.4__tar.gz → 0.45.6__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.
- okf_parser-0.45.6/.okfignore +4 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/Cargo.lock +2 -2
- okf_parser-0.45.6/PKG-INFO +376 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/README.md +1 -1
- okf_parser-0.45.4/PKG-INFO → okf_parser-0.45.6/README.pypi.md +2 -31
- okf_parser-0.45.6/changelog/0.45.5/scoped-npm-packages.md +9 -0
- okf_parser-0.45.6/changelog/0.45.6/pypi-project-page.md +10 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/docs/native-engine.md +2 -2
- {okf_parser-0.45.4 → okf_parser-0.45.6}/docs/releasing.md +9 -7
- okf_parser-0.45.6/native-npm-linux-x64/README.md +15 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/native-npm-linux-x64/package.json +2 -2
- {okf_parser-0.45.4 → okf_parser-0.45.6}/okf-engine/Cargo.toml +1 -1
- {okf_parser-0.45.4 → okf_parser-0.45.6}/pyproject.toml +35 -2
- {okf_parser-0.45.4 → okf_parser-0.45.6}/rfcs/0003-resumable-multi-registry-release.md +28 -7
- {okf_parser-0.45.4 → okf_parser-0.45.6}/rust-core/Cargo.toml +2 -2
- okf_parser-0.45.6/scripts/pypi_readme.py +72 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/scripts/registry_state.py +10 -3
- {okf_parser-0.45.4 → okf_parser-0.45.6}/scripts/release_contract.py +14 -11
- okf_parser-0.45.6/tests/test_pypi_readme.py +58 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/tests/test_release_contract.py +19 -12
- okf_parser-0.45.6/typescript/LICENSE +21 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/typescript/README.md +8 -8
- {okf_parser-0.45.4 → okf_parser-0.45.6}/typescript/package-lock.json +11 -11
- {okf_parser-0.45.4 → okf_parser-0.45.6}/typescript/package.json +3 -3
- {okf_parser-0.45.4 → okf_parser-0.45.6}/typescript/src/rust-core.ts +1 -1
- okf_parser-0.45.6/typescript/src/version.ts +1 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/typescript-duckdb/README.md +6 -6
- {okf_parser-0.45.4 → okf_parser-0.45.6}/typescript-duckdb/package-lock.json +13 -13
- {okf_parser-0.45.4 → okf_parser-0.45.6}/typescript-duckdb/package.json +4 -4
- {okf_parser-0.45.4 → okf_parser-0.45.6}/typescript-duckdb/src/declared.ts +1 -1
- {okf_parser-0.45.4 → okf_parser-0.45.6}/typescript-duckdb/src/normalized.ts +1 -1
- {okf_parser-0.45.4 → okf_parser-0.45.6}/typescript-duckdb/src/session.ts +1 -1
- {okf_parser-0.45.4 → okf_parser-0.45.6}/typescript-duckdb/src/typed.ts +1 -1
- {okf_parser-0.45.4 → okf_parser-0.45.6}/typescript-duckdb/test/duckdb.test.ts +2 -2
- {okf_parser-0.45.4 → okf_parser-0.45.6}/uv.lock +4 -4
- okf_parser-0.45.4/native-npm-linux-x64/README.md +0 -15
- okf_parser-0.45.4/typescript/src/version.ts +0 -1
- {okf_parser-0.45.4 → okf_parser-0.45.6}/.gitignore +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/Cargo.toml +0 -0
- {okf_parser-0.45.4/typescript-duckdb → okf_parser-0.45.6}/LICENSE +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/action.yml +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/benchmarks/README.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/benchmarks/__init__.py +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/benchmarks/python_parser.py +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/benchmarks/results/2026-08-08-rust-mvp.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/benchmarks/results/2026-08-09-rust-e2e.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/benchmarks/rust-facts.mjs +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/benchmarks/rust_facts.py +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/benchmarks/typescript-parser.mjs +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/changelog/0.1.0.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/changelog/0.10.0.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/changelog/0.11.0.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/changelog/0.11.1.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/changelog/0.12.0.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/changelog/0.13.0.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/changelog/0.14.0.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/changelog/0.14.1.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/changelog/0.14.2.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/changelog/0.15.0.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/changelog/0.15.1.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/changelog/0.15.2.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/changelog/0.15.3.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/changelog/0.15.4.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/changelog/0.16.0.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/changelog/0.17.0.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/changelog/0.18.0.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/changelog/0.18.1.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/changelog/0.19.0.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/changelog/0.19.1.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/changelog/0.2.0.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/changelog/0.20.0.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/changelog/0.20.1.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/changelog/0.21.0.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/changelog/0.22.0.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/changelog/0.23.0.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/changelog/0.24.0.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/changelog/0.25.0.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/changelog/0.26.0.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/changelog/0.27.0.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/changelog/0.28.0.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/changelog/0.29.0.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/changelog/0.3.0.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/changelog/0.30.0.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/changelog/0.31.0.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/changelog/0.32.0.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/changelog/0.32.1.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/changelog/0.33.0.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/changelog/0.34.0.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/changelog/0.35.0.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/changelog/0.36.0.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/changelog/0.37.0.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/changelog/0.38.0.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/changelog/0.39.0.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/changelog/0.39.1.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/changelog/0.4.0.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/changelog/0.40.0.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/changelog/0.41.0.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/changelog/0.41.1.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/changelog/0.41.2.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/changelog/0.41.3.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/changelog/0.42.0.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/changelog/0.42.1.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/changelog/0.42.2.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/changelog/0.42.3.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/changelog/0.42.4.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/changelog/0.42.5.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/changelog/0.42.6.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/changelog/0.42.7.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/changelog/0.42.8.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/changelog/0.43.0.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/changelog/0.43.1.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/changelog/0.44.0.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/changelog/0.45.0.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/changelog/0.45.1.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/changelog/0.45.2.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/changelog/0.45.3/correct-0-45-2-notes.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/changelog/0.45.3/pep723-workflow-python.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/changelog/0.45.3/uv-first-release-validation.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/changelog/0.45.3/version-belongs-to-the-release.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/changelog/0.45.4/agent-first-search-rfc.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/changelog/0.45.4/atomic-import-writes.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/changelog/0.45.4/codebase-to-okf-lexical-containment.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/changelog/0.45.4/codebase-to-okf-local-import-resolution.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/changelog/0.45.4/codebase-to-okf-one-shot.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/changelog/0.45.4/codebase-to-okf-project-manifest.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/changelog/0.45.4/codebase-to-okf-self-describing-types.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/changelog/0.45.4/codebase-to-okf-skill.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/changelog/0.45.4/duckdb-extension-concepts-slice.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/changelog/0.45.4/duckdb-extension-read-surface.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/changelog/0.45.4/git-commit-envelope.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/changelog/0.45.4/projection-documents.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/changelog/0.45.4/referential-schema-export-embed-mode.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/changelog/0.45.4/referential-schema-export-key-mode.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/changelog/0.45.4/referential-schema-export.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/changelog/0.45.4/refs-depth-and-composite-keys.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/changelog/0.45.4/rfc-0015-canonical-markdown-ir.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/changelog/0.45.4/rfc0009-git-commits.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/changelog/0.45.4/rfc0010-native-duckdb-extension.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/changelog/0.45.4/rfc0011-tracked-migrations.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/changelog/0.45.4/rfc0015-rust-markdown-ast.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/changelog/0.45.4/rfc0017-fact-profile.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/changelog/0.45.4/rfc0018-projection-export.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/changelog/0.45.4/type-specifications.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/changelog/0.5.0.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/changelog/0.5.1.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/changelog/0.6.0.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/changelog/0.7.0.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/changelog/0.8.0.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/changelog/0.9.0.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/conformance/content-digests.json +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/conformance/exclusion.json +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/conformance/formatting.json +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/conformance/frontmatter.json +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/conformance/git-commit-messages.json +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/conformance/schema-inference.json +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/conformance/schema-output.json +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/conformance/type-spec-slugs.json +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/docs/architecture.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/docs/cli.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/docs/graphql.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/docs/types/architecture.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/docs/types/benchmarkresult.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/docs/types/documentation.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/docs/types/procedure.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/docs/types/project.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/docs/types/release-note.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/docs/types/release.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/docs/types/rfc.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/docs/types/skill.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/docs/types/spec.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/duckdb-extension/Cargo.toml +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/duckdb-extension/Makefile +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/duckdb-extension/README.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/duckdb-extension/src/lib.rs +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/duckdb-extension/test/knowledge/index.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/duckdb-extension/test/knowledge/node.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/examples/minimal/concepts/access-review.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/examples/minimal/concepts/onboarding.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/examples/minimal/index.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/examples/minimal/log.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/fastmcp.json +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/okf-engine/src/engine.rs +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/okf-engine/src/lib.rs +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/okf-engine/src/yaml.rs +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/rfcs/0001-python-model-codegen.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/rfcs/0002-typescript-sibling-package.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/rfcs/0004-gitignore-exclusion-semantics.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/rfcs/0005-relational-frontmatter-writes.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/rfcs/0006-declared-column-types.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/rfcs/0007-declared-relational-constraints.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/rfcs/0008-effect-aware-mcp-writes.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/rfcs/0009-git-commits-as-okf.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/rfcs/0010-native-duckdb-extension.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/rfcs/0011-tracked-migrations.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/rfcs/0015-canonical-rust-markdown-ast-and-typed-document-model.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/rfcs/0016-agent-first-bundle-search-and-retrieval.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/rfcs/0017-fact-profile.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/rfcs/0018-referential-schema-export-and-projections.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/rfcs/0019-self-contained-recipe-skills.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/rust-core/.gitignore +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/rust-core/src/engine.rs +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/rust-core/src/main.rs +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/scripts/__init__.py +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/scripts/changelog_notes.py +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/scripts/check_no_duckdb_link.py +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/scripts/native_from_wheel.py +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/scripts/project_version.py +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/scripts/release_summary.py +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/scripts/verify_wheel_scripts.py +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/skills/codebase-to-okf/SKILL.md +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/skills/codebase-to-okf/scripts/codebase_to_okf.py +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/skills/codebase-to-okf/scripts/finalize_codebase_okf.py +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/skills/codebase-to-okf/scripts/python_codebase_to_okf.py +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/skills/codebase-to-okf/scripts/python_project_metadata_to_okf.py +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/skills/codebase-to-okf/scripts/query_codebase_okf.py +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/skills/codebase-to-okf/scripts/resolve_codebase_okf.py +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/src/okf_parser/__init__.py +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/src/okf_parser/apply.py +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/src/okf_parser/bundle.py +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/src/okf_parser/bundle_import.py +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/src/okf_parser/classification.py +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/src/okf_parser/cli.py +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/src/okf_parser/concepts.py +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/src/okf_parser/declared_schema.py +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/src/okf_parser/digests.py +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/src/okf_parser/discovery.py +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/src/okf_parser/duckdb.py +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/src/okf_parser/duckdb_types.py +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/src/okf_parser/edit.py +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/src/okf_parser/engine.py +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/src/okf_parser/exclusion.py +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/src/okf_parser/formatting.py +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/src/okf_parser/git_commit.py +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/src/okf_parser/git_commit_cli.py +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/src/okf_parser/graphql_adapter.py +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/src/okf_parser/ingestion.py +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/src/okf_parser/markdown_style.py +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/src/okf_parser/models.py +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/src/okf_parser/parser.py +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/src/okf_parser/projection_export.py +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/src/okf_parser/projections.py +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/src/okf_parser/pydantic_projection.py +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/src/okf_parser/relational_schema.py +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/src/okf_parser/rust_core.py +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/src/okf_parser/schema_contract.py +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/src/okf_parser/schema_export.py +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/src/okf_parser/schema_lexemes.py +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/src/okf_parser/schema_references.py +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/src/okf_parser/service.py +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/src/okf_parser/spec_scaffold.py +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/src/okf_parser/type_specs.py +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/src/okf_parser/typed_relations.py +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/src/okf_parser/typed_tables.py +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/src/okf_parser/write_support.py +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/tests/__init__.py +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/tests/fixtures/__init__.py +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/tests/fixtures/declared_parity.expected.json +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/tests/fixtures/declared_parity.schema.sql +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/tests/fixtures/pydantic_adversarial_generated.py +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/tests/fixtures/pydantic_generated.py +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/tests/test_apply.py +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/tests/test_apply_preview_token.py +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/tests/test_apply_preview_token_noop.py +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/tests/test_bundle.py +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/tests/test_bundle_import.py +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/tests/test_bundle_import_reserved.py +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/tests/test_changelog_notes.py +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/tests/test_classification.py +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/tests/test_cli.py +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/tests/test_codebase_to_okf_containment.py +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/tests/test_codebase_to_okf_local_resolution.py +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/tests/test_codebase_to_okf_one_shot.py +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/tests/test_codebase_to_okf_project_manifest.py +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/tests/test_codebase_to_okf_skill.py +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/tests/test_codebase_to_okf_type_specs.py +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/tests/test_concepts.py +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/tests/test_conformance.py +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/tests/test_content_digests.py +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/tests/test_declared_schema.py +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/tests/test_declared_schema_correctness.py +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/tests/test_duckdb.py +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/tests/test_duckdb_types.py +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/tests/test_edit.py +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/tests/test_engine_resolution.py +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/tests/test_exclusion.py +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/tests/test_exclusion_integration.py +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/tests/test_formatting.py +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/tests/test_formatting_conformance.py +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/tests/test_git_commit.py +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/tests/test_git_commit_cli.py +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/tests/test_graphql_adapter.py +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/tests/test_import_preview_token.py +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/tests/test_ingestion.py +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/tests/test_markdown_style.py +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/tests/test_mcp.py +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/tests/test_native_from_wheel.py +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/tests/test_parser.py +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/tests/test_project_version.py +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/tests/test_projection_documents.py +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/tests/test_projection_export.py +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/tests/test_pydantic_source.py +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/tests/test_reference_embed.py +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/tests/test_reference_export.py +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/tests/test_registry_state.py +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/tests/test_registry_state_native_npm.py +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/tests/test_relational_schema.py +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/tests/test_release_summary.py +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/tests/test_release_workflow_uv.py +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/tests/test_rust_core.py +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/tests/test_schema_export.py +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/tests/test_schema_inference_conformance.py +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/tests/test_schema_output_conformance.py +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/tests/test_spec_scaffold.py +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/tests/test_type_specs.py +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/tests/test_typed_relations.py +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/tests/test_verify_wheel_scripts.py +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/typescript/.npmignore +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/typescript/scripts/smoke-mcp-stdio.mjs +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/typescript/src/cli.ts +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/typescript/src/core.ts +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/typescript/src/digests.ts +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/typescript/src/engine.ts +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/typescript/src/formatting.ts +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/typescript/src/git-commit.ts +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/typescript/src/index.ts +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/typescript/src/ingestion.ts +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/typescript/src/lexemes.ts +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/typescript/src/mcp-cli.ts +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/typescript/src/mcp.ts +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/typescript/src/schema.ts +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/typescript/src/type-specs.ts +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/typescript/test/bundle.test.ts +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/typescript/test/classification.test.ts +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/typescript/test/content-digests.test.ts +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/typescript/test/engine-resolution.test.ts +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/typescript/test/exclusion.test.ts +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/typescript/test/formatting.test.ts +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/typescript/test/frontmatter.test.ts +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/typescript/test/git-commit.test.ts +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/typescript/test/ingestion.test.ts +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/typescript/test/mcp.test.ts +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/typescript/test/schema-inference-conformance.test.ts +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/typescript/test/schema-output-conformance.test.ts +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/typescript/test/schema.test.ts +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/typescript/test/type-specs.test.ts +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/typescript/tsconfig.build.json +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/typescript/tsconfig.json +0 -0
- {okf_parser-0.45.4/typescript → okf_parser-0.45.6/typescript-duckdb}/LICENSE +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/typescript-duckdb/src/cli.ts +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/typescript-duckdb/src/index.ts +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/typescript-duckdb/test/current-load-options.test.ts +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/typescript-duckdb/test/digests.test.ts +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/typescript-duckdb/test/typed.test.ts +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/typescript-duckdb/tsconfig.build.json +0 -0
- {okf_parser-0.45.4 → okf_parser-0.45.6}/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.
|
|
450
|
+
version = "0.45.6"
|
|
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.
|
|
460
|
+
version = "0.45.6"
|
|
461
461
|
dependencies = [
|
|
462
462
|
"chrono",
|
|
463
463
|
"ignore",
|
|
@@ -0,0 +1,376 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: okf-parser
|
|
3
|
+
Version: 0.45.6
|
|
4
|
+
Classifier: Development Status :: 4 - Beta
|
|
5
|
+
Classifier: Intended Audience :: Developers
|
|
6
|
+
Classifier: Programming Language :: Python :: 3
|
|
7
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
8
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
9
|
+
Classifier: Programming Language :: Rust
|
|
10
|
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
11
|
+
Classifier: Topic :: Text Processing :: Markup :: Markdown
|
|
12
|
+
Requires-Dist: cyclopts>=4.22,<5
|
|
13
|
+
Requires-Dist: duckdb>=1.4,<2
|
|
14
|
+
Requires-Dist: fastmcp>=3.4,<4
|
|
15
|
+
Requires-Dist: ibis-framework[duckdb]>=12,<13
|
|
16
|
+
Requires-Dist: markdown-it-py>=4,<5
|
|
17
|
+
Requires-Dist: mdformat>=1,<1.1
|
|
18
|
+
Requires-Dist: mdformat-frontmatter>=2,<3
|
|
19
|
+
Requires-Dist: mdformat-gfm>=1,<2
|
|
20
|
+
Requires-Dist: networkx>=3.4,<4
|
|
21
|
+
Requires-Dist: pyarrow>=18,<26
|
|
22
|
+
Requires-Dist: pydantic>=2.11,<3
|
|
23
|
+
Requires-Dist: pyyaml>=6,<7
|
|
24
|
+
Requires-Dist: ruamel-yaml>=0.18,<0.20
|
|
25
|
+
Requires-Dist: graphql-core>=3.2,<4 ; extra == 'graphql'
|
|
26
|
+
Provides-Extra: graphql
|
|
27
|
+
License-File: LICENSE
|
|
28
|
+
Summary: Relational inspection and validation for Open Knowledge Format bundles
|
|
29
|
+
Keywords: okf,open-knowledge-format,knowledge-graph,markdown,duckdb,ibis,validation,mcp
|
|
30
|
+
Author-email: Franklin Baldo <franklinbaldo@gmail.com>
|
|
31
|
+
License-Expression: MIT
|
|
32
|
+
Requires-Python: >=3.12
|
|
33
|
+
Description-Content-Type: text/markdown; charset=UTF-8; variant=GFM
|
|
34
|
+
Project-URL: Changelog, https://github.com/franklinbaldo/okf-parser/releases
|
|
35
|
+
Project-URL: Documentation, https://github.com/franklinbaldo/okf-parser/blob/main/docs/architecture.md
|
|
36
|
+
Project-URL: Homepage, https://github.com/franklinbaldo/okf-parser
|
|
37
|
+
Project-URL: Issues, https://github.com/franklinbaldo/okf-parser/issues
|
|
38
|
+
Project-URL: Repository, https://github.com/franklinbaldo/okf-parser
|
|
39
|
+
|
|
40
|
+
# okf-parser
|
|
41
|
+
|
|
42
|
+
Relational inspection and validation for
|
|
43
|
+
[Open Knowledge Format (OKF) v0.2](https://github.com/GoogleCloudPlatform/knowledge-catalog/blob/main/okf/SPEC.md)
|
|
44
|
+
bundles.
|
|
45
|
+
|
|
46
|
+
`okf-parser` reads an OKF bundle without imposing a domain taxonomy, preserves
|
|
47
|
+
unknown frontmatter fields, and exposes concepts and links as
|
|
48
|
+
[Ibis](https://ibis-project.org/) tables. This makes bundle-wide rules—identity,
|
|
49
|
+
lineage, cardinality, provenance, and profile-specific constraints—expressible
|
|
50
|
+
as deterministic relational checks.
|
|
51
|
+
|
|
52
|
+
## Why another OKF tool?
|
|
53
|
+
|
|
54
|
+
The ecosystem already has good static linters and generators, including
|
|
55
|
+
`okflint`, `okf-cli`, and `google-okf`. This project focuses on a different
|
|
56
|
+
layer:
|
|
57
|
+
|
|
58
|
+
- compile a bundle into queryable relational tables;
|
|
59
|
+
- project those same relations into a NetworkX graph;
|
|
60
|
+
- validate OKF v0.2 conformance without rejecting extensions;
|
|
61
|
+
- distinguish normative errors from advisory diagnostics;
|
|
62
|
+
- let projects add cross-concept rules as Ibis expressions;
|
|
63
|
+
- produce stable human-readable and JSON reports for CI and agents.
|
|
64
|
+
|
|
65
|
+
The architectural boundary between strict authored OKF and source adapters is documented in
|
|
66
|
+
[`docs/architecture.md`](https://github.com/franklinbaldo/okf-parser/blob/main/docs/architecture.md).
|
|
67
|
+
|
|
68
|
+
The parser and validation model are inspired by
|
|
69
|
+
[`franklinbaldo/sisprev`](https://github.com/franklinbaldo/sisprev): parse
|
|
70
|
+
documents independently from semantic validation, aggregate violations instead
|
|
71
|
+
of failing at the first bad concept, preserve authored bodies, and test
|
|
72
|
+
filesystem identity explicitly. No Sisprev-specific legal types are copied into
|
|
73
|
+
the core.
|
|
74
|
+
|
|
75
|
+
[`mrorigo/rust-okf`](https://github.com/mrorigo/rust-okf) inspired the stable
|
|
76
|
+
logical key, conservative metadata preservation, BOM/CRLF handling, and clean
|
|
77
|
+
separation between bundle parsing and downstream query surfaces. Its BM25,
|
|
78
|
+
vector index, storage format, and HTTP server are intentionally outside this
|
|
79
|
+
project's scope.
|
|
80
|
+
|
|
81
|
+
## Quick start
|
|
82
|
+
|
|
83
|
+
```bash
|
|
84
|
+
uv sync
|
|
85
|
+
uv run okf-parser check path/to/bundle
|
|
86
|
+
uv run okf-parser check path/to/bundle --relational-schema okf.schema.sql
|
|
87
|
+
uv run okf-parser inventory path/to/bundle
|
|
88
|
+
uv run okf-parser graph path/to/bundle
|
|
89
|
+
uv run okf-parser format path/to/bundle
|
|
90
|
+
uv run okf-parser format path/to/bundle --write
|
|
91
|
+
uv run okf-parser duckdb path/to/bundle knowledge.duckdb
|
|
92
|
+
uv run okf-parser duckdb path/to/bundle knowledge.duckdb --overwrite
|
|
93
|
+
uv run okf-parser serve
|
|
94
|
+
uv run okf-parser serve --allow-write
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
The command exits with status `1` only when normative errors exist. Broken
|
|
98
|
+
cross-links are warnings because OKF v0.2 explicitly says they do not make a
|
|
99
|
+
bundle non-conformant.
|
|
100
|
+
|
|
101
|
+
The MCP server is commit-disabled by default. `serve --allow-write` exposes explicit
|
|
102
|
+
commit tools for formatting, relational apply, spec scaffolding, import, and DuckDB
|
|
103
|
+
export; preview tools remain available without the flag. Effect annotations describe
|
|
104
|
+
maximum tool effects but are not authorization or sandboxing.
|
|
105
|
+
|
|
106
|
+
`format` is an opinionated canonicalizer, not a syntax-preserving rewriter. It
|
|
107
|
+
keeps [mdformat](https://mdformat.readthedocs.io/) as its base and replaces only
|
|
108
|
+
the numbering policy for ordered lists: markers are decided while rendering, so
|
|
109
|
+
they are consecutive (`1. 2. 3.`) and never zero-padded to an even width. A list
|
|
110
|
+
starting at `101` is written `101. 102. 103.`, appending an item does not rewrite
|
|
111
|
+
the lines above it, and a list whose markers would exceed CommonMark's nine-digit
|
|
112
|
+
limit keeps plain numbering.
|
|
113
|
+
|
|
114
|
+
Formatting will not write a file whose **protected block structure** the rewrite
|
|
115
|
+
would change; such a file is reported in `skipped_paths` and left on disk.
|
|
116
|
+
Protected means the sequence, nesting and tag of every block, block attributes
|
|
117
|
+
such as an ordered list's `start`, and the content of code blocks, raw HTML and
|
|
118
|
+
frontmatter. Inline content — link targets, emphasis, text inside a paragraph or
|
|
119
|
+
table cell — is deliberately outside this check, because canonical formatting
|
|
120
|
+
rewrites inline whitespace.
|
|
121
|
+
|
|
122
|
+
## Excluding paths
|
|
123
|
+
|
|
124
|
+
A repository that keeps OKF knowledge next to code, a README and vendored
|
|
125
|
+
dependencies has no root that validates cleanly. Checking the repository root
|
|
126
|
+
reports `OKF001` for every unrelated Markdown file; checking each bundle
|
|
127
|
+
separately makes every link *between* bundles unresolvable, because the target
|
|
128
|
+
sits outside the checked root. Excluding subpaths is what lets one root cover
|
|
129
|
+
the whole tree, which is the only arrangement under which cross-bundle link
|
|
130
|
+
validation runs at all.
|
|
131
|
+
|
|
132
|
+
Put the patterns in an `.okfignore` beside the bundle, so the exclusions are
|
|
133
|
+
versioned with the content and CI needs no extra flags:
|
|
134
|
+
|
|
135
|
+
```gitignore
|
|
136
|
+
# vendored dependencies
|
|
137
|
+
vendor
|
|
138
|
+
# the knowledge inside them is not noise
|
|
139
|
+
!vendor/knowledge
|
|
140
|
+
# project Markdown at the root, not knowledge
|
|
141
|
+
/*.md
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
Or pass them for a single run — the option repeats, and adds to the file rather
|
|
145
|
+
than replacing it:
|
|
146
|
+
|
|
147
|
+
```bash
|
|
148
|
+
uv run okf-parser check . --exclude vendor --exclude '/*.md'
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
Every command that reads a bundle accepts `--exclude`: `check`, `inventory`,
|
|
152
|
+
`graph`, `format` and `duckdb`. Excluded files are never read and never
|
|
153
|
+
written, so `format --write` on a repository root leaves vendored documents
|
|
154
|
+
alone.
|
|
155
|
+
|
|
156
|
+
### Pattern semantics
|
|
157
|
+
|
|
158
|
+
`.okfignore` uses **`.gitignore` pattern semantics**, matched against
|
|
159
|
+
POSIX-style paths relative to the bundle root:
|
|
160
|
+
|
|
161
|
+
| pattern | matches | does not match |
|
|
162
|
+
| -------------- | -------------------------------------------- | ----------------------- |
|
|
163
|
+
| `vendor` | `vendor/a.md`, `libs/vendor/a.md` | `equipe/a.md` |
|
|
164
|
+
| `/vendor` | `vendor/a.md` | `libs/vendor/a.md` |
|
|
165
|
+
| `vendor/` | `vendor/a.md` (directory only) | a *file* named `vendor` |
|
|
166
|
+
| `*.md` | `README.md`, `items/tarefa.md` | `items/tarefa.markdown` |
|
|
167
|
+
| `/*.md` | `README.md` | `items/tarefa.md` |
|
|
168
|
+
| `docs/**/x.md` | `docs/x.md`, `docs/a/b/x.md` | `other/x.md` |
|
|
169
|
+
| `!vendor/kb` | re-includes what an earlier pattern excluded | |
|
|
170
|
+
|
|
171
|
+
- a pattern without a separator matches its name **at any depth**; a separator
|
|
172
|
+
anchors it at the bundle root;
|
|
173
|
+
- `*` and `?` stay inside one segment, `[abc]` and `[!abc]` classes work, and
|
|
174
|
+
`**` spans segments;
|
|
175
|
+
- a trailing `/` matches directories only;
|
|
176
|
+
- `!` re-includes, and **the last pattern that matches a path decides**;
|
|
177
|
+
- `#` starts a comment, blank lines declare nothing, unescaped trailing spaces
|
|
178
|
+
are dropped, and `\#` or `\!` escape a literal first character.
|
|
179
|
+
|
|
180
|
+
One deviation from `.gitignore` is deliberate. Git cannot re-include a path
|
|
181
|
+
whose parent directory is excluded, because it prunes the walk and never looks
|
|
182
|
+
back, so `vendor` plus `!vendor/knowledge` does nothing there. Here it works:
|
|
183
|
+
discovery descends whenever a negation exists. A negation that silently does
|
|
184
|
+
nothing is exactly the surprise this feature exists to prevent. With no
|
|
185
|
+
negation in the rules the walk still prunes, so excluding a vendored dependency
|
|
186
|
+
of several hundred documents never walks it.
|
|
187
|
+
|
|
188
|
+
The same rules are shared with the TypeScript package through
|
|
189
|
+
`conformance/exclusion.json`.
|
|
190
|
+
|
|
191
|
+
### Migrating from the pre-0.14 semantics
|
|
192
|
+
|
|
193
|
+
Before 0.14.0 every pattern was anchored at the bundle root and `!` was a
|
|
194
|
+
literal character. Two rewrites cover it:
|
|
195
|
+
|
|
196
|
+
| before | after | why |
|
|
197
|
+
| -------- | --------- | ------------------------------------------------- |
|
|
198
|
+
| `*.md` | `/*.md` | unanchored patterns now match at any depth |
|
|
199
|
+
| `vendor` | `/vendor` | keep it root-only; leave as-is to match any depth |
|
|
200
|
+
|
|
201
|
+
A pattern that begins with a literal `!` now needs `\!`.
|
|
202
|
+
|
|
203
|
+
## Requiring a specification per type
|
|
204
|
+
|
|
205
|
+
OKF v0.2 only requires `type` to be non-empty, so a producer can invent a type,
|
|
206
|
+
emit concepts of it and keep a green `check` while that type's frontmatter
|
|
207
|
+
schema changes underneath its consumers.
|
|
208
|
+
|
|
209
|
+
The optional rule below closes that gap without inventing taxonomy: it derives a
|
|
210
|
+
document path from each type in use and reports the types whose document is
|
|
211
|
+
absent.
|
|
212
|
+
|
|
213
|
+
```bash
|
|
214
|
+
uv run okf-parser check ./bundle --require-spec ".okf/specs/{slug}.md"
|
|
215
|
+
uv run okf-parser check ./bundle --require-spec ".okf/specs/{slug}.md" --normative-spec
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
The template must contain `{slug}`. The slug is lowercase, with accents and
|
|
219
|
+
cedillas removed, whitespace and `/` turned into hyphens, and every remaining
|
|
220
|
+
non-alphanumeric character dropped:
|
|
221
|
+
|
|
222
|
+
| `type` | derived path |
|
|
223
|
+
| ----------------- | ------------------------------- |
|
|
224
|
+
| `Spec` | `.okf/specs/spec.md` |
|
|
225
|
+
| `Revisão Ciência` | `.okf/specs/revisao-ciencia.md` |
|
|
226
|
+
| `Peça Forense` | `.okf/specs/peca-forense.md` |
|
|
227
|
+
|
|
228
|
+
The path is **derived**, not declared. A `spec:` frontmatter field would be a
|
|
229
|
+
second fact free to disagree with the first, and putting the path in `type`
|
|
230
|
+
itself would tie identity to layout, so renaming a directory would invalidate
|
|
231
|
+
every concept of that type.
|
|
232
|
+
|
|
233
|
+
Missing documents are reported as `OKF010` warnings, because a bundle mid-
|
|
234
|
+
adoption legitimately has legacy types without a document and that is not an
|
|
235
|
+
OKF v0.2 defect. `--normative-spec` promotes them to errors for a bundle that
|
|
236
|
+
has completed the adoption. The rule is off unless `--require-spec` is given.
|
|
237
|
+
|
|
238
|
+
## GitHub Actions
|
|
239
|
+
|
|
240
|
+
Add the repository as a CI check:
|
|
241
|
+
|
|
242
|
+
```yaml
|
|
243
|
+
steps:
|
|
244
|
+
- uses: actions/checkout@v7
|
|
245
|
+
- uses: franklinbaldo/okf-parser@v0.45.6
|
|
246
|
+
with:
|
|
247
|
+
path: knowledge
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
### Rust end-to-end engine
|
|
251
|
+
|
|
252
|
+
The default Python and TypeScript implementations remain portable and require no Rust
|
|
253
|
+
binary. For large bundles, build the native engine and pass its path explicitly:
|
|
254
|
+
|
|
255
|
+
```bash
|
|
256
|
+
cargo build --release --manifest-path rust-core/Cargo.toml
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
Python accepts `load_bundle(root, rust_core=Path(".../okf-parser"))`; TypeScript accepts
|
|
260
|
+
`loadBundle(root, { rustCore: ".../okf-core" })`. The native process owns discovery,
|
|
261
|
+
bounded parallel reads, YAML/frontmatter, Markdown facts, validation, link resolution,
|
|
262
|
+
and content digests. The packaged `okf-parser` executable is the single Python command;
|
|
263
|
+
its ordinary subcommands dispatch to the Python CLI while private engine operations stay
|
|
264
|
+
inside the same executable. Omitting the option keeps the portable language-native fallback.
|
|
265
|
+
|
|
266
|
+
The composite action installs a pinned uv version and executes the same
|
|
267
|
+
`validate_path()` function used by the Python API, CLI, and MCP server.
|
|
268
|
+
|
|
269
|
+
Pin an exact version. There is no moving `@v1` ref: this repository's tags are
|
|
270
|
+
package versions, because `publish.yml` refuses to publish a release whose tag
|
|
271
|
+
does not equal the version in `pyproject.toml`. A `v1` tag would either break
|
|
272
|
+
that check or drift away from the version it claims to be. A major-version ref
|
|
273
|
+
becomes worth introducing when the package itself reaches `1.0.0`.
|
|
274
|
+
|
|
275
|
+
Releases are published to PyPI from GitHub Releases through OIDC Trusted
|
|
276
|
+
Publishing. No long-lived PyPI token is stored in the repository.
|
|
277
|
+
|
|
278
|
+
Every pull request must increase the SemVer version in `pyproject.toml` and add
|
|
279
|
+
exactly one matching `changelog/<version>.md` entry. CI compares both against
|
|
280
|
+
the target branch before allowing merge.
|
|
281
|
+
|
|
282
|
+
## MCP
|
|
283
|
+
|
|
284
|
+
```bash
|
|
285
|
+
uv run okf-parser serve
|
|
286
|
+
uv run fastmcp run
|
|
287
|
+
```
|
|
288
|
+
|
|
289
|
+
Read-only tools: `check`, `inventory`, `graph`, and `format_check`.
|
|
290
|
+
|
|
291
|
+
## DuckDB
|
|
292
|
+
|
|
293
|
+
`okf-parser` is a regular uv-managed Python app; the DuckDB integration is part
|
|
294
|
+
of the same package, not a native C++ subproject:
|
|
295
|
+
|
|
296
|
+
```python
|
|
297
|
+
import duckdb
|
|
298
|
+
|
|
299
|
+
from okf_parser.duckdb import attach_okf
|
|
300
|
+
|
|
301
|
+
connection = duckdb.connect("knowledge.duckdb")
|
|
302
|
+
attach_okf(connection, "knowledge/")
|
|
303
|
+
|
|
304
|
+
connection.sql("""
|
|
305
|
+
SELECT concept_type, count(*)
|
|
306
|
+
FROM okf.concepts
|
|
307
|
+
GROUP BY concept_type
|
|
308
|
+
""").show()
|
|
309
|
+
```
|
|
310
|
+
|
|
311
|
+
The call creates `okf.concepts`, `okf.links`, `okf.reserved`, and
|
|
312
|
+
`okf.diagnostics` as ordinary DuckDB tables. Materializing twice into the same
|
|
313
|
+
schema raises `BundleExportError` rather than clobbering an earlier export; pass
|
|
314
|
+
`overwrite=True` (or `--overwrite` on the command line) to replace the four
|
|
315
|
+
tables.
|
|
316
|
+
|
|
317
|
+
## Python API
|
|
318
|
+
|
|
319
|
+
```python
|
|
320
|
+
from pathlib import Path
|
|
321
|
+
|
|
322
|
+
from okf_parser import load_bundle, validate_path
|
|
323
|
+
|
|
324
|
+
bundle = load_bundle(Path("knowledge"))
|
|
325
|
+
print(bundle.concepts.execute())
|
|
326
|
+
print(bundle.links.execute())
|
|
327
|
+
print(bundle.to_networkx())
|
|
328
|
+
print(bundle.validate())
|
|
329
|
+
|
|
330
|
+
report = validate_path(Path("knowledge"))
|
|
331
|
+
assert report.markdown_count == report.concept_count + report.reserved_count
|
|
332
|
+
assert report.is_conformant
|
|
333
|
+
```
|
|
334
|
+
|
|
335
|
+
Declared RFC 0006 types can be queried directly as Ibis relations without a CLI or database-file round trip:
|
|
336
|
+
|
|
337
|
+
```python
|
|
338
|
+
bundle = load_bundle(Path("knowledge"))
|
|
339
|
+
with bundle.compile_types("docs/types/{slug}.md") as typed:
|
|
340
|
+
routines = typed["Rotina"]
|
|
341
|
+
print(routines.filter(routines.custo.notnull()).execute())
|
|
342
|
+
```
|
|
343
|
+
|
|
344
|
+
`TypedRelations` owns an ephemeral DuckDB/Ibis backend; use it as a context manager or call `close()` explicitly. With no matching declarations, `tables` is empty rather than silently inventing an inferred physical schema.
|
|
345
|
+
|
|
346
|
+
`load_bundle`, `validate_path` and `format_path` read the bundle's `.okfignore`
|
|
347
|
+
on their own, and take an `exclude` sequence for patterns supplied per call:
|
|
348
|
+
|
|
349
|
+
```python
|
|
350
|
+
report = validate_path(Path("."), exclude=["vendor", "*.md"])
|
|
351
|
+
```
|
|
352
|
+
|
|
353
|
+
`validate_path` also takes the optional type-specification rule:
|
|
354
|
+
|
|
355
|
+
```python
|
|
356
|
+
report = validate_path(Path("knowledge"), require_spec=".okf/specs/{slug}.md")
|
|
357
|
+
```
|
|
358
|
+
|
|
359
|
+
## Current scope
|
|
360
|
+
|
|
361
|
+
- UTF-8 Markdown discovery, matching `.md` case-insensitively, with
|
|
362
|
+
`.gitignore`-compatible exclusions from `.okfignore` or `--exclude`;
|
|
363
|
+
- reserved `index.md` and `log.md` handling;
|
|
364
|
+
- strict YAML-frontmatter parsing for concept documents, validated with Pydantic
|
|
365
|
+
at the parse boundary so one malformed document cannot abort a run;
|
|
366
|
+
- required non-empty `type`, optionally requiring a specification document per
|
|
367
|
+
type in use;
|
|
368
|
+
- stable concept IDs derived from paths;
|
|
369
|
+
- Markdown-link extraction and resolution;
|
|
370
|
+
- Ibis tables for concepts, reserved documents, and links;
|
|
371
|
+
- NetworkX graph projection for traversal, cycles, components, and impact;
|
|
372
|
+
- aggregated validation reports.
|
|
373
|
+
|
|
374
|
+
Profiles, lifecycle/provenance family validation, external resources, and
|
|
375
|
+
pluggable Ibis rules are the next milestones.
|
|
376
|
+
|
|
@@ -1,31 +1,3 @@
|
|
|
1
|
-
Metadata-Version: 2.4
|
|
2
|
-
Name: okf-parser
|
|
3
|
-
Version: 0.45.4
|
|
4
|
-
Requires-Dist: cyclopts>=4.22,<5
|
|
5
|
-
Requires-Dist: duckdb>=1.4,<2
|
|
6
|
-
Requires-Dist: fastmcp>=3.4,<4
|
|
7
|
-
Requires-Dist: ibis-framework[duckdb]>=12,<13
|
|
8
|
-
Requires-Dist: markdown-it-py>=4,<5
|
|
9
|
-
Requires-Dist: mdformat>=1,<1.1
|
|
10
|
-
Requires-Dist: mdformat-frontmatter>=2,<3
|
|
11
|
-
Requires-Dist: mdformat-gfm>=1,<2
|
|
12
|
-
Requires-Dist: networkx>=3.4,<4
|
|
13
|
-
Requires-Dist: pyarrow>=18,<26
|
|
14
|
-
Requires-Dist: pydantic>=2.11,<3
|
|
15
|
-
Requires-Dist: pyyaml>=6,<7
|
|
16
|
-
Requires-Dist: ruamel-yaml>=0.18,<0.20
|
|
17
|
-
Requires-Dist: graphql-core>=3.2,<4 ; extra == 'graphql'
|
|
18
|
-
Provides-Extra: graphql
|
|
19
|
-
Summary: Relational inspection and validation for Open Knowledge Format bundles
|
|
20
|
-
Requires-Python: >=3.12
|
|
21
|
-
Description-Content-Type: text/markdown; charset=UTF-8; variant=GFM
|
|
22
|
-
|
|
23
|
-
---
|
|
24
|
-
type: Project
|
|
25
|
-
title: okf-parser
|
|
26
|
-
description: Relational inspection and validation for Open Knowledge Format bundles
|
|
27
|
-
---
|
|
28
|
-
|
|
29
1
|
# okf-parser
|
|
30
2
|
|
|
31
3
|
Relational inspection and validation for
|
|
@@ -52,7 +24,7 @@ layer:
|
|
|
52
24
|
- produce stable human-readable and JSON reports for CI and agents.
|
|
53
25
|
|
|
54
26
|
The architectural boundary between strict authored OKF and source adapters is documented in
|
|
55
|
-
[`docs/architecture.md`](docs/architecture.md).
|
|
27
|
+
[`docs/architecture.md`](https://github.com/franklinbaldo/okf-parser/blob/main/docs/architecture.md).
|
|
56
28
|
|
|
57
29
|
The parser and validation model are inspired by
|
|
58
30
|
[`franklinbaldo/sisprev`](https://github.com/franklinbaldo/sisprev): parse
|
|
@@ -231,7 +203,7 @@ Add the repository as a CI check:
|
|
|
231
203
|
```yaml
|
|
232
204
|
steps:
|
|
233
205
|
- uses: actions/checkout@v7
|
|
234
|
-
- uses: franklinbaldo/okf-parser@v0.45.
|
|
206
|
+
- uses: franklinbaldo/okf-parser@v0.45.6
|
|
235
207
|
with:
|
|
236
208
|
path: knowledge
|
|
237
209
|
```
|
|
@@ -362,4 +334,3 @@ report = validate_path(Path("knowledge"), require_spec=".okf/specs/{slug}.md")
|
|
|
362
334
|
|
|
363
335
|
Profiles, lifecycle/provenance family validation, external resources, and
|
|
364
336
|
pluggable Ibis rules are the next milestones.
|
|
365
|
-
|
|
@@ -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.
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: Release Note
|
|
3
|
+
title: give the PyPI project page metadata and a clean description
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
- Stop publishing the README's OKF frontmatter as page content. `README.md` is a `type: Project` concept and must open with `---`, which PyPI rendered as a thematic break plus a setext heading, so every project page opened with `type: Project title: okf-parser description: ...` above the real title. `scripts/pypi_readme.py` now derives `README.pypi.md`, applying the same correction `changelog_notes.py` already applies to GitHub Release bodies.
|
|
7
|
+
- Rewrite repository-relative links in the derived description to absolute URLs. `docs/architecture.md` resolved on GitHub and pointed nowhere on PyPI.
|
|
8
|
+
- Declare `MIT` and ship a root `LICENSE`. The three npm packages already declared MIT and shipped the file, while the Python distribution carried no licence at all.
|
|
9
|
+
- Declare `authors`, `keywords`, `classifiers` and `project.urls`. The project page previously offered no link back to the repository, its issues or its releases.
|
|
10
|
+
- Verify the derived description in CI, so it cannot drift from `README.md`, and add the repository's first `.okfignore` to keep it out of the repository's own OKF validation. The repository is validated twice, by the Python CLI and by the TypeScript one, and `.okfignore` is read by both; per-command `--exclude` flags would have to be repeated at every call site and silently miss any that was forgotten.
|
|
@@ -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
|
-
|
|
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
|
|
13
|
-
- TypeScript
|
|
14
|
-
- platform npm companion
|
|
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
|
|
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,9 +1,35 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "okf-parser"
|
|
3
|
-
version = "0.45.
|
|
3
|
+
version = "0.45.6"
|
|
4
4
|
description = "Relational inspection and validation for Open Knowledge Format bundles"
|
|
5
|
-
|
|
5
|
+
# Derived from README.md by scripts/pypi_readme.py. README.md is an OKF concept
|
|
6
|
+
# and must open with frontmatter, which PyPI would otherwise render as a heading
|
|
7
|
+
# above the real title.
|
|
8
|
+
readme = "README.pypi.md"
|
|
6
9
|
requires-python = ">=3.12"
|
|
10
|
+
license = "MIT"
|
|
11
|
+
license-files = ["LICENSE"]
|
|
12
|
+
authors = [{ name = "Franklin Baldo", email = "franklinbaldo@gmail.com" }]
|
|
13
|
+
keywords = [
|
|
14
|
+
"okf",
|
|
15
|
+
"open-knowledge-format",
|
|
16
|
+
"knowledge-graph",
|
|
17
|
+
"markdown",
|
|
18
|
+
"duckdb",
|
|
19
|
+
"ibis",
|
|
20
|
+
"validation",
|
|
21
|
+
"mcp",
|
|
22
|
+
]
|
|
23
|
+
classifiers = [
|
|
24
|
+
"Development Status :: 4 - Beta",
|
|
25
|
+
"Intended Audience :: Developers",
|
|
26
|
+
"Programming Language :: Python :: 3",
|
|
27
|
+
"Programming Language :: Python :: 3.12",
|
|
28
|
+
"Programming Language :: Python :: 3.13",
|
|
29
|
+
"Programming Language :: Rust",
|
|
30
|
+
"Topic :: Software Development :: Libraries :: Python Modules",
|
|
31
|
+
"Topic :: Text Processing :: Markup :: Markdown",
|
|
32
|
+
]
|
|
7
33
|
dependencies = [
|
|
8
34
|
"cyclopts>=4.22,<5",
|
|
9
35
|
"duckdb>=1.4,<2",
|
|
@@ -23,6 +49,13 @@ dependencies = [
|
|
|
23
49
|
"ruamel.yaml>=0.18,<0.20",
|
|
24
50
|
]
|
|
25
51
|
|
|
52
|
+
[project.urls]
|
|
53
|
+
Homepage = "https://github.com/franklinbaldo/okf-parser"
|
|
54
|
+
Repository = "https://github.com/franklinbaldo/okf-parser"
|
|
55
|
+
Issues = "https://github.com/franklinbaldo/okf-parser/issues"
|
|
56
|
+
Changelog = "https://github.com/franklinbaldo/okf-parser/releases"
|
|
57
|
+
Documentation = "https://github.com/franklinbaldo/okf-parser/blob/main/docs/architecture.md"
|
|
58
|
+
|
|
26
59
|
[project.optional-dependencies]
|
|
27
60
|
graphql = ["graphql-core>=3.2,<4"]
|
|
28
61
|
|