dirsql 0.4.120__tar.gz → 0.4.122__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 (486) hide show
  1. {dirsql-0.4.120 → dirsql-0.4.122}/Cargo.lock +2 -2
  2. {dirsql-0.4.120 → dirsql-0.4.122}/PKG-INFO +1 -1
  3. {dirsql-0.4.120 → dirsql-0.4.122}/dirsql/_async.py +24 -6
  4. {dirsql-0.4.120/packages/rust → dirsql-0.4.122}/docs/reference/config.md +6 -3
  5. {dirsql-0.4.120 → dirsql-0.4.122}/docs/reference/sdk.md +8 -3
  6. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/Cargo.toml +1 -1
  7. dirsql-0.4.122/packages/python/changelog.d/2026-11-02-watch-dirs-created-mid-registration.md +1 -0
  8. dirsql-0.4.122/packages/python/changelog.d/2026-11-02-watch-live-on-return.md +1 -0
  9. {dirsql-0.4.120 → dirsql-0.4.122/packages/python}/docs/reference/config.md +6 -3
  10. {dirsql-0.4.120/packages/rust → dirsql-0.4.122/packages/python}/docs/reference/sdk.md +8 -3
  11. dirsql-0.4.122/packages/python/e2e-attestations/bot-1461-step3-1020.json +7 -0
  12. dirsql-0.4.122/packages/python/e2e-attestations/bot-1544-perfile-update-1020.json +7 -0
  13. dirsql-0.4.122/packages/python/e2e-attestations/bot-1552-watch-gap-1102.json +7 -0
  14. dirsql-0.4.122/packages/python/e2e-attestations/bot-1557-watch-rename-1102.json +7 -0
  15. dirsql-0.4.122/packages/python/migrations.d/2026-11-02-watch-dirs-created-mid-registration.md +29 -0
  16. dirsql-0.4.122/packages/python/migrations.d/2026-11-02-watch-live-on-return.md +21 -0
  17. {dirsql-0.4.120 → dirsql-0.4.122}/packages/rust/Cargo.toml +1 -1
  18. {dirsql-0.4.120/packages/python → dirsql-0.4.122/packages/rust}/docs/reference/config.md +6 -3
  19. {dirsql-0.4.120/packages/python → dirsql-0.4.122/packages/rust}/docs/reference/sdk.md +8 -3
  20. {dirsql-0.4.120 → dirsql-0.4.122}/packages/rust/src/db.rs +547 -50
  21. {dirsql-0.4.120 → dirsql-0.4.122}/packages/rust/src/lib.rs +232 -33
  22. {dirsql-0.4.120 → dirsql-0.4.122}/packages/rust/src/listing.rs +248 -11
  23. {dirsql-0.4.120 → dirsql-0.4.122}/packages/rust/src/watcher.rs +124 -12
  24. {dirsql-0.4.120 → dirsql-0.4.122}/Cargo.toml +0 -0
  25. {dirsql-0.4.120 → dirsql-0.4.122}/README.md +0 -0
  26. {dirsql-0.4.120 → dirsql-0.4.122}/dirsql/__init__.py +0 -0
  27. {dirsql-0.4.120 → dirsql-0.4.122}/dirsql/_dirsql.pyi +0 -0
  28. {dirsql-0.4.120 → dirsql-0.4.122}/dirsql/cli/__init__.py +0 -0
  29. {dirsql-0.4.120 → dirsql-0.4.122}/dirsql/cli/discover_plugins/__init__.py +0 -0
  30. {dirsql-0.4.120 → dirsql-0.4.122}/dirsql/cli/discover_plugins/discovered_fragments.py +0 -0
  31. {dirsql-0.4.120 → dirsql-0.4.122}/dirsql/cli/discover_plugins/discovery_disabled.py +0 -0
  32. {dirsql-0.4.120 → dirsql-0.4.122}/dirsql/cli/discover_plugins/fragment_path.py +0 -0
  33. {dirsql-0.4.120 → dirsql-0.4.122}/dirsql/cli/discover_plugins/with_discovered_plugins.py +0 -0
  34. {dirsql-0.4.120 → dirsql-0.4.122}/dirsql/cli/main.py +0 -0
  35. {dirsql-0.4.120 → dirsql-0.4.122}/dirsql/cli/resolve_config_extensions.py +0 -0
  36. {dirsql-0.4.120 → dirsql-0.4.122}/dirsql/plan_entry_path.py +0 -0
  37. {dirsql-0.4.120 → dirsql-0.4.122}/dirsql/py.typed +0 -0
  38. {dirsql-0.4.120 → dirsql-0.4.122}/dirsql/read_config.py +0 -0
  39. {dirsql-0.4.120 → dirsql-0.4.122}/dirsql/resolve_configs_extension_specs.py +0 -0
  40. {dirsql-0.4.120 → dirsql-0.4.122}/dirsql/resolve_extension.py +0 -0
  41. {dirsql-0.4.120 → dirsql-0.4.122}/dirsql/resolve_package.py +0 -0
  42. {dirsql-0.4.120 → dirsql-0.4.122}/docs/.claude/CLAUDE.md +0 -0
  43. {dirsql-0.4.120 → dirsql-0.4.122}/docs/.vitepress/config.ts +0 -0
  44. {dirsql-0.4.120 → dirsql-0.4.122}/docs/.vitepress/theme/index.ts +0 -0
  45. {dirsql-0.4.120 → dirsql-0.4.122}/docs/.vitepress/theme/lang.ts +0 -0
  46. {dirsql-0.4.120 → dirsql-0.4.122}/docs/AGENTS.md +0 -0
  47. {dirsql-0.4.120 → dirsql-0.4.122}/docs/context/.gitattributes +0 -0
  48. {dirsql-0.4.120 → dirsql-0.4.122}/docs/context/recipes.md +0 -0
  49. {dirsql-0.4.120 → dirsql-0.4.122}/docs/context/troubleshooting.md +0 -0
  50. {dirsql-0.4.120 → dirsql-0.4.122}/docs/context/usage.md +0 -0
  51. {dirsql-0.4.120 → dirsql-0.4.122}/docs/explanation.md +0 -0
  52. {dirsql-0.4.120 → dirsql-0.4.122}/docs/getting-started.md +0 -0
  53. {dirsql-0.4.120 → dirsql-0.4.122}/docs/howto/agent-skill.md +0 -0
  54. {dirsql-0.4.120 → dirsql-0.4.122}/docs/howto/columns-from-paths.md +0 -0
  55. {dirsql-0.4.120 → dirsql-0.4.122}/docs/howto/define-tables.md +0 -0
  56. {dirsql-0.4.120 → dirsql-0.4.122}/docs/howto/embed.md +0 -0
  57. {dirsql-0.4.120 → dirsql-0.4.122}/docs/howto/extract-from-contents.md +0 -0
  58. {dirsql-0.4.120 → dirsql-0.4.122}/docs/howto/load-extension.md +0 -0
  59. {dirsql-0.4.120 → dirsql-0.4.122}/docs/howto/parse-files-into-columns.md +0 -0
  60. {dirsql-0.4.120 → dirsql-0.4.122}/docs/howto/persist.md +0 -0
  61. {dirsql-0.4.120 → dirsql-0.4.122}/docs/howto/query-json.md +0 -0
  62. {dirsql-0.4.120 → dirsql-0.4.122}/docs/howto/query-without-config.md +0 -0
  63. {dirsql-0.4.120 → dirsql-0.4.122}/docs/howto/react-to-changes.md +0 -0
  64. {dirsql-0.4.120 → dirsql-0.4.122}/docs/howto/search-by-meaning.md +0 -0
  65. {dirsql-0.4.120 → dirsql-0.4.122}/docs/howto/search-indexes.md +0 -0
  66. {dirsql-0.4.120 → dirsql-0.4.122}/docs/howto/skip-files.md +0 -0
  67. {dirsql-0.4.120 → dirsql-0.4.122}/docs/howto/write-a-plugin.md +0 -0
  68. {dirsql-0.4.120 → dirsql-0.4.122}/docs/index.md +0 -0
  69. {dirsql-0.4.120 → dirsql-0.4.122}/docs/package.json +0 -0
  70. {dirsql-0.4.120 → dirsql-0.4.122}/docs/plugins.md +0 -0
  71. {dirsql-0.4.120 → dirsql-0.4.122}/docs/pnpm-lock.yaml +0 -0
  72. {dirsql-0.4.120 → dirsql-0.4.122}/docs/pnpm-workspace.yaml +0 -0
  73. {dirsql-0.4.120 → dirsql-0.4.122}/docs/reference/cli.md +0 -0
  74. {dirsql-0.4.120 → dirsql-0.4.122}/docs/reference/columns.md +0 -0
  75. {dirsql-0.4.120 → dirsql-0.4.122}/docs/reference/glob.md +0 -0
  76. {dirsql-0.4.120 → dirsql-0.4.122}/docs/reference/hooks.md +0 -0
  77. {dirsql-0.4.120 → dirsql-0.4.122}/docs/reference/http-api.md +0 -0
  78. {dirsql-0.4.120 → dirsql-0.4.122}/docs/reference/path-tables.md +0 -0
  79. {dirsql-0.4.120 → dirsql-0.4.122}/docs/speed.json +0 -0
  80. {dirsql-0.4.120 → dirsql-0.4.122}/docs/speed.md +0 -0
  81. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/CHANGELOG.md +0 -0
  82. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/MIGRATIONS.md +0 -0
  83. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/README.md +0 -0
  84. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/changelog.d/2026-07-13-drop-cwd-config-auto-detect.md +0 -0
  85. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/changelog.d/2026-07-13-plugin-discovery.md +0 -0
  86. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/changelog.d/2026-07-13-rename-extract-to-on-file.md +0 -0
  87. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/changelog.d/2026-07-13-repeatable-config.md +0 -0
  88. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/changelog.d/2026-07-13-sdk-default-baked-in-config.md +0 -0
  89. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/changelog.d/2026-07-20-drop-implicit-files-table.md +0 -0
  90. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/changelog.d/2026-07-21-remove-glob-captures.md +0 -0
  91. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/changelog.d/2026-07-24-hookless-table-config-error.md +0 -0
  92. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/changelog.d/2026-07-24-remove-stat-fact-injection.md +0 -0
  93. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/changelog.d/2026-07-29-restore-python-310.md +0 -0
  94. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/changelog.d/2026-08-02-release-profile.md +0 -0
  95. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/changelog.d/2026-08-02-scan-failures.md +0 -0
  96. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/changelog.d/2026-08-03-discovery-ext-resolution.md +0 -0
  97. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/changelog.d/2026-08-03-manylinux-dynamic-binary.md +0 -0
  98. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/changelog.d/2026-08-03-python-no-ignore.md +0 -0
  99. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/changelog.d/2026-08-04-cast-lints.md +0 -0
  100. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/changelog.d/2026-08-04-cli-in-process.md +0 -0
  101. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/changelog.d/2026-08-20-curtaincall-dev-dependency.md +0 -0
  102. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/changelog.d/2026-08-20-declared-table-name.md +0 -0
  103. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/changelog.d/2026-09-04-config-paths-from-argv-module.md +0 -0
  104. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/changelog.d/2026-09-05-config-extension-loader-split.md +0 -0
  105. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/changelog.d/2026-09-05-resolve-config-extensions-split.md +0 -0
  106. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/changelog.d/2026-09-05-resolve-extension-split.md +0 -0
  107. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/changelog.d/2026-09-09-launcher-config-path-scan.md +0 -0
  108. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/changelog.d/2026-09-17-extension-resolution-via-core.md +0 -0
  109. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/changelog.d/2026-09-18-export-scan-failure.md +0 -0
  110. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/changelog.d/2026-09-18-flatten-row-event-in-core.md +0 -0
  111. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/changelog.d/2026-09-18-programmatic-extension-plan.md +0 -0
  112. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/changelog.d/2026-09-20-sigint-ends-a-run-in-progress.md +0 -0
  113. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/changelog.d/2026-09-24-query-rows-in-projection-order.md +0 -0
  114. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/changelog.d/2026-10-02-readme-docs-host.md +0 -0
  115. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/changelog.d/2026-10-03-one-glob-rule-for-config-globs.md +0 -0
  116. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/changelog.d/2026-10-03-path-table-directory-one-level.md +0 -0
  117. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/changelog.d/2026-10-04-path-table-dotfiles-hidden.md +0 -0
  118. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/changelog.d/2026-10-05-brace-groups-follow-bash.md +0 -0
  119. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/changelog.d/2026-10-05-cli-context.md +0 -0
  120. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/changelog.d/2026-10-05-gitignore-requires-repo.md +0 -0
  121. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/changelog.d/2026-10-05-path-table-node-modules-named.md +0 -0
  122. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/changelog.d/2026-10-05-path-table-symlinks.md +0 -0
  123. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/changelog.d/2026-10-05-path-table-trailing-slash.md +0 -0
  124. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/changelog.d/2026-10-05-unbalanced-brackets-literal.md +0 -0
  125. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/changelog.d/2026-10-06-config-braces.md +0 -0
  126. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/changelog.d/2026-10-06-config-directory.md +0 -0
  127. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/changelog.d/2026-10-06-config-dotnames.md +0 -0
  128. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/changelog.d/2026-10-06-config-gitignore.md +0 -0
  129. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/changelog.d/2026-10-06-config-globs-anchor-at-the-config.md +0 -0
  130. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/changelog.d/2026-10-06-config-links.md +0 -0
  131. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/changelog.d/2026-10-06-one-glob-compiler.md +0 -0
  132. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/changelog.d/2026-10-06-plugin-no-default-records.md +0 -0
  133. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/changelog.d/2026-10-06-watch-broadcast.md +0 -0
  134. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/changelog.d/2026-10-06-zero-match-config-table-warning.md +0 -0
  135. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/changelog.d/2026-10-07-bracket-slash-literal.md +0 -0
  136. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/changelog.d/2026-10-07-dotdot-and-double-slashes.md +0 -0
  137. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/changelog.d/2026-10-07-dotdot-as-written.md +0 -0
  138. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/changelog.d/2026-10-07-glob-walks-node-modules.md +0 -0
  139. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/changelog.d/2026-10-07-literal-gitignore.md +0 -0
  140. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/changelog.d/2026-10-07-on-file-ndjson.md +0 -0
  141. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/changelog.d/2026-10-07-parallel-hooks.md +0 -0
  142. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/changelog.d/2026-10-07-persist-cache-outside-root.md +0 -0
  143. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/changelog.d/2026-10-07-posix-classes-unicode.md +0 -0
  144. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/changelog.d/2026-10-07-spread-few-large-files.md +0 -0
  145. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/changelog.d/2026-10-08-small-walks-stay-on-one-thread.md +0 -0
  146. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/changelog.d/2026-10-08-watch-requires-named-table.md +0 -0
  147. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/changelog.d/README.md +0 -0
  148. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/conftest.py +0 -0
  149. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/docs/.claude/CLAUDE.md +0 -0
  150. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/docs/.vitepress/config.ts +0 -0
  151. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/docs/.vitepress/theme/index.ts +0 -0
  152. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/docs/.vitepress/theme/lang.ts +0 -0
  153. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/docs/AGENTS.md +0 -0
  154. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/docs/context/.gitattributes +0 -0
  155. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/docs/context/recipes.md +0 -0
  156. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/docs/context/troubleshooting.md +0 -0
  157. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/docs/context/usage.md +0 -0
  158. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/docs/explanation.md +0 -0
  159. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/docs/getting-started.md +0 -0
  160. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/docs/howto/agent-skill.md +0 -0
  161. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/docs/howto/columns-from-paths.md +0 -0
  162. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/docs/howto/define-tables.md +0 -0
  163. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/docs/howto/embed.md +0 -0
  164. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/docs/howto/extract-from-contents.md +0 -0
  165. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/docs/howto/load-extension.md +0 -0
  166. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/docs/howto/parse-files-into-columns.md +0 -0
  167. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/docs/howto/persist.md +0 -0
  168. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/docs/howto/query-json.md +0 -0
  169. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/docs/howto/query-without-config.md +0 -0
  170. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/docs/howto/react-to-changes.md +0 -0
  171. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/docs/howto/search-by-meaning.md +0 -0
  172. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/docs/howto/search-indexes.md +0 -0
  173. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/docs/howto/skip-files.md +0 -0
  174. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/docs/howto/write-a-plugin.md +0 -0
  175. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/docs/index.md +0 -0
  176. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/docs/package.json +0 -0
  177. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/docs/plugins.md +0 -0
  178. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/docs/pnpm-lock.yaml +0 -0
  179. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/docs/pnpm-workspace.yaml +0 -0
  180. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/docs/reference/cli.md +0 -0
  181. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/docs/reference/columns.md +0 -0
  182. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/docs/reference/glob.md +0 -0
  183. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/docs/reference/hooks.md +0 -0
  184. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/docs/reference/http-api.md +0 -0
  185. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/docs/reference/path-tables.md +0 -0
  186. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/docs/speed.json +0 -0
  187. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/docs/speed.md +0 -0
  188. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/bot-1334-listing-exemptions.json +0 -0
  189. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/bot-1397-watch-broadcast.json +0 -0
  190. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/bot-1398-inotify-error.json +0 -0
  191. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/bot-1399-server-cors.json +0 -0
  192. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/bot-1401-watch-scope.json +0 -0
  193. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/bot-1406-watch-no-tables-1008.json +0 -0
  194. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/bot-1407-child-place-depth.json +0 -0
  195. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/bot-1414-stat-speed.json +0 -0
  196. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/bot-1415-server-speed.json +0 -0
  197. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/bot-1416-watch-speed-1008.json +0 -0
  198. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/bot-1418-node-modules.json +0 -0
  199. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/bot-1419-dotdot-slashes.json +0 -0
  200. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/bot-1420-bracket-slash.json +0 -0
  201. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/bot-1421-posix-unicode.json +0 -0
  202. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/bot-1422-literal-gitignore.json +0 -0
  203. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/bot-1426-walk-spawn-threshold-1008.json +0 -0
  204. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/bot-1428-ndjson-hooks.json +0 -0
  205. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/bot-1429-parallel-hooks.json +0 -0
  206. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/bot-1430-dotdot-as-written.json +0 -0
  207. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/bot-1431-persist-cache-dir.json +0 -0
  208. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/bot-1437-test-cache-isolation.json +0 -0
  209. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/bot-1440-fix-main-build.json +0 -0
  210. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/bot-1448-wildcard-ignored-prefix.json +0 -0
  211. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/bot-1451-named-dir-never-hidden.json +0 -0
  212. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/bot-1454-split-few-files.json +0 -0
  213. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/bot-1457-incremental-refresh-1008.json +0 -0
  214. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/bot-1459-rescan-on-overflow-1008.json +0 -0
  215. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/bot-1461-chunked-read-1016.json +0 -0
  216. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/bot-1461-row-footprint-1008.json +0 -0
  217. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/bot-1461-wide-read-1015.json +0 -0
  218. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/bot-1462-paired-speed-harness-1008.json +0 -0
  219. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/bot-1464-fastest-native-1008.json +0 -0
  220. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/bot-1469-ci-speed-sanity-1009.json +0 -0
  221. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/bot-1470-perf-suite-1009.json +0 -0
  222. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/bot-1470-speed-page-1011.json +0 -0
  223. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/bot-1474-vtab-speed-1014.json +0 -0
  224. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/bot-1475-rowpath-1016.json +0 -0
  225. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/bot-1477-onelevel-speed-1015.json +0 -0
  226. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/bot-1477-onelevel-speed-1016.json +0 -0
  227. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/bot-1478-perdir-walk-1020.json +0 -0
  228. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/bot-1480-matcher-speed-1015.json +0 -0
  229. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/bot-1481-gitrepo-speed-1015.json +0 -0
  230. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/bot-1483-fm-speed-1015.json +0 -0
  231. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/bot-1484-jsonl-speed-1015.json +0 -0
  232. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/bot-1487-frontend-query-1011.json +0 -0
  233. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/bot-1488-frontend-metadata-1011.json +0 -0
  234. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/bot-1489-frontend-browse-1013.json +0 -0
  235. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/bot-1503-bench-watch-1011.json +0 -0
  236. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/bot-1504-bench-names-1011.json +0 -0
  237. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/bot-1514-watch-rerun-inline-1015.json +0 -0
  238. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/bot-1524-path-eq-1016.json +0 -0
  239. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/bot-1526-main-red-1016.json +0 -0
  240. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/bot-1532-gitignore-fastest-bar-1016.json +0 -0
  241. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/bot-1534-fm-native-1016.json +0 -0
  242. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/bot-1538-onfile-order-1019.json +0 -0
  243. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/bot-1540-update-in-place-1019.json +0 -0
  244. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/bot-1541-defer-fk-1019.json +0 -0
  245. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/bot-fix-main-place-depth-20261007.json +0 -0
  246. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/bot-issue-1486-frontend-20261009.json +0 -0
  247. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/bot-speed-gap-childpath-1011.json +0 -0
  248. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/bot-speed-parse-overlap-1011.json +0 -0
  249. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/bot-speed-parse-paths-1009.json +0 -0
  250. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/bot-speed-parse-pragmas-1011.json +0 -0
  251. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/bot-speed-sql-valueref-1013.json +0 -0
  252. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/bot-speed-walk-components-1011.json +0 -0
  253. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/bot-speed-walk-rowpath-1011.json +0 -0
  254. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/bot-speed-walk-rows-1013.json +0 -0
  255. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/bot-speed-walk-sched-1009.json +0 -0
  256. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/cc-keen-knuth-f11gyq.json +0 -0
  257. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/claude-1056-py-ofpf9.json +0 -0
  258. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/claude-1066-p1-resolve-extension.json +0 -0
  259. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/claude-1078-argv-config-paths-core.json +0 -0
  260. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/claude-1079-p2-resolve-config-extensions.json +0 -0
  261. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/claude-1080-share-vtab-scaffolding.json +0 -0
  262. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/claude-1081-indicatif-progress.json +0 -0
  263. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/claude-1096-watch-moved-dir.json +0 -0
  264. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/claude-1109-watch-moved-out.json +0 -0
  265. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/claude-1119-ext-plan.json +0 -0
  266. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/claude-1120-py-ext.json +0 -0
  267. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/claude-1122-ext-cleanup.json +0 -0
  268. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/claude-1130-codec-crates.json +0 -0
  269. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/claude-1131-flatten-row-event.json +0 -0
  270. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/claude-1139-sse-flatten.json +0 -0
  271. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/claude-1140-scan-failure-export.json +0 -0
  272. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/claude-1148-clippy-all-targets.json +0 -0
  273. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/claude-1164-sigint-fatal.json +0 -0
  274. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/claude-1170-projection-order.json +0 -0
  275. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/claude-1172-on-file-path.json +0 -0
  276. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/claude-1173-py-projection-order.json +0 -0
  277. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/claude-1184-win-rel-paths.json +0 -0
  278. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/claude-1185-win-abs-table-names.json +0 -0
  279. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/claude-1186-win-test-harness.json +0 -0
  280. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/claude-1196-join-index.json +0 -0
  281. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/claude-1199-glob-prefix.json +0 -0
  282. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/claude-1201-single-walk.json +0 -0
  283. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/claude-1204-embed-batch.json +0 -0
  284. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/claude-1207-win-argv-quote.json +0 -0
  285. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/claude-1208-win-nonverbatim-paths.json +0 -0
  286. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/claude-1215-on-file-batch.json +0 -0
  287. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/claude-1216-on-file-cleanup.json +0 -0
  288. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/claude-1223-config-glob-rule.json +0 -0
  289. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/claude-1223-dir-one-level.json +0 -0
  290. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/claude-1225-plugin-no-default.json +0 -0
  291. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/claude-1226-stale-docs.json +0 -0
  292. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/claude-1232-anchor-plumbing.json +0 -0
  293. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/claude-1232-config-anchor.json +0 -0
  294. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/claude-1232-multi-watch.json +0 -0
  295. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/claude-1232-zero-match.json +0 -0
  296. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/claude-1238-parallel-walk.json +0 -0
  297. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/claude-1241-content-prefetch.json +0 -0
  298. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/claude-1243-ingest-perf.json +0 -0
  299. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/claude-1249-dotfiles.json +0 -0
  300. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/claude-1256-symlinks.json +0 -0
  301. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/claude-1257-trailing-slash.json +0 -0
  302. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/claude-1258-config-braces.json +0 -0
  303. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/claude-1258-config-directory.json +0 -0
  304. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/claude-1258-config-dotnames.json +0 -0
  305. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/claude-1258-config-gitignore.json +0 -0
  306. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/claude-1258-config-links.json +0 -0
  307. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/claude-1258-one-pattern.json +0 -0
  308. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/claude-1262-brace-literal.json +0 -0
  309. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/claude-1264-context.json +0 -0
  310. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/claude-1267-posix-classes.json +0 -0
  311. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/claude-1268-unbalanced-brackets.json +0 -0
  312. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/claude-1269-utf8-chars.json +0 -0
  313. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/claude-1271-node-modules-named.json +0 -0
  314. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/claude-1272-ancestor-gitignore.json +0 -0
  315. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/claude-1273-walk-prune.json +0 -0
  316. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/claude-1285-ingest-fast.json +0 -0
  317. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/claude-1286-nested-repo.json +0 -0
  318. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/claude-1305-glob-speed.json +0 -0
  319. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/claude-1308-glob-speed.json +0 -0
  320. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/claude-1310-glob-speed.json +0 -0
  321. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/claude-1311-glob-speed.json +0 -0
  322. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/claude-1312-glob-speed.json +0 -0
  323. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/claude-1318-lazy-stat.json +0 -0
  324. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/claude-1320-walk-speed.json +0 -0
  325. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/claude-1322-walk-readdir.json +0 -0
  326. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/claude-1325-parallel-walk.json +0 -0
  327. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/claude-1326-stream-rows.json +0 -0
  328. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/claude-1330-python-dirsql-patch.json +0 -0
  329. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/claude-1330-python-extensions-patch.json +0 -0
  330. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/claude-1330-scanner-effects.json +0 -0
  331. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/claude-1330-scanner-gitignore.json +0 -0
  332. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/claude-1330-vtab-prefetch-flag.json +0 -0
  333. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/claude-1330-vtab-read.json +0 -0
  334. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/claude-1351-dot-dirs.json +0 -0
  335. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/claude-819-oneshot-timeout.json +0 -0
  336. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/claude-827-unquote-doubled-quotes.json +0 -0
  337. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/claude-epic-953-slice2-reedline.json +0 -0
  338. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/claude-epic-953-slice3-format.json +0 -0
  339. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/claude-epic-953-stacked-prs-x59wm3.json +0 -0
  340. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/claude-github-issue-825-e4mhhp.json +0 -0
  341. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/claude-issue-951-0eease.json +0 -0
  342. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/claude-issue-962-0jjrfv.json +0 -0
  343. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/claude-issue-986-red-test-e7sjrb.json +0 -0
  344. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/claude-tackle-1034-cachesplit.json +0 -0
  345. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/claude-tackle-1042-py12.json +0 -0
  346. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/claude-tackle-956-xzen74.json +0 -0
  347. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/claude-tackle-957-lrm0z6-worker-calls.json +0 -0
  348. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/claude-tackle-957-lrm0z6.json +0 -0
  349. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/e2e-attestations/claude-tackle-975-n8mc2h.json +0 -0
  350. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/migrations.d/2026-07-13-drop-cwd-config-auto-detect.md +0 -0
  351. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/migrations.d/2026-07-13-rename-extract-to-on-file.md +0 -0
  352. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/migrations.d/2026-07-13-sdk-default-baked-in-config.md +0 -0
  353. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/migrations.d/2026-07-20-drop-implicit-files-table.md +0 -0
  354. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/migrations.d/2026-07-21-remove-glob-captures.md +0 -0
  355. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/migrations.d/2026-07-24-hookless-table-config-error.md +0 -0
  356. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/migrations.d/2026-07-24-remove-stat-fact-injection.md +0 -0
  357. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/migrations.d/2026-07-29-restore-python-310.md +0 -0
  358. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/migrations.d/2026-08-04-cli-in-process.md +0 -0
  359. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/migrations.d/2026-08-20-declared-table-name.md +0 -0
  360. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/migrations.d/2026-09-20-sigint-ends-a-run-in-progress.md +0 -0
  361. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/migrations.d/2026-09-24-query-rows-in-projection-order.md +0 -0
  362. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/migrations.d/2026-10-02-readme-docs-host.md +0 -0
  363. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/migrations.d/2026-10-03-one-glob-rule-for-config-globs.md +0 -0
  364. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/migrations.d/2026-10-03-path-table-directory-one-level.md +0 -0
  365. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/migrations.d/2026-10-04-path-table-dotfiles-hidden.md +0 -0
  366. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/migrations.d/2026-10-05-brace-groups-follow-bash.md +0 -0
  367. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/migrations.d/2026-10-05-cli-context.md +0 -0
  368. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/migrations.d/2026-10-05-gitignore-requires-repo.md +0 -0
  369. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/migrations.d/2026-10-05-path-table-node-modules-named.md +0 -0
  370. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/migrations.d/2026-10-05-path-table-symlinks.md +0 -0
  371. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/migrations.d/2026-10-05-path-table-trailing-slash.md +0 -0
  372. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/migrations.d/2026-10-05-unbalanced-brackets-literal.md +0 -0
  373. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/migrations.d/2026-10-06-config-braces.md +0 -0
  374. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/migrations.d/2026-10-06-config-directory.md +0 -0
  375. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/migrations.d/2026-10-06-config-dotnames.md +0 -0
  376. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/migrations.d/2026-10-06-config-gitignore.md +0 -0
  377. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/migrations.d/2026-10-06-config-globs-anchor-at-the-config.md +0 -0
  378. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/migrations.d/2026-10-06-config-links.md +0 -0
  379. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/migrations.d/2026-10-06-one-glob-compiler.md +0 -0
  380. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/migrations.d/2026-10-06-plugin-no-default-records.md +0 -0
  381. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/migrations.d/2026-10-06-watch-broadcast.md +0 -0
  382. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/migrations.d/2026-10-06-zero-match-config-table-warning.md +0 -0
  383. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/migrations.d/2026-10-07-bracket-slash-literal.md +0 -0
  384. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/migrations.d/2026-10-07-dotdot-and-double-slashes.md +0 -0
  385. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/migrations.d/2026-10-07-dotdot-as-written.md +0 -0
  386. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/migrations.d/2026-10-07-glob-walks-node-modules.md +0 -0
  387. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/migrations.d/2026-10-07-literal-gitignore.md +0 -0
  388. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/migrations.d/2026-10-07-on-file-ndjson.md +0 -0
  389. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/migrations.d/2026-10-07-parallel-hooks.md +0 -0
  390. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/migrations.d/2026-10-07-persist-cache-outside-root.md +0 -0
  391. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/migrations.d/2026-10-07-posix-classes-unicode.md +0 -0
  392. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/migrations.d/2026-10-07-spread-few-large-files.md +0 -0
  393. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/migrations.d/2026-10-08-small-walks-stay-on-one-thread.md +0 -0
  394. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/migrations.d/2026-10-08-watch-requires-named-table.md +0 -0
  395. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/migrations.d/README.md +0 -0
  396. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/src/lib.rs +0 -0
  397. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/testing-conventions.toml +0 -0
  398. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/tests/__init__.py +0 -0
  399. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/tests/conftest.py +0 -0
  400. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/tests/e2e/__init__.py +0 -0
  401. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/tests/e2e/bench_report.py +0 -0
  402. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/tests/e2e/bench_suite.py +0 -0
  403. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/tests/e2e/fixtures/dirsql_plugin_fixture/__init__.py +0 -0
  404. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/tests/e2e/fixtures/dirsql_plugin_fixture/dirsql.toml +0 -0
  405. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/tests/e2e/speed_of_light.py +0 -0
  406. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/tests/integration/__init__.py +0 -0
  407. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/tests/integration/binding/__init__.py +0 -0
  408. {dirsql-0.4.120 → dirsql-0.4.122}/packages/python/tests/integration/hermetic/__init__.py +0 -0
  409. {dirsql-0.4.120 → dirsql-0.4.122}/packages/rust/CHANGELOG.md +0 -0
  410. {dirsql-0.4.120 → dirsql-0.4.122}/packages/rust/MIGRATIONS.md +0 -0
  411. {dirsql-0.4.120 → dirsql-0.4.122}/packages/rust/README.md +0 -0
  412. {dirsql-0.4.120 → dirsql-0.4.122}/packages/rust/benches/db_bench.rs +0 -0
  413. {dirsql-0.4.120 → dirsql-0.4.122}/packages/rust/benches/differ_bench.rs +0 -0
  414. {dirsql-0.4.120 → dirsql-0.4.122}/packages/rust/benches/matcher_bench.rs +0 -0
  415. {dirsql-0.4.120 → dirsql-0.4.122}/packages/rust/benches/scanner_bench.rs +0 -0
  416. {dirsql-0.4.120 → dirsql-0.4.122}/packages/rust/docs/context/.gitattributes +0 -0
  417. {dirsql-0.4.120 → dirsql-0.4.122}/packages/rust/docs/context/recipes.md +0 -0
  418. {dirsql-0.4.120 → dirsql-0.4.122}/packages/rust/docs/context/troubleshooting.md +0 -0
  419. {dirsql-0.4.120 → dirsql-0.4.122}/packages/rust/docs/context/usage.md +0 -0
  420. {dirsql-0.4.120 → dirsql-0.4.122}/packages/rust/docs/explanation.md +0 -0
  421. {dirsql-0.4.120 → dirsql-0.4.122}/packages/rust/docs/getting-started.md +0 -0
  422. {dirsql-0.4.120 → dirsql-0.4.122}/packages/rust/docs/howto/agent-skill.md +0 -0
  423. {dirsql-0.4.120 → dirsql-0.4.122}/packages/rust/docs/howto/columns-from-paths.md +0 -0
  424. {dirsql-0.4.120 → dirsql-0.4.122}/packages/rust/docs/howto/define-tables.md +0 -0
  425. {dirsql-0.4.120 → dirsql-0.4.122}/packages/rust/docs/howto/embed.md +0 -0
  426. {dirsql-0.4.120 → dirsql-0.4.122}/packages/rust/docs/howto/extract-from-contents.md +0 -0
  427. {dirsql-0.4.120 → dirsql-0.4.122}/packages/rust/docs/howto/load-extension.md +0 -0
  428. {dirsql-0.4.120 → dirsql-0.4.122}/packages/rust/docs/howto/parse-files-into-columns.md +0 -0
  429. {dirsql-0.4.120 → dirsql-0.4.122}/packages/rust/docs/howto/persist.md +0 -0
  430. {dirsql-0.4.120 → dirsql-0.4.122}/packages/rust/docs/howto/query-json.md +0 -0
  431. {dirsql-0.4.120 → dirsql-0.4.122}/packages/rust/docs/howto/query-without-config.md +0 -0
  432. {dirsql-0.4.120 → dirsql-0.4.122}/packages/rust/docs/howto/react-to-changes.md +0 -0
  433. {dirsql-0.4.120 → dirsql-0.4.122}/packages/rust/docs/howto/search-by-meaning.md +0 -0
  434. {dirsql-0.4.120 → dirsql-0.4.122}/packages/rust/docs/howto/search-indexes.md +0 -0
  435. {dirsql-0.4.120 → dirsql-0.4.122}/packages/rust/docs/howto/skip-files.md +0 -0
  436. {dirsql-0.4.120 → dirsql-0.4.122}/packages/rust/docs/howto/write-a-plugin.md +0 -0
  437. {dirsql-0.4.120 → dirsql-0.4.122}/packages/rust/docs/index.md +0 -0
  438. {dirsql-0.4.120 → dirsql-0.4.122}/packages/rust/docs/plugins.md +0 -0
  439. {dirsql-0.4.120 → dirsql-0.4.122}/packages/rust/docs/reference/cli.md +0 -0
  440. {dirsql-0.4.120 → dirsql-0.4.122}/packages/rust/docs/reference/columns.md +0 -0
  441. {dirsql-0.4.120 → dirsql-0.4.122}/packages/rust/docs/reference/glob.md +0 -0
  442. {dirsql-0.4.120 → dirsql-0.4.122}/packages/rust/docs/reference/hooks.md +0 -0
  443. {dirsql-0.4.120 → dirsql-0.4.122}/packages/rust/docs/reference/http-api.md +0 -0
  444. {dirsql-0.4.120 → dirsql-0.4.122}/packages/rust/docs/reference/path-tables.md +0 -0
  445. {dirsql-0.4.120 → dirsql-0.4.122}/packages/rust/docs/speed.json +0 -0
  446. {dirsql-0.4.120 → dirsql-0.4.122}/packages/rust/docs/speed.md +0 -0
  447. {dirsql-0.4.120 → dirsql-0.4.122}/packages/rust/src/bin/dirsql.rs +0 -0
  448. {dirsql-0.4.120 → dirsql-0.4.122}/packages/rust/src/brace.rs +0 -0
  449. {dirsql-0.4.120 → dirsql-0.4.122}/packages/rust/src/cli/context.rs +0 -0
  450. {dirsql-0.4.120 → dirsql-0.4.122}/packages/rust/src/cli/execute.rs +0 -0
  451. {dirsql-0.4.120 → dirsql-0.4.122}/packages/rust/src/cli/frontend.html +0 -0
  452. {dirsql-0.4.120 → dirsql-0.4.122}/packages/rust/src/cli/frontend.js +0 -0
  453. {dirsql-0.4.120 → dirsql-0.4.122}/packages/rust/src/cli/init.rs +0 -0
  454. {dirsql-0.4.120 → dirsql-0.4.122}/packages/rust/src/cli/mod.rs +0 -0
  455. {dirsql-0.4.120 → dirsql-0.4.122}/packages/rust/src/cli/repl.rs +0 -0
  456. {dirsql-0.4.120 → dirsql-0.4.122}/packages/rust/src/cli/router.rs +0 -0
  457. {dirsql-0.4.120 → dirsql-0.4.122}/packages/rust/src/cli/run.rs +0 -0
  458. {dirsql-0.4.120 → dirsql-0.4.122}/packages/rust/src/cli/serialize.rs +0 -0
  459. {dirsql-0.4.120 → dirsql-0.4.122}/packages/rust/src/cli/server.rs +0 -0
  460. {dirsql-0.4.120 → dirsql-0.4.122}/packages/rust/src/cli/table.rs +0 -0
  461. {dirsql-0.4.120 → dirsql-0.4.122}/packages/rust/src/command.rs +0 -0
  462. {dirsql-0.4.120 → dirsql-0.4.122}/packages/rust/src/config.rs +0 -0
  463. {dirsql-0.4.120 → dirsql-0.4.122}/packages/rust/src/default_config.toml +0 -0
  464. {dirsql-0.4.120 → dirsql-0.4.122}/packages/rust/src/differ.rs +0 -0
  465. {dirsql-0.4.120 → dirsql-0.4.122}/packages/rust/src/extension_resolution.rs +0 -0
  466. {dirsql-0.4.120 → dirsql-0.4.122}/packages/rust/src/foreign_key.rs +0 -0
  467. {dirsql-0.4.120 → dirsql-0.4.122}/packages/rust/src/functions.rs +0 -0
  468. {dirsql-0.4.120 → dirsql-0.4.122}/packages/rust/src/gitignore_frame.rs +0 -0
  469. {dirsql-0.4.120 → dirsql-0.4.122}/packages/rust/src/infer.rs +0 -0
  470. {dirsql-0.4.120 → dirsql-0.4.122}/packages/rust/src/launcher.rs +0 -0
  471. {dirsql-0.4.120 → dirsql-0.4.122}/packages/rust/src/matcher.rs +0 -0
  472. {dirsql-0.4.120 → dirsql-0.4.122}/packages/rust/src/on_file.rs +0 -0
  473. {dirsql-0.4.120 → dirsql-0.4.122}/packages/rust/src/parsed_vtab.rs +0 -0
  474. {dirsql-0.4.120 → dirsql-0.4.122}/packages/rust/src/path_table.rs +0 -0
  475. {dirsql-0.4.120 → dirsql-0.4.122}/packages/rust/src/per_thread.rs +0 -0
  476. {dirsql-0.4.120 → dirsql-0.4.122}/packages/rust/src/persist.rs +0 -0
  477. {dirsql-0.4.120 → dirsql-0.4.122}/packages/rust/src/posix_class.rs +0 -0
  478. {dirsql-0.4.120 → dirsql-0.4.122}/packages/rust/src/progress.rs +0 -0
  479. {dirsql-0.4.120 → dirsql-0.4.122}/packages/rust/src/row_event_flat.rs +0 -0
  480. {dirsql-0.4.120 → dirsql-0.4.122}/packages/rust/src/row_stream.rs +0 -0
  481. {dirsql-0.4.120 → dirsql-0.4.122}/packages/rust/src/scanner.rs +0 -0
  482. {dirsql-0.4.120 → dirsql-0.4.122}/packages/rust/src/sql_literal.rs +0 -0
  483. {dirsql-0.4.120 → dirsql-0.4.122}/packages/rust/src/tree_walk.rs +0 -0
  484. {dirsql-0.4.120 → dirsql-0.4.122}/packages/rust/src/vtab.rs +0 -0
  485. {dirsql-0.4.120 → dirsql-0.4.122}/packages/rust/src/vtab_scaffold.rs +0 -0
  486. {dirsql-0.4.120 → dirsql-0.4.122}/pyproject.toml +0 -0
