dirsql 0.4.109__tar.gz → 0.4.111__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.
- {dirsql-0.4.109 → dirsql-0.4.111}/Cargo.lock +2 -2
- {dirsql-0.4.109 → dirsql-0.4.111}/PKG-INFO +1 -1
- {dirsql-0.4.109 → dirsql-0.4.111}/docs/reference/cli.md +17 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/Cargo.toml +1 -1
- {dirsql-0.4.109/packages/rust → dirsql-0.4.111/packages/python}/docs/reference/cli.md +17 -0
- dirsql-0.4.111/packages/python/e2e-attestations/bot-1464-fastest-native-1008.json +7 -0
- dirsql-0.4.111/packages/python/e2e-attestations/bot-1469-ci-speed-sanity-1009.json +7 -0
- dirsql-0.4.111/packages/python/e2e-attestations/bot-1470-perf-suite-1009.json +7 -0
- dirsql-0.4.111/packages/python/e2e-attestations/bot-1503-bench-watch-1011.json +7 -0
- dirsql-0.4.111/packages/python/e2e-attestations/bot-issue-1486-frontend-20261009.json +7 -0
- dirsql-0.4.111/packages/python/e2e-attestations/bot-speed-parse-paths-1009.json +7 -0
- dirsql-0.4.111/packages/python/e2e-attestations/bot-speed-walk-sched-1009.json +7 -0
- dirsql-0.4.111/packages/python/tests/e2e/bench_report.py +97 -0
- dirsql-0.4.111/packages/python/tests/e2e/bench_suite.py +115 -0
- dirsql-0.4.111/packages/python/tests/e2e/speed_of_light.py +470 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/rust/Cargo.toml +1 -1
- {dirsql-0.4.109/packages/python → dirsql-0.4.111/packages/rust}/docs/reference/cli.md +17 -0
- dirsql-0.4.111/packages/rust/src/cli/frontend.html +60 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/rust/src/cli/mod.rs +16 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/rust/src/cli/router.rs +37 -4
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/rust/src/cli/run.rs +33 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/rust/src/cli/server.rs +1 -1
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/rust/src/lib.rs +89 -4
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/rust/src/scanner.rs +10 -1
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/rust/src/tree_walk.rs +3 -8
- dirsql-0.4.109/packages/python/tests/e2e/speed_of_light.py +0 -205
- {dirsql-0.4.109 → dirsql-0.4.111}/Cargo.toml +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/README.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/dirsql/__init__.py +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/dirsql/_async.py +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/dirsql/_dirsql.pyi +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/dirsql/cli/__init__.py +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/dirsql/cli/discover_plugins/__init__.py +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/dirsql/cli/discover_plugins/discovered_fragments.py +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/dirsql/cli/discover_plugins/discovery_disabled.py +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/dirsql/cli/discover_plugins/fragment_path.py +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/dirsql/cli/discover_plugins/with_discovered_plugins.py +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/dirsql/cli/main.py +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/dirsql/cli/resolve_config_extensions.py +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/dirsql/plan_entry_path.py +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/dirsql/py.typed +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/dirsql/read_config.py +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/dirsql/resolve_configs_extension_specs.py +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/dirsql/resolve_extension.py +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/dirsql/resolve_package.py +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/docs/.claude/CLAUDE.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/docs/.vitepress/config.ts +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/docs/.vitepress/theme/index.ts +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/docs/.vitepress/theme/lang.ts +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/docs/AGENTS.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/docs/context/.gitattributes +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/docs/context/recipes.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/docs/context/troubleshooting.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/docs/context/usage.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/docs/explanation.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/docs/getting-started.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/docs/howto/agent-skill.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/docs/howto/columns-from-paths.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/docs/howto/define-tables.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/docs/howto/embed.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/docs/howto/extract-from-contents.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/docs/howto/load-extension.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/docs/howto/parse-files-into-columns.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/docs/howto/persist.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/docs/howto/query-json.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/docs/howto/query-without-config.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/docs/howto/react-to-changes.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/docs/howto/search-by-meaning.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/docs/howto/search-indexes.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/docs/howto/skip-files.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/docs/howto/write-a-plugin.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/docs/index.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/docs/package.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/docs/plugins.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/docs/pnpm-lock.yaml +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/docs/pnpm-workspace.yaml +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/docs/reference/columns.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/docs/reference/config.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/docs/reference/glob.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/docs/reference/hooks.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/docs/reference/http-api.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/docs/reference/path-tables.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/docs/reference/sdk.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/CHANGELOG.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/MIGRATIONS.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/README.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/changelog.d/2026-07-13-drop-cwd-config-auto-detect.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/changelog.d/2026-07-13-plugin-discovery.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/changelog.d/2026-07-13-rename-extract-to-on-file.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/changelog.d/2026-07-13-repeatable-config.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/changelog.d/2026-07-13-sdk-default-baked-in-config.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/changelog.d/2026-07-20-drop-implicit-files-table.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/changelog.d/2026-07-21-remove-glob-captures.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/changelog.d/2026-07-24-hookless-table-config-error.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/changelog.d/2026-07-24-remove-stat-fact-injection.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/changelog.d/2026-07-29-restore-python-310.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/changelog.d/2026-08-02-release-profile.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/changelog.d/2026-08-02-scan-failures.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/changelog.d/2026-08-03-discovery-ext-resolution.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/changelog.d/2026-08-03-manylinux-dynamic-binary.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/changelog.d/2026-08-03-python-no-ignore.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/changelog.d/2026-08-04-cast-lints.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/changelog.d/2026-08-04-cli-in-process.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/changelog.d/2026-08-20-curtaincall-dev-dependency.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/changelog.d/2026-08-20-declared-table-name.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/changelog.d/2026-09-04-config-paths-from-argv-module.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/changelog.d/2026-09-05-config-extension-loader-split.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/changelog.d/2026-09-05-resolve-config-extensions-split.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/changelog.d/2026-09-05-resolve-extension-split.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/changelog.d/2026-09-09-launcher-config-path-scan.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/changelog.d/2026-09-17-extension-resolution-via-core.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/changelog.d/2026-09-18-export-scan-failure.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/changelog.d/2026-09-18-flatten-row-event-in-core.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/changelog.d/2026-09-18-programmatic-extension-plan.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/changelog.d/2026-09-20-sigint-ends-a-run-in-progress.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/changelog.d/2026-09-24-query-rows-in-projection-order.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/changelog.d/2026-10-02-readme-docs-host.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/changelog.d/2026-10-03-one-glob-rule-for-config-globs.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/changelog.d/2026-10-03-path-table-directory-one-level.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/changelog.d/2026-10-04-path-table-dotfiles-hidden.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/changelog.d/2026-10-05-brace-groups-follow-bash.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/changelog.d/2026-10-05-cli-context.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/changelog.d/2026-10-05-gitignore-requires-repo.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/changelog.d/2026-10-05-path-table-node-modules-named.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/changelog.d/2026-10-05-path-table-symlinks.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/changelog.d/2026-10-05-path-table-trailing-slash.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/changelog.d/2026-10-05-unbalanced-brackets-literal.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/changelog.d/2026-10-06-config-braces.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/changelog.d/2026-10-06-config-directory.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/changelog.d/2026-10-06-config-dotnames.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/changelog.d/2026-10-06-config-gitignore.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/changelog.d/2026-10-06-config-globs-anchor-at-the-config.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/changelog.d/2026-10-06-config-links.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/changelog.d/2026-10-06-one-glob-compiler.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/changelog.d/2026-10-06-plugin-no-default-records.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/changelog.d/2026-10-06-watch-broadcast.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/changelog.d/2026-10-06-zero-match-config-table-warning.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/changelog.d/2026-10-07-bracket-slash-literal.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/changelog.d/2026-10-07-dotdot-and-double-slashes.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/changelog.d/2026-10-07-dotdot-as-written.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/changelog.d/2026-10-07-glob-walks-node-modules.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/changelog.d/2026-10-07-literal-gitignore.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/changelog.d/2026-10-07-on-file-ndjson.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/changelog.d/2026-10-07-parallel-hooks.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/changelog.d/2026-10-07-persist-cache-outside-root.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/changelog.d/2026-10-07-posix-classes-unicode.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/changelog.d/2026-10-07-spread-few-large-files.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/changelog.d/2026-10-08-small-walks-stay-on-one-thread.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/changelog.d/2026-10-08-watch-requires-named-table.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/changelog.d/README.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/conftest.py +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/docs/.claude/CLAUDE.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/docs/.vitepress/config.ts +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/docs/.vitepress/theme/index.ts +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/docs/.vitepress/theme/lang.ts +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/docs/AGENTS.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/docs/context/.gitattributes +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/docs/context/recipes.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/docs/context/troubleshooting.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/docs/context/usage.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/docs/explanation.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/docs/getting-started.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/docs/howto/agent-skill.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/docs/howto/columns-from-paths.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/docs/howto/define-tables.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/docs/howto/embed.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/docs/howto/extract-from-contents.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/docs/howto/load-extension.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/docs/howto/parse-files-into-columns.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/docs/howto/persist.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/docs/howto/query-json.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/docs/howto/query-without-config.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/docs/howto/react-to-changes.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/docs/howto/search-by-meaning.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/docs/howto/search-indexes.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/docs/howto/skip-files.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/docs/howto/write-a-plugin.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/docs/index.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/docs/package.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/docs/plugins.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/docs/pnpm-lock.yaml +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/docs/pnpm-workspace.yaml +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/docs/reference/columns.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/docs/reference/config.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/docs/reference/glob.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/docs/reference/hooks.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/docs/reference/http-api.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/docs/reference/path-tables.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/docs/reference/sdk.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/bot-1334-listing-exemptions.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/bot-1397-watch-broadcast.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/bot-1398-inotify-error.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/bot-1399-server-cors.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/bot-1401-watch-scope.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/bot-1406-watch-no-tables-1008.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/bot-1407-child-place-depth.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/bot-1414-stat-speed.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/bot-1415-server-speed.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/bot-1416-watch-speed-1008.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/bot-1418-node-modules.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/bot-1419-dotdot-slashes.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/bot-1420-bracket-slash.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/bot-1421-posix-unicode.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/bot-1422-literal-gitignore.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/bot-1426-walk-spawn-threshold-1008.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/bot-1428-ndjson-hooks.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/bot-1429-parallel-hooks.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/bot-1430-dotdot-as-written.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/bot-1431-persist-cache-dir.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/bot-1437-test-cache-isolation.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/bot-1440-fix-main-build.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/bot-1448-wildcard-ignored-prefix.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/bot-1451-named-dir-never-hidden.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/bot-1454-split-few-files.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/bot-1457-incremental-refresh-1008.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/bot-1459-rescan-on-overflow-1008.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/bot-1461-row-footprint-1008.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/bot-1462-paired-speed-harness-1008.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/bot-fix-main-place-depth-20261007.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/cc-keen-knuth-f11gyq.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/claude-1056-py-ofpf9.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/claude-1066-p1-resolve-extension.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/claude-1078-argv-config-paths-core.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/claude-1079-p2-resolve-config-extensions.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/claude-1080-share-vtab-scaffolding.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/claude-1081-indicatif-progress.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/claude-1096-watch-moved-dir.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/claude-1109-watch-moved-out.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/claude-1119-ext-plan.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/claude-1120-py-ext.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/claude-1122-ext-cleanup.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/claude-1130-codec-crates.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/claude-1131-flatten-row-event.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/claude-1139-sse-flatten.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/claude-1140-scan-failure-export.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/claude-1148-clippy-all-targets.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/claude-1164-sigint-fatal.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/claude-1170-projection-order.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/claude-1172-on-file-path.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/claude-1173-py-projection-order.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/claude-1184-win-rel-paths.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/claude-1185-win-abs-table-names.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/claude-1186-win-test-harness.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/claude-1196-join-index.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/claude-1199-glob-prefix.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/claude-1201-single-walk.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/claude-1204-embed-batch.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/claude-1207-win-argv-quote.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/claude-1208-win-nonverbatim-paths.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/claude-1215-on-file-batch.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/claude-1216-on-file-cleanup.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/claude-1223-config-glob-rule.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/claude-1223-dir-one-level.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/claude-1225-plugin-no-default.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/claude-1226-stale-docs.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/claude-1232-anchor-plumbing.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/claude-1232-config-anchor.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/claude-1232-multi-watch.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/claude-1232-zero-match.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/claude-1238-parallel-walk.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/claude-1241-content-prefetch.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/claude-1243-ingest-perf.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/claude-1249-dotfiles.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/claude-1256-symlinks.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/claude-1257-trailing-slash.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/claude-1258-config-braces.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/claude-1258-config-directory.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/claude-1258-config-dotnames.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/claude-1258-config-gitignore.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/claude-1258-config-links.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/claude-1258-one-pattern.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/claude-1262-brace-literal.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/claude-1264-context.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/claude-1267-posix-classes.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/claude-1268-unbalanced-brackets.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/claude-1269-utf8-chars.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/claude-1271-node-modules-named.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/claude-1272-ancestor-gitignore.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/claude-1273-walk-prune.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/claude-1285-ingest-fast.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/claude-1286-nested-repo.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/claude-1305-glob-speed.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/claude-1308-glob-speed.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/claude-1310-glob-speed.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/claude-1311-glob-speed.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/claude-1312-glob-speed.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/claude-1318-lazy-stat.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/claude-1320-walk-speed.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/claude-1322-walk-readdir.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/claude-1325-parallel-walk.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/claude-1326-stream-rows.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/claude-1330-python-dirsql-patch.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/claude-1330-python-extensions-patch.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/claude-1330-scanner-effects.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/claude-1330-scanner-gitignore.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/claude-1330-vtab-prefetch-flag.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/claude-1330-vtab-read.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/claude-1351-dot-dirs.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/claude-819-oneshot-timeout.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/claude-827-unquote-doubled-quotes.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/claude-epic-953-slice2-reedline.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/claude-epic-953-slice3-format.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/claude-epic-953-stacked-prs-x59wm3.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/claude-github-issue-825-e4mhhp.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/claude-issue-951-0eease.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/claude-issue-962-0jjrfv.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/claude-issue-986-red-test-e7sjrb.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/claude-tackle-1034-cachesplit.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/claude-tackle-1042-py12.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/claude-tackle-956-xzen74.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/claude-tackle-957-lrm0z6-worker-calls.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/claude-tackle-957-lrm0z6.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/e2e-attestations/claude-tackle-975-n8mc2h.json +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/migrations.d/2026-07-13-drop-cwd-config-auto-detect.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/migrations.d/2026-07-13-rename-extract-to-on-file.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/migrations.d/2026-07-13-sdk-default-baked-in-config.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/migrations.d/2026-07-20-drop-implicit-files-table.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/migrations.d/2026-07-21-remove-glob-captures.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/migrations.d/2026-07-24-hookless-table-config-error.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/migrations.d/2026-07-24-remove-stat-fact-injection.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/migrations.d/2026-07-29-restore-python-310.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/migrations.d/2026-08-04-cli-in-process.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/migrations.d/2026-08-20-declared-table-name.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/migrations.d/2026-09-20-sigint-ends-a-run-in-progress.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/migrations.d/2026-09-24-query-rows-in-projection-order.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/migrations.d/2026-10-02-readme-docs-host.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/migrations.d/2026-10-03-one-glob-rule-for-config-globs.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/migrations.d/2026-10-03-path-table-directory-one-level.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/migrations.d/2026-10-04-path-table-dotfiles-hidden.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/migrations.d/2026-10-05-brace-groups-follow-bash.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/migrations.d/2026-10-05-cli-context.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/migrations.d/2026-10-05-gitignore-requires-repo.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/migrations.d/2026-10-05-path-table-node-modules-named.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/migrations.d/2026-10-05-path-table-symlinks.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/migrations.d/2026-10-05-path-table-trailing-slash.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/migrations.d/2026-10-05-unbalanced-brackets-literal.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/migrations.d/2026-10-06-config-braces.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/migrations.d/2026-10-06-config-directory.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/migrations.d/2026-10-06-config-dotnames.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/migrations.d/2026-10-06-config-gitignore.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/migrations.d/2026-10-06-config-globs-anchor-at-the-config.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/migrations.d/2026-10-06-config-links.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/migrations.d/2026-10-06-one-glob-compiler.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/migrations.d/2026-10-06-plugin-no-default-records.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/migrations.d/2026-10-06-watch-broadcast.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/migrations.d/2026-10-06-zero-match-config-table-warning.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/migrations.d/2026-10-07-bracket-slash-literal.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/migrations.d/2026-10-07-dotdot-and-double-slashes.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/migrations.d/2026-10-07-dotdot-as-written.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/migrations.d/2026-10-07-glob-walks-node-modules.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/migrations.d/2026-10-07-literal-gitignore.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/migrations.d/2026-10-07-on-file-ndjson.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/migrations.d/2026-10-07-parallel-hooks.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/migrations.d/2026-10-07-persist-cache-outside-root.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/migrations.d/2026-10-07-posix-classes-unicode.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/migrations.d/2026-10-07-spread-few-large-files.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/migrations.d/2026-10-08-small-walks-stay-on-one-thread.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/migrations.d/2026-10-08-watch-requires-named-table.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/migrations.d/README.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/src/lib.rs +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/testing-conventions.toml +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/tests/__init__.py +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/tests/conftest.py +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/tests/e2e/__init__.py +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/tests/e2e/fixtures/dirsql_plugin_fixture/__init__.py +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/tests/e2e/fixtures/dirsql_plugin_fixture/dirsql.toml +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/tests/integration/__init__.py +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/tests/integration/binding/__init__.py +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/python/tests/integration/hermetic/__init__.py +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/rust/CHANGELOG.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/rust/MIGRATIONS.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/rust/README.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/rust/benches/db_bench.rs +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/rust/benches/differ_bench.rs +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/rust/benches/matcher_bench.rs +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/rust/benches/scanner_bench.rs +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/rust/docs/context/.gitattributes +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/rust/docs/context/recipes.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/rust/docs/context/troubleshooting.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/rust/docs/context/usage.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/rust/docs/explanation.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/rust/docs/getting-started.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/rust/docs/howto/agent-skill.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/rust/docs/howto/columns-from-paths.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/rust/docs/howto/define-tables.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/rust/docs/howto/embed.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/rust/docs/howto/extract-from-contents.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/rust/docs/howto/load-extension.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/rust/docs/howto/parse-files-into-columns.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/rust/docs/howto/persist.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/rust/docs/howto/query-json.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/rust/docs/howto/query-without-config.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/rust/docs/howto/react-to-changes.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/rust/docs/howto/search-by-meaning.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/rust/docs/howto/search-indexes.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/rust/docs/howto/skip-files.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/rust/docs/howto/write-a-plugin.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/rust/docs/index.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/rust/docs/plugins.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/rust/docs/reference/columns.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/rust/docs/reference/config.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/rust/docs/reference/glob.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/rust/docs/reference/hooks.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/rust/docs/reference/http-api.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/rust/docs/reference/path-tables.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/rust/docs/reference/sdk.md +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/rust/src/bin/dirsql.rs +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/rust/src/brace.rs +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/rust/src/cli/context.rs +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/rust/src/cli/execute.rs +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/rust/src/cli/init.rs +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/rust/src/cli/repl.rs +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/rust/src/cli/serialize.rs +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/rust/src/cli/table.rs +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/rust/src/command.rs +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/rust/src/config.rs +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/rust/src/db.rs +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/rust/src/default_config.toml +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/rust/src/differ.rs +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/rust/src/extension_resolution.rs +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/rust/src/functions.rs +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/rust/src/infer.rs +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/rust/src/launcher.rs +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/rust/src/listing.rs +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/rust/src/matcher.rs +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/rust/src/on_file.rs +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/rust/src/parsed_vtab.rs +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/rust/src/path_table.rs +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/rust/src/persist.rs +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/rust/src/posix_class.rs +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/rust/src/progress.rs +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/rust/src/row_event_flat.rs +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/rust/src/sql_literal.rs +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/rust/src/vtab.rs +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/rust/src/vtab_scaffold.rs +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/packages/rust/src/watcher.rs +0 -0
- {dirsql-0.4.109 → dirsql-0.4.111}/pyproject.toml +0 -0
|
@@ -573,7 +573,7 @@ dependencies = [
|
|
|
573
573
|
|
|
574
574
|
[[package]]
|
|
575
575
|
name = "dirsql"
|
|
576
|
-
version = "0.4.
|
|
576
|
+
version = "0.4.111"
|
|
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.
|
|
628
|
+
version = "0.4.111"
|
|
629
629
|
dependencies = [
|
|
630
630
|
"dirsql",
|
|
631
631
|
"pyo3",
|
|
@@ -237,6 +237,22 @@ On startup the server prints `Running at <host>:<port>` to stdout. It runs
|
|
|
237
237
|
until it receives `SIGINT` (Ctrl-C) or `SIGTERM`, then drains in-flight
|
|
238
238
|
requests, closes open `/events` streams, and exits.
|
|
239
239
|
|
|
240
|
+
Pass `--frontend` to serve the bundled dirsql SQL explorer shell at `/` on
|
|
241
|
+
the same origin as the HTTP API. It works offline and prints `Frontend at
|
|
242
|
+
http://<host>:<actual-port>/` without opening a browser. With `--port 0`, the
|
|
243
|
+
printed URL uses the assigned port. The initial shell shows server status;
|
|
244
|
+
query controls are coming in a subsequent update.
|
|
245
|
+
|
|
246
|
+
```bash
|
|
247
|
+
dirsql server --frontend
|
|
248
|
+
dirsql server --frontend -c .dirsql.toml
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
The shell reads `GET /frontend/state`: `{"error":null}` when the index is
|
|
252
|
+
ready, or HTTP `503` with `{"error":"<diagnostic>"}` when config loading
|
|
253
|
+
fails. Fix the config and restart the server. Without `--frontend`, the `/`
|
|
254
|
+
and `/frontend/state` routes return `404`.
|
|
255
|
+
|
|
240
256
|
### Flags
|
|
241
257
|
|
|
242
258
|
Config flags are subcommand-local: pass them after `server`
|
|
@@ -247,6 +263,7 @@ Config flags are subcommand-local: pass them after `server`
|
|
|
247
263
|
| `-c, --config <path>` | none | Path to a [config file](./config.md). **Repeatable** (`-c a -c b`): the configs load and merge in argv order — see [Composing multiple configs](./config.md#composing-multiple-configs). The index root is the **invocation directory** (the current working directory) and governs path-tables; a config's `[[table]]` globs anchor at **that config's own directory** (see [glob anchor](./config.md#glob-anchor)), so `--config /elsewhere/.dirsql.toml` indexes `/elsewhere`, from any working directory. With none given, **no named tables are defined** — query the filesystem with a [path-table](./path-tables.md) (`FROM './'`). A `./.dirsql.toml` on disk is **not** auto-loaded; pass it explicitly. A `-c` naming a file that does not exist is an [error](#degraded-mode). |
|
|
248
264
|
| `--host <addr>` | `localhost` | Bind address. |
|
|
249
265
|
| `--port <n>` | `7117` | TCP port to bind. |
|
|
266
|
+
| `--frontend` | off | Serve the bundled SQL explorer shell and print its URL. |
|
|
250
267
|
| `--cors-origin <origin>` | off | Let browser pages on `<origin>` (an exact origin such as `http://localhost:3202`, or `*` for any) call `/query` and open `/events`. See [Cross-origin requests](#cross-origin-requests). |
|
|
251
268
|
| `--persist [<path>]` | off | Keep the SQLite index on disk between runs so a restart only re-parses files that actually changed. Bare `--persist` caches under the platform cache directory (`$XDG_CACHE_HOME/dirsql/<root hash>/cache.db` on Linux), outside the root; `--persist <path>` caches at `<path>`. Off by default (the index is ephemeral). Also available on [`dirsql query`](#dirsql-query). See [Keep the index across restarts](../howto/persist.md). |
|
|
252
269
|
| `--no-ignore` | off | Scan files a `.gitignore` would hide. [Path-tables](./path-tables.md#skip-rules) respect `.gitignore` files by default; this flag restores the full walk. The built-in `.git` skip and configured `ignore` patterns still apply. Also available on [`dirsql query`](#dirsql-query). |
|
|
@@ -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.
|
|
7
|
+
version = "0.4.111"
|
|
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
|
|
@@ -237,6 +237,22 @@ On startup the server prints `Running at <host>:<port>` to stdout. It runs
|
|
|
237
237
|
until it receives `SIGINT` (Ctrl-C) or `SIGTERM`, then drains in-flight
|
|
238
238
|
requests, closes open `/events` streams, and exits.
|
|
239
239
|
|
|
240
|
+
Pass `--frontend` to serve the bundled dirsql SQL explorer shell at `/` on
|
|
241
|
+
the same origin as the HTTP API. It works offline and prints `Frontend at
|
|
242
|
+
http://<host>:<actual-port>/` without opening a browser. With `--port 0`, the
|
|
243
|
+
printed URL uses the assigned port. The initial shell shows server status;
|
|
244
|
+
query controls are coming in a subsequent update.
|
|
245
|
+
|
|
246
|
+
```bash
|
|
247
|
+
dirsql server --frontend
|
|
248
|
+
dirsql server --frontend -c .dirsql.toml
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
The shell reads `GET /frontend/state`: `{"error":null}` when the index is
|
|
252
|
+
ready, or HTTP `503` with `{"error":"<diagnostic>"}` when config loading
|
|
253
|
+
fails. Fix the config and restart the server. Without `--frontend`, the `/`
|
|
254
|
+
and `/frontend/state` routes return `404`.
|
|
255
|
+
|
|
240
256
|
### Flags
|
|
241
257
|
|
|
242
258
|
Config flags are subcommand-local: pass them after `server`
|
|
@@ -247,6 +263,7 @@ Config flags are subcommand-local: pass them after `server`
|
|
|
247
263
|
| `-c, --config <path>` | none | Path to a [config file](./config.md). **Repeatable** (`-c a -c b`): the configs load and merge in argv order — see [Composing multiple configs](./config.md#composing-multiple-configs). The index root is the **invocation directory** (the current working directory) and governs path-tables; a config's `[[table]]` globs anchor at **that config's own directory** (see [glob anchor](./config.md#glob-anchor)), so `--config /elsewhere/.dirsql.toml` indexes `/elsewhere`, from any working directory. With none given, **no named tables are defined** — query the filesystem with a [path-table](./path-tables.md) (`FROM './'`). A `./.dirsql.toml` on disk is **not** auto-loaded; pass it explicitly. A `-c` naming a file that does not exist is an [error](#degraded-mode). |
|
|
248
264
|
| `--host <addr>` | `localhost` | Bind address. |
|
|
249
265
|
| `--port <n>` | `7117` | TCP port to bind. |
|
|
266
|
+
| `--frontend` | off | Serve the bundled SQL explorer shell and print its URL. |
|
|
250
267
|
| `--cors-origin <origin>` | off | Let browser pages on `<origin>` (an exact origin such as `http://localhost:3202`, or `*` for any) call `/query` and open `/events`. See [Cross-origin requests](#cross-origin-requests). |
|
|
251
268
|
| `--persist [<path>]` | off | Keep the SQLite index on disk between runs so a restart only re-parses files that actually changed. Bare `--persist` caches under the platform cache directory (`$XDG_CACHE_HOME/dirsql/<root hash>/cache.db` on Linux), outside the root; `--persist <path>` caches at `<path>`. Off by default (the index is ephemeral). Also available on [`dirsql query`](#dirsql-query). See [Keep the index across restarts](../howto/persist.md). |
|
|
252
269
|
| `--no-ignore` | off | Scan files a `.gitignore` would hide. [Path-tables](./path-tables.md#skip-rules) respect `.gitignore` files by default; this flag restores the full walk. The built-in `.git` skip and configured `ignore` patterns still apply. Also available on [`dirsql query`](#dirsql-query). |
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"command": "uv run python -m pytest tests/e2e/cli_version_test.py tests/e2e/query_contract_test.py tests/e2e/fanout_test.py tests/e2e/extension_package_test.py -x -q",
|
|
3
|
+
"ran_at": 1791556016,
|
|
4
|
+
"exit_code": 0,
|
|
5
|
+
"commit": "fc84f87effcd648162d3c143d308bc0c24222dcb",
|
|
6
|
+
"branch": "bot/issue-1486-frontend-20261009"
|
|
7
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"command": "uv run python -m pytest tests/e2e/frontmatter_parse_speed_test.py tests/e2e/jsonl_parse_speed_test.py tests/e2e/on_file_query_test.py tests/e2e/query_contract_test.py tests/e2e/fanout_test.py tests/e2e/declared_table_name_test.py tests/e2e/use_case_dossier_test.py tests/e2e/use_case_join_test.py tests/e2e/use_case_notebook_test.py tests/e2e/use_case_transcripts_test.py -x -q -s",
|
|
3
|
+
"ran_at": 1791560842,
|
|
4
|
+
"exit_code": 0,
|
|
5
|
+
"commit": "d5ea2e249e40f6b64e6eb1f799fc47d8290b795e",
|
|
6
|
+
"branch": "bot/speed-parse-paths-1009"
|
|
7
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"command": "uv run python -m pytest tests/e2e/glob_speed_depth_bound_test.py tests/e2e/glob_speed_one_level_test.py tests/e2e/glob_speed_recursive_test.py tests/e2e/glob_speed_symlink_test.py -x -q",
|
|
3
|
+
"ran_at": 1791561608,
|
|
4
|
+
"exit_code": 0,
|
|
5
|
+
"commit": "d4ace79bbd16978ba199811907976d240ca55507",
|
|
6
|
+
"branch": "bot/speed-walk-sched-1009"
|
|
7
|
+
}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
"""Records, report and markdown for the performance suite (`just bench-suite`)."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import json
|
|
6
|
+
import statistics
|
|
7
|
+
from pathlib import Path
|
|
8
|
+
|
|
9
|
+
RECORDS = "cases.jsonl"
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
def ratio_stats(ratios):
|
|
13
|
+
low, high = min(ratios), max(ratios)
|
|
14
|
+
median = statistics.median(ratios)
|
|
15
|
+
return {"min": low, "median": median, "max": high, "spread": (high - low) / median}
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def case_record(name, result, startup):
|
|
19
|
+
natives = {}
|
|
20
|
+
for native, seconds in result.native_seconds.items():
|
|
21
|
+
net = [s - startup.native for s in seconds]
|
|
22
|
+
natives[native] = {
|
|
23
|
+
"native_median_s": statistics.median(seconds),
|
|
24
|
+
"ratio": ratio_stats(
|
|
25
|
+
[(d - startup.dirsql) / n for d, n in zip(result.dirsql_seconds, net)]
|
|
26
|
+
),
|
|
27
|
+
}
|
|
28
|
+
return {
|
|
29
|
+
"name": name,
|
|
30
|
+
"pairs": len(result.dirsql_seconds),
|
|
31
|
+
"fastest": result.fastest,
|
|
32
|
+
"ratio_vs_fastest": natives[result.fastest]["ratio"]["median"],
|
|
33
|
+
"dirsql_median_s": statistics.median(result.dirsql_seconds),
|
|
34
|
+
"startup": {"dirsql": startup.dirsql, "native": startup.native},
|
|
35
|
+
"natives": natives,
|
|
36
|
+
"skipped": list(result.skipped),
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
def build_report(records, meta):
|
|
41
|
+
return {**meta, "cases": sorted(records, key=lambda c: c["name"])}
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
def append_record(out, record):
|
|
45
|
+
with (Path(out) / RECORDS).open("a") as file:
|
|
46
|
+
file.write(json.dumps(record) + "\n")
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
def read_records(out):
|
|
50
|
+
lines = (Path(out) / RECORDS).read_text().splitlines()
|
|
51
|
+
return [json.loads(line) for line in lines]
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
def render_markdown(report):
|
|
55
|
+
machine = ", ".join(f"{k}: {v}" for k, v in report["machine"].items())
|
|
56
|
+
versions = ", ".join(f"{k}: {v}" for k, v in report["versions"].items())
|
|
57
|
+
lines = [
|
|
58
|
+
"# dirsql performance suite",
|
|
59
|
+
"",
|
|
60
|
+
f"- Commit: {report['commit']}",
|
|
61
|
+
f"- Date: {report['date']}",
|
|
62
|
+
f"- Machine: {machine}",
|
|
63
|
+
f"- Versions: {versions}",
|
|
64
|
+
(
|
|
65
|
+
f"- Method: {report['pairs']} paired runs per case, interleaved; ratios"
|
|
66
|
+
" are dirsql over the native after each side's startup, median across"
|
|
67
|
+
" pairs"
|
|
68
|
+
),
|
|
69
|
+
"",
|
|
70
|
+
"| Case | Fastest native | dirsql / fastest | Spread | vs 1.0x |",
|
|
71
|
+
"|---|---|---|---|---|",
|
|
72
|
+
]
|
|
73
|
+
for case in report["cases"]:
|
|
74
|
+
stats = case["natives"][case["fastest"]]["ratio"]
|
|
75
|
+
verdict = "over" if case["ratio_vs_fastest"] > 1.0 else "ok"
|
|
76
|
+
lines.append(
|
|
77
|
+
f"| {case['name']} | {case['fastest']} | {case['ratio_vs_fastest']:.2f}x"
|
|
78
|
+
f" | {stats['spread']:.0%} | {verdict} |"
|
|
79
|
+
)
|
|
80
|
+
for case in report["cases"]:
|
|
81
|
+
lines += [
|
|
82
|
+
"",
|
|
83
|
+
f"## {case['name']}",
|
|
84
|
+
"",
|
|
85
|
+
f"dirsql median {case['dirsql_median_s']:.3f}s",
|
|
86
|
+
"",
|
|
87
|
+
"| Native | Median s | dirsql / native | Min | Max | Spread |",
|
|
88
|
+
"|---|---|---|---|---|---|",
|
|
89
|
+
]
|
|
90
|
+
for native, data in sorted(case["natives"].items()):
|
|
91
|
+
r = data["ratio"]
|
|
92
|
+
lines.append(
|
|
93
|
+
f"| {native} | {data['native_median_s']:.3f} | {r['median']:.2f}x"
|
|
94
|
+
f" | {r['min']:.2f}x | {r['max']:.2f}x | {r['spread']:.0%} |"
|
|
95
|
+
)
|
|
96
|
+
lines += [f"- {tool} (not installed)" for tool in case["skipped"]]
|
|
97
|
+
return "\n".join(lines) + "\n"
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
"""Entry point for `just bench-suite`.
|
|
2
|
+
|
|
3
|
+
Runs every speed-of-light case with every native timed in each paired,
|
|
4
|
+
interleaved run, then writes `report.json` and `report.md` beside the raw
|
|
5
|
+
per-case records. The cases are the e2e tests themselves, so the suite and the
|
|
6
|
+
ratchet never disagree on what a case is.
|
|
7
|
+
|
|
8
|
+
python -m tests.e2e.bench_suite --pairs 100 --out /tmp/bench [-k expr]
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
from __future__ import annotations
|
|
12
|
+
|
|
13
|
+
import argparse
|
|
14
|
+
import datetime
|
|
15
|
+
import json
|
|
16
|
+
import os
|
|
17
|
+
import platform
|
|
18
|
+
import shutil
|
|
19
|
+
import subprocess
|
|
20
|
+
import sys
|
|
21
|
+
from pathlib import Path
|
|
22
|
+
|
|
23
|
+
from .bench_report import build_report, read_records, render_markdown
|
|
24
|
+
|
|
25
|
+
HERE = Path(__file__).parent
|
|
26
|
+
TOOLS = (
|
|
27
|
+
("bash", ["bash", "--version"]),
|
|
28
|
+
("find", ["find", "--version"]),
|
|
29
|
+
("fd", ["fd", "--version"]),
|
|
30
|
+
("rg", ["rg", "--version"]),
|
|
31
|
+
("xargs", ["xargs", "--version"]),
|
|
32
|
+
("inotifywait", ["inotifywait", "--help"]),
|
|
33
|
+
)
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
def case_files(directory=HERE):
|
|
37
|
+
return sorted(
|
|
38
|
+
path
|
|
39
|
+
for path in directory.glob("*_test.py")
|
|
40
|
+
if "assert_speed_of_light" in path.read_text()
|
|
41
|
+
)
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
def first_line(argv):
|
|
45
|
+
if shutil.which(argv[0]) is None:
|
|
46
|
+
return None
|
|
47
|
+
proc = subprocess.run(argv, capture_output=True, text=True, check=False)
|
|
48
|
+
lines = (proc.stdout or proc.stderr).splitlines()
|
|
49
|
+
return lines[0].strip() if lines else None
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
def cpu_model():
|
|
53
|
+
try:
|
|
54
|
+
for line in Path("/proc/cpuinfo").read_text().splitlines():
|
|
55
|
+
if line.startswith("model name"):
|
|
56
|
+
return line.split(":", 1)[1].strip()
|
|
57
|
+
except OSError:
|
|
58
|
+
pass
|
|
59
|
+
return platform.processor() or "unknown"
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
def git_commit():
|
|
63
|
+
proc = subprocess.run(
|
|
64
|
+
["git", "rev-parse", "HEAD"], capture_output=True, text=True, check=False
|
|
65
|
+
)
|
|
66
|
+
return proc.stdout.strip() or "unknown"
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
def metadata(pairs):
|
|
70
|
+
versions = {}
|
|
71
|
+
for name, argv in TOOLS:
|
|
72
|
+
versions[name] = first_line(argv)
|
|
73
|
+
return {
|
|
74
|
+
"commit": git_commit(),
|
|
75
|
+
"date": datetime.datetime.now(datetime.timezone.utc).strftime(
|
|
76
|
+
"%Y-%m-%dT%H:%M:%SZ"
|
|
77
|
+
),
|
|
78
|
+
"machine": {
|
|
79
|
+
"platform": platform.platform(),
|
|
80
|
+
"cpu": cpu_model(),
|
|
81
|
+
"cpus": os.cpu_count(),
|
|
82
|
+
},
|
|
83
|
+
"versions": {k: v for k, v in versions.items() if v},
|
|
84
|
+
"pairs": pairs,
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
def main(argv=None):
|
|
89
|
+
parser = argparse.ArgumentParser()
|
|
90
|
+
parser.add_argument("--pairs", type=int, default=100)
|
|
91
|
+
parser.add_argument("--out", type=Path, required=True)
|
|
92
|
+
parser.add_argument("-k", default="")
|
|
93
|
+
args = parser.parse_args(argv)
|
|
94
|
+
args.out.mkdir(parents=True, exist_ok=True)
|
|
95
|
+
(args.out / "cases.jsonl").unlink(missing_ok=True)
|
|
96
|
+
env = {
|
|
97
|
+
**os.environ,
|
|
98
|
+
"DIRSQL_BENCH_PAIRS": str(args.pairs),
|
|
99
|
+
"DIRSQL_BENCH_OUT": str(args.out),
|
|
100
|
+
}
|
|
101
|
+
pytest = [sys.executable, "-m", "pytest", "-q", "-s", "-p", "no:cacheprovider"]
|
|
102
|
+
if args.k:
|
|
103
|
+
pytest += ["-k", args.k]
|
|
104
|
+
code = subprocess.run(
|
|
105
|
+
pytest + [str(p) for p in case_files()], env=env, check=False
|
|
106
|
+
).returncode
|
|
107
|
+
report = build_report(read_records(args.out), metadata(args.pairs))
|
|
108
|
+
(args.out / "report.json").write_text(json.dumps(report, indent=2) + "\n")
|
|
109
|
+
(args.out / "report.md").write_text(render_markdown(report))
|
|
110
|
+
print(f"wrote {args.out}/report.json and {args.out}/report.md")
|
|
111
|
+
return code
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
if __name__ == "__main__":
|
|
115
|
+
sys.exit(main())
|