dirsql 0.4.11__tar.gz → 0.4.13__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 (228) hide show
  1. {dirsql-0.4.11 → dirsql-0.4.13}/Cargo.lock +1 -1
  2. {dirsql-0.4.11 → dirsql-0.4.13}/Cargo.toml +0 -15
  3. {dirsql-0.4.11 → dirsql-0.4.13}/PKG-INFO +1 -1
  4. {dirsql-0.4.11 → dirsql-0.4.13}/packages/python/Cargo.toml +18 -1
  5. dirsql-0.4.13/packages/python/changelog.d/2026-08-04-cast-lints.md +1 -0
  6. dirsql-0.4.13/packages/python/e2e-attestations/chore-766-narrow-pedantic.json +7 -0
  7. {dirsql-0.4.11 → dirsql-0.4.13}/packages/rust/Cargo.toml +22 -0
  8. {dirsql-0.4.11 → dirsql-0.4.13}/packages/rust/benches/db_bench.rs +6 -0
  9. {dirsql-0.4.11 → dirsql-0.4.13}/packages/rust/benches/differ_bench.rs +6 -0
  10. dirsql-0.4.13/packages/rust/changelog.d/2026-08-04-cast-lints.md +1 -0
  11. {dirsql-0.4.11 → dirsql-0.4.13}/packages/rust/src/config.rs +3 -1
  12. {dirsql-0.4.11 → dirsql-0.4.13}/packages/rust/src/db.rs +11 -2
  13. {dirsql-0.4.11 → dirsql-0.4.13}/packages/rust/src/lib.rs +2 -2
  14. {dirsql-0.4.11 → dirsql-0.4.13}/packages/rust/src/parsed_vtab.rs +5 -0
  15. {dirsql-0.4.11 → dirsql-0.4.13}/packages/rust/src/persist.rs +5 -1
  16. {dirsql-0.4.11 → dirsql-0.4.13}/packages/rust/src/vtab.rs +5 -0
  17. dirsql-0.4.11/packages/python/e2e-attestations/feat-745-python-no-ignore.json +0 -7
  18. dirsql-0.4.11/packages/python/e2e-attestations/fix-754-discovery-ext-resolution.json +0 -7
  19. {dirsql-0.4.11 → dirsql-0.4.13}/README.md +0 -0
  20. {dirsql-0.4.11 → dirsql-0.4.13}/dirsql/__init__.py +0 -0
  21. {dirsql-0.4.11 → dirsql-0.4.13}/dirsql/_async.py +0 -0
  22. {dirsql-0.4.11 → dirsql-0.4.13}/dirsql/_dirsql.pyi +0 -0
  23. {dirsql-0.4.11 → dirsql-0.4.13}/dirsql/cli/__init__.py +0 -0
  24. {dirsql-0.4.11 → dirsql-0.4.13}/dirsql/cli/binary_path.py +0 -0
  25. {dirsql-0.4.11 → dirsql-0.4.13}/dirsql/cli/discover_plugins/__init__.py +0 -0
  26. {dirsql-0.4.11 → dirsql-0.4.13}/dirsql/cli/discover_plugins/discovered_fragments.py +0 -0
  27. {dirsql-0.4.11 → dirsql-0.4.13}/dirsql/cli/discover_plugins/discovery_disabled.py +0 -0
  28. {dirsql-0.4.11 → dirsql-0.4.13}/dirsql/cli/discover_plugins/fragment_path.py +0 -0
  29. {dirsql-0.4.11 → dirsql-0.4.13}/dirsql/cli/discover_plugins/user_passed_config.py +0 -0
  30. {dirsql-0.4.11 → dirsql-0.4.13}/dirsql/cli/discover_plugins/with_discovered_plugins.py +0 -0
  31. {dirsql-0.4.11 → dirsql-0.4.13}/dirsql/cli/is_windows.py +0 -0
  32. {dirsql-0.4.11 → dirsql-0.4.13}/dirsql/cli/main.py +0 -0
  33. {dirsql-0.4.11 → dirsql-0.4.13}/dirsql/cli/resolve_config_extensions.py +0 -0
  34. {dirsql-0.4.11 → dirsql-0.4.13}/dirsql/py.typed +0 -0
  35. {dirsql-0.4.11 → dirsql-0.4.13}/dirsql/resolve_config_extensions.py +0 -0
  36. {dirsql-0.4.11 → dirsql-0.4.13}/dirsql/resolve_extension.py +0 -0
  37. {dirsql-0.4.11 → dirsql-0.4.13}/docs/.claude/CLAUDE.md +0 -0
  38. {dirsql-0.4.11 → dirsql-0.4.13}/docs/.vitepress/config.ts +0 -0
  39. {dirsql-0.4.11 → dirsql-0.4.13}/docs/.vitepress/theme/index.ts +0 -0
  40. {dirsql-0.4.11 → dirsql-0.4.13}/docs/.vitepress/theme/lang.ts +0 -0
  41. {dirsql-0.4.11 → dirsql-0.4.13}/docs/AGENTS.md +0 -0
  42. {dirsql-0.4.11 → dirsql-0.4.13}/docs/explanation.md +0 -0
  43. {dirsql-0.4.11 → dirsql-0.4.13}/docs/getting-started.md +0 -0
  44. {dirsql-0.4.11 → dirsql-0.4.13}/docs/howto/columns-from-paths.md +0 -0
  45. {dirsql-0.4.11 → dirsql-0.4.13}/docs/howto/define-tables.md +0 -0
  46. {dirsql-0.4.11 → dirsql-0.4.13}/docs/howto/embed.md +0 -0
  47. {dirsql-0.4.11 → dirsql-0.4.13}/docs/howto/extract-from-contents.md +0 -0
  48. {dirsql-0.4.11 → dirsql-0.4.13}/docs/howto/load-extension.md +0 -0
  49. {dirsql-0.4.11 → dirsql-0.4.13}/docs/howto/parse-files-into-columns.md +0 -0
  50. {dirsql-0.4.11 → dirsql-0.4.13}/docs/howto/persist.md +0 -0
  51. {dirsql-0.4.11 → dirsql-0.4.13}/docs/howto/query-without-config.md +0 -0
  52. {dirsql-0.4.11 → dirsql-0.4.13}/docs/howto/react-to-changes.md +0 -0
  53. {dirsql-0.4.11 → dirsql-0.4.13}/docs/howto/search-by-meaning.md +0 -0
  54. {dirsql-0.4.11 → dirsql-0.4.13}/docs/howto/skip-files.md +0 -0
  55. {dirsql-0.4.11 → dirsql-0.4.13}/docs/howto/write-a-plugin.md +0 -0
  56. {dirsql-0.4.11 → dirsql-0.4.13}/docs/index.md +0 -0
  57. {dirsql-0.4.11 → dirsql-0.4.13}/docs/migrations.md +0 -0
  58. {dirsql-0.4.11 → dirsql-0.4.13}/docs/package.json +0 -0
  59. {dirsql-0.4.11 → dirsql-0.4.13}/docs/plugins.md +0 -0
  60. {dirsql-0.4.11 → dirsql-0.4.13}/docs/pnpm-lock.yaml +0 -0
  61. {dirsql-0.4.11 → dirsql-0.4.13}/docs/pnpm-workspace.yaml +0 -0
  62. {dirsql-0.4.11 → dirsql-0.4.13}/docs/reference/cli.md +0 -0
  63. {dirsql-0.4.11 → dirsql-0.4.13}/docs/reference/columns.md +0 -0
  64. {dirsql-0.4.11 → dirsql-0.4.13}/docs/reference/config.md +0 -0
  65. {dirsql-0.4.11 → dirsql-0.4.13}/docs/reference/hooks.md +0 -0
  66. {dirsql-0.4.11 → dirsql-0.4.13}/docs/reference/http-api.md +0 -0
  67. {dirsql-0.4.11 → dirsql-0.4.13}/docs/reference/path-tables.md +0 -0
  68. {dirsql-0.4.11 → dirsql-0.4.13}/docs/reference/sdk.md +0 -0
  69. {dirsql-0.4.11 → dirsql-0.4.13}/packages/python/CHANGELOG.md +0 -0
  70. {dirsql-0.4.11 → dirsql-0.4.13}/packages/python/MIGRATIONS.md +0 -0
  71. {dirsql-0.4.11 → dirsql-0.4.13}/packages/python/README.md +0 -0
  72. {dirsql-0.4.11 → dirsql-0.4.13}/packages/python/changelog.d/2026-07-13-drop-cwd-config-auto-detect.md +0 -0
  73. {dirsql-0.4.11 → dirsql-0.4.13}/packages/python/changelog.d/2026-07-13-plugin-discovery.md +0 -0
  74. {dirsql-0.4.11 → dirsql-0.4.13}/packages/python/changelog.d/2026-07-13-rename-extract-to-on-file.md +0 -0
  75. {dirsql-0.4.11 → dirsql-0.4.13}/packages/python/changelog.d/2026-07-13-repeatable-config.md +0 -0
  76. {dirsql-0.4.11 → dirsql-0.4.13}/packages/python/changelog.d/2026-07-13-sdk-default-baked-in-config.md +0 -0
  77. {dirsql-0.4.11 → dirsql-0.4.13}/packages/python/changelog.d/2026-07-20-drop-implicit-files-table.md +0 -0
  78. {dirsql-0.4.11 → dirsql-0.4.13}/packages/python/changelog.d/2026-07-21-remove-glob-captures.md +0 -0
  79. {dirsql-0.4.11 → dirsql-0.4.13}/packages/python/changelog.d/2026-07-24-hookless-table-config-error.md +0 -0
  80. {dirsql-0.4.11 → dirsql-0.4.13}/packages/python/changelog.d/2026-07-24-remove-stat-fact-injection.md +0 -0
  81. {dirsql-0.4.11 → dirsql-0.4.13}/packages/python/changelog.d/2026-07-29-restore-python-310.md +0 -0
  82. {dirsql-0.4.11 → dirsql-0.4.13}/packages/python/changelog.d/2026-08-02-release-profile.md +0 -0
  83. {dirsql-0.4.11 → dirsql-0.4.13}/packages/python/changelog.d/2026-08-02-scan-failures.md +0 -0
  84. {dirsql-0.4.11 → dirsql-0.4.13}/packages/python/changelog.d/2026-08-03-discovery-ext-resolution.md +0 -0
  85. {dirsql-0.4.11 → dirsql-0.4.13}/packages/python/changelog.d/2026-08-03-manylinux-dynamic-binary.md +0 -0
  86. {dirsql-0.4.11 → dirsql-0.4.13}/packages/python/changelog.d/2026-08-03-python-no-ignore.md +0 -0
  87. {dirsql-0.4.11 → dirsql-0.4.13}/packages/python/changelog.d/README.md +0 -0
  88. {dirsql-0.4.11 → dirsql-0.4.13}/packages/python/conftest.py +0 -0
  89. {dirsql-0.4.11 → dirsql-0.4.13}/packages/python/docs/.claude/CLAUDE.md +0 -0
  90. {dirsql-0.4.11 → dirsql-0.4.13}/packages/python/docs/.vitepress/config.ts +0 -0
  91. {dirsql-0.4.11 → dirsql-0.4.13}/packages/python/docs/.vitepress/theme/index.ts +0 -0
  92. {dirsql-0.4.11 → dirsql-0.4.13}/packages/python/docs/.vitepress/theme/lang.ts +0 -0
  93. {dirsql-0.4.11 → dirsql-0.4.13}/packages/python/docs/AGENTS.md +0 -0
  94. {dirsql-0.4.11 → dirsql-0.4.13}/packages/python/docs/explanation.md +0 -0
  95. {dirsql-0.4.11 → dirsql-0.4.13}/packages/python/docs/getting-started.md +0 -0
  96. {dirsql-0.4.11 → dirsql-0.4.13}/packages/python/docs/howto/columns-from-paths.md +0 -0
  97. {dirsql-0.4.11 → dirsql-0.4.13}/packages/python/docs/howto/define-tables.md +0 -0
  98. {dirsql-0.4.11 → dirsql-0.4.13}/packages/python/docs/howto/embed.md +0 -0
  99. {dirsql-0.4.11 → dirsql-0.4.13}/packages/python/docs/howto/extract-from-contents.md +0 -0
  100. {dirsql-0.4.11 → dirsql-0.4.13}/packages/python/docs/howto/load-extension.md +0 -0
  101. {dirsql-0.4.11 → dirsql-0.4.13}/packages/python/docs/howto/parse-files-into-columns.md +0 -0
  102. {dirsql-0.4.11 → dirsql-0.4.13}/packages/python/docs/howto/persist.md +0 -0
  103. {dirsql-0.4.11 → dirsql-0.4.13}/packages/python/docs/howto/query-without-config.md +0 -0
  104. {dirsql-0.4.11 → dirsql-0.4.13}/packages/python/docs/howto/react-to-changes.md +0 -0
  105. {dirsql-0.4.11 → dirsql-0.4.13}/packages/python/docs/howto/search-by-meaning.md +0 -0
  106. {dirsql-0.4.11 → dirsql-0.4.13}/packages/python/docs/howto/skip-files.md +0 -0
  107. {dirsql-0.4.11 → dirsql-0.4.13}/packages/python/docs/howto/write-a-plugin.md +0 -0
  108. {dirsql-0.4.11 → dirsql-0.4.13}/packages/python/docs/index.md +0 -0
  109. {dirsql-0.4.11 → dirsql-0.4.13}/packages/python/docs/migrations.md +0 -0
  110. {dirsql-0.4.11 → dirsql-0.4.13}/packages/python/docs/package.json +0 -0
  111. {dirsql-0.4.11 → dirsql-0.4.13}/packages/python/docs/plugins.md +0 -0
  112. {dirsql-0.4.11 → dirsql-0.4.13}/packages/python/docs/pnpm-lock.yaml +0 -0
  113. {dirsql-0.4.11 → dirsql-0.4.13}/packages/python/docs/pnpm-workspace.yaml +0 -0
  114. {dirsql-0.4.11 → dirsql-0.4.13}/packages/python/docs/reference/cli.md +0 -0
  115. {dirsql-0.4.11 → dirsql-0.4.13}/packages/python/docs/reference/columns.md +0 -0
  116. {dirsql-0.4.11 → dirsql-0.4.13}/packages/python/docs/reference/config.md +0 -0
  117. {dirsql-0.4.11 → dirsql-0.4.13}/packages/python/docs/reference/hooks.md +0 -0
  118. {dirsql-0.4.11 → dirsql-0.4.13}/packages/python/docs/reference/http-api.md +0 -0
  119. {dirsql-0.4.11 → dirsql-0.4.13}/packages/python/docs/reference/path-tables.md +0 -0
  120. {dirsql-0.4.11 → dirsql-0.4.13}/packages/python/docs/reference/sdk.md +0 -0
  121. {dirsql-0.4.11 → dirsql-0.4.13}/packages/python/migrations.d/2026-07-13-drop-cwd-config-auto-detect.md +0 -0
  122. {dirsql-0.4.11 → dirsql-0.4.13}/packages/python/migrations.d/2026-07-13-rename-extract-to-on-file.md +0 -0
  123. {dirsql-0.4.11 → dirsql-0.4.13}/packages/python/migrations.d/2026-07-13-sdk-default-baked-in-config.md +0 -0
  124. {dirsql-0.4.11 → dirsql-0.4.13}/packages/python/migrations.d/2026-07-20-drop-implicit-files-table.md +0 -0
  125. {dirsql-0.4.11 → dirsql-0.4.13}/packages/python/migrations.d/2026-07-21-remove-glob-captures.md +0 -0
  126. {dirsql-0.4.11 → dirsql-0.4.13}/packages/python/migrations.d/2026-07-24-hookless-table-config-error.md +0 -0
  127. {dirsql-0.4.11 → dirsql-0.4.13}/packages/python/migrations.d/2026-07-24-remove-stat-fact-injection.md +0 -0
  128. {dirsql-0.4.11 → dirsql-0.4.13}/packages/python/migrations.d/2026-07-29-restore-python-310.md +0 -0
  129. {dirsql-0.4.11 → dirsql-0.4.13}/packages/python/migrations.d/README.md +0 -0
  130. {dirsql-0.4.11 → dirsql-0.4.13}/packages/python/src/lib.rs +0 -0
  131. {dirsql-0.4.11 → dirsql-0.4.13}/packages/python/tests/__init__.py +0 -0
  132. {dirsql-0.4.11 → dirsql-0.4.13}/packages/python/tests/conftest.py +0 -0
  133. {dirsql-0.4.11 → dirsql-0.4.13}/packages/python/tests/e2e/__init__.py +0 -0
  134. {dirsql-0.4.11 → dirsql-0.4.13}/packages/python/tests/e2e/fixtures/dirsql_plugin_fixture/__init__.py +0 -0
  135. {dirsql-0.4.11 → dirsql-0.4.13}/packages/python/tests/e2e/fixtures/dirsql_plugin_fixture/dirsql.toml +0 -0
  136. {dirsql-0.4.11 → dirsql-0.4.13}/packages/python/tests/integration/__init__.py +0 -0
  137. {dirsql-0.4.11 → dirsql-0.4.13}/packages/python/tests/integration/binding/__init__.py +0 -0
  138. {dirsql-0.4.11 → dirsql-0.4.13}/packages/python/tests/integration/hermetic/__init__.py +0 -0
  139. {dirsql-0.4.11 → dirsql-0.4.13}/packages/rust/CHANGELOG.md +0 -0
  140. {dirsql-0.4.11 → dirsql-0.4.13}/packages/rust/MIGRATIONS.md +0 -0
  141. {dirsql-0.4.11 → dirsql-0.4.13}/packages/rust/README.md +0 -0
  142. {dirsql-0.4.11 → dirsql-0.4.13}/packages/rust/benches/matcher_bench.rs +0 -0
  143. {dirsql-0.4.11 → dirsql-0.4.13}/packages/rust/benches/scanner_bench.rs +0 -0
  144. {dirsql-0.4.11 → dirsql-0.4.13}/packages/rust/changelog.d/2026-07-13-batch-ingest-transaction.md +0 -0
  145. {dirsql-0.4.11 → dirsql-0.4.13}/packages/rust/changelog.d/2026-07-13-chained-pre-post-query-hooks.md +0 -0
  146. {dirsql-0.4.11 → dirsql-0.4.13}/packages/rust/changelog.d/2026-07-13-drop-cwd-config-auto-detect.md +0 -0
  147. {dirsql-0.4.11 → dirsql-0.4.13}/packages/rust/changelog.d/2026-07-13-fan-out-file-table-matching.md +0 -0
  148. {dirsql-0.4.11 → dirsql-0.4.13}/packages/rust/changelog.d/2026-07-13-persist-wal.md +0 -0
  149. {dirsql-0.4.11 → dirsql-0.4.13}/packages/rust/changelog.d/2026-07-13-rename-extract-to-on-file.md +0 -0
  150. {dirsql-0.4.11 → dirsql-0.4.13}/packages/rust/changelog.d/2026-07-13-repeatable-builder-config.md +0 -0
  151. {dirsql-0.4.11 → dirsql-0.4.13}/packages/rust/changelog.d/2026-07-13-repeatable-cli-config.md +0 -0
  152. {dirsql-0.4.11 → dirsql-0.4.13}/packages/rust/changelog.d/2026-07-13-sdk-default-baked-in-config.md +0 -0
  153. {dirsql-0.4.11 → dirsql-0.4.13}/packages/rust/changelog.d/2026-07-13-subcommand-local-config-flags.md +0 -0
  154. {dirsql-0.4.11 → dirsql-0.4.13}/packages/rust/changelog.d/2026-07-19-path-table-query-fallback.md +0 -0
  155. {dirsql-0.4.11 → dirsql-0.4.13}/packages/rust/changelog.d/2026-07-19-path-table-vtab.md +0 -0
  156. {dirsql-0.4.11 → dirsql-0.4.13}/packages/rust/changelog.d/2026-07-20-drop-implicit-files-table.md +0 -0
  157. {dirsql-0.4.11 → dirsql-0.4.13}/packages/rust/changelog.d/2026-07-20-path-table-glob-semantics.md +0 -0
  158. {dirsql-0.4.11 → dirsql-0.4.13}/packages/rust/changelog.d/2026-07-20-schema-inference.md +0 -0
  159. {dirsql-0.4.11 → dirsql-0.4.13}/packages/rust/changelog.d/2026-07-21-on-file-flag.md +0 -0
  160. {dirsql-0.4.11 → dirsql-0.4.13}/packages/rust/changelog.d/2026-07-21-remove-glob-captures.md +0 -0
  161. {dirsql-0.4.11 → dirsql-0.4.13}/packages/rust/changelog.d/2026-07-23-init-escalation-example.md +0 -0
  162. {dirsql-0.4.11 → dirsql-0.4.13}/packages/rust/changelog.d/2026-07-23-query-default-cli.md +0 -0
  163. {dirsql-0.4.11 → dirsql-0.4.13}/packages/rust/changelog.d/2026-07-24-hookless-table-config-error.md +0 -0
  164. {dirsql-0.4.11 → dirsql-0.4.13}/packages/rust/changelog.d/2026-07-24-remove-stat-fact-injection.md +0 -0
  165. {dirsql-0.4.11 → dirsql-0.4.13}/packages/rust/changelog.d/2026-07-29-on-file-failures-accumulate.md +0 -0
  166. {dirsql-0.4.11 → dirsql-0.4.13}/packages/rust/changelog.d/2026-08-02-drop-regex.md +0 -0
  167. {dirsql-0.4.11 → dirsql-0.4.13}/packages/rust/changelog.d/2026-08-02-per-file-scan-failures.md +0 -0
  168. {dirsql-0.4.11 → dirsql-0.4.13}/packages/rust/changelog.d/2026-08-02-release-profile.md +0 -0
  169. {dirsql-0.4.11 → dirsql-0.4.13}/packages/rust/changelog.d/2026-08-03-gitignore-by-default.md +0 -0
  170. {dirsql-0.4.11 → dirsql-0.4.13}/packages/rust/changelog.d/2026-08-03-nested-default-ignores.md +0 -0
  171. {dirsql-0.4.11 → dirsql-0.4.13}/packages/rust/changelog.d/README.md +0 -0
  172. {dirsql-0.4.11 → dirsql-0.4.13}/packages/rust/docs/explanation.md +0 -0
  173. {dirsql-0.4.11 → dirsql-0.4.13}/packages/rust/docs/getting-started.md +0 -0
  174. {dirsql-0.4.11 → dirsql-0.4.13}/packages/rust/docs/howto/columns-from-paths.md +0 -0
  175. {dirsql-0.4.11 → dirsql-0.4.13}/packages/rust/docs/howto/define-tables.md +0 -0
  176. {dirsql-0.4.11 → dirsql-0.4.13}/packages/rust/docs/howto/embed.md +0 -0
  177. {dirsql-0.4.11 → dirsql-0.4.13}/packages/rust/docs/howto/extract-from-contents.md +0 -0
  178. {dirsql-0.4.11 → dirsql-0.4.13}/packages/rust/docs/howto/load-extension.md +0 -0
  179. {dirsql-0.4.11 → dirsql-0.4.13}/packages/rust/docs/howto/parse-files-into-columns.md +0 -0
  180. {dirsql-0.4.11 → dirsql-0.4.13}/packages/rust/docs/howto/persist.md +0 -0
  181. {dirsql-0.4.11 → dirsql-0.4.13}/packages/rust/docs/howto/query-without-config.md +0 -0
  182. {dirsql-0.4.11 → dirsql-0.4.13}/packages/rust/docs/howto/react-to-changes.md +0 -0
  183. {dirsql-0.4.11 → dirsql-0.4.13}/packages/rust/docs/howto/search-by-meaning.md +0 -0
  184. {dirsql-0.4.11 → dirsql-0.4.13}/packages/rust/docs/howto/skip-files.md +0 -0
  185. {dirsql-0.4.11 → dirsql-0.4.13}/packages/rust/docs/howto/write-a-plugin.md +0 -0
  186. {dirsql-0.4.11 → dirsql-0.4.13}/packages/rust/docs/index.md +0 -0
  187. {dirsql-0.4.11 → dirsql-0.4.13}/packages/rust/docs/migrations.md +0 -0
  188. {dirsql-0.4.11 → dirsql-0.4.13}/packages/rust/docs/plugins.md +0 -0
  189. {dirsql-0.4.11 → dirsql-0.4.13}/packages/rust/docs/reference/cli.md +0 -0
  190. {dirsql-0.4.11 → dirsql-0.4.13}/packages/rust/docs/reference/columns.md +0 -0
  191. {dirsql-0.4.11 → dirsql-0.4.13}/packages/rust/docs/reference/config.md +0 -0
  192. {dirsql-0.4.11 → dirsql-0.4.13}/packages/rust/docs/reference/hooks.md +0 -0
  193. {dirsql-0.4.11 → dirsql-0.4.13}/packages/rust/docs/reference/http-api.md +0 -0
  194. {dirsql-0.4.11 → dirsql-0.4.13}/packages/rust/docs/reference/path-tables.md +0 -0
  195. {dirsql-0.4.11 → dirsql-0.4.13}/packages/rust/docs/reference/sdk.md +0 -0
  196. {dirsql-0.4.11 → dirsql-0.4.13}/packages/rust/migrations.d/2026-07-13-drop-cwd-config-auto-detect.md +0 -0
  197. {dirsql-0.4.11 → dirsql-0.4.13}/packages/rust/migrations.d/2026-07-13-fan-out-file-table-matching.md +0 -0
  198. {dirsql-0.4.11 → dirsql-0.4.13}/packages/rust/migrations.d/2026-07-13-persist-wal.md +0 -0
  199. {dirsql-0.4.11 → dirsql-0.4.13}/packages/rust/migrations.d/2026-07-13-rename-extract-to-on-file.md +0 -0
  200. {dirsql-0.4.11 → dirsql-0.4.13}/packages/rust/migrations.d/2026-07-13-sdk-default-baked-in-config.md +0 -0
  201. {dirsql-0.4.11 → dirsql-0.4.13}/packages/rust/migrations.d/2026-07-13-subcommand-local-config-flags.md +0 -0
  202. {dirsql-0.4.11 → dirsql-0.4.13}/packages/rust/migrations.d/2026-07-20-drop-implicit-files-table.md +0 -0
  203. {dirsql-0.4.11 → dirsql-0.4.13}/packages/rust/migrations.d/2026-07-20-path-table-glob-semantics.md +0 -0
  204. {dirsql-0.4.11 → dirsql-0.4.13}/packages/rust/migrations.d/2026-07-21-remove-glob-captures.md +0 -0
  205. {dirsql-0.4.11 → dirsql-0.4.13}/packages/rust/migrations.d/2026-07-23-init-escalation-example.md +0 -0
  206. {dirsql-0.4.11 → dirsql-0.4.13}/packages/rust/migrations.d/2026-07-23-query-default-cli.md +0 -0
  207. {dirsql-0.4.11 → dirsql-0.4.13}/packages/rust/migrations.d/2026-07-24-hookless-table-config-error.md +0 -0
  208. {dirsql-0.4.11 → dirsql-0.4.13}/packages/rust/migrations.d/2026-07-24-remove-stat-fact-injection.md +0 -0
  209. {dirsql-0.4.11 → dirsql-0.4.13}/packages/rust/migrations.d/2026-08-02-per-file-scan-failures.md +0 -0
  210. {dirsql-0.4.11 → dirsql-0.4.13}/packages/rust/migrations.d/2026-08-03-gitignore-by-default.md +0 -0
  211. {dirsql-0.4.11 → dirsql-0.4.13}/packages/rust/migrations.d/2026-08-03-nested-default-ignores.md +0 -0
  212. {dirsql-0.4.11 → dirsql-0.4.13}/packages/rust/migrations.d/README.md +0 -0
  213. {dirsql-0.4.11 → dirsql-0.4.13}/packages/rust/src/bin/dirsql.rs +0 -0
  214. {dirsql-0.4.11 → dirsql-0.4.13}/packages/rust/src/cli/execute.rs +0 -0
  215. {dirsql-0.4.11 → dirsql-0.4.13}/packages/rust/src/cli/init.rs +0 -0
  216. {dirsql-0.4.11 → dirsql-0.4.13}/packages/rust/src/cli/mod.rs +0 -0
  217. {dirsql-0.4.11 → dirsql-0.4.13}/packages/rust/src/cli/router.rs +0 -0
  218. {dirsql-0.4.11 → dirsql-0.4.13}/packages/rust/src/cli/serialize.rs +0 -0
  219. {dirsql-0.4.11 → dirsql-0.4.13}/packages/rust/src/cli/server.rs +0 -0
  220. {dirsql-0.4.11 → dirsql-0.4.13}/packages/rust/src/command.rs +0 -0
  221. {dirsql-0.4.11 → dirsql-0.4.13}/packages/rust/src/default_config.toml +0 -0
  222. {dirsql-0.4.11 → dirsql-0.4.13}/packages/rust/src/differ.rs +0 -0
  223. {dirsql-0.4.11 → dirsql-0.4.13}/packages/rust/src/infer.rs +0 -0
  224. {dirsql-0.4.11 → dirsql-0.4.13}/packages/rust/src/matcher.rs +0 -0
  225. {dirsql-0.4.11 → dirsql-0.4.13}/packages/rust/src/path_table.rs +0 -0
  226. {dirsql-0.4.11 → dirsql-0.4.13}/packages/rust/src/scanner.rs +0 -0
  227. {dirsql-0.4.11 → dirsql-0.4.13}/packages/rust/src/watcher.rs +0 -0
  228. {dirsql-0.4.11 → dirsql-0.4.13}/pyproject.toml +0 -0
@@ -500,7 +500,7 @@ dependencies = [
500
500
 
501
501
  [[package]]
502
502
  name = "dirsql-py-ext"
503
- version = "0.4.11"
503
+ version = "0.4.13"
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.11
3
+ Version: 0.4.13
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.11"
7
+ version = "0.4.13"
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,6 +25,23 @@ 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
+ [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.
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"
44
+
28
45
  [features]
29
46
  default = []
30
47
  extension-module = ["pyo3/extension-module"]
@@ -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
+ }
@@ -74,6 +74,28 @@ toml = "0.8"
74
74
  wait-timeout = "0.2"
75
75
  walkdir = "2"
76
76
 
77
+ [lints.rust]
78
+ # `deny`, not `forbid`: rusqlite's API imposes five unavoidable `unsafe`
79
+ # sites (the `load_extension` guard and four `unsafe impl VTab`/`VTabCursor`).
80
+ # `forbid` cannot be overridden at all, so it would make the crate
81
+ # uncompilable; `deny` blocks new `unsafe` unless a site opts in explicitly
82
+ # with `#[expect(unsafe_code, reason = ...)]`, which is the guarantee we
83
+ # actually want (#763).
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"
98
+
77
99
  [[bin]]
78
100
  name = "dirsql"
79
101
  path = "src/bin/dirsql.rs"
@@ -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]`.
@@ -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
  }
@@ -327,6 +327,10 @@ impl Db {
327
327
  /// call via [`rusqlite::LoadExtensionGuard`] and disabled again on return,
328
328
  /// so the SQL `load_extension()` function is never left exposed to later
329
329
  /// queries. A missing or unloadable file surfaces as [`DbError::Sqlite`].
330
+ #[expect(
331
+ unsafe_code,
332
+ reason = "rusqlite's load_extension API is unsafe by design"
333
+ )]
330
334
  pub fn load_extension(&self, path: &Path, entrypoint: Option<&str>) -> Result<()> {
331
335
  // SAFETY: loading an extension executes native code from `path`. The
332
336
  // path is operator-supplied configuration (a `[[dirsql.extension]]`
@@ -461,7 +465,12 @@ impl Db {
461
465
  conn.execute(
462
466
  "INSERT INTO _dirsql_internal_rows (table_name, file_path, row_index, rowid_ref) \
463
467
  VALUES (?1, ?2, ?3, ?4)",
464
- 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
+ ],
465
474
  )?;
466
475
  Ok(())
467
476
  }
@@ -1050,7 +1059,7 @@ mod tests {
1050
1059
  for (i, action) in ["created", "resolved", "reopened"].iter().enumerate() {
1051
1060
  let row = HashMap::from([
1052
1061
  ("action".into(), Value::Text(action.to_string())),
1053
- ("ts".into(), Value::Integer(i as i64)),
1062
+ ("ts".into(), Value::Integer(i64::try_from(i).unwrap())),
1054
1063
  ]);
1055
1064
  db.insert_row("events", &row, "thread.jsonl", i).unwrap();
1056
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
  )
@@ -198,6 +198,7 @@ struct ParsedTab {
198
198
  rows: Vec<JsonRow>,
199
199
  }
200
200
 
201
+ #[expect(unsafe_code, reason = "rusqlite requires VTab to be an unsafe trait")]
201
202
  unsafe impl<'vtab> VTab<'vtab> for ParsedTab {
202
203
  type Aux = ();
203
204
  type Cursor = ParsedTabCursor;
@@ -271,6 +272,10 @@ struct ParsedTabCursor {
271
272
  index: usize,
272
273
  }
273
274
 
275
+ #[expect(
276
+ unsafe_code,
277
+ reason = "rusqlite requires VTabCursor to be an unsafe trait"
278
+ )]
274
279
  unsafe impl VTabCursor for ParsedTabCursor {
275
280
  fn filter(
276
281
  &mut self,
@@ -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)
@@ -197,6 +197,7 @@ struct PathTab {
197
197
  spec: Arc<ScanSpec>,
198
198
  }
199
199
 
200
+ #[expect(unsafe_code, reason = "rusqlite requires VTab to be an unsafe trait")]
200
201
  unsafe impl<'vtab> VTab<'vtab> for PathTab {
201
202
  type Aux = ();
202
203
  type Cursor = PathTabCursor;
@@ -250,6 +251,10 @@ struct PathTabCursor {
250
251
  index: usize,
251
252
  }
252
253
 
254
+ #[expect(
255
+ unsafe_code,
256
+ reason = "rusqlite requires VTabCursor to be an unsafe trait"
257
+ )]
253
258
  unsafe impl VTabCursor for PathTabCursor {
254
259
  fn filter(
255
260
  &mut self,
@@ -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
File without changes
File without changes