@@ -573,7 +573,7 @@ dependencies = [
573
573
 
574
574
  [[package]]
575
575
  name = "dirsql"
576
- version = "0.4.120"
576
+ version = "0.4.122"
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.120"
628
+ version = "0.4.122"
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.120
3
+ Version: 0.4.122
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
@@ -1,6 +1,7 @@
1
1
  """Async-by-default DirSQL wrapper."""
2
2
 
3
3
  import asyncio
4
+ import contextlib
4
5
  import os
5
6
  import weakref
6
7
 
@@ -129,11 +130,20 @@ class DirSQL:
129
130
  """Run the scan in the background."""
130
131
  try:
131
132
  self._db = await asyncio.to_thread(self._build_db)
133
+ if self._watch_streams:
134
+ await asyncio.to_thread(self._start_watcher_quietly, self._db)
132
135
  except Exception as exc:
133
136
  self._init_error = exc
134
137
  finally:
135
138
  self._ready_event.set()
136
139
 
140
+ @staticmethod
141
+ def _start_watcher_quietly(db):
142
+ # A watcher that cannot start is the stream's error, not init's: the
143
+ # stream's first iteration retries the start and raises it there.
144
+ with contextlib.suppress(Exception):
145
+ db._start_watcher()
146
+
137
147
  def _build_db(self):
138
148
  """Resolve extensions and construct the Rust-backed instance.
139
149
 
@@ -229,14 +239,22 @@ class DirSQL:
229
239
  def watch(self):
230
240
  """Start watching for file changes. Returns an async iterable of RowEvent.
231
241
 
232
- Like :meth:`query`, the returned stream awaits :meth:`ready` on its
233
- first iteration before starting the watcher, so calling ``watch``
234
- before an explicit ``await db.ready()`` waits for the background scan
235
- (and surfaces any initialization error) instead of failing on a
236
- still-``None`` ``_db``.
242
+ The watcher is live once both ``watch()`` and :meth:`ready` have
243
+ returned, in either order: a file written after that point produces
244
+ an event and reaches the index. Called after the scan, ``watch()``
245
+ starts the watcher before returning; called before it, the watcher
246
+ starts before :meth:`ready` resolves. Writes made while the scan is
247
+ still running may be missed.
248
+
249
+ The returned stream awaits :meth:`ready` on its first iteration, so
250
+ iterating before an explicit ``await db.ready()`` waits for the
251
+ background scan and surfaces any initialization error.
237
252
 
238
253
  Each call returns an independent stream, and every stream receives
239
254
  every event observed after it was created, so several consumers
240
255
  (one per client, say) can share one instance.
241
256
  """
242
- return _WatchStream(self)
257
+ stream = _WatchStream(self)
258
+ if self._db is not None:
259
+ self._db._start_watcher()
260
+ return stream
@@ -374,9 +374,12 @@ foreign key violation: `task` row from `projects/beta/tasks/t1.json` has project
374
374
  batch that touches the same table carries the orphaning change and waits
375
375
  too.
376
376
 
377
- `ON DELETE` and `ON UPDATE` actions are not deferred. `dirsql` applies a changed
378
- file as a delete and an insert, so `ON DELETE CASCADE` deletes the children of a
379
- parent whose file is edited or renamed, even though their files still exist.
377
+ `ON DELETE` and `ON UPDATE` actions are not deferred. A parent table with a
378
+ `PRIMARY KEY`, or a `UNIQUE` column its rows fill, has an edited row `UPDATE`d
379
+ in place, so its children stay. A table without one has a changed row deleted
380
+ and inserted, so `ON DELETE CASCADE` deletes the children of a parent whose
381
+ file is edited. A row whose key changes, as when the key is taken from a
382
+ renamed file's name, is a delete and an insert either way.
380
383
 
381
384
  ### `on-file` row mapping
382
385
 
@@ -297,9 +297,14 @@ while let Some(event) = stream.next().await { ... }
297
297
  :::
298
298
 
299
299
  Returns a stream of [`RowEvent`](#rowevent)s reflecting filesystem changes
300
- under the root. The watcher starts on first iteration (Python/TypeScript)
301
- or at the `watch()` call (Rust). The stream never terminates on its own;
302
- stop consuming it to stop.
300
+ under the root. The stream never terminates on its own; stop consuming it
301
+ to stop.
302
+
303
+ A file written once the watcher is live produces an event and reaches the
304
+ index. Rust: the watcher is live when `watch()` returns. Python: it is live
305
+ once both `watch()` and `ready()` have returned, in either order; a write made
306
+ while the initial scan is still running may be missed. TypeScript: the watcher
307
+ starts on first iteration.
303
308
 
304
309
  An instance with no named tables cannot be watched: path-tables emit no
305
310
  watch events, so `watch()` (and the polling primitives) raise an error naming
@@ -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.120"
7
+ version = "0.4.122"
8
8
  # abi3 note: the `abi3-py310` pyo3 feature (below) builds ONE stable-ABI
9
9
  # `cp310-abi3` wheel per platform that loads on every CPython >= 3.10
10
10
  # (matching `pyproject.toml`'s `requires-python = ">=3.10"`), instead of
@@ -0,0 +1 @@
1
+ **Fixed** On Linux, a directory created inside a new directory before the watcher registered that new directory is now watched too. Before, files written into it later produced no events.
@@ -0,0 +1 @@
1
+ **Fixed** `watch()` now starts the watcher before it returns (or, when called before the initial scan finishes, before `ready()` resolves). A file written right after `watch()` previously produced no event and never reached the index, because the watcher only started on the stream's first iteration.
@@ -374,9 +374,12 @@ foreign key violation: `task` row from `projects/beta/tasks/t1.json` has project
374
374
  batch that touches the same table carries the orphaning change and waits
375
375
  too.
376
376
 
377
- `ON DELETE` and `ON UPDATE` actions are not deferred. `dirsql` applies a changed
378
- file as a delete and an insert, so `ON DELETE CASCADE` deletes the children of a
379
- parent whose file is edited or renamed, even though their files still exist.
377
+ `ON DELETE` and `ON UPDATE` actions are not deferred. A parent table with a
378
+ `PRIMARY KEY`, or a `UNIQUE` column its rows fill, has an edited row `UPDATE`d
379
+ in place, so its children stay. A table without one has a changed row deleted
380
+ and inserted, so `ON DELETE CASCADE` deletes the children of a parent whose
381
+ file is edited. A row whose key changes, as when the key is taken from a
382
+ renamed file's name, is a delete and an insert either way.
380
383
 
381
384
  ### `on-file` row mapping
382
385
 
@@ -297,9 +297,14 @@ while let Some(event) = stream.next().await { ... }
297
297
  :::
298
298
 
299
299
  Returns a stream of [`RowEvent`](#rowevent)s reflecting filesystem changes
300
- under the root. The watcher starts on first iteration (Python/TypeScript)
301
- or at the `watch()` call (Rust). The stream never terminates on its own;
302
- stop consuming it to stop.
300
+ under the root. The stream never terminates on its own; stop consuming it
301
+ to stop.
302
+
303
+ A file written once the watcher is live produces an event and reaches the
304
+ index. Rust: the watcher is live when `watch()` returns. Python: it is live
305
+ once both `watch()` and `ready()` have returned, in either order; a write made
306
+ while the initial scan is still running may be missed. TypeScript: the watcher
307
+ starts on first iteration.
303
308
 
304
309
  An instance with no named tables cannot be watched: path-tables emit no
305
310
  watch events, so `watch()` (and the polling primitives) raise an error naming
@@ -0,0 +1,7 @@
1
+ {
2
+ "command": "uv run python -m pytest tests/e2e/glob_speed_one_level_test.py tests/e2e/glob_speed_recursive_test.py tests/e2e/glob_speed_dotfiles_test.py tests/e2e/glob_speed_gitignore_test.py tests/e2e/glob_speed_node_modules_test.py tests/e2e/query_contract_test.py -x -q",
3
+ "ran_at": 1792499219,
4
+ "exit_code": 0,
5
+ "commit": "f0b743744d6e038ad678de855df59c843e109ad1",
6
+ "branch": "bot/1461-step3-1020"
7
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "command": "uv run --no-sync python -m pytest tests/e2e/watch_speed_test.py tests/e2e/on_file_query_test.py tests/e2e/fanout_test.py -q -p no:cacheprovider",
3
+ "ran_at": 1792496178,
4
+ "exit_code": 0,
5
+ "commit": "f4fd6d6b79a97b877a175884e377004b7ff144f2",
6
+ "branch": "bot/1544-perfile-update-1020"
7
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "command": "uv run python -m pytest tests/e2e/extension_package_test.py tests/e2e/plugin_discovery_test.py tests/e2e/plugin_extension_discovery_test.py tests/e2e/on_file_query_test.py tests/e2e/fanout_test.py tests/e2e/query_contract_test.py -x -q",
3
+ "ran_at": 1793651115,
4
+ "exit_code": 0,
5
+ "commit": "91c319050e0960f87324c774ed7593895947fb35",
6
+ "branch": "bot/1552-watch-gap-1102"
7
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "command": "uv run python -m pytest tests/e2e/watch_speed_test.py tests/e2e/jsonl_parse_speed_test.py tests/e2e/on_file_query_test.py tests/e2e/fanout_test.py -q",
3
+ "ran_at": 1793653639,
4
+ "exit_code": 0,
5
+ "commit": "90967ba7a324453df04aa604126a0d4c004ea887",
6
+ "branch": "bot/1557-watch-rename-1102"
7
+ }
@@ -0,0 +1,29 @@
1
+ ### Directories created mid-registration are watched
2
+
3
+ #### Summary
4
+
5
+ On Linux, the watcher walks a new directory again after watching it, until a walk finds nothing new, so a subdirectory created in between is watched too. Nothing breaks.
6
+
7
+ #### Required changes
8
+
9
+ _None._
10
+
11
+ #### Deprecations removed
12
+
13
+ _None._
14
+
15
+ #### Behavior changes without code changes
16
+
17
+ Files written into a directory created in a burst of nested `mkdir`s now produce events where some were missed before.
18
+
19
+ #### Verification
20
+
21
+ ```bash
22
+ dirsql init
23
+ dirsql server -c .dirsql.toml &
24
+ curl -sN http://localhost:7117/events &
25
+ mkdir -p a/b/c/d/e/f/g
26
+ echo '{"id":"1","name":"x"}' > a/b/c/d/e/f/g/r.json
27
+ ```
28
+
29
+ Prints an insert for `a/b/c/d/e/f/g/r.json`.
@@ -0,0 +1,21 @@
1
+ ### `watch()` starts the watcher before it returns
2
+
3
+ #### Summary
4
+
5
+ The Python `watch()` now starts the native watcher before it returns; called before the initial scan finishes, it starts the watcher before `ready()` resolves. A file written after both `watch()` and `ready()` have returned produces an event and reaches the index. Nothing breaks.
6
+
7
+ #### Required changes
8
+
9
+ _None._
10
+
11
+ #### Deprecations removed
12
+
13
+ _None._
14
+
15
+ #### Behavior changes without code changes
16
+
17
+ On an instance with no named tables, `watch()` called after `ready()` raises immediately instead of on the stream's first iteration. A sleep between `watch()` and the first write is no longer needed.
18
+
19
+ #### Verification
20
+
21
+ `await db.ready(); stream = db.watch()`, write a matching file, then `await anext(stream)`: expect an `insert` event, and `await db.query(...)` returns the row.
@@ -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.120"
9
+ version = "0.4.122"
10
10
  edition.workspace = true
11
11
  # Literal `license` (not `license.workspace = true`) because
12
12
  # putitoutthere's preflight check reads `[package].license` directly
@@ -374,9 +374,12 @@ foreign key violation: `task` row from `projects/beta/tasks/t1.json` has project
374
374
  batch that touches the same table carries the orphaning change and waits
375
375
  too.
376
376
 
377
- `ON DELETE` and `ON UPDATE` actions are not deferred. `dirsql` applies a changed
378
- file as a delete and an insert, so `ON DELETE CASCADE` deletes the children of a
379
- parent whose file is edited or renamed, even though their files still exist.
377
+ `ON DELETE` and `ON UPDATE` actions are not deferred. A parent table with a
378
+ `PRIMARY KEY`, or a `UNIQUE` column its rows fill, has an edited row `UPDATE`d
379
+ in place, so its children stay. A table without one has a changed row deleted
380
+ and inserted, so `ON DELETE CASCADE` deletes the children of a parent whose
381
+ file is edited. A row whose key changes, as when the key is taken from a
382
+ renamed file's name, is a delete and an insert either way.
380
383
 
381
384
  ### `on-file` row mapping
382
385
 
@@ -297,9 +297,14 @@ while let Some(event) = stream.next().await { ... }
297
297
  :::
298
298
 
299
299
  Returns a stream of [`RowEvent`](#rowevent)s reflecting filesystem changes
300
- under the root. The watcher starts on first iteration (Python/TypeScript)
301
- or at the `watch()` call (Rust). The stream never terminates on its own;
302
- stop consuming it to stop.
300
+ under the root. The stream never terminates on its own; stop consuming it
301
+ to stop.
302
+
303
+ A file written once the watcher is live produces an event and reaches the
304
+ index. Rust: the watcher is live when `watch()` returns. Python: it is live
305
+ once both `watch()` and `ready()` have returned, in either order; a write made
306
+ while the initial scan is still running may be missed. TypeScript: the watcher
307
+ starts on first iteration.
303
308
 
304
309
  An instance with no named tables cannot be watched: path-tables emit no
305
310
  watch events, so `watch()` (and the polling primitives) raise an error naming