dirsql 0.4.88__tar.gz → 0.4.90__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 (368) hide show
  1. {dirsql-0.4.88 → dirsql-0.4.90}/Cargo.lock +2 -2
  2. {dirsql-0.4.88 → dirsql-0.4.90}/PKG-INFO +1 -1
  3. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/Cargo.toml +1 -1
  4. dirsql-0.4.90/packages/python/changelog.d/2026-10-06-config-braces.md +3 -0
  5. dirsql-0.4.90/packages/python/changelog.d/2026-10-06-config-directory.md +3 -0
  6. dirsql-0.4.90/packages/python/e2e-attestations/claude-1258-config-braces.json +7 -0
  7. dirsql-0.4.90/packages/python/e2e-attestations/claude-1258-config-directory.json +7 -0
  8. dirsql-0.4.90/packages/python/migrations.d/2026-10-06-config-braces.md +40 -0
  9. dirsql-0.4.90/packages/python/migrations.d/2026-10-06-config-directory.md +39 -0
  10. {dirsql-0.4.88 → dirsql-0.4.90}/packages/rust/Cargo.toml +1 -1
  11. {dirsql-0.4.88 → dirsql-0.4.90}/packages/rust/src/lib.rs +4 -81
  12. {dirsql-0.4.88 → dirsql-0.4.90}/packages/rust/src/matcher.rs +4 -178
  13. {dirsql-0.4.88 → dirsql-0.4.90}/packages/rust/src/path_table.rs +50 -0
  14. {dirsql-0.4.88 → dirsql-0.4.90}/Cargo.toml +0 -0
  15. {dirsql-0.4.88 → dirsql-0.4.90}/README.md +0 -0
  16. {dirsql-0.4.88 → dirsql-0.4.90}/dirsql/__init__.py +0 -0
  17. {dirsql-0.4.88 → dirsql-0.4.90}/dirsql/_async.py +0 -0
  18. {dirsql-0.4.88 → dirsql-0.4.90}/dirsql/_dirsql.pyi +0 -0
  19. {dirsql-0.4.88 → dirsql-0.4.90}/dirsql/cli/__init__.py +0 -0
  20. {dirsql-0.4.88 → dirsql-0.4.90}/dirsql/cli/discover_plugins/__init__.py +0 -0
  21. {dirsql-0.4.88 → dirsql-0.4.90}/dirsql/cli/discover_plugins/discovered_fragments.py +0 -0
  22. {dirsql-0.4.88 → dirsql-0.4.90}/dirsql/cli/discover_plugins/discovery_disabled.py +0 -0
  23. {dirsql-0.4.88 → dirsql-0.4.90}/dirsql/cli/discover_plugins/fragment_path.py +0 -0
  24. {dirsql-0.4.88 → dirsql-0.4.90}/dirsql/cli/discover_plugins/with_discovered_plugins.py +0 -0
  25. {dirsql-0.4.88 → dirsql-0.4.90}/dirsql/cli/main.py +0 -0
  26. {dirsql-0.4.88 → dirsql-0.4.90}/dirsql/cli/resolve_config_extensions.py +0 -0
  27. {dirsql-0.4.88 → dirsql-0.4.90}/dirsql/plan_entry_path.py +0 -0
  28. {dirsql-0.4.88 → dirsql-0.4.90}/dirsql/py.typed +0 -0
  29. {dirsql-0.4.88 → dirsql-0.4.90}/dirsql/read_config.py +0 -0
  30. {dirsql-0.4.88 → dirsql-0.4.90}/dirsql/resolve_configs_extension_specs.py +0 -0
  31. {dirsql-0.4.88 → dirsql-0.4.90}/dirsql/resolve_extension.py +0 -0
  32. {dirsql-0.4.88 → dirsql-0.4.90}/dirsql/resolve_package.py +0 -0
  33. {dirsql-0.4.88 → dirsql-0.4.90}/docs/.claude/CLAUDE.md +0 -0
  34. {dirsql-0.4.88 → dirsql-0.4.90}/docs/.vitepress/config.ts +0 -0
  35. {dirsql-0.4.88 → dirsql-0.4.90}/docs/.vitepress/theme/index.ts +0 -0
  36. {dirsql-0.4.88 → dirsql-0.4.90}/docs/.vitepress/theme/lang.ts +0 -0
  37. {dirsql-0.4.88 → dirsql-0.4.90}/docs/AGENTS.md +0 -0
  38. {dirsql-0.4.88 → dirsql-0.4.90}/docs/context/.gitattributes +0 -0
  39. {dirsql-0.4.88 → dirsql-0.4.90}/docs/context/recipes.md +0 -0
  40. {dirsql-0.4.88 → dirsql-0.4.90}/docs/context/troubleshooting.md +0 -0
  41. {dirsql-0.4.88 → dirsql-0.4.90}/docs/context/usage.md +0 -0
  42. {dirsql-0.4.88 → dirsql-0.4.90}/docs/explanation.md +0 -0
  43. {dirsql-0.4.88 → dirsql-0.4.90}/docs/getting-started.md +0 -0
  44. {dirsql-0.4.88 → dirsql-0.4.90}/docs/howto/agent-skill.md +0 -0
  45. {dirsql-0.4.88 → dirsql-0.4.90}/docs/howto/columns-from-paths.md +0 -0
  46. {dirsql-0.4.88 → dirsql-0.4.90}/docs/howto/define-tables.md +0 -0
  47. {dirsql-0.4.88 → dirsql-0.4.90}/docs/howto/embed.md +0 -0
  48. {dirsql-0.4.88 → dirsql-0.4.90}/docs/howto/extract-from-contents.md +0 -0
  49. {dirsql-0.4.88 → dirsql-0.4.90}/docs/howto/load-extension.md +0 -0
  50. {dirsql-0.4.88 → dirsql-0.4.90}/docs/howto/parse-files-into-columns.md +0 -0
  51. {dirsql-0.4.88 → dirsql-0.4.90}/docs/howto/persist.md +0 -0
  52. {dirsql-0.4.88 → dirsql-0.4.90}/docs/howto/query-json.md +0 -0
  53. {dirsql-0.4.88 → dirsql-0.4.90}/docs/howto/query-without-config.md +0 -0
  54. {dirsql-0.4.88 → dirsql-0.4.90}/docs/howto/react-to-changes.md +0 -0
  55. {dirsql-0.4.88 → dirsql-0.4.90}/docs/howto/search-by-meaning.md +0 -0
  56. {dirsql-0.4.88 → dirsql-0.4.90}/docs/howto/search-indexes.md +0 -0
  57. {dirsql-0.4.88 → dirsql-0.4.90}/docs/howto/skip-files.md +0 -0
  58. {dirsql-0.4.88 → dirsql-0.4.90}/docs/howto/write-a-plugin.md +0 -0
  59. {dirsql-0.4.88 → dirsql-0.4.90}/docs/index.md +0 -0
  60. {dirsql-0.4.88 → dirsql-0.4.90}/docs/package.json +0 -0
  61. {dirsql-0.4.88 → dirsql-0.4.90}/docs/plugins.md +0 -0
  62. {dirsql-0.4.88 → dirsql-0.4.90}/docs/pnpm-lock.yaml +0 -0
  63. {dirsql-0.4.88 → dirsql-0.4.90}/docs/pnpm-workspace.yaml +0 -0
  64. {dirsql-0.4.88 → dirsql-0.4.90}/docs/reference/cli.md +0 -0
  65. {dirsql-0.4.88 → dirsql-0.4.90}/docs/reference/columns.md +0 -0
  66. {dirsql-0.4.88 → dirsql-0.4.90}/docs/reference/config.md +0 -0
  67. {dirsql-0.4.88 → dirsql-0.4.90}/docs/reference/hooks.md +0 -0
  68. {dirsql-0.4.88 → dirsql-0.4.90}/docs/reference/http-api.md +0 -0
  69. {dirsql-0.4.88 → dirsql-0.4.90}/docs/reference/path-tables.md +0 -0
  70. {dirsql-0.4.88 → dirsql-0.4.90}/docs/reference/sdk.md +0 -0
  71. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/CHANGELOG.md +0 -0
  72. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/MIGRATIONS.md +0 -0
  73. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/README.md +0 -0
  74. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/changelog.d/2026-07-13-drop-cwd-config-auto-detect.md +0 -0
  75. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/changelog.d/2026-07-13-plugin-discovery.md +0 -0
  76. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/changelog.d/2026-07-13-rename-extract-to-on-file.md +0 -0
  77. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/changelog.d/2026-07-13-repeatable-config.md +0 -0
  78. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/changelog.d/2026-07-13-sdk-default-baked-in-config.md +0 -0
  79. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/changelog.d/2026-07-20-drop-implicit-files-table.md +0 -0
  80. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/changelog.d/2026-07-21-remove-glob-captures.md +0 -0
  81. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/changelog.d/2026-07-24-hookless-table-config-error.md +0 -0
  82. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/changelog.d/2026-07-24-remove-stat-fact-injection.md +0 -0
  83. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/changelog.d/2026-07-29-restore-python-310.md +0 -0
  84. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/changelog.d/2026-08-02-release-profile.md +0 -0
  85. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/changelog.d/2026-08-02-scan-failures.md +0 -0
  86. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/changelog.d/2026-08-03-discovery-ext-resolution.md +0 -0
  87. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/changelog.d/2026-08-03-manylinux-dynamic-binary.md +0 -0
  88. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/changelog.d/2026-08-03-python-no-ignore.md +0 -0
  89. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/changelog.d/2026-08-04-cast-lints.md +0 -0
  90. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/changelog.d/2026-08-04-cli-in-process.md +0 -0
  91. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/changelog.d/2026-08-20-curtaincall-dev-dependency.md +0 -0
  92. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/changelog.d/2026-08-20-declared-table-name.md +0 -0
  93. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/changelog.d/2026-09-04-config-paths-from-argv-module.md +0 -0
  94. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/changelog.d/2026-09-05-config-extension-loader-split.md +0 -0
  95. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/changelog.d/2026-09-05-resolve-config-extensions-split.md +0 -0
  96. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/changelog.d/2026-09-05-resolve-extension-split.md +0 -0
  97. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/changelog.d/2026-09-09-launcher-config-path-scan.md +0 -0
  98. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/changelog.d/2026-09-17-extension-resolution-via-core.md +0 -0
  99. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/changelog.d/2026-09-18-export-scan-failure.md +0 -0
  100. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/changelog.d/2026-09-18-flatten-row-event-in-core.md +0 -0
  101. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/changelog.d/2026-09-18-programmatic-extension-plan.md +0 -0
  102. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/changelog.d/2026-09-20-sigint-ends-a-run-in-progress.md +0 -0
  103. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/changelog.d/2026-09-24-query-rows-in-projection-order.md +0 -0
  104. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/changelog.d/2026-10-02-readme-docs-host.md +0 -0
  105. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/changelog.d/2026-10-03-one-glob-rule-for-config-globs.md +0 -0
  106. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/changelog.d/2026-10-03-path-table-directory-one-level.md +0 -0
  107. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/changelog.d/2026-10-04-path-table-dotfiles-hidden.md +0 -0
  108. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/changelog.d/2026-10-05-brace-groups-follow-bash.md +0 -0
  109. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/changelog.d/2026-10-05-cli-context.md +0 -0
  110. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/changelog.d/2026-10-05-gitignore-requires-repo.md +0 -0
  111. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/changelog.d/2026-10-05-path-table-node-modules-named.md +0 -0
  112. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/changelog.d/2026-10-05-path-table-symlinks.md +0 -0
  113. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/changelog.d/2026-10-05-path-table-trailing-slash.md +0 -0
  114. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/changelog.d/2026-10-05-unbalanced-brackets-literal.md +0 -0
  115. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/changelog.d/2026-10-06-config-gitignore.md +0 -0
  116. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/changelog.d/2026-10-06-config-globs-anchor-at-the-config.md +0 -0
  117. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/changelog.d/2026-10-06-one-glob-compiler.md +0 -0
  118. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/changelog.d/2026-10-06-plugin-no-default-records.md +0 -0
  119. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/changelog.d/2026-10-06-watch-broadcast.md +0 -0
  120. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/changelog.d/2026-10-06-zero-match-config-table-warning.md +0 -0
  121. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/changelog.d/README.md +0 -0
  122. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/conftest.py +0 -0
  123. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/docs/.claude/CLAUDE.md +0 -0
  124. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/docs/.vitepress/config.ts +0 -0
  125. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/docs/.vitepress/theme/index.ts +0 -0
  126. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/docs/.vitepress/theme/lang.ts +0 -0
  127. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/docs/AGENTS.md +0 -0
  128. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/docs/context/.gitattributes +0 -0
  129. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/docs/context/recipes.md +0 -0
  130. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/docs/context/troubleshooting.md +0 -0
  131. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/docs/context/usage.md +0 -0
  132. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/docs/explanation.md +0 -0
  133. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/docs/getting-started.md +0 -0
  134. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/docs/howto/agent-skill.md +0 -0
  135. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/docs/howto/columns-from-paths.md +0 -0
  136. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/docs/howto/define-tables.md +0 -0
  137. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/docs/howto/embed.md +0 -0
  138. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/docs/howto/extract-from-contents.md +0 -0
  139. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/docs/howto/load-extension.md +0 -0
  140. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/docs/howto/parse-files-into-columns.md +0 -0
  141. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/docs/howto/persist.md +0 -0
  142. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/docs/howto/query-json.md +0 -0
  143. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/docs/howto/query-without-config.md +0 -0
  144. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/docs/howto/react-to-changes.md +0 -0
  145. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/docs/howto/search-by-meaning.md +0 -0
  146. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/docs/howto/search-indexes.md +0 -0
  147. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/docs/howto/skip-files.md +0 -0
  148. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/docs/howto/write-a-plugin.md +0 -0
  149. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/docs/index.md +0 -0
  150. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/docs/package.json +0 -0
  151. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/docs/plugins.md +0 -0
  152. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/docs/pnpm-lock.yaml +0 -0
  153. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/docs/pnpm-workspace.yaml +0 -0
  154. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/docs/reference/cli.md +0 -0
  155. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/docs/reference/columns.md +0 -0
  156. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/docs/reference/config.md +0 -0
  157. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/docs/reference/hooks.md +0 -0
  158. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/docs/reference/http-api.md +0 -0
  159. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/docs/reference/path-tables.md +0 -0
  160. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/docs/reference/sdk.md +0 -0
  161. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/e2e-attestations/bot-1397-watch-broadcast.json +0 -0
  162. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/e2e-attestations/bot-1398-inotify-error.json +0 -0
  163. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/e2e-attestations/bot-1399-server-cors.json +0 -0
  164. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/e2e-attestations/bot-1401-watch-scope.json +0 -0
  165. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/e2e-attestations/bot-1407-child-place-depth.json +0 -0
  166. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/e2e-attestations/cc-keen-knuth-f11gyq.json +0 -0
  167. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/e2e-attestations/claude-1056-py-ofpf9.json +0 -0
  168. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/e2e-attestations/claude-1066-p1-resolve-extension.json +0 -0
  169. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/e2e-attestations/claude-1078-argv-config-paths-core.json +0 -0
  170. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/e2e-attestations/claude-1079-p2-resolve-config-extensions.json +0 -0
  171. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/e2e-attestations/claude-1080-share-vtab-scaffolding.json +0 -0
  172. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/e2e-attestations/claude-1081-indicatif-progress.json +0 -0
  173. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/e2e-attestations/claude-1096-watch-moved-dir.json +0 -0
  174. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/e2e-attestations/claude-1109-watch-moved-out.json +0 -0
  175. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/e2e-attestations/claude-1119-ext-plan.json +0 -0
  176. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/e2e-attestations/claude-1120-py-ext.json +0 -0
  177. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/e2e-attestations/claude-1122-ext-cleanup.json +0 -0
  178. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/e2e-attestations/claude-1130-codec-crates.json +0 -0
  179. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/e2e-attestations/claude-1131-flatten-row-event.json +0 -0
  180. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/e2e-attestations/claude-1139-sse-flatten.json +0 -0
  181. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/e2e-attestations/claude-1140-scan-failure-export.json +0 -0
  182. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/e2e-attestations/claude-1148-clippy-all-targets.json +0 -0
  183. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/e2e-attestations/claude-1164-sigint-fatal.json +0 -0
  184. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/e2e-attestations/claude-1170-projection-order.json +0 -0
  185. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/e2e-attestations/claude-1172-on-file-path.json +0 -0
  186. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/e2e-attestations/claude-1173-py-projection-order.json +0 -0
  187. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/e2e-attestations/claude-1184-win-rel-paths.json +0 -0
  188. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/e2e-attestations/claude-1185-win-abs-table-names.json +0 -0
  189. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/e2e-attestations/claude-1186-win-test-harness.json +0 -0
  190. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/e2e-attestations/claude-1196-join-index.json +0 -0
  191. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/e2e-attestations/claude-1199-glob-prefix.json +0 -0
  192. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/e2e-attestations/claude-1201-single-walk.json +0 -0
  193. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/e2e-attestations/claude-1204-embed-batch.json +0 -0
  194. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/e2e-attestations/claude-1207-win-argv-quote.json +0 -0
  195. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/e2e-attestations/claude-1208-win-nonverbatim-paths.json +0 -0
  196. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/e2e-attestations/claude-1215-on-file-batch.json +0 -0
  197. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/e2e-attestations/claude-1216-on-file-cleanup.json +0 -0
  198. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/e2e-attestations/claude-1223-config-glob-rule.json +0 -0
  199. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/e2e-attestations/claude-1223-dir-one-level.json +0 -0
  200. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/e2e-attestations/claude-1225-plugin-no-default.json +0 -0
  201. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/e2e-attestations/claude-1226-stale-docs.json +0 -0
  202. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/e2e-attestations/claude-1232-anchor-plumbing.json +0 -0
  203. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/e2e-attestations/claude-1232-config-anchor.json +0 -0
  204. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/e2e-attestations/claude-1232-multi-watch.json +0 -0
  205. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/e2e-attestations/claude-1232-zero-match.json +0 -0
  206. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/e2e-attestations/claude-1238-parallel-walk.json +0 -0
  207. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/e2e-attestations/claude-1241-content-prefetch.json +0 -0
  208. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/e2e-attestations/claude-1243-ingest-perf.json +0 -0
  209. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/e2e-attestations/claude-1249-dotfiles.json +0 -0
  210. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/e2e-attestations/claude-1256-symlinks.json +0 -0
  211. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/e2e-attestations/claude-1257-trailing-slash.json +0 -0
  212. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/e2e-attestations/claude-1258-config-gitignore.json +0 -0
  213. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/e2e-attestations/claude-1258-one-pattern.json +0 -0
  214. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/e2e-attestations/claude-1262-brace-literal.json +0 -0
  215. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/e2e-attestations/claude-1264-context.json +0 -0
  216. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/e2e-attestations/claude-1267-posix-classes.json +0 -0
  217. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/e2e-attestations/claude-1268-unbalanced-brackets.json +0 -0
  218. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/e2e-attestations/claude-1269-utf8-chars.json +0 -0
  219. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/e2e-attestations/claude-1271-node-modules-named.json +0 -0
  220. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/e2e-attestations/claude-1272-ancestor-gitignore.json +0 -0
  221. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/e2e-attestations/claude-1273-walk-prune.json +0 -0
  222. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/e2e-attestations/claude-1285-ingest-fast.json +0 -0
  223. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/e2e-attestations/claude-1286-nested-repo.json +0 -0
  224. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/e2e-attestations/claude-1305-glob-speed.json +0 -0
  225. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/e2e-attestations/claude-1308-glob-speed.json +0 -0
  226. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/e2e-attestations/claude-1310-glob-speed.json +0 -0
  227. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/e2e-attestations/claude-1311-glob-speed.json +0 -0
  228. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/e2e-attestations/claude-1312-glob-speed.json +0 -0
  229. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/e2e-attestations/claude-1318-lazy-stat.json +0 -0
  230. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/e2e-attestations/claude-1320-walk-speed.json +0 -0
  231. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/e2e-attestations/claude-1322-walk-readdir.json +0 -0
  232. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/e2e-attestations/claude-1325-parallel-walk.json +0 -0
  233. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/e2e-attestations/claude-1326-stream-rows.json +0 -0
  234. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/e2e-attestations/claude-1330-python-dirsql-patch.json +0 -0
  235. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/e2e-attestations/claude-1330-python-extensions-patch.json +0 -0
  236. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/e2e-attestations/claude-1330-scanner-effects.json +0 -0
  237. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/e2e-attestations/claude-1330-scanner-gitignore.json +0 -0
  238. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/e2e-attestations/claude-1330-vtab-prefetch-flag.json +0 -0
  239. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/e2e-attestations/claude-1330-vtab-read.json +0 -0
  240. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/e2e-attestations/claude-1351-dot-dirs.json +0 -0
  241. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/e2e-attestations/claude-819-oneshot-timeout.json +0 -0
  242. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/e2e-attestations/claude-827-unquote-doubled-quotes.json +0 -0
  243. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/e2e-attestations/claude-epic-953-slice2-reedline.json +0 -0
  244. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/e2e-attestations/claude-epic-953-slice3-format.json +0 -0
  245. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/e2e-attestations/claude-epic-953-stacked-prs-x59wm3.json +0 -0
  246. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/e2e-attestations/claude-github-issue-825-e4mhhp.json +0 -0
  247. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/e2e-attestations/claude-issue-951-0eease.json +0 -0
  248. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/e2e-attestations/claude-issue-962-0jjrfv.json +0 -0
  249. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/e2e-attestations/claude-issue-986-red-test-e7sjrb.json +0 -0
  250. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/e2e-attestations/claude-tackle-1034-cachesplit.json +0 -0
  251. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/e2e-attestations/claude-tackle-1042-py12.json +0 -0
  252. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/e2e-attestations/claude-tackle-956-xzen74.json +0 -0
  253. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/e2e-attestations/claude-tackle-957-lrm0z6-worker-calls.json +0 -0
  254. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/e2e-attestations/claude-tackle-957-lrm0z6.json +0 -0
  255. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/e2e-attestations/claude-tackle-975-n8mc2h.json +0 -0
  256. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/migrations.d/2026-07-13-drop-cwd-config-auto-detect.md +0 -0
  257. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/migrations.d/2026-07-13-rename-extract-to-on-file.md +0 -0
  258. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/migrations.d/2026-07-13-sdk-default-baked-in-config.md +0 -0
  259. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/migrations.d/2026-07-20-drop-implicit-files-table.md +0 -0
  260. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/migrations.d/2026-07-21-remove-glob-captures.md +0 -0
  261. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/migrations.d/2026-07-24-hookless-table-config-error.md +0 -0
  262. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/migrations.d/2026-07-24-remove-stat-fact-injection.md +0 -0
  263. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/migrations.d/2026-07-29-restore-python-310.md +0 -0
  264. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/migrations.d/2026-08-04-cli-in-process.md +0 -0
  265. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/migrations.d/2026-08-20-declared-table-name.md +0 -0
  266. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/migrations.d/2026-09-20-sigint-ends-a-run-in-progress.md +0 -0
  267. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/migrations.d/2026-09-24-query-rows-in-projection-order.md +0 -0
  268. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/migrations.d/2026-10-02-readme-docs-host.md +0 -0
  269. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/migrations.d/2026-10-03-one-glob-rule-for-config-globs.md +0 -0
  270. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/migrations.d/2026-10-03-path-table-directory-one-level.md +0 -0
  271. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/migrations.d/2026-10-04-path-table-dotfiles-hidden.md +0 -0
  272. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/migrations.d/2026-10-05-brace-groups-follow-bash.md +0 -0
  273. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/migrations.d/2026-10-05-cli-context.md +0 -0
  274. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/migrations.d/2026-10-05-gitignore-requires-repo.md +0 -0
  275. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/migrations.d/2026-10-05-path-table-node-modules-named.md +0 -0
  276. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/migrations.d/2026-10-05-path-table-symlinks.md +0 -0
  277. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/migrations.d/2026-10-05-path-table-trailing-slash.md +0 -0
  278. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/migrations.d/2026-10-05-unbalanced-brackets-literal.md +0 -0
  279. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/migrations.d/2026-10-06-config-gitignore.md +0 -0
  280. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/migrations.d/2026-10-06-config-globs-anchor-at-the-config.md +0 -0
  281. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/migrations.d/2026-10-06-one-glob-compiler.md +0 -0
  282. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/migrations.d/2026-10-06-plugin-no-default-records.md +0 -0
  283. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/migrations.d/2026-10-06-watch-broadcast.md +0 -0
  284. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/migrations.d/2026-10-06-zero-match-config-table-warning.md +0 -0
  285. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/migrations.d/README.md +0 -0
  286. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/src/lib.rs +0 -0
  287. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/testing-conventions.toml +0 -0
  288. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/tests/__init__.py +0 -0
  289. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/tests/conftest.py +0 -0
  290. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/tests/e2e/__init__.py +0 -0
  291. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/tests/e2e/fixtures/dirsql_plugin_fixture/__init__.py +0 -0
  292. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/tests/e2e/fixtures/dirsql_plugin_fixture/dirsql.toml +0 -0
  293. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/tests/e2e/speed_of_light.py +0 -0
  294. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/tests/integration/__init__.py +0 -0
  295. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/tests/integration/binding/__init__.py +0 -0
  296. {dirsql-0.4.88 → dirsql-0.4.90}/packages/python/tests/integration/hermetic/__init__.py +0 -0
  297. {dirsql-0.4.88 → dirsql-0.4.90}/packages/rust/CHANGELOG.md +0 -0
  298. {dirsql-0.4.88 → dirsql-0.4.90}/packages/rust/MIGRATIONS.md +0 -0
  299. {dirsql-0.4.88 → dirsql-0.4.90}/packages/rust/README.md +0 -0
  300. {dirsql-0.4.88 → dirsql-0.4.90}/packages/rust/benches/db_bench.rs +0 -0
  301. {dirsql-0.4.88 → dirsql-0.4.90}/packages/rust/benches/differ_bench.rs +0 -0
  302. {dirsql-0.4.88 → dirsql-0.4.90}/packages/rust/benches/matcher_bench.rs +0 -0
  303. {dirsql-0.4.88 → dirsql-0.4.90}/packages/rust/benches/scanner_bench.rs +0 -0
  304. {dirsql-0.4.88 → dirsql-0.4.90}/packages/rust/docs/context/.gitattributes +0 -0
  305. {dirsql-0.4.88 → dirsql-0.4.90}/packages/rust/docs/context/recipes.md +0 -0
  306. {dirsql-0.4.88 → dirsql-0.4.90}/packages/rust/docs/context/troubleshooting.md +0 -0
  307. {dirsql-0.4.88 → dirsql-0.4.90}/packages/rust/docs/context/usage.md +0 -0
  308. {dirsql-0.4.88 → dirsql-0.4.90}/packages/rust/docs/explanation.md +0 -0
  309. {dirsql-0.4.88 → dirsql-0.4.90}/packages/rust/docs/getting-started.md +0 -0
  310. {dirsql-0.4.88 → dirsql-0.4.90}/packages/rust/docs/howto/agent-skill.md +0 -0
  311. {dirsql-0.4.88 → dirsql-0.4.90}/packages/rust/docs/howto/columns-from-paths.md +0 -0
  312. {dirsql-0.4.88 → dirsql-0.4.90}/packages/rust/docs/howto/define-tables.md +0 -0
  313. {dirsql-0.4.88 → dirsql-0.4.90}/packages/rust/docs/howto/embed.md +0 -0
  314. {dirsql-0.4.88 → dirsql-0.4.90}/packages/rust/docs/howto/extract-from-contents.md +0 -0
  315. {dirsql-0.4.88 → dirsql-0.4.90}/packages/rust/docs/howto/load-extension.md +0 -0
  316. {dirsql-0.4.88 → dirsql-0.4.90}/packages/rust/docs/howto/parse-files-into-columns.md +0 -0
  317. {dirsql-0.4.88 → dirsql-0.4.90}/packages/rust/docs/howto/persist.md +0 -0
  318. {dirsql-0.4.88 → dirsql-0.4.90}/packages/rust/docs/howto/query-json.md +0 -0
  319. {dirsql-0.4.88 → dirsql-0.4.90}/packages/rust/docs/howto/query-without-config.md +0 -0
  320. {dirsql-0.4.88 → dirsql-0.4.90}/packages/rust/docs/howto/react-to-changes.md +0 -0
  321. {dirsql-0.4.88 → dirsql-0.4.90}/packages/rust/docs/howto/search-by-meaning.md +0 -0
  322. {dirsql-0.4.88 → dirsql-0.4.90}/packages/rust/docs/howto/search-indexes.md +0 -0
  323. {dirsql-0.4.88 → dirsql-0.4.90}/packages/rust/docs/howto/skip-files.md +0 -0
  324. {dirsql-0.4.88 → dirsql-0.4.90}/packages/rust/docs/howto/write-a-plugin.md +0 -0
  325. {dirsql-0.4.88 → dirsql-0.4.90}/packages/rust/docs/index.md +0 -0
  326. {dirsql-0.4.88 → dirsql-0.4.90}/packages/rust/docs/plugins.md +0 -0
  327. {dirsql-0.4.88 → dirsql-0.4.90}/packages/rust/docs/reference/cli.md +0 -0
  328. {dirsql-0.4.88 → dirsql-0.4.90}/packages/rust/docs/reference/columns.md +0 -0
  329. {dirsql-0.4.88 → dirsql-0.4.90}/packages/rust/docs/reference/config.md +0 -0
  330. {dirsql-0.4.88 → dirsql-0.4.90}/packages/rust/docs/reference/hooks.md +0 -0
  331. {dirsql-0.4.88 → dirsql-0.4.90}/packages/rust/docs/reference/http-api.md +0 -0
  332. {dirsql-0.4.88 → dirsql-0.4.90}/packages/rust/docs/reference/path-tables.md +0 -0
  333. {dirsql-0.4.88 → dirsql-0.4.90}/packages/rust/docs/reference/sdk.md +0 -0
  334. {dirsql-0.4.88 → dirsql-0.4.90}/packages/rust/src/bin/dirsql.rs +0 -0
  335. {dirsql-0.4.88 → dirsql-0.4.90}/packages/rust/src/brace.rs +0 -0
  336. {dirsql-0.4.88 → dirsql-0.4.90}/packages/rust/src/cli/context.rs +0 -0
  337. {dirsql-0.4.88 → dirsql-0.4.90}/packages/rust/src/cli/execute.rs +0 -0
  338. {dirsql-0.4.88 → dirsql-0.4.90}/packages/rust/src/cli/init.rs +0 -0
  339. {dirsql-0.4.88 → dirsql-0.4.90}/packages/rust/src/cli/mod.rs +0 -0
  340. {dirsql-0.4.88 → dirsql-0.4.90}/packages/rust/src/cli/repl.rs +0 -0
  341. {dirsql-0.4.88 → dirsql-0.4.90}/packages/rust/src/cli/router.rs +0 -0
  342. {dirsql-0.4.88 → dirsql-0.4.90}/packages/rust/src/cli/run.rs +0 -0
  343. {dirsql-0.4.88 → dirsql-0.4.90}/packages/rust/src/cli/serialize.rs +0 -0
  344. {dirsql-0.4.88 → dirsql-0.4.90}/packages/rust/src/cli/server.rs +0 -0
  345. {dirsql-0.4.88 → dirsql-0.4.90}/packages/rust/src/cli/table.rs +0 -0
  346. {dirsql-0.4.88 → dirsql-0.4.90}/packages/rust/src/command.rs +0 -0
  347. {dirsql-0.4.88 → dirsql-0.4.90}/packages/rust/src/config.rs +0 -0
  348. {dirsql-0.4.88 → dirsql-0.4.90}/packages/rust/src/db.rs +0 -0
  349. {dirsql-0.4.88 → dirsql-0.4.90}/packages/rust/src/default_config.toml +0 -0
  350. {dirsql-0.4.88 → dirsql-0.4.90}/packages/rust/src/differ.rs +0 -0
  351. {dirsql-0.4.88 → dirsql-0.4.90}/packages/rust/src/extension_resolution.rs +0 -0
  352. {dirsql-0.4.88 → dirsql-0.4.90}/packages/rust/src/functions.rs +0 -0
  353. {dirsql-0.4.88 → dirsql-0.4.90}/packages/rust/src/infer.rs +0 -0
  354. {dirsql-0.4.88 → dirsql-0.4.90}/packages/rust/src/launcher.rs +0 -0
  355. {dirsql-0.4.88 → dirsql-0.4.90}/packages/rust/src/listing.rs +0 -0
  356. {dirsql-0.4.88 → dirsql-0.4.90}/packages/rust/src/on_file.rs +0 -0
  357. {dirsql-0.4.88 → dirsql-0.4.90}/packages/rust/src/parsed_vtab.rs +0 -0
  358. {dirsql-0.4.88 → dirsql-0.4.90}/packages/rust/src/persist.rs +0 -0
  359. {dirsql-0.4.88 → dirsql-0.4.90}/packages/rust/src/posix_class.rs +0 -0
  360. {dirsql-0.4.88 → dirsql-0.4.90}/packages/rust/src/progress.rs +0 -0
  361. {dirsql-0.4.88 → dirsql-0.4.90}/packages/rust/src/row_event_flat.rs +0 -0
  362. {dirsql-0.4.88 → dirsql-0.4.90}/packages/rust/src/scanner.rs +0 -0
  363. {dirsql-0.4.88 → dirsql-0.4.90}/packages/rust/src/sql_literal.rs +0 -0
  364. {dirsql-0.4.88 → dirsql-0.4.90}/packages/rust/src/tree_walk.rs +0 -0
  365. {dirsql-0.4.88 → dirsql-0.4.90}/packages/rust/src/vtab.rs +0 -0
  366. {dirsql-0.4.88 → dirsql-0.4.90}/packages/rust/src/vtab_scaffold.rs +0 -0
  367. {dirsql-0.4.88 → dirsql-0.4.90}/packages/rust/src/watcher.rs +0 -0
  368. {dirsql-0.4.88 → dirsql-0.4.90}/pyproject.toml +0 -0
@@ -552,7 +552,7 @@ checksum = "6184e33543162437515c2e2b48714794e37845ec9851711914eec9d308f6ebe8"
552
552
 
553
553
  [[package]]
554
554
  name = "dirsql"
555
- version = "0.4.88"
555
+ version = "0.4.90"
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.88"
606
+ version = "0.4.90"
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.88
3
+ Version: 0.4.90
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.88"
7
+ version = "0.4.90"
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** In a declared `[[table]] glob`, `{name}` is a literal, not a
2
+ wildcard, as in a path-table and in bash. The load-time error for a `{name}`
3
+ that collides with a declared column is gone. Write `*` for the old meaning.
@@ -0,0 +1,3 @@
1
+ **Changed** A declared `[[table]] glob` that names a directory, `glob = "docs"`
2
+ or `glob = "docs/"`, lists the files directly inside it, like `FROM './docs'`.
3
+ It used to match nothing.
@@ -0,0 +1,7 @@
1
+ {
2
+ "command": "uv run python -m pytest tests/e2e/glob_speed_matchers_test.py tests/e2e/glob_speed_one_level_test.py tests/e2e/query_contract_test.py -x -q",
3
+ "ran_at": 1791333540,
4
+ "exit_code": 0,
5
+ "commit": "37586d9320ebca5d4be159cfe3a523ebcf017884",
6
+ "branch": "claude/1258-config-braces"
7
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "command": "uv run python -m pytest tests/e2e/glob_speed_one_level_test.py tests/e2e/glob_speed_matchers_test.py tests/e2e/glob_speed_recursive_test.py tests/e2e/query_contract_test.py -x -q",
3
+ "ran_at": 1791331926,
4
+ "exit_code": 0,
5
+ "commit": "04430dd3eae48a6936b5ff45c9c51a38900fbacc",
6
+ "branch": "claude/1258-config-directory"
7
+ }
@@ -0,0 +1,40 @@
1
+ ### A braced name in a config glob is a literal
2
+
3
+ #### Summary
4
+
5
+ `glob = "data/{id}/metadata.json"` used to treat `{id}` as `*`. It now matches
6
+ a directory literally named `{id}`. `{a,b}` alternation is unchanged. A column
7
+ named like a `{name}` no longer errors at load.
8
+
9
+ #### Required changes
10
+
11
+ | Before | After |
12
+ | --- | --- |
13
+ | `glob = "data/{id}/metadata.json"` | `glob = "data/*/metadata.json"` |
14
+
15
+ #### Deprecations removed
16
+
17
+ - The `CaptureColumnCollision` error: a `{name}` is no longer a capture, so
18
+ nothing can collide.
19
+
20
+ #### Behavior changes without code changes
21
+
22
+ - A config that kept `{name}` in a glob stops matching files and loads no rows.
23
+
24
+ #### Verification
25
+
26
+ ```bash
27
+ cd "$(mktemp -d)"
28
+ mkdir -p 'data/{id}' data/x
29
+ echo '[{"p":"lit"}]' > 'data/{id}/m.json'
30
+ echo '[{"p":"other"}]' > data/x/m.json
31
+ cat > .dirsql.toml <<'TOML'
32
+ [[table]]
33
+ name = "t"
34
+ glob = "data/{id}/m.json"
35
+ ddl = "CREATE TABLE t (p TEXT)"
36
+ on-file = "jq -sc add"
37
+ TOML
38
+ dirsql query "SELECT p FROM t" -c .dirsql.toml
39
+ # expected: [{"p":"lit"}]
40
+ ```
@@ -0,0 +1,39 @@
1
+ ### A config glob naming a directory lists its files
2
+
3
+ #### Summary
4
+
5
+ `glob = "docs"` used to match nothing, because no file is named `docs`. It now
6
+ lists the files directly inside `docs`, as `FROM './docs'` does. A config that
7
+ relied on the empty result gains rows.
8
+
9
+ #### Required changes
10
+
11
+ | Before | After |
12
+ | --- | --- |
13
+ | `glob = "docs"` (no rows) | `glob = "docs"` lists `docs/*`; write `docs/**` for every depth |
14
+
15
+ #### Deprecations removed
16
+
17
+ _None._
18
+
19
+ #### Behavior changes without code changes
20
+
21
+ - A glob with no wildcard that names a directory expands to `<dir>/*`.
22
+ - A glob with no wildcard that names a file still names only that file.
23
+
24
+ #### Verification
25
+
26
+ ```bash
27
+ cd "$(mktemp -d)"
28
+ mkdir docs
29
+ echo '[{"p":"a"}]' > docs/a.json
30
+ cat > .dirsql.toml <<'TOML'
31
+ [[table]]
32
+ name = "t"
33
+ glob = "docs"
34
+ ddl = "CREATE TABLE t (p TEXT)"
35
+ on-file = "jq -sc add"
36
+ TOML
37
+ dirsql query "SELECT p FROM t" -c .dirsql.toml
38
+ # expected: [{"p":"a"}]
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.88"
9
+ version = "0.4.90"
10
10
  edition.workspace = true
11
11
  # Literal `license` (not `license.workspace = true`) because
12
12
  # putitoutthere's preflight check reads `[package].license` directly
@@ -199,14 +199,6 @@ pub enum DirSqlError {
199
199
  source: Option<BoxError>,
200
200
  },
201
201
 
202
- #[error(
203
- "glob capture `{{{placeholder}}}` collides with declared column `{column}`: \
204
- captures no longer populate columns, so `{column}` would always be NULL. \
205
- Remove `{column}` from the table's DDL, or emit its value from the on-file \
206
- hook by splitting the path yourself."
207
- )]
208
- CaptureColumnCollision { placeholder: String, column: String },
209
-
210
202
  #[error(
211
203
  "query() only accepts read-only statements; SQLite classified this statement as a write"
212
204
  )]
@@ -1323,18 +1315,6 @@ impl DirSQL {
1323
1315
  eprintln!("{warning}");
1324
1316
  }
1325
1317
  }
1326
- // Reject a `{name}` glob placeholder whose name is also a declared
1327
- // column: captures no longer populate columns, so it would read
1328
- // NULL forever. The table exists here either way (freshly created
1329
- // or restored from cache), so its columns are knowable, and this
1330
- // runs before any file is ingested — a load-time failure.
1331
- let declared_columns = db.get_table_columns(&table_name).map_err(map_db_error)?;
1332
- if let Some(name) = find_capture_column_collision(&table.glob, &declared_columns) {
1333
- return Err(DirSqlError::CaptureColumnCollision {
1334
- placeholder: name.clone(),
1335
- column: name,
1336
- });
1337
- }
1338
1318
  on_file_map.insert(table_name.clone(), table.hook);
1339
1319
  strict_map.insert(table_name.clone(), table.strict);
1340
1320
  ddl_map.insert(table_name, table.ddl);
@@ -2011,7 +1991,10 @@ fn compile_groups(
2011
1991
  }
2012
1992
  None => root.to_path_buf(),
2013
1993
  };
2014
- let mapping = (table.glob.clone(), table_name.clone());
1994
+ let mapping = (
1995
+ path_table::directory_as_glob(&table.glob, &anchor, &|p| p.is_dir()),
1996
+ table_name.clone(),
1997
+ );
2015
1998
  match grouped
2016
1999
  .iter_mut()
2017
2000
  .find(|(a, i, _)| *a == anchor && *i == table.ignore)
@@ -2516,18 +2499,6 @@ pub(crate) fn json_to_value(value: &serde_json::Value) -> Value {
2516
2499
  }
2517
2500
  }
2518
2501
 
2519
- /// Returns the first `{name}` placeholder in `glob` whose name is also one of
2520
- /// `declared_columns`. `None` when the glob has no placeholders or none of
2521
- /// them names a declared column. Pure: the sole input is the glob string and
2522
- /// the column list, so it is exhaustively unit-testable.
2523
- fn find_capture_column_collision(glob: &str, declared_columns: &[String]) -> Option<String> {
2524
- let declared: std::collections::HashSet<&str> =
2525
- declared_columns.iter().map(String::as_str).collect();
2526
- crate::matcher::placeholder_names(glob)
2527
- .into_iter()
2528
- .find(|name| declared.contains(name.as_str()))
2529
- }
2530
-
2531
2502
  /// Async wrapper around [`DirSQL`] whose constructor returns immediately while
2532
2503
  /// the initial scan runs on a background thread.
2533
2504
  ///
@@ -4503,54 +4474,6 @@ mod internal_tests {
4503
4474
  assert_eq!(deleted, vec![("gone.txt".to_string(), "t".to_string())]);
4504
4475
  }
4505
4476
 
4506
- #[test]
4507
- fn find_capture_column_collision_flags_a_placeholder_naming_a_column() {
4508
- let declared = vec!["thread_id".to_string(), "basename".to_string()];
4509
- assert_eq!(
4510
- find_capture_column_collision("_comments/{thread_id}/*.txt", &declared),
4511
- Some("thread_id".to_string())
4512
- );
4513
- }
4514
-
4515
- #[test]
4516
- fn find_capture_column_collision_ignores_a_placeholder_with_no_column() {
4517
- let declared = vec!["path".to_string(), "basename".to_string()];
4518
- assert_eq!(
4519
- find_capture_column_collision("_comments/{thread_id}/*.txt", &declared),
4520
- None
4521
- );
4522
- }
4523
-
4524
- #[test]
4525
- fn find_capture_column_collision_none_without_placeholders() {
4526
- let declared = vec!["thread_id".to_string()];
4527
- assert_eq!(
4528
- find_capture_column_collision("_comments/*/*.txt", &declared),
4529
- None
4530
- );
4531
- }
4532
-
4533
- #[test]
4534
- fn find_capture_column_collision_returns_first_colliding_placeholder() {
4535
- let declared = vec!["repo".to_string(), "org".to_string()];
4536
- assert_eq!(
4537
- find_capture_column_collision("{org}/{repo}/data.json", &declared),
4538
- Some("org".to_string())
4539
- );
4540
- }
4541
-
4542
- #[test]
4543
- fn capture_column_collision_error_names_placeholder_and_fix() {
4544
- let err = DirSqlError::CaptureColumnCollision {
4545
- placeholder: "thread_id".to_string(),
4546
- column: "thread_id".to_string(),
4547
- };
4548
- let msg = err.to_string();
4549
- assert!(msg.contains("thread_id"));
4550
- assert!(msg.contains("collides"));
4551
- assert!(msg.contains("on-file"));
4552
- }
4553
-
4554
4477
  /// A `name` the batch never created: the error has to say what it *did*
4555
4478
  /// create, or a typo gives the reader nothing to compare against.
4556
4479
  #[test]
@@ -79,8 +79,6 @@ pub struct MatchResult {
79
79
  pub table_name: String,
80
80
  }
81
81
 
82
- /// A compiled glob pattern. `{name}` placeholders are rewritten to `*` before
83
- /// compilation, so they are pure match wildcards.
84
82
  #[derive(Clone)]
85
83
  struct PatternEntry {
86
84
  pattern: PathGlob,
@@ -100,72 +98,13 @@ pub struct TableMatcher {
100
98
  gitignore: bool,
101
99
  }
102
100
 
103
- /// Byte spans of the `{name}` placeholders in `pattern`, in order: `(start,
104
- /// end, name)` with `end` past the closing brace.
105
- ///
106
- /// The grammar is exactly `{` `[a-zA-Z_][a-zA-Z0-9_]*` `}`. Anything else --
107
- /// `{}`, `{1a}`, `{a-b}`, an unclosed `{` -- is not a placeholder and is left
108
- /// alone, matching the leftmost-first, non-overlapping scan the equivalent
109
- /// regex performed.
110
- fn placeholder_spans(pattern: &str) -> Vec<(usize, usize, String)> {
111
- let bytes = pattern.as_bytes();
112
- let mut spans = Vec::new();
113
- let mut i = 0;
114
- while i < bytes.len() {
115
- if bytes[i] == b'{' {
116
- let mut j = i + 1;
117
- if j < bytes.len() && (bytes[j].is_ascii_alphabetic() || bytes[j] == b'_') {
118
- j += 1;
119
- while j < bytes.len() && (bytes[j].is_ascii_alphanumeric() || bytes[j] == b'_') {
120
- j += 1;
121
- }
122
- if j < bytes.len() && bytes[j] == b'}' {
123
- // Every byte in `i..=j` is ASCII, so these are char boundaries.
124
- spans.push((i, j + 1, pattern[i + 1..j].to_string()));
125
- i = j + 1;
126
- continue;
127
- }
128
- }
129
- }
130
- i += 1;
131
- }
132
- spans
133
- }
134
-
135
- /// Names of the `{name}` placeholders in `pattern`, in order of appearance.
136
- pub fn placeholder_names(pattern: &str) -> Vec<String> {
137
- placeholder_spans(pattern)
138
- .into_iter()
139
- .map(|(_, _, name)| name)
140
- .collect()
141
- }
142
-
143
- /// Rewrite `{name}` placeholders in a glob to `*`, so they match a single path
144
- /// segment without producing any captured value.
145
- fn glob_with_placeholders_as_star(pattern: &str) -> String {
146
- let spans = placeholder_spans(pattern);
147
- if spans.is_empty() {
148
- return pattern.to_string();
149
- }
150
- let mut out = String::with_capacity(pattern.len());
151
- let mut last = 0;
152
- for (start, end, _) in spans {
153
- out.push_str(&pattern[last..start]);
154
- out.push('*');
155
- last = end;
156
- }
157
- out.push_str(&pattern[last..]);
158
- out
159
- }
160
-
161
101
  impl TableMatcher {
162
102
  /// Build a new matcher from (glob_pattern, table_name) pairs and ignore patterns.
163
- /// Glob patterns may contain `{name}` placeholders, which match like `*`.
164
103
  pub fn new(mappings: &[(&str, &str)], ignore_patterns: &[&str]) -> Result<Self, GlobError> {
165
104
  let mut entries = Vec::new();
166
105
  for (pattern, table_name) in mappings {
167
106
  entries.push(PatternEntry {
168
- pattern: compile_glob(&glob_with_placeholders_as_star(pattern))?,
107
+ pattern: compile_glob(pattern)?,
169
108
  table_name: table_name.to_string(),
170
109
  });
171
110
  }
@@ -273,20 +212,6 @@ mod tests {
273
212
  );
274
213
  }
275
214
 
276
- #[test]
277
- fn placeholder_glob_matches_like_a_star() {
278
- // A `{name}` placeholder and a `*` compile to the same matcher: both
279
- // globs match exactly the same file.
280
- let placeholder = TableMatcher::new(&[("data/{id}/metadata.json", "a")], &[]).unwrap();
281
- let star = TableMatcher::new(&[("data/*/metadata.json", "a")], &[]).unwrap();
282
- let path = Path::new("data/x/metadata.json");
283
- assert_eq!(names(&placeholder, "data/x/metadata.json"), vec!["a"]);
284
- assert_eq!(
285
- placeholder.match_all(path).is_empty(),
286
- star.match_all(path).is_empty(),
287
- );
288
- }
289
-
290
215
  #[test]
291
216
  fn match_all_with_nested_path() {
292
217
  let matcher = TableMatcher::new(&[("**/*.jsonl", "events")], &[]).unwrap();
@@ -368,105 +293,6 @@ mod tests {
368
293
  assert_eq!(names(&matcher, "logs/deep/nested/b.txt"), vec!["t"]);
369
294
  }
370
295
 
371
- #[test]
372
- fn placeholder_matches_the_filled_segment() {
373
- let matcher =
374
- TableMatcher::new(&[("comments/{thread_id}/index.jsonl", "comments")], &[]).unwrap();
375
- assert_eq!(
376
- names(&matcher, "comments/abc123/index.jsonl"),
377
- vec!["comments"]
378
- );
379
- }
380
-
381
- #[test]
382
- fn multiple_placeholders_match() {
383
- let matcher = TableMatcher::new(&[("{org}/{repo}/data.json", "repos")], &[]).unwrap();
384
- assert_eq!(names(&matcher, "acme/widgets/data.json"), vec!["repos"]);
385
- }
386
-
387
- #[test]
388
- fn placeholder_no_match_returns_empty() {
389
- let matcher =
390
- TableMatcher::new(&[("comments/{thread_id}/index.jsonl", "comments")], &[]).unwrap();
391
- assert!(matcher.match_all(Path::new("other/file.txt")).is_empty());
392
- }
393
-
394
- #[test]
395
- fn placeholder_with_double_star_matches() {
396
- let matcher = TableMatcher::new(&[("**/{category}/items.json", "items")], &[]).unwrap();
397
- assert_eq!(
398
- names(&matcher, "shop/electronics/items.json"),
399
- vec!["items"]
400
- );
401
- }
402
-
403
- #[test]
404
- fn placeholder_with_question_mark_matches() {
405
- let matcher = TableMatcher::new(&[("{name}?.txt", "files")], &[]).unwrap();
406
- assert_eq!(names(&matcher, "ab.txt"), vec!["files"]);
407
- }
408
-
409
- #[test]
410
- fn placeholder_names_lists_names_in_order() {
411
- assert_eq!(
412
- placeholder_names("{org}/{repo}/data.json"),
413
- vec!["org".to_string(), "repo".to_string()]
414
- );
415
- }
416
-
417
- #[test]
418
- fn placeholder_names_empty_when_none() {
419
- assert!(placeholder_names("data/*/metadata.json").is_empty());
420
- }
421
-
422
- #[test]
423
- fn placeholder_names_rejects_everything_outside_the_grammar() {
424
- // The grammar is exactly `{` `[a-zA-Z_][a-zA-Z0-9_]*` `}`. Each of these
425
- // fails it at a different point -- empty name, a leading digit, a
426
- // disallowed interior byte, and a brace that runs off the end of the
427
- // pattern -- and all are left alone rather than read as a placeholder.
428
- for pattern in ["{}", "{1a}", "{a-b}", "{a b}", "{", "a{", "{a", "{_"] {
429
- assert!(
430
- placeholder_names(pattern).is_empty(),
431
- "`{pattern}` is outside the grammar, so it is not a placeholder"
432
- );
433
- assert_eq!(
434
- glob_with_placeholders_as_star(pattern),
435
- pattern,
436
- "`{pattern}` is not a placeholder, so the glob is unrewritten"
437
- );
438
- }
439
- }
440
-
441
- #[test]
442
- fn placeholder_names_accepts_the_whole_grammar() {
443
- // A name starts with a letter or `_` and continues with those plus
444
- // digits.
445
- assert_eq!(placeholder_names("{a}"), vec!["a".to_string()]);
446
- assert_eq!(placeholder_names("{_}"), vec!["_".to_string()]);
447
- assert_eq!(placeholder_names("{_a1}"), vec!["_a1".to_string()]);
448
- assert_eq!(placeholder_names("{A_1z}"), vec!["A_1z".to_string()]);
449
- }
450
-
451
- #[test]
452
- fn the_scan_resumes_at_the_byte_after_a_closing_brace() {
453
- // Leftmost-first and non-overlapping: back-to-back placeholders both
454
- // register, and every byte outside a span survives the rewrite.
455
- assert_eq!(
456
- placeholder_names("{a}{b}"),
457
- vec!["a".to_string(), "b".to_string()]
458
- );
459
- assert_eq!(glob_with_placeholders_as_star("x{a}y{b}z"), "x*y*z");
460
- }
461
-
462
- #[test]
463
- fn an_unclosed_brace_leaves_a_later_placeholder_intact() {
464
- // The `{` at 0 fails the grammar, so the scan advances one byte at a
465
- // time and still finds the real placeholder behind it.
466
- assert_eq!(placeholder_names("{a{b}"), vec!["b".to_string()]);
467
- assert_eq!(glob_with_placeholders_as_star("{a{b}"), "{a*");
468
- }
469
-
470
296
  /// Two files at depth 0, two under `folder/`, two under `folder/sub/`, one
471
297
  /// under a sibling directory.
472
298
  const FIXTURE: [&str; 7] = [
@@ -602,12 +428,12 @@ mod tests {
602
428
  }
603
429
 
604
430
  #[test]
605
- fn a_placeholder_matches_exactly_one_path_segment() {
431
+ fn a_braced_name_matches_only_itself() {
606
432
  let matcher = TableMatcher::new(&[("data/{id}/metadata.json", "a")], &[]).unwrap();
607
- assert_eq!(names(&matcher, "data/x/metadata.json"), vec!["a"]);
433
+ assert_eq!(names(&matcher, "data/{id}/metadata.json"), vec!["a"]);
608
434
  assert!(
609
435
  matcher
610
- .match_all(Path::new("data/x/y/metadata.json"))
436
+ .match_all(Path::new("data/x/metadata.json"))
611
437
  .is_empty()
612
438
  );
613
439
  }
@@ -149,6 +149,17 @@ fn resolve_as<S: Syntax>(
149
149
  }
150
150
  }
151
151
 
152
+ /// `glob` as a path-table reads the same string after `FROM './`: a trailing
153
+ /// separator or a wholly literal name that is a directory under `index_root`
154
+ /// lists the files directly inside it.
155
+ pub fn directory_as_glob(glob: &str, index_root: &Path, is_dir: &dyn Fn(&Path) -> bool) -> String {
156
+ let target = trailing_separator_as_star::<Utf8UnixEncoding>(glob);
157
+ if !target.is_empty() && !has_glob_metacharacter(&target) && is_dir(&index_root.join(&target)) {
158
+ return format!("{target}/{DIRECTORY_GLOB}");
159
+ }
160
+ target
161
+ }
162
+
152
163
  /// Where a config `[[table]] glob` anchors, and the glob to match beneath it.
153
164
  ///
154
165
  /// A glob with a path-table prefix (`/`, `../`, `~/`, a drive or UNC root)
@@ -360,6 +371,45 @@ mod tests {
360
371
  }
361
372
  }
362
373
 
374
+ fn directory_glob(glob: &str, is_dir: &dyn Fn(&Path) -> bool) -> String {
375
+ directory_as_glob(glob, Path::new(ROOT), is_dir)
376
+ }
377
+
378
+ #[test]
379
+ fn a_literal_directory_name_lists_one_level() {
380
+ assert_eq!(directory_glob("docs", &everything_is_a_dir), "docs/*");
381
+ }
382
+
383
+ #[test]
384
+ fn a_literal_directory_is_looked_up_under_the_index_root() {
385
+ let only_docs = |p: &Path| p == Path::new("/index/docs");
386
+ assert_eq!(directory_glob("docs", &only_docs), "docs/*");
387
+ assert_eq!(directory_glob("other", &only_docs), "other");
388
+ }
389
+
390
+ #[test]
391
+ fn a_literal_file_name_is_left_alone() {
392
+ assert_eq!(directory_glob("top.md", &nothing_is_a_dir), "top.md");
393
+ }
394
+
395
+ #[test]
396
+ fn a_glob_is_left_alone_even_when_a_directory_has_its_name() {
397
+ assert_eq!(
398
+ directory_glob("docs/*.md", &everything_is_a_dir),
399
+ "docs/*.md"
400
+ );
401
+ }
402
+
403
+ #[test]
404
+ fn a_trailing_separator_lists_one_level() {
405
+ assert_eq!(directory_glob("docs/", &nothing_is_a_dir), "docs/*");
406
+ }
407
+
408
+ #[test]
409
+ fn an_empty_glob_is_left_alone() {
410
+ assert_eq!(directory_glob("", &everything_is_a_dir), "");
411
+ }
412
+
363
413
  #[test]
364
414
  fn default_ignores_cover_vcs_and_dependency_directories() {
365
415
  assert_eq!(DEFAULT_IGNORES, ["**/node_modules/**", "**/.git/**"]);
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