dirsql 0.4.105__tar.gz → 0.4.106__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 (420) hide show
  1. {dirsql-0.4.105 → dirsql-0.4.106}/Cargo.lock +2 -2
  2. {dirsql-0.4.105 → dirsql-0.4.106}/PKG-INFO +1 -1
  3. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/Cargo.toml +1 -1
  4. dirsql-0.4.106/packages/python/e2e-attestations/bot-1459-rescan-on-overflow-1008.json +7 -0
  5. {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/Cargo.toml +1 -1
  6. {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/src/db.rs +52 -0
  7. {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/src/lib.rs +155 -0
  8. {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/src/watcher.rs +35 -0
  9. {dirsql-0.4.105 → dirsql-0.4.106}/Cargo.toml +0 -0
  10. {dirsql-0.4.105 → dirsql-0.4.106}/README.md +0 -0
  11. {dirsql-0.4.105 → dirsql-0.4.106}/dirsql/__init__.py +0 -0
  12. {dirsql-0.4.105 → dirsql-0.4.106}/dirsql/_async.py +0 -0
  13. {dirsql-0.4.105 → dirsql-0.4.106}/dirsql/_dirsql.pyi +0 -0
  14. {dirsql-0.4.105 → dirsql-0.4.106}/dirsql/cli/__init__.py +0 -0
  15. {dirsql-0.4.105 → dirsql-0.4.106}/dirsql/cli/discover_plugins/__init__.py +0 -0
  16. {dirsql-0.4.105 → dirsql-0.4.106}/dirsql/cli/discover_plugins/discovered_fragments.py +0 -0
  17. {dirsql-0.4.105 → dirsql-0.4.106}/dirsql/cli/discover_plugins/discovery_disabled.py +0 -0
  18. {dirsql-0.4.105 → dirsql-0.4.106}/dirsql/cli/discover_plugins/fragment_path.py +0 -0
  19. {dirsql-0.4.105 → dirsql-0.4.106}/dirsql/cli/discover_plugins/with_discovered_plugins.py +0 -0
  20. {dirsql-0.4.105 → dirsql-0.4.106}/dirsql/cli/main.py +0 -0
  21. {dirsql-0.4.105 → dirsql-0.4.106}/dirsql/cli/resolve_config_extensions.py +0 -0
  22. {dirsql-0.4.105 → dirsql-0.4.106}/dirsql/plan_entry_path.py +0 -0
  23. {dirsql-0.4.105 → dirsql-0.4.106}/dirsql/py.typed +0 -0
  24. {dirsql-0.4.105 → dirsql-0.4.106}/dirsql/read_config.py +0 -0
  25. {dirsql-0.4.105 → dirsql-0.4.106}/dirsql/resolve_configs_extension_specs.py +0 -0
  26. {dirsql-0.4.105 → dirsql-0.4.106}/dirsql/resolve_extension.py +0 -0
  27. {dirsql-0.4.105 → dirsql-0.4.106}/dirsql/resolve_package.py +0 -0
  28. {dirsql-0.4.105 → dirsql-0.4.106}/docs/.claude/CLAUDE.md +0 -0
  29. {dirsql-0.4.105 → dirsql-0.4.106}/docs/.vitepress/config.ts +0 -0
  30. {dirsql-0.4.105 → dirsql-0.4.106}/docs/.vitepress/theme/index.ts +0 -0
  31. {dirsql-0.4.105 → dirsql-0.4.106}/docs/.vitepress/theme/lang.ts +0 -0
  32. {dirsql-0.4.105 → dirsql-0.4.106}/docs/AGENTS.md +0 -0
  33. {dirsql-0.4.105 → dirsql-0.4.106}/docs/context/.gitattributes +0 -0
  34. {dirsql-0.4.105 → dirsql-0.4.106}/docs/context/recipes.md +0 -0
  35. {dirsql-0.4.105 → dirsql-0.4.106}/docs/context/troubleshooting.md +0 -0
  36. {dirsql-0.4.105 → dirsql-0.4.106}/docs/context/usage.md +0 -0
  37. {dirsql-0.4.105 → dirsql-0.4.106}/docs/explanation.md +0 -0
  38. {dirsql-0.4.105 → dirsql-0.4.106}/docs/getting-started.md +0 -0
  39. {dirsql-0.4.105 → dirsql-0.4.106}/docs/howto/agent-skill.md +0 -0
  40. {dirsql-0.4.105 → dirsql-0.4.106}/docs/howto/columns-from-paths.md +0 -0
  41. {dirsql-0.4.105 → dirsql-0.4.106}/docs/howto/define-tables.md +0 -0
  42. {dirsql-0.4.105 → dirsql-0.4.106}/docs/howto/embed.md +0 -0
  43. {dirsql-0.4.105 → dirsql-0.4.106}/docs/howto/extract-from-contents.md +0 -0
  44. {dirsql-0.4.105 → dirsql-0.4.106}/docs/howto/load-extension.md +0 -0
  45. {dirsql-0.4.105 → dirsql-0.4.106}/docs/howto/parse-files-into-columns.md +0 -0
  46. {dirsql-0.4.105 → dirsql-0.4.106}/docs/howto/persist.md +0 -0
  47. {dirsql-0.4.105 → dirsql-0.4.106}/docs/howto/query-json.md +0 -0
  48. {dirsql-0.4.105 → dirsql-0.4.106}/docs/howto/query-without-config.md +0 -0
  49. {dirsql-0.4.105 → dirsql-0.4.106}/docs/howto/react-to-changes.md +0 -0
  50. {dirsql-0.4.105 → dirsql-0.4.106}/docs/howto/search-by-meaning.md +0 -0
  51. {dirsql-0.4.105 → dirsql-0.4.106}/docs/howto/search-indexes.md +0 -0
  52. {dirsql-0.4.105 → dirsql-0.4.106}/docs/howto/skip-files.md +0 -0
  53. {dirsql-0.4.105 → dirsql-0.4.106}/docs/howto/write-a-plugin.md +0 -0
  54. {dirsql-0.4.105 → dirsql-0.4.106}/docs/index.md +0 -0
  55. {dirsql-0.4.105 → dirsql-0.4.106}/docs/package.json +0 -0
  56. {dirsql-0.4.105 → dirsql-0.4.106}/docs/plugins.md +0 -0
  57. {dirsql-0.4.105 → dirsql-0.4.106}/docs/pnpm-lock.yaml +0 -0
  58. {dirsql-0.4.105 → dirsql-0.4.106}/docs/pnpm-workspace.yaml +0 -0
  59. {dirsql-0.4.105 → dirsql-0.4.106}/docs/reference/cli.md +0 -0
  60. {dirsql-0.4.105 → dirsql-0.4.106}/docs/reference/columns.md +0 -0
  61. {dirsql-0.4.105 → dirsql-0.4.106}/docs/reference/config.md +0 -0
  62. {dirsql-0.4.105 → dirsql-0.4.106}/docs/reference/glob.md +0 -0
  63. {dirsql-0.4.105 → dirsql-0.4.106}/docs/reference/hooks.md +0 -0
  64. {dirsql-0.4.105 → dirsql-0.4.106}/docs/reference/http-api.md +0 -0
  65. {dirsql-0.4.105 → dirsql-0.4.106}/docs/reference/path-tables.md +0 -0
  66. {dirsql-0.4.105 → dirsql-0.4.106}/docs/reference/sdk.md +0 -0
  67. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/CHANGELOG.md +0 -0
  68. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/MIGRATIONS.md +0 -0
  69. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/README.md +0 -0
  70. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-07-13-drop-cwd-config-auto-detect.md +0 -0
  71. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-07-13-plugin-discovery.md +0 -0
  72. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-07-13-rename-extract-to-on-file.md +0 -0
  73. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-07-13-repeatable-config.md +0 -0
  74. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-07-13-sdk-default-baked-in-config.md +0 -0
  75. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-07-20-drop-implicit-files-table.md +0 -0
  76. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-07-21-remove-glob-captures.md +0 -0
  77. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-07-24-hookless-table-config-error.md +0 -0
  78. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-07-24-remove-stat-fact-injection.md +0 -0
  79. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-07-29-restore-python-310.md +0 -0
  80. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-08-02-release-profile.md +0 -0
  81. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-08-02-scan-failures.md +0 -0
  82. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-08-03-discovery-ext-resolution.md +0 -0
  83. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-08-03-manylinux-dynamic-binary.md +0 -0
  84. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-08-03-python-no-ignore.md +0 -0
  85. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-08-04-cast-lints.md +0 -0
  86. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-08-04-cli-in-process.md +0 -0
  87. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-08-20-curtaincall-dev-dependency.md +0 -0
  88. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-08-20-declared-table-name.md +0 -0
  89. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-09-04-config-paths-from-argv-module.md +0 -0
  90. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-09-05-config-extension-loader-split.md +0 -0
  91. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-09-05-resolve-config-extensions-split.md +0 -0
  92. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-09-05-resolve-extension-split.md +0 -0
  93. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-09-09-launcher-config-path-scan.md +0 -0
  94. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-09-17-extension-resolution-via-core.md +0 -0
  95. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-09-18-export-scan-failure.md +0 -0
  96. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-09-18-flatten-row-event-in-core.md +0 -0
  97. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-09-18-programmatic-extension-plan.md +0 -0
  98. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-09-20-sigint-ends-a-run-in-progress.md +0 -0
  99. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-09-24-query-rows-in-projection-order.md +0 -0
  100. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-10-02-readme-docs-host.md +0 -0
  101. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-10-03-one-glob-rule-for-config-globs.md +0 -0
  102. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-10-03-path-table-directory-one-level.md +0 -0
  103. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-10-04-path-table-dotfiles-hidden.md +0 -0
  104. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-10-05-brace-groups-follow-bash.md +0 -0
  105. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-10-05-cli-context.md +0 -0
  106. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-10-05-gitignore-requires-repo.md +0 -0
  107. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-10-05-path-table-node-modules-named.md +0 -0
  108. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-10-05-path-table-symlinks.md +0 -0
  109. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-10-05-path-table-trailing-slash.md +0 -0
  110. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-10-05-unbalanced-brackets-literal.md +0 -0
  111. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-10-06-config-braces.md +0 -0
  112. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-10-06-config-directory.md +0 -0
  113. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-10-06-config-dotnames.md +0 -0
  114. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-10-06-config-gitignore.md +0 -0
  115. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-10-06-config-globs-anchor-at-the-config.md +0 -0
  116. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-10-06-config-links.md +0 -0
  117. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-10-06-one-glob-compiler.md +0 -0
  118. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-10-06-plugin-no-default-records.md +0 -0
  119. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-10-06-watch-broadcast.md +0 -0
  120. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-10-06-zero-match-config-table-warning.md +0 -0
  121. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-10-07-bracket-slash-literal.md +0 -0
  122. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-10-07-dotdot-and-double-slashes.md +0 -0
  123. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-10-07-dotdot-as-written.md +0 -0
  124. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-10-07-glob-walks-node-modules.md +0 -0
  125. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-10-07-literal-gitignore.md +0 -0
  126. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-10-07-on-file-ndjson.md +0 -0
  127. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-10-07-parallel-hooks.md +0 -0
  128. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-10-07-persist-cache-outside-root.md +0 -0
  129. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-10-07-posix-classes-unicode.md +0 -0
  130. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-10-07-spread-few-large-files.md +0 -0
  131. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/2026-10-08-small-walks-stay-on-one-thread.md +0 -0
  132. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/changelog.d/README.md +0 -0
  133. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/conftest.py +0 -0
  134. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/docs/.claude/CLAUDE.md +0 -0
  135. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/docs/.vitepress/config.ts +0 -0
  136. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/docs/.vitepress/theme/index.ts +0 -0
  137. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/docs/.vitepress/theme/lang.ts +0 -0
  138. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/docs/AGENTS.md +0 -0
  139. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/docs/context/.gitattributes +0 -0
  140. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/docs/context/recipes.md +0 -0
  141. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/docs/context/troubleshooting.md +0 -0
  142. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/docs/context/usage.md +0 -0
  143. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/docs/explanation.md +0 -0
  144. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/docs/getting-started.md +0 -0
  145. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/docs/howto/agent-skill.md +0 -0
  146. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/docs/howto/columns-from-paths.md +0 -0
  147. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/docs/howto/define-tables.md +0 -0
  148. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/docs/howto/embed.md +0 -0
  149. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/docs/howto/extract-from-contents.md +0 -0
  150. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/docs/howto/load-extension.md +0 -0
  151. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/docs/howto/parse-files-into-columns.md +0 -0
  152. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/docs/howto/persist.md +0 -0
  153. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/docs/howto/query-json.md +0 -0
  154. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/docs/howto/query-without-config.md +0 -0
  155. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/docs/howto/react-to-changes.md +0 -0
  156. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/docs/howto/search-by-meaning.md +0 -0
  157. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/docs/howto/search-indexes.md +0 -0
  158. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/docs/howto/skip-files.md +0 -0
  159. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/docs/howto/write-a-plugin.md +0 -0
  160. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/docs/index.md +0 -0
  161. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/docs/package.json +0 -0
  162. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/docs/plugins.md +0 -0
  163. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/docs/pnpm-lock.yaml +0 -0
  164. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/docs/pnpm-workspace.yaml +0 -0
  165. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/docs/reference/cli.md +0 -0
  166. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/docs/reference/columns.md +0 -0
  167. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/docs/reference/config.md +0 -0
  168. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/docs/reference/glob.md +0 -0
  169. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/docs/reference/hooks.md +0 -0
  170. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/docs/reference/http-api.md +0 -0
  171. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/docs/reference/path-tables.md +0 -0
  172. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/docs/reference/sdk.md +0 -0
  173. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/bot-1334-listing-exemptions.json +0 -0
  174. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/bot-1397-watch-broadcast.json +0 -0
  175. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/bot-1398-inotify-error.json +0 -0
  176. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/bot-1399-server-cors.json +0 -0
  177. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/bot-1401-watch-scope.json +0 -0
  178. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/bot-1407-child-place-depth.json +0 -0
  179. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/bot-1414-stat-speed.json +0 -0
  180. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/bot-1415-server-speed.json +0 -0
  181. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/bot-1418-node-modules.json +0 -0
  182. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/bot-1419-dotdot-slashes.json +0 -0
  183. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/bot-1420-bracket-slash.json +0 -0
  184. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/bot-1421-posix-unicode.json +0 -0
  185. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/bot-1422-literal-gitignore.json +0 -0
  186. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/bot-1426-walk-spawn-threshold-1008.json +0 -0
  187. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/bot-1428-ndjson-hooks.json +0 -0
  188. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/bot-1429-parallel-hooks.json +0 -0
  189. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/bot-1430-dotdot-as-written.json +0 -0
  190. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/bot-1431-persist-cache-dir.json +0 -0
  191. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/bot-1437-test-cache-isolation.json +0 -0
  192. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/bot-1440-fix-main-build.json +0 -0
  193. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/bot-1448-wildcard-ignored-prefix.json +0 -0
  194. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/bot-1451-named-dir-never-hidden.json +0 -0
  195. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/bot-1454-split-few-files.json +0 -0
  196. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/bot-1457-incremental-refresh-1008.json +0 -0
  197. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/bot-fix-main-place-depth-20261007.json +0 -0
  198. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/cc-keen-knuth-f11gyq.json +0 -0
  199. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1056-py-ofpf9.json +0 -0
  200. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1066-p1-resolve-extension.json +0 -0
  201. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1078-argv-config-paths-core.json +0 -0
  202. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1079-p2-resolve-config-extensions.json +0 -0
  203. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1080-share-vtab-scaffolding.json +0 -0
  204. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1081-indicatif-progress.json +0 -0
  205. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1096-watch-moved-dir.json +0 -0
  206. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1109-watch-moved-out.json +0 -0
  207. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1119-ext-plan.json +0 -0
  208. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1120-py-ext.json +0 -0
  209. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1122-ext-cleanup.json +0 -0
  210. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1130-codec-crates.json +0 -0
  211. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1131-flatten-row-event.json +0 -0
  212. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1139-sse-flatten.json +0 -0
  213. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1140-scan-failure-export.json +0 -0
  214. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1148-clippy-all-targets.json +0 -0
  215. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1164-sigint-fatal.json +0 -0
  216. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1170-projection-order.json +0 -0
  217. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1172-on-file-path.json +0 -0
  218. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1173-py-projection-order.json +0 -0
  219. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1184-win-rel-paths.json +0 -0
  220. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1185-win-abs-table-names.json +0 -0
  221. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1186-win-test-harness.json +0 -0
  222. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1196-join-index.json +0 -0
  223. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1199-glob-prefix.json +0 -0
  224. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1201-single-walk.json +0 -0
  225. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1204-embed-batch.json +0 -0
  226. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1207-win-argv-quote.json +0 -0
  227. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1208-win-nonverbatim-paths.json +0 -0
  228. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1215-on-file-batch.json +0 -0
  229. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1216-on-file-cleanup.json +0 -0
  230. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1223-config-glob-rule.json +0 -0
  231. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1223-dir-one-level.json +0 -0
  232. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1225-plugin-no-default.json +0 -0
  233. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1226-stale-docs.json +0 -0
  234. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1232-anchor-plumbing.json +0 -0
  235. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1232-config-anchor.json +0 -0
  236. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1232-multi-watch.json +0 -0
  237. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1232-zero-match.json +0 -0
  238. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1238-parallel-walk.json +0 -0
  239. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1241-content-prefetch.json +0 -0
  240. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1243-ingest-perf.json +0 -0
  241. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1249-dotfiles.json +0 -0
  242. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1256-symlinks.json +0 -0
  243. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1257-trailing-slash.json +0 -0
  244. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1258-config-braces.json +0 -0
  245. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1258-config-directory.json +0 -0
  246. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1258-config-dotnames.json +0 -0
  247. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1258-config-gitignore.json +0 -0
  248. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1258-config-links.json +0 -0
  249. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1258-one-pattern.json +0 -0
  250. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1262-brace-literal.json +0 -0
  251. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1264-context.json +0 -0
  252. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1267-posix-classes.json +0 -0
  253. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1268-unbalanced-brackets.json +0 -0
  254. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1269-utf8-chars.json +0 -0
  255. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1271-node-modules-named.json +0 -0
  256. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1272-ancestor-gitignore.json +0 -0
  257. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1273-walk-prune.json +0 -0
  258. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1285-ingest-fast.json +0 -0
  259. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1286-nested-repo.json +0 -0
  260. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1305-glob-speed.json +0 -0
  261. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1308-glob-speed.json +0 -0
  262. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1310-glob-speed.json +0 -0
  263. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1311-glob-speed.json +0 -0
  264. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1312-glob-speed.json +0 -0
  265. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1318-lazy-stat.json +0 -0
  266. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1320-walk-speed.json +0 -0
  267. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1322-walk-readdir.json +0 -0
  268. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1325-parallel-walk.json +0 -0
  269. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1326-stream-rows.json +0 -0
  270. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1330-python-dirsql-patch.json +0 -0
  271. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1330-python-extensions-patch.json +0 -0
  272. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1330-scanner-effects.json +0 -0
  273. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1330-scanner-gitignore.json +0 -0
  274. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1330-vtab-prefetch-flag.json +0 -0
  275. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1330-vtab-read.json +0 -0
  276. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-1351-dot-dirs.json +0 -0
  277. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-819-oneshot-timeout.json +0 -0
  278. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-827-unquote-doubled-quotes.json +0 -0
  279. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-epic-953-slice2-reedline.json +0 -0
  280. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-epic-953-slice3-format.json +0 -0
  281. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-epic-953-stacked-prs-x59wm3.json +0 -0
  282. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-github-issue-825-e4mhhp.json +0 -0
  283. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-issue-951-0eease.json +0 -0
  284. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-issue-962-0jjrfv.json +0 -0
  285. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-issue-986-red-test-e7sjrb.json +0 -0
  286. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-tackle-1034-cachesplit.json +0 -0
  287. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-tackle-1042-py12.json +0 -0
  288. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-tackle-956-xzen74.json +0 -0
  289. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-tackle-957-lrm0z6-worker-calls.json +0 -0
  290. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-tackle-957-lrm0z6.json +0 -0
  291. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/e2e-attestations/claude-tackle-975-n8mc2h.json +0 -0
  292. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/migrations.d/2026-07-13-drop-cwd-config-auto-detect.md +0 -0
  293. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/migrations.d/2026-07-13-rename-extract-to-on-file.md +0 -0
  294. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/migrations.d/2026-07-13-sdk-default-baked-in-config.md +0 -0
  295. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/migrations.d/2026-07-20-drop-implicit-files-table.md +0 -0
  296. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/migrations.d/2026-07-21-remove-glob-captures.md +0 -0
  297. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/migrations.d/2026-07-24-hookless-table-config-error.md +0 -0
  298. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/migrations.d/2026-07-24-remove-stat-fact-injection.md +0 -0
  299. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/migrations.d/2026-07-29-restore-python-310.md +0 -0
  300. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/migrations.d/2026-08-04-cli-in-process.md +0 -0
  301. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/migrations.d/2026-08-20-declared-table-name.md +0 -0
  302. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/migrations.d/2026-09-20-sigint-ends-a-run-in-progress.md +0 -0
  303. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/migrations.d/2026-09-24-query-rows-in-projection-order.md +0 -0
  304. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/migrations.d/2026-10-02-readme-docs-host.md +0 -0
  305. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/migrations.d/2026-10-03-one-glob-rule-for-config-globs.md +0 -0
  306. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/migrations.d/2026-10-03-path-table-directory-one-level.md +0 -0
  307. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/migrations.d/2026-10-04-path-table-dotfiles-hidden.md +0 -0
  308. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/migrations.d/2026-10-05-brace-groups-follow-bash.md +0 -0
  309. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/migrations.d/2026-10-05-cli-context.md +0 -0
  310. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/migrations.d/2026-10-05-gitignore-requires-repo.md +0 -0
  311. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/migrations.d/2026-10-05-path-table-node-modules-named.md +0 -0
  312. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/migrations.d/2026-10-05-path-table-symlinks.md +0 -0
  313. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/migrations.d/2026-10-05-path-table-trailing-slash.md +0 -0
  314. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/migrations.d/2026-10-05-unbalanced-brackets-literal.md +0 -0
  315. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/migrations.d/2026-10-06-config-braces.md +0 -0
  316. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/migrations.d/2026-10-06-config-directory.md +0 -0
  317. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/migrations.d/2026-10-06-config-dotnames.md +0 -0
  318. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/migrations.d/2026-10-06-config-gitignore.md +0 -0
  319. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/migrations.d/2026-10-06-config-globs-anchor-at-the-config.md +0 -0
  320. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/migrations.d/2026-10-06-config-links.md +0 -0
  321. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/migrations.d/2026-10-06-one-glob-compiler.md +0 -0
  322. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/migrations.d/2026-10-06-plugin-no-default-records.md +0 -0
  323. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/migrations.d/2026-10-06-watch-broadcast.md +0 -0
  324. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/migrations.d/2026-10-06-zero-match-config-table-warning.md +0 -0
  325. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/migrations.d/2026-10-07-bracket-slash-literal.md +0 -0
  326. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/migrations.d/2026-10-07-dotdot-and-double-slashes.md +0 -0
  327. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/migrations.d/2026-10-07-dotdot-as-written.md +0 -0
  328. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/migrations.d/2026-10-07-glob-walks-node-modules.md +0 -0
  329. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/migrations.d/2026-10-07-literal-gitignore.md +0 -0
  330. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/migrations.d/2026-10-07-on-file-ndjson.md +0 -0
  331. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/migrations.d/2026-10-07-parallel-hooks.md +0 -0
  332. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/migrations.d/2026-10-07-persist-cache-outside-root.md +0 -0
  333. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/migrations.d/2026-10-07-posix-classes-unicode.md +0 -0
  334. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/migrations.d/2026-10-07-spread-few-large-files.md +0 -0
  335. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/migrations.d/2026-10-08-small-walks-stay-on-one-thread.md +0 -0
  336. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/migrations.d/README.md +0 -0
  337. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/src/lib.rs +0 -0
  338. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/testing-conventions.toml +0 -0
  339. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/tests/__init__.py +0 -0
  340. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/tests/conftest.py +0 -0
  341. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/tests/e2e/__init__.py +0 -0
  342. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/tests/e2e/fixtures/dirsql_plugin_fixture/__init__.py +0 -0
  343. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/tests/e2e/fixtures/dirsql_plugin_fixture/dirsql.toml +0 -0
  344. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/tests/e2e/speed_of_light.py +0 -0
  345. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/tests/integration/__init__.py +0 -0
  346. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/tests/integration/binding/__init__.py +0 -0
  347. {dirsql-0.4.105 → dirsql-0.4.106}/packages/python/tests/integration/hermetic/__init__.py +0 -0
  348. {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/CHANGELOG.md +0 -0
  349. {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/MIGRATIONS.md +0 -0
  350. {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/README.md +0 -0
  351. {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/benches/db_bench.rs +0 -0
  352. {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/benches/differ_bench.rs +0 -0
  353. {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/benches/matcher_bench.rs +0 -0
  354. {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/benches/scanner_bench.rs +0 -0
  355. {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/docs/context/.gitattributes +0 -0
  356. {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/docs/context/recipes.md +0 -0
  357. {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/docs/context/troubleshooting.md +0 -0
  358. {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/docs/context/usage.md +0 -0
  359. {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/docs/explanation.md +0 -0
  360. {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/docs/getting-started.md +0 -0
  361. {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/docs/howto/agent-skill.md +0 -0
  362. {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/docs/howto/columns-from-paths.md +0 -0
  363. {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/docs/howto/define-tables.md +0 -0
  364. {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/docs/howto/embed.md +0 -0
  365. {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/docs/howto/extract-from-contents.md +0 -0
  366. {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/docs/howto/load-extension.md +0 -0
  367. {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/docs/howto/parse-files-into-columns.md +0 -0
  368. {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/docs/howto/persist.md +0 -0
  369. {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/docs/howto/query-json.md +0 -0
  370. {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/docs/howto/query-without-config.md +0 -0
  371. {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/docs/howto/react-to-changes.md +0 -0
  372. {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/docs/howto/search-by-meaning.md +0 -0
  373. {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/docs/howto/search-indexes.md +0 -0
  374. {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/docs/howto/skip-files.md +0 -0
  375. {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/docs/howto/write-a-plugin.md +0 -0
  376. {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/docs/index.md +0 -0
  377. {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/docs/plugins.md +0 -0
  378. {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/docs/reference/cli.md +0 -0
  379. {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/docs/reference/columns.md +0 -0
  380. {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/docs/reference/config.md +0 -0
  381. {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/docs/reference/glob.md +0 -0
  382. {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/docs/reference/hooks.md +0 -0
  383. {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/docs/reference/http-api.md +0 -0
  384. {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/docs/reference/path-tables.md +0 -0
  385. {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/docs/reference/sdk.md +0 -0
  386. {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/src/bin/dirsql.rs +0 -0
  387. {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/src/brace.rs +0 -0
  388. {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/src/cli/context.rs +0 -0
  389. {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/src/cli/execute.rs +0 -0
  390. {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/src/cli/init.rs +0 -0
  391. {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/src/cli/mod.rs +0 -0
  392. {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/src/cli/repl.rs +0 -0
  393. {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/src/cli/router.rs +0 -0
  394. {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/src/cli/run.rs +0 -0
  395. {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/src/cli/serialize.rs +0 -0
  396. {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/src/cli/server.rs +0 -0
  397. {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/src/cli/table.rs +0 -0
  398. {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/src/command.rs +0 -0
  399. {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/src/config.rs +0 -0
  400. {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/src/default_config.toml +0 -0
  401. {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/src/differ.rs +0 -0
  402. {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/src/extension_resolution.rs +0 -0
  403. {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/src/functions.rs +0 -0
  404. {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/src/infer.rs +0 -0
  405. {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/src/launcher.rs +0 -0
  406. {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/src/listing.rs +0 -0
  407. {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/src/matcher.rs +0 -0
  408. {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/src/on_file.rs +0 -0
  409. {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/src/parsed_vtab.rs +0 -0
  410. {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/src/path_table.rs +0 -0
  411. {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/src/persist.rs +0 -0
  412. {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/src/posix_class.rs +0 -0
  413. {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/src/progress.rs +0 -0
  414. {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/src/row_event_flat.rs +0 -0
  415. {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/src/scanner.rs +0 -0
  416. {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/src/sql_literal.rs +0 -0
  417. {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/src/tree_walk.rs +0 -0
  418. {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/src/vtab.rs +0 -0
  419. {dirsql-0.4.105 → dirsql-0.4.106}/packages/rust/src/vtab_scaffold.rs +0 -0
  420. {dirsql-0.4.105 → dirsql-0.4.106}/pyproject.toml +0 -0
@@ -573,7 +573,7 @@ dependencies = [
573
573
 
574
574
  [[package]]
575
575
  name = "dirsql"
576
- version = "0.4.105"
576
+ version = "0.4.106"
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.105"
628
+ version = "0.4.106"
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.105
3
+ Version: 0.4.106
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.105"
7
+ version = "0.4.106"
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,7 @@
1
+ {
2
+ "command": "uv run python -m pytest tests/e2e/on_file_query_test.py tests/e2e/query_contract_test.py tests/e2e/use_case_notebook_test.py -x -q",
3
+ "ran_at": 1791464863,
4
+ "exit_code": 0,
5
+ "commit": "480d3e491818207f55eb2d8dc6c95498dc27afab",
6
+ "branch": "bot/1459-rescan-on-overflow-1008"
7
+ }
@@ -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.105"
9
+ version = "0.4.106"
10
10
  edition.workspace = true
11
11
  # Literal `license` (not `license.workspace = true`) because
12
12
  # putitoutthere's preflight check reads `[package].license` directly
@@ -991,6 +991,22 @@ impl Db {
991
991
  .collect()
992
992
  }
993
993
 
994
+ /// Every distinct `(table_name, file_path)` that owns rows, ordered by
995
+ /// table then path. A per-table hook's rows have no file owner and are
996
+ /// not listed.
997
+ pub fn owned_files(&self) -> Result<Vec<(String, String)>> {
998
+ let mut stmt = self.conn.prepare(
999
+ "SELECT DISTINCT table_name, file_path FROM ( \
1000
+ SELECT table_name, file_path FROM _dirsql_internal_rows \
1001
+ UNION ALL \
1002
+ SELECT table_name, file_path FROM _dirsql_internal_ranges) \
1003
+ WHERE file_path != '' \
1004
+ ORDER BY table_name, file_path",
1005
+ )?;
1006
+ let rows = stmt.query_map([], |r| Ok((r.get(0)?, r.get(1)?)))?;
1007
+ Ok(rows.collect::<rusqlite::Result<Vec<_>>>()?)
1008
+ }
1009
+
994
1010
  /// Every distinct `(table_name, file_path)` whose file sits beneath the
995
1011
  /// directory `dir`, ordered by table then path.
996
1012
  pub fn files_under(&self, dir: &str) -> Result<Vec<(String, String)>> {
@@ -2496,6 +2512,42 @@ mod tests {
2496
2512
  assert!(db.files_under("nothing").unwrap().is_empty());
2497
2513
  }
2498
2514
 
2515
+ #[test]
2516
+ fn owned_files_lists_each_file_once_and_skips_the_batch_owner() {
2517
+ let db = Db::new().unwrap();
2518
+ db.create_table("t1", "CREATE TABLE t1 (id TEXT)").unwrap();
2519
+ db.create_table("t2", "CREATE TABLE t2 (id TEXT)").unwrap();
2520
+ let row = HashMap::from([("id".into(), Value::Text("x".into()))]);
2521
+ for (table, file, idx) in [
2522
+ ("t2", "c.jsonl", 0),
2523
+ ("t1", "a.jsonl", 0),
2524
+ ("t1", "a.jsonl", 1),
2525
+ ("t1", "d/b.jsonl", 0),
2526
+ ("t1", "", 0),
2527
+ ] {
2528
+ db.insert_row(table, &row, file, idx).unwrap();
2529
+ }
2530
+
2531
+ assert_eq!(
2532
+ db.owned_files().unwrap(),
2533
+ vec![
2534
+ ("t1".to_string(), "a.jsonl".to_string()),
2535
+ ("t1".to_string(), "d/b.jsonl".to_string()),
2536
+ ("t2".to_string(), "c.jsonl".to_string()),
2537
+ ]
2538
+ );
2539
+ }
2540
+
2541
+ #[test]
2542
+ fn owned_files_surfaces_sql_failure() {
2543
+ let db = Db::new().unwrap();
2544
+ db.conn
2545
+ .execute("DROP TABLE _dirsql_internal_rows", [])
2546
+ .unwrap();
2547
+ let err = db.owned_files().unwrap_err();
2548
+ assert!(matches!(err, DbError::Sqlite(_)), "got: {err:?}");
2549
+ }
2550
+
2499
2551
  #[test]
2500
2552
  fn files_under_surfaces_sql_failure() {
2501
2553
  let db = Db::new().unwrap();
@@ -658,9 +658,17 @@ impl DirSQL {
658
658
  pub fn apply_file_events(&self, events: Vec<FileEvent>) -> Vec<RowEvent> {
659
659
  let mut pending = PendingRefresh::default();
660
660
  let mut out = Vec::new();
661
+ let mut rescan = false;
661
662
  for fe in events {
663
+ if fe == FileEvent::Rescan {
664
+ rescan = true;
665
+ continue;
666
+ }
662
667
  out.extend(self.route_file_event(fe, &mut pending));
663
668
  }
669
+ if rescan {
670
+ out.extend(self.rescan(&mut pending));
671
+ }
664
672
  out.extend(self.refresh_pending(pending));
665
673
  out
666
674
  }
@@ -718,6 +726,7 @@ impl DirSQL {
718
726
  fn route_file_event(&self, event: FileEvent, pending: &mut PendingRefresh) -> Vec<RowEvent> {
719
727
  let abs_path = match &event {
720
728
  FileEvent::Created(p) | FileEvent::Modified(p) | FileEvent::Deleted(p) => p.clone(),
729
+ FileEvent::Rescan => return Vec::new(),
721
730
  };
722
731
  let mut events = Vec::new();
723
732
  for (group, rel_path_buf) in self.groups_containing(&abs_path) {
@@ -767,6 +776,7 @@ impl DirSQL {
767
776
  FileEvent::Created(_) | FileEvent::Modified(_) => {
768
777
  events.extend(self.handle_upsert(&m.table_name, &abs_path, &rel_path));
769
778
  }
779
+ FileEvent::Rescan => {}
770
780
  }
771
781
  }
772
782
  // The mirror of the walk above: a directory that leaves the tree
@@ -931,6 +941,43 @@ impl DirSQL {
931
941
  events
932
942
  }
933
943
 
944
+ /// Reconcile every table with the tree after the OS dropped events: walk
945
+ /// each group's root again, drop the rows of files that are gone, re-read
946
+ /// the files that are there, and rebuild each per-table hook's file list.
947
+ fn rescan(&self, pending: &mut PendingRefresh) -> Vec<RowEvent> {
948
+ let owned = match self.inner.db.lock() {
949
+ Ok(db) => db.owned_files(),
950
+ Err(e) => return vec![error_event(None, "", e.to_string())],
951
+ };
952
+ let owned = match owned {
953
+ Ok(owned) => owned,
954
+ Err(e) => return vec![error_event(None, "", e.to_string())],
955
+ };
956
+ let mut events = Vec::new();
957
+ for group in &self.inner.groups {
958
+ let in_group = |table: &str| group.tables.iter().any(|name| name == table);
959
+ for (table, file_path) in &owned {
960
+ if in_group(table)
961
+ && !self
962
+ .inner
963
+ .fs
964
+ .is_file(&group.watch_anchor.join(file_path))
965
+ .unwrap_or(false)
966
+ {
967
+ events.extend(self.handle_delete(table, file_path));
968
+ }
969
+ }
970
+ for table in group.tables.iter().filter(|table| self.is_per_table(table)) {
971
+ if let Ok(mut batch_files) = self.inner.batch_files.lock() {
972
+ batch_files.remove(table);
973
+ }
974
+ pending.mark(table, ".");
975
+ }
976
+ events.extend(self.index_subtree(group, &group.watch_anchor, pending));
977
+ }
978
+ events
979
+ }
980
+
934
981
  /// Index every file beneath `dir` as if each had its own create event,
935
982
  /// using the scanner's walk so the watch path and the initial scan share
936
983
  /// one definition of what counts as a row.
@@ -5563,6 +5610,114 @@ mod internal_tests {
5563
5610
  assert_eq!(row_names(&db), Vec::<String>::new());
5564
5611
  }
5565
5612
 
5613
+ fn rescan_fixture(per_table: bool) -> (TempDir, PathBuf, DirSQL, Calls) {
5614
+ let dir = TempDir::new().unwrap();
5615
+ let root = dir.path().canonicalize().unwrap();
5616
+ let (items, calls) = recording_per_table("items", "**/*.txt");
5617
+ let table = if per_table {
5618
+ items
5619
+ } else {
5620
+ Table::new(
5621
+ "items",
5622
+ "CREATE TABLE items (name TEXT)",
5623
+ "**/*.txt",
5624
+ |path| {
5625
+ vec![Row::from_iter([(
5626
+ "name".to_string(),
5627
+ Value::Text(
5628
+ Path::new(path)
5629
+ .file_name()
5630
+ .unwrap()
5631
+ .to_string_lossy()
5632
+ .into_owned(),
5633
+ ),
5634
+ )])]
5635
+ },
5636
+ )
5637
+ };
5638
+ let db =
5639
+ DirSQL::with_ignore_and_fs(&root, vec![table], Vec::<String>::new(), Arc::new(RealFs))
5640
+ .unwrap();
5641
+ for rel in ["a.txt", "sub/b.txt"] {
5642
+ let path = root.join(rel);
5643
+ std::fs::create_dir_all(path.parent().unwrap()).unwrap();
5644
+ std::fs::write(&path, "x").unwrap();
5645
+ db.apply_file_events(vec![FileEvent::Created(path)]);
5646
+ }
5647
+ (dir, root, db, calls)
5648
+ }
5649
+
5650
+ fn drift(root: &Path) {
5651
+ std::fs::remove_file(root.join("a.txt")).unwrap();
5652
+ std::fs::write(root.join("sub/c.txt"), "x").unwrap();
5653
+ std::fs::write(root.join("d.txt"), "x").unwrap();
5654
+ }
5655
+
5656
+ fn name_of(row: &Row) -> String {
5657
+ match &row["name"] {
5658
+ Value::Text(n) => n.clone(),
5659
+ other => format!("{other:?}"),
5660
+ }
5661
+ }
5662
+
5663
+ fn rescan_summary(events: &[RowEvent]) -> Vec<String> {
5664
+ let mut out: Vec<String> = events
5665
+ .iter()
5666
+ .map(|event| match event {
5667
+ RowEvent::Insert { row, .. } => format!("insert {}", name_of(row)),
5668
+ RowEvent::Delete { row, .. } => format!("delete {}", name_of(row)),
5669
+ other => format!("{other:?}"),
5670
+ })
5671
+ .collect();
5672
+ out.sort();
5673
+ out
5674
+ }
5675
+
5676
+ #[test]
5677
+ fn a_rescan_reconciles_a_per_file_table_with_the_tree() {
5678
+ let (_dir, root, db, _) = rescan_fixture(false);
5679
+ drift(&root);
5680
+
5681
+ let events = db.apply_file_events(vec![FileEvent::Rescan]);
5682
+
5683
+ assert_eq!(
5684
+ rescan_summary(&events),
5685
+ vec!["delete a.txt", "insert c.txt", "insert d.txt"]
5686
+ );
5687
+ assert_eq!(row_names(&db), vec!["b.txt", "c.txt", "d.txt"]);
5688
+ }
5689
+
5690
+ #[test]
5691
+ fn a_rescan_rebuilds_a_per_table_hooks_files_and_reconciles_its_rows() {
5692
+ let (_dir, root, db, calls) = rescan_fixture(true);
5693
+ drift(&root);
5694
+
5695
+ let events = db.apply_file_events(vec![FileEvent::Rescan]);
5696
+
5697
+ assert_eq!(
5698
+ calls.lock().unwrap().last().unwrap(),
5699
+ &vec![
5700
+ root.join("d.txt"),
5701
+ root.join("sub/b.txt"),
5702
+ root.join("sub/c.txt")
5703
+ ]
5704
+ );
5705
+ assert_eq!(
5706
+ rescan_summary(&events),
5707
+ vec![
5708
+ "Update { table: \"items\", old_row: {\"name\": Text(\"a.txt\")}, new_row: {\"name\": Text(\"d.txt\")}, file_path: \".\" }",
5709
+ "insert c.txt"
5710
+ ]
5711
+ );
5712
+ assert_eq!(row_names(&db), vec!["b.txt", "c.txt", "d.txt"]);
5713
+ }
5714
+
5715
+ #[test]
5716
+ fn a_rescan_of_a_tree_that_did_not_drift_emits_nothing() {
5717
+ let (_dir, _root, db, _) = rescan_fixture(false);
5718
+ assert_eq!(db.apply_file_events(vec![FileEvent::Rescan]), vec![]);
5719
+ }
5720
+
5566
5721
  fn anchored_table(name: &str, glob: &str, anchor: &str) -> Table {
5567
5722
  Table::new(
5568
5723
  name,
@@ -19,6 +19,9 @@ pub enum FileEvent {
19
19
  Created(PathBuf),
20
20
  Modified(PathBuf),
21
21
  Deleted(PathBuf),
22
+ /// The OS dropped events (an inotify queue overflow); the index may have
23
+ /// diverged from disk and must be rebuilt from a walk.
24
+ Rescan,
22
25
  }
23
26
 
24
27
  /// A tree to watch, and the skip rules the scan applies within it.
@@ -151,6 +154,19 @@ fn forward(
151
154
  let _ = tolerate_missing(watcher.watch(&dir, RecursiveMode::NonRecursive));
152
155
  }
153
156
  }
157
+ if fe == FileEvent::Rescan && PER_DIRECTORY {
158
+ let Some(watcher) = watcher.upgrade() else {
159
+ return;
160
+ };
161
+ let mut watcher = watcher.lock().expect("watching a directory does not panic");
162
+ // Directories created while events were being dropped have no
163
+ // watch yet.
164
+ for scope in scopes {
165
+ for dir in dirs_to_watch(scopes, &scope.root, &walk_scope) {
166
+ let _ = tolerate_missing(watcher.watch(&dir, RecursiveMode::NonRecursive));
167
+ }
168
+ }
169
+ }
154
170
  if tx.send(fe).is_err() {
155
171
  return;
156
172
  }
@@ -258,6 +274,10 @@ fn translate_event(event: &Event) -> Vec<FileEvent> {
258
274
  }
259
275
  }
260
276
 
277
+ if event.need_rescan() {
278
+ results.push(FileEvent::Rescan);
279
+ }
280
+
261
281
  results
262
282
  }
263
283
 
@@ -347,6 +367,16 @@ fn access_event(paths: Vec<PathBuf>) -> Event {
347
367
  }
348
368
  }
349
369
 
370
+ #[cfg(test)]
371
+ fn rescan_event() -> Event {
372
+ Event {
373
+ kind: EventKind::Other,
374
+ paths: Vec::new(),
375
+ attrs: Default::default(),
376
+ }
377
+ .set_flag(notify::event::Flag::Rescan)
378
+ }
379
+
350
380
  #[cfg(test)]
351
381
  fn io_error(raw_os_error: i32) -> notify::Error {
352
382
  notify::Error::io(std::io::Error::from_raw_os_error(raw_os_error))
@@ -563,6 +593,11 @@ mod tests {
563
593
  );
564
594
  }
565
595
 
596
+ #[test]
597
+ fn translate_event_turns_a_rescan_flag_into_a_rescan() {
598
+ assert_eq!(translate_event(&rescan_event()), vec![FileEvent::Rescan]);
599
+ }
600
+
566
601
  #[test]
567
602
  fn translate_event_ignores_access_events() {
568
603
  let results = translate_event(&access_event(vec![PathBuf::from("/tmp/read.txt")]));
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes