dirsql 0.4.12__tar.gz → 0.4.14__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 (231) hide show
  1. {dirsql-0.4.12 → dirsql-0.4.14}/Cargo.lock +1 -1
  2. {dirsql-0.4.12 → dirsql-0.4.14}/Cargo.toml +0 -15
  3. {dirsql-0.4.12 → dirsql-0.4.14}/PKG-INFO +1 -1
  4. {dirsql-0.4.12 → dirsql-0.4.14}/packages/python/Cargo.toml +15 -10
  5. dirsql-0.4.14/packages/python/changelog.d/2026-08-04-cast-lints.md +1 -0
  6. dirsql-0.4.14/packages/python/e2e-attestations/chore-766-narrow-pedantic.json +7 -0
  7. dirsql-0.4.14/packages/python/e2e-attestations/claude-772-extension-without-config.json +7 -0
  8. {dirsql-0.4.12 → dirsql-0.4.14}/packages/rust/Cargo.toml +13 -5
  9. {dirsql-0.4.12 → dirsql-0.4.14}/packages/rust/benches/db_bench.rs +6 -0
  10. {dirsql-0.4.12 → dirsql-0.4.14}/packages/rust/benches/differ_bench.rs +6 -0
  11. dirsql-0.4.14/packages/rust/changelog.d/2026-08-04-cast-lints.md +1 -0
  12. dirsql-0.4.14/packages/rust/changelog.d/2026-08-04-configless-extension.md +1 -0
  13. {dirsql-0.4.12 → dirsql-0.4.14}/packages/rust/src/bin/dirsql.rs +34 -0
  14. {dirsql-0.4.12 → dirsql-0.4.14}/packages/rust/src/config.rs +3 -1
  15. {dirsql-0.4.12 → dirsql-0.4.14}/packages/rust/src/db.rs +7 -2
  16. {dirsql-0.4.12 → dirsql-0.4.14}/packages/rust/src/lib.rs +2 -2
  17. {dirsql-0.4.12 → dirsql-0.4.14}/packages/rust/src/persist.rs +5 -1
  18. dirsql-0.4.12/packages/python/e2e-attestations/claude-763-forbid-unsafe.json +0 -7
  19. dirsql-0.4.12/packages/python/e2e-attestations/feat-745-python-no-ignore.json +0 -7
  20. dirsql-0.4.12/packages/python/e2e-attestations/fix-754-discovery-ext-resolution.json +0 -7
  21. {dirsql-0.4.12 → dirsql-0.4.14}/README.md +0 -0
  22. {dirsql-0.4.12 → dirsql-0.4.14}/dirsql/__init__.py +0 -0
  23. {dirsql-0.4.12 → dirsql-0.4.14}/dirsql/_async.py +0 -0
  24. {dirsql-0.4.12 → dirsql-0.4.14}/dirsql/_dirsql.pyi +0 -0
  25. {dirsql-0.4.12 → dirsql-0.4.14}/dirsql/cli/__init__.py +0 -0
  26. {dirsql-0.4.12 → dirsql-0.4.14}/dirsql/cli/binary_path.py +0 -0
  27. {dirsql-0.4.12 → dirsql-0.4.14}/dirsql/cli/discover_plugins/__init__.py +0 -0
  28. {dirsql-0.4.12 → dirsql-0.4.14}/dirsql/cli/discover_plugins/discovered_fragments.py +0 -0
  29. {dirsql-0.4.12 → dirsql-0.4.14}/dirsql/cli/discover_plugins/discovery_disabled.py +0 -0
  30. {dirsql-0.4.12 → dirsql-0.4.14}/dirsql/cli/discover_plugins/fragment_path.py +0 -0
  31. {dirsql-0.4.12 → dirsql-0.4.14}/dirsql/cli/discover_plugins/user_passed_config.py +0 -0
  32. {dirsql-0.4.12 → dirsql-0.4.14}/dirsql/cli/discover_plugins/with_discovered_plugins.py +0 -0
  33. {dirsql-0.4.12 → dirsql-0.4.14}/dirsql/cli/is_windows.py +0 -0
  34. {dirsql-0.4.12 → dirsql-0.4.14}/dirsql/cli/main.py +0 -0
  35. {dirsql-0.4.12 → dirsql-0.4.14}/dirsql/cli/resolve_config_extensions.py +0 -0
  36. {dirsql-0.4.12 → dirsql-0.4.14}/dirsql/py.typed +0 -0
  37. {dirsql-0.4.12 → dirsql-0.4.14}/dirsql/resolve_config_extensions.py +0 -0
  38. {dirsql-0.4.12 → dirsql-0.4.14}/dirsql/resolve_extension.py +0 -0
  39. {dirsql-0.4.12 → dirsql-0.4.14}/docs/.claude/CLAUDE.md +0 -0
  40. {dirsql-0.4.12 → dirsql-0.4.14}/docs/.vitepress/config.ts +0 -0
  41. {dirsql-0.4.12 → dirsql-0.4.14}/docs/.vitepress/theme/index.ts +0 -0
  42. {dirsql-0.4.12 → dirsql-0.4.14}/docs/.vitepress/theme/lang.ts +0 -0
  43. {dirsql-0.4.12 → dirsql-0.4.14}/docs/AGENTS.md +0 -0
  44. {dirsql-0.4.12 → dirsql-0.4.14}/docs/explanation.md +0 -0
  45. {dirsql-0.4.12 → dirsql-0.4.14}/docs/getting-started.md +0 -0
  46. {dirsql-0.4.12 → dirsql-0.4.14}/docs/howto/columns-from-paths.md +0 -0
  47. {dirsql-0.4.12 → dirsql-0.4.14}/docs/howto/define-tables.md +0 -0
  48. {dirsql-0.4.12 → dirsql-0.4.14}/docs/howto/embed.md +0 -0
  49. {dirsql-0.4.12 → dirsql-0.4.14}/docs/howto/extract-from-contents.md +0 -0
  50. {dirsql-0.4.12 → dirsql-0.4.14}/docs/howto/load-extension.md +0 -0
  51. {dirsql-0.4.12 → dirsql-0.4.14}/docs/howto/parse-files-into-columns.md +0 -0
  52. {dirsql-0.4.12 → dirsql-0.4.14}/docs/howto/persist.md +0 -0
  53. {dirsql-0.4.12 → dirsql-0.4.14}/docs/howto/query-without-config.md +0 -0
  54. {dirsql-0.4.12 → dirsql-0.4.14}/docs/howto/react-to-changes.md +0 -0
  55. {dirsql-0.4.12 → dirsql-0.4.14}/docs/howto/search-by-meaning.md +0 -0
  56. {dirsql-0.4.12 → dirsql-0.4.14}/docs/howto/skip-files.md +0 -0
  57. {dirsql-0.4.12 → dirsql-0.4.14}/docs/howto/write-a-plugin.md +0 -0
  58. {dirsql-0.4.12 → dirsql-0.4.14}/docs/index.md +0 -0
  59. {dirsql-0.4.12 → dirsql-0.4.14}/docs/migrations.md +0 -0
  60. {dirsql-0.4.12 → dirsql-0.4.14}/docs/package.json +0 -0
  61. {dirsql-0.4.12 → dirsql-0.4.14}/docs/plugins.md +0 -0
  62. {dirsql-0.4.12 → dirsql-0.4.14}/docs/pnpm-lock.yaml +0 -0
  63. {dirsql-0.4.12 → dirsql-0.4.14}/docs/pnpm-workspace.yaml +0 -0
  64. {dirsql-0.4.12 → dirsql-0.4.14}/docs/reference/cli.md +0 -0
  65. {dirsql-0.4.12 → dirsql-0.4.14}/docs/reference/columns.md +0 -0
  66. {dirsql-0.4.12 → dirsql-0.4.14}/docs/reference/config.md +0 -0
  67. {dirsql-0.4.12 → dirsql-0.4.14}/docs/reference/hooks.md +0 -0
  68. {dirsql-0.4.12 → dirsql-0.4.14}/docs/reference/http-api.md +0 -0
  69. {dirsql-0.4.12 → dirsql-0.4.14}/docs/reference/path-tables.md +0 -0
  70. {dirsql-0.4.12 → dirsql-0.4.14}/docs/reference/sdk.md +0 -0
  71. {dirsql-0.4.12 → dirsql-0.4.14}/packages/python/CHANGELOG.md +0 -0
  72. {dirsql-0.4.12 → dirsql-0.4.14}/packages/python/MIGRATIONS.md +0 -0
  73. {dirsql-0.4.12 → dirsql-0.4.14}/packages/python/README.md +0 -0
  74. {dirsql-0.4.12 → dirsql-0.4.14}/packages/python/changelog.d/2026-07-13-drop-cwd-config-auto-detect.md +0 -0
  75. {dirsql-0.4.12 → dirsql-0.4.14}/packages/python/changelog.d/2026-07-13-plugin-discovery.md +0 -0
  76. {dirsql-0.4.12 → dirsql-0.4.14}/packages/python/changelog.d/2026-07-13-rename-extract-to-on-file.md +0 -0
  77. {dirsql-0.4.12 → dirsql-0.4.14}/packages/python/changelog.d/2026-07-13-repeatable-config.md +0 -0
  78. {dirsql-0.4.12 → dirsql-0.4.14}/packages/python/changelog.d/2026-07-13-sdk-default-baked-in-config.md +0 -0
  79. {dirsql-0.4.12 → dirsql-0.4.14}/packages/python/changelog.d/2026-07-20-drop-implicit-files-table.md +0 -0
  80. {dirsql-0.4.12 → dirsql-0.4.14}/packages/python/changelog.d/2026-07-21-remove-glob-captures.md +0 -0
  81. {dirsql-0.4.12 → dirsql-0.4.14}/packages/python/changelog.d/2026-07-24-hookless-table-config-error.md +0 -0
  82. {dirsql-0.4.12 → dirsql-0.4.14}/packages/python/changelog.d/2026-07-24-remove-stat-fact-injection.md +0 -0
  83. {dirsql-0.4.12 → dirsql-0.4.14}/packages/python/changelog.d/2026-07-29-restore-python-310.md +0 -0
  84. {dirsql-0.4.12 → dirsql-0.4.14}/packages/python/changelog.d/2026-08-02-release-profile.md +0 -0
  85. {dirsql-0.4.12 → dirsql-0.4.14}/packages/python/changelog.d/2026-08-02-scan-failures.md +0 -0
  86. {dirsql-0.4.12 → dirsql-0.4.14}/packages/python/changelog.d/2026-08-03-discovery-ext-resolution.md +0 -0
  87. {dirsql-0.4.12 → dirsql-0.4.14}/packages/python/changelog.d/2026-08-03-manylinux-dynamic-binary.md +0 -0
  88. {dirsql-0.4.12 → dirsql-0.4.14}/packages/python/changelog.d/2026-08-03-python-no-ignore.md +0 -0
  89. {dirsql-0.4.12 → dirsql-0.4.14}/packages/python/changelog.d/README.md +0 -0
  90. {dirsql-0.4.12 → dirsql-0.4.14}/packages/python/conftest.py +0 -0
  91. {dirsql-0.4.12 → dirsql-0.4.14}/packages/python/docs/.claude/CLAUDE.md +0 -0
  92. {dirsql-0.4.12 → dirsql-0.4.14}/packages/python/docs/.vitepress/config.ts +0 -0
  93. {dirsql-0.4.12 → dirsql-0.4.14}/packages/python/docs/.vitepress/theme/index.ts +0 -0
  94. {dirsql-0.4.12 → dirsql-0.4.14}/packages/python/docs/.vitepress/theme/lang.ts +0 -0
  95. {dirsql-0.4.12 → dirsql-0.4.14}/packages/python/docs/AGENTS.md +0 -0
  96. {dirsql-0.4.12 → dirsql-0.4.14}/packages/python/docs/explanation.md +0 -0
  97. {dirsql-0.4.12 → dirsql-0.4.14}/packages/python/docs/getting-started.md +0 -0
  98. {dirsql-0.4.12 → dirsql-0.4.14}/packages/python/docs/howto/columns-from-paths.md +0 -0
  99. {dirsql-0.4.12 → dirsql-0.4.14}/packages/python/docs/howto/define-tables.md +0 -0
  100. {dirsql-0.4.12 → dirsql-0.4.14}/packages/python/docs/howto/embed.md +0 -0
  101. {dirsql-0.4.12 → dirsql-0.4.14}/packages/python/docs/howto/extract-from-contents.md +0 -0
  102. {dirsql-0.4.12 → dirsql-0.4.14}/packages/python/docs/howto/load-extension.md +0 -0
  103. {dirsql-0.4.12 → dirsql-0.4.14}/packages/python/docs/howto/parse-files-into-columns.md +0 -0
  104. {dirsql-0.4.12 → dirsql-0.4.14}/packages/python/docs/howto/persist.md +0 -0
  105. {dirsql-0.4.12 → dirsql-0.4.14}/packages/python/docs/howto/query-without-config.md +0 -0
  106. {dirsql-0.4.12 → dirsql-0.4.14}/packages/python/docs/howto/react-to-changes.md +0 -0
  107. {dirsql-0.4.12 → dirsql-0.4.14}/packages/python/docs/howto/search-by-meaning.md +0 -0
  108. {dirsql-0.4.12 → dirsql-0.4.14}/packages/python/docs/howto/skip-files.md +0 -0
  109. {dirsql-0.4.12 → dirsql-0.4.14}/packages/python/docs/howto/write-a-plugin.md +0 -0
  110. {dirsql-0.4.12 → dirsql-0.4.14}/packages/python/docs/index.md +0 -0
  111. {dirsql-0.4.12 → dirsql-0.4.14}/packages/python/docs/migrations.md +0 -0
  112. {dirsql-0.4.12 → dirsql-0.4.14}/packages/python/docs/package.json +0 -0
  113. {dirsql-0.4.12 → dirsql-0.4.14}/packages/python/docs/plugins.md +0 -0
  114. {dirsql-0.4.12 → dirsql-0.4.14}/packages/python/docs/pnpm-lock.yaml +0 -0
  115. {dirsql-0.4.12 → dirsql-0.4.14}/packages/python/docs/pnpm-workspace.yaml +0 -0
  116. {dirsql-0.4.12 → dirsql-0.4.14}/packages/python/docs/reference/cli.md +0 -0
  117. {dirsql-0.4.12 → dirsql-0.4.14}/packages/python/docs/reference/columns.md +0 -0
  118. {dirsql-0.4.12 → dirsql-0.4.14}/packages/python/docs/reference/config.md +0 -0
  119. {dirsql-0.4.12 → dirsql-0.4.14}/packages/python/docs/reference/hooks.md +0 -0
  120. {dirsql-0.4.12 → dirsql-0.4.14}/packages/python/docs/reference/http-api.md +0 -0
  121. {dirsql-0.4.12 → dirsql-0.4.14}/packages/python/docs/reference/path-tables.md +0 -0
  122. {dirsql-0.4.12 → dirsql-0.4.14}/packages/python/docs/reference/sdk.md +0 -0
  123. {dirsql-0.4.12 → dirsql-0.4.14}/packages/python/migrations.d/2026-07-13-drop-cwd-config-auto-detect.md +0 -0
  124. {dirsql-0.4.12 → dirsql-0.4.14}/packages/python/migrations.d/2026-07-13-rename-extract-to-on-file.md +0 -0
  125. {dirsql-0.4.12 → dirsql-0.4.14}/packages/python/migrations.d/2026-07-13-sdk-default-baked-in-config.md +0 -0
  126. {dirsql-0.4.12 → dirsql-0.4.14}/packages/python/migrations.d/2026-07-20-drop-implicit-files-table.md +0 -0
  127. {dirsql-0.4.12 → dirsql-0.4.14}/packages/python/migrations.d/2026-07-21-remove-glob-captures.md +0 -0
  128. {dirsql-0.4.12 → dirsql-0.4.14}/packages/python/migrations.d/2026-07-24-hookless-table-config-error.md +0 -0
  129. {dirsql-0.4.12 → dirsql-0.4.14}/packages/python/migrations.d/2026-07-24-remove-stat-fact-injection.md +0 -0
  130. {dirsql-0.4.12 → dirsql-0.4.14}/packages/python/migrations.d/2026-07-29-restore-python-310.md +0 -0
  131. {dirsql-0.4.12 → dirsql-0.4.14}/packages/python/migrations.d/README.md +0 -0
  132. {dirsql-0.4.12 → dirsql-0.4.14}/packages/python/src/lib.rs +0 -0
  133. {dirsql-0.4.12 → dirsql-0.4.14}/packages/python/tests/__init__.py +0 -0
  134. {dirsql-0.4.12 → dirsql-0.4.14}/packages/python/tests/conftest.py +0 -0
  135. {dirsql-0.4.12 → dirsql-0.4.14}/packages/python/tests/e2e/__init__.py +0 -0
  136. {dirsql-0.4.12 → dirsql-0.4.14}/packages/python/tests/e2e/fixtures/dirsql_plugin_fixture/__init__.py +0 -0
  137. {dirsql-0.4.12 → dirsql-0.4.14}/packages/python/tests/e2e/fixtures/dirsql_plugin_fixture/dirsql.toml +0 -0
  138. {dirsql-0.4.12 → dirsql-0.4.14}/packages/python/tests/integration/__init__.py +0 -0
  139. {dirsql-0.4.12 → dirsql-0.4.14}/packages/python/tests/integration/binding/__init__.py +0 -0
  140. {dirsql-0.4.12 → dirsql-0.4.14}/packages/python/tests/integration/hermetic/__init__.py +0 -0
  141. {dirsql-0.4.12 → dirsql-0.4.14}/packages/rust/CHANGELOG.md +0 -0
  142. {dirsql-0.4.12 → dirsql-0.4.14}/packages/rust/MIGRATIONS.md +0 -0
  143. {dirsql-0.4.12 → dirsql-0.4.14}/packages/rust/README.md +0 -0
  144. {dirsql-0.4.12 → dirsql-0.4.14}/packages/rust/benches/matcher_bench.rs +0 -0
  145. {dirsql-0.4.12 → dirsql-0.4.14}/packages/rust/benches/scanner_bench.rs +0 -0
  146. {dirsql-0.4.12 → dirsql-0.4.14}/packages/rust/changelog.d/2026-07-13-batch-ingest-transaction.md +0 -0
  147. {dirsql-0.4.12 → dirsql-0.4.14}/packages/rust/changelog.d/2026-07-13-chained-pre-post-query-hooks.md +0 -0
  148. {dirsql-0.4.12 → dirsql-0.4.14}/packages/rust/changelog.d/2026-07-13-drop-cwd-config-auto-detect.md +0 -0
  149. {dirsql-0.4.12 → dirsql-0.4.14}/packages/rust/changelog.d/2026-07-13-fan-out-file-table-matching.md +0 -0
  150. {dirsql-0.4.12 → dirsql-0.4.14}/packages/rust/changelog.d/2026-07-13-persist-wal.md +0 -0
  151. {dirsql-0.4.12 → dirsql-0.4.14}/packages/rust/changelog.d/2026-07-13-rename-extract-to-on-file.md +0 -0
  152. {dirsql-0.4.12 → dirsql-0.4.14}/packages/rust/changelog.d/2026-07-13-repeatable-builder-config.md +0 -0
  153. {dirsql-0.4.12 → dirsql-0.4.14}/packages/rust/changelog.d/2026-07-13-repeatable-cli-config.md +0 -0
  154. {dirsql-0.4.12 → dirsql-0.4.14}/packages/rust/changelog.d/2026-07-13-sdk-default-baked-in-config.md +0 -0
  155. {dirsql-0.4.12 → dirsql-0.4.14}/packages/rust/changelog.d/2026-07-13-subcommand-local-config-flags.md +0 -0
  156. {dirsql-0.4.12 → dirsql-0.4.14}/packages/rust/changelog.d/2026-07-19-path-table-query-fallback.md +0 -0
  157. {dirsql-0.4.12 → dirsql-0.4.14}/packages/rust/changelog.d/2026-07-19-path-table-vtab.md +0 -0
  158. {dirsql-0.4.12 → dirsql-0.4.14}/packages/rust/changelog.d/2026-07-20-drop-implicit-files-table.md +0 -0
  159. {dirsql-0.4.12 → dirsql-0.4.14}/packages/rust/changelog.d/2026-07-20-path-table-glob-semantics.md +0 -0
  160. {dirsql-0.4.12 → dirsql-0.4.14}/packages/rust/changelog.d/2026-07-20-schema-inference.md +0 -0
  161. {dirsql-0.4.12 → dirsql-0.4.14}/packages/rust/changelog.d/2026-07-21-on-file-flag.md +0 -0
  162. {dirsql-0.4.12 → dirsql-0.4.14}/packages/rust/changelog.d/2026-07-21-remove-glob-captures.md +0 -0
  163. {dirsql-0.4.12 → dirsql-0.4.14}/packages/rust/changelog.d/2026-07-23-init-escalation-example.md +0 -0
  164. {dirsql-0.4.12 → dirsql-0.4.14}/packages/rust/changelog.d/2026-07-23-query-default-cli.md +0 -0
  165. {dirsql-0.4.12 → dirsql-0.4.14}/packages/rust/changelog.d/2026-07-24-hookless-table-config-error.md +0 -0
  166. {dirsql-0.4.12 → dirsql-0.4.14}/packages/rust/changelog.d/2026-07-24-remove-stat-fact-injection.md +0 -0
  167. {dirsql-0.4.12 → dirsql-0.4.14}/packages/rust/changelog.d/2026-07-29-on-file-failures-accumulate.md +0 -0
  168. {dirsql-0.4.12 → dirsql-0.4.14}/packages/rust/changelog.d/2026-08-02-drop-regex.md +0 -0
  169. {dirsql-0.4.12 → dirsql-0.4.14}/packages/rust/changelog.d/2026-08-02-per-file-scan-failures.md +0 -0
  170. {dirsql-0.4.12 → dirsql-0.4.14}/packages/rust/changelog.d/2026-08-02-release-profile.md +0 -0
  171. {dirsql-0.4.12 → dirsql-0.4.14}/packages/rust/changelog.d/2026-08-03-gitignore-by-default.md +0 -0
  172. {dirsql-0.4.12 → dirsql-0.4.14}/packages/rust/changelog.d/2026-08-03-nested-default-ignores.md +0 -0
  173. {dirsql-0.4.12 → dirsql-0.4.14}/packages/rust/changelog.d/README.md +0 -0
  174. {dirsql-0.4.12 → dirsql-0.4.14}/packages/rust/docs/explanation.md +0 -0
  175. {dirsql-0.4.12 → dirsql-0.4.14}/packages/rust/docs/getting-started.md +0 -0
  176. {dirsql-0.4.12 → dirsql-0.4.14}/packages/rust/docs/howto/columns-from-paths.md +0 -0
  177. {dirsql-0.4.12 → dirsql-0.4.14}/packages/rust/docs/howto/define-tables.md +0 -0
  178. {dirsql-0.4.12 → dirsql-0.4.14}/packages/rust/docs/howto/embed.md +0 -0
  179. {dirsql-0.4.12 → dirsql-0.4.14}/packages/rust/docs/howto/extract-from-contents.md +0 -0
  180. {dirsql-0.4.12 → dirsql-0.4.14}/packages/rust/docs/howto/load-extension.md +0 -0
  181. {dirsql-0.4.12 → dirsql-0.4.14}/packages/rust/docs/howto/parse-files-into-columns.md +0 -0
  182. {dirsql-0.4.12 → dirsql-0.4.14}/packages/rust/docs/howto/persist.md +0 -0
  183. {dirsql-0.4.12 → dirsql-0.4.14}/packages/rust/docs/howto/query-without-config.md +0 -0
  184. {dirsql-0.4.12 → dirsql-0.4.14}/packages/rust/docs/howto/react-to-changes.md +0 -0
  185. {dirsql-0.4.12 → dirsql-0.4.14}/packages/rust/docs/howto/search-by-meaning.md +0 -0
  186. {dirsql-0.4.12 → dirsql-0.4.14}/packages/rust/docs/howto/skip-files.md +0 -0
  187. {dirsql-0.4.12 → dirsql-0.4.14}/packages/rust/docs/howto/write-a-plugin.md +0 -0
  188. {dirsql-0.4.12 → dirsql-0.4.14}/packages/rust/docs/index.md +0 -0
  189. {dirsql-0.4.12 → dirsql-0.4.14}/packages/rust/docs/migrations.md +0 -0
  190. {dirsql-0.4.12 → dirsql-0.4.14}/packages/rust/docs/plugins.md +0 -0
  191. {dirsql-0.4.12 → dirsql-0.4.14}/packages/rust/docs/reference/cli.md +0 -0
  192. {dirsql-0.4.12 → dirsql-0.4.14}/packages/rust/docs/reference/columns.md +0 -0
  193. {dirsql-0.4.12 → dirsql-0.4.14}/packages/rust/docs/reference/config.md +0 -0
  194. {dirsql-0.4.12 → dirsql-0.4.14}/packages/rust/docs/reference/hooks.md +0 -0
  195. {dirsql-0.4.12 → dirsql-0.4.14}/packages/rust/docs/reference/http-api.md +0 -0
  196. {dirsql-0.4.12 → dirsql-0.4.14}/packages/rust/docs/reference/path-tables.md +0 -0
  197. {dirsql-0.4.12 → dirsql-0.4.14}/packages/rust/docs/reference/sdk.md +0 -0
  198. {dirsql-0.4.12 → dirsql-0.4.14}/packages/rust/migrations.d/2026-07-13-drop-cwd-config-auto-detect.md +0 -0
  199. {dirsql-0.4.12 → dirsql-0.4.14}/packages/rust/migrations.d/2026-07-13-fan-out-file-table-matching.md +0 -0
  200. {dirsql-0.4.12 → dirsql-0.4.14}/packages/rust/migrations.d/2026-07-13-persist-wal.md +0 -0
  201. {dirsql-0.4.12 → dirsql-0.4.14}/packages/rust/migrations.d/2026-07-13-rename-extract-to-on-file.md +0 -0
  202. {dirsql-0.4.12 → dirsql-0.4.14}/packages/rust/migrations.d/2026-07-13-sdk-default-baked-in-config.md +0 -0
  203. {dirsql-0.4.12 → dirsql-0.4.14}/packages/rust/migrations.d/2026-07-13-subcommand-local-config-flags.md +0 -0
  204. {dirsql-0.4.12 → dirsql-0.4.14}/packages/rust/migrations.d/2026-07-20-drop-implicit-files-table.md +0 -0
  205. {dirsql-0.4.12 → dirsql-0.4.14}/packages/rust/migrations.d/2026-07-20-path-table-glob-semantics.md +0 -0
  206. {dirsql-0.4.12 → dirsql-0.4.14}/packages/rust/migrations.d/2026-07-21-remove-glob-captures.md +0 -0
  207. {dirsql-0.4.12 → dirsql-0.4.14}/packages/rust/migrations.d/2026-07-23-init-escalation-example.md +0 -0
  208. {dirsql-0.4.12 → dirsql-0.4.14}/packages/rust/migrations.d/2026-07-23-query-default-cli.md +0 -0
  209. {dirsql-0.4.12 → dirsql-0.4.14}/packages/rust/migrations.d/2026-07-24-hookless-table-config-error.md +0 -0
  210. {dirsql-0.4.12 → dirsql-0.4.14}/packages/rust/migrations.d/2026-07-24-remove-stat-fact-injection.md +0 -0
  211. {dirsql-0.4.12 → dirsql-0.4.14}/packages/rust/migrations.d/2026-08-02-per-file-scan-failures.md +0 -0
  212. {dirsql-0.4.12 → dirsql-0.4.14}/packages/rust/migrations.d/2026-08-03-gitignore-by-default.md +0 -0
  213. {dirsql-0.4.12 → dirsql-0.4.14}/packages/rust/migrations.d/2026-08-03-nested-default-ignores.md +0 -0
  214. {dirsql-0.4.12 → dirsql-0.4.14}/packages/rust/migrations.d/README.md +0 -0
  215. {dirsql-0.4.12 → dirsql-0.4.14}/packages/rust/src/cli/execute.rs +0 -0
  216. {dirsql-0.4.12 → dirsql-0.4.14}/packages/rust/src/cli/init.rs +0 -0
  217. {dirsql-0.4.12 → dirsql-0.4.14}/packages/rust/src/cli/mod.rs +0 -0
  218. {dirsql-0.4.12 → dirsql-0.4.14}/packages/rust/src/cli/router.rs +0 -0
  219. {dirsql-0.4.12 → dirsql-0.4.14}/packages/rust/src/cli/serialize.rs +0 -0
  220. {dirsql-0.4.12 → dirsql-0.4.14}/packages/rust/src/cli/server.rs +0 -0
  221. {dirsql-0.4.12 → dirsql-0.4.14}/packages/rust/src/command.rs +0 -0
  222. {dirsql-0.4.12 → dirsql-0.4.14}/packages/rust/src/default_config.toml +0 -0
  223. {dirsql-0.4.12 → dirsql-0.4.14}/packages/rust/src/differ.rs +0 -0
  224. {dirsql-0.4.12 → dirsql-0.4.14}/packages/rust/src/infer.rs +0 -0
  225. {dirsql-0.4.12 → dirsql-0.4.14}/packages/rust/src/matcher.rs +0 -0
  226. {dirsql-0.4.12 → dirsql-0.4.14}/packages/rust/src/parsed_vtab.rs +0 -0
  227. {dirsql-0.4.12 → dirsql-0.4.14}/packages/rust/src/path_table.rs +0 -0
  228. {dirsql-0.4.12 → dirsql-0.4.14}/packages/rust/src/scanner.rs +0 -0
  229. {dirsql-0.4.12 → dirsql-0.4.14}/packages/rust/src/vtab.rs +0 -0
  230. {dirsql-0.4.12 → dirsql-0.4.14}/packages/rust/src/watcher.rs +0 -0
  231. {dirsql-0.4.12 → dirsql-0.4.14}/pyproject.toml +0 -0
