dirsql 0.4.99__tar.gz → 0.4.100__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 (407) hide show
  1. {dirsql-0.4.99 → dirsql-0.4.100}/Cargo.lock +2 -2
  2. {dirsql-0.4.99 → dirsql-0.4.100}/PKG-INFO +1 -1
  3. {dirsql-0.4.99/packages/rust → dirsql-0.4.100}/docs/context/usage.md +1 -1
  4. {dirsql-0.4.99 → dirsql-0.4.100}/docs/howto/query-without-config.md +1 -1
  5. {dirsql-0.4.99/packages/rust → dirsql-0.4.100}/docs/reference/columns.md +1 -1
  6. {dirsql-0.4.99/packages/rust → dirsql-0.4.100}/docs/reference/glob.md +23 -5
  7. {dirsql-0.4.99 → dirsql-0.4.100}/docs/reference/path-tables.md +6 -10
  8. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/Cargo.toml +1 -1
  9. dirsql-0.4.100/packages/python/changelog.d/2026-10-07-dotdot-as-written.md +3 -0
  10. {dirsql-0.4.99 → dirsql-0.4.100/packages/python}/docs/context/usage.md +1 -1
  11. {dirsql-0.4.99/packages/rust → dirsql-0.4.100/packages/python}/docs/howto/query-without-config.md +1 -1
  12. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/docs/reference/columns.md +1 -1
  13. {dirsql-0.4.99 → dirsql-0.4.100/packages/python}/docs/reference/glob.md +23 -5
  14. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/docs/reference/path-tables.md +6 -10
  15. dirsql-0.4.100/packages/python/e2e-attestations/bot-1430-dotdot-as-written.json +7 -0
  16. dirsql-0.4.100/packages/python/e2e-attestations/bot-1448-wildcard-ignored-prefix.json +7 -0
  17. dirsql-0.4.100/packages/python/migrations.d/2026-10-07-dotdot-as-written.md +23 -0
  18. {dirsql-0.4.99 → dirsql-0.4.100}/packages/rust/Cargo.toml +1 -1
  19. {dirsql-0.4.99/packages/python → dirsql-0.4.100/packages/rust}/docs/context/usage.md +1 -1
  20. {dirsql-0.4.99/packages/python → dirsql-0.4.100/packages/rust}/docs/howto/query-without-config.md +1 -1
  21. {dirsql-0.4.99 → dirsql-0.4.100/packages/rust}/docs/reference/columns.md +1 -1
  22. {dirsql-0.4.99/packages/python → dirsql-0.4.100/packages/rust}/docs/reference/glob.md +23 -5
  23. {dirsql-0.4.99 → dirsql-0.4.100}/packages/rust/docs/reference/path-tables.md +6 -10
  24. {dirsql-0.4.99 → dirsql-0.4.100}/packages/rust/src/db.rs +29 -5
  25. {dirsql-0.4.99 → dirsql-0.4.100}/packages/rust/src/parsed_vtab.rs +5 -2
  26. {dirsql-0.4.99 → dirsql-0.4.100}/packages/rust/src/path_table.rs +41 -15
  27. {dirsql-0.4.99 → dirsql-0.4.100}/packages/rust/src/scanner.rs +79 -2
  28. {dirsql-0.4.99 → dirsql-0.4.100}/packages/rust/src/vtab.rs +11 -2
  29. {dirsql-0.4.99 → dirsql-0.4.100}/packages/rust/src/vtab_scaffold.rs +13 -0
  30. dirsql-0.4.99/packages/python/changelog.d/2026-10-07-fix-main-build.md +0 -3
  31. dirsql-0.4.99/packages/python/migrations.d/2026-10-07-fix-main-build.md +0 -23
  32. {dirsql-0.4.99 → dirsql-0.4.100}/Cargo.toml +0 -0
  33. {dirsql-0.4.99 → dirsql-0.4.100}/README.md +0 -0
  34. {dirsql-0.4.99 → dirsql-0.4.100}/dirsql/__init__.py +0 -0
  35. {dirsql-0.4.99 → dirsql-0.4.100}/dirsql/_async.py +0 -0
  36. {dirsql-0.4.99 → dirsql-0.4.100}/dirsql/_dirsql.pyi +0 -0
  37. {dirsql-0.4.99 → dirsql-0.4.100}/dirsql/cli/__init__.py +0 -0
  38. {dirsql-0.4.99 → dirsql-0.4.100}/dirsql/cli/discover_plugins/__init__.py +0 -0
  39. {dirsql-0.4.99 → dirsql-0.4.100}/dirsql/cli/discover_plugins/discovered_fragments.py +0 -0
  40. {dirsql-0.4.99 → dirsql-0.4.100}/dirsql/cli/discover_plugins/discovery_disabled.py +0 -0
  41. {dirsql-0.4.99 → dirsql-0.4.100}/dirsql/cli/discover_plugins/fragment_path.py +0 -0
  42. {dirsql-0.4.99 → dirsql-0.4.100}/dirsql/cli/discover_plugins/with_discovered_plugins.py +0 -0
  43. {dirsql-0.4.99 → dirsql-0.4.100}/dirsql/cli/main.py +0 -0
  44. {dirsql-0.4.99 → dirsql-0.4.100}/dirsql/cli/resolve_config_extensions.py +0 -0
  45. {dirsql-0.4.99 → dirsql-0.4.100}/dirsql/plan_entry_path.py +0 -0
  46. {dirsql-0.4.99 → dirsql-0.4.100}/dirsql/py.typed +0 -0
  47. {dirsql-0.4.99 → dirsql-0.4.100}/dirsql/read_config.py +0 -0
  48. {dirsql-0.4.99 → dirsql-0.4.100}/dirsql/resolve_configs_extension_specs.py +0 -0
  49. {dirsql-0.4.99 → dirsql-0.4.100}/dirsql/resolve_extension.py +0 -0
  50. {dirsql-0.4.99 → dirsql-0.4.100}/dirsql/resolve_package.py +0 -0
  51. {dirsql-0.4.99 → dirsql-0.4.100}/docs/.claude/CLAUDE.md +0 -0
  52. {dirsql-0.4.99 → dirsql-0.4.100}/docs/.vitepress/config.ts +0 -0
  53. {dirsql-0.4.99 → dirsql-0.4.100}/docs/.vitepress/theme/index.ts +0 -0
  54. {dirsql-0.4.99 → dirsql-0.4.100}/docs/.vitepress/theme/lang.ts +0 -0
  55. {dirsql-0.4.99 → dirsql-0.4.100}/docs/AGENTS.md +0 -0
  56. {dirsql-0.4.99 → dirsql-0.4.100}/docs/context/.gitattributes +0 -0
  57. {dirsql-0.4.99 → dirsql-0.4.100}/docs/context/recipes.md +0 -0
  58. {dirsql-0.4.99 → dirsql-0.4.100}/docs/context/troubleshooting.md +0 -0
  59. {dirsql-0.4.99 → dirsql-0.4.100}/docs/explanation.md +0 -0
  60. {dirsql-0.4.99 → dirsql-0.4.100}/docs/getting-started.md +0 -0
  61. {dirsql-0.4.99 → dirsql-0.4.100}/docs/howto/agent-skill.md +0 -0
  62. {dirsql-0.4.99 → dirsql-0.4.100}/docs/howto/columns-from-paths.md +0 -0
  63. {dirsql-0.4.99 → dirsql-0.4.100}/docs/howto/define-tables.md +0 -0
  64. {dirsql-0.4.99 → dirsql-0.4.100}/docs/howto/embed.md +0 -0
  65. {dirsql-0.4.99 → dirsql-0.4.100}/docs/howto/extract-from-contents.md +0 -0
  66. {dirsql-0.4.99 → dirsql-0.4.100}/docs/howto/load-extension.md +0 -0
  67. {dirsql-0.4.99 → dirsql-0.4.100}/docs/howto/parse-files-into-columns.md +0 -0
  68. {dirsql-0.4.99 → dirsql-0.4.100}/docs/howto/persist.md +0 -0
  69. {dirsql-0.4.99 → dirsql-0.4.100}/docs/howto/query-json.md +0 -0
  70. {dirsql-0.4.99 → dirsql-0.4.100}/docs/howto/react-to-changes.md +0 -0
  71. {dirsql-0.4.99 → dirsql-0.4.100}/docs/howto/search-by-meaning.md +0 -0
  72. {dirsql-0.4.99 → dirsql-0.4.100}/docs/howto/search-indexes.md +0 -0
  73. {dirsql-0.4.99 → dirsql-0.4.100}/docs/howto/skip-files.md +0 -0
  74. {dirsql-0.4.99 → dirsql-0.4.100}/docs/howto/write-a-plugin.md +0 -0
  75. {dirsql-0.4.99 → dirsql-0.4.100}/docs/index.md +0 -0
  76. {dirsql-0.4.99 → dirsql-0.4.100}/docs/package.json +0 -0
  77. {dirsql-0.4.99 → dirsql-0.4.100}/docs/plugins.md +0 -0
  78. {dirsql-0.4.99 → dirsql-0.4.100}/docs/pnpm-lock.yaml +0 -0
  79. {dirsql-0.4.99 → dirsql-0.4.100}/docs/pnpm-workspace.yaml +0 -0
  80. {dirsql-0.4.99 → dirsql-0.4.100}/docs/reference/cli.md +0 -0
  81. {dirsql-0.4.99 → dirsql-0.4.100}/docs/reference/config.md +0 -0
  82. {dirsql-0.4.99 → dirsql-0.4.100}/docs/reference/hooks.md +0 -0
  83. {dirsql-0.4.99 → dirsql-0.4.100}/docs/reference/http-api.md +0 -0
  84. {dirsql-0.4.99 → dirsql-0.4.100}/docs/reference/sdk.md +0 -0
  85. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/CHANGELOG.md +0 -0
  86. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/MIGRATIONS.md +0 -0
  87. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/README.md +0 -0
  88. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/changelog.d/2026-07-13-drop-cwd-config-auto-detect.md +0 -0
  89. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/changelog.d/2026-07-13-plugin-discovery.md +0 -0
  90. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/changelog.d/2026-07-13-rename-extract-to-on-file.md +0 -0
  91. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/changelog.d/2026-07-13-repeatable-config.md +0 -0
  92. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/changelog.d/2026-07-13-sdk-default-baked-in-config.md +0 -0
  93. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/changelog.d/2026-07-20-drop-implicit-files-table.md +0 -0
  94. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/changelog.d/2026-07-21-remove-glob-captures.md +0 -0
  95. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/changelog.d/2026-07-24-hookless-table-config-error.md +0 -0
  96. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/changelog.d/2026-07-24-remove-stat-fact-injection.md +0 -0
  97. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/changelog.d/2026-07-29-restore-python-310.md +0 -0
  98. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/changelog.d/2026-08-02-release-profile.md +0 -0
  99. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/changelog.d/2026-08-02-scan-failures.md +0 -0
  100. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/changelog.d/2026-08-03-discovery-ext-resolution.md +0 -0
  101. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/changelog.d/2026-08-03-manylinux-dynamic-binary.md +0 -0
  102. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/changelog.d/2026-08-03-python-no-ignore.md +0 -0
  103. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/changelog.d/2026-08-04-cast-lints.md +0 -0
  104. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/changelog.d/2026-08-04-cli-in-process.md +0 -0
  105. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/changelog.d/2026-08-20-curtaincall-dev-dependency.md +0 -0
  106. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/changelog.d/2026-08-20-declared-table-name.md +0 -0
  107. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/changelog.d/2026-09-04-config-paths-from-argv-module.md +0 -0
  108. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/changelog.d/2026-09-05-config-extension-loader-split.md +0 -0
  109. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/changelog.d/2026-09-05-resolve-config-extensions-split.md +0 -0
  110. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/changelog.d/2026-09-05-resolve-extension-split.md +0 -0
  111. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/changelog.d/2026-09-09-launcher-config-path-scan.md +0 -0
  112. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/changelog.d/2026-09-17-extension-resolution-via-core.md +0 -0
  113. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/changelog.d/2026-09-18-export-scan-failure.md +0 -0
  114. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/changelog.d/2026-09-18-flatten-row-event-in-core.md +0 -0
  115. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/changelog.d/2026-09-18-programmatic-extension-plan.md +0 -0
  116. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/changelog.d/2026-09-20-sigint-ends-a-run-in-progress.md +0 -0
  117. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/changelog.d/2026-09-24-query-rows-in-projection-order.md +0 -0
  118. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/changelog.d/2026-10-02-readme-docs-host.md +0 -0
  119. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/changelog.d/2026-10-03-one-glob-rule-for-config-globs.md +0 -0
  120. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/changelog.d/2026-10-03-path-table-directory-one-level.md +0 -0
  121. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/changelog.d/2026-10-04-path-table-dotfiles-hidden.md +0 -0
  122. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/changelog.d/2026-10-05-brace-groups-follow-bash.md +0 -0
  123. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/changelog.d/2026-10-05-cli-context.md +0 -0
  124. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/changelog.d/2026-10-05-gitignore-requires-repo.md +0 -0
  125. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/changelog.d/2026-10-05-path-table-node-modules-named.md +0 -0
  126. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/changelog.d/2026-10-05-path-table-symlinks.md +0 -0
  127. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/changelog.d/2026-10-05-path-table-trailing-slash.md +0 -0
  128. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/changelog.d/2026-10-05-unbalanced-brackets-literal.md +0 -0
  129. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/changelog.d/2026-10-06-config-braces.md +0 -0
  130. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/changelog.d/2026-10-06-config-directory.md +0 -0
  131. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/changelog.d/2026-10-06-config-dotnames.md +0 -0
  132. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/changelog.d/2026-10-06-config-gitignore.md +0 -0
  133. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/changelog.d/2026-10-06-config-globs-anchor-at-the-config.md +0 -0
  134. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/changelog.d/2026-10-06-config-links.md +0 -0
  135. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/changelog.d/2026-10-06-one-glob-compiler.md +0 -0
  136. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/changelog.d/2026-10-06-plugin-no-default-records.md +0 -0
  137. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/changelog.d/2026-10-06-watch-broadcast.md +0 -0
  138. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/changelog.d/2026-10-06-zero-match-config-table-warning.md +0 -0
  139. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/changelog.d/2026-10-07-bracket-slash-literal.md +0 -0
  140. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/changelog.d/2026-10-07-dotdot-and-double-slashes.md +0 -0
  141. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/changelog.d/2026-10-07-glob-walks-node-modules.md +0 -0
  142. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/changelog.d/2026-10-07-literal-gitignore.md +0 -0
  143. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/changelog.d/2026-10-07-persist-cache-outside-root.md +0 -0
  144. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/changelog.d/2026-10-07-posix-classes-unicode.md +0 -0
  145. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/changelog.d/README.md +0 -0
  146. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/conftest.py +0 -0
  147. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/docs/.claude/CLAUDE.md +0 -0
  148. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/docs/.vitepress/config.ts +0 -0
  149. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/docs/.vitepress/theme/index.ts +0 -0
  150. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/docs/.vitepress/theme/lang.ts +0 -0
  151. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/docs/AGENTS.md +0 -0
  152. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/docs/context/.gitattributes +0 -0
  153. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/docs/context/recipes.md +0 -0
  154. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/docs/context/troubleshooting.md +0 -0
  155. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/docs/explanation.md +0 -0
  156. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/docs/getting-started.md +0 -0
  157. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/docs/howto/agent-skill.md +0 -0
  158. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/docs/howto/columns-from-paths.md +0 -0
  159. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/docs/howto/define-tables.md +0 -0
  160. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/docs/howto/embed.md +0 -0
  161. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/docs/howto/extract-from-contents.md +0 -0
  162. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/docs/howto/load-extension.md +0 -0
  163. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/docs/howto/parse-files-into-columns.md +0 -0
  164. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/docs/howto/persist.md +0 -0
  165. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/docs/howto/query-json.md +0 -0
  166. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/docs/howto/react-to-changes.md +0 -0
  167. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/docs/howto/search-by-meaning.md +0 -0
  168. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/docs/howto/search-indexes.md +0 -0
  169. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/docs/howto/skip-files.md +0 -0
  170. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/docs/howto/write-a-plugin.md +0 -0
  171. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/docs/index.md +0 -0
  172. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/docs/package.json +0 -0
  173. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/docs/plugins.md +0 -0
  174. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/docs/pnpm-lock.yaml +0 -0
  175. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/docs/pnpm-workspace.yaml +0 -0
  176. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/docs/reference/cli.md +0 -0
  177. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/docs/reference/config.md +0 -0
  178. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/docs/reference/hooks.md +0 -0
  179. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/docs/reference/http-api.md +0 -0
  180. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/docs/reference/sdk.md +0 -0
  181. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/e2e-attestations/bot-1334-listing-exemptions.json +0 -0
  182. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/e2e-attestations/bot-1397-watch-broadcast.json +0 -0
  183. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/e2e-attestations/bot-1398-inotify-error.json +0 -0
  184. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/e2e-attestations/bot-1399-server-cors.json +0 -0
  185. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/e2e-attestations/bot-1401-watch-scope.json +0 -0
  186. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/e2e-attestations/bot-1407-child-place-depth.json +0 -0
  187. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/e2e-attestations/bot-1414-stat-speed.json +0 -0
  188. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/e2e-attestations/bot-1415-server-speed.json +0 -0
  189. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/e2e-attestations/bot-1418-node-modules.json +0 -0
  190. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/e2e-attestations/bot-1419-dotdot-slashes.json +0 -0
  191. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/e2e-attestations/bot-1420-bracket-slash.json +0 -0
  192. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/e2e-attestations/bot-1421-posix-unicode.json +0 -0
  193. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/e2e-attestations/bot-1422-literal-gitignore.json +0 -0
  194. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/e2e-attestations/bot-1431-persist-cache-dir.json +0 -0
  195. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/e2e-attestations/bot-1437-test-cache-isolation.json +0 -0
  196. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/e2e-attestations/bot-1440-fix-main-build.json +0 -0
  197. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/e2e-attestations/bot-fix-main-place-depth-20261007.json +0 -0
  198. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/e2e-attestations/cc-keen-knuth-f11gyq.json +0 -0
  199. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/e2e-attestations/claude-1056-py-ofpf9.json +0 -0
  200. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/e2e-attestations/claude-1066-p1-resolve-extension.json +0 -0
  201. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/e2e-attestations/claude-1078-argv-config-paths-core.json +0 -0
  202. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/e2e-attestations/claude-1079-p2-resolve-config-extensions.json +0 -0
  203. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/e2e-attestations/claude-1080-share-vtab-scaffolding.json +0 -0
  204. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/e2e-attestations/claude-1081-indicatif-progress.json +0 -0
  205. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/e2e-attestations/claude-1096-watch-moved-dir.json +0 -0
  206. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/e2e-attestations/claude-1109-watch-moved-out.json +0 -0
  207. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/e2e-attestations/claude-1119-ext-plan.json +0 -0
  208. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/e2e-attestations/claude-1120-py-ext.json +0 -0
  209. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/e2e-attestations/claude-1122-ext-cleanup.json +0 -0
  210. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/e2e-attestations/claude-1130-codec-crates.json +0 -0
  211. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/e2e-attestations/claude-1131-flatten-row-event.json +0 -0
  212. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/e2e-attestations/claude-1139-sse-flatten.json +0 -0
  213. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/e2e-attestations/claude-1140-scan-failure-export.json +0 -0
  214. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/e2e-attestations/claude-1148-clippy-all-targets.json +0 -0
  215. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/e2e-attestations/claude-1164-sigint-fatal.json +0 -0
  216. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/e2e-attestations/claude-1170-projection-order.json +0 -0
  217. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/e2e-attestations/claude-1172-on-file-path.json +0 -0
  218. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/e2e-attestations/claude-1173-py-projection-order.json +0 -0
  219. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/e2e-attestations/claude-1184-win-rel-paths.json +0 -0
  220. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/e2e-attestations/claude-1185-win-abs-table-names.json +0 -0
  221. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/e2e-attestations/claude-1186-win-test-harness.json +0 -0
  222. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/e2e-attestations/claude-1196-join-index.json +0 -0
  223. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/e2e-attestations/claude-1199-glob-prefix.json +0 -0
  224. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/e2e-attestations/claude-1201-single-walk.json +0 -0
  225. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/e2e-attestations/claude-1204-embed-batch.json +0 -0
  226. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/e2e-attestations/claude-1207-win-argv-quote.json +0 -0
  227. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/e2e-attestations/claude-1208-win-nonverbatim-paths.json +0 -0
  228. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/e2e-attestations/claude-1215-on-file-batch.json +0 -0
  229. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/e2e-attestations/claude-1216-on-file-cleanup.json +0 -0
  230. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/e2e-attestations/claude-1223-config-glob-rule.json +0 -0
  231. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/e2e-attestations/claude-1223-dir-one-level.json +0 -0
  232. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/e2e-attestations/claude-1225-plugin-no-default.json +0 -0
  233. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/e2e-attestations/claude-1226-stale-docs.json +0 -0
  234. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/e2e-attestations/claude-1232-anchor-plumbing.json +0 -0
  235. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/e2e-attestations/claude-1232-config-anchor.json +0 -0
  236. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/e2e-attestations/claude-1232-multi-watch.json +0 -0
  237. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/e2e-attestations/claude-1232-zero-match.json +0 -0
  238. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/e2e-attestations/claude-1238-parallel-walk.json +0 -0
  239. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/e2e-attestations/claude-1241-content-prefetch.json +0 -0
  240. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/e2e-attestations/claude-1243-ingest-perf.json +0 -0
  241. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/e2e-attestations/claude-1249-dotfiles.json +0 -0
  242. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/e2e-attestations/claude-1256-symlinks.json +0 -0
  243. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/e2e-attestations/claude-1257-trailing-slash.json +0 -0
  244. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/e2e-attestations/claude-1258-config-braces.json +0 -0
  245. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/e2e-attestations/claude-1258-config-directory.json +0 -0
  246. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/e2e-attestations/claude-1258-config-dotnames.json +0 -0
  247. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/e2e-attestations/claude-1258-config-gitignore.json +0 -0
  248. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/e2e-attestations/claude-1258-config-links.json +0 -0
  249. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/e2e-attestations/claude-1258-one-pattern.json +0 -0
  250. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/e2e-attestations/claude-1262-brace-literal.json +0 -0
  251. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/e2e-attestations/claude-1264-context.json +0 -0
  252. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/e2e-attestations/claude-1267-posix-classes.json +0 -0
  253. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/e2e-attestations/claude-1268-unbalanced-brackets.json +0 -0
  254. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/e2e-attestations/claude-1269-utf8-chars.json +0 -0
  255. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/e2e-attestations/claude-1271-node-modules-named.json +0 -0
  256. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/e2e-attestations/claude-1272-ancestor-gitignore.json +0 -0
  257. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/e2e-attestations/claude-1273-walk-prune.json +0 -0
  258. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/e2e-attestations/claude-1285-ingest-fast.json +0 -0
  259. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/e2e-attestations/claude-1286-nested-repo.json +0 -0
  260. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/e2e-attestations/claude-1305-glob-speed.json +0 -0
  261. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/e2e-attestations/claude-1308-glob-speed.json +0 -0
  262. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/e2e-attestations/claude-1310-glob-speed.json +0 -0
  263. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/e2e-attestations/claude-1311-glob-speed.json +0 -0
  264. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/e2e-attestations/claude-1312-glob-speed.json +0 -0
  265. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/e2e-attestations/claude-1318-lazy-stat.json +0 -0
  266. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/e2e-attestations/claude-1320-walk-speed.json +0 -0
  267. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/e2e-attestations/claude-1322-walk-readdir.json +0 -0
  268. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/e2e-attestations/claude-1325-parallel-walk.json +0 -0
  269. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/e2e-attestations/claude-1326-stream-rows.json +0 -0
  270. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/e2e-attestations/claude-1330-python-dirsql-patch.json +0 -0
  271. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/e2e-attestations/claude-1330-python-extensions-patch.json +0 -0
  272. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/e2e-attestations/claude-1330-scanner-effects.json +0 -0
  273. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/e2e-attestations/claude-1330-scanner-gitignore.json +0 -0
  274. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/e2e-attestations/claude-1330-vtab-prefetch-flag.json +0 -0
  275. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/e2e-attestations/claude-1330-vtab-read.json +0 -0
  276. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/e2e-attestations/claude-1351-dot-dirs.json +0 -0
  277. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/e2e-attestations/claude-819-oneshot-timeout.json +0 -0
  278. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/e2e-attestations/claude-827-unquote-doubled-quotes.json +0 -0
  279. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/e2e-attestations/claude-epic-953-slice2-reedline.json +0 -0
  280. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/e2e-attestations/claude-epic-953-slice3-format.json +0 -0
  281. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/e2e-attestations/claude-epic-953-stacked-prs-x59wm3.json +0 -0
  282. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/e2e-attestations/claude-github-issue-825-e4mhhp.json +0 -0
  283. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/e2e-attestations/claude-issue-951-0eease.json +0 -0
  284. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/e2e-attestations/claude-issue-962-0jjrfv.json +0 -0
  285. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/e2e-attestations/claude-issue-986-red-test-e7sjrb.json +0 -0
  286. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/e2e-attestations/claude-tackle-1034-cachesplit.json +0 -0
  287. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/e2e-attestations/claude-tackle-1042-py12.json +0 -0
  288. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/e2e-attestations/claude-tackle-956-xzen74.json +0 -0
  289. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/e2e-attestations/claude-tackle-957-lrm0z6-worker-calls.json +0 -0
  290. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/e2e-attestations/claude-tackle-957-lrm0z6.json +0 -0
  291. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/e2e-attestations/claude-tackle-975-n8mc2h.json +0 -0
  292. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/migrations.d/2026-07-13-drop-cwd-config-auto-detect.md +0 -0
  293. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/migrations.d/2026-07-13-rename-extract-to-on-file.md +0 -0
  294. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/migrations.d/2026-07-13-sdk-default-baked-in-config.md +0 -0
  295. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/migrations.d/2026-07-20-drop-implicit-files-table.md +0 -0
  296. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/migrations.d/2026-07-21-remove-glob-captures.md +0 -0
  297. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/migrations.d/2026-07-24-hookless-table-config-error.md +0 -0
  298. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/migrations.d/2026-07-24-remove-stat-fact-injection.md +0 -0
  299. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/migrations.d/2026-07-29-restore-python-310.md +0 -0
  300. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/migrations.d/2026-08-04-cli-in-process.md +0 -0
  301. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/migrations.d/2026-08-20-declared-table-name.md +0 -0
  302. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/migrations.d/2026-09-20-sigint-ends-a-run-in-progress.md +0 -0
  303. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/migrations.d/2026-09-24-query-rows-in-projection-order.md +0 -0
  304. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/migrations.d/2026-10-02-readme-docs-host.md +0 -0
  305. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/migrations.d/2026-10-03-one-glob-rule-for-config-globs.md +0 -0
  306. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/migrations.d/2026-10-03-path-table-directory-one-level.md +0 -0
  307. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/migrations.d/2026-10-04-path-table-dotfiles-hidden.md +0 -0
  308. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/migrations.d/2026-10-05-brace-groups-follow-bash.md +0 -0
  309. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/migrations.d/2026-10-05-cli-context.md +0 -0
  310. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/migrations.d/2026-10-05-gitignore-requires-repo.md +0 -0
  311. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/migrations.d/2026-10-05-path-table-node-modules-named.md +0 -0
  312. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/migrations.d/2026-10-05-path-table-symlinks.md +0 -0
  313. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/migrations.d/2026-10-05-path-table-trailing-slash.md +0 -0
  314. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/migrations.d/2026-10-05-unbalanced-brackets-literal.md +0 -0
  315. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/migrations.d/2026-10-06-config-braces.md +0 -0
  316. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/migrations.d/2026-10-06-config-directory.md +0 -0
  317. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/migrations.d/2026-10-06-config-dotnames.md +0 -0
  318. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/migrations.d/2026-10-06-config-gitignore.md +0 -0
  319. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/migrations.d/2026-10-06-config-globs-anchor-at-the-config.md +0 -0
  320. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/migrations.d/2026-10-06-config-links.md +0 -0
  321. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/migrations.d/2026-10-06-one-glob-compiler.md +0 -0
  322. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/migrations.d/2026-10-06-plugin-no-default-records.md +0 -0
  323. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/migrations.d/2026-10-06-watch-broadcast.md +0 -0
  324. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/migrations.d/2026-10-06-zero-match-config-table-warning.md +0 -0
  325. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/migrations.d/2026-10-07-bracket-slash-literal.md +0 -0
  326. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/migrations.d/2026-10-07-dotdot-and-double-slashes.md +0 -0
  327. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/migrations.d/2026-10-07-glob-walks-node-modules.md +0 -0
  328. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/migrations.d/2026-10-07-literal-gitignore.md +0 -0
  329. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/migrations.d/2026-10-07-persist-cache-outside-root.md +0 -0
  330. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/migrations.d/2026-10-07-posix-classes-unicode.md +0 -0
  331. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/migrations.d/README.md +0 -0
  332. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/src/lib.rs +0 -0
  333. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/testing-conventions.toml +0 -0
  334. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/tests/__init__.py +0 -0
  335. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/tests/conftest.py +0 -0
  336. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/tests/e2e/__init__.py +0 -0
  337. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/tests/e2e/fixtures/dirsql_plugin_fixture/__init__.py +0 -0
  338. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/tests/e2e/fixtures/dirsql_plugin_fixture/dirsql.toml +0 -0
  339. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/tests/e2e/speed_of_light.py +0 -0
  340. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/tests/integration/__init__.py +0 -0
  341. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/tests/integration/binding/__init__.py +0 -0
  342. {dirsql-0.4.99 → dirsql-0.4.100}/packages/python/tests/integration/hermetic/__init__.py +0 -0
  343. {dirsql-0.4.99 → dirsql-0.4.100}/packages/rust/CHANGELOG.md +0 -0
  344. {dirsql-0.4.99 → dirsql-0.4.100}/packages/rust/MIGRATIONS.md +0 -0
  345. {dirsql-0.4.99 → dirsql-0.4.100}/packages/rust/README.md +0 -0
  346. {dirsql-0.4.99 → dirsql-0.4.100}/packages/rust/benches/db_bench.rs +0 -0
  347. {dirsql-0.4.99 → dirsql-0.4.100}/packages/rust/benches/differ_bench.rs +0 -0
  348. {dirsql-0.4.99 → dirsql-0.4.100}/packages/rust/benches/matcher_bench.rs +0 -0
  349. {dirsql-0.4.99 → dirsql-0.4.100}/packages/rust/benches/scanner_bench.rs +0 -0
  350. {dirsql-0.4.99 → dirsql-0.4.100}/packages/rust/docs/context/.gitattributes +0 -0
  351. {dirsql-0.4.99 → dirsql-0.4.100}/packages/rust/docs/context/recipes.md +0 -0
  352. {dirsql-0.4.99 → dirsql-0.4.100}/packages/rust/docs/context/troubleshooting.md +0 -0
  353. {dirsql-0.4.99 → dirsql-0.4.100}/packages/rust/docs/explanation.md +0 -0
  354. {dirsql-0.4.99 → dirsql-0.4.100}/packages/rust/docs/getting-started.md +0 -0
  355. {dirsql-0.4.99 → dirsql-0.4.100}/packages/rust/docs/howto/agent-skill.md +0 -0
  356. {dirsql-0.4.99 → dirsql-0.4.100}/packages/rust/docs/howto/columns-from-paths.md +0 -0
  357. {dirsql-0.4.99 → dirsql-0.4.100}/packages/rust/docs/howto/define-tables.md +0 -0
  358. {dirsql-0.4.99 → dirsql-0.4.100}/packages/rust/docs/howto/embed.md +0 -0
  359. {dirsql-0.4.99 → dirsql-0.4.100}/packages/rust/docs/howto/extract-from-contents.md +0 -0
  360. {dirsql-0.4.99 → dirsql-0.4.100}/packages/rust/docs/howto/load-extension.md +0 -0
  361. {dirsql-0.4.99 → dirsql-0.4.100}/packages/rust/docs/howto/parse-files-into-columns.md +0 -0
  362. {dirsql-0.4.99 → dirsql-0.4.100}/packages/rust/docs/howto/persist.md +0 -0
  363. {dirsql-0.4.99 → dirsql-0.4.100}/packages/rust/docs/howto/query-json.md +0 -0
  364. {dirsql-0.4.99 → dirsql-0.4.100}/packages/rust/docs/howto/react-to-changes.md +0 -0
  365. {dirsql-0.4.99 → dirsql-0.4.100}/packages/rust/docs/howto/search-by-meaning.md +0 -0
  366. {dirsql-0.4.99 → dirsql-0.4.100}/packages/rust/docs/howto/search-indexes.md +0 -0
  367. {dirsql-0.4.99 → dirsql-0.4.100}/packages/rust/docs/howto/skip-files.md +0 -0
  368. {dirsql-0.4.99 → dirsql-0.4.100}/packages/rust/docs/howto/write-a-plugin.md +0 -0
  369. {dirsql-0.4.99 → dirsql-0.4.100}/packages/rust/docs/index.md +0 -0
  370. {dirsql-0.4.99 → dirsql-0.4.100}/packages/rust/docs/plugins.md +0 -0
  371. {dirsql-0.4.99 → dirsql-0.4.100}/packages/rust/docs/reference/cli.md +0 -0
  372. {dirsql-0.4.99 → dirsql-0.4.100}/packages/rust/docs/reference/config.md +0 -0
  373. {dirsql-0.4.99 → dirsql-0.4.100}/packages/rust/docs/reference/hooks.md +0 -0
  374. {dirsql-0.4.99 → dirsql-0.4.100}/packages/rust/docs/reference/http-api.md +0 -0
  375. {dirsql-0.4.99 → dirsql-0.4.100}/packages/rust/docs/reference/sdk.md +0 -0
  376. {dirsql-0.4.99 → dirsql-0.4.100}/packages/rust/src/bin/dirsql.rs +0 -0
  377. {dirsql-0.4.99 → dirsql-0.4.100}/packages/rust/src/brace.rs +0 -0
  378. {dirsql-0.4.99 → dirsql-0.4.100}/packages/rust/src/cli/context.rs +0 -0
  379. {dirsql-0.4.99 → dirsql-0.4.100}/packages/rust/src/cli/execute.rs +0 -0
  380. {dirsql-0.4.99 → dirsql-0.4.100}/packages/rust/src/cli/init.rs +0 -0
  381. {dirsql-0.4.99 → dirsql-0.4.100}/packages/rust/src/cli/mod.rs +0 -0
  382. {dirsql-0.4.99 → dirsql-0.4.100}/packages/rust/src/cli/repl.rs +0 -0
  383. {dirsql-0.4.99 → dirsql-0.4.100}/packages/rust/src/cli/router.rs +0 -0
  384. {dirsql-0.4.99 → dirsql-0.4.100}/packages/rust/src/cli/run.rs +0 -0
  385. {dirsql-0.4.99 → dirsql-0.4.100}/packages/rust/src/cli/serialize.rs +0 -0
  386. {dirsql-0.4.99 → dirsql-0.4.100}/packages/rust/src/cli/server.rs +0 -0
  387. {dirsql-0.4.99 → dirsql-0.4.100}/packages/rust/src/cli/table.rs +0 -0
  388. {dirsql-0.4.99 → dirsql-0.4.100}/packages/rust/src/command.rs +0 -0
  389. {dirsql-0.4.99 → dirsql-0.4.100}/packages/rust/src/config.rs +0 -0
  390. {dirsql-0.4.99 → dirsql-0.4.100}/packages/rust/src/default_config.toml +0 -0
  391. {dirsql-0.4.99 → dirsql-0.4.100}/packages/rust/src/differ.rs +0 -0
  392. {dirsql-0.4.99 → dirsql-0.4.100}/packages/rust/src/extension_resolution.rs +0 -0
  393. {dirsql-0.4.99 → dirsql-0.4.100}/packages/rust/src/functions.rs +0 -0
  394. {dirsql-0.4.99 → dirsql-0.4.100}/packages/rust/src/infer.rs +0 -0
  395. {dirsql-0.4.99 → dirsql-0.4.100}/packages/rust/src/launcher.rs +0 -0
  396. {dirsql-0.4.99 → dirsql-0.4.100}/packages/rust/src/lib.rs +0 -0
  397. {dirsql-0.4.99 → dirsql-0.4.100}/packages/rust/src/listing.rs +0 -0
  398. {dirsql-0.4.99 → dirsql-0.4.100}/packages/rust/src/matcher.rs +0 -0
  399. {dirsql-0.4.99 → dirsql-0.4.100}/packages/rust/src/on_file.rs +0 -0
  400. {dirsql-0.4.99 → dirsql-0.4.100}/packages/rust/src/persist.rs +0 -0
  401. {dirsql-0.4.99 → dirsql-0.4.100}/packages/rust/src/posix_class.rs +0 -0
  402. {dirsql-0.4.99 → dirsql-0.4.100}/packages/rust/src/progress.rs +0 -0
  403. {dirsql-0.4.99 → dirsql-0.4.100}/packages/rust/src/row_event_flat.rs +0 -0
  404. {dirsql-0.4.99 → dirsql-0.4.100}/packages/rust/src/sql_literal.rs +0 -0
  405. {dirsql-0.4.99 → dirsql-0.4.100}/packages/rust/src/tree_walk.rs +0 -0
  406. {dirsql-0.4.99 → dirsql-0.4.100}/packages/rust/src/watcher.rs +0 -0
  407. {dirsql-0.4.99 → dirsql-0.4.100}/pyproject.toml +0 -0
@@ -573,7 +573,7 @@ dependencies = [
573
573
 
574
574
  [[package]]
575
575
  name = "dirsql"
576
- version = "0.4.99"
576
+ version = "0.4.100"
577
577
  dependencies = [
578
578
  "assert_cmd",
579
579
  "axum",
@@ -625,7 +625,7 @@ dependencies = [
625
625
 
626
626
  [[package]]
627
627
  name = "dirsql-py-ext"
628
- version = "0.4.99"
628
+ version = "0.4.100"
629
629
  dependencies = [
630
630
  "dirsql",
631
631
  "pyo3",
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dirsql
3
- Version: 0.4.99
3
+ Version: 0.4.100
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
@@ -22,7 +22,7 @@ A quoted path stands in for a table name. Paths are relative to the directory yo
22
22
  | `'./**/*.md'` | markdown at any depth |
23
23
  | `'./notes/today.md'` | that one file |
24
24
 
25
- `*` matches within one directory level and `**` matches any depth. A directory name lists one level, like `ls docs`, so write `'./**'` to scan the whole tree. Rows are files only, never directories. `'/var/log/*.log'`, `'../notes'` and `'~/notes/*.md'` also resolve; those report absolute `path` values.
25
+ `*` matches within one directory level and `**` matches any depth. A directory name lists one level, like `ls docs`, so write `'./**'` to scan the whole tree. Rows are files only, never directories. `'/var/log/*.log'`, `'../notes'` and `'~/notes/*.md'` also resolve; `path` is reported as written, so `'../notes'` gives `../notes/x.md` and the others give absolute paths.
26
26
 
27
27
  Two mistakes fail every time:
28
28
 
@@ -65,7 +65,7 @@ why indexes belong to only one of them, are in
65
65
  `config` nor `tables` and call `query("SELECT * FROM './'")`
66
66
  ([SDK reference](../reference/sdk.md)).
67
67
  - Paths outside the root resolve too — `'/var/log/*.log'`, `'../notes'`,
68
- `'~/notes/*.md'` — reporting absolute paths
68
+ `'~/notes/*.md'` — reporting paths as you wrote them
69
69
  ([path-tables reference](../reference/path-tables.md#paths-outside-the-index-root)).
70
70
  - `.git/` is skipped by default, and a git repo's `.gitignore` hides what it
71
71
  lists, so a bare `'./**'` does not drown in machinery
@@ -31,7 +31,7 @@ lazily-read hidden [`content`](./path-tables.md#columns) column.
31
31
 
32
32
  | Column | Type | Value |
33
33
  |---|---|---|
34
- | `path` | TEXT | The file's path relative to the scan root (e.g. `posts/hello.md`); absolute for a `/`, `../` or `~/` path-table. |
34
+ | `path` | TEXT | The file's path relative to the scan root (e.g. `posts/hello.md`); as written for a `../` path-table, absolute for a `/` or `~/` one. |
35
35
  | `basename` | TEXT | The filename, including extension (`hello.md`). |
36
36
  | `dir` | TEXT | The parent directory relative to the root (`posts`); the empty string for files directly under the root. |
37
37
  | `ext` | TEXT | The file extension without the leading dot (`md`). Original case is preserved — `Photo.JPG` yields `JPG`; use `LOWER(ext)` for case-insensitive matching. `NULL` when the file has no extension. |
@@ -19,7 +19,7 @@ divergence is a written decision.
19
19
  ## The fixture
20
20
 
21
21
  Every example below runs against this tree. A name ending in `/` is an empty
22
- directory, `a -> b` is a symlink, and `.gitignore` holds `*.log`.
22
+ directory, `a -> b` is a symlink, and `.gitignore` holds `*.log` and `dist/`.
23
23
 
24
24
  <!-- conformance-tree -->
25
25
  ```text
@@ -48,6 +48,8 @@ docs/.draft.md
48
48
  docs/nested/deep.md
49
49
  docs/nested/.cache/x.md
50
50
  node_modules/pkg/index.js
51
+ dist/bundle.js
52
+ dist/sub/o.js
51
53
  real/r.md
52
54
  uni/1.md
53
55
  uni/a.md
@@ -126,13 +128,22 @@ A test runs every row against dirsql as a path-table and, with the leading
126
128
  | `./*.log` | none | gitignore |
127
129
  | `./ignored.log` | `ignored.log` | |
128
130
  | `./{ignored,x}.log` | `ignored.log` | |
131
+ | `./dist/*.js` | none | gitignore |
132
+ | `./dist/**/*.js` | none | gitignore |
133
+ | `./dist/sub/*.js` | none | gitignore |
134
+ | `./d*/*.js` | none | gitignore |
135
+ | `./dist/bundle.js` | `dist/bundle.js` | |
136
+ | `./dist/sub/o.js` | `dist/sub/o.js` | |
129
137
  | `./**/*.js` | `node_modules/pkg/index.js` | |
130
138
  | `./node_modules/*/index.js` | `node_modules/pkg/index.js` | |
131
139
  | `./docs/**/*.md` | `docs/api.md`, `docs/guide.md`, `docs/nested/deep.md` | |
132
140
  | `./docs/*.md` | `docs/api.md`, `docs/guide.md` | |
133
- | `$ROOT/docs/*.md` | `$ROOT/docs/api.md`, `$ROOT/docs/guide.md` | absolute |
134
- | `~/docs/*.md` | `$ROOT/docs/api.md`, `$ROOT/docs/guide.md` | absolute |
135
- | `../proj/docs/*.md` | `$BASE/proj/docs/api.md`, `$BASE/proj/docs/guide.md` | absolute |
141
+ | `$ROOT/docs/*.md` | `$ROOT/docs/api.md`, `$ROOT/docs/guide.md` | |
142
+ | `~/docs/*.md` | `$ROOT/docs/api.md`, `$ROOT/docs/guide.md` | |
143
+ | `../proj/docs/*.md` | `../proj/docs/api.md`, `../proj/docs/guide.md` | |
144
+ | `../*/top.md` | `../proj/top.md` | |
145
+ | `../proj/**/deep.md` | `../proj/docs/nested/deep.md` | |
146
+ | `../proj/docs` | `../proj/docs/api.md`, `../proj/docs/guide.md` | directory-name |
136
147
 
137
148
  ## Divergences from bash
138
149
 
@@ -141,10 +152,17 @@ A test runs every row against dirsql as a path-table and, with the leading
141
152
  | `gitignore` | Inside a git repo, `.gitignore` files hide files and directories a wildcard matches, never one the pattern spells out. `--no-ignore` turns it off. | A query over a repo should not drown in build output. |
142
153
  | `directory-name` | A pattern's last component that names a directory lists the files directly inside it, like `ls docs`. A trailing `/` is `*` appended. | A table is rows of files, and `ls` is the shell habit. |
143
154
  | `files-only` | A pattern that matches a directory but no file returns nothing. | Every row is a file. |
144
- | `absolute` | `/`, `~/` and `../` patterns report absolute `path` values, with `..` folded out textually. | The scanned root is derived from the pattern, so there is no relative base. |
145
155
 
146
156
  `.git` needs no rule of its own: the dotfile rule hides it.
147
157
 
158
+ ## Syntax, not behavior
159
+
160
+ A path-table starts with `./`, `/`, `~/` or `../`. That is how `FROM` tells a
161
+ path from a table name, so `FROM './**/*.md'` is a glob and `FROM docs` is a
162
+ table. A config `glob` has no such need and is written without the `./`.
163
+ Bash accepts a bare `**/*.md`; dirsql does not in a path-table. This is syntax,
164
+ not a divergence: past the prefix, the glob behaves as bash does.
165
+
148
166
  ## Where the glob is anchored
149
167
 
150
168
  A path-table pattern is relative to the index root and starts with `./`. A config `[[table]] glob`
@@ -109,19 +109,15 @@ Three other prefixes resolve, with their usual shell meanings:
109
109
  | You write | dirsql scans |
110
110
  | --- | --- |
111
111
  | `'/var/log/*.log'` | an absolute path |
112
- | `'../notes'` | relative to the index root's parent |
112
+ | `'../notes'` | relative to the index root's parent, as written |
113
113
  | `'~/notes/*.md'` | relative to your home directory |
114
114
 
115
115
  A directory named this way is one level too; `'../notes/**'` descends. The
116
116
  trailing-`/` rule holds here as well: `'~/*/'` is `'~/*/*'`.
117
- `..` is folded out textually, not followed through symlinks, so the directory
118
- scanned is a function of the string you wrote.
119
-
120
- **These report absolute `path` values.** A `./` path-table reports paths
121
- relative to the index root, matching every other dirsql table; a `/`, `../` or
122
- `~/` path-table has no meaningful relative base — the root it scans is derived
123
- from the pattern, not named by you — so it reports the full path instead. The
124
- value you get back is one you can paste into another command:
117
+ **A `../` path-table reports `path` as written**, relative to the directory
118
+ dirsql runs in, as bash prints it: `'../notes/*.md'` gives `../notes/a.md`. A
119
+ `/` or `~/` path-table is absolute already, so it reports the full path. Either
120
+ value is one you can paste into another command:
125
121
 
126
122
  ```sql
127
123
  SELECT path FROM '/var/log/*.log';
@@ -144,7 +140,7 @@ table:
144
140
 
145
141
  | Column | Type | Meaning |
146
142
  | --- | --- | --- |
147
- | `path` | TEXT | path relative to the index root (absolute for `/`, `../`, `~/` tables) |
143
+ | `path` | TEXT | path relative to the index root (as written for `../` tables, absolute for `/` and `~/` tables) |
148
144
  | `basename` | TEXT | filename with extension |
149
145
  | `dir` | TEXT | parent directory, relative to the index root |
150
146
  | `ext` | TEXT | extension without the dot |
@@ -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.99"
7
+ version = "0.4.100"
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**
2
+
3
+ - A ../ path-table such as '../notes/*.md' now reports ../notes/a.md, relative to the directory dirsql runs in, instead of an absolute path. / and ~/ tables are unchanged.
@@ -22,7 +22,7 @@ A quoted path stands in for a table name. Paths are relative to the directory yo
22
22
  | `'./**/*.md'` | markdown at any depth |
23
23
  | `'./notes/today.md'` | that one file |
24
24
 
25
- `*` matches within one directory level and `**` matches any depth. A directory name lists one level, like `ls docs`, so write `'./**'` to scan the whole tree. Rows are files only, never directories. `'/var/log/*.log'`, `'../notes'` and `'~/notes/*.md'` also resolve; those report absolute `path` values.
25
+ `*` matches within one directory level and `**` matches any depth. A directory name lists one level, like `ls docs`, so write `'./**'` to scan the whole tree. Rows are files only, never directories. `'/var/log/*.log'`, `'../notes'` and `'~/notes/*.md'` also resolve; `path` is reported as written, so `'../notes'` gives `../notes/x.md` and the others give absolute paths.
26
26
 
27
27
  Two mistakes fail every time:
28
28
 
@@ -65,7 +65,7 @@ why indexes belong to only one of them, are in
65
65
  `config` nor `tables` and call `query("SELECT * FROM './'")`
66
66
  ([SDK reference](../reference/sdk.md)).
67
67
  - Paths outside the root resolve too — `'/var/log/*.log'`, `'../notes'`,
68
- `'~/notes/*.md'` — reporting absolute paths
68
+ `'~/notes/*.md'` — reporting paths as you wrote them
69
69
  ([path-tables reference](../reference/path-tables.md#paths-outside-the-index-root)).
70
70
  - `.git/` is skipped by default, and a git repo's `.gitignore` hides what it
71
71
  lists, so a bare `'./**'` does not drown in machinery
@@ -31,7 +31,7 @@ lazily-read hidden [`content`](./path-tables.md#columns) column.
31
31
 
32
32
  | Column | Type | Value |
33
33
  |---|---|---|
34
- | `path` | TEXT | The file's path relative to the scan root (e.g. `posts/hello.md`); absolute for a `/`, `../` or `~/` path-table. |
34
+ | `path` | TEXT | The file's path relative to the scan root (e.g. `posts/hello.md`); as written for a `../` path-table, absolute for a `/` or `~/` one. |
35
35
  | `basename` | TEXT | The filename, including extension (`hello.md`). |
36
36
  | `dir` | TEXT | The parent directory relative to the root (`posts`); the empty string for files directly under the root. |
37
37
  | `ext` | TEXT | The file extension without the leading dot (`md`). Original case is preserved — `Photo.JPG` yields `JPG`; use `LOWER(ext)` for case-insensitive matching. `NULL` when the file has no extension. |
@@ -19,7 +19,7 @@ divergence is a written decision.
19
19
  ## The fixture
20
20
 
21
21
  Every example below runs against this tree. A name ending in `/` is an empty
22
- directory, `a -> b` is a symlink, and `.gitignore` holds `*.log`.
22
+ directory, `a -> b` is a symlink, and `.gitignore` holds `*.log` and `dist/`.
23
23
 
24
24
  <!-- conformance-tree -->
25
25
  ```text
@@ -48,6 +48,8 @@ docs/.draft.md
48
48
  docs/nested/deep.md
49
49
  docs/nested/.cache/x.md
50
50
  node_modules/pkg/index.js
51
+ dist/bundle.js
52
+ dist/sub/o.js
51
53
  real/r.md
52
54
  uni/1.md
53
55
  uni/a.md
@@ -126,13 +128,22 @@ A test runs every row against dirsql as a path-table and, with the leading
126
128
  | `./*.log` | none | gitignore |
127
129
  | `./ignored.log` | `ignored.log` | |
128
130
  | `./{ignored,x}.log` | `ignored.log` | |
131
+ | `./dist/*.js` | none | gitignore |
132
+ | `./dist/**/*.js` | none | gitignore |
133
+ | `./dist/sub/*.js` | none | gitignore |
134
+ | `./d*/*.js` | none | gitignore |
135
+ | `./dist/bundle.js` | `dist/bundle.js` | |
136
+ | `./dist/sub/o.js` | `dist/sub/o.js` | |
129
137
  | `./**/*.js` | `node_modules/pkg/index.js` | |
130
138
  | `./node_modules/*/index.js` | `node_modules/pkg/index.js` | |
131
139
  | `./docs/**/*.md` | `docs/api.md`, `docs/guide.md`, `docs/nested/deep.md` | |
132
140
  | `./docs/*.md` | `docs/api.md`, `docs/guide.md` | |
133
- | `$ROOT/docs/*.md` | `$ROOT/docs/api.md`, `$ROOT/docs/guide.md` | absolute |
134
- | `~/docs/*.md` | `$ROOT/docs/api.md`, `$ROOT/docs/guide.md` | absolute |
135
- | `../proj/docs/*.md` | `$BASE/proj/docs/api.md`, `$BASE/proj/docs/guide.md` | absolute |
141
+ | `$ROOT/docs/*.md` | `$ROOT/docs/api.md`, `$ROOT/docs/guide.md` | |
142
+ | `~/docs/*.md` | `$ROOT/docs/api.md`, `$ROOT/docs/guide.md` | |
143
+ | `../proj/docs/*.md` | `../proj/docs/api.md`, `../proj/docs/guide.md` | |
144
+ | `../*/top.md` | `../proj/top.md` | |
145
+ | `../proj/**/deep.md` | `../proj/docs/nested/deep.md` | |
146
+ | `../proj/docs` | `../proj/docs/api.md`, `../proj/docs/guide.md` | directory-name |
136
147
 
137
148
  ## Divergences from bash
138
149
 
@@ -141,10 +152,17 @@ A test runs every row against dirsql as a path-table and, with the leading
141
152
  | `gitignore` | Inside a git repo, `.gitignore` files hide files and directories a wildcard matches, never one the pattern spells out. `--no-ignore` turns it off. | A query over a repo should not drown in build output. |
142
153
  | `directory-name` | A pattern's last component that names a directory lists the files directly inside it, like `ls docs`. A trailing `/` is `*` appended. | A table is rows of files, and `ls` is the shell habit. |
143
154
  | `files-only` | A pattern that matches a directory but no file returns nothing. | Every row is a file. |
144
- | `absolute` | `/`, `~/` and `../` patterns report absolute `path` values, with `..` folded out textually. | The scanned root is derived from the pattern, so there is no relative base. |
145
155
 
146
156
  `.git` needs no rule of its own: the dotfile rule hides it.
147
157
 
158
+ ## Syntax, not behavior
159
+
160
+ A path-table starts with `./`, `/`, `~/` or `../`. That is how `FROM` tells a
161
+ path from a table name, so `FROM './**/*.md'` is a glob and `FROM docs` is a
162
+ table. A config `glob` has no such need and is written without the `./`.
163
+ Bash accepts a bare `**/*.md`; dirsql does not in a path-table. This is syntax,
164
+ not a divergence: past the prefix, the glob behaves as bash does.
165
+
148
166
  ## Where the glob is anchored
149
167
 
150
168
  A path-table pattern is relative to the index root and starts with `./`. A config `[[table]] glob`
@@ -109,19 +109,15 @@ Three other prefixes resolve, with their usual shell meanings:
109
109
  | You write | dirsql scans |
110
110
  | --- | --- |
111
111
  | `'/var/log/*.log'` | an absolute path |
112
- | `'../notes'` | relative to the index root's parent |
112
+ | `'../notes'` | relative to the index root's parent, as written |
113
113
  | `'~/notes/*.md'` | relative to your home directory |
114
114
 
115
115
  A directory named this way is one level too; `'../notes/**'` descends. The
116
116
  trailing-`/` rule holds here as well: `'~/*/'` is `'~/*/*'`.
117
- `..` is folded out textually, not followed through symlinks, so the directory
118
- scanned is a function of the string you wrote.
119
-
120
- **These report absolute `path` values.** A `./` path-table reports paths
121
- relative to the index root, matching every other dirsql table; a `/`, `../` or
122
- `~/` path-table has no meaningful relative base — the root it scans is derived
123
- from the pattern, not named by you — so it reports the full path instead. The
124
- value you get back is one you can paste into another command:
117
+ **A `../` path-table reports `path` as written**, relative to the directory
118
+ dirsql runs in, as bash prints it: `'../notes/*.md'` gives `../notes/a.md`. A
119
+ `/` or `~/` path-table is absolute already, so it reports the full path. Either
120
+ value is one you can paste into another command:
125
121
 
126
122
  ```sql
127
123
  SELECT path FROM '/var/log/*.log';
@@ -144,7 +140,7 @@ table:
144
140
 
145
141
  | Column | Type | Meaning |
146
142
  | --- | --- | --- |
147
- | `path` | TEXT | path relative to the index root (absolute for `/`, `../`, `~/` tables) |
143
+ | `path` | TEXT | path relative to the index root (as written for `../` tables, absolute for `/` and `~/` tables) |
148
144
  | `basename` | TEXT | filename with extension |
149
145
  | `dir` | TEXT | parent directory, relative to the index root |
150
146
  | `ext` | TEXT | extension without the dot |
@@ -0,0 +1,7 @@
1
+ {
2
+ "command": "uv run python -m pytest tests/e2e/glob_speed_one_level_test.py -x -q",
3
+ "ran_at": 1791400206,
4
+ "exit_code": 0,
5
+ "commit": "5b2712c96a0bb5f59fb543918664db9b95e55094",
6
+ "branch": "bot/1430-dotdot-as-written"
7
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "command": "uv run python -m pytest tests/e2e/glob_speed_gitignore_test.py tests/e2e/glob_speed_one_level_test.py tests/e2e/glob_speed_recursive_test.py tests/e2e/query_contract_test.py tests/e2e/fanout_test.py -x -q",
3
+ "ran_at": 1791403526,
4
+ "exit_code": 0,
5
+ "commit": "08b154a76016e8369151b2269aa01a9331d41ed7",
6
+ "branch": "bot/1448-wildcard-ignored-prefix"
7
+ }
@@ -0,0 +1,23 @@
1
+ ### ../ paths as written
2
+
3
+ #### Summary
4
+
5
+ A ../ path-table reports paths as written.
6
+
7
+ #### Required changes
8
+
9
+ _None._
10
+
11
+ #### Deprecations removed
12
+
13
+ _None._
14
+
15
+ #### Behavior changes without code changes
16
+
17
+ - A ../ path-table such as '../notes/*.md' now reports ../notes/a.md, relative to the directory dirsql runs in, instead of an absolute path. / and ~/ tables are unchanged.
18
+
19
+ #### Verification
20
+
21
+ ```bash
22
+ dirsql query "SELECT path FROM '../notes/*.md'"
23
+ ```
@@ -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.99"
9
+ version = "0.4.100"
10
10
  edition.workspace = true
11
11
  # Literal `license` (not `license.workspace = true`) because
12
12
  # putitoutthere's preflight check reads `[package].license` directly
@@ -22,7 +22,7 @@ A quoted path stands in for a table name. Paths are relative to the directory yo
22
22
  | `'./**/*.md'` | markdown at any depth |
23
23
  | `'./notes/today.md'` | that one file |
24
24
 
25
- `*` matches within one directory level and `**` matches any depth. A directory name lists one level, like `ls docs`, so write `'./**'` to scan the whole tree. Rows are files only, never directories. `'/var/log/*.log'`, `'../notes'` and `'~/notes/*.md'` also resolve; those report absolute `path` values.
25
+ `*` matches within one directory level and `**` matches any depth. A directory name lists one level, like `ls docs`, so write `'./**'` to scan the whole tree. Rows are files only, never directories. `'/var/log/*.log'`, `'../notes'` and `'~/notes/*.md'` also resolve; `path` is reported as written, so `'../notes'` gives `../notes/x.md` and the others give absolute paths.
26
26
 
27
27
  Two mistakes fail every time:
28
28
 
@@ -65,7 +65,7 @@ why indexes belong to only one of them, are in
65
65
  `config` nor `tables` and call `query("SELECT * FROM './'")`
66
66
  ([SDK reference](../reference/sdk.md)).
67
67
  - Paths outside the root resolve too — `'/var/log/*.log'`, `'../notes'`,
68
- `'~/notes/*.md'` — reporting absolute paths
68
+ `'~/notes/*.md'` — reporting paths as you wrote them
69
69
  ([path-tables reference](../reference/path-tables.md#paths-outside-the-index-root)).
70
70
  - `.git/` is skipped by default, and a git repo's `.gitignore` hides what it
71
71
  lists, so a bare `'./**'` does not drown in machinery
@@ -31,7 +31,7 @@ lazily-read hidden [`content`](./path-tables.md#columns) column.
31
31
 
32
32
  | Column | Type | Value |
33
33
  |---|---|---|
34
- | `path` | TEXT | The file's path relative to the scan root (e.g. `posts/hello.md`); absolute for a `/`, `../` or `~/` path-table. |
34
+ | `path` | TEXT | The file's path relative to the scan root (e.g. `posts/hello.md`); as written for a `../` path-table, absolute for a `/` or `~/` one. |
35
35
  | `basename` | TEXT | The filename, including extension (`hello.md`). |
36
36
  | `dir` | TEXT | The parent directory relative to the root (`posts`); the empty string for files directly under the root. |
37
37
  | `ext` | TEXT | The file extension without the leading dot (`md`). Original case is preserved — `Photo.JPG` yields `JPG`; use `LOWER(ext)` for case-insensitive matching. `NULL` when the file has no extension. |
@@ -19,7 +19,7 @@ divergence is a written decision.
19
19
  ## The fixture
20
20
 
21
21
  Every example below runs against this tree. A name ending in `/` is an empty
22
- directory, `a -> b` is a symlink, and `.gitignore` holds `*.log`.
22
+ directory, `a -> b` is a symlink, and `.gitignore` holds `*.log` and `dist/`.
23
23
 
24
24
  <!-- conformance-tree -->
25
25
  ```text
@@ -48,6 +48,8 @@ docs/.draft.md
48
48
  docs/nested/deep.md
49
49
  docs/nested/.cache/x.md
50
50
  node_modules/pkg/index.js
51
+ dist/bundle.js
52
+ dist/sub/o.js
51
53
  real/r.md
52
54
  uni/1.md
53
55
  uni/a.md
@@ -126,13 +128,22 @@ A test runs every row against dirsql as a path-table and, with the leading
126
128
  | `./*.log` | none | gitignore |
127
129
  | `./ignored.log` | `ignored.log` | |
128
130
  | `./{ignored,x}.log` | `ignored.log` | |
131
+ | `./dist/*.js` | none | gitignore |
132
+ | `./dist/**/*.js` | none | gitignore |
133
+ | `./dist/sub/*.js` | none | gitignore |
134
+ | `./d*/*.js` | none | gitignore |
135
+ | `./dist/bundle.js` | `dist/bundle.js` | |
136
+ | `./dist/sub/o.js` | `dist/sub/o.js` | |
129
137
  | `./**/*.js` | `node_modules/pkg/index.js` | |
130
138
  | `./node_modules/*/index.js` | `node_modules/pkg/index.js` | |
131
139
  | `./docs/**/*.md` | `docs/api.md`, `docs/guide.md`, `docs/nested/deep.md` | |
132
140
  | `./docs/*.md` | `docs/api.md`, `docs/guide.md` | |
133
- | `$ROOT/docs/*.md` | `$ROOT/docs/api.md`, `$ROOT/docs/guide.md` | absolute |
134
- | `~/docs/*.md` | `$ROOT/docs/api.md`, `$ROOT/docs/guide.md` | absolute |
135
- | `../proj/docs/*.md` | `$BASE/proj/docs/api.md`, `$BASE/proj/docs/guide.md` | absolute |
141
+ | `$ROOT/docs/*.md` | `$ROOT/docs/api.md`, `$ROOT/docs/guide.md` | |
142
+ | `~/docs/*.md` | `$ROOT/docs/api.md`, `$ROOT/docs/guide.md` | |
143
+ | `../proj/docs/*.md` | `../proj/docs/api.md`, `../proj/docs/guide.md` | |
144
+ | `../*/top.md` | `../proj/top.md` | |
145
+ | `../proj/**/deep.md` | `../proj/docs/nested/deep.md` | |
146
+ | `../proj/docs` | `../proj/docs/api.md`, `../proj/docs/guide.md` | directory-name |
136
147
 
137
148
  ## Divergences from bash
138
149
 
@@ -141,10 +152,17 @@ A test runs every row against dirsql as a path-table and, with the leading
141
152
  | `gitignore` | Inside a git repo, `.gitignore` files hide files and directories a wildcard matches, never one the pattern spells out. `--no-ignore` turns it off. | A query over a repo should not drown in build output. |
142
153
  | `directory-name` | A pattern's last component that names a directory lists the files directly inside it, like `ls docs`. A trailing `/` is `*` appended. | A table is rows of files, and `ls` is the shell habit. |
143
154
  | `files-only` | A pattern that matches a directory but no file returns nothing. | Every row is a file. |
144
- | `absolute` | `/`, `~/` and `../` patterns report absolute `path` values, with `..` folded out textually. | The scanned root is derived from the pattern, so there is no relative base. |
145
155
 
146
156
  `.git` needs no rule of its own: the dotfile rule hides it.
147
157
 
158
+ ## Syntax, not behavior
159
+
160
+ A path-table starts with `./`, `/`, `~/` or `../`. That is how `FROM` tells a
161
+ path from a table name, so `FROM './**/*.md'` is a glob and `FROM docs` is a
162
+ table. A config `glob` has no such need and is written without the `./`.
163
+ Bash accepts a bare `**/*.md`; dirsql does not in a path-table. This is syntax,
164
+ not a divergence: past the prefix, the glob behaves as bash does.
165
+
148
166
  ## Where the glob is anchored
149
167
 
150
168
  A path-table pattern is relative to the index root and starts with `./`. A config `[[table]] glob`
@@ -109,19 +109,15 @@ Three other prefixes resolve, with their usual shell meanings:
109
109
  | You write | dirsql scans |
110
110
  | --- | --- |
111
111
  | `'/var/log/*.log'` | an absolute path |
112
- | `'../notes'` | relative to the index root's parent |
112
+ | `'../notes'` | relative to the index root's parent, as written |
113
113
  | `'~/notes/*.md'` | relative to your home directory |
114
114
 
115
115
  A directory named this way is one level too; `'../notes/**'` descends. The
116
116
  trailing-`/` rule holds here as well: `'~/*/'` is `'~/*/*'`.
117
- `..` is folded out textually, not followed through symlinks, so the directory
118
- scanned is a function of the string you wrote.
119
-
120
- **These report absolute `path` values.** A `./` path-table reports paths
121
- relative to the index root, matching every other dirsql table; a `/`, `../` or
122
- `~/` path-table has no meaningful relative base — the root it scans is derived
123
- from the pattern, not named by you — so it reports the full path instead. The
124
- value you get back is one you can paste into another command:
117
+ **A `../` path-table reports `path` as written**, relative to the directory
118
+ dirsql runs in, as bash prints it: `'../notes/*.md'` gives `../notes/a.md`. A
119
+ `/` or `~/` path-table is absolute already, so it reports the full path. Either
120
+ value is one you can paste into another command:
125
121
 
126
122
  ```sql
127
123
  SELECT path FROM '/var/log/*.log';
@@ -144,7 +140,7 @@ table:
144
140
 
145
141
  | Column | Type | Meaning |
146
142
  | --- | --- | --- |
147
- | `path` | TEXT | path relative to the index root (absolute for `/`, `../`, `~/` tables) |
143
+ | `path` | TEXT | path relative to the index root (as written for `../` tables, absolute for `/` and `~/` tables) |
148
144
  | `basename` | TEXT | filename with extension |
149
145
  | `dir` | TEXT | parent directory, relative to the index root |
150
146
  | `ext` | TEXT | extension without the dot |
@@ -173,10 +173,12 @@ fn path_table_ddl(
173
173
  ],
174
174
  ),
175
175
  };
176
- args.push(quote_literal(if gitignore {
177
- scanner::GITIGNORE_ARG
178
- } else {
176
+ args.push(quote_literal(if !gitignore {
179
177
  scanner::NO_GITIGNORE_ARG
178
+ } else if !table.path_prefix.is_empty() && path_table::wildcard_below_prefix(name) {
179
+ scanner::GITIGNORE_ROOT_ARG
180
+ } else {
181
+ scanner::GITIGNORE_ARG
180
182
  }));
181
183
  if parser.is_some() {
182
184
  args.push(quote_literal(&index_root.to_string_lossy()));
@@ -3228,7 +3230,7 @@ mod tests {
3228
3230
  None,
3229
3231
  Path::new("/root"),
3230
3232
  )
3231
- .contains("'/var/log', '*.log', '/var/log', 'gitignore')"),
3233
+ .contains("'/var/log', '*.log', '/var/log', 'gitignore-root')"),
3232
3234
  "got: {}",
3233
3235
  path_table_ddl(
3234
3236
  "/var/log/*.log",
@@ -3241,6 +3243,28 @@ mod tests {
3241
3243
  );
3242
3244
  }
3243
3245
 
3246
+ #[test]
3247
+ fn path_table_ddl_checks_the_root_of_a_wildcard_under_a_literal_prefix() {
3248
+ let table = PathTable {
3249
+ root: PathBuf::from("/root/dist"),
3250
+ glob: "*.js".to_string(),
3251
+ path_prefix: "dist".to_string(),
3252
+ };
3253
+ let ddl = path_table_ddl("./dist/*.js", &table, &[], true, None, Path::new("/root"));
3254
+ assert!(ddl.ends_with("'dist', 'gitignore-root')"), "got: {ddl}");
3255
+ }
3256
+
3257
+ #[test]
3258
+ fn path_table_ddl_spares_the_root_of_a_literally_named_directory() {
3259
+ let table = PathTable {
3260
+ root: PathBuf::from("/root/dist"),
3261
+ glob: "*".to_string(),
3262
+ path_prefix: "dist".to_string(),
3263
+ };
3264
+ let ddl = path_table_ddl("./dist", &table, &[], true, None, Path::new("/root"));
3265
+ assert!(ddl.ends_with("'dist', 'gitignore')"), "got: {ddl}");
3266
+ }
3267
+
3244
3268
  #[test]
3245
3269
  fn path_table_ddl_carries_the_no_gitignore_switch() {
3246
3270
  let ddl = path_table_ddl(
@@ -3307,7 +3331,7 @@ mod tests {
3307
3331
  );
3308
3332
  assert!(
3309
3333
  ddl.ends_with(
3310
- "USING dirsql_parsed('/var/log', '*.log', 'parse.py', 'gitignore', \
3334
+ "USING dirsql_parsed('/var/log', '*.log', 'parse.py', 'gitignore-root', \
3311
3335
  '/index', 'node_modules/**')"
3312
3336
  ),
3313
3337
  "the parser form drops the path prefix, names the index root and keeps \
@@ -28,7 +28,7 @@ use crate::Value;
28
28
  use crate::infer::{JsonRow, cell, declared_schema, infer_schema};
29
29
  use crate::matcher::TableMatcher;
30
30
  use crate::on_file;
31
- use crate::scanner::{PathGlob, scan_glob};
31
+ use crate::scanner::{PathGlob, scan_glob_checking_root};
32
32
  use crate::vtab_scaffold::{self, StatementScope, TableSource};
33
33
 
34
34
  /// SQL module name a parsed path-table is created with.
@@ -51,6 +51,7 @@ struct ModuleArgs {
51
51
  glob: PathGlob,
52
52
  command: String,
53
53
  gitignore: bool,
54
+ check_root: bool,
54
55
  index_root: PathBuf,
55
56
  ignore: TableMatcher,
56
57
  }
@@ -77,6 +78,7 @@ fn parse_module_args(args: &[&[u8]]) -> Result<ModuleArgs> {
77
78
  glob: vtab_scaffold::compile_glob(pattern)?,
78
79
  command: command.clone(),
79
80
  gitignore: vtab_scaffold::parse_gitignore(gitignore)?,
81
+ check_root: vtab_scaffold::checks_root(gitignore),
80
82
  index_root: PathBuf::from(index_root),
81
83
  ignore: vtab_scaffold::compile_ignore(ignore)?,
82
84
  })
@@ -145,6 +147,7 @@ impl TableSource for ParsedTable {
145
147
  glob,
146
148
  command,
147
149
  gitignore,
150
+ check_root,
148
151
  index_root,
149
152
  ignore,
150
153
  } = parse_module_args(args)?;
@@ -152,7 +155,7 @@ impl TableSource for ParsedTable {
152
155
  // A parsed path-table honors the same skip rules a stat path-table does
153
156
  // (node_modules/.git, gitignore, plus any configured ignore), so a
154
157
  // parsed `SELECT * FROM './'` doesn't drown in dependency trees.
155
- let rel_paths = scan_glob(&root, &glob, &ignore, gitignore);
158
+ let rel_paths = scan_glob_checking_root(&root, &glob, &ignore, gitignore, check_root);
156
159
  let run = |rel: &[PathBuf]| run_parser(&command, &index_root, &root, rel);
157
160
  let rows = collect_rows(&rel_paths, &run)?;
158
161