querysource 5.1.2__tar.gz → 5.1.4__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.
- querysource-5.1.4/.agents/skills/sdd-brainstorm/SKILL.md +127 -0
- querysource-5.1.4/.agents/skills/sdd-codereview/SKILL.md +80 -0
- querysource-5.1.4/.agents/skills/sdd-done/SKILL.md +196 -0
- querysource-5.1.4/.agents/skills/sdd-explain/SKILL.md +58 -0
- querysource-5.1.4/.agents/skills/sdd-fix/SKILL.md +67 -0
- querysource-5.1.4/.agents/skills/sdd-fromjira/SKILL.md +64 -0
- querysource-5.1.4/.agents/skills/sdd-insight/SKILL.md +68 -0
- querysource-5.1.4/.agents/skills/sdd-next/SKILL.md +59 -0
- querysource-5.1.4/.agents/skills/sdd-proposal/SKILL.md +142 -0
- querysource-5.1.4/.agents/skills/sdd-spec/SKILL.md +173 -0
- querysource-5.1.4/.agents/skills/sdd-start/SKILL.md +165 -0
- querysource-5.1.4/.agents/skills/sdd-status/SKILL.md +62 -0
- querysource-5.1.4/.agents/skills/sdd-task/SKILL.md +235 -0
- querysource-5.1.4/.agents/skills/sdd-tojira/SKILL.md +65 -0
- {querysource-5.1.2 → querysource-5.1.4}/.claude/agents/sdd-coder.md +12 -10
- {querysource-5.1.2 → querysource-5.1.4}/.claude/agents/sdd-worker.md +63 -44
- {querysource-5.1.2 → querysource-5.1.4}/.claude/commands/sdd-done.md +43 -16
- {querysource-5.1.2 → querysource-5.1.4}/.claude/commands/sdd-insight.md +10 -0
- {querysource-5.1.2 → querysource-5.1.4}/.claude/commands/sdd-proposal.md +4 -4
- {querysource-5.1.2 → querysource-5.1.4}/.claude/commands/sdd-task.md +6 -0
- querysource-5.1.4/.codex/agents/sdd-worker.toml +153 -0
- {querysource-5.1.2 → querysource-5.1.4}/PKG-INFO +1 -1
- {querysource-5.1.2 → querysource-5.1.4}/querysource/_version.py +3 -3
- {querysource-5.1.2 → querysource-5.1.4}/querysource/conf.py +3 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/handlers/multi.py +2 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/handlers/qsurl.py +1 -1
- {querysource-5.1.2 → querysource-5.1.4}/querysource/handlers/service.py +2 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/models.py +1 -0
- querysource-5.1.4/querysource/outputs/__init__.py +33 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/outputs/output.py +107 -52
- querysource-5.1.4/querysource/outputs/writers/__init__.py +55 -0
- querysource-5.1.4/querysource/outputs/writers/pdf.py +118 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/parsers/abstract.c +2573 -2054
- {querysource-5.1.2 → querysource-5.1.4}/querysource/parsers/abstract.pxd +2 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/parsers/abstract.pyx +23 -2
- {querysource-5.1.2 → querysource-5.1.4}/querysource/parsers/arangodb.c +5 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/parsers/bigquery.c +751 -648
- {querysource-5.1.2 → querysource-5.1.4}/querysource/parsers/bigquery.pyx +3 -1
- {querysource-5.1.2 → querysource-5.1.4}/querysource/parsers/cql.c +820 -697
- {querysource-5.1.2 → querysource-5.1.4}/querysource/parsers/cql.pyx +3 -1
- {querysource-5.1.2 → querysource-5.1.4}/querysource/parsers/deltatbl.c +136 -111
- {querysource-5.1.2 → querysource-5.1.4}/querysource/parsers/elastic.cpp +5 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/parsers/iceberg.c +142 -117
- {querysource-5.1.2 → querysource-5.1.4}/querysource/parsers/influx.c +137 -112
- querysource-5.1.4/querysource/parsers/jsonb_unnest.c +35016 -0
- querysource-5.1.4/querysource/parsers/jsonb_unnest.pyx +724 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/parsers/mongo.cpp +5 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/parsers/parser.c +127 -102
- {querysource-5.1.2 → querysource-5.1.4}/querysource/parsers/pgsql.c +5563 -2216
- {querysource-5.1.2 → querysource-5.1.4}/querysource/parsers/pgsql.pyx +79 -3
- {querysource-5.1.2 → querysource-5.1.4}/querysource/parsers/rethink.c +5 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/parsers/sosql.c +136 -111
- {querysource-5.1.2 → querysource-5.1.4}/querysource/parsers/sql.c +1876 -1248
- {querysource-5.1.2 → querysource-5.1.4}/querysource/parsers/sql.pyx +34 -7
- {querysource-5.1.2 → querysource-5.1.4}/querysource/parsers/sqlserver.c +129 -104
- {querysource-5.1.2 → querysource-5.1.4}/querysource/providers/db.py +3 -1
- {querysource-5.1.2 → querysource-5.1.4}/querysource/providers/sql.py +1 -1
- {querysource-5.1.2 → querysource-5.1.4}/querysource/queries/multi/__init__.py +13 -2
- {querysource-5.1.2 → querysource-5.1.4}/querysource/queries/multi/sources/base.py +8 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/types/converters.cpp +3 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/types/typedefs.c +3 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/types/validators.cpp +3 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/utils/functions.cpp +3 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/utils/parseqs.cpp +3 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/version.py +1 -1
- {querysource-5.1.2 → querysource-5.1.4}/querysource.egg-info/PKG-INFO +1 -1
- {querysource-5.1.2 → querysource-5.1.4}/querysource.egg-info/SOURCES.txt +31 -1
- {querysource-5.1.2 → querysource-5.1.4}/querysource.egg-info/scm_file_list.json +77 -1
- querysource-5.1.4/querysource.egg-info/scm_version.json +8 -0
- querysource-5.1.4/reference/sdd-insight/UPSTREAM-LICENSE +21 -0
- querysource-5.1.4/reference/sdd-insight/ai-fluency-framework.md +147 -0
- {querysource-5.1.2 → querysource-5.1.4}/rust/Cargo.toml +1 -0
- {querysource-5.1.2 → querysource-5.1.4}/rust/qsurl/Cargo.toml +1 -0
- {querysource-5.1.2 → querysource-5.1.4}/rust/src/lib.rs +3 -0
- querysource-5.1.4/rust/src/pgsql_unnest.rs +2000 -0
- {querysource-5.1.2 → querysource-5.1.4}/rust/src/sql_parser.rs +87 -2
- {querysource-5.1.2 → querysource-5.1.4}/setup.py +36 -3
- querysource-5.1.4/tests/integration/test_pgsql_jsonb_unnest_live.py +211 -0
- querysource-5.1.4/tests/test_jsonb_unnest_filters.py +159 -0
- querysource-5.1.4/tests/test_jsonb_unnest_grammar.py +162 -0
- querysource-5.1.4/tests/test_jsonb_unnest_plan.py +292 -0
- querysource-5.1.4/tests/test_parser_having_condition.py +54 -0
- querysource-5.1.4/tests/test_pgsql_jsonb_unnest.py +148 -0
- querysource-5.1.4/tests/test_pgsql_jsonb_unnest_parity.py +196 -0
- querysource-5.1.4/tests/test_pgsql_jsonb_unnest_regression.py +101 -0
- querysource-5.1.4/tests/test_pgsql_jsonb_unnest_review.py +90 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/test_sql_parser_combinations.py +64 -0
- querysource-5.1.4/tests/test_threadsource_empty_result.py +43 -0
- querysource-5.1.4/tests/unit/test_lazy_writers.py +262 -0
- querysource-5.1.2/.claude/rules/aws-cost-optimization.md +0 -303
- querysource-5.1.2/querysource/outputs/__init__.py +0 -6
- querysource-5.1.2/querysource/outputs/writers/__init__.py +0 -17
- querysource-5.1.2/querysource/outputs/writers/pdf.py +0 -66
- querysource-5.1.2/querysource.egg-info/scm_version.json +0 -8
- {querysource-5.1.2 → querysource-5.1.4}/.agent/rules/async-programming-expert.md +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/.agent/rules/code-reviewer.md +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/.agent/rules/cython-development.md +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/.agent/rules/prompt-expert.md +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/.agent/rules/python-development.md +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/.agent/rules/rust-development.md +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/.agent/workflows/create-parrot-tool.md +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/.agent/workflows/create-workflow.md +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/.agent/workflows/debug-regressions-with-git-bisect-binary-search.md +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/.agent/workflows/generate-tests.md +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/.agent/workflows/git-new-feature.md +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/.agent/workflows/parrot-mcp-server.md +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/.agent/workflows/release_package.md +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/.agent/workflows/start-flow.md +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/.agents/plugins/parrot/mcp_config.json +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/.bumpversion.cfg +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/.claude/agents/code-review.md +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/.claude/agents/code-reviewer.md +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/.claude/agents/qa-runner.md +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/.claude/agents/sdd-autopilot.md +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/.claude/agents/sdd-feedback.md +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/.claude/agents/sdd-ideation.md +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/.claude/agents/sdd-planner.md +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/.claude/agents/sdd-qa.md +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/.claude/agents/sdd-research.md +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/.claude/agents/sdd-secondopinion.md +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/.claude/commands/bookstore.md +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/.claude/commands/parrotwiki.md +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/.claude/commands/pr-review.md +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/.claude/commands/release.md +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/.claude/commands/remove-worktree.md +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/.claude/commands/sdd-brainstorm.md +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/.claude/commands/sdd-codereview.md +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/.claude/commands/sdd-explain.md +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/.claude/commands/sdd-fix.md +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/.claude/commands/sdd-fromjira.md +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/.claude/commands/sdd-next.md +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/.claude/commands/sdd-spec.md +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/.claude/commands/sdd-start.md +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/.claude/commands/sdd-status.md +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/.claude/commands/sdd-tojira.md +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/.claude/commands/security-check.md +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/.claude/hooks/dangerous-actions-blocker.sh +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/.claude/hooks/sdd-worker-format.sh +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/.claude/rules/code-reviewer.md +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/.claude/rules/codebase-conventions.md +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/.claude/rules/cython-development.md +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/.claude/rules/python-development.md +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/.claude/rules/rust-development.md +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/.claude/rules/using-git-worktrees.md +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/.claude/rules/worktree-pr-and-clean.md +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/.claude/rules/worktree-start-feature.md +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/.claude/rules/worktree-status.md +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/.claude/skills/bookstore/SKILL.md +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/.claude/skills/meta-prompting/SKILL.md +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/.claude/skills/meta-prompting/analyze-complexity/SKILL.md +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/.claude/skills/meta-prompting/assess-quality/SKILL.md +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/.claude/skills/meta-prompting/extract-context/SKILL.md +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/.claude/skills/meta-prompting/meta-prompt-iterate/SKILL.md +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/.claude/workflows/sdd-insight.js +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/.github/dependabot.yml +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/.github/workflows/codeql-analysis.yml +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/.github/workflows/release.yml +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/.isort.cfg +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/.jupyter/jupyter_notebook_config.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/.parrot/wiki.json +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/.parrot/wiki.local.json +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/.pre-commit-config.yaml +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/.pylintrc +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/CHANGES.rst +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/CODE_OF_CONDUCT.md +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/CONTRIBUTING.md +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/INSTALL +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/JOIN_CONDITIONS_FEATURE.md +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/JOIN_CONDITIONS_SUMMARY.md +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/LICENSE +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/MANIFEST.in +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/Makefile +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/README.md +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/app.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/bin/README.md +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/conftest.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/generated/AirtableSource.json +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/generated/Concat.json +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/generated/DWHDestination.json +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/generated/DropCols.json +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/generated/FileSource.json +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/generated/Filter.json +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/generated/FilterCols.json +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/generated/Forecast.json +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/generated/GoogleMaps.json +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/generated/GroupBy.json +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/generated/Info.json +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/generated/Join.json +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/generated/Map.json +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/generated/Melt.json +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/generated/Merge.json +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/generated/NormalizeColumns.json +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/generated/PluckCols.json +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/generated/Query.json +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/generated/S3Source.json +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/generated/SharepointSource.json +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/generated/SmartSheetSource.json +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/generated/Table.json +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/generated/TableDestination.json +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/generated/TableOutput.json +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/generated/TableOutputAdapter.json +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/generated/TableSource.json +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/generated/ToS3.json +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/generated/ToSharepoint.json +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/generated/correlation.json +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/generated/crosstab.json +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/generated/pivot.json +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/generated/tExplode.json +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/generated/tOrder.json +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/generated/tPandas.json +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/gunicorn_config.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/mypy.ini +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/nav.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/policies/HARDENING.md +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/policies/authorized.yaml +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/policies/baseline.yaml +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/policies/datasources.yaml +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/policies/defaults.yaml +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/policies/drivers.yaml +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/policies/raw_queries.yaml +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/policies/slugs.yaml +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/policies/superusers.yaml +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/pyproject.toml +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/pytest.ini +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/__cli__.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/__init__.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/auth/__init__.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/auth/_resource_types.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/auth/credentials.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/auth/enforcement.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/auth/pbac.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/auth/principal.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/auth/slug_visibility.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/cache/__init__.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/cache/backends/__init__.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/cache/backends/abstract.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/cache/backends/memcache.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/cache/backends/redis.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/cache/base.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/cache_identity.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/cli/__init__.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/cli/generate_docs.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/connections.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/datasources/__init__.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/datasources/drivers/__init__.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/datasources/drivers/abstract.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/datasources/drivers/arangodb.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/datasources/drivers/athena.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/datasources/drivers/bigquery.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/datasources/drivers/cassandra.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/datasources/drivers/clickhouse.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/datasources/drivers/cockroachdb.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/datasources/drivers/couchbase.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/datasources/drivers/couchdb.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/datasources/drivers/countries.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/datasources/drivers/delta.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/datasources/drivers/documentdb.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/datasources/drivers/dynamodb.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/datasources/drivers/elastic.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/datasources/drivers/ga.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/datasources/drivers/gcalc.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/datasources/drivers/hazel.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/datasources/drivers/iceberg.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/datasources/drivers/influx.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/datasources/drivers/jdbc.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/datasources/drivers/jira.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/datasources/drivers/mariadb.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/datasources/drivers/memcached.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/datasources/drivers/mongo.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/datasources/drivers/mysql.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/datasources/drivers/odbc.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/datasources/drivers/openweather.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/datasources/drivers/oracle.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/datasources/drivers/pg.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/datasources/drivers/pg_admin.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/datasources/drivers/postgres.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/datasources/drivers/py.typed +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/datasources/drivers/qs.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/datasources/drivers/redis.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/datasources/drivers/rest.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/datasources/drivers/rethink.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/datasources/drivers/sa.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/datasources/drivers/salesforce.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/datasources/drivers/scylladb.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/datasources/drivers/sqlalchemy.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/datasources/drivers/sqlite.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/datasources/drivers/sqlserver.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/datasources/drivers/upc.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/datasources/drivers/zipcodeapi.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/datasources/handlers/__init__.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/datasources/handlers/datasource.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/datasources/handlers/utils.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/datasources/introspection.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/datasources/models.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/events/__init__.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/exceptions.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/handlers/__init__.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/handlers/_pagination.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/handlers/abstract.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/handlers/components.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/handlers/describe.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/handlers/executor.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/handlers/integrations/__init__.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/handlers/integrations/airtable.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/handlers/log.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/handlers/manager.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/handlers/outputs/__init__.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/handlers/outputs/tableOutput/__init__.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/handlers/outputs/tableOutput/postgres.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/handlers/outputs/tableOutput/table.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/handlers/scheduler.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/handlers/tenant.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/handlers/variables.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/interfaces/__init__.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/interfaces/airtable.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/interfaces/connections.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/interfaces/credentials.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/interfaces/databases/__init__.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/interfaces/databases/abstract.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/interfaces/databases/bigquery.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/interfaces/databases/db.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/interfaces/databases/mongo.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/interfaces/databases/rethink.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/interfaces/http.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/interfaces/playwright_service.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/interfaces/queries.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/interfaces/selenium_service.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/libs/__init__.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/libs/encoders.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/libs/functions/__init__.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/libs/py.typed +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/outputs/destinations/__init__.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/outputs/destinations/abstract.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/outputs/destinations/dwh.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/outputs/destinations/s3.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/outputs/destinations/sharepoint.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/outputs/destinations/table.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/outputs/dt/__init__.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/outputs/dt/abstract.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/outputs/dt/arrow.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/outputs/dt/dt.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/outputs/dt/factory.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/outputs/dt/iter.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/outputs/dt/modin.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/outputs/dt/pandas.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/outputs/dt/polars.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/outputs/tables/TableOutput/__init__.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/outputs/tables/TableOutput/abstract.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/outputs/tables/TableOutput/bigquery.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/outputs/tables/TableOutput/documentdb.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/outputs/tables/TableOutput/mongodb.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/outputs/tables/TableOutput/mysql.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/outputs/tables/TableOutput/postgres.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/outputs/tables/TableOutput/rethink.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/outputs/tables/TableOutput/sa.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/outputs/tables/TableOutput/table.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/outputs/tables/__init__.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/outputs/writers/abstract.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/outputs/writers/bokeh.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/outputs/writers/clustering.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/outputs/writers/csv.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/outputs/writers/describe.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/outputs/writers/eda.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/outputs/writers/excel.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/outputs/writers/html.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/outputs/writers/json.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/outputs/writers/pickle.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/outputs/writers/plotly.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/outputs/writers/profiling.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/outputs/writers/report.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/outputs/writers/table.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/outputs/writers/tsv.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/outputs/writers/txt.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/outputs/writers/xml.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/ownership_logging.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/parsers/__init__.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/parsers/arangodb.pxd +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/parsers/arangodb.pyx +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/parsers/bigquery.pxd +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/parsers/cql.pxd +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/parsers/deltatbl.pxd +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/parsers/deltatbl.pyx +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/parsers/elastic.pxd +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/parsers/elastic.pyx +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/parsers/iceberg.pxd +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/parsers/iceberg.pyx +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/parsers/influx.pxd +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/parsers/influx.pyx +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/parsers/mongo.pxd +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/parsers/mongo.pyx +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/parsers/parser.pxd +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/parsers/parser.pyx +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/parsers/pgsql.pxd +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/parsers/rethink.pxd +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/parsers/rethink.pyx +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/parsers/sosql.pxd +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/parsers/sosql.pyx +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/parsers/sql.pxd +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/parsers/sqlserver.pxd +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/parsers/sqlserver.pyx +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/plugins/__init__.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/plugins/importer.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/plugins/sources/__init__.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/providers/__init__.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/providers/abstract.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/providers/arangodb.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/providers/bigquery.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/providers/cassandra.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/providers/default.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/providers/deltatbl.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/providers/documentdb.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/providers/dummy.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/providers/elastic.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/providers/external.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/providers/http.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/providers/iceberg.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/providers/influx.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/providers/mysql.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/providers/pg.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/providers/py.typed +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/providers/rest.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/providers/rethink.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/providers/salesforce.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/providers/scylladb.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/providers/sources/__init__.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/providers/sources/abstract.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/providers/sources/amazon.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/providers/sources/countries.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/providers/sources/ga.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/providers/sources/geofcc.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/providers/sources/gmaps.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/providers/sources/graphcountries.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/providers/sources/graphql.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/providers/sources/http.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/providers/sources/hubspot.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/providers/sources/openweather.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/providers/sources/parsers/__init__.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/providers/sources/parsers/amproduct.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/providers/sources/parsers/xpath.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/providers/sources/pokemon.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/providers/sources/populartimes.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/providers/sources/py.typed +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/providers/sources/rest.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/providers/sources/retailnext.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/providers/sources/rssapp.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/providers/sources/salesforce.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/providers/sources/scrapper.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/providers/sources/shoppertrack.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/providers/sources/swop.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/providers/sources/uap.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/providers/sources/upc.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/providers/sources/wm_stores.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/providers/sources/zammad.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/providers/sources/zipcodeapi.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/providers/sqlserver.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/py.typed +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/qs_parsers/__init__.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/qsurl/__init__.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/qsurl/_fallback.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/qsurl/capabilities.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/qsurl/errors.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/qsurl/gbnf.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/qsurl/grammar.lark +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/qsurl/plan.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/qsurl/residual.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/qsurl/translate.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/queries/__init__.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/queries/base.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/queries/describe.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/queries/executor.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/queries/models.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/queries/multi/_introspect.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/queries/multi/abstract.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/queries/multi/components/__init__.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/queries/multi/components/abstract.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/queries/multi/destinations/__init__.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/queries/multi/destinations/dwh.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/queries/multi/destinations/s3.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/queries/multi/destinations/sharepoint.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/queries/multi/destinations/table.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/queries/multi/operators/Concat.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/queries/multi/operators/GroupBy.catalog.yaml +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/queries/multi/operators/GroupBy.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/queries/multi/operators/Info.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/queries/multi/operators/Join.catalog.yaml +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/queries/multi/operators/Join.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/queries/multi/operators/Melt.catalog.yaml +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/queries/multi/operators/Melt.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/queries/multi/operators/Merge.catalog.yaml +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/queries/multi/operators/Merge.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/queries/multi/operators/__init__.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/queries/multi/operators/abstract.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/queries/multi/operators/filter/Filter.catalog.yaml +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/queries/multi/operators/filter/__init__.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/queries/multi/operators/filter/flt.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/queries/multi/registry.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/queries/multi/sources/__init__.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/queries/multi/sources/airtable.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/queries/multi/sources/executors.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/queries/multi/sources/file.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/queries/multi/sources/query.catalog.yaml +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/queries/multi/sources/query.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/queries/multi/sources/s3.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/queries/multi/sources/sharepoint.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/queries/multi/sources/smartsheet.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/queries/multi/sources/table.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/queries/multi/transformations/DropCols.catalog.yaml +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/queries/multi/transformations/DropCols.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/queries/multi/transformations/FilterCols.catalog.yaml +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/queries/multi/transformations/FilterCols.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/queries/multi/transformations/Forecast.catalog.yaml +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/queries/multi/transformations/Forecast.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/queries/multi/transformations/Map.catalog.yaml +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/queries/multi/transformations/Map.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/queries/multi/transformations/NormalizeColumns.catalog.yaml +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/queries/multi/transformations/NormalizeColumns.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/queries/multi/transformations/PluckCols.catalog.yaml +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/queries/multi/transformations/PluckCols.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/queries/multi/transformations/__init__.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/queries/multi/transformations/abstract.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/queries/multi/transformations/correlation.catalog.yaml +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/queries/multi/transformations/correlation.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/queries/multi/transformations/crosstab.catalog.yaml +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/queries/multi/transformations/crosstab.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/queries/multi/transformations/google/GoogleMaps.catalog.yaml +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/queries/multi/transformations/google/__init__.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/queries/multi/transformations/google/maps.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/queries/multi/transformations/pivot.catalog.yaml +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/queries/multi/transformations/pivot.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/queries/multi/transformations/tExplode.catalog.yaml +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/queries/multi/transformations/tExplode.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/queries/multi/transformations/tOrder.catalog.yaml +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/queries/multi/transformations/tOrder.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/queries/multi/transformations/tPandas.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/queries/obj.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/queries/qs.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/repositories/__init__.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/repositories/definitions.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/scheduler/__init__.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/scheduler/jobs.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/scheduler/notifications.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/scheduler/scheduler.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/services.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/template/__init__.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/template/parser.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/tenant_errors.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/tenant_models.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/tenants.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/types/__init__.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/types/converters.pyx +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/types/dt/__init__.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/types/dt/filters.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/types/dt/transforms.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/types/py.typed +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/types/typedefs.pyx +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/types/validators.pyx +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/utils/__init__.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/utils/cache_serialization.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/utils/dataframes.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/utils/errors.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/utils/events.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/utils/fn.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/utils/functions.pyx +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/utils/getfunc.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/utils/handlers.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/utils/parseqs.pyx +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/utils/validators.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource/utils/vocabulary.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource.egg-info/dependency_links.txt +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource.egg-info/entry_points.txt +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource.egg-info/not-zip-safe +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource.egg-info/requires.txt +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/querysource.egg-info/top_level.txt +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/run.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/rust/Cargo.lock +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/rust/pyproject.toml +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/rust/qsurl/Cargo.lock +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/rust/qsurl/README.md +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/rust/qsurl/examples/parse.rs +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/rust/qsurl/pyproject.toml +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/rust/qsurl/src/ast.rs +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/rust/qsurl/src/ir.rs +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/rust/qsurl/src/lib.rs +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/rust/qsurl/src/parser.rs +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/rust/qsurl/src/python.rs +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/rust/src/arangodb_parser.rs +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/rust/src/bigquery_parser.rs +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/rust/src/cql_parser.rs +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/rust/src/elastic_parser.rs +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/rust/src/filter_common.rs +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/rust/src/flux_parser.rs +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/rust/src/mongo_parser.rs +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/rust/src/mssql_parser.rs +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/rust/src/parseqs.rs +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/rust/src/pgsql_parser.rs +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/rust/src/rethink_parser.rs +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/rust/src/safe_dict.rs +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/rust/src/soql_parser.rs +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/rust/src/validators.rs +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/scripts/analyze_sdd_coder_usage.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/scripts/remove_worktree.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/scripts/sdd/__init__.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/scripts/sdd/_parrot_runtime.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/scripts/sdd/_validation_contract.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/scripts/sdd/check_id_collisions.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/scripts/sdd/check_task_graph.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/scripts/sdd/close_task.sh +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/scripts/sdd/doc_taxonomy.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/scripts/sdd/ensure_worktree.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/scripts/sdd/finalize_task.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/scripts/sdd/heal_orphans.sh +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/scripts/sdd/id_ledger.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/scripts/sdd/insight.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/scripts/sdd/install_hooks.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/scripts/sdd/lint_new.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/scripts/sdd/migrate_index.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/scripts/sdd/profile_execution.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/scripts/sdd/prune_intake.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/scripts/sdd/reserve_ids.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/scripts/sdd/review_checkpoint.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/scripts/sdd/sdd_meta.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/scripts/sdd/select_tests.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/scripts/sdd/token_audit.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/scripts/sdd/worktree_environment.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/scripts/sdd/worktree_status.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/scripts/sweep_worktrees.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/setup.cfg +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/static/notebook/bundle.js +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/templates/__init__.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/templates/base.html +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/templates/default.html +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/templates/default_table.html +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/templates/fontlist-v330.json +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/templates/fontlist-v390.json +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/templates/table_charts.html +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/auth/__init__.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/auth/test_credentials.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/auth/test_enforcement.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/auth/test_pbac_bootstrap.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/auth/test_pbac_runtime.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/auth/test_principal.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/auth/test_slug_visibility.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/check_concurrent_get_slug.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/conftest.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/datasources/__init__.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/datasources/test_datasource_view_pbac.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/datasources/test_driver_factory_session.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/datasources/test_pg_admin_registration.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/datasources/test_pg_params_for.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/e2e/__init__.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/e2e/conftest.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/e2e/test_multiqs_dry_run.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/e2e/test_qs_dry_run.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/e2e/test_qsurl_dry_run.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/handlers/__init__.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/handlers/conftest.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/handlers/test_abstract_pbac_helpers.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/handlers/test_airtable_oauth.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/handlers/test_describe_columns.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/handlers/test_describe_detail.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/handlers/test_describe_list.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/handlers/test_describe_tenant.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/handlers/test_describe_vocabulary.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/handlers/test_multiquery_pbac_smoke.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/handlers/test_pagination_describe_helpers.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/handlers/test_qsurl_service.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/handlers/test_query_param_exclusion.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/handlers/test_queryexecutor_pbac_smoke.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/handlers/test_querymanager_pagination.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/handlers/test_queryservice_definition_forwarding.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/handlers/test_queryservice_pbac_smoke.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/integration/__init__.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/integration/test_csv_stream_response.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/integration/test_datasource_endpoint.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/integration/test_multiquery_output_errors.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/integration/test_pbac_credentials.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/integration/test_pbac_enforcement.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/integration/test_pbac_listing.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/integration/test_qs_principal_e2e.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/integration/test_slug_injection.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/integration/test_slug_regression.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/interfaces/__init__.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/interfaces/test_airtable_interface.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/multi/__init__.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/multi/sources/__init__.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/multi/sources/test_airtable_source.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/multi/sources/test_registry.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/multi/test_multiqs_principal.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/perf/__init__.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/perf/test_pbac_overhead.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/policies/__init__.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/policies/test_authorized_policy.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/policies/test_default_policies_load.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/qsurl/__init__.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/qsurl/conftest.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/qsurl/corpus.json +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/qsurl/test_core.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/qsurl/test_docs.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/qsurl/test_error_envelope.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/qsurl/test_fallback.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/qsurl/test_gbnf.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/qsurl/test_parity.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/qsurl/test_perf.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/qsurl/test_pg_ilike.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/qsurl/test_provider_capabilities.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/qsurl/test_qs_residual.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/qsurl/test_residual.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/qsurl/test_translate.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/qsurl/test_wheel_layout.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/scheduler/__init__.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/scheduler/test_jobs_no_principal.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/scheduler/test_parse_trigger_shorthands.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/scheduler/test_shorthand_loaders.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/services/__init__.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/services/test_querysource_setup_pbac.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/tenants/conftest.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/tenants/test_columns_definition.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/tenants/test_integration.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/tenants/test_multi_handler_definition.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/tenants/test_preloaded_definition_multiqs.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/tenants/test_preloaded_definition_qs.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/tenants/test_tenant_bootstrap_lookup.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/tenants/test_tenant_child_execution.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/tenants/test_tenant_definition_model.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/tenants/test_tenant_execution_context.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/tenants/test_tenant_http_routes.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/tenants/test_tenant_management_reads.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/tenants/test_tenant_management_writes.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/tenants/test_tenant_multi_dispatch.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/tenants/test_tenant_observability_outputs.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/tenants/test_tenant_policy_preflight.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/tenants/test_tenant_registry.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/tenants/test_tenant_remote_protocol.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/tenants/test_tenant_repository_reads.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/tenants/test_tenant_repository_writes.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/tenants/test_tenant_result_cache.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/tenants/test_tenant_rollout_documentation.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/tenants/test_tenant_scheduler_api_jobs.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/tenants/test_tenant_scheduler_registry.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/test_abstract_multi.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/test_abstract_refactor.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/test_api.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/test_arangodb_parser.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/test_catalog_colcols.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/test_catalog_correlation.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/test_catalog_filter.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/test_catalog_forecast.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/test_catalog_googlemaps.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/test_catalog_groupby.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/test_catalog_map.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/test_catalog_pivot.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/test_catalog_remote.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/test_catalog_texplode.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/test_catalog_torder.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/test_cli_generate_docs.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/test_column_filters.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/test_component_handler.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/test_component_registry.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/test_conf_airtable.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/test_destination_base.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/test_destination_dwh.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/test_destination_integration.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/test_destination_s3.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/test_destination_sharepoint.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/test_destination_table.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/test_destinations_documentation_endpoint.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/test_elastic_parser.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/test_error_formatter.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/test_eval.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/test_exception_codes.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/test_feat102_error_redaction.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/test_filters_drop_duplicates.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/test_flag_conditions.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/test_grouping_sync.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/test_info_eda.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/test_info_eda_e2e.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/test_info_eda_integration.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/test_join_conditions.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/test_join_with_column_filter.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/test_local_executor.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/test_multi_destinations_subpackage.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/test_multiqs_column_transforms.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/test_multiqs_destination_dispatch.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/test_multiqs_remote_dispatch.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/test_multiqs_slug_sources_normalize.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/test_multiqs_sources_integration.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/test_pgsql_jsonb_filters.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/test_qs_principal.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/test_queryslug_concurrency.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/test_querysource_setup_airtable.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/test_qworker_config.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/test_remote_executor.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/test_route_registration.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/test_rss.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/test_rust_parsers.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/test_scheduler_core.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/test_scheduler_handler_integration.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/test_scheduler_handler_unit.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/test_scheduler_integration.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/test_scheduler_jobs.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/test_scheduler_multi_routing.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/test_scheduler_notifications.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/test_schema_introspectable.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/test_source_registry.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/test_source_s3.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/test_source_sharepoint.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/test_source_smartsheet.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/test_source_table.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/test_table_output_postgres.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/test_texplode.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/test_thread_file_refactor.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/test_thread_query_refactor.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/test_thread_source_base.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/test_threadquery_executor.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/test_zammad_search.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/unit/test_csv_writer_dataframe.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/unit/test_cython_filter_fallback.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/unit/test_datasource_redaction.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/unit/test_error_payload.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/unit/test_handler_output_status.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/unit/test_iter_format_dataframe.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/unit/test_multiqs_output_raise.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/unit/test_output_error.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/unit/test_provider_describe_columns.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/unit/test_provider_raw_query_validated.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/unit/test_qs_parsers_validated.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/unit/test_raw_query_cond_definition_wiring.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/unit/test_slug_describer.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/unit/test_udf_keyword_resolution.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tests/unit/test_vocabulary.py +0 -0
- {querysource-5.1.2 → querysource-5.1.4}/tox.ini +0 -0
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: sdd-brainstorm
|
|
3
|
+
description: Explore a feature idea through structured Q&A, codebase research, options, tradeoffs, and a committed SDD brainstorm document.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# SDD Brainstorm
|
|
7
|
+
|
|
8
|
+
## Full procedure and Codex adaptations
|
|
9
|
+
|
|
10
|
+
Before executing, read the [full sdd-brainstorm procedure](../../../.claude/commands/sdd-brainstorm.md)
|
|
11
|
+
and the [Codex adaptation contract](../../../docs/sdd/CODEX.md#codex-adaptation-contract).
|
|
12
|
+
Follow the full procedure for details omitted from this summary. The adaptation
|
|
13
|
+
contract and the Codex-specific instructions below override Claude runtime syntax
|
|
14
|
+
and legacy shell examples; retain all workflow gates and evidence requirements.
|
|
15
|
+
|
|
16
|
+
Use this skill when the user asks to run `sdd-brainstorm`, create a brainstorm,
|
|
17
|
+
or explore a feature idea before writing a formal spec.
|
|
18
|
+
|
|
19
|
+
Codex invocation: `$sdd-brainstorm <feature-slug> -- <notes>`.
|
|
20
|
+
|
|
21
|
+
## Purpose
|
|
22
|
+
|
|
23
|
+
Produce `sdd/proposals/<feature-slug>.brainstorm.md` from an idea. This is an
|
|
24
|
+
exploration artifact, not implementation code and not a spec.
|
|
25
|
+
|
|
26
|
+
Pipeline:
|
|
27
|
+
|
|
28
|
+
```text
|
|
29
|
+
$sdd-brainstorm -> review -> $sdd-spec -> $sdd-task -> $sdd-start
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## Guardrails
|
|
33
|
+
|
|
34
|
+
- Do not write implementation code.
|
|
35
|
+
- Use `sdd/templates/brainstorm.md`.
|
|
36
|
+
- Preserve the YAML frontmatter from the template.
|
|
37
|
+
- Always resolve and record `type` and `base_branch`.
|
|
38
|
+
- Always include concrete existing-code references with file paths and line
|
|
39
|
+
numbers.
|
|
40
|
+
- Verify packages in project dependency files before recommending them.
|
|
41
|
+
- Commit only the brainstorm file unless the user explicitly asks otherwise.
|
|
42
|
+
- Fill frontmatter `projects` (parts of the codebase, vocabulary `KNOWN_PROJECTS` in
|
|
43
|
+
`scripts/sdd/sdd_meta.py`; unknown values warn) and `tags` (2–6 kebab-case keywords) — FEAT-576.
|
|
44
|
+
|
|
45
|
+
## Flow Type
|
|
46
|
+
|
|
47
|
+
Ask these first unless the user already supplied explicit values:
|
|
48
|
+
|
|
49
|
+
1. Is this `feature` or `hotfix`?
|
|
50
|
+
2. For `feature`, which base branch? Default: `dev`. Use `staging` during a
|
|
51
|
+
release freeze or a parent feature branch for sub-features. For `hotfix`,
|
|
52
|
+
base is always `main`.
|
|
53
|
+
|
|
54
|
+
Defaults when unanswered: `type: feature`, `base_branch: dev`.
|
|
55
|
+
|
|
56
|
+
Validation:
|
|
57
|
+
|
|
58
|
+
- `type: hotfix` requires `base_branch: main`.
|
|
59
|
+
- `type: feature` with `base_branch: main` is invalid. Stop and explain that
|
|
60
|
+
features land on `dev`, `staging`, or a non-main parent feature branch.
|
|
61
|
+
|
|
62
|
+
## Workflow
|
|
63
|
+
|
|
64
|
+
1. Parse input:
|
|
65
|
+
- feature slug in kebab-case
|
|
66
|
+
- notes after `--`
|
|
67
|
+
- `intake: <staging-dir>` in the notes (FEAT-577): read its `intake.json` /
|
|
68
|
+
`synthesis.json`, treat the intake facts as answered, seed Round 1 from
|
|
69
|
+
the synthesis unknowns.
|
|
70
|
+
- optional `--type feature|hotfix`
|
|
71
|
+
- optional `--base-branch <branch>`
|
|
72
|
+
2. Run at least two Q&A rounds:
|
|
73
|
+
- Round 1: intent, users, expected behavior, integration points, success
|
|
74
|
+
criteria.
|
|
75
|
+
- Round 2: gaps, edge cases, failure modes, tradeoffs, assumptions.
|
|
76
|
+
3. Research the codebase:
|
|
77
|
+
- Run `wikitoolkit query "<focused question>"` before source scans.
|
|
78
|
+
- Inspect at least one relevant wiki page with `wikitoolkit page <id>` or
|
|
79
|
+
related entries when available.
|
|
80
|
+
- Use `rg` for source search.
|
|
81
|
+
- Read the source files before citing classes, functions, methods, imports,
|
|
82
|
+
or paths.
|
|
83
|
+
4. Build the Code Context section:
|
|
84
|
+
- User-provided snippets, preserved verbatim.
|
|
85
|
+
- Verified imports and signatures with paths and line numbers.
|
|
86
|
+
- Things searched for that do not exist.
|
|
87
|
+
5. Generate at least three solution options:
|
|
88
|
+
- name
|
|
89
|
+
- what it does
|
|
90
|
+
- pros and cons
|
|
91
|
+
- effort: Low, Medium, or High
|
|
92
|
+
- libraries/tools and existing code to reuse
|
|
93
|
+
- at least one less obvious approach
|
|
94
|
+
6. Recommend one option and explain the tradeoff.
|
|
95
|
+
7. Fill the remaining template sections:
|
|
96
|
+
- Problem Statement
|
|
97
|
+
- Constraints & Requirements
|
|
98
|
+
- Feature Description
|
|
99
|
+
- Capabilities
|
|
100
|
+
- Impact & Integration
|
|
101
|
+
- Open Questions
|
|
102
|
+
- Parallelism Assessment
|
|
103
|
+
8. Save `sdd/proposals/<feature-slug>.brainstorm.md`.
|
|
104
|
+
9. Commit only that brainstorm file:
|
|
105
|
+
- preserve unrelated staging; stop before committing if it is outside this run's scope
|
|
106
|
+
- stage only the brainstorm
|
|
107
|
+
- verify `git diff --cached --name-only`
|
|
108
|
+
- commit `sdd: add brainstorm for <feature-slug>`
|
|
109
|
+
|
|
110
|
+
## Output
|
|
111
|
+
|
|
112
|
+
Report:
|
|
113
|
+
|
|
114
|
+
```text
|
|
115
|
+
Brainstorm saved and committed: sdd/proposals/<feature-slug>.brainstorm.md
|
|
116
|
+
Recommended: Option <letter> - <name>
|
|
117
|
+
Effort: <Low|Medium|High>
|
|
118
|
+
Worktree isolation: <per-spec|mixed>
|
|
119
|
+
Open questions: <count>
|
|
120
|
+
Next: $sdd-spec <feature-slug>
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
## References
|
|
124
|
+
|
|
125
|
+
- `sdd/templates/brainstorm.md`
|
|
126
|
+
- `sdd/templates/spec.md`
|
|
127
|
+
- `sdd/WORKFLOW.md`
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: sdd-codereview
|
|
3
|
+
description: Code review a completed SDD task against acceptance criteria, code quality, security, and adversarial cross-checks.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# SDD Code Review
|
|
7
|
+
|
|
8
|
+
## Full procedure and Codex adaptations
|
|
9
|
+
|
|
10
|
+
Before executing, read the [full sdd-codereview procedure](../../../.claude/commands/sdd-codereview.md)
|
|
11
|
+
and the [Codex adaptation contract](../../../docs/sdd/CODEX.md#codex-adaptation-contract).
|
|
12
|
+
Follow the full procedure for details omitted from this summary. The adaptation
|
|
13
|
+
contract and the Codex-specific instructions below override Claude runtime syntax
|
|
14
|
+
and legacy shell examples; retain all workflow gates and evidence requirements.
|
|
15
|
+
|
|
16
|
+
Use this skill when the user asks to review a completed SDD task, run `sdd-codereview`, or perform an adversarial code review on completed task artifacts.
|
|
17
|
+
|
|
18
|
+
**Mandatory Deferred Findings Table**: Every CONFIRMED 🔴/🟡 finding not fixed in-review MUST be
|
|
19
|
+
attempted with `wikitoolkit ledger open` and listed in the report's Deferred findings table. The
|
|
20
|
+
ledger intentionally resolves to the main checkout. If a sandbox makes it read-only, do not request
|
|
21
|
+
broader filesystem access or create a worktree-local ledger; list the full finding with
|
|
22
|
+
`(NOT filed: shared ledger is read-only)`. Reviews with unfiled confirmed findings and an empty
|
|
23
|
+
Deferred table are invalid.
|
|
24
|
+
|
|
25
|
+
## Purpose
|
|
26
|
+
|
|
27
|
+
Reads the task file from `sdd/tasks/completed/`, loads all referenced source files and the parent spec, applies code review criteria (Correctness, Code Quality, Performance, Security, Documentation, Testing), and produces a structured review report.
|
|
28
|
+
|
|
29
|
+
## Guardrails
|
|
30
|
+
|
|
31
|
+
- Reads strictly completed tasks from `sdd/tasks/completed/`.
|
|
32
|
+
- Verify the chain of thought and code anchors: check actual files, classes, methods, and line ranges.
|
|
33
|
+
- Treat reviewer second-opinions as advisory: confirm, reject, or escalate each finding.
|
|
34
|
+
- Never report an unverifiable claim as a finding.
|
|
35
|
+
|
|
36
|
+
## Workflow
|
|
37
|
+
|
|
38
|
+
## Durable review boundary (FEAT-584)
|
|
39
|
+
Before feature review, settle owned attempts and supervised validations and close execution.
|
|
40
|
+
Unknown activity is a blocker, never evidence of an idle worktree. Persist the checkpoint,
|
|
41
|
+
record actual supported compaction outcome once per checkpoint/context, revalidate and start
|
|
42
|
+
a fresh reviewer. Unsupported contexts continue from checkpoint with an explicit reason.
|
|
43
|
+
Keep review criteria, adversarial checks, full lint, integration validation and ledger gates.
|
|
44
|
+
Changes after checkpoint require new hashes/evidence and invalidate old review coverage.
|
|
45
|
+
For sdd-done, preserve existing verification stamping, approval and push/merge policy;
|
|
46
|
+
do not run task closure again on base_branch and do not clean worktrees with unknown activity.
|
|
47
|
+
|
|
48
|
+
1. Resolve task:
|
|
49
|
+
- Accept full path, `TASK-NNN`, or slug.
|
|
50
|
+
- Match against `sdd/tasks/completed/TASK-*.md`.
|
|
51
|
+
2. Load context:
|
|
52
|
+
- Read the task markdown file.
|
|
53
|
+
- Read the referenced spec in `sdd/specs/`.
|
|
54
|
+
- Read every file in the task's "Files to Create/Modify" section.
|
|
55
|
+
- Read the Acceptance Criteria and Completion Note.
|
|
56
|
+
3. Review criteria:
|
|
57
|
+
- **Correctness & Logic**: Acceptance criteria satisfaction, edge cases, error paths.
|
|
58
|
+
- **Code Quality**: DRY, SOLID, abstraction seams, framework patterns.
|
|
59
|
+
- **Performance**: N+1 queries, async blocking calls, algorithmic efficiency.
|
|
60
|
+
- **Security**: Input validation, SQL/injection risks, credentials, auth.
|
|
61
|
+
- **Documentation**: Docstrings, type annotations, clarity.
|
|
62
|
+
- **Testing**: Test coverage against criteria, assertions, failure modes.
|
|
63
|
+
4. Adversarial cross-check:
|
|
64
|
+
- Run external reviewer (`codex exec review`) or spawn a dedicated read-only subagent.
|
|
65
|
+
- Supply only neutral brief: requirements, diff/commit, question.
|
|
66
|
+
- Synthesize agreements and disagreements.
|
|
67
|
+
5. Generate report:
|
|
68
|
+
- Summary, Critical, Major, Minor/Suggestions.
|
|
69
|
+
- **Deferred Findings table**: Every CONFIRMED 🔴/🟡 finding not fixed in-review MUST be attempted with `wikitoolkit ledger open` and listed in this table. If the shared ledger is read-only, retain the full finding with `(NOT filed: shared ledger is read-only)`.
|
|
70
|
+
- Acceptance Criteria check table.
|
|
71
|
+
- Adversarial cross-check disposition table.
|
|
72
|
+
- Positive highlights.
|
|
73
|
+
6. Optional save:
|
|
74
|
+
- Save to `sdd/reviews/TASK-<NNN>-review.md` if requested.
|
|
75
|
+
|
|
76
|
+
## References
|
|
77
|
+
|
|
78
|
+
- `sdd/tasks/completed/`
|
|
79
|
+
- `sdd/tasks/index/<feature>.json`
|
|
80
|
+
- `sdd/WORKFLOW.md`
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: sdd-done
|
|
3
|
+
description: Verify a completed SDD feature worktree, check for merge blockers, snapshot ledger issues, stamp task verification, push or open the PR, optionally sync hotfixes down, and clean the worktree.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# SDD Done
|
|
7
|
+
|
|
8
|
+
## Full procedure and Codex adaptations
|
|
9
|
+
|
|
10
|
+
Before executing, read the [full sdd-done procedure](../../../.claude/commands/sdd-done.md)
|
|
11
|
+
and the [Codex adaptation contract](../../../docs/sdd/CODEX.md#codex-adaptation-contract).
|
|
12
|
+
Follow the full procedure for details omitted from this summary. The adaptation
|
|
13
|
+
contract and the Codex-specific instructions below override Claude runtime syntax
|
|
14
|
+
and legacy shell examples; retain all workflow gates and evidence requirements.
|
|
15
|
+
|
|
16
|
+
Use this skill when the user asks to run `sdd-done`, close a feature, push an
|
|
17
|
+
SDD worktree, open the feature PR, or clean up a completed SDD worktree.
|
|
18
|
+
|
|
19
|
+
Codex invocation: `$sdd-done FEAT-NNN [--dry-run] [--merge] [--force] [--resolve-jira] [--sync-down]`.
|
|
20
|
+
|
|
21
|
+
## Purpose
|
|
22
|
+
|
|
23
|
+
Verify evidence in the feature worktree, check for merge blockers scoped to
|
|
24
|
+
the current feature, snapshot ledger issues on base branch, stamp verification
|
|
25
|
+
on the feature branch, push it, open or describe the PR, and remove the worktree
|
|
26
|
+
when safe.
|
|
27
|
+
|
|
28
|
+
## Guardrails
|
|
29
|
+
|
|
30
|
+
- Run from the main repo on the spec's `base_branch`, or from the feature
|
|
31
|
+
worktree for the PR flow. `--merge` and `--sync-down` require the main repo.
|
|
32
|
+
- Do not modify the spec.
|
|
33
|
+
- Do not mark tasks done unless there is evidence in the worktree.
|
|
34
|
+
- Always show a verification report before writing closeout state.
|
|
35
|
+
- Hotfixes never merge directly to `main`.
|
|
36
|
+
- Hotfixes never push directly to `main`.
|
|
37
|
+
- For hotfixes, print a manual `gh pr create --base main` command instead of
|
|
38
|
+
creating or merging the PR automatically.
|
|
39
|
+
- Use `--sync-down` only after the hotfix PR has merged to `main`.
|
|
40
|
+
- Use `--sync-dev` only as a deprecated alias for `--sync-down`.
|
|
41
|
+
- Merge gate checks apply only to `--merge` flag, not PR flow.
|
|
42
|
+
- Ledger snapshots use throwaway worktrees and never modify active worktrees.
|
|
43
|
+
- Hotfixes skip ledger snapshots.
|
|
44
|
+
- Bounded retry for rejected pushes (max 3 attempts).
|
|
45
|
+
|
|
46
|
+
## Workflow
|
|
47
|
+
|
|
48
|
+
## Durable review boundary (FEAT-584)
|
|
49
|
+
Before feature review, settle owned attempts and supervised validations and close execution.
|
|
50
|
+
Unknown activity is a blocker, never evidence of an idle worktree. Persist the checkpoint,
|
|
51
|
+
record actual supported compaction outcome once per checkpoint/context, revalidate and start
|
|
52
|
+
a fresh reviewer. Unsupported contexts continue from checkpoint with an explicit reason.
|
|
53
|
+
Keep review criteria, adversarial checks, full lint, integration validation and ledger gates.
|
|
54
|
+
Changes after checkpoint require new hashes/evidence and invalidate old review coverage.
|
|
55
|
+
For sdd-done, preserve existing verification stamping, approval and push/merge policy;
|
|
56
|
+
do not run task closure again on base_branch and do not clean worktrees with unknown activity.
|
|
57
|
+
|
|
58
|
+
1. Resolve feature:
|
|
59
|
+
- scan `sdd/tasks/index/*.json`, excluding `_orphans.json`
|
|
60
|
+
- match `feature_id`, numeric suffix, exact feature slug, or slug substring
|
|
61
|
+
- read `feature`, `feature_id`, `spec`, `type`, and `base_branch`
|
|
62
|
+
2. Verify branch and location:
|
|
63
|
+
- resolve `MAIN_ROOT` from the absolute `git-common-dir` parent and
|
|
64
|
+
`WORKTREES_DIR` as `<MAIN_ROOT>/.claude/worktrees`
|
|
65
|
+
- compare absolute `git-dir` and `git-common-dir` to detect `IN_WORKTREE`
|
|
66
|
+
- in the main checkout, current branch must equal `base_branch`
|
|
67
|
+
- in a linked worktree, verify it is the selected feature's worktree;
|
|
68
|
+
refuse `--merge` and `--sync-down` (including `--sync-dev`)
|
|
69
|
+
- address primary-checkout paths through `MAIN_ROOT` / `WORKTREES_DIR`;
|
|
70
|
+
never change to the primary checkout to bypass worktree restrictions
|
|
71
|
+
3. Locate worktree:
|
|
72
|
+
- prefer `git worktree list` match for `feat-<FEAT-ID>` or hotfix branch
|
|
73
|
+
- if missing, check remote/local branches and report next steps
|
|
74
|
+
4. Gather evidence per task:
|
|
75
|
+
- commits matching task ID or slug in the worktree
|
|
76
|
+
- files listed in each task's "Files to Create / Modify" table exist in the
|
|
77
|
+
worktree
|
|
78
|
+
- do not rerun the whole test suite here; tests should have run during task
|
|
79
|
+
execution
|
|
80
|
+
4.5. Full lint pass, once per feature:
|
|
81
|
+
- resolve changed Python files with `git diff --name-only --diff-filter=ACMR
|
|
82
|
+
origin/<base_branch>...HEAD -- '*.py'` from the feature worktree
|
|
83
|
+
- `--dry-run`: run only `ruff check` and report; never fix or commit
|
|
84
|
+
- otherwise run Ruff fixes and the configured Black formatter on those
|
|
85
|
+
files, inspect the diff, commit only those paths, then run full `ruff check`
|
|
86
|
+
- keep fixes behavior-neutral; when behavior changes, run the feature-tier
|
|
87
|
+
selector from `scripts.sdd.select_tests` with this feature's task files
|
|
88
|
+
before committing; refresh checkpoint/review evidence after any change
|
|
89
|
+
- report unfixable findings under Lint residual; residual `E9`, `F63`, `F7`
|
|
90
|
+
or `F82` errors block normal closeout and enter the issues/confirmation path
|
|
91
|
+
5. Classify:
|
|
92
|
+
- `VERIFIED`: commit found and files exist
|
|
93
|
+
- `PARTIAL`: commit found but files are missing
|
|
94
|
+
- `NO EVIDENCE`: neither commits nor files support completion
|
|
95
|
+
6. Present verification report:
|
|
96
|
+
- worktree
|
|
97
|
+
- branch
|
|
98
|
+
- commit count
|
|
99
|
+
- task count by status
|
|
100
|
+
- task-by-task evidence
|
|
101
|
+
- lint residuals and any missing review evidence
|
|
102
|
+
7. Respect flags:
|
|
103
|
+
- `--dry-run`: stop after the report
|
|
104
|
+
- `--force`: allow forced closeout with partial/no evidence noted
|
|
105
|
+
- otherwise ask before closing if any task is not verified
|
|
106
|
+
8. Stamp verification in the worktree branch (closing any task the lane left open):
|
|
107
|
+
- require staging to contain only this feature's owned changes before the
|
|
108
|
+
close step stages its moves; never reset unrelated staging
|
|
109
|
+
- verified is not closed: for each task being closed whose file is still in
|
|
110
|
+
`sdd/tasks/active/` or whose index status is not `done`/`done-with-issues`
|
|
111
|
+
(lanes such as `/sdd-fix` commit code without closing), run
|
|
112
|
+
`scripts/sdd/close_task.sh <TASK-ID> <feature-slug> <verification>` inside
|
|
113
|
+
the worktree — never on `base_branch` (FEAT-414), then set its status to
|
|
114
|
+
`done-with-issues` when verification is `partial`/`forced`; leave tasks
|
|
115
|
+
the lane already closed untouched, and skip (with a warning) any id not in
|
|
116
|
+
the index
|
|
117
|
+
- set each task `verification` to `verified`, `partial`, or `forced` in
|
|
118
|
+
`sdd/tasks/index/<feature>.json` inside the worktree
|
|
119
|
+
- set feature `completed_at` only when all tasks are done
|
|
120
|
+
- run `scripts/sdd/heal_orphans.sh <feature-slug>` inside the worktree
|
|
121
|
+
(PR flow and `--merge` alike)
|
|
122
|
+
- stage only the index and this feature's task files, verify cached names
|
|
123
|
+
- commit `sdd: close tasks for FEAT-NNN - <feature-slug>`
|
|
124
|
+
9. Push feature branch:
|
|
125
|
+
- `git -C <worktree> push origin <branch>`
|
|
126
|
+
10. Check merge blockers (feature flows only):
|
|
127
|
+
- If `--merge` flag is set and not a hotfix, run `wikitoolkit ledger blockers <FEAT-ID>`
|
|
128
|
+
- The command prints plain-text blocker lines (never JSON) and exits non-zero
|
|
129
|
+
exactly when blockers exist — gate on the **exit code**, not on parsing its output
|
|
130
|
+
- If blockers found and not `--force`, refuse merge and list the blockers
|
|
131
|
+
(`wikitoolkit ledger acknowledge <ISSUE-ID> --reason "..." --actor human:<name>`
|
|
132
|
+
is how a human resolves one)
|
|
133
|
+
- If `--force`, warn but proceed with merge
|
|
134
|
+
|
|
135
|
+
11. Snapshot ledger issues (feature flows only):
|
|
136
|
+
- For features (not hotfixes), `git fetch origin <BASE_BRANCH>` then create a
|
|
137
|
+
throwaway detached worktree at `origin/<BASE_BRANCH>` (`git worktree add --detach`)
|
|
138
|
+
- Run `wikitoolkit ledger export` there; only when its output contains `(changed)`:
|
|
139
|
+
`git add sdd/ledger/issues.jsonl`, commit `sdd: ledger snapshot for <FEAT-ID>`,
|
|
140
|
+
and `git push origin HEAD:<BASE_BRANCH>`
|
|
141
|
+
- On a rejected push, fetch and create a fresh throwaway worktree at the
|
|
142
|
+
updated remote base, re-export, commit and retry — up to 3 attempts,
|
|
143
|
+
then warn and continue without failing `$sdd-done`
|
|
144
|
+
- Remove only clean, owned, idle throwaway worktrees without force; report
|
|
145
|
+
any retained worktree requiring recovery instead of deleting its changes
|
|
146
|
+
- Skip the snapshot entirely for hotfixes
|
|
147
|
+
|
|
148
|
+
12. Integrate:
|
|
149
|
+
- If `base_branch == main`, refuse automatic merge or PR creation. Print
|
|
150
|
+
the manual hotfix PR command:
|
|
151
|
+
`gh pr create --base main --head <branch> --title "<title>" --body "<verification summary>"`.
|
|
152
|
+
- If feature and no `--merge`, run `gh pr create --base <base_branch> --head <branch>`.
|
|
153
|
+
- If `gh` is missing or not authenticated, print the manual command.
|
|
154
|
+
- If feature and `--merge`, merge into `base_branch`, run
|
|
155
|
+
`scripts/sdd/heal_orphans.sh <feature-slug>`, commit any staged orphan
|
|
156
|
+
cleanup, and push `base_branch`.
|
|
157
|
+
13. Hotfix sync-down:
|
|
158
|
+
- only with `--sync-down` or deprecated `--sync-dev`
|
|
159
|
+
- verify feature branch is ancestor of `origin/main`
|
|
160
|
+
- merge into `staging`, abort cleanly on conflict
|
|
161
|
+
- merge into `dev`, abort cleanly on conflict
|
|
162
|
+
- leave user on `main`
|
|
163
|
+
14. Resolve Jira if requested:
|
|
164
|
+
- find Jira key in spec or proposal metadata
|
|
165
|
+
- prefer Jira MCP tools if available
|
|
166
|
+
- fallback to configured Jira environment variables
|
|
167
|
+
- transition to Done, Resolved, Ready for UAT, Complete, or Close
|
|
168
|
+
- report missing credentials or missing transitions without failing closeout
|
|
169
|
+
15. Cleanup:
|
|
170
|
+
- remove the worktree only after successful push/PR or merge path
|
|
171
|
+
- if running inside it, leave the feature worktree for an allowed directory
|
|
172
|
+
before removing it; if host restrictions prevent this, report cleanup pending
|
|
173
|
+
- if uncommitted changes exist in the worktree, ask before force removal
|
|
174
|
+
- prune stale metadata if the worktree was already removed
|
|
175
|
+
- delete local feature branch only when safe and merged/pushed
|
|
176
|
+
|
|
177
|
+
## Output
|
|
178
|
+
|
|
179
|
+
Report:
|
|
180
|
+
|
|
181
|
+
```text
|
|
182
|
+
FEAT-NNN - <title>: <closed>/<total> tasks closed
|
|
183
|
+
Branch pushed: <branch>
|
|
184
|
+
PR opened: <url> or manual command printed
|
|
185
|
+
Worktree removed: .claude/worktrees/<name>
|
|
186
|
+
Jira: <key> -> Done, when requested and successful
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
## References
|
|
190
|
+
|
|
191
|
+
- `sdd/tasks/index/<feature>.json`
|
|
192
|
+
- `sdd/tasks/active/`
|
|
193
|
+
- `sdd/tasks/completed/`
|
|
194
|
+
- `scripts/sdd/sdd_meta.py`
|
|
195
|
+
- `scripts/sdd/heal_orphans.sh`
|
|
196
|
+
- `sdd/WORKFLOW.md`
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: sdd-explain
|
|
3
|
+
description: Explain how a subsystem, component, or symbol works in the current project, grounded in the real codebase with architecture maps or deep traces.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# SDD Explain
|
|
7
|
+
|
|
8
|
+
## Full procedure and Codex adaptations
|
|
9
|
+
|
|
10
|
+
Before executing, read the [full sdd-explain procedure](../../../.claude/commands/sdd-explain.md)
|
|
11
|
+
and the [Codex adaptation contract](../../../docs/sdd/CODEX.md#codex-adaptation-contract).
|
|
12
|
+
Follow the full procedure for details omitted from this summary. The adaptation
|
|
13
|
+
contract and the Codex-specific instructions below override Claude runtime syntax
|
|
14
|
+
and legacy shell examples; retain all workflow gates and evidence requirements.
|
|
15
|
+
|
|
16
|
+
Use this skill when the user asks to explain how a subsystem, component, or symbol works in the project, onboarding architecture explanations, or deep code traces.
|
|
17
|
+
|
|
18
|
+
Invocation: `sdd-explain [--deep] <subsystem | component | symbol | question>`.
|
|
19
|
+
|
|
20
|
+
## Purpose
|
|
21
|
+
|
|
22
|
+
Provide code-grounded explanations of how the repository actually works right now. Produces Subsystem Maps (architecture/onboarding) by default, or Implementation Traces with `--deep`.
|
|
23
|
+
|
|
24
|
+
## Guardrails
|
|
25
|
+
|
|
26
|
+
- **Read before explaining**: Never describe an import path, class, method, registry, or decorator without locating and reading it first.
|
|
27
|
+
- **Cite with grep anchors**: Reference symbols by name and file path, not brittle line numbers.
|
|
28
|
+
- **State evidence**: Explicitly state which files and symbols were read.
|
|
29
|
+
- **No unsolicited fixes/code**: This skill explains; it does not refactor or modify code.
|
|
30
|
+
|
|
31
|
+
## Workflow
|
|
32
|
+
|
|
33
|
+
1. Parse arguments:
|
|
34
|
+
- Check for `--deep` (or `-d`) flag for Implementation Trace mode.
|
|
35
|
+
- Extract target subsystem, component, or symbol.
|
|
36
|
+
2. Locate code:
|
|
37
|
+
- Use `find_by_name`, `grep_search`, or `rg` to find real symbols and files.
|
|
38
|
+
- Read the source files.
|
|
39
|
+
3. Subsystem Map Mode (default):
|
|
40
|
+
- Locate: package entry points and anchor symbols.
|
|
41
|
+
- What it is: single responsibility and system role.
|
|
42
|
+
- The cast: concrete ABCs, registries, mixins, managers.
|
|
43
|
+
- Data & control flow: end-to-end request lifecycle and boundaries.
|
|
44
|
+
- Conventions & invariants: architectural constraints and why they exist.
|
|
45
|
+
- Where to look next: key files and adjacent subsystems.
|
|
46
|
+
4. Implementation Trace Mode (`--deep`):
|
|
47
|
+
- Target resolution: exact symbols and files resolved.
|
|
48
|
+
- Execution trace: call-by-call walk through async boundaries, decorators, dispatches.
|
|
49
|
+
- Contracts & types: Pydantic models, protocol signatures, validation rules.
|
|
50
|
+
- Edge cases & failure modes: error handling, fallbacks, timeouts.
|
|
51
|
+
- Coupling map: dependencies and callers.
|
|
52
|
+
- Gotchas: non-obvious behaviors and historical pitfalls.
|
|
53
|
+
|
|
54
|
+
## References
|
|
55
|
+
|
|
56
|
+
- `AGENTS.md`
|
|
57
|
+
- `.agent/CONTEXT.md`
|
|
58
|
+
- `sdd/WORKFLOW.md`
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: sdd-fix
|
|
3
|
+
description: Drain the SDD work ledger — plan-fix, claim, route to the Fast or SDD lane, close by evidence, release the rest.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# SDD Fix
|
|
7
|
+
|
|
8
|
+
Drain the SDD work ledger: plan a severity-ordered, file-grouped batch with
|
|
9
|
+
`wikitoolkit ledger plan-fix --json`, claim the selected issues, route each group to the
|
|
10
|
+
Fast lane (branch → PR) or the SDD lane (spec → tasks → worktree), close by evidence and
|
|
11
|
+
release the rest. The twins never re-implement ordering, grouping or lane rules — the plan is
|
|
12
|
+
the contract (`planner_version` is checked before use).
|
|
13
|
+
|
|
14
|
+
**Read-only ledger**: the ledger resolves to the main checkout. If a sandbox makes it read-only,
|
|
15
|
+
report `shared ledger is read-only`, do not request broader filesystem access, do not create a
|
|
16
|
+
worktree-local ledger, and exit non-zero WITHOUT claiming anything.
|
|
17
|
+
|
|
18
|
+
## Usage
|
|
19
|
+
$sdd-fix # interactive picker, severity-ordered
|
|
20
|
+
$sdd-fix <issue-id> # non-interactive: that issue's whole group
|
|
21
|
+
$sdd-fix --top N # non-interactive: first N groups
|
|
22
|
+
$sdd-fix ... --kind K --severity S --lane fast|sdd # --lane fast is REFUSED (exit 1) for critical or vulnerability groups
|
|
23
|
+
|
|
24
|
+
## Steps
|
|
25
|
+
1. **Plan** — `wikitoolkit ledger plan-fix --json` (pass `--kind/--severity/--lane` through). Parse stdout as a FixPlan.
|
|
26
|
+
Require a successful exit and `planner_version == "1"` before selecting or claiming anything.
|
|
27
|
+
Reject missing/unsupported versions or malformed output; never re-implement ordering, grouping or lane rules.
|
|
28
|
+
`--lane fast` is refused for critical or vulnerability groups; stop on that planner error.
|
|
29
|
+
The plan presents severity-ordered groups with metadata: group_id, max_severity, lane assignment with reason,
|
|
30
|
+
suggested_slug, and the list of issues/files per group. In interactive mode, render a table showing each group's
|
|
31
|
+
key attributes for selection.
|
|
32
|
+
2. **Select** — picker, or deterministic resolution from the arguments (issue-id → its whole group; --top N → first N groups).
|
|
33
|
+
Require a positive N. An empty plan or an issue absent from it is a no-op with an explanation, never a guessed selection.
|
|
34
|
+
3. **Claim** — one `wikitoolkit ledger claim <issue-id> --actor agent:sdd-fix` per issue in the group, immediately before
|
|
35
|
+
executing. The plan is a snapshot; the claim is authoritative: a non-zero exit DROPS that issue and continues. Never close an
|
|
36
|
+
issue merely because an earlier plan listed it. Skip groups with no successful claims; preserve the planned lane for remaining issues.
|
|
37
|
+
4. **Prime** — `wikitoolkit ledger context <group.files…> --max-tokens 3000` (full repo-relative paths from the plan, never basenames).
|
|
38
|
+
5. **Route** by `group.lane`:
|
|
39
|
+
- Before changing branches, require a clean checkout; never carry unrelated changes into a fix.
|
|
40
|
+
If execution cannot proceed, release successful claims in step 7.
|
|
41
|
+
- **Fast lane** (`lane == "fast"`): in the MAIN checkout (no worktree), `git fetch origin dev && git switch -c fix/<issue-short-id>-<suggested_slug> origin/dev`,
|
|
42
|
+
edit, run the affected package's tests, commit, `git push -u origin <branch>`, then `gh pr create --base dev --title … --body …`.
|
|
43
|
+
ALWAYS a PR — there is no direct-push path.
|
|
44
|
+
- **SDD lane** (`lane == "sdd"`): if any `group.parents[].open` is true, reuse that parent spec (`$sdd-task <spec> --from-issue …` per issue);
|
|
45
|
+
otherwise `python -m scripts.sdd.reserve_ids --kind feature --count 1 --base-branch dev --label <suggested_slug>`, author
|
|
46
|
+
`sdd/specs/<suggested_slug>.spec.md` from the group, `$sdd-task`, then
|
|
47
|
+
`python -m scripts.sdd.ensure_worktree --slug <suggested_slug> --feature-id FEAT-<NNN>`. `$sdd-done <FEAT-ID>` closes it out unchanged.
|
|
48
|
+
For a new spec, the slug comes from `suggested_slug`; never re-derive it. For a reused parent,
|
|
49
|
+
use that parent index's existing slug, feature_id, spec and base_branch when provisioning the worktree.
|
|
50
|
+
Task creation alone is not resolution: implement and validate the task in that worktree before step 6.
|
|
51
|
+
6. **Close** — two keys, fail-closed: an issue closes only if the implementing agent asserts its id as resolved AND at least one of
|
|
52
|
+
its `files` appears in `git diff --name-only <base>...HEAD`. Then `wikitoolkit ledger close <issue-id> --reason "<what changed>"
|
|
53
|
+
--actor agent:sdd-fix --resolved-by commit:<sha>` (fast, the implementing commit on the pushed PR branch)
|
|
54
|
+
or `--resolved-by task:TASK-<NNN>` (SDD, a completed and validated task).
|
|
55
|
+
Capture `<base>` before implementation and check the diff from the implementing checkout.
|
|
56
|
+
Do not infer a merge or fabricate a merge SHA merely because a PR was opened.
|
|
57
|
+
7. **Release** — every claimed issue that failed either key: `wikitoolkit ledger unclaim <issue-id> --reason "<why>" --actor agent:sdd-fix`.
|
|
58
|
+
Run release on every exit path, including test/push/PR failures or interrupted execution.
|
|
59
|
+
If unclaim itself fails, report the issue ID and reason for recovery; do not claim success.
|
|
60
|
+
Never leave an issue claimed silently; acknowledgement stays human-only and out of scope here.
|
|
61
|
+
|
|
62
|
+
## Output
|
|
63
|
+
Per group processed:
|
|
64
|
+
- Lane used (Fast/SDD)
|
|
65
|
+
- Branch/PR URL (Fast) or FEAT-ID + worktree path (SDD)
|
|
66
|
+
- Issues closed with their resolved_by evidence
|
|
67
|
+
- Issues released with reason
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: sdd-fromjira
|
|
3
|
+
description: Bootstrap an SDD Brainstorm from a Jira ticket, conducting Q&A and codebase research.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# SDD From Jira
|
|
7
|
+
|
|
8
|
+
## Full procedure and Codex adaptations
|
|
9
|
+
|
|
10
|
+
Before executing, read the [full sdd-fromjira procedure](../../../.claude/commands/sdd-fromjira.md)
|
|
11
|
+
and the [Codex adaptation contract](../../../docs/sdd/CODEX.md#codex-adaptation-contract).
|
|
12
|
+
Follow the full procedure for details omitted from this summary. The adaptation
|
|
13
|
+
contract and the Codex-specific instructions below override Claude runtime syntax
|
|
14
|
+
and legacy shell examples; retain all workflow gates and evidence requirements.
|
|
15
|
+
|
|
16
|
+
Use this skill when the user asks to bootstrap an SDD brainstorm from a Jira ticket, run `sdd-fromjira`, or convert a Jira issue into a feature proposal.
|
|
17
|
+
|
|
18
|
+
Invocation: `sdd-fromjira <JIRA_KEY> [--complexity=fix|simple|standard|complex] [--skip-qa]`.
|
|
19
|
+
|
|
20
|
+
## Purpose
|
|
21
|
+
|
|
22
|
+
Fetch requirements from a Jira ticket, structure them, conduct targeted Q&A, research the codebase for reusable components, and produce a worker-ready brainstorm document at `sdd/proposals/<issue-key>-<slug>.brainstorm.md`.
|
|
23
|
+
|
|
24
|
+
## Guardrails
|
|
25
|
+
|
|
26
|
+
- Read-only on Jira: do not modify the Jira issue in this skill.
|
|
27
|
+
- Always use the official template at `sdd/templates/brainstorm.md`.
|
|
28
|
+
- Always commit the brainstorm file to git upon generation.
|
|
29
|
+
- Never write implementation code in the brainstorm document.
|
|
30
|
+
- Set flow type in frontmatter: `type: feature, base_branch: dev` (or `hotfix`/`main` for bug tickets).
|
|
31
|
+
- Fill frontmatter `projects` (parts of the codebase, vocabulary `KNOWN_PROJECTS` in
|
|
32
|
+
`scripts/sdd/sdd_meta.py`; unknown values warn) and `tags` (2–6 kebab-case keywords) — FEAT-576.
|
|
33
|
+
|
|
34
|
+
## Workflow
|
|
35
|
+
|
|
36
|
+
1. Fetch Jira ticket:
|
|
37
|
+
- Use Jira MCP tool (`jira_get_issue`) if available, or curl fallback via
|
|
38
|
+
`JIRA_INSTANCE`, `JIRA_USERNAME`, and `JIRA_API_TOKEN` without logging secrets.
|
|
39
|
+
- Extract summary, description, acceptance criteria, components, labels, subtasks.
|
|
40
|
+
2. Parse content:
|
|
41
|
+
- Convert description/ADF to plain text.
|
|
42
|
+
- Extract acceptance criteria and constraints.
|
|
43
|
+
3. Classify complexity:
|
|
44
|
+
- `fix` (1 round Q&A), `simple` (2 rounds), `standard` (2-3 rounds), `complex` (3+ rounds).
|
|
45
|
+
- `--complexity` overrides classification; `--skip-qa` skips the interview
|
|
46
|
+
when the supplied Jira description is exhaustive.
|
|
47
|
+
4. Present ticket context:
|
|
48
|
+
- Show summary, components, AC, and complexity assessment to user.
|
|
49
|
+
5. Interactive Q&A:
|
|
50
|
+
- Target genuine gaps left open by Jira (not generic questions).
|
|
51
|
+
6. Codebase research:
|
|
52
|
+
- Run `wikitoolkit query` before source scans.
|
|
53
|
+
- Read source files to build verified Code Context (signatures, imports, and what does NOT exist).
|
|
54
|
+
7. Generate 3+ options:
|
|
55
|
+
- Map each option against Jira AC.
|
|
56
|
+
- Recommend one option with explicit tradeoff rationale.
|
|
57
|
+
8. Save and commit:
|
|
58
|
+
- Save to `sdd/proposals/<issue-key>-<slug>.brainstorm.md`.
|
|
59
|
+
- Stage only the brainstorm file and commit: `sdd: add brainstorm from Jira <issue-key> — <slug>`.
|
|
60
|
+
|
|
61
|
+
## References
|
|
62
|
+
|
|
63
|
+
- `sdd/templates/brainstorm.md`
|
|
64
|
+
- `sdd/WORKFLOW.md`
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: sdd-insight
|
|
3
|
+
description: Analyze Claude Code transcripts and repo-level SDD Process Discipline from the sdd/ artifact tree using the local Insight engine.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# SDD Insight
|
|
7
|
+
|
|
8
|
+
## Full procedure and Codex adaptations
|
|
9
|
+
|
|
10
|
+
Before executing, read the [full sdd-insight procedure](../../../.claude/commands/sdd-insight.md)
|
|
11
|
+
and the [Codex adaptation contract](../../../docs/sdd/CODEX.md#codex-adaptation-contract).
|
|
12
|
+
Follow the full procedure for details omitted from this summary. The adaptation
|
|
13
|
+
contract and the Codex-specific instructions below override Claude runtime syntax
|
|
14
|
+
and legacy shell examples; retain all workflow gates and evidence requirements.
|
|
15
|
+
|
|
16
|
+
Use this skill when the user asks to analyze AI fluency, review prompt collaboration patterns, or evaluate repo-level SDD Process Discipline adherence.
|
|
17
|
+
|
|
18
|
+
Invocation: `$sdd-insight [TRANSCRIPT_PATH] [--no-open] [--sdd-dir PATH | --no-sdd]`.
|
|
19
|
+
|
|
20
|
+
## Purpose
|
|
21
|
+
|
|
22
|
+
Execute `scripts/sdd/insight.py` to produce a two-layer analytical report:
|
|
23
|
+
1. Personal AI-fluency skill map (score, archetype, competencies, growth levers) from transcripts.
|
|
24
|
+
2. Repo-level SDD Process Discipline panel (pipeline progression, decomposition quality, AC coverage, cycle closure, review rigor) computed deterministically from `sdd/`.
|
|
25
|
+
|
|
26
|
+
## Guardrails
|
|
27
|
+
|
|
28
|
+
- Transcripts and `sdd/` files are read strictly read-only.
|
|
29
|
+
- Always run within the virtual environment (`source .venv/bin/activate`).
|
|
30
|
+
- The engine reads Claude Code JSONL transcripts (default `~/.claude/projects`).
|
|
31
|
+
Native Codex session logs are not supported by this workflow; never present
|
|
32
|
+
Claude-derived personal scores as measurements of Codex sessions.
|
|
33
|
+
- Use a fresh report directory under `artifacts/` so old analysis cannot leak
|
|
34
|
+
into a new run. Do not delete previous reports.
|
|
35
|
+
|
|
36
|
+
## Workflow
|
|
37
|
+
|
|
38
|
+
1. Parse the optional transcript path and supported flags into a shell argument
|
|
39
|
+
array `insight_args`. Preserve paths as single quoted arguments; never eval
|
|
40
|
+
user text. With no arguments, use `insight_args=()`.
|
|
41
|
+
2. Run deterministic measurement from the repository root:
|
|
42
|
+
```bash
|
|
43
|
+
source .venv/bin/activate
|
|
44
|
+
mkdir -p artifacts
|
|
45
|
+
insight_run_dir=$(mktemp -d artifacts/sdd-insight.XXXXXX)
|
|
46
|
+
python3 scripts/sdd/insight.py --evidence "$insight_run_dir/evidence.json" --sdd-dir sdd --no-open --quiet -o "$insight_run_dir/report.html" "${insight_args[@]}"
|
|
47
|
+
```
|
|
48
|
+
Check the exit status and evidence/report files. If no compatible transcripts
|
|
49
|
+
are found, report that limitation and stop; do not invent scores or promise
|
|
50
|
+
a standalone SDD report that this engine did not produce.
|
|
51
|
+
3. If the `sdd-insight` analysis workflow capability is available, give it the
|
|
52
|
+
absolute evidence path and `reference/sdd-insight/ai-fluency-framework.md`.
|
|
53
|
+
Save its JSON to this run's `analysis.json`, then render with matching evidence:
|
|
54
|
+
```bash
|
|
55
|
+
python3 scripts/sdd/insight.py --analysis "$insight_run_dir/analysis.json" --analysis-evidence "$insight_run_dir/evidence.json" --sdd-dir sdd -o "$insight_run_dir/report.html" "${insight_args[@]}"
|
|
56
|
+
```
|
|
57
|
+
Otherwise use the complete deterministic report. A fingerprint mismatch also
|
|
58
|
+
falls back to deterministic output; disclose which report was produced.
|
|
59
|
+
4. Link the final HTML report and present its findings, identifying the transcript source:
|
|
60
|
+
- Personal score and archetype.
|
|
61
|
+
- Top growth lever.
|
|
62
|
+
- Repo SDD Process Discipline score and weakest dimension.
|
|
63
|
+
|
|
64
|
+
## References
|
|
65
|
+
|
|
66
|
+
- `scripts/sdd/insight.py`
|
|
67
|
+
- `reference/sdd-insight/ai-fluency-framework.md`
|
|
68
|
+
- `sdd/WORKFLOW.md`
|