Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
227 commits
Select commit Hold shift + click to select a range
d87622b
feat(api): OAuth 2.1 server with unified API+MCP process
rboni-dk Mar 18, 2026
cece7a4
Merge remote-tracking branch 'origin/enterprise' into feat/TG-993-api…
Mar 20, 2026
e08be23
Merge remote-tracking branch 'origin/enterprise' into feat/TG-993-api…
Mar 24, 2026
5295cf5
Merge remote-tracking branch 'origin/enterprise' into feat/TG-993-api…
Mar 24, 2026
4571bb8
Merge remote-tracking branch 'origin/enterprise' into feat/TG-993-api…
Mar 24, 2026
4c51670
refactor(TG-1010): extract source data logic into shared service
rboni-dk Mar 25, 2026
d291078
Merge remote-tracking branch 'origin/enterprise' into feat/TG-1010-so…
Mar 26, 2026
a6ff168
Merge remote-tracking branch 'origin/enterprise' into feat/TG-1010-so…
Mar 27, 2026
27819b9
Merge remote-tracking branch 'origin/enterprise' into feat/TG-1010-so…
Mar 27, 2026
dba2662
Merge remote-tracking branch 'origin/enterprise' into feat/TG-1010-so…
Mar 27, 2026
533bf29
Apply 3 suggestion(s) to 1 file(s)
rboni-dk Mar 30, 2026
af7448a
Merge remote-tracking branch 'origin/enterprise' into feat/TG-1010-so…
Mar 30, 2026
d3e449e
fix(api): address OAuth MR review feedback
rboni-dk Mar 30, 2026
ccbd79e
fix: bump Helm chart version to 1.2.0, update submodule
rboni-dk Mar 30, 2026
11fc5aa
Merge remote-tracking branch 'origin/enterprise' into feat/TG-993-api…
rboni-dk Mar 30, 2026
6010938
feat(api): job execution queue with state machine and scheduler integ…
rboni-dk Mar 19, 2026
35b94e2
Apply 1 suggestion(s) to 1 file(s)
rboni-dk Mar 31, 2026
12de36a
Merge remote-tracking branch 'origin/enterprise' into feat/TG-1010-so…
Mar 31, 2026
136be4a
Merge remote-tracking branch 'origin/enterprise' into feat/TG-1002-jo…
Mar 31, 2026
4451fac
Merge remote-tracking branch 'origin/enterprise' into feat/TG-993-api…
Mar 31, 2026
bfe30c2
Merge branch 'main' into 'enterprise'
aarthy-dk Mar 31, 2026
b1bab7a
Merge branch 'feat/TG-993-api-oauth-server' into 'enterprise'
Mar 31, 2026
28761b3
Merge remote-tracking branch 'origin/enterprise' into feat/TG-1010-so…
Mar 31, 2026
99e306a
Merge remote-tracking branch 'origin/enterprise' into feat/TG-1002-jo…
Mar 31, 2026
ae48071
Merge branch 'feat/TG-1010-source-data-service-extraction' into 'ente…
Mar 31, 2026
7ae4acd
Merge remote-tracking branch 'origin/enterprise' into feat/TG-1002-jo…
Mar 31, 2026
1688707
feat(api): add v1 execution endpoints for profiling, tests, and gener…
rboni-dk Mar 25, 2026
fb0f6db
feat(api): add project-level permissions and sub-resource URL pattern
rboni-dk Mar 26, 2026
71320f8
feat(api): add project-level permissions, sub-resource URLs, and job …
rboni-dk Mar 26, 2026
7bf41d9
Merge branch 'feat/TG-1002-job-execution-queue-v2' into 'enterprise'
Apr 1, 2026
74ac75b
refactor: extract query caching from model layer to UI service
rboni-dk Apr 1, 2026
3dc22b6
refactor: add TestType cache proxy, fix stale cache docs
rboni-dk Apr 1, 2026
912510d
Merge branch 'refactor/model-cache-cleanup' into 'enterprise'
Apr 1, 2026
4642be6
Merge remote-tracking branch 'origin/enterprise' into feat/TG-1009-ap…
Apr 1, 2026
194b88e
feat(TG-1012): add MCP source data tools
rboni-dk Mar 30, 2026
7807486
refactor(TG-1012): extract shared MCP tool utilities into common module
rboni-dk Mar 31, 2026
741f410
fix: lint errors in MCP test files (import sort, unused import)
rboni-dk Mar 31, 2026
6d84c26
fix(TG-1012): address MR review feedback for MCP source data tools
rboni-dk Apr 3, 2026
a72b45c
Merge branch 'feat/TG-1012-mcp-source-data-tools' into 'enterprise'
Apr 3, 2026
e69a38f
Merge remote-tracking branch 'origin/enterprise' into feat/TG-1009-ap…
Apr 3, 2026
ad58f6e
refactor(api): address MR review — enums, monitor filter, project_cod…
rboni-dk Apr 3, 2026
bc3b64f
fix: sort imports in test_suite model
rboni-dk Apr 3, 2026
4a161f1
feat(api): test definition export/import endpoints (TG-1020)
rboni-dk Apr 3, 2026
8deedf8
fix: use isnot(True) for monitor filter consistency
rboni-dk Apr 6, 2026
1cc9d6a
Merge branch 'feat/TG-1009-api-v1-endpoints' into 'enterprise'
Apr 6, 2026
7802473
Merge remote-tracking branch 'origin/enterprise' into feat/TG-1020-td…
Apr 6, 2026
e1c56a7
Merge branch 'feat/TG-1020-td-export-import-v2' into 'enterprise'
Apr 6, 2026
db9e77f
feat(api): Redoc docs UI, OpenAPI metadata, import optimization (TG-1…
rboni-dk Apr 7, 2026
bde3a6f
feat(api): add GET /test-runs and GET /profiling-runs endpoints (TG-1…
rboni-dk Apr 7, 2026
45f5690
feat(mcp): migrate run identifiers to job_execution_id (TG-1025)
rboni-dk Apr 7, 2026
c0d32f6
feat(scheduler): unify job dispatch via single exec-job command (TG-1…
rboni-dk Apr 8, 2026
c35e417
fix: return run ID from handlers, fix functional test callers (TG-1033)
rboni-dk Apr 8, 2026
3bedf23
Merge branch 'feat/TG-1024-api-v1-polish' into 'enterprise'
Apr 8, 2026
5eb5633
Merge remote-tracking branch 'origin/enterprise' into feat/TG-1033-jo…
Apr 8, 2026
6cb7568
Merge remote-tracking branch 'origin/enterprise' into feat/TG-1023-ru…
Apr 8, 2026
6be9922
Merge branch 'feat/TG-1033-job-dispatch-unification' into 'enterprise'
Apr 9, 2026
dae7ea6
Merge remote-tracking branch 'origin/enterprise' into feat/TG-1023-ru…
Apr 9, 2026
6708ce3
fix(api): address MR review feedback for run endpoints (TG-1023)
rboni-dk Apr 9, 2026
99efe5c
Merge branch 'feat/TG-1023-run-lookup-by-job-execution-id' into 'ente…
Apr 9, 2026
cee2f9d
Merge branch 'enterprise' of gitlab.com:dkinternal/testgen/dataops-te…
rboni-dk Apr 10, 2026
63f908a
refactor: migrate run status readers to job_executions (TG-1035)
rboni-dk Apr 11, 2026
d04550a
fix: coalesce completed_at to NOW() in select_summary (TG-1035)
rboni-dk Apr 12, 2026
e94523c
refactor: normalize cancelled -> canceled spelling (American English)
rboni-dk Apr 14, 2026
73cf347
Merge branch 'feat/TG-1025' into 'enterprise'
Apr 14, 2026
1b65cef
Merge remote-tracking branch 'origin/enterprise' into feat/TG-1035-mi…
Apr 14, 2026
ffdcb52
fix(test-types): fix LOV_All execution SQL for PostgreSQL and thresho…
rboni-dk Apr 14, 2026
ddcb68f
fix(test-types): revert LOV_All threshold quoting to match template c…
rboni-dk Apr 14, 2026
cca26cb
fix: address MR review feedback (TG-1035)
rboni-dk Apr 15, 2026
f406d53
fix: set JE completed_at after handler runs in quick-start (TG-1035)
rboni-dk Apr 15, 2026
8190d8a
Merge branch 'feat/TG-1035-migrate-run-status-readers' into 'enterprise'
Apr 15, 2026
53dc485
Merge remote-tracking branch 'origin/enterprise' into feat/TG-1040-re…
Apr 15, 2026
9683e4d
fix(models): improve database session handling and JSON serialization
luis-dk Mar 24, 2026
7ea4d4d
feat(ui): add v2 component infrastructure and registration
luis-dk Mar 24, 2026
182c699
refactor(ui): delete duplicate frontend JS components and utilities
luis-dk Mar 24, 2026
c86234d
refactor(ui): update static JS components and utilities
luis-dk Mar 24, 2026
86a2e08
feat(ui): add new shared JS dialog and widget components
luis-dk Mar 24, 2026
462aa11
refactor(ui): update main.js and frontend page JS entry points
luis-dk Mar 24, 2026
6e5ac42
refactor(queries): add pagination, filtering, and sorting to query mo…
luis-dk Mar 24, 2026
27dfaf8
refactor(dialogs): migrate dialog base classes and shared dialogs to …
luis-dk Mar 24, 2026
0cd444c
refactor(ui): migrate simple pages to v2 components
luis-dk Mar 24, 2026
b7aa1ad
fix(test-types): fix LOV_All execution SQL for MSSQL and SAP HANA
rboni-dk Apr 15, 2026
3323ce6
refactor(ui): migrate profiling and data catalog pages to v2 components
luis-dk Mar 24, 2026
b4647c8
refactor(ui): migrate test workflow pages to v2 components
luis-dk Mar 24, 2026
cbbf55d
refactor(ui): migrate monitoring and table group pages to v2 components
luis-dk Mar 24, 2026
59d6164
refactor(ui): add shared VanJS dialog components for data catalog
luis-dk Mar 24, 2026
929a303
refactor(ui): add application logs VanJS dialog and widget
luis-dk Mar 24, 2026
3de8c86
refactor(ui): migrate data catalog dialogs from st.dialog to VanJS
luis-dk Mar 24, 2026
abdf660
refactor(ui): migrate profiling results dialog in score details to VanJS
luis-dk Mar 24, 2026
a83511f
refactor(ui): migrate connections setup wizard dialog to VanJS
luis-dk Mar 24, 2026
4927d42
misc(ui): remove leftover Streamlit.setFrameHeight calls from v2 pages
luis-dk Mar 24, 2026
1456a24
refactor(ui): remove dead code from v1 Streamlit components and dialogs
luis-dk Apr 10, 2026
4522760
fix(ui): restore missing features and address review feedback in VanJ…
luis-dk Apr 10, 2026
c07b22f
fix(test-types): fix LOV_All SQL for SAP HANA — use STRING_AGG not LI…
rboni-dk Apr 15, 2026
79c4acc
refactor(ui): add loading indicators to connection and table group ac…
luis-dk Apr 10, 2026
fdc00e4
Merge branch 'ui-page-tests' into 'enterprise'
Apr 15, 2026
33ea186
Merge remote-tracking branch 'origin/enterprise' into feat/TG-1040-re…
Apr 15, 2026
5966a21
feat(api): add static API docs build script (TG-1031)
rboni-dk Apr 14, 2026
0935291
feat(mcp): add test definition tools — list_tests, get_test, list_tes…
rboni-dk Apr 10, 2026
3a9ffca
fix(mcp): address MR review feedback (TG-1026)
rboni-dk Apr 15, 2026
90231f4
refactor(mcp): add ParamFieldsMixin and display_name property (TG-1026)
rboni-dk Apr 16, 2026
b431685
Merge branch 'feat/TG-1026' into 'enterprise'
rboni-dk Apr 16, 2026
57df667
Merge remote-tracking branch 'origin/enterprise' into feat/TG-1031-ap…
Apr 16, 2026
4913bb3
Merge remote-tracking branch 'origin/enterprise' into feat/TG-1040-re…
Apr 16, 2026
87b6091
Merge branch 'feat/TG-1040-remaining-cat-column-tests' into 'enterprise'
Apr 16, 2026
4375e7a
Merge remote-tracking branch 'origin/enterprise' into feat/TG-1031-ap…
Apr 16, 2026
efa18c7
refactor(mcp): replace ad-hoc markdown with MdDoc builder
rboni-dk Apr 16, 2026
d975a69
Merge branch 'feat/mcp-markdown-renderer' into 'enterprise'
Apr 16, 2026
85dc190
Merge remote-tracking branch 'origin/enterprise' into feat/TG-1031-ap…
Apr 16, 2026
d44643e
feat(ui): show pending jobs in runs lists with job-centric queries (T…
rboni-dk Apr 17, 2026
3c23625
refactor(deploy): rename build_docs to build_api_docs (TG-1031)
rboni-dk Apr 17, 2026
ff21b67
ci(lint): ignore T201 print rule for deploy/ scripts (TG-1031)
rboni-dk Apr 17, 2026
029560e
fix(test definitions): add missing profiling button
luis-dk Apr 17, 2026
41ce13c
Merge branch 'fix/add-missing-profiling-btn' into 'enterprise'
Apr 17, 2026
61aa1cb
Merge remote-tracking branch 'origin/enterprise' into feat/TG-1034-pe…
Apr 17, 2026
49ffd9f
Merge remote-tracking branch 'origin/enterprise' into feat/TG-1031-ap…
Apr 17, 2026
b202947
feat(TG-1043): make OAuth refresh tokens usable for API automation
rboni-dk Apr 17, 2026
de92df1
Merge branch 'feat/TG-1043-oauth-refresh-tokens-for-api-automation' i…
Apr 20, 2026
cf18963
Merge remote-tracking branch 'origin/enterprise' into feat/TG-1034-pe…
Apr 20, 2026
c46aec3
Merge remote-tracking branch 'origin/enterprise' into feat/TG-1031-ap…
Apr 20, 2026
3d1acaa
Merge branch 'feat/TG-1034-pending-jobs-in-runs-lists-v2' into 'enter…
Apr 21, 2026
a351acd
Merge remote-tracking branch 'origin/enterprise' into feat/TG-1031-ap…
Apr 21, 2026
640e56a
Merge branch 'feat/TG-1031-api-static-docs' into 'enterprise'
Apr 21, 2026
5a13588
fix(deps): bump pillow to 12.2.0 for CVE-2026-40192
aarthy-dk Apr 21, 2026
f5aabb3
Merge branch 'fix/TG-1044-ci-bumpver-and-pillow-cve' into 'enterprise'
Apr 21, 2026
639922f
Merge branch 'main' into aarthy/standalone
aarthy-dk Apr 22, 2026
09ee0ba
feat: migrate run-page URLs to job_execution_id with dual-ID routing …
rboni-dk Apr 22, 2026
9a53586
Merge branch 'feat/TG-1046-run-urls-to-je-ids' into 'enterprise'
Apr 22, 2026
bc1f6bc
feat(mcp): cross-run analysis and trends (TG-1027)
rboni-dk Apr 24, 2026
a95955e
Merge branch 'feat/TG-1027-mcp-cross-run-analysis-trends' into 'enter…
Apr 24, 2026
32d3f47
fix(mcp): exclude monitor suites from existing read tools (TG-1049)
rboni-dk Apr 24, 2026
1ceeb20
feat: JobExecution post-completion callbacks and run-score-update job…
rboni-dk Apr 24, 2026
f0f89a3
Merge branch 'feat/TG-1049-mcp-exclude-monitor-suites' into 'enterprise'
Apr 24, 2026
9626a1a
Merge remote-tracking branch 'origin/enterprise' into feat/TG-1048-je…
Apr 24, 2026
f44b447
fix(mcp): surface thresholds in test run diff (TG-1027)
rboni-dk Apr 24, 2026
35b3cd7
Merge branch 'fix/TG-1027-mcp-diff-cr-followup' into 'enterprise'
Apr 24, 2026
836f782
Merge remote-tracking branch 'origin/enterprise' into feat/TG-1048-je…
Apr 24, 2026
de9e98e
fix(ui): clear intervals before leaving the current page
luis-dk Apr 24, 2026
ee3ab2c
feat(mcp): list_test_results rename + test_suite_id shortcut (TG-1055)
rboni-dk Apr 27, 2026
45636fc
refactor(mcp): typed exception for not-found-or-inaccessible (TG-1057)
rboni-dk Apr 27, 2026
543a9c8
fix(mcp): close test_suite_id leak in get_failure_summary; normalize …
rboni-dk Apr 28, 2026
d2e65db
Merge branch 'fix/leaked-set-intervals' into 'enterprise'
Apr 28, 2026
a390bc1
Merge remote-tracking branch 'origin/enterprise' into feat/TG-1055-mc…
Apr 28, 2026
b8ef676
Merge remote-tracking branch 'origin/enterprise' into feat/TG-1048-je…
Apr 28, 2026
bd632ec
fix: sqlalchemy 2.0 upgrade
aarthy-dk Apr 23, 2026
ae290fc
Merge branch 'enterprise' into aarthy/standalone
aarthy-dk Apr 28, 2026
db189da
Merge branch 'feat/TG-1048-je-post-completion-callbacks' into 'enterp…
Apr 28, 2026
a88aca7
Merge remote-tracking branch 'origin/enterprise' into feat/TG-1055-mc…
Apr 28, 2026
165f5ad
Merge branch 'feat/TG-1055-mcp-list-test-results-rename' into 'enterp…
Apr 28, 2026
bad7474
Merge remote-tracking branch 'origin/enterprise' into feat/TG-1057-mc…
Apr 28, 2026
b18b81a
Merge branch 'enterprise' into aarthy/standalone
aarthy-dk Apr 28, 2026
f2fdd13
Merge branch 'feat/TG-1057-mcp-resource-not-accessible' into 'enterpr…
Apr 28, 2026
70b46d4
Merge branch 'enterprise' into aarthy/standalone
aarthy-dk Apr 28, 2026
d6d5d8e
fix(test-suites): table group filter not working
aarthy-dk Apr 29, 2026
614659a
fix(pii): mask profiling dialogs based on user permissions
aarthy-dk Apr 29, 2026
f5bc0d9
fix(scores-details): broken issue report and query bug
aarthy-dk Apr 29, 2026
4eee69e
fix(profiling): hide button for non-column results
aarthy-dk Apr 29, 2026
b908fda
fix(score-issues): support View for (none) category
aarthy-dk Apr 29, 2026
e63fa69
feat(mcp): profiling L1 — table overview, column profiles, summary (T…
rboni-dk Apr 29, 2026
2d8d17b
feat(TG-1042): DQ score weighting for table importance and semantic d…
diogodk Apr 29, 2026
5f25546
fix: lint errors
aarthy-dk Apr 29, 2026
459fdfe
test: fix mocks for sqlalchemy 2
aarthy-dk Apr 29, 2026
9cd8e43
fix: redshift and mssql warnings
aarthy-dk Apr 29, 2026
ba81aa0
Merge branch 'aarthy/standalone' into 'enterprise'
Apr 29, 2026
3a77d2b
Merge remote-tracking branch 'origin/enterprise' into feat/TG-1028-mc…
Apr 29, 2026
69ec5c7
Merge remote-tracking branch 'origin/enterprise' into TG-1042
Apr 29, 2026
e2bca92
fix: remove stale pinned version in dockerfile
aarthy-dk Apr 29, 2026
54ca0e3
Merge branch 'fix-image-build' into 'enterprise'
Apr 29, 2026
fdce342
Merge remote-tracking branch 'origin/enterprise' into feat/TG-1028-mc…
Apr 29, 2026
39afec6
Merge remote-tracking branch 'origin/enterprise' into TG-1042
Apr 29, 2026
851a134
ci: bump base image to v15
Apr 29, 2026
cd44861
Merge remote-tracking branch 'origin/enterprise' into feat/TG-1028-mc…
Apr 29, 2026
32aed16
Merge remote-tracking branch 'origin/enterprise' into TG-1042
Apr 29, 2026
a8f7187
fix: minor tweaks to weighted scoring
aarthy-dk Apr 29, 2026
f70567c
Merge branch 'TG-1042' into 'enterprise'
Apr 30, 2026
a829b11
Merge remote-tracking branch 'origin/enterprise' into feat/TG-1028-mc…
Apr 30, 2026
7a129a2
fix(ui): runs cache invalidation, toolbar stability, and related UI bugs
luis-dk Apr 29, 2026
798b6d3
fix(mcp): tighten get_failure_summary scope validation (TG-1058)
rboni-dk Apr 30, 2026
5855127
Merge branch 'fix/ui-runs-cache-and-toolbar-stability' into 'enterprise'
Apr 30, 2026
f077a0a
Merge remote-tracking branch 'origin/enterprise' into feat/TG-1058-fi…
Apr 30, 2026
07dd84d
Merge remote-tracking branch 'origin/enterprise' into feat/TG-1028-mc…
Apr 30, 2026
0d81aa4
Merge branch 'feat/TG-1058-fix-get-failure-summary-project-code-scope…
Apr 30, 2026
5be206d
Merge remote-tracking branch 'origin/enterprise' into feat/TG-1028-mc…
Apr 30, 2026
c7245a6
ci: upgrade github chart releaser
aarthy-dk Apr 1, 2026
491d448
fix(snowflake): make key-pair default - add deprecation warning for p…
aarthy-dk Apr 1, 2026
90b0db1
fix: display loading spinner for table group preview
aarthy-dk Apr 30, 2026
9846922
fix(profiling-run): don't display empty sections in email notifications
aarthy-dk Apr 30, 2026
5ef8186
fix: make text consistent for Add/Save
aarthy-dk Apr 30, 2026
842c9e2
fix: hide SAP Hana option for Docker deployment
aarthy-dk Apr 30, 2026
5f1b229
fix(app-logs): filter by text not working
aarthy-dk Apr 30, 2026
a6e01b9
fix(synapse): disable pre-connection queries
aarthy-dk Apr 30, 2026
4ddbb16
Merge branch 'qa-fixes' into 'enterprise'
luis-dk Apr 30, 2026
6a80d6a
fix(ui): visual glitches and inconsistencies
luis-dk May 1, 2026
a93fc1a
fix: input-validation cleanup across MCP tools and API list_jobs
rboni-dk May 1, 2026
576c78a
Merge branch 'qa-fixes-202604' into 'enterprise'
May 1, 2026
8782297
Merge remote-tracking branch 'origin/enterprise' into fix/ricardo-mcp…
May 1, 2026
ec31f4e
Merge remote-tracking branch 'origin/enterprise' into feat/TG-1028-mc…
May 1, 2026
c01f6b2
fix(mcp): TG-1028 reviewer feedback — hygiene-issue rename, PII parsi…
rboni-dk May 1, 2026
6a98374
Merge branch 'fix/ricardo-mcp-api-validation-fixes' into 'enterprise'
May 1, 2026
3fe19a5
Merge branch 'enterprise' of gitlab.com:dkinternal/testgen/dataops-te…
rboni-dk May 1, 2026
8d3acc0
feat(TG-1045): add impact_dimension as DQ scoring classification axis
diogodk Apr 30, 2026
b50260c
fix(impact dimensions): updates from review
aarthy-dk May 1, 2026
02ab46a
Merge branch 'feat/TG-1045-impact-dimension' into 'enterprise'
May 1, 2026
7463a11
Merge remote-tracking branch 'origin/enterprise' into feat/TG-1028-mc…
May 1, 2026
b9d98a8
Merge branch 'feat/TG-1028-mcp-profiling-l1-inventory-and-summary' in…
May 1, 2026
a819130
feat(mcp): execution tools — run, cancel, generate (TG-1030)
aarthy-dk Apr 30, 2026
d401287
fix(mcp): queries failing in sqlalchemy 2
aarthy-dk Apr 30, 2026
4b63c02
refactor(mcp): TG-1030 reviewer feedback — transition self-loop, reso…
aarthy-dk May 1, 2026
d209b3a
Merge branch 'mcp-tg-1030' into 'enterprise'
May 1, 2026
23b7c7c
fix(monitors): exclude dropped columns from freshness fingerprint gen…
aarthy-dk May 1, 2026
e82c35c
fix(monitors): regenerate monitors that fail validation
aarthy-dk May 1, 2026
7d7334e
fix: errors in test results and edit table monitor dialog
aarthy-dk May 1, 2026
ce9b4df
test: fix failing unit tests
aarthy-dk May 1, 2026
9691cf7
Merge branch 'monitor-fixes' into 'enterprise'
May 1, 2026
e188d8b
feat(mcp): track inventory tool calls in Mixpanel (TG-1062)
rboni-dk May 1, 2026
ea85118
Merge branch 'feat/TG-1062-mcp-inventory-analytics' into 'enterprise'
May 3, 2026
3b0ea29
fix(run dialogs): remove CLI command - delete unused duplicate files
aarthy-dk May 3, 2026
fb3f6b7
fix(demo): trigger test failures on dimension table for weighted scoring
aarthy-dk May 3, 2026
0d32f88
docs: enable mcp by default - add build script for reference doc
aarthy-dk May 3, 2026
5c63163
fix: improve standalone version
aarthy-dk May 4, 2026
8ba2b38
fix: address review feedback
aarthy-dk May 4, 2026
a6a1f4b
fix: subprocess not started correctly in standalone on some systems
aarthy-dk May 4, 2026
64c4783
Merge branch 'mcp-docs' into 'enterprise'
May 4, 2026
29b8fe9
fix(runs): jobs not deleted when parent entity deleted
aarthy-dk May 4, 2026
642e691
fix: pass termination signal correctly in Windows
aarthy-dk May 4, 2026
c320b9e
fix(standalone): quick-start not working on windows
aarthy-dk May 4, 2026
f6955a2
Merge branch 'fix-run-cleanup' into 'enterprise'
May 4, 2026
11d5926
release: 5.9.5 -> 5.32.2
aarthy-dk May 4, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 1 addition & 1 deletion .github/actions/publish_charts/action.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ runs:
helm repo add bitnami https://charts.bitnami.com/bitnami

- name: Run chart-releaser
uses: helm/chart-releaser-action@v1.6.0
uses: helm/chart-releaser-action@v1.7.0
with:
charts_dir: deploy/charts
skip_existing: 'true'
Expand Down
50 changes: 50 additions & 0 deletions deploy/build_api_docs.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
"""Export the TestGen OpenAPI spec as a JSON file.

Usage:
python deploy/build_api_docs.py [--output PATH] [--version VERSION]

The output JSON is served by a static Redoc HTML shell alongside it.
"""

import argparse
import json
from pathlib import Path

from testgen.server import create_app

_REPO_ROOT = Path(__file__).resolve().parent.parent


def _read_version_from_pyproject() -> str:
try:
import tomllib # Python 3.11+
except ImportError:
import tomli as tomllib # type: ignore[no-redef]

with open(_REPO_ROOT / "pyproject.toml", "rb") as f:
return tomllib.load(f)["project"]["version"]


def main() -> None:
parser = argparse.ArgumentParser(description="Export the TestGen OpenAPI spec as JSON.")
parser.add_argument(
"--output",
type=Path,
default=Path("docs/api/openapi.json"),
help="Output JSON file path (default: docs/api/openapi.json, relative to cwd)",
)
parser.add_argument("--version", help="API version string (default: read from pyproject.toml)")
args = parser.parse_args()

version = args.version or _read_version_from_pyproject()
app = create_app(version=version)
spec = app.openapi()

output: Path = args.output
output.parent.mkdir(parents=True, exist_ok=True)
output.write_text(json.dumps(spec, indent=2) + "\n", encoding="utf-8")
print(f"Exported OpenAPI spec -> {output} (v{version})")


if __name__ == "__main__":
main()
151 changes: 151 additions & 0 deletions deploy/build_mcp_docs.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,151 @@
"""Export the TestGen MCP server as a Markdown reference page.

Usage:
python deploy/build_mcp_docs.py [--output PATH]

Introspects the FastMCP instance built by ``build_mcp_server()`` and emits
a single Markdown page listing prompts, tools, and resources. Tools are
grouped by the ``_DOC_GROUP`` constant defined on each tool module — when
adding a new tool module, declare ``_DOC_GROUP = "..."`` so the new tools
land under the right heading automatically.
"""

import argparse
import re
import sys
import textwrap
from pathlib import Path
from typing import Any

from testgen.mcp.server import build_mcp_server
from testgen.mcp.tools.common import DocGroup

_DEFAULT_OUTPUT = Path("docs/mcp/supported-tools.md")
_ARGS_HEADER_RE = re.compile(r"^\s*Args:\s*$", re.MULTILINE)

# Order in which tool groups appear on the page. Each entry is a ``DocGroup``
# member; tools whose module declares a ``_DOC_GROUP`` not in this list are
# appended after these in the order they are first seen.
_GROUP_ORDER: list[DocGroup] = [
DocGroup.DISCOVER,
DocGroup.INVESTIGATE,
DocGroup.BROWSE_PROFILING,
DocGroup.TRIGGER,
]
_FALLBACK_GROUP = "Other tools"


def _short_description(docstring: str) -> str:
"""Return the first prose paragraph of a docstring, stripped of Args/Returns sections."""
if not docstring:
return ""
text = textwrap.dedent(docstring).strip()
match = _ARGS_HEADER_RE.search(text)
if match:
text = text[: match.start()].rstrip()
first_paragraph = text.split("\n\n", 1)[0]
return " ".join(line.strip() for line in first_paragraph.splitlines())


def _entry_name(item: Any) -> str:
"""Display name for a tool, resource, or prompt."""
return str(getattr(item, "uri", None) or item.name)


def _render_entry(item: Any) -> str:
description = _short_description(item.description or "")
return f"- **`{_entry_name(item)}`** — {description}"


def _group_for_tool(tool: Any) -> str:
"""Resolve a tool's display group via its module's ``_DOC_GROUP`` constant."""
module = sys.modules.get(tool.fn.__module__)
group = getattr(module, "_DOC_GROUP", None)
return str(group) if group is not None else _FALLBACK_GROUP


def _group_tools(tools: list[Any]) -> list[tuple[str, list[Any]]]:
"""Bucket tools by their module's ``_DOC_GROUP``, ordered by ``_GROUP_ORDER``."""
buckets: dict[str, list[Any]] = {}
for tool in tools:
buckets.setdefault(_group_for_tool(tool), []).append(tool)

ordered: list[tuple[str, list[Any]]] = []
for group in _GROUP_ORDER:
title = str(group)
if title in buckets:
ordered.append((title, sorted(buckets.pop(title), key=lambda t: t.name)))
for title, bucket in buckets.items():
ordered.append((title, sorted(bucket, key=lambda t: t.name)))
return ordered


def _build_markdown(mcp: Any) -> str:
tools = mcp._tool_manager.list_tools()
resources = sorted(mcp._resource_manager.list_resources(), key=lambda r: str(r.uri))
prompts = sorted(mcp._prompt_manager.list_prompts(), key=lambda p: p.name)
grouped_tools = _group_tools(list(tools))

parts: list[str] = [
"# Supported Tools",
"",
"The TestGen MCP server exposes the prompts, tools, and resources listed below.",
"",
"For setup instructions, see [Set up the MCP Server](setup.md).",
"For example questions to ask an assistant, see [MCP Server](index.md#what-you-can-ask).",
"",
"## Prompts",
"",
(
"Prompts are pre-built workflows you can invoke directly through your AI client — typically "
"as a slash command (for example, `/testgen:table_health` in Claude Code) or "
"from a quick-action menu. They orchestrate several tool calls behind the scenes for common "
"investigations. Exact UX varies by client."
),
"",
]
parts.extend(_render_entry(prompt) for prompt in prompts)
parts.append("")

parts.extend(["## Tools", "", "Tools are operations the assistant calls during a conversation, picked based on what you ask.", ""])
for heading, bucket in grouped_tools:
parts.append(f"### {heading}")
parts.append("")
parts.extend(_render_entry(tool) for tool in bucket)
parts.append("")

parts.extend(
[
"## Resources",
"",
"Resources are static reference documents that AI clients can fetch by URI.",
"",
]
)
parts.extend(_render_entry(resource) for resource in resources)

return "\n".join(parts).rstrip() + "\n"


def main() -> None:
parser = argparse.ArgumentParser(description="Export the TestGen MCP server as a Markdown reference.")
parser.add_argument(
"--output",
type=Path,
default=_DEFAULT_OUTPUT,
help=f"Output Markdown file path (default: {_DEFAULT_OUTPUT}, relative to cwd)",
)
args = parser.parse_args()

mcp = build_mcp_server(api_base_url="https://testgen.example.com")
markdown = _build_markdown(mcp)

output: Path = args.output
output.parent.mkdir(parents=True, exist_ok=True)
frontmatter = "---\nsearch:\n boost: 0.5\n---\n"
output.write_text(frontmatter + markdown, encoding="utf-8")
print(f"Exported MCP supported tools -> {output}")


if __name__ == "__main__":
main()
2 changes: 1 addition & 1 deletion deploy/charts/testgen-app/Chart.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ type: application
# This is the chart version. This version number should be incremented each time you make changes
# to the chart and its templates, including the app version.
# Versions are expected to follow Semantic Versioning (https://semver.org/)
version: 1.1.0
version: 1.2.0

# This is the version number of the application being deployed. This version number should be
# incremented each time you make changes to the application. Versions are not expected to
Expand Down
4 changes: 4 additions & 0 deletions deploy/charts/testgen-app/templates/_environment.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,10 @@
- name: TG_EMAIL_FROM_ADDRESS
value: {{ .fromAddress | quote }}
{{- end -}}
{{- if .Values.testgen.uiBaseUrl }}
- name: TG_UI_BASE_URL
value: {{ .Values.testgen.uiBaseUrl | quote }}
{{- end }}
{{- end -}}

{{- define "testgen.hookEnvironment" -}}
Expand Down
1 change: 1 addition & 0 deletions deploy/charts/testgen-app/values.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ testgen:
port:
username:
password:
uiBaseUrl:
labels:

cliHooks:
Expand Down
4 changes: 1 addition & 3 deletions deploy/testgen-base.dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,7 @@ RUN apk update && apk upgrade && apk add --no-cache \
unixodbc=2.3.14-r0 \
unixodbc-dev=2.3.14-r0 \
libarrow=21.0.0-r4 \
apache-arrow-dev=21.0.0-r4 \
# Pinned versions for security
xz=5.8.2-r0
apache-arrow-dev=21.0.0-r4

COPY --chmod=775 ./deploy/install_linuxodbc.sh /tmp/dk/install_linuxodbc.sh
RUN /tmp/dk/install_linuxodbc.sh
Expand Down
2 changes: 1 addition & 1 deletion deploy/testgen.dockerfile
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
ARG TESTGEN_BASE_LABEL=v14
ARG TESTGEN_BASE_LABEL=v15

FROM datakitchen/dataops-testgen-base:${TESTGEN_BASE_LABEL} AS release-image

Expand Down
12 changes: 12 additions & 0 deletions docs/configuration.md
Original file line number Diff line number Diff line change
Expand Up @@ -282,3 +282,15 @@ default: `dataset`

When exporting to your instance of Observabilty, the key sent to the events API to identify the components.
default: `default`

### URL Configuration

#### `TG_UI_BASE_URL`

Externally-reachable base URL for the TestGen web UI. Used in email notification links and PDF report links so recipients can click through to the correct address.

Must be set in production when TestGen is behind a reverse proxy or load balancer. If not set, defaults to `http://localhost:<STREAMLIT_SERVER_PORT>`.

Example: `https://testgen.example.com`

default: `http://localhost:8501`
22 changes: 21 additions & 1 deletion invocations/dev.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
__all__ = ["build_public_image", "clean", "install", "lint"]
__all__ = ["build_api_docs", "build_mcp_docs", "build_public_image", "clean", "install", "lint"]

import re
from os.path import exists, join
Expand Down Expand Up @@ -72,6 +72,26 @@ def clean(ctx: Context) -> None:
print("Cleaning finished!")


@task(name="build-api-docs", pre=(install,))
def build_api_docs(ctx: Context, version: str = "", output: str = "") -> None:
"""Exports the OpenAPI spec as JSON for the static API docs."""
args = []
if version:
args.append(f"--version {version}")
if output:
args.append(f"--output {output}")
ctx.run(f"python deploy/build_api_docs.py {' '.join(args)}")


@task(name="build-mcp-docs", pre=(install,))
def build_mcp_docs(ctx: Context, output: str = "") -> None:
"""Exports the MCP supported-tools page from the FastMCP server."""
args = []
if output:
args.append(f"--output {output}")
ctx.run(f"python deploy/build_mcp_docs.py {' '.join(args)}")


@task(
pre=(required_tools, prep_dk_builer),
iterable=["label"],
Expand Down
Loading
Loading