@@ -500,7 +500,7 @@ dependencies = [
500
500
 
501
501
  [[package]]
502
502
  name = "dirsql-py-ext"
503
- version = "0.4.12"
503
+ version = "0.4.14"
504
504
  dependencies = [
505
505
  "dirsql",
506
506
  "pyo3",
@@ -33,18 +33,3 @@ futures-channel = "0.3"
33
33
  strip = "symbols"
34
34
  lto = "fat"
35
35
  codegen-units = 1
36
-
37
- [workspace.lints.rust]
38
- unsafe_code = "forbid"
39
- rust_2018_idioms = { level = "warn", priority = -1 }
40
-
41
- [workspace.lints.clippy]
42
- # Broad groups kept at `warn` so CI can catch regressions without
43
- # becoming hostile to contributors; upgrade to `deny` in CI if desired.
44
- all = { level = "warn", priority = -1 }
45
- pedantic = { level = "warn", priority = -1 }
46
- # Opinionated opt-outs from pedantic: too noisy vs. useful here.
47
- module_name_repetitions = "allow"
48
- missing_errors_doc = "allow"
49
- missing_panics_doc = "allow"
50
- must_use_candidate = "allow"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dirsql
3
- Version: 0.4.12
3
+ Version: 0.4.14
4
4
  Requires-Dist: tomli>=2 ; python_full_version < '3.11'
5
5
  Summary: Ephemeral SQL index over a local directory
6
6
  Keywords: sql,filesystem,directory,sqlite,index
@@ -4,7 +4,7 @@ name = "dirsql-py-ext"
4
4
  # pypi/maturin handler can rewrite it via `write-version` before
5
5
  # `maturin build`. `pyproject.toml` declares `dynamic = ["version"]`
6
6
  # and maturin reads this field. Mirrors `packages/rust/Cargo.toml`.
7
- version = "0.4.12"
7
+ version = "0.4.14"
8
8
  # abi3 note: the `abi3-py310` pyo3 feature (below) builds ONE stable-ABI
9
9
  # `cp310-abi3` wheel per platform that loads on every CPython >= 3.10
10
10
  # (matching `pyproject.toml`'s `requires-python = ">=3.10"`), instead of
@@ -25,17 +25,22 @@ crate-type = ["cdylib", "rlib"]
25
25
  dirsql.workspace = true
26
26
  pyo3 = { version = "0.28", features = ["extension-module", "generate-import-lib", "abi3-py310"], optional = true }
27
27
 
28
- # Opted in per-crate rather than via `[lints] workspace = true`: the workspace
29
- # block also carries `clippy::pedantic`, which currently reports 475 warnings
30
- # across the three crates and would fail `clippy -D warnings` immediately
31
- # (#763).
32
- #
33
- # `deny`, not the workspace's aspirational `forbid`: pyo3's proc macros emit `#[allow(unsafe_code)]`, which `forbid`
34
- # rejects outright (E0453).
35
- # `deny` still blocks new hand-written `unsafe` unless a site opts in
36
- # explicitly, which is the guarantee we want.
37
28
  [lints.rust]
29
+ # `deny`, not `forbid`: pyo3's proc macros emit `#[allow(unsafe_code)]`, which
30
+ # `forbid` rejects outright (E0453). `deny` still blocks new hand-written
31
+ # `unsafe` unless a site opts in explicitly, which is the guarantee we want.
38
32
  unsafe_code = "deny"
33
+ rust_2018_idioms = { level = "warn", priority = -1 }
34
+
35
+ # The narrow slice of clippy::pedantic worth enforcing (#763); mirrors the
36
+ # core crate's block. No sites in this crate today -- the value is catching
37
+ # future lossy casts at the binding boundary.
38
+ [lints.clippy]
39
+ cast_lossless = "warn"
40
+ cast_possible_truncation = "warn"
41
+ cast_possible_wrap = "warn"
42
+ cast_precision_loss = "warn"
43
+ cast_sign_loss = "warn"
39
44
 
40
45
  [features]
41
46
  default = []
@@ -0,0 +1 @@
1
+ **Changed** — the pyo3 binding crate now enforces the clippy cast lints (`cast_lossless`, `cast_possible_truncation`, `cast_possible_wrap`, `cast_precision_loss`, `cast_sign_loss`) via `[lints.clippy]`, so a future lossy numeric cast at the binding boundary fails the build. No code changes were needed; no observable behavior change.
@@ -0,0 +1,7 @@
1
+ {
2
+ "command": "just test-e2e",
3
+ "ran_at": 1785867315,
4
+ "exit_code": 0,
5
+ "commit": "48dbead65b0060f7ee5cad2e0db969467febbaf3",
6
+ "branch": "chore/766-narrow-pedantic"
7
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "command": "uv run python -m pytest tests/e2e/ -x -q",
3
+ "ran_at": 1785877241,
4
+ "exit_code": 0,
5
+ "commit": "83f767a7d90cefe1aa6ab136e36a739cfb5dc425",
6
+ "branch": "claude/772-extension-without-config"
7
+ }
@@ -74,11 +74,6 @@ toml = "0.8"
74
74
  wait-timeout = "0.2"
75
75
  walkdir = "2"
76
76
 
77
- # Opted in per-crate rather than via `[lints] workspace = true`: the workspace
78
- # block also carries `clippy::pedantic`, which currently reports 475 warnings
79
- # across the three crates and would fail `clippy -D warnings` immediately
80
- # (#763). This is the lint whose absence actually mattered -- it forbids
81
- # nothing until a crate opts in.
82
77
  [lints.rust]
83
78
  # `deny`, not `forbid`: rusqlite's API imposes five unavoidable `unsafe`
84
79
  # sites (the `load_extension` guard and four `unsafe impl VTab`/`VTabCursor`).
@@ -87,6 +82,19 @@ walkdir = "2"
87
82
  # with `#[expect(unsafe_code, reason = ...)]`, which is the guarantee we
88
83
  # actually want (#763).
89
84
  unsafe_code = "deny"
85
+ rust_2018_idioms = { level = "warn", priority = -1 }
86
+
87
+ # The narrow slice of clippy::pedantic worth enforcing (#763): dirsql marshals
88
+ # sizes, timestamps, and row indexes between usize/u64 and SQLite's i64, where
89
+ # a silent lossy cast corrupts data. The rest of pedantic is style noise here
90
+ # and stays off. Intentional lossy/bit-preserving casts opt out per-site with
91
+ # `#[expect(clippy::cast_..., reason = ...)]`.
92
+ [lints.clippy]
93
+ cast_lossless = "warn"
94
+ cast_possible_truncation = "warn"
95
+ cast_possible_wrap = "warn"
96
+ cast_precision_loss = "warn"
97
+ cast_sign_loss = "warn"
90
98
 
91
99
  [[bin]]
92
100
  name = "dirsql"
@@ -1,3 +1,9 @@
1
+ #![expect(
2
+ clippy::cast_possible_wrap,
3
+ clippy::cast_precision_loss,
4
+ reason = "bench fixture indices are small; the casts are exact"
5
+ )]
6
+
1
7
  use criterion::{BenchmarkId, Criterion, criterion_group, criterion_main};
2
8
  use dirsql::db::{Db, Value};
3
9
  use std::collections::HashMap;
@@ -1,3 +1,9 @@
1
+ #![expect(
2
+ clippy::cast_possible_wrap,
3
+ clippy::cast_precision_loss,
4
+ reason = "bench fixture indices are small; the casts are exact"
5
+ )]
6
+
1
7
  use criterion::{BenchmarkId, Criterion, criterion_group, criterion_main};
2
8
  use dirsql::db::Value;
3
9
  use dirsql::differ::diff;
@@ -0,0 +1 @@
1
+ **Changed** — lossy numeric casts are now compile errors: the crate enforces the clippy cast lints (`cast_lossless`, `cast_possible_truncation`, `cast_possible_wrap`, `cast_precision_loss`, `cast_sign_loss`) via `[lints.clippy]`. Existing size/timestamp/row-index conversions were rewritten as checked `try_from` conversions (no observable behavior change); the intentional inode/device bit-pattern casts are documented with `#[expect]`. The never-enforced `clippy::pedantic` block was removed from `[workspace.lints]`.
@@ -0,0 +1 @@
1
+ **Fixed** — `--extension` is now honored when no `-c`/`--config` is given. The configless path (no config, no `--include-default`) short-circuited before extensions were applied, so `dirsql query "SELECT vec_version()" --extension <path>::<entry>` reported `no such function: vec_version` as though the flag had not been passed — and, worse, `--extension /nonexistent.so` exited **0**, silently succeeding on a load that never happened. Both now behave: the extension loads and a bad path fails with `failed to build the index: failed to load extension '<path>'` and exit 1, matching the with-config path. This mattered because loading an extension to query a path-table (`SELECT * FROM './'`) needs no config at all, and because the npm/pip launchers pass resolved `--extension` flags — a launcher-resolved extension was dropped whenever the user had no config. #772.
@@ -581,6 +581,15 @@ fn load_configless_state(cfg: &ConfigArgs, path_table_parser: Option<String>) ->
581
581
  };
582
582
 
583
583
  let mut builder = cfg.apply_index_flags(DirSQL::builder().root(root));
584
+ // `--extension` applies here too (#772). Without this the flag was
585
+ // silently ignored whenever no `-c` was given: `dirsql query "SELECT
586
+ // vec_version()" --extension <path>` reported `no such function` rather
587
+ // than loading anything, and `--extension /nonexistent.so` exited 0. A
588
+ // path-table query over an extension-provided function is a legitimate
589
+ // configless use, and a bad path must still fail loudly.
590
+ if !cfg.extension.is_empty() {
591
+ builder = builder.extensions(parse_extension_specs(&cfg.extension));
592
+ }
584
593
  if let Some(command) = path_table_parser {
585
594
  builder = builder.path_table_parser(command);
586
595
  }
@@ -932,6 +941,31 @@ mod tests {
932
941
  );
933
942
  }
934
943
 
944
+ #[test]
945
+ fn configless_state_still_carries_extension_specs() {
946
+ // `--extension` with no `-c` took the configless path, which never
947
+ // applied the specs: the flag was silently ignored and a bad path
948
+ // exited 0 (#772). Parsing is the seam a unit test can reach; the
949
+ // load itself needs a real SQLite handle and is covered at the
950
+ // integration tier.
951
+ let cfg = ConfigArgs {
952
+ config: Vec::new(),
953
+ include_default: false,
954
+ extension: vec!["/ext/vec0.so::sqlite3_vec_init".to_string()],
955
+ persist: None,
956
+ no_ignore: false,
957
+ };
958
+ assert!(cfg.config.is_empty(), "this is the configless shape");
959
+ assert!(
960
+ !cfg.extension.is_empty(),
961
+ "and it still carries an extension"
962
+ );
963
+ let specs = parse_extension_specs(&cfg.extension);
964
+ assert_eq!(specs.len(), 1);
965
+ assert_eq!(specs[0].path, PathBuf::from("/ext/vec0.so"));
966
+ assert_eq!(specs[0].entrypoint.as_deref(), Some("sqlite3_vec_init"));
967
+ }
968
+
935
969
  #[test]
