dirsql 0.4.91__tar.gz → 0.4.93__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 (374) hide show
  1. {dirsql-0.4.91 → dirsql-0.4.93}/Cargo.lock +2 -2
  2. {dirsql-0.4.91 → dirsql-0.4.93}/PKG-INFO +1 -1
  3. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/Cargo.toml +1 -1
  4. dirsql-0.4.93/packages/python/changelog.d/2026-10-06-config-dotnames.md +3 -0
  5. dirsql-0.4.93/packages/python/changelog.d/2026-10-06-config-links.md +3 -0
  6. dirsql-0.4.93/packages/python/e2e-attestations/claude-1258-config-dotnames.json +7 -0
  7. dirsql-0.4.93/packages/python/e2e-attestations/claude-1258-config-links.json +7 -0
  8. dirsql-0.4.93/packages/python/migrations.d/2026-10-06-config-dotnames.md +41 -0
  9. dirsql-0.4.93/packages/python/migrations.d/2026-10-06-config-links.md +43 -0
  10. {dirsql-0.4.91 → dirsql-0.4.93}/packages/rust/Cargo.toml +1 -1
  11. {dirsql-0.4.91 → dirsql-0.4.93}/packages/rust/src/matcher.rs +56 -4
  12. {dirsql-0.4.91 → dirsql-0.4.93}/packages/rust/src/scanner.rs +56 -16
  13. {dirsql-0.4.91 → dirsql-0.4.93}/Cargo.toml +0 -0
  14. {dirsql-0.4.91 → dirsql-0.4.93}/README.md +0 -0
  15. {dirsql-0.4.91 → dirsql-0.4.93}/dirsql/__init__.py +0 -0
  16. {dirsql-0.4.91 → dirsql-0.4.93}/dirsql/_async.py +0 -0
  17. {dirsql-0.4.91 → dirsql-0.4.93}/dirsql/_dirsql.pyi +0 -0
  18. {dirsql-0.4.91 → dirsql-0.4.93}/dirsql/cli/__init__.py +0 -0
  19. {dirsql-0.4.91 → dirsql-0.4.93}/dirsql/cli/discover_plugins/__init__.py +0 -0
  20. {dirsql-0.4.91 → dirsql-0.4.93}/dirsql/cli/discover_plugins/discovered_fragments.py +0 -0
  21. {dirsql-0.4.91 → dirsql-0.4.93}/dirsql/cli/discover_plugins/discovery_disabled.py +0 -0
  22. {dirsql-0.4.91 → dirsql-0.4.93}/dirsql/cli/discover_plugins/fragment_path.py +0 -0
  23. {dirsql-0.4.91 → dirsql-0.4.93}/dirsql/cli/discover_plugins/with_discovered_plugins.py +0 -0
  24. {dirsql-0.4.91 → dirsql-0.4.93}/dirsql/cli/main.py +0 -0
  25. {dirsql-0.4.91 → dirsql-0.4.93}/dirsql/cli/resolve_config_extensions.py +0 -0
  26. {dirsql-0.4.91 → dirsql-0.4.93}/dirsql/plan_entry_path.py +0 -0
  27. {dirsql-0.4.91 → dirsql-0.4.93}/dirsql/py.typed +0 -0
  28. {dirsql-0.4.91 → dirsql-0.4.93}/dirsql/read_config.py +0 -0
  29. {dirsql-0.4.91 → dirsql-0.4.93}/dirsql/resolve_configs_extension_specs.py +0 -0
  30. {dirsql-0.4.91 → dirsql-0.4.93}/dirsql/resolve_extension.py +0 -0
  31. {dirsql-0.4.91 → dirsql-0.4.93}/dirsql/resolve_package.py +0 -0
  32. {dirsql-0.4.91 → dirsql-0.4.93}/docs/.claude/CLAUDE.md +0 -0
  33. {dirsql-0.4.91 → dirsql-0.4.93}/docs/.vitepress/config.ts +0 -0
  34. {dirsql-0.4.91 → dirsql-0.4.93}/docs/.vitepress/theme/index.ts +0 -0
  35. {dirsql-0.4.91 → dirsql-0.4.93}/docs/.vitepress/theme/lang.ts +0 -0
  36. {dirsql-0.4.91 → dirsql-0.4.93}/docs/AGENTS.md +0 -0
  37. {dirsql-0.4.91 → dirsql-0.4.93}/docs/context/.gitattributes +0 -0
  38. {dirsql-0.4.91 → dirsql-0.4.93}/docs/context/recipes.md +0 -0
  39. {dirsql-0.4.91 → dirsql-0.4.93}/docs/context/troubleshooting.md +0 -0
  40. {dirsql-0.4.91 → dirsql-0.4.93}/docs/context/usage.md +0 -0
  41. {dirsql-0.4.91 → dirsql-0.4.93}/docs/explanation.md +0 -0
  42. {dirsql-0.4.91 → dirsql-0.4.93}/docs/getting-started.md +0 -0
  43. {dirsql-0.4.91 → dirsql-0.4.93}/docs/howto/agent-skill.md +0 -0
  44. {dirsql-0.4.91 → dirsql-0.4.93}/docs/howto/columns-from-paths.md +0 -0
  45. {dirsql-0.4.91 → dirsql-0.4.93}/docs/howto/define-tables.md +0 -0
  46. {dirsql-0.4.91 → dirsql-0.4.93}/docs/howto/embed.md +0 -0
  47. {dirsql-0.4.91 → dirsql-0.4.93}/docs/howto/extract-from-contents.md +0 -0
  48. {dirsql-0.4.91 → dirsql-0.4.93}/docs/howto/load-extension.md +0 -0
  49. {dirsql-0.4.91 → dirsql-0.4.93}/docs/howto/parse-files-into-columns.md +0 -0
  50. {dirsql-0.4.91 → dirsql-0.4.93}/docs/howto/persist.md +0 -0
  51. {dirsql-0.4.91 → dirsql-0.4.93}/docs/howto/query-json.md +0 -0
  52. {dirsql-0.4.91 → dirsql-0.4.93}/docs/howto/query-without-config.md +0 -0
  53. {dirsql-0.4.91 → dirsql-0.4.93}/docs/howto/react-to-changes.md +0 -0
  54. {dirsql-0.4.91 → dirsql-0.4.93}/docs/howto/search-by-meaning.md +0 -0
  55. {dirsql-0.4.91 → dirsql-0.4.93}/docs/howto/search-indexes.md +0 -0
  56. {dirsql-0.4.91 → dirsql-0.4.93}/docs/howto/skip-files.md +0 -0
  57. {dirsql-0.4.91 → dirsql-0.4.93}/docs/howto/write-a-plugin.md +0 -0
  58. {dirsql-0.4.91 → dirsql-0.4.93}/docs/index.md +0 -0
  59. {dirsql-0.4.91 → dirsql-0.4.93}/docs/package.json +0 -0
  60. {dirsql-0.4.91 → dirsql-0.4.93}/docs/plugins.md +0 -0
  61. {dirsql-0.4.91 → dirsql-0.4.93}/docs/pnpm-lock.yaml +0 -0
  62. {dirsql-0.4.91 → dirsql-0.4.93}/docs/pnpm-workspace.yaml +0 -0
  63. {dirsql-0.4.91 → dirsql-0.4.93}/docs/reference/cli.md +0 -0
  64. {dirsql-0.4.91 → dirsql-0.4.93}/docs/reference/columns.md +0 -0
  65. {dirsql-0.4.91 → dirsql-0.4.93}/docs/reference/config.md +0 -0
  66. {dirsql-0.4.91 → dirsql-0.4.93}/docs/reference/hooks.md +0 -0
  67. {dirsql-0.4.91 → dirsql-0.4.93}/docs/reference/http-api.md +0 -0
  68. {dirsql-0.4.91 → dirsql-0.4.93}/docs/reference/path-tables.md +0 -0
  69. {dirsql-0.4.91 → dirsql-0.4.93}/docs/reference/sdk.md +0 -0
  70. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/CHANGELOG.md +0 -0
  71. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/MIGRATIONS.md +0 -0
  72. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/README.md +0 -0
  73. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/changelog.d/2026-07-13-drop-cwd-config-auto-detect.md +0 -0
  74. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/changelog.d/2026-07-13-plugin-discovery.md +0 -0
  75. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/changelog.d/2026-07-13-rename-extract-to-on-file.md +0 -0
  76. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/changelog.d/2026-07-13-repeatable-config.md +0 -0
  77. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/changelog.d/2026-07-13-sdk-default-baked-in-config.md +0 -0
  78. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/changelog.d/2026-07-20-drop-implicit-files-table.md +0 -0
  79. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/changelog.d/2026-07-21-remove-glob-captures.md +0 -0
  80. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/changelog.d/2026-07-24-hookless-table-config-error.md +0 -0
  81. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/changelog.d/2026-07-24-remove-stat-fact-injection.md +0 -0
  82. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/changelog.d/2026-07-29-restore-python-310.md +0 -0
  83. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/changelog.d/2026-08-02-release-profile.md +0 -0
  84. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/changelog.d/2026-08-02-scan-failures.md +0 -0
  85. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/changelog.d/2026-08-03-discovery-ext-resolution.md +0 -0
  86. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/changelog.d/2026-08-03-manylinux-dynamic-binary.md +0 -0
  87. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/changelog.d/2026-08-03-python-no-ignore.md +0 -0
  88. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/changelog.d/2026-08-04-cast-lints.md +0 -0
  89. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/changelog.d/2026-08-04-cli-in-process.md +0 -0
  90. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/changelog.d/2026-08-20-curtaincall-dev-dependency.md +0 -0
  91. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/changelog.d/2026-08-20-declared-table-name.md +0 -0
  92. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/changelog.d/2026-09-04-config-paths-from-argv-module.md +0 -0
  93. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/changelog.d/2026-09-05-config-extension-loader-split.md +0 -0
  94. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/changelog.d/2026-09-05-resolve-config-extensions-split.md +0 -0
  95. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/changelog.d/2026-09-05-resolve-extension-split.md +0 -0
  96. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/changelog.d/2026-09-09-launcher-config-path-scan.md +0 -0
  97. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/changelog.d/2026-09-17-extension-resolution-via-core.md +0 -0
  98. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/changelog.d/2026-09-18-export-scan-failure.md +0 -0
  99. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/changelog.d/2026-09-18-flatten-row-event-in-core.md +0 -0
  100. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/changelog.d/2026-09-18-programmatic-extension-plan.md +0 -0
  101. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/changelog.d/2026-09-20-sigint-ends-a-run-in-progress.md +0 -0
  102. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/changelog.d/2026-09-24-query-rows-in-projection-order.md +0 -0
  103. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/changelog.d/2026-10-02-readme-docs-host.md +0 -0
  104. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/changelog.d/2026-10-03-one-glob-rule-for-config-globs.md +0 -0
  105. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/changelog.d/2026-10-03-path-table-directory-one-level.md +0 -0
  106. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/changelog.d/2026-10-04-path-table-dotfiles-hidden.md +0 -0
  107. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/changelog.d/2026-10-05-brace-groups-follow-bash.md +0 -0
  108. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/changelog.d/2026-10-05-cli-context.md +0 -0
  109. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/changelog.d/2026-10-05-gitignore-requires-repo.md +0 -0
  110. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/changelog.d/2026-10-05-path-table-node-modules-named.md +0 -0
  111. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/changelog.d/2026-10-05-path-table-symlinks.md +0 -0
  112. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/changelog.d/2026-10-05-path-table-trailing-slash.md +0 -0
  113. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/changelog.d/2026-10-05-unbalanced-brackets-literal.md +0 -0
  114. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/changelog.d/2026-10-06-config-braces.md +0 -0
  115. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/changelog.d/2026-10-06-config-directory.md +0 -0
  116. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/changelog.d/2026-10-06-config-gitignore.md +0 -0
  117. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/changelog.d/2026-10-06-config-globs-anchor-at-the-config.md +0 -0
  118. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/changelog.d/2026-10-06-one-glob-compiler.md +0 -0
  119. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/changelog.d/2026-10-06-plugin-no-default-records.md +0 -0
  120. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/changelog.d/2026-10-06-watch-broadcast.md +0 -0
  121. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/changelog.d/2026-10-06-zero-match-config-table-warning.md +0 -0
  122. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/changelog.d/README.md +0 -0
  123. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/conftest.py +0 -0
  124. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/docs/.claude/CLAUDE.md +0 -0
  125. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/docs/.vitepress/config.ts +0 -0
  126. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/docs/.vitepress/theme/index.ts +0 -0
  127. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/docs/.vitepress/theme/lang.ts +0 -0
  128. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/docs/AGENTS.md +0 -0
  129. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/docs/context/.gitattributes +0 -0
  130. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/docs/context/recipes.md +0 -0
  131. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/docs/context/troubleshooting.md +0 -0
  132. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/docs/context/usage.md +0 -0
  133. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/docs/explanation.md +0 -0
  134. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/docs/getting-started.md +0 -0
  135. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/docs/howto/agent-skill.md +0 -0
  136. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/docs/howto/columns-from-paths.md +0 -0
  137. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/docs/howto/define-tables.md +0 -0
  138. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/docs/howto/embed.md +0 -0
  139. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/docs/howto/extract-from-contents.md +0 -0
  140. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/docs/howto/load-extension.md +0 -0
  141. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/docs/howto/parse-files-into-columns.md +0 -0
  142. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/docs/howto/persist.md +0 -0
  143. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/docs/howto/query-json.md +0 -0
  144. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/docs/howto/query-without-config.md +0 -0
  145. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/docs/howto/react-to-changes.md +0 -0
  146. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/docs/howto/search-by-meaning.md +0 -0
  147. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/docs/howto/search-indexes.md +0 -0
  148. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/docs/howto/skip-files.md +0 -0
  149. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/docs/howto/write-a-plugin.md +0 -0
  150. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/docs/index.md +0 -0
  151. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/docs/package.json +0 -0
  152. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/docs/plugins.md +0 -0
  153. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/docs/pnpm-lock.yaml +0 -0
  154. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/docs/pnpm-workspace.yaml +0 -0
  155. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/docs/reference/cli.md +0 -0
  156. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/docs/reference/columns.md +0 -0
  157. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/docs/reference/config.md +0 -0
  158. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/docs/reference/hooks.md +0 -0
  159. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/docs/reference/http-api.md +0 -0
  160. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/docs/reference/path-tables.md +0 -0
  161. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/docs/reference/sdk.md +0 -0
  162. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/e2e-attestations/bot-1397-watch-broadcast.json +0 -0
  163. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/e2e-attestations/bot-1398-inotify-error.json +0 -0
  164. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/e2e-attestations/bot-1399-server-cors.json +0 -0
  165. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/e2e-attestations/bot-1401-watch-scope.json +0 -0
  166. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/e2e-attestations/bot-1407-child-place-depth.json +0 -0
  167. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/e2e-attestations/cc-keen-knuth-f11gyq.json +0 -0
  168. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/e2e-attestations/claude-1056-py-ofpf9.json +0 -0
  169. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/e2e-attestations/claude-1066-p1-resolve-extension.json +0 -0
  170. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/e2e-attestations/claude-1078-argv-config-paths-core.json +0 -0
  171. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/e2e-attestations/claude-1079-p2-resolve-config-extensions.json +0 -0
  172. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/e2e-attestations/claude-1080-share-vtab-scaffolding.json +0 -0
  173. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/e2e-attestations/claude-1081-indicatif-progress.json +0 -0
  174. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/e2e-attestations/claude-1096-watch-moved-dir.json +0 -0
  175. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/e2e-attestations/claude-1109-watch-moved-out.json +0 -0
  176. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/e2e-attestations/claude-1119-ext-plan.json +0 -0
  177. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/e2e-attestations/claude-1120-py-ext.json +0 -0
  178. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/e2e-attestations/claude-1122-ext-cleanup.json +0 -0
  179. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/e2e-attestations/claude-1130-codec-crates.json +0 -0
  180. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/e2e-attestations/claude-1131-flatten-row-event.json +0 -0
  181. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/e2e-attestations/claude-1139-sse-flatten.json +0 -0
  182. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/e2e-attestations/claude-1140-scan-failure-export.json +0 -0
  183. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/e2e-attestations/claude-1148-clippy-all-targets.json +0 -0
  184. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/e2e-attestations/claude-1164-sigint-fatal.json +0 -0
  185. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/e2e-attestations/claude-1170-projection-order.json +0 -0
  186. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/e2e-attestations/claude-1172-on-file-path.json +0 -0
  187. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/e2e-attestations/claude-1173-py-projection-order.json +0 -0
  188. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/e2e-attestations/claude-1184-win-rel-paths.json +0 -0
  189. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/e2e-attestations/claude-1185-win-abs-table-names.json +0 -0
  190. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/e2e-attestations/claude-1186-win-test-harness.json +0 -0
  191. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/e2e-attestations/claude-1196-join-index.json +0 -0
  192. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/e2e-attestations/claude-1199-glob-prefix.json +0 -0
  193. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/e2e-attestations/claude-1201-single-walk.json +0 -0
  194. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/e2e-attestations/claude-1204-embed-batch.json +0 -0
  195. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/e2e-attestations/claude-1207-win-argv-quote.json +0 -0
  196. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/e2e-attestations/claude-1208-win-nonverbatim-paths.json +0 -0
  197. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/e2e-attestations/claude-1215-on-file-batch.json +0 -0
  198. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/e2e-attestations/claude-1216-on-file-cleanup.json +0 -0
  199. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/e2e-attestations/claude-1223-config-glob-rule.json +0 -0
  200. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/e2e-attestations/claude-1223-dir-one-level.json +0 -0
  201. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/e2e-attestations/claude-1225-plugin-no-default.json +0 -0
  202. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/e2e-attestations/claude-1226-stale-docs.json +0 -0
  203. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/e2e-attestations/claude-1232-anchor-plumbing.json +0 -0
  204. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/e2e-attestations/claude-1232-config-anchor.json +0 -0
  205. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/e2e-attestations/claude-1232-multi-watch.json +0 -0
  206. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/e2e-attestations/claude-1232-zero-match.json +0 -0
  207. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/e2e-attestations/claude-1238-parallel-walk.json +0 -0
  208. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/e2e-attestations/claude-1241-content-prefetch.json +0 -0
  209. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/e2e-attestations/claude-1243-ingest-perf.json +0 -0
  210. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/e2e-attestations/claude-1249-dotfiles.json +0 -0
  211. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/e2e-attestations/claude-1256-symlinks.json +0 -0
  212. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/e2e-attestations/claude-1257-trailing-slash.json +0 -0
  213. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/e2e-attestations/claude-1258-config-braces.json +0 -0
  214. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/e2e-attestations/claude-1258-config-directory.json +0 -0
  215. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/e2e-attestations/claude-1258-config-gitignore.json +0 -0
  216. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/e2e-attestations/claude-1258-one-pattern.json +0 -0
  217. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/e2e-attestations/claude-1262-brace-literal.json +0 -0
  218. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/e2e-attestations/claude-1264-context.json +0 -0
  219. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/e2e-attestations/claude-1267-posix-classes.json +0 -0
  220. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/e2e-attestations/claude-1268-unbalanced-brackets.json +0 -0
  221. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/e2e-attestations/claude-1269-utf8-chars.json +0 -0
  222. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/e2e-attestations/claude-1271-node-modules-named.json +0 -0
  223. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/e2e-attestations/claude-1272-ancestor-gitignore.json +0 -0
  224. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/e2e-attestations/claude-1273-walk-prune.json +0 -0
  225. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/e2e-attestations/claude-1285-ingest-fast.json +0 -0
  226. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/e2e-attestations/claude-1286-nested-repo.json +0 -0
  227. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/e2e-attestations/claude-1305-glob-speed.json +0 -0
  228. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/e2e-attestations/claude-1308-glob-speed.json +0 -0
  229. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/e2e-attestations/claude-1310-glob-speed.json +0 -0
  230. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/e2e-attestations/claude-1311-glob-speed.json +0 -0
  231. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/e2e-attestations/claude-1312-glob-speed.json +0 -0
  232. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/e2e-attestations/claude-1318-lazy-stat.json +0 -0
  233. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/e2e-attestations/claude-1320-walk-speed.json +0 -0
  234. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/e2e-attestations/claude-1322-walk-readdir.json +0 -0
  235. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/e2e-attestations/claude-1325-parallel-walk.json +0 -0
  236. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/e2e-attestations/claude-1326-stream-rows.json +0 -0
  237. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/e2e-attestations/claude-1330-python-dirsql-patch.json +0 -0
  238. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/e2e-attestations/claude-1330-python-extensions-patch.json +0 -0
  239. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/e2e-attestations/claude-1330-scanner-effects.json +0 -0
  240. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/e2e-attestations/claude-1330-scanner-gitignore.json +0 -0
  241. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/e2e-attestations/claude-1330-vtab-prefetch-flag.json +0 -0
  242. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/e2e-attestations/claude-1330-vtab-read.json +0 -0
  243. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/e2e-attestations/claude-1351-dot-dirs.json +0 -0
  244. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/e2e-attestations/claude-819-oneshot-timeout.json +0 -0
  245. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/e2e-attestations/claude-827-unquote-doubled-quotes.json +0 -0
  246. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/e2e-attestations/claude-epic-953-slice2-reedline.json +0 -0
  247. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/e2e-attestations/claude-epic-953-slice3-format.json +0 -0
  248. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/e2e-attestations/claude-epic-953-stacked-prs-x59wm3.json +0 -0
  249. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/e2e-attestations/claude-github-issue-825-e4mhhp.json +0 -0
  250. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/e2e-attestations/claude-issue-951-0eease.json +0 -0
  251. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/e2e-attestations/claude-issue-962-0jjrfv.json +0 -0
  252. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/e2e-attestations/claude-issue-986-red-test-e7sjrb.json +0 -0
  253. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/e2e-attestations/claude-tackle-1034-cachesplit.json +0 -0
  254. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/e2e-attestations/claude-tackle-1042-py12.json +0 -0
  255. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/e2e-attestations/claude-tackle-956-xzen74.json +0 -0
  256. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/e2e-attestations/claude-tackle-957-lrm0z6-worker-calls.json +0 -0
  257. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/e2e-attestations/claude-tackle-957-lrm0z6.json +0 -0
  258. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/e2e-attestations/claude-tackle-975-n8mc2h.json +0 -0
  259. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/migrations.d/2026-07-13-drop-cwd-config-auto-detect.md +0 -0
  260. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/migrations.d/2026-07-13-rename-extract-to-on-file.md +0 -0
  261. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/migrations.d/2026-07-13-sdk-default-baked-in-config.md +0 -0
  262. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/migrations.d/2026-07-20-drop-implicit-files-table.md +0 -0
  263. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/migrations.d/2026-07-21-remove-glob-captures.md +0 -0
  264. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/migrations.d/2026-07-24-hookless-table-config-error.md +0 -0
  265. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/migrations.d/2026-07-24-remove-stat-fact-injection.md +0 -0
  266. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/migrations.d/2026-07-29-restore-python-310.md +0 -0
  267. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/migrations.d/2026-08-04-cli-in-process.md +0 -0
  268. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/migrations.d/2026-08-20-declared-table-name.md +0 -0
  269. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/migrations.d/2026-09-20-sigint-ends-a-run-in-progress.md +0 -0
  270. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/migrations.d/2026-09-24-query-rows-in-projection-order.md +0 -0
  271. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/migrations.d/2026-10-02-readme-docs-host.md +0 -0
  272. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/migrations.d/2026-10-03-one-glob-rule-for-config-globs.md +0 -0
  273. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/migrations.d/2026-10-03-path-table-directory-one-level.md +0 -0
  274. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/migrations.d/2026-10-04-path-table-dotfiles-hidden.md +0 -0
  275. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/migrations.d/2026-10-05-brace-groups-follow-bash.md +0 -0
  276. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/migrations.d/2026-10-05-cli-context.md +0 -0
  277. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/migrations.d/2026-10-05-gitignore-requires-repo.md +0 -0
  278. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/migrations.d/2026-10-05-path-table-node-modules-named.md +0 -0
  279. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/migrations.d/2026-10-05-path-table-symlinks.md +0 -0
  280. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/migrations.d/2026-10-05-path-table-trailing-slash.md +0 -0
  281. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/migrations.d/2026-10-05-unbalanced-brackets-literal.md +0 -0
  282. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/migrations.d/2026-10-06-config-braces.md +0 -0
  283. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/migrations.d/2026-10-06-config-directory.md +0 -0
  284. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/migrations.d/2026-10-06-config-gitignore.md +0 -0
  285. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/migrations.d/2026-10-06-config-globs-anchor-at-the-config.md +0 -0
  286. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/migrations.d/2026-10-06-one-glob-compiler.md +0 -0
  287. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/migrations.d/2026-10-06-plugin-no-default-records.md +0 -0
  288. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/migrations.d/2026-10-06-watch-broadcast.md +0 -0
  289. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/migrations.d/2026-10-06-zero-match-config-table-warning.md +0 -0
  290. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/migrations.d/README.md +0 -0
  291. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/src/lib.rs +0 -0
  292. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/testing-conventions.toml +0 -0
  293. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/tests/__init__.py +0 -0
  294. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/tests/conftest.py +0 -0
  295. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/tests/e2e/__init__.py +0 -0
  296. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/tests/e2e/fixtures/dirsql_plugin_fixture/__init__.py +0 -0
  297. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/tests/e2e/fixtures/dirsql_plugin_fixture/dirsql.toml +0 -0
  298. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/tests/e2e/speed_of_light.py +0 -0
  299. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/tests/integration/__init__.py +0 -0
  300. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/tests/integration/binding/__init__.py +0 -0
  301. {dirsql-0.4.91 → dirsql-0.4.93}/packages/python/tests/integration/hermetic/__init__.py +0 -0
  302. {dirsql-0.4.91 → dirsql-0.4.93}/packages/rust/CHANGELOG.md +0 -0
  303. {dirsql-0.4.91 → dirsql-0.4.93}/packages/rust/MIGRATIONS.md +0 -0
  304. {dirsql-0.4.91 → dirsql-0.4.93}/packages/rust/README.md +0 -0
  305. {dirsql-0.4.91 → dirsql-0.4.93}/packages/rust/benches/db_bench.rs +0 -0
  306. {dirsql-0.4.91 → dirsql-0.4.93}/packages/rust/benches/differ_bench.rs +0 -0
  307. {dirsql-0.4.91 → dirsql-0.4.93}/packages/rust/benches/matcher_bench.rs +0 -0
  308. {dirsql-0.4.91 → dirsql-0.4.93}/packages/rust/benches/scanner_bench.rs +0 -0
  309. {dirsql-0.4.91 → dirsql-0.4.93}/packages/rust/docs/context/.gitattributes +0 -0
  310. {dirsql-0.4.91 → dirsql-0.4.93}/packages/rust/docs/context/recipes.md +0 -0
  311. {dirsql-0.4.91 → dirsql-0.4.93}/packages/rust/docs/context/troubleshooting.md +0 -0
  312. {dirsql-0.4.91 → dirsql-0.4.93}/packages/rust/docs/context/usage.md +0 -0
  313. {dirsql-0.4.91 → dirsql-0.4.93}/packages/rust/docs/explanation.md +0 -0
  314. {dirsql-0.4.91 → dirsql-0.4.93}/packages/rust/docs/getting-started.md +0 -0
  315. {dirsql-0.4.91 → dirsql-0.4.93}/packages/rust/docs/howto/agent-skill.md +0 -0
  316. {dirsql-0.4.91 → dirsql-0.4.93}/packages/rust/docs/howto/columns-from-paths.md +0 -0
  317. {dirsql-0.4.91 → dirsql-0.4.93}/packages/rust/docs/howto/define-tables.md +0 -0
  318. {dirsql-0.4.91 → dirsql-0.4.93}/packages/rust/docs/howto/embed.md +0 -0
  319. {dirsql-0.4.91 → dirsql-0.4.93}/packages/rust/docs/howto/extract-from-contents.md +0 -0
  320. {dirsql-0.4.91 → dirsql-0.4.93}/packages/rust/docs/howto/load-extension.md +0 -0
  321. {dirsql-0.4.91 → dirsql-0.4.93}/packages/rust/docs/howto/parse-files-into-columns.md +0 -0
  322. {dirsql-0.4.91 → dirsql-0.4.93}/packages/rust/docs/howto/persist.md +0 -0
  323. {dirsql-0.4.91 → dirsql-0.4.93}/packages/rust/docs/howto/query-json.md +0 -0
  324. {dirsql-0.4.91 → dirsql-0.4.93}/packages/rust/docs/howto/query-without-config.md +0 -0
  325. {dirsql-0.4.91 → dirsql-0.4.93}/packages/rust/docs/howto/react-to-changes.md +0 -0
  326. {dirsql-0.4.91 → dirsql-0.4.93}/packages/rust/docs/howto/search-by-meaning.md +0 -0
  327. {dirsql-0.4.91 → dirsql-0.4.93}/packages/rust/docs/howto/search-indexes.md +0 -0
  328. {dirsql-0.4.91 → dirsql-0.4.93}/packages/rust/docs/howto/skip-files.md +0 -0
  329. {dirsql-0.4.91 → dirsql-0.4.93}/packages/rust/docs/howto/write-a-plugin.md +0 -0
  330. {dirsql-0.4.91 → dirsql-0.4.93}/packages/rust/docs/index.md +0 -0
  331. {dirsql-0.4.91 → dirsql-0.4.93}/packages/rust/docs/plugins.md +0 -0
  332. {dirsql-0.4.91 → dirsql-0.4.93}/packages/rust/docs/reference/cli.md +0 -0
  333. {dirsql-0.4.91 → dirsql-0.4.93}/packages/rust/docs/reference/columns.md +0 -0
  334. {dirsql-0.4.91 → dirsql-0.4.93}/packages/rust/docs/reference/config.md +0 -0
  335. {dirsql-0.4.91 → dirsql-0.4.93}/packages/rust/docs/reference/hooks.md +0 -0
  336. {dirsql-0.4.91 → dirsql-0.4.93}/packages/rust/docs/reference/http-api.md +0 -0
  337. {dirsql-0.4.91 → dirsql-0.4.93}/packages/rust/docs/reference/path-tables.md +0 -0
  338. {dirsql-0.4.91 → dirsql-0.4.93}/packages/rust/docs/reference/sdk.md +0 -0
  339. {dirsql-0.4.91 → dirsql-0.4.93}/packages/rust/src/bin/dirsql.rs +0 -0
  340. {dirsql-0.4.91 → dirsql-0.4.93}/packages/rust/src/brace.rs +0 -0
  341. {dirsql-0.4.91 → dirsql-0.4.93}/packages/rust/src/cli/context.rs +0 -0
  342. {dirsql-0.4.91 → dirsql-0.4.93}/packages/rust/src/cli/execute.rs +0 -0
  343. {dirsql-0.4.91 → dirsql-0.4.93}/packages/rust/src/cli/init.rs +0 -0
  344. {dirsql-0.4.91 → dirsql-0.4.93}/packages/rust/src/cli/mod.rs +0 -0
  345. {dirsql-0.4.91 → dirsql-0.4.93}/packages/rust/src/cli/repl.rs +0 -0
  346. {dirsql-0.4.91 → dirsql-0.4.93}/packages/rust/src/cli/router.rs +0 -0
  347. {dirsql-0.4.91 → dirsql-0.4.93}/packages/rust/src/cli/run.rs +0 -0
  348. {dirsql-0.4.91 → dirsql-0.4.93}/packages/rust/src/cli/serialize.rs +0 -0
  349. {dirsql-0.4.91 → dirsql-0.4.93}/packages/rust/src/cli/server.rs +0 -0
  350. {dirsql-0.4.91 → dirsql-0.4.93}/packages/rust/src/cli/table.rs +0 -0
  351. {dirsql-0.4.91 → dirsql-0.4.93}/packages/rust/src/command.rs +0 -0
  352. {dirsql-0.4.91 → dirsql-0.4.93}/packages/rust/src/config.rs +0 -0
  353. {dirsql-0.4.91 → dirsql-0.4.93}/packages/rust/src/db.rs +0 -0
  354. {dirsql-0.4.91 → dirsql-0.4.93}/packages/rust/src/default_config.toml +0 -0
  355. {dirsql-0.4.91 → dirsql-0.4.93}/packages/rust/src/differ.rs +0 -0
  356. {dirsql-0.4.91 → dirsql-0.4.93}/packages/rust/src/extension_resolution.rs +0 -0
  357. {dirsql-0.4.91 → dirsql-0.4.93}/packages/rust/src/functions.rs +0 -0
  358. {dirsql-0.4.91 → dirsql-0.4.93}/packages/rust/src/infer.rs +0 -0
  359. {dirsql-0.4.91 → dirsql-0.4.93}/packages/rust/src/launcher.rs +0 -0
  360. {dirsql-0.4.91 → dirsql-0.4.93}/packages/rust/src/lib.rs +0 -0
  361. {dirsql-0.4.91 → dirsql-0.4.93}/packages/rust/src/listing.rs +0 -0
  362. {dirsql-0.4.91 → dirsql-0.4.93}/packages/rust/src/on_file.rs +0 -0
  363. {dirsql-0.4.91 → dirsql-0.4.93}/packages/rust/src/parsed_vtab.rs +0 -0
  364. {dirsql-0.4.91 → dirsql-0.4.93}/packages/rust/src/path_table.rs +0 -0
  365. {dirsql-0.4.91 → dirsql-0.4.93}/packages/rust/src/persist.rs +0 -0
  366. {dirsql-0.4.91 → dirsql-0.4.93}/packages/rust/src/posix_class.rs +0 -0
  367. {dirsql-0.4.91 → dirsql-0.4.93}/packages/rust/src/progress.rs +0 -0
  368. {dirsql-0.4.91 → dirsql-0.4.93}/packages/rust/src/row_event_flat.rs +0 -0
  369. {dirsql-0.4.91 → dirsql-0.4.93}/packages/rust/src/sql_literal.rs +0 -0
  370. {dirsql-0.4.91 → dirsql-0.4.93}/packages/rust/src/tree_walk.rs +0 -0
  371. {dirsql-0.4.91 → dirsql-0.4.93}/packages/rust/src/vtab.rs +0 -0
  372. {dirsql-0.4.91 → dirsql-0.4.93}/packages/rust/src/vtab_scaffold.rs +0 -0
  373. {dirsql-0.4.91 → dirsql-0.4.93}/packages/rust/src/watcher.rs +0 -0
  374. {dirsql-0.4.91 → dirsql-0.4.93}/pyproject.toml +0 -0
@@ -552,7 +552,7 @@ checksum = "6184e33543162437515c2e2b48714794e37845ec9851711914eec9d308f6ebe8"
552
552
 
553
553
  [[package]]
554
554
  name = "dirsql"
555
- version = "0.4.91"
555
+ version = "0.4.93"
556
556
  dependencies = [
557
557
  "assert_cmd",
558
558
  "axum",
@@ -603,7 +603,7 @@ dependencies = [
603
603
 
604
604
  [[package]]
605
605
  name = "dirsql-py-ext"
606
- version = "0.4.91"
606
+ version = "0.4.93"
607
607
  dependencies = [
608
608
  "dirsql",
609
609
  "pyo3",
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dirsql
3
- Version: 0.4.91
3
+ Version: 0.4.93
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
@@ -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.91"
7
+ version = "0.4.93"
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,3 @@
1
+ **Changed** A declared `[[table]] glob` no longer matches a dot-named file or
2
+ directory unless the glob spells it: `**/*.md` skips `.env.md` and
3
+ `.hid/z.md`, while `.hid/*.md` lists `.hid/z.md`.
@@ -0,0 +1,3 @@
1
+ **Changed** A declared `[[table]] glob` skips `node_modules` unless the glob
2
+ names it, and follows symlinks, as a path-table does. `**/*.js` no longer lists
3
+ `node_modules/...`; `link.md -> top.md` and `linkdir/*` now list their rows.
@@ -0,0 +1,7 @@
1
+ {
2
+ "command": "uv run python -m pytest tests/e2e/glob_speed_dotfiles_test.py tests/e2e/glob_speed_recursive_test.py tests/e2e/glob_speed_matchers_test.py tests/e2e/query_contract_test.py -x -q",
3
+ "ran_at": 1791335904,
4
+ "exit_code": 0,
5
+ "commit": "dd146cf1e0f60982d186b8393e96ca484fb4b0b8",
6
+ "branch": "claude/1258-config-dotnames"
7
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "command": "uv run python -m pytest tests/e2e/glob_speed_symlink_test.py tests/e2e/glob_speed_node_modules_test.py tests/e2e/glob_speed_dotfiles_test.py tests/e2e/glob_speed_matchers_test.py tests/e2e/query_contract_test.py -x -q",
3
+ "ran_at": 1791338642,
4
+ "exit_code": 0,
5
+ "commit": "81890d53f01c2d6e6e833e0748a6ff952e3382c5",
6
+ "branch": "claude/1258-config-links"
7
+ }
@@ -0,0 +1,41 @@
1
+ ### A config glob hides dot-named entries unless it spells them
2
+
3
+ #### Summary
4
+
5
+ `glob = "**/*.md"` used to match `.env.md` and everything under `.hid/`. It
6
+ now matches neither, as a path-table and bash (with `dotglob` off) do. A config
7
+ that read dot-named files without naming them loses those rows.
8
+
9
+ #### Required changes
10
+
11
+ | Before | After |
12
+ | --- | --- |
13
+ | `glob = "**/*.md"` (included `.hid/z.md`) | `glob = ".hid/*.md"` or `glob = "{*,.hid}/*.md"` |
14
+
15
+ #### Deprecations removed
16
+
17
+ _None._
18
+
19
+ #### Behavior changes without code changes
20
+
21
+ - A dot-named component matches only where the glob spells a dot (`.hid`,
22
+ `.*`).
23
+ - A glob that names the dot directory (`.hid/*.md`) is unchanged.
24
+
25
+ #### Verification
26
+
27
+ ```bash
28
+ cd "$(mktemp -d)"
29
+ mkdir .hid
30
+ echo '[{"p":"a"}]' > a.json
31
+ echo '[{"p":"h"}]' > .hid/h.json
32
+ cat > .dirsql.toml <<'TOML'
33
+ [[table]]
34
+ name = "t"
35
+ glob = "**/*.json"
36
+ ddl = "CREATE TABLE t (p TEXT)"
37
+ on-file = "jq -sc add"
38
+ TOML
39
+ dirsql query "SELECT p FROM t" -c .dirsql.toml
40
+ # expected: [{"p":"a"}]
41
+ ```
@@ -0,0 +1,43 @@
1
+ ### Config globs skip node_modules unless named, and follow symlinks
2
+
3
+ #### Summary
4
+
5
+ `glob = "**/*.js"` used to list files under any `node_modules`; it now does
6
+ not, unless a component of the glob is `node_modules`. Symlinked files and
7
+ directories, which a config glob used to ignore, are now followed as in a
8
+ path-table and in bash.
9
+
10
+ #### Required changes
11
+
12
+ | Before | After |
13
+ | --- | --- |
14
+ | `glob = "**/*.js"` (included `node_modules/`) | `glob = "node_modules/**/*.js"` to list it |
15
+
16
+ #### Deprecations removed
17
+
18
+ _None._
19
+
20
+ #### Behavior changes without code changes
21
+
22
+ - A glob with no `node_modules` component never matches under one.
23
+ - A symlinked file or directory the glob reaches now yields rows.
24
+
25
+ #### Verification
26
+
27
+ ```bash
28
+ cd "$(mktemp -d)"
29
+ mkdir real node_modules
30
+ echo '[{"p":"r"}]' > real/r.json
31
+ echo '[{"p":"n"}]' > node_modules/n.json
32
+ ln -s real linkdir
33
+ cat > .dirsql.toml <<'TOML'
34
+ [[table]]
35
+ name = "t"
36
+ glob = "**/*.json"
37
+ ddl = "CREATE TABLE t (p TEXT)"
38
+ on-file = "jq -sc add"
39
+ TOML
40
+ dirsql query "SELECT p FROM t" -c .dirsql.toml
41
+ # expected: no row from node_modules; rows for real/ (symlinked linkdir/ is
42
+ # reached by `linkdir/*.json`, not by `**`)
43
+ ```
@@ -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.91"
9
+ version = "0.4.93"
10
10
  edition.workspace = true
11
11
  # Literal `license` (not `license.workspace = true`) because
12
12
  # putitoutthere's preflight check reads `[package].license` directly
@@ -1,7 +1,8 @@
1
1
  use crate::posix_class::expand_posix_classes;
2
- use crate::scanner::{PathGlob, compile_glob};
2
+ use crate::scanner::{PathGlob, compile_glob, compile_globs};
3
3
  use globset::GlobBuilder;
4
4
  use regex::{Regex, RegexBuilder};
5
+ use std::ffi::OsStr;
5
6
  use std::path::Path;
6
7
 
7
8
  #[derive(Debug, thiserror::Error)]
@@ -79,23 +80,30 @@ pub struct MatchResult {
79
80
  pub table_name: String,
80
81
  }
81
82
 
83
+ const NODE_MODULES: &str = "node_modules";
84
+
82
85
  #[derive(Clone)]
83
86
  struct PatternEntry {
84
87
  pattern: PathGlob,
85
88
  table_name: String,
89
+ names_node_modules: bool,
86
90
  }
87
91
 
88
92
  /// Maps file paths to table names based on glob patterns.
89
93
  /// Every matching pattern fires: a file matching N patterns yields N
90
94
  /// `MatchResult`s (one per table), so a file can belong to multiple tables.
91
- /// An ignore list filters paths entirely. `{name}` placeholders in glob
92
- /// patterns are accepted and behave like `*`.
95
+ /// An ignore list filters paths entirely.
93
96
  #[derive(Clone)]
94
97
  pub struct TableMatcher {
95
98
  entries: Vec<PatternEntry>,
96
99
  ignore_set: Vec<Pattern>,
97
100
  ignore_dir_set: Vec<Pattern>,
98
101
  gitignore: bool,
102
+ walk: PathGlob,
103
+ }
104
+
105
+ fn has_node_modules_component(path: &Path) -> bool {
106
+ path.components().any(|c| c.as_os_str() == NODE_MODULES)
99
107
  }
100
108
 
101
109
  impl TableMatcher {
@@ -106,8 +114,11 @@ impl TableMatcher {
106
114
  entries.push(PatternEntry {
107
115
  pattern: compile_glob(pattern)?,
108
116
  table_name: table_name.to_string(),
117
+ names_node_modules: pattern.split('/').any(|c| c == NODE_MODULES),
109
118
  });
110
119
  }
120
+ let globs: Vec<&str> = mappings.iter().map(|(pattern, _)| *pattern).collect();
121
+ let walk = compile_globs(&globs)?;
111
122
 
112
123
  let mut ignore_set = Vec::new();
113
124
  let mut ignore_dir_set = Vec::new();
@@ -123,6 +134,7 @@ impl TableMatcher {
123
134
  ignore_set,
124
135
  ignore_dir_set,
125
136
  gitignore: false,
137
+ walk,
126
138
  })
127
139
  }
128
140
 
@@ -142,13 +154,29 @@ impl TableMatcher {
142
154
  pub fn match_all(&self, path: &Path) -> Vec<MatchResult> {
143
155
  self.entries
144
156
  .iter()
145
- .filter(|entry| entry.pattern.is_match(path))
157
+ .filter(|entry| {
158
+ entry.pattern.is_match_unhidden(path)
159
+ && (entry.names_node_modules || !has_node_modules_component(path))
160
+ })
146
161
  .map(|entry| MatchResult {
147
162
  table_name: entry.table_name.clone(),
148
163
  })
149
164
  .collect()
150
165
  }
151
166
 
167
+ /// The one glob a walk for every table at once follows.
168
+ pub(crate) fn walk_glob(&self) -> &PathGlob {
169
+ &self.walk
170
+ }
171
+
172
+ /// Whether the walk may skip a directory called `name` outright: it is
173
+ /// `node_modules` and no table's glob names it.
174
+ pub(crate) fn prunes_directory(&self, name: &OsStr) -> bool {
175
+ name == NODE_MODULES
176
+ && !self.entries.is_empty()
177
+ && !self.entries.iter().any(|e| e.names_node_modules)
178
+ }
179
+
152
180
  /// Returns true if the path matches any ignore pattern.
153
181
  pub fn is_ignored(&self, path: &Path) -> bool {
154
182
  self.ignore_set.iter().any(|p| p.is_match(path))
@@ -188,6 +216,30 @@ mod tests {
188
216
  assert!(matcher.with_gitignore(true).respects_gitignore());
189
217
  }
190
218
 
219
+ #[test]
220
+ fn node_modules_is_skipped_unless_a_table_names_it() {
221
+ let matcher =
222
+ TableMatcher::new(&[("**/*.js", "all"), ("node_modules/*.js", "nm")], &[]).unwrap();
223
+ assert_eq!(names(&matcher, "pkg/a.js"), vec!["all"]);
224
+ assert_eq!(
225
+ names(&matcher, "pkg/node_modules/a.js"),
226
+ Vec::<String>::new()
227
+ );
228
+ assert_eq!(names(&matcher, "node_modules/a.js"), vec!["nm"]);
229
+ }
230
+
231
+ #[test]
232
+ fn the_walk_prunes_node_modules_only_while_no_table_names_it() {
233
+ let name = OsStr::new("node_modules");
234
+ let plain = TableMatcher::new(&[("**/*.js", "t")], &[]).unwrap();
235
+ let naming = TableMatcher::new(&[("node_modules/*.js", "t")], &[]).unwrap();
236
+ let none = TableMatcher::new(&[], &[]).unwrap();
237
+ assert!(plain.prunes_directory(name));
238
+ assert!(!plain.prunes_directory(OsStr::new("src")));
239
+ assert!(!naming.prunes_directory(name));
240
+ assert!(!none.prunes_directory(name));
241
+ }
242
+
191
243
  #[test]
192
244
  fn match_all_returns_empty_for_no_match() {
193
245
  let matcher = TableMatcher::new(&[("*.csv", "data")], &[]).unwrap();
@@ -104,7 +104,7 @@ fn scan_below(
104
104
  // regardless of the absolute root directory.
105
105
  let walker = Walk {
106
106
  ignore: matcher,
107
- glob: None,
107
+ glob: Some(matcher.walk_glob()),
108
108
  gitignore,
109
109
  in_repo: repo.is_some(),
110
110
  frames: repo.map_or_else(Vec::new, |top| {
@@ -236,7 +236,7 @@ enum Kind {
236
236
  }
237
237
 
238
238
  impl PathGlob {
239
- fn spells_dot_name(&self, name: &OsStr) -> bool {
239
+ pub(crate) fn spells_dot_name(&self, name: &OsStr) -> bool {
240
240
  self.spelled_dot_names
241
241
  .iter()
242
242
  .any(|p| p.is_match(Path::new(name)))
@@ -246,6 +246,17 @@ impl PathGlob {
246
246
  self.files.iter().any(|p| p.is_match(rel_path))
247
247
  }
248
248
 
249
+ /// [`is_match`](Self::is_match), and every dot-named component of the path
250
+ /// is one the glob spells.
251
+ pub(crate) fn is_match_unhidden(&self, rel_path: &Path) -> bool {
252
+ self.is_match(rel_path)
253
+ && rel_path
254
+ .components()
255
+ .map(|c| c.as_os_str())
256
+ .filter(|name| is_dot_named(name))
257
+ .all(|name| self.spells_dot_name(name))
258
+ }
259
+
249
260
  fn has_components(&self) -> bool {
250
261
  !self.components.is_empty()
251
262
  }
@@ -307,7 +318,16 @@ impl PathGlob {
307
318
  /// it a lone `*` would cross `/` and the explicit non-recursive spelling would
308
319
  /// silently recurse. `**` still crosses separators.
309
320
  pub fn compile_glob(pattern: &str) -> Result<PathGlob, GlobError> {
310
- let words = crate::brace::expand(pattern);
321
+ compile_globs(&[pattern])
322
+ }
323
+
324
+ /// One [`PathGlob`] over every word of every pattern: the walk a set of
325
+ /// tables shares, entering what any of them could reach.
326
+ pub fn compile_globs(patterns: &[&str]) -> Result<PathGlob, GlobError> {
327
+ let words: Vec<String> = patterns
328
+ .iter()
329
+ .flat_map(|pattern| crate::brace::expand(pattern))
330
+ .collect();
311
331
  let mut files = Vec::new();
312
332
  let mut spelled_dot_names = Vec::new();
313
333
  for word in &words {
@@ -392,7 +412,11 @@ fn walk(
392
412
  visit: &mut dyn FnMut(PathBuf, &Path),
393
413
  ) {
394
414
  let rel = start.strip_prefix(root).unwrap_or(start);
395
- let states = walker.glob.map_or_else(Vec::new, PathGlob::start);
415
+ let states = walker.glob.map_or_else(Vec::new, |glob| {
416
+ rel.components().fold(glob.start(), |states, component| {
417
+ glob.step(&states, component.as_os_str(), Kind::Dir)
418
+ })
419
+ });
396
420
  let place = Place {
397
421
  walk: walker,
398
422
  dir: start.to_path_buf(),
@@ -579,6 +603,7 @@ impl Walk<'_> {
579
603
  /// `.gitignore` files in force.
580
604
  fn admits(&self, depth: usize, is_dir: bool, name: &OsStr, path: &Path, rel: &Path) -> bool {
581
605
  should_descend(depth, is_dir, name, rel, self.ignore)
606
+ && !(is_dir && self.ignore.prunes_directory(name))
582
607
  && self.admits_name(name)
583
608
  && (self.frames.is_empty() || !is_gitignored(&self.frames, path, is_dir))
584
609
  }
@@ -1018,7 +1043,7 @@ mod tests {
1018
1043
  fs::create_dir_all(root.path().join("a").join("node_modules").join("pkg")).unwrap();
1019
1044
  fs::create_dir_all(root.path().join("a").join(RESERVED_DIR)).unwrap();
1020
1045
  fs::write(root.path().join("a").join("f.md"), "").unwrap();
1021
- let ignore = TableMatcher::new(&[], &["**/node_modules/**"]).unwrap();
1046
+ let ignore = TableMatcher::new(&[(".dirsql/*", "t")], &["**/node_modules/**"]).unwrap();
1022
1047
  let a = root.path().join("a");
1023
1048
  let mut dirs = scan_dirs(root.path(), &a, &ignore);
1024
1049
  dirs.sort();
@@ -1040,7 +1065,7 @@ mod tests {
1040
1065
  fn explore_enters_a_dirsql_directory_below_the_top_level() {
1041
1066
  let root = tempfile::tempdir().unwrap();
1042
1067
  fs::create_dir_all(root.path().join("a").join(RESERVED_DIR)).unwrap();
1043
- let ignore = TableMatcher::new(&[], &[]).unwrap();
1068
+ let ignore = TableMatcher::new(&[("**/.dirsql/*", "t")], &[]).unwrap();
1044
1069
  let top = Place {
1045
1070
  walk: walk_with(&ignore, None, Vec::new()),
1046
1071
  dir: root.path().to_path_buf(),
@@ -1393,16 +1418,31 @@ mod tests {
1393
1418
  }
1394
1419
 
1395
1420
  #[test]
1396
- fn admits_every_dot_named_entry_when_no_glob_governs_the_walk() {
1397
- let ignore = TableMatcher::new(&[], &[]).unwrap();
1398
- let walk = walk_with(&ignore, None, Vec::new());
1399
- assert!(walk.admits(
1400
- 1,
1401
- false,
1402
- OsStr::new(".env"),
1403
- Path::new("/r/.env"),
1404
- Path::new(".env")
1405
- ));
1421
+ fn a_table_walk_skips_a_node_modules_directory_no_table_names() {
1422
+ let ignore = TableMatcher::new(&[("**/*.js", "t")], &[]).unwrap();
1423
+ let walk = walk_with(&ignore, Some(ignore.walk_glob()), Vec::new());
1424
+ let admits = |is_dir, name: &str| {
1425
+ walk.admits(
1426
+ 1,
1427
+ is_dir,
1428
+ OsStr::new(name),
1429
+ Path::new(name),
1430
+ Path::new(name),
1431
+ )
1432
+ };
1433
+ assert!(!admits(true, "node_modules"));
1434
+ assert!(admits(false, "node_modules"));
1435
+ assert!(admits(true, "src"));
1436
+ }
1437
+
1438
+ #[test]
1439
+ fn a_match_with_an_unspelled_dot_component_is_hidden() {
1440
+ let glob = compile_glob("**/*.md").unwrap();
1441
+ assert!(glob.is_match_unhidden(Path::new("sub/b.md")));
1442
+ assert!(!glob.is_match_unhidden(Path::new(".env.md")));
1443
+ assert!(!glob.is_match_unhidden(Path::new(".hid/z.md")));
1444
+ let spelled = compile_glob(".hid/*.md").unwrap();
1445
+ assert!(spelled.is_match_unhidden(Path::new(".hid/z.md")));
1406
1446
  }
1407
1447
 
1408
1448
  #[test]
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
File without changes