dirsql 0.4.102__tar.gz → 0.4.103__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 (415) hide show
  1. {dirsql-0.4.102 → dirsql-0.4.103}/Cargo.lock +2 -2
  2. {dirsql-0.4.102 → dirsql-0.4.103}/PKG-INFO +1 -1
  3. {dirsql-0.4.102/packages/rust → dirsql-0.4.103}/docs/reference/hooks.md +1 -1
  4. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/Cargo.toml +1 -1
  5. dirsql-0.4.103/packages/python/changelog.d/2026-10-07-spread-few-large-files.md +1 -0
  6. {dirsql-0.4.102 → dirsql-0.4.103/packages/python}/docs/reference/hooks.md +1 -1
  7. dirsql-0.4.103/packages/python/e2e-attestations/bot-1454-split-few-files.json +7 -0
  8. dirsql-0.4.103/packages/python/migrations.d/2026-10-07-spread-few-large-files.md +39 -0
  9. {dirsql-0.4.102 → dirsql-0.4.103}/packages/rust/Cargo.toml +1 -1
  10. {dirsql-0.4.102/packages/python → dirsql-0.4.103/packages/rust}/docs/reference/hooks.md +1 -1
  11. {dirsql-0.4.102 → dirsql-0.4.103}/packages/rust/src/on_file.rs +127 -4
  12. {dirsql-0.4.102 → dirsql-0.4.103}/Cargo.toml +0 -0
  13. {dirsql-0.4.102 → dirsql-0.4.103}/README.md +0 -0
  14. {dirsql-0.4.102 → dirsql-0.4.103}/dirsql/__init__.py +0 -0
  15. {dirsql-0.4.102 → dirsql-0.4.103}/dirsql/_async.py +0 -0
  16. {dirsql-0.4.102 → dirsql-0.4.103}/dirsql/_dirsql.pyi +0 -0
  17. {dirsql-0.4.102 → dirsql-0.4.103}/dirsql/cli/__init__.py +0 -0
  18. {dirsql-0.4.102 → dirsql-0.4.103}/dirsql/cli/discover_plugins/__init__.py +0 -0
  19. {dirsql-0.4.102 → dirsql-0.4.103}/dirsql/cli/discover_plugins/discovered_fragments.py +0 -0
  20. {dirsql-0.4.102 → dirsql-0.4.103}/dirsql/cli/discover_plugins/discovery_disabled.py +0 -0
  21. {dirsql-0.4.102 → dirsql-0.4.103}/dirsql/cli/discover_plugins/fragment_path.py +0 -0
  22. {dirsql-0.4.102 → dirsql-0.4.103}/dirsql/cli/discover_plugins/with_discovered_plugins.py +0 -0
  23. {dirsql-0.4.102 → dirsql-0.4.103}/dirsql/cli/main.py +0 -0
  24. {dirsql-0.4.102 → dirsql-0.4.103}/dirsql/cli/resolve_config_extensions.py +0 -0
  25. {dirsql-0.4.102 → dirsql-0.4.103}/dirsql/plan_entry_path.py +0 -0
  26. {dirsql-0.4.102 → dirsql-0.4.103}/dirsql/py.typed +0 -0
  27. {dirsql-0.4.102 → dirsql-0.4.103}/dirsql/read_config.py +0 -0
  28. {dirsql-0.4.102 → dirsql-0.4.103}/dirsql/resolve_configs_extension_specs.py +0 -0
  29. {dirsql-0.4.102 → dirsql-0.4.103}/dirsql/resolve_extension.py +0 -0
  30. {dirsql-0.4.102 → dirsql-0.4.103}/dirsql/resolve_package.py +0 -0
  31. {dirsql-0.4.102 → dirsql-0.4.103}/docs/.claude/CLAUDE.md +0 -0
  32. {dirsql-0.4.102 → dirsql-0.4.103}/docs/.vitepress/config.ts +0 -0
  33. {dirsql-0.4.102 → dirsql-0.4.103}/docs/.vitepress/theme/index.ts +0 -0
  34. {dirsql-0.4.102 → dirsql-0.4.103}/docs/.vitepress/theme/lang.ts +0 -0
  35. {dirsql-0.4.102 → dirsql-0.4.103}/docs/AGENTS.md +0 -0
  36. {dirsql-0.4.102 → dirsql-0.4.103}/docs/context/.gitattributes +0 -0
  37. {dirsql-0.4.102 → dirsql-0.4.103}/docs/context/recipes.md +0 -0
  38. {dirsql-0.4.102 → dirsql-0.4.103}/docs/context/troubleshooting.md +0 -0
  39. {dirsql-0.4.102 → dirsql-0.4.103}/docs/context/usage.md +0 -0
  40. {dirsql-0.4.102 → dirsql-0.4.103}/docs/explanation.md +0 -0
  41. {dirsql-0.4.102 → dirsql-0.4.103}/docs/getting-started.md +0 -0
  42. {dirsql-0.4.102 → dirsql-0.4.103}/docs/howto/agent-skill.md +0 -0
  43. {dirsql-0.4.102 → dirsql-0.4.103}/docs/howto/columns-from-paths.md +0 -0
  44. {dirsql-0.4.102 → dirsql-0.4.103}/docs/howto/define-tables.md +0 -0
  45. {dirsql-0.4.102 → dirsql-0.4.103}/docs/howto/embed.md +0 -0
  46. {dirsql-0.4.102 → dirsql-0.4.103}/docs/howto/extract-from-contents.md +0 -0
  47. {dirsql-0.4.102 → dirsql-0.4.103}/docs/howto/load-extension.md +0 -0
  48. {dirsql-0.4.102 → dirsql-0.4.103}/docs/howto/parse-files-into-columns.md +0 -0
  49. {dirsql-0.4.102 → dirsql-0.4.103}/docs/howto/persist.md +0 -0
  50. {dirsql-0.4.102 → dirsql-0.4.103}/docs/howto/query-json.md +0 -0
  51. {dirsql-0.4.102 → dirsql-0.4.103}/docs/howto/query-without-config.md +0 -0
  52. {dirsql-0.4.102 → dirsql-0.4.103}/docs/howto/react-to-changes.md +0 -0
  53. {dirsql-0.4.102 → dirsql-0.4.103}/docs/howto/search-by-meaning.md +0 -0
  54. {dirsql-0.4.102 → dirsql-0.4.103}/docs/howto/search-indexes.md +0 -0
  55. {dirsql-0.4.102 → dirsql-0.4.103}/docs/howto/skip-files.md +0 -0
  56. {dirsql-0.4.102 → dirsql-0.4.103}/docs/howto/write-a-plugin.md +0 -0
  57. {dirsql-0.4.102 → dirsql-0.4.103}/docs/index.md +0 -0
  58. {dirsql-0.4.102 → dirsql-0.4.103}/docs/package.json +0 -0
  59. {dirsql-0.4.102 → dirsql-0.4.103}/docs/plugins.md +0 -0
  60. {dirsql-0.4.102 → dirsql-0.4.103}/docs/pnpm-lock.yaml +0 -0
  61. {dirsql-0.4.102 → dirsql-0.4.103}/docs/pnpm-workspace.yaml +0 -0
  62. {dirsql-0.4.102 → dirsql-0.4.103}/docs/reference/cli.md +0 -0
  63. {dirsql-0.4.102 → dirsql-0.4.103}/docs/reference/columns.md +0 -0
  64. {dirsql-0.4.102 → dirsql-0.4.103}/docs/reference/config.md +0 -0
  65. {dirsql-0.4.102 → dirsql-0.4.103}/docs/reference/glob.md +0 -0
  66. {dirsql-0.4.102 → dirsql-0.4.103}/docs/reference/http-api.md +0 -0
  67. {dirsql-0.4.102 → dirsql-0.4.103}/docs/reference/path-tables.md +0 -0
  68. {dirsql-0.4.102 → dirsql-0.4.103}/docs/reference/sdk.md +0 -0
  69. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/CHANGELOG.md +0 -0
  70. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/MIGRATIONS.md +0 -0
  71. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/README.md +0 -0
  72. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/changelog.d/2026-07-13-drop-cwd-config-auto-detect.md +0 -0
  73. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/changelog.d/2026-07-13-plugin-discovery.md +0 -0
  74. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/changelog.d/2026-07-13-rename-extract-to-on-file.md +0 -0
  75. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/changelog.d/2026-07-13-repeatable-config.md +0 -0
  76. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/changelog.d/2026-07-13-sdk-default-baked-in-config.md +0 -0
  77. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/changelog.d/2026-07-20-drop-implicit-files-table.md +0 -0
  78. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/changelog.d/2026-07-21-remove-glob-captures.md +0 -0
  79. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/changelog.d/2026-07-24-hookless-table-config-error.md +0 -0
  80. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/changelog.d/2026-07-24-remove-stat-fact-injection.md +0 -0
  81. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/changelog.d/2026-07-29-restore-python-310.md +0 -0
  82. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/changelog.d/2026-08-02-release-profile.md +0 -0
  83. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/changelog.d/2026-08-02-scan-failures.md +0 -0
  84. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/changelog.d/2026-08-03-discovery-ext-resolution.md +0 -0
  85. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/changelog.d/2026-08-03-manylinux-dynamic-binary.md +0 -0
  86. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/changelog.d/2026-08-03-python-no-ignore.md +0 -0
  87. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/changelog.d/2026-08-04-cast-lints.md +0 -0
  88. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/changelog.d/2026-08-04-cli-in-process.md +0 -0
  89. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/changelog.d/2026-08-20-curtaincall-dev-dependency.md +0 -0
  90. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/changelog.d/2026-08-20-declared-table-name.md +0 -0
  91. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/changelog.d/2026-09-04-config-paths-from-argv-module.md +0 -0
  92. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/changelog.d/2026-09-05-config-extension-loader-split.md +0 -0
  93. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/changelog.d/2026-09-05-resolve-config-extensions-split.md +0 -0
  94. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/changelog.d/2026-09-05-resolve-extension-split.md +0 -0
  95. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/changelog.d/2026-09-09-launcher-config-path-scan.md +0 -0
  96. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/changelog.d/2026-09-17-extension-resolution-via-core.md +0 -0
  97. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/changelog.d/2026-09-18-export-scan-failure.md +0 -0
  98. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/changelog.d/2026-09-18-flatten-row-event-in-core.md +0 -0
  99. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/changelog.d/2026-09-18-programmatic-extension-plan.md +0 -0
  100. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/changelog.d/2026-09-20-sigint-ends-a-run-in-progress.md +0 -0
  101. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/changelog.d/2026-09-24-query-rows-in-projection-order.md +0 -0
  102. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/changelog.d/2026-10-02-readme-docs-host.md +0 -0
  103. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/changelog.d/2026-10-03-one-glob-rule-for-config-globs.md +0 -0
  104. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/changelog.d/2026-10-03-path-table-directory-one-level.md +0 -0
  105. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/changelog.d/2026-10-04-path-table-dotfiles-hidden.md +0 -0
  106. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/changelog.d/2026-10-05-brace-groups-follow-bash.md +0 -0
  107. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/changelog.d/2026-10-05-cli-context.md +0 -0
  108. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/changelog.d/2026-10-05-gitignore-requires-repo.md +0 -0
  109. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/changelog.d/2026-10-05-path-table-node-modules-named.md +0 -0
  110. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/changelog.d/2026-10-05-path-table-symlinks.md +0 -0
  111. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/changelog.d/2026-10-05-path-table-trailing-slash.md +0 -0
  112. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/changelog.d/2026-10-05-unbalanced-brackets-literal.md +0 -0
  113. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/changelog.d/2026-10-06-config-braces.md +0 -0
  114. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/changelog.d/2026-10-06-config-directory.md +0 -0
  115. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/changelog.d/2026-10-06-config-dotnames.md +0 -0
  116. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/changelog.d/2026-10-06-config-gitignore.md +0 -0
  117. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/changelog.d/2026-10-06-config-globs-anchor-at-the-config.md +0 -0
  118. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/changelog.d/2026-10-06-config-links.md +0 -0
  119. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/changelog.d/2026-10-06-one-glob-compiler.md +0 -0
  120. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/changelog.d/2026-10-06-plugin-no-default-records.md +0 -0
  121. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/changelog.d/2026-10-06-watch-broadcast.md +0 -0
  122. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/changelog.d/2026-10-06-zero-match-config-table-warning.md +0 -0
  123. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/changelog.d/2026-10-07-bracket-slash-literal.md +0 -0
  124. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/changelog.d/2026-10-07-dotdot-and-double-slashes.md +0 -0
  125. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/changelog.d/2026-10-07-dotdot-as-written.md +0 -0
  126. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/changelog.d/2026-10-07-glob-walks-node-modules.md +0 -0
  127. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/changelog.d/2026-10-07-literal-gitignore.md +0 -0
  128. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/changelog.d/2026-10-07-on-file-ndjson.md +0 -0
  129. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/changelog.d/2026-10-07-parallel-hooks.md +0 -0
  130. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/changelog.d/2026-10-07-persist-cache-outside-root.md +0 -0
  131. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/changelog.d/2026-10-07-posix-classes-unicode.md +0 -0
  132. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/changelog.d/README.md +0 -0
  133. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/conftest.py +0 -0
  134. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/docs/.claude/CLAUDE.md +0 -0
  135. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/docs/.vitepress/config.ts +0 -0
  136. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/docs/.vitepress/theme/index.ts +0 -0
  137. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/docs/.vitepress/theme/lang.ts +0 -0
  138. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/docs/AGENTS.md +0 -0
  139. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/docs/context/.gitattributes +0 -0
  140. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/docs/context/recipes.md +0 -0
  141. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/docs/context/troubleshooting.md +0 -0
  142. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/docs/context/usage.md +0 -0
  143. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/docs/explanation.md +0 -0
  144. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/docs/getting-started.md +0 -0
  145. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/docs/howto/agent-skill.md +0 -0
  146. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/docs/howto/columns-from-paths.md +0 -0
  147. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/docs/howto/define-tables.md +0 -0
  148. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/docs/howto/embed.md +0 -0
  149. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/docs/howto/extract-from-contents.md +0 -0
  150. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/docs/howto/load-extension.md +0 -0
  151. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/docs/howto/parse-files-into-columns.md +0 -0
  152. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/docs/howto/persist.md +0 -0
  153. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/docs/howto/query-json.md +0 -0
  154. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/docs/howto/query-without-config.md +0 -0
  155. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/docs/howto/react-to-changes.md +0 -0
  156. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/docs/howto/search-by-meaning.md +0 -0
  157. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/docs/howto/search-indexes.md +0 -0
  158. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/docs/howto/skip-files.md +0 -0
  159. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/docs/howto/write-a-plugin.md +0 -0
  160. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/docs/index.md +0 -0
  161. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/docs/package.json +0 -0
  162. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/docs/plugins.md +0 -0
  163. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/docs/pnpm-lock.yaml +0 -0
  164. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/docs/pnpm-workspace.yaml +0 -0
  165. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/docs/reference/cli.md +0 -0
  166. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/docs/reference/columns.md +0 -0
  167. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/docs/reference/config.md +0 -0
  168. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/docs/reference/glob.md +0 -0
  169. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/docs/reference/http-api.md +0 -0
  170. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/docs/reference/path-tables.md +0 -0
  171. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/docs/reference/sdk.md +0 -0
  172. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/e2e-attestations/bot-1334-listing-exemptions.json +0 -0
  173. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/e2e-attestations/bot-1397-watch-broadcast.json +0 -0
  174. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/e2e-attestations/bot-1398-inotify-error.json +0 -0
  175. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/e2e-attestations/bot-1399-server-cors.json +0 -0
  176. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/e2e-attestations/bot-1401-watch-scope.json +0 -0
  177. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/e2e-attestations/bot-1407-child-place-depth.json +0 -0
  178. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/e2e-attestations/bot-1414-stat-speed.json +0 -0
  179. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/e2e-attestations/bot-1415-server-speed.json +0 -0
  180. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/e2e-attestations/bot-1418-node-modules.json +0 -0
  181. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/e2e-attestations/bot-1419-dotdot-slashes.json +0 -0
  182. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/e2e-attestations/bot-1420-bracket-slash.json +0 -0
  183. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/e2e-attestations/bot-1421-posix-unicode.json +0 -0
  184. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/e2e-attestations/bot-1422-literal-gitignore.json +0 -0
  185. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/e2e-attestations/bot-1428-ndjson-hooks.json +0 -0
  186. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/e2e-attestations/bot-1429-parallel-hooks.json +0 -0
  187. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/e2e-attestations/bot-1430-dotdot-as-written.json +0 -0
  188. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/e2e-attestations/bot-1431-persist-cache-dir.json +0 -0
  189. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/e2e-attestations/bot-1437-test-cache-isolation.json +0 -0
  190. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/e2e-attestations/bot-1440-fix-main-build.json +0 -0
  191. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/e2e-attestations/bot-1448-wildcard-ignored-prefix.json +0 -0
  192. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/e2e-attestations/bot-1451-named-dir-never-hidden.json +0 -0
  193. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/e2e-attestations/bot-fix-main-place-depth-20261007.json +0 -0
  194. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/e2e-attestations/cc-keen-knuth-f11gyq.json +0 -0
  195. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/e2e-attestations/claude-1056-py-ofpf9.json +0 -0
  196. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/e2e-attestations/claude-1066-p1-resolve-extension.json +0 -0
  197. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/e2e-attestations/claude-1078-argv-config-paths-core.json +0 -0
  198. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/e2e-attestations/claude-1079-p2-resolve-config-extensions.json +0 -0
  199. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/e2e-attestations/claude-1080-share-vtab-scaffolding.json +0 -0
  200. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/e2e-attestations/claude-1081-indicatif-progress.json +0 -0
  201. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/e2e-attestations/claude-1096-watch-moved-dir.json +0 -0
  202. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/e2e-attestations/claude-1109-watch-moved-out.json +0 -0
  203. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/e2e-attestations/claude-1119-ext-plan.json +0 -0
  204. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/e2e-attestations/claude-1120-py-ext.json +0 -0
  205. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/e2e-attestations/claude-1122-ext-cleanup.json +0 -0
  206. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/e2e-attestations/claude-1130-codec-crates.json +0 -0
  207. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/e2e-attestations/claude-1131-flatten-row-event.json +0 -0
  208. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/e2e-attestations/claude-1139-sse-flatten.json +0 -0
  209. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/e2e-attestations/claude-1140-scan-failure-export.json +0 -0
  210. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/e2e-attestations/claude-1148-clippy-all-targets.json +0 -0
  211. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/e2e-attestations/claude-1164-sigint-fatal.json +0 -0
  212. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/e2e-attestations/claude-1170-projection-order.json +0 -0
  213. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/e2e-attestations/claude-1172-on-file-path.json +0 -0
  214. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/e2e-attestations/claude-1173-py-projection-order.json +0 -0
  215. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/e2e-attestations/claude-1184-win-rel-paths.json +0 -0
  216. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/e2e-attestations/claude-1185-win-abs-table-names.json +0 -0
  217. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/e2e-attestations/claude-1186-win-test-harness.json +0 -0
  218. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/e2e-attestations/claude-1196-join-index.json +0 -0
  219. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/e2e-attestations/claude-1199-glob-prefix.json +0 -0
  220. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/e2e-attestations/claude-1201-single-walk.json +0 -0
  221. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/e2e-attestations/claude-1204-embed-batch.json +0 -0
  222. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/e2e-attestations/claude-1207-win-argv-quote.json +0 -0
  223. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/e2e-attestations/claude-1208-win-nonverbatim-paths.json +0 -0
  224. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/e2e-attestations/claude-1215-on-file-batch.json +0 -0
  225. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/e2e-attestations/claude-1216-on-file-cleanup.json +0 -0
  226. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/e2e-attestations/claude-1223-config-glob-rule.json +0 -0
  227. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/e2e-attestations/claude-1223-dir-one-level.json +0 -0
  228. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/e2e-attestations/claude-1225-plugin-no-default.json +0 -0
  229. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/e2e-attestations/claude-1226-stale-docs.json +0 -0
  230. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/e2e-attestations/claude-1232-anchor-plumbing.json +0 -0
  231. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/e2e-attestations/claude-1232-config-anchor.json +0 -0
  232. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/e2e-attestations/claude-1232-multi-watch.json +0 -0
  233. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/e2e-attestations/claude-1232-zero-match.json +0 -0
  234. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/e2e-attestations/claude-1238-parallel-walk.json +0 -0
  235. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/e2e-attestations/claude-1241-content-prefetch.json +0 -0
  236. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/e2e-attestations/claude-1243-ingest-perf.json +0 -0
  237. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/e2e-attestations/claude-1249-dotfiles.json +0 -0
  238. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/e2e-attestations/claude-1256-symlinks.json +0 -0
  239. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/e2e-attestations/claude-1257-trailing-slash.json +0 -0
  240. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/e2e-attestations/claude-1258-config-braces.json +0 -0
  241. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/e2e-attestations/claude-1258-config-directory.json +0 -0
  242. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/e2e-attestations/claude-1258-config-dotnames.json +0 -0
  243. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/e2e-attestations/claude-1258-config-gitignore.json +0 -0
  244. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/e2e-attestations/claude-1258-config-links.json +0 -0
  245. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/e2e-attestations/claude-1258-one-pattern.json +0 -0
  246. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/e2e-attestations/claude-1262-brace-literal.json +0 -0
  247. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/e2e-attestations/claude-1264-context.json +0 -0
  248. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/e2e-attestations/claude-1267-posix-classes.json +0 -0
  249. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/e2e-attestations/claude-1268-unbalanced-brackets.json +0 -0
  250. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/e2e-attestations/claude-1269-utf8-chars.json +0 -0
  251. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/e2e-attestations/claude-1271-node-modules-named.json +0 -0
  252. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/e2e-attestations/claude-1272-ancestor-gitignore.json +0 -0
  253. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/e2e-attestations/claude-1273-walk-prune.json +0 -0
  254. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/e2e-attestations/claude-1285-ingest-fast.json +0 -0
  255. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/e2e-attestations/claude-1286-nested-repo.json +0 -0
  256. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/e2e-attestations/claude-1305-glob-speed.json +0 -0
  257. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/e2e-attestations/claude-1308-glob-speed.json +0 -0
  258. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/e2e-attestations/claude-1310-glob-speed.json +0 -0
  259. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/e2e-attestations/claude-1311-glob-speed.json +0 -0
  260. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/e2e-attestations/claude-1312-glob-speed.json +0 -0
  261. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/e2e-attestations/claude-1318-lazy-stat.json +0 -0
  262. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/e2e-attestations/claude-1320-walk-speed.json +0 -0
  263. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/e2e-attestations/claude-1322-walk-readdir.json +0 -0
  264. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/e2e-attestations/claude-1325-parallel-walk.json +0 -0
  265. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/e2e-attestations/claude-1326-stream-rows.json +0 -0
  266. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/e2e-attestations/claude-1330-python-dirsql-patch.json +0 -0
  267. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/e2e-attestations/claude-1330-python-extensions-patch.json +0 -0
  268. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/e2e-attestations/claude-1330-scanner-effects.json +0 -0
  269. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/e2e-attestations/claude-1330-scanner-gitignore.json +0 -0
  270. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/e2e-attestations/claude-1330-vtab-prefetch-flag.json +0 -0
  271. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/e2e-attestations/claude-1330-vtab-read.json +0 -0
  272. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/e2e-attestations/claude-1351-dot-dirs.json +0 -0
  273. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/e2e-attestations/claude-819-oneshot-timeout.json +0 -0
  274. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/e2e-attestations/claude-827-unquote-doubled-quotes.json +0 -0
  275. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/e2e-attestations/claude-epic-953-slice2-reedline.json +0 -0
  276. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/e2e-attestations/claude-epic-953-slice3-format.json +0 -0
  277. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/e2e-attestations/claude-epic-953-stacked-prs-x59wm3.json +0 -0
  278. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/e2e-attestations/claude-github-issue-825-e4mhhp.json +0 -0
  279. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/e2e-attestations/claude-issue-951-0eease.json +0 -0
  280. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/e2e-attestations/claude-issue-962-0jjrfv.json +0 -0
  281. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/e2e-attestations/claude-issue-986-red-test-e7sjrb.json +0 -0
  282. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/e2e-attestations/claude-tackle-1034-cachesplit.json +0 -0
  283. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/e2e-attestations/claude-tackle-1042-py12.json +0 -0
  284. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/e2e-attestations/claude-tackle-956-xzen74.json +0 -0
  285. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/e2e-attestations/claude-tackle-957-lrm0z6-worker-calls.json +0 -0
  286. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/e2e-attestations/claude-tackle-957-lrm0z6.json +0 -0
  287. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/e2e-attestations/claude-tackle-975-n8mc2h.json +0 -0
  288. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/migrations.d/2026-07-13-drop-cwd-config-auto-detect.md +0 -0
  289. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/migrations.d/2026-07-13-rename-extract-to-on-file.md +0 -0
  290. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/migrations.d/2026-07-13-sdk-default-baked-in-config.md +0 -0
  291. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/migrations.d/2026-07-20-drop-implicit-files-table.md +0 -0
  292. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/migrations.d/2026-07-21-remove-glob-captures.md +0 -0
  293. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/migrations.d/2026-07-24-hookless-table-config-error.md +0 -0
  294. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/migrations.d/2026-07-24-remove-stat-fact-injection.md +0 -0
  295. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/migrations.d/2026-07-29-restore-python-310.md +0 -0
  296. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/migrations.d/2026-08-04-cli-in-process.md +0 -0
  297. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/migrations.d/2026-08-20-declared-table-name.md +0 -0
  298. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/migrations.d/2026-09-20-sigint-ends-a-run-in-progress.md +0 -0
  299. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/migrations.d/2026-09-24-query-rows-in-projection-order.md +0 -0
  300. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/migrations.d/2026-10-02-readme-docs-host.md +0 -0
  301. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/migrations.d/2026-10-03-one-glob-rule-for-config-globs.md +0 -0
  302. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/migrations.d/2026-10-03-path-table-directory-one-level.md +0 -0
  303. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/migrations.d/2026-10-04-path-table-dotfiles-hidden.md +0 -0
  304. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/migrations.d/2026-10-05-brace-groups-follow-bash.md +0 -0
  305. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/migrations.d/2026-10-05-cli-context.md +0 -0
  306. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/migrations.d/2026-10-05-gitignore-requires-repo.md +0 -0
  307. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/migrations.d/2026-10-05-path-table-node-modules-named.md +0 -0
  308. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/migrations.d/2026-10-05-path-table-symlinks.md +0 -0
  309. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/migrations.d/2026-10-05-path-table-trailing-slash.md +0 -0
  310. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/migrations.d/2026-10-05-unbalanced-brackets-literal.md +0 -0
  311. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/migrations.d/2026-10-06-config-braces.md +0 -0
  312. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/migrations.d/2026-10-06-config-directory.md +0 -0
  313. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/migrations.d/2026-10-06-config-dotnames.md +0 -0
  314. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/migrations.d/2026-10-06-config-gitignore.md +0 -0
  315. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/migrations.d/2026-10-06-config-globs-anchor-at-the-config.md +0 -0
  316. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/migrations.d/2026-10-06-config-links.md +0 -0
  317. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/migrations.d/2026-10-06-one-glob-compiler.md +0 -0
  318. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/migrations.d/2026-10-06-plugin-no-default-records.md +0 -0
  319. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/migrations.d/2026-10-06-watch-broadcast.md +0 -0
  320. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/migrations.d/2026-10-06-zero-match-config-table-warning.md +0 -0
  321. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/migrations.d/2026-10-07-bracket-slash-literal.md +0 -0
  322. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/migrations.d/2026-10-07-dotdot-and-double-slashes.md +0 -0
  323. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/migrations.d/2026-10-07-dotdot-as-written.md +0 -0
  324. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/migrations.d/2026-10-07-glob-walks-node-modules.md +0 -0
  325. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/migrations.d/2026-10-07-literal-gitignore.md +0 -0
  326. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/migrations.d/2026-10-07-on-file-ndjson.md +0 -0
  327. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/migrations.d/2026-10-07-parallel-hooks.md +0 -0
  328. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/migrations.d/2026-10-07-persist-cache-outside-root.md +0 -0
  329. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/migrations.d/2026-10-07-posix-classes-unicode.md +0 -0
  330. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/migrations.d/README.md +0 -0
  331. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/src/lib.rs +0 -0
  332. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/testing-conventions.toml +0 -0
  333. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/tests/__init__.py +0 -0
  334. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/tests/conftest.py +0 -0
  335. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/tests/e2e/__init__.py +0 -0
  336. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/tests/e2e/fixtures/dirsql_plugin_fixture/__init__.py +0 -0
  337. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/tests/e2e/fixtures/dirsql_plugin_fixture/dirsql.toml +0 -0
  338. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/tests/e2e/speed_of_light.py +0 -0
  339. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/tests/integration/__init__.py +0 -0
  340. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/tests/integration/binding/__init__.py +0 -0
  341. {dirsql-0.4.102 → dirsql-0.4.103}/packages/python/tests/integration/hermetic/__init__.py +0 -0
  342. {dirsql-0.4.102 → dirsql-0.4.103}/packages/rust/CHANGELOG.md +0 -0
  343. {dirsql-0.4.102 → dirsql-0.4.103}/packages/rust/MIGRATIONS.md +0 -0
  344. {dirsql-0.4.102 → dirsql-0.4.103}/packages/rust/README.md +0 -0
  345. {dirsql-0.4.102 → dirsql-0.4.103}/packages/rust/benches/db_bench.rs +0 -0
  346. {dirsql-0.4.102 → dirsql-0.4.103}/packages/rust/benches/differ_bench.rs +0 -0
  347. {dirsql-0.4.102 → dirsql-0.4.103}/packages/rust/benches/matcher_bench.rs +0 -0
  348. {dirsql-0.4.102 → dirsql-0.4.103}/packages/rust/benches/scanner_bench.rs +0 -0
  349. {dirsql-0.4.102 → dirsql-0.4.103}/packages/rust/docs/context/.gitattributes +0 -0
  350. {dirsql-0.4.102 → dirsql-0.4.103}/packages/rust/docs/context/recipes.md +0 -0
  351. {dirsql-0.4.102 → dirsql-0.4.103}/packages/rust/docs/context/troubleshooting.md +0 -0
  352. {dirsql-0.4.102 → dirsql-0.4.103}/packages/rust/docs/context/usage.md +0 -0
  353. {dirsql-0.4.102 → dirsql-0.4.103}/packages/rust/docs/explanation.md +0 -0
  354. {dirsql-0.4.102 → dirsql-0.4.103}/packages/rust/docs/getting-started.md +0 -0
  355. {dirsql-0.4.102 → dirsql-0.4.103}/packages/rust/docs/howto/agent-skill.md +0 -0
  356. {dirsql-0.4.102 → dirsql-0.4.103}/packages/rust/docs/howto/columns-from-paths.md +0 -0
  357. {dirsql-0.4.102 → dirsql-0.4.103}/packages/rust/docs/howto/define-tables.md +0 -0
  358. {dirsql-0.4.102 → dirsql-0.4.103}/packages/rust/docs/howto/embed.md +0 -0
  359. {dirsql-0.4.102 → dirsql-0.4.103}/packages/rust/docs/howto/extract-from-contents.md +0 -0
  360. {dirsql-0.4.102 → dirsql-0.4.103}/packages/rust/docs/howto/load-extension.md +0 -0
  361. {dirsql-0.4.102 → dirsql-0.4.103}/packages/rust/docs/howto/parse-files-into-columns.md +0 -0
  362. {dirsql-0.4.102 → dirsql-0.4.103}/packages/rust/docs/howto/persist.md +0 -0
  363. {dirsql-0.4.102 → dirsql-0.4.103}/packages/rust/docs/howto/query-json.md +0 -0
  364. {dirsql-0.4.102 → dirsql-0.4.103}/packages/rust/docs/howto/query-without-config.md +0 -0
  365. {dirsql-0.4.102 → dirsql-0.4.103}/packages/rust/docs/howto/react-to-changes.md +0 -0
  366. {dirsql-0.4.102 → dirsql-0.4.103}/packages/rust/docs/howto/search-by-meaning.md +0 -0
  367. {dirsql-0.4.102 → dirsql-0.4.103}/packages/rust/docs/howto/search-indexes.md +0 -0
  368. {dirsql-0.4.102 → dirsql-0.4.103}/packages/rust/docs/howto/skip-files.md +0 -0
  369. {dirsql-0.4.102 → dirsql-0.4.103}/packages/rust/docs/howto/write-a-plugin.md +0 -0
  370. {dirsql-0.4.102 → dirsql-0.4.103}/packages/rust/docs/index.md +0 -0
  371. {dirsql-0.4.102 → dirsql-0.4.103}/packages/rust/docs/plugins.md +0 -0
  372. {dirsql-0.4.102 → dirsql-0.4.103}/packages/rust/docs/reference/cli.md +0 -0
  373. {dirsql-0.4.102 → dirsql-0.4.103}/packages/rust/docs/reference/columns.md +0 -0
  374. {dirsql-0.4.102 → dirsql-0.4.103}/packages/rust/docs/reference/config.md +0 -0
  375. {dirsql-0.4.102 → dirsql-0.4.103}/packages/rust/docs/reference/glob.md +0 -0
  376. {dirsql-0.4.102 → dirsql-0.4.103}/packages/rust/docs/reference/http-api.md +0 -0
  377. {dirsql-0.4.102 → dirsql-0.4.103}/packages/rust/docs/reference/path-tables.md +0 -0
  378. {dirsql-0.4.102 → dirsql-0.4.103}/packages/rust/docs/reference/sdk.md +0 -0
  379. {dirsql-0.4.102 → dirsql-0.4.103}/packages/rust/src/bin/dirsql.rs +0 -0
  380. {dirsql-0.4.102 → dirsql-0.4.103}/packages/rust/src/brace.rs +0 -0
  381. {dirsql-0.4.102 → dirsql-0.4.103}/packages/rust/src/cli/context.rs +0 -0
  382. {dirsql-0.4.102 → dirsql-0.4.103}/packages/rust/src/cli/execute.rs +0 -0
  383. {dirsql-0.4.102 → dirsql-0.4.103}/packages/rust/src/cli/init.rs +0 -0
  384. {dirsql-0.4.102 → dirsql-0.4.103}/packages/rust/src/cli/mod.rs +0 -0
  385. {dirsql-0.4.102 → dirsql-0.4.103}/packages/rust/src/cli/repl.rs +0 -0
  386. {dirsql-0.4.102 → dirsql-0.4.103}/packages/rust/src/cli/router.rs +0 -0
  387. {dirsql-0.4.102 → dirsql-0.4.103}/packages/rust/src/cli/run.rs +0 -0
  388. {dirsql-0.4.102 → dirsql-0.4.103}/packages/rust/src/cli/serialize.rs +0 -0
  389. {dirsql-0.4.102 → dirsql-0.4.103}/packages/rust/src/cli/server.rs +0 -0
  390. {dirsql-0.4.102 → dirsql-0.4.103}/packages/rust/src/cli/table.rs +0 -0
  391. {dirsql-0.4.102 → dirsql-0.4.103}/packages/rust/src/command.rs +0 -0
  392. {dirsql-0.4.102 → dirsql-0.4.103}/packages/rust/src/config.rs +0 -0
  393. {dirsql-0.4.102 → dirsql-0.4.103}/packages/rust/src/db.rs +0 -0
  394. {dirsql-0.4.102 → dirsql-0.4.103}/packages/rust/src/default_config.toml +0 -0
  395. {dirsql-0.4.102 → dirsql-0.4.103}/packages/rust/src/differ.rs +0 -0
  396. {dirsql-0.4.102 → dirsql-0.4.103}/packages/rust/src/extension_resolution.rs +0 -0
  397. {dirsql-0.4.102 → dirsql-0.4.103}/packages/rust/src/functions.rs +0 -0
  398. {dirsql-0.4.102 → dirsql-0.4.103}/packages/rust/src/infer.rs +0 -0
  399. {dirsql-0.4.102 → dirsql-0.4.103}/packages/rust/src/launcher.rs +0 -0
  400. {dirsql-0.4.102 → dirsql-0.4.103}/packages/rust/src/lib.rs +0 -0
  401. {dirsql-0.4.102 → dirsql-0.4.103}/packages/rust/src/listing.rs +0 -0
  402. {dirsql-0.4.102 → dirsql-0.4.103}/packages/rust/src/matcher.rs +0 -0
  403. {dirsql-0.4.102 → dirsql-0.4.103}/packages/rust/src/parsed_vtab.rs +0 -0
  404. {dirsql-0.4.102 → dirsql-0.4.103}/packages/rust/src/path_table.rs +0 -0
  405. {dirsql-0.4.102 → dirsql-0.4.103}/packages/rust/src/persist.rs +0 -0
  406. {dirsql-0.4.102 → dirsql-0.4.103}/packages/rust/src/posix_class.rs +0 -0
  407. {dirsql-0.4.102 → dirsql-0.4.103}/packages/rust/src/progress.rs +0 -0
  408. {dirsql-0.4.102 → dirsql-0.4.103}/packages/rust/src/row_event_flat.rs +0 -0
  409. {dirsql-0.4.102 → dirsql-0.4.103}/packages/rust/src/scanner.rs +0 -0
  410. {dirsql-0.4.102 → dirsql-0.4.103}/packages/rust/src/sql_literal.rs +0 -0
  411. {dirsql-0.4.102 → dirsql-0.4.103}/packages/rust/src/tree_walk.rs +0 -0
  412. {dirsql-0.4.102 → dirsql-0.4.103}/packages/rust/src/vtab.rs +0 -0
  413. {dirsql-0.4.102 → dirsql-0.4.103}/packages/rust/src/vtab_scaffold.rs +0 -0
  414. {dirsql-0.4.102 → dirsql-0.4.103}/packages/rust/src/watcher.rs +0 -0
  415. {dirsql-0.4.102 → dirsql-0.4.103}/pyproject.toml +0 -0
@@ -573,7 +573,7 @@ dependencies = [
573
573
 
574
574
  [[package]]
575
575
  name = "dirsql"
576
- version = "0.4.102"
576
+ version = "0.4.103"
577
577
  dependencies = [
578
578
  "assert_cmd",
579
579
  "axum",
@@ -625,7 +625,7 @@ dependencies = [
625
625
 
626
626
  [[package]]
627
627
  name = "dirsql-py-ext"
628
- version = "0.4.102"
628
+ version = "0.4.103"
629
629
  dependencies = [
630
630
  "dirsql",
631
631
  "pyo3",
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dirsql
3
- Version: 0.4.102
3
+ Version: 0.4.103
4
4
  Requires-Dist: bin-shim>=0.1
5
5
  Summary: Ephemeral SQL index over a local directory
6
6
  Keywords: sql,filesystem,directory,sqlite,index
@@ -163,7 +163,7 @@ table's paths outgrow that cap, dirsql splits them into the fewest
163
163
  consecutive runs that fit, runs the command once per run, and concatenates
164
164
  the rows it prints. Runs execute concurrently, one per CPU at most, like
165
165
  `xargs -P`, so rows keep their order within a run but not across runs; SQL
166
- never promised row order, so `ORDER BY` what you need. The command cannot tell: each run is an
166
+ never promised row order, so `ORDER BY` what you need. A table whose paths fit one run is also split, by file size, into up to one run per CPU once it holds at least 4 MiB of file data per run, so a few large files do not serialize behind one process. The command cannot tell: each run is an
167
167
  ordinary invocation with a subset of the paths. A command must therefore not
168
168
  assume one invocation sees every path — a count, a cross-file join, or a
169
169
  dedupe over `sys.argv[1:]` is per run, not per table. Do that work in SQL.
@@ -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.102"
7
+ version = "0.4.103"
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
@@ -0,0 +1 @@
1
+ **Changed** An `on-file` table with a few large files now runs its command over up to one run per CPU, split by file size at 4 MiB of data per run, instead of one run over all of them. Small tables still use one run.
@@ -163,7 +163,7 @@ table's paths outgrow that cap, dirsql splits them into the fewest
163
163
  consecutive runs that fit, runs the command once per run, and concatenates
164
164
  the rows it prints. Runs execute concurrently, one per CPU at most, like
165
165
  `xargs -P`, so rows keep their order within a run but not across runs; SQL
166
- never promised row order, so `ORDER BY` what you need. The command cannot tell: each run is an
166
+ never promised row order, so `ORDER BY` what you need. A table whose paths fit one run is also split, by file size, into up to one run per CPU once it holds at least 4 MiB of file data per run, so a few large files do not serialize behind one process. The command cannot tell: each run is an
167
167
  ordinary invocation with a subset of the paths. A command must therefore not
168
168
  assume one invocation sees every path — a count, a cross-file join, or a
169
169
  dedupe over `sys.argv[1:]` is per run, not per table. Do that work in SQL.
@@ -0,0 +1,7 @@
1
+ {
2
+ "command": "uv run python -m pytest tests/e2e/declared_table_name_test.py tests/e2e/fanout_test.py tests/e2e/extension_package_test.py tests/e2e/frontmatter_parse_speed_test.py tests/e2e/jsonl_parse_speed_test.py tests/e2e/plugin_extension_discovery_test.py tests/e2e/on_file_query_test.py tests/e2e/sigint_interrupt_test.py tests/e2e/use_case_notebook_test.py tests/e2e/server_speed_test.py tests/e2e/query_contract_test.py tests/e2e/plugin_discovery_test.py tests/e2e/use_case_transcripts_test.py -q",
3
+ "ran_at": 1791411055,
4
+ "exit_code": 0,
5
+ "commit": "7a93d0b97fe085a269b90d2b75c2a0aa22511c18",
6
+ "branch": "bot/1454-split-few-files"
7
+ }
@@ -0,0 +1,39 @@
1
+ ### `on-file` splits large tables by file size
2
+
3
+ #### Summary
4
+
5
+ A table whose paths fit one argument list is now also split into several
6
+ concurrent runs when its files hold at least 4 MiB in total per run, up
7
+ to one run per CPU. Small tables are unchanged.
8
+
9
+ #### Required changes
10
+
11
+ _None._
12
+
13
+ #### Deprecations removed
14
+
15
+ _None._
16
+
17
+ #### Behavior changes without code changes
18
+
19
+ - A hook may now see a subset of the table's paths even when the table is
20
+ small in path count. A hook must already not assume it sees every path;
21
+ do cross-file work in SQL.
22
+ - Rows from different runs have no defined order; add an `ORDER BY`.
23
+
24
+ #### Verification
25
+
26
+ ```bash
27
+ cd "$(mktemp -d)"
28
+ for i in 1 2 3 4; do head -c 5000000 /dev/zero | tr '\0' x > "f$i.txt"; done
29
+ printf 'echo "{\\"n\\":$#}"\n' > count.sh
30
+ cat > .dirsql.toml <<'TOML'
31
+ [[table]]
32
+ name = "t"
33
+ ddl = "CREATE TABLE t (n INTEGER)"
34
+ glob = "*.txt"
35
+ on-file = "sh count.sh"
36
+ TOML
37
+ dirsql query "SELECT count(*) AS runs, sum(n) AS paths FROM t" -c .dirsql.toml
38
+ # expected: paths is 4; runs is the smaller of 4 and the CPU count
39
+ ```
@@ -6,7 +6,7 @@ description = "Ephemeral SQL index over a local directory"
6
6
  # version stays for the binding crates (publish = false). The literal
7
7
  # intentionally lags the published version: putitoutthere rewrites it to
8
8
  # the planned release version at build time and never commits it back.
9
- version = "0.4.102"
9
+ version = "0.4.103"
10
10
  edition.workspace = true
11
11
  # Literal `license` (not `license.workspace = true`) because
12
12
  # putitoutthere's preflight check reads `[package].license` directly
@@ -163,7 +163,7 @@ table's paths outgrow that cap, dirsql splits them into the fewest
163
163
  consecutive runs that fit, runs the command once per run, and concatenates
164
164
  the rows it prints. Runs execute concurrently, one per CPU at most, like
165
165
  `xargs -P`, so rows keep their order within a run but not across runs; SQL
166
- never promised row order, so `ORDER BY` what you need. The command cannot tell: each run is an
166
+ never promised row order, so `ORDER BY` what you need. A table whose paths fit one run is also split, by file size, into up to one run per CPU once it holds at least 4 MiB of file data per run, so a few large files do not serialize behind one process. The command cannot tell: each run is an
167
167
  ordinary invocation with a subset of the paths. A command must therefore not
168
168
  assume one invocation sees every path — a count, a cross-file join, or a
169
169
  dedupe over `sys.argv[1:]` is per run, not per table. Do that work in SQL.
@@ -73,10 +73,12 @@ pub(crate) fn run_streaming(
73
73
  .iter()
74
74
  .map(|path| command::non_verbatim(&path.to_string_lossy()))
75
75
  .collect();
76
- let runs = chunks(&args, ARG_BUDGET.saturating_sub(argv_bytes(&argv)));
77
- let workers = std::thread::available_parallelism()
78
- .map_or(1, std::num::NonZero::get)
79
- .min(runs.len());
76
+ let cpus = std::thread::available_parallelism().map_or(1, std::num::NonZero::get);
77
+ let mut runs = chunks(&args, ARG_BUDGET.saturating_sub(argv_bytes(&argv)));
78
+ if runs.len() == 1 {
79
+ runs = spread(&args, &file_sizes(paths), cpus);
80
+ }
81
+ let workers = cpus.min(runs.len());
80
82
 
81
83
  let next = AtomicUsize::new(0);
82
84
  let aborted = AtomicBool::new(false);
@@ -202,6 +204,45 @@ fn chunks(args: &[String], budget: usize) -> Vec<&[String]> {
202
204
  out
203
205
  }
204
206
 
207
+ /// Bytes of file data worth a process of its own: below this, spawning
208
+ /// another invocation costs more than it saves.
209
+ const MIN_RUN_BYTES: u64 = 4 * 1024 * 1024;
210
+
211
+ /// Each path's size in bytes; a path that cannot be read counts as empty.
212
+ fn file_sizes(paths: &[PathBuf]) -> Vec<u64> {
213
+ paths
214
+ .iter()
215
+ .map(|path| std::fs::metadata(path).map_or(0, |meta| meta.len()))
216
+ .collect()
217
+ }
218
+
219
+ /// Split `args` into at most `parts` consecutive runs holding about equal
220
+ /// bytes of file data, preserving order, and never more runs than
221
+ /// [`MIN_RUN_BYTES`] of data justify. `sizes` runs parallel to `args`.
222
+ fn spread<'a>(args: &'a [String], sizes: &[u64], parts: usize) -> Vec<&'a [String]> {
223
+ let total: u64 = sizes.iter().sum();
224
+ let parts = parts
225
+ .min(args.len())
226
+ .min(usize::try_from(total / MIN_RUN_BYTES).unwrap_or(usize::MAX));
227
+ if parts <= 1 {
228
+ return vec![args];
229
+ }
230
+ let mut out = Vec::new();
231
+ let mut start = 0;
232
+ let mut seen = 0u64;
233
+ for (i, size) in sizes.iter().enumerate() {
234
+ seen += size;
235
+ let cut = u64::try_from(out.len() + 1).unwrap_or(u64::MAX);
236
+ let last = i + 1 == args.len();
237
+ if !last && out.len() + 1 < parts && seen * parts as u64 >= total * cut {
238
+ out.push(&args[start..=i]);
239
+ start = i + 1;
240
+ }
241
+ }
242
+ out.push(&args[start..]);
243
+ out
244
+ }
245
+
205
246
  #[cfg(test)]
206
247
  mod tests {
207
248
  use super::*;
@@ -344,6 +385,88 @@ mod tests {
344
385
  assert_eq!(total, 6000);
345
386
  }
346
387
 
388
+ fn files_of(dir: &Path, count: usize, bytes: usize) -> Vec<PathBuf> {
389
+ (0..count)
390
+ .map(|i| {
391
+ let path = dir.join(format!("f{i}.jsonl"));
392
+ std::fs::write(&path, vec![b'x'; bytes]).unwrap();
393
+ path
394
+ })
395
+ .collect()
396
+ }
397
+
398
+ fn invocations_over(paths: &[PathBuf]) -> usize {
399
+ run(
400
+ r#"sh -c 'echo "{\"n\":$#}"' sh"#,
401
+ Path::new("."),
402
+ Path::new("."),
403
+ paths,
404
+ )
405
+ .unwrap()
406
+ .len()
407
+ }
408
+
409
+ #[test]
410
+ fn spread_cuts_equal_bytes_in_order() {
411
+ let args = args(&["a", "b", "c", "d"]);
412
+ let mib = 1024 * 1024;
413
+ let runs = spread(&args, &[8 * mib, 8 * mib, 8 * mib, 8 * mib], 2);
414
+ assert_eq!(lens(&runs), [2, 2]);
415
+ assert_eq!(runs[1], ["c", "d"]);
416
+ }
417
+
418
+ #[test]
419
+ fn spread_never_makes_more_runs_than_the_data_justifies() {
420
+ let args = args(&["a", "b", "c", "d"]);
421
+ let mib = 1024 * 1024;
422
+ assert_eq!(lens(&spread(&args, &[5 * mib; 4], 16)), [1, 1, 1, 1]);
423
+ assert_eq!(lens(&spread(&args, &[mib; 4], 16)), [4]);
424
+ }
425
+
426
+ #[test]
427
+ fn spread_isolates_a_dominant_file() {
428
+ let args = args(&["a", "b", "c"]);
429
+ let mib = 1024 * 1024;
430
+ assert_eq!(lens(&spread(&args, &[100 * mib, mib, mib], 2)), [1, 2]);
431
+ }
432
+
433
+ #[test]
434
+ fn spread_cuts_at_each_even_share_of_the_bytes() {
435
+ let args = args(&["a", "b", "c", "d", "e"]);
436
+ let mib = 1024 * 1024;
437
+ let sizes = [5 * mib, 0, 5 * mib, 5 * mib, 0];
438
+ assert_eq!(lens(&spread(&args, &sizes, 3)), [1, 2, 2]);
439
+ }
440
+
441
+ #[test]
442
+ fn spread_never_ends_with_an_empty_run() {
443
+ let args = args(&["a", "b", "c"]);
444
+ let mib = 1024 * 1024;
445
+ let sizes = [20 * mib, 0, 20 * mib];
446
+ assert_eq!(lens(&spread(&args, &sizes, 3)), [1, 2]);
447
+ }
448
+
449
+ #[test]
450
+ fn spread_gives_unreadable_files_no_weight() {
451
+ let args = args(&["a", "b"]);
452
+ assert_eq!(lens(&spread(&args, &[0, 0], 4)), [2]);
453
+ }
454
+
455
+ #[test]
456
+ fn run_spreads_a_few_large_files_across_the_available_workers() {
457
+ let dir = tempfile::tempdir().unwrap();
458
+ let paths = files_of(dir.path(), 4, 4 * 1024 * 1024);
459
+ let runs = invocations_over(&paths);
460
+ assert!((2..=4).contains(&runs), "got {runs} invocations");
461
+ }
462
+
463
+ #[test]
464
+ fn run_keeps_a_few_small_files_in_one_invocation() {
465
+ let dir = tempfile::tempdir().unwrap();
466
+ let paths = files_of(dir.path(), 4, 100);
467
+ assert_eq!(invocations_over(&paths), 1);
468
+ }
469
+
347
470
  #[test]
348
471
  fn run_names_the_line_of_bad_output_after_earlier_blocks() {
349
472
  let err = run(
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