936
970
  fn parse_extension_specs_handles_bare_path_and_entrypoint() {
937
971
  let specs = vec![
@@ -358,7 +358,9 @@ pub fn load_config_str(content: &str) -> Result<Config> {
358
358
  fn parse_timeout_secs(field: &'static str, raw: Option<i64>) -> Result<Option<Duration>> {
359
359
  match raw {
360
360
  Some(secs) if secs <= 0 => Err(ConfigError::InvalidTimeout { field, value: secs }),
361
- Some(secs) => Ok(Some(Duration::from_secs(secs as u64))),
361
+ Some(secs) => Ok(Some(Duration::from_secs(
362
+ u64::try_from(secs).expect("non-positive values rejected above"),
363
+ ))),
362
364
  None => Ok(None),
363
365
  }
364
366
  }
@@ -465,7 +465,12 @@ impl Db {
465
465
  conn.execute(
466
466
  "INSERT INTO _dirsql_internal_rows (table_name, file_path, row_index, rowid_ref) \
467
467
  VALUES (?1, ?2, ?3, ?4)",
468
- rusqlite::params![table, file_path, row_index as i64, rowid],
468
+ rusqlite::params![
469
+ table,
470
+ file_path,
471
+ i64::try_from(row_index).expect("row index fits in i64"),
472
+ rowid
473
+ ],
469
474
  )?;
470
475
  Ok(())
471
476
  }
@@ -1054,7 +1059,7 @@ mod tests {
1054
1059
  for (i, action) in ["created", "resolved", "reopened"].iter().enumerate() {
1055
1060
  let row = HashMap::from([
1056
1061
  ("action".into(), Value::Text(action.to_string())),
1057
- ("ts".into(), Value::Integer(i as i64)),
1062
+ ("ts".into(), Value::Integer(i64::try_from(i).unwrap())),
1058
1063
  ]);
1059
1064
  db.insert_row("events", &row, "thread.jsonl", i).unwrap();
1060
1065
  }
@@ -1692,10 +1692,10 @@ pub(crate) fn compute_stat_virtuals(rel_path: &str, abs_path: &Path) -> Row {
1692
1692
  let to_secs = |t: std::io::Result<std::time::SystemTime>| {
1693
1693
  t.ok()
1694
1694
  .and_then(|st| st.duration_since(std::time::UNIX_EPOCH).ok())
1695
- .map(|d| d.as_secs() as i64)
1695
+ .and_then(|d| i64::try_from(d.as_secs()).ok())
1696
1696
  };
1697
1697
  (
1698
- Some(metadata.len() as i64),
1698
+ i64::try_from(metadata.len()).ok(),
1699
1699
  to_secs(metadata.modified()),
1700
1700
  to_secs(metadata.created()),
1701
1701
  )
@@ -60,7 +60,7 @@ impl FileStat {
60
60
  let ctime_ns = system_time_to_ns(meta.created().ok());
61
61
  let (inode, dev) = inode_dev(meta);
62
62
  Self {
63
- size: meta.len() as i64,
63
+ size: i64::try_from(meta.len()).expect("file size fits in i64"),
64
64
  mtime_ns,
65
65
  ctime_ns,
66
66
  inode,
@@ -70,6 +70,10 @@ impl FileStat {
70
70
  }
71
71
 
72
72
  #[cfg(unix)]
73
+ #[expect(
74
+ clippy::cast_possible_wrap,
75
+ reason = "inode/device numbers are opaque bit patterns; wrapping reinterpretation is intended"
76
+ )]
73
77
  fn inode_dev(meta: &fs::Metadata) -> (i64, i64) {
74
78
  use std::os::unix::fs::MetadataExt;
75
79
  (meta.ino() as i64, meta.dev() as i64)
@@ -1,7 +0,0 @@
1
- {
2
- "command": "uv run python -m pytest tests/e2e/ -x -q",
3
- "ran_at": 1785791343,
4
- "exit_code": 0,
5
- "commit": "b1b8d2b6b2a200ba4d4aa844221dd7b8e85da92c",
6
- "branch": "claude/763-forbid-unsafe"
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "command": "just test-e2e",
3
- "ran_at": 1785777931,
4
- "exit_code": 0,
5
- "commit": "ef9db367f3a4979a0006e7bd40b0808f433b26ee",
6
- "branch": "feat/745-python-no-ignore"
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "command": "just test-e2e",
3
- "ran_at": 1785779409,
4
- "exit_code": 0,
5
- "commit": "610d8ff41538de6e3d5f19b4abea3ec1b351986a",
6
- "branch": "fix/754-discovery-ext-resolution"
7
- }
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes