truthound-dashboard 1.2.1__tar.gz → 1.3.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (361) hide show
  1. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/.gitignore +3 -2
  2. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/PKG-INFO +46 -11
  3. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/README.md +45 -10
  4. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/docs/api.md +279 -12
  5. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/docs/features.md +152 -27
  6. truthound_dashboard-1.3.0/e2e/package-lock.json +78 -0
  7. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/e2e/playwright.config.ts +5 -3
  8. truthound_dashboard-1.3.0/e2e/tests/activity.spec.ts +638 -0
  9. truthound_dashboard-1.3.0/e2e/tests/drift.spec.ts +553 -0
  10. truthound_dashboard-1.3.0/e2e/tests/notifications.spec.ts +962 -0
  11. truthound_dashboard-1.3.0/e2e/tests/schedules.spec.ts +644 -0
  12. truthound_dashboard-1.3.0/frontend/.intlayer/config/configuration.json +121 -0
  13. truthound_dashboard-1.3.0/frontend/.intlayer/dictionary/catalog.json +155 -0
  14. truthound_dashboard-1.3.0/frontend/.intlayer/dictionary/collaboration.json +97 -0
  15. truthound_dashboard-1.3.0/frontend/.intlayer/dictionary/common.json +99 -0
  16. truthound_dashboard-1.3.0/frontend/.intlayer/dictionary/dashboard.json +65 -0
  17. truthound_dashboard-1.3.0/frontend/.intlayer/dictionary/drift.json +97 -0
  18. truthound_dashboard-1.3.0/frontend/.intlayer/dictionary/errors.json +29 -0
  19. truthound_dashboard-1.3.0/frontend/.intlayer/dictionary/glossary.json +133 -0
  20. truthound_dashboard-1.3.0/frontend/.intlayer/dictionary/nav.json +41 -0
  21. truthound_dashboard-1.3.0/frontend/.intlayer/dictionary/notifications.json +89 -0
  22. truthound_dashboard-1.3.0/frontend/.intlayer/dictionary/schedules.json +99 -0
  23. truthound_dashboard-1.3.0/frontend/.intlayer/dictionary/settings.json +31 -0
  24. truthound_dashboard-1.3.0/frontend/.intlayer/dictionary/sources.json +85 -0
  25. truthound_dashboard-1.3.0/frontend/.intlayer/dictionary/validation.json +65 -0
  26. truthound_dashboard-1.3.0/frontend/.intlayer/main/dictionaries.cjs +33 -0
  27. truthound_dashboard-1.3.0/frontend/.intlayer/main/dictionaries.mjs +33 -0
  28. truthound_dashboard-1.3.0/frontend/.intlayer/main/dynamic_dictionaries.cjs +8 -0
  29. truthound_dashboard-1.3.0/frontend/.intlayer/main/dynamic_dictionaries.mjs +8 -0
  30. truthound_dashboard-1.3.0/frontend/.intlayer/main/fetch_dictionaries.cjs +8 -0
  31. truthound_dashboard-1.3.0/frontend/.intlayer/main/fetch_dictionaries.mjs +8 -0
  32. truthound_dashboard-1.3.0/frontend/.intlayer/main/remote_dictionaries.cjs +8 -0
  33. truthound_dashboard-1.3.0/frontend/.intlayer/main/remote_dictionaries.mjs +8 -0
  34. truthound_dashboard-1.3.0/frontend/.intlayer/main/unmerged_dictionaries.cjs +33 -0
  35. truthound_dashboard-1.3.0/frontend/.intlayer/main/unmerged_dictionaries.mjs +33 -0
  36. truthound_dashboard-1.3.0/frontend/.intlayer/types/catalog.ts +156 -0
  37. truthound_dashboard-1.3.0/frontend/.intlayer/types/collaboration.ts +98 -0
  38. truthound_dashboard-1.3.0/frontend/.intlayer/types/common.ts +100 -0
  39. truthound_dashboard-1.3.0/frontend/.intlayer/types/dashboard.ts +66 -0
  40. truthound_dashboard-1.3.0/frontend/.intlayer/types/drift.ts +98 -0
  41. truthound_dashboard-1.3.0/frontend/.intlayer/types/errors.ts +30 -0
  42. truthound_dashboard-1.3.0/frontend/.intlayer/types/glossary.ts +134 -0
  43. truthound_dashboard-1.3.0/frontend/.intlayer/types/intlayer.d.ts +44 -0
  44. truthound_dashboard-1.3.0/frontend/.intlayer/types/nav.ts +42 -0
  45. truthound_dashboard-1.3.0/frontend/.intlayer/types/notifications.ts +90 -0
  46. truthound_dashboard-1.3.0/frontend/.intlayer/types/schedules.ts +100 -0
  47. truthound_dashboard-1.3.0/frontend/.intlayer/types/settings.ts +32 -0
  48. truthound_dashboard-1.3.0/frontend/.intlayer/types/sources.ts +86 -0
  49. truthound_dashboard-1.3.0/frontend/.intlayer/types/validation.ts +66 -0
  50. truthound_dashboard-1.3.0/frontend/.intlayer/unmerged_dictionary/catalog.json +464 -0
  51. truthound_dashboard-1.3.0/frontend/.intlayer/unmerged_dictionary/collaboration.json +261 -0
  52. truthound_dashboard-1.3.0/frontend/.intlayer/unmerged_dictionary/common.json +304 -0
  53. truthound_dashboard-1.3.0/frontend/.intlayer/unmerged_dictionary/dashboard.json +185 -0
  54. truthound_dashboard-1.3.0/frontend/.intlayer/unmerged_dictionary/drift.json +285 -0
  55. truthound_dashboard-1.3.0/frontend/.intlayer/unmerged_dictionary/errors.json +59 -0
  56. truthound_dashboard-1.3.0/frontend/.intlayer/unmerged_dictionary/glossary.json +387 -0
  57. truthound_dashboard-1.3.0/frontend/.intlayer/unmerged_dictionary/nav.json +101 -0
  58. truthound_dashboard-1.3.0/frontend/.intlayer/unmerged_dictionary/notifications.json +245 -0
  59. truthound_dashboard-1.3.0/frontend/.intlayer/unmerged_dictionary/schedules.json +292 -0
  60. truthound_dashboard-1.3.0/frontend/.intlayer/unmerged_dictionary/settings.json +66 -0
  61. truthound_dashboard-1.3.0/frontend/.intlayer/unmerged_dictionary/sources.json +243 -0
  62. truthound_dashboard-1.3.0/frontend/.intlayer/unmerged_dictionary/validation.json +173 -0
  63. truthound_dashboard-1.3.0/frontend/intlayer.config.mjs +19 -0
  64. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/package-lock.json +2479 -11
  65. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/package.json +1 -3
  66. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/App.tsx +0 -2
  67. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/api/client.ts +464 -8
  68. truthound_dashboard-1.3.0/frontend/src/components/AnimatedNumber.test.tsx +144 -0
  69. truthound_dashboard-1.3.0/frontend/src/components/GlassCard.test.tsx +216 -0
  70. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/components/Layout.tsx +3 -6
  71. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/components/catalog/AssetFormDialog.tsx +2 -2
  72. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/components/glossary/TermFormDialog.tsx +2 -2
  73. truthound_dashboard-1.3.0/frontend/src/components/validators/ValidatorConfigCard.tsx +138 -0
  74. truthound_dashboard-1.3.0/frontend/src/components/validators/ValidatorParamInput.tsx +329 -0
  75. truthound_dashboard-1.3.0/frontend/src/components/validators/ValidatorSelector.tsx +427 -0
  76. truthound_dashboard-1.3.0/frontend/src/components/validators/index.ts +7 -0
  77. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/content/index.ts +0 -3
  78. truthound_dashboard-1.3.0/frontend/src/content/validators.content.ts +230 -0
  79. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/lib/intlayer-utils.ts +34 -3
  80. truthound_dashboard-1.3.0/frontend/src/mocks/__tests__/phase5-e2e.test.ts +1197 -0
  81. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/mocks/data/store.ts +24 -0
  82. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/mocks/factories/drift.ts +61 -8
  83. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/mocks/factories/index.ts +3 -0
  84. truthound_dashboard-1.3.0/frontend/src/mocks/factories/mask.ts +221 -0
  85. truthound_dashboard-1.3.0/frontend/src/mocks/factories/scan.ts +421 -0
  86. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/mocks/factories/validations.ts +73 -14
  87. truthound_dashboard-1.3.0/frontend/src/mocks/factories/validators.ts +917 -0
  88. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/mocks/handlers/drift.ts +14 -1
  89. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/mocks/handlers/index.ts +8 -0
  90. truthound_dashboard-1.3.0/frontend/src/mocks/handlers/mask.ts +149 -0
  91. truthound_dashboard-1.3.0/frontend/src/mocks/handlers/profile.ts +60 -0
  92. truthound_dashboard-1.3.0/frontend/src/mocks/handlers/rules.ts +266 -0
  93. truthound_dashboard-1.3.0/frontend/src/mocks/handlers/scan.ts +140 -0
  94. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/mocks/handlers/schemas.ts +43 -1
  95. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/mocks/handlers/validations.ts +72 -2
  96. truthound_dashboard-1.3.0/frontend/src/mocks/handlers/validators.ts +2260 -0
  97. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/pages/Activity.tsx +2 -2
  98. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/pages/Catalog.tsx +4 -4
  99. truthound_dashboard-1.3.0/frontend/src/pages/Dashboard.test.tsx +570 -0
  100. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/pages/Glossary.tsx +4 -4
  101. truthound_dashboard-1.3.0/frontend/src/pages/__tests__/Catalog.e2e.test.tsx +615 -0
  102. truthound_dashboard-1.3.0/frontend/src/pages/__tests__/CatalogDetail.e2e.test.tsx +497 -0
  103. truthound_dashboard-1.3.0/frontend/src/pages/__tests__/Dashboard.e2e.test.tsx +266 -0
  104. truthound_dashboard-1.3.0/frontend/src/pages/__tests__/Glossary.e2e.test.tsx +948 -0
  105. truthound_dashboard-1.3.0/frontend/src/pages/__tests__/GlossaryDetail.e2e.test.tsx +944 -0
  106. truthound_dashboard-1.3.0/frontend/src/pages/__tests__/History.e2e.test.tsx +457 -0
  107. truthound_dashboard-1.3.0/frontend/src/pages/__tests__/Profile.e2e.test.tsx +475 -0
  108. truthound_dashboard-1.3.0/frontend/src/pages/__tests__/Rules.e2e.test.tsx +476 -0
  109. truthound_dashboard-1.3.0/frontend/src/pages/__tests__/SourceDetail.e2e.test.tsx +465 -0
  110. truthound_dashboard-1.3.0/frontend/src/pages/__tests__/Sources.e2e.test.tsx +426 -0
  111. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/providers/intlayer/config.ts +1 -7
  112. truthound_dashboard-1.3.0/frontend/src/test/mocks/intlayer-config.ts +19 -0
  113. truthound_dashboard-1.3.0/frontend/src/test/mocks/intlayer.ts +31 -0
  114. truthound_dashboard-1.3.0/frontend/src/test/mocks/react-intlayer.ts +717 -0
  115. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/test/setup.ts +19 -1
  116. truthound_dashboard-1.3.0/frontend/src/test/test-utils.tsx +84 -0
  117. truthound_dashboard-1.3.0/frontend/src/types/validators.ts +521 -0
  118. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/vite.config.ts +4 -5
  119. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/vitest.config.ts +6 -0
  120. truthound_dashboard-1.3.0/package-lock.json +6 -0
  121. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/pyproject.toml +1 -1
  122. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/api/deps.py +28 -0
  123. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/api/drift.py +1 -0
  124. truthound_dashboard-1.3.0/src/truthound_dashboard/api/mask.py +164 -0
  125. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/api/profile.py +11 -3
  126. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/api/router.py +22 -0
  127. truthound_dashboard-1.3.0/src/truthound_dashboard/api/scan.py +168 -0
  128. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/api/schemas.py +13 -4
  129. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/api/validations.py +33 -1
  130. truthound_dashboard-1.3.0/src/truthound_dashboard/api/validators.py +85 -0
  131. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/core/__init__.py +8 -0
  132. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/core/phase5/activity.py +1 -1
  133. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/core/services.py +457 -7
  134. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/core/truthound_adapter.py +441 -26
  135. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/db/__init__.py +6 -0
  136. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/db/models.py +250 -1
  137. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/schemas/__init__.py +52 -1
  138. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/schemas/collaboration.py +1 -1
  139. truthound_dashboard-1.3.0/src/truthound_dashboard/schemas/drift.py +233 -0
  140. truthound_dashboard-1.3.0/src/truthound_dashboard/schemas/mask.py +209 -0
  141. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/schemas/profile.py +45 -2
  142. truthound_dashboard-1.3.0/src/truthound_dashboard/schemas/scan.py +312 -0
  143. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/schemas/schema.py +30 -2
  144. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/schemas/validation.py +60 -3
  145. truthound_dashboard-1.3.0/src/truthound_dashboard/schemas/validators/__init__.py +59 -0
  146. truthound_dashboard-1.3.0/src/truthound_dashboard/schemas/validators/aggregate_validators.py +238 -0
  147. truthound_dashboard-1.3.0/src/truthound_dashboard/schemas/validators/anomaly_validators.py +723 -0
  148. truthound_dashboard-1.3.0/src/truthound_dashboard/schemas/validators/base.py +263 -0
  149. truthound_dashboard-1.3.0/src/truthound_dashboard/schemas/validators/completeness_validators.py +269 -0
  150. truthound_dashboard-1.3.0/src/truthound_dashboard/schemas/validators/cross_table_validators.py +375 -0
  151. truthound_dashboard-1.3.0/src/truthound_dashboard/schemas/validators/datetime_validators.py +253 -0
  152. truthound_dashboard-1.3.0/src/truthound_dashboard/schemas/validators/distribution_validators.py +422 -0
  153. truthound_dashboard-1.3.0/src/truthound_dashboard/schemas/validators/drift_validators.py +615 -0
  154. truthound_dashboard-1.3.0/src/truthound_dashboard/schemas/validators/geospatial_validators.py +486 -0
  155. truthound_dashboard-1.3.0/src/truthound_dashboard/schemas/validators/multi_column_validators.py +706 -0
  156. truthound_dashboard-1.3.0/src/truthound_dashboard/schemas/validators/privacy_validators.py +531 -0
  157. truthound_dashboard-1.3.0/src/truthound_dashboard/schemas/validators/query_validators.py +510 -0
  158. truthound_dashboard-1.3.0/src/truthound_dashboard/schemas/validators/registry.py +318 -0
  159. truthound_dashboard-1.3.0/src/truthound_dashboard/schemas/validators/schema_validators.py +408 -0
  160. truthound_dashboard-1.3.0/src/truthound_dashboard/schemas/validators/string_validators.py +396 -0
  161. truthound_dashboard-1.3.0/src/truthound_dashboard/schemas/validators/table_validators.py +412 -0
  162. truthound_dashboard-1.3.0/src/truthound_dashboard/schemas/validators/uniqueness_validators.py +355 -0
  163. truthound_dashboard-1.3.0/src/truthound_dashboard/schemas/validators.py +59 -0
  164. truthound_dashboard-1.2.1/src/truthound_dashboard/static/assets/index-BqXVFyqj.js → truthound_dashboard-1.3.0/src/truthound_dashboard/static/assets/index-BCA8H1hO.js +95 -95
  165. truthound_dashboard-1.3.0/src/truthound_dashboard/static/assets/index-BNsSQ2fN.css +1 -0
  166. truthound_dashboard-1.3.0/src/truthound_dashboard/static/assets/unmerged_dictionaries-CsJWCRx9.js +1 -0
  167. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/static/index.html +2 -2
  168. truthound_dashboard-1.2.1/e2e/tests/notifications.spec.ts +0 -65
  169. truthound_dashboard-1.2.1/frontend/.env.demo +0 -3
  170. truthound_dashboard-1.2.1/frontend/intlayer.config.ts +0 -14
  171. truthound_dashboard-1.2.1/frontend/netlify.toml +0 -31
  172. truthound_dashboard-1.2.1/frontend/src/components/DemoBanner.tsx +0 -61
  173. truthound_dashboard-1.2.1/frontend/src/content/demo.content.ts +0 -22
  174. truthound_dashboard-1.2.1/frontend/src/mocks/handlers/profile.ts +0 -33
  175. truthound_dashboard-1.2.1/frontend/src/test/test-utils.tsx +0 -26
  176. truthound_dashboard-1.2.1/src/truthound_dashboard/schemas/drift.py +0 -118
  177. truthound_dashboard-1.2.1/src/truthound_dashboard/static/assets/index-o8qHVDte.css +0 -1
  178. truthound_dashboard-1.2.1/src/truthound_dashboard/static/assets/unmerged_dictionaries-n_T3wZTf.js +0 -1
  179. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/.github/workflows/release.yml +0 -0
  180. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/.github/workflows/trigger-docs.yml +0 -0
  181. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/LICENSE +0 -0
  182. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/docs/configuration.md +0 -0
  183. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/docs/getting-started.md +0 -0
  184. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/docs/index.md +0 -0
  185. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/docs/internationalization.md +0 -0
  186. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/e2e/package.json +0 -0
  187. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/e2e/tests/dashboard.spec.ts +0 -0
  188. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/e2e/tests/language.spec.ts +0 -0
  189. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/e2e/tests/theme.spec.ts +0 -0
  190. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/.env.development +0 -0
  191. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/.env.mock +0 -0
  192. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/.env.pip +0 -0
  193. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/.eslintrc.cjs +0 -0
  194. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/index.html +0 -0
  195. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/postcss.config.js +0 -0
  196. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/public/favicon.ico +0 -0
  197. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/public/mockServiceWorker.js +0 -0
  198. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/public-pip/favicon.ico +0 -0
  199. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/assets/logo.png +0 -0
  200. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/components/AnimatedNumber.tsx +0 -0
  201. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/components/ConfirmDialog.tsx +0 -0
  202. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/components/GlassCard.tsx +0 -0
  203. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/components/LoadingFallback.tsx +0 -0
  204. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/components/ThemeToggle.tsx +0 -0
  205. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/components/catalog/ColumnMappingDialog.tsx +0 -0
  206. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/components/collaboration/ActivityFeed.tsx +0 -0
  207. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/components/collaboration/Comments.tsx +0 -0
  208. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/components/theme-provider.tsx +0 -0
  209. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/components/ui/alert-dialog.tsx +0 -0
  210. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/components/ui/badge.tsx +0 -0
  211. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/components/ui/button.tsx +0 -0
  212. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/components/ui/card.tsx +0 -0
  213. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/components/ui/dialog.tsx +0 -0
  214. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/components/ui/dropdown-menu.tsx +0 -0
  215. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/components/ui/input.tsx +0 -0
  216. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/components/ui/label.tsx +0 -0
  217. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/components/ui/select.tsx +0 -0
  218. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/components/ui/switch.tsx +0 -0
  219. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/components/ui/table.tsx +0 -0
  220. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/components/ui/tabs.tsx +0 -0
  221. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/components/ui/toast.tsx +0 -0
  222. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/components/ui/toaster.tsx +0 -0
  223. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/content/catalog.content.ts +0 -0
  224. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/content/collaboration.content.ts +0 -0
  225. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/content/common.content.ts +0 -0
  226. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/content/dashboard.content.ts +0 -0
  227. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/content/drift.content.ts +0 -0
  228. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/content/errors.content.ts +0 -0
  229. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/content/glossary.content.ts +0 -0
  230. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/content/nav.content.ts +0 -0
  231. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/content/notifications.content.ts +0 -0
  232. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/content/schedules.content.ts +0 -0
  233. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/content/settings.content.ts +0 -0
  234. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/content/sources.content.ts +0 -0
  235. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/content/validation.content.ts +0 -0
  236. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/hooks/use-api.ts +0 -0
  237. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/hooks/use-toast.ts +0 -0
  238. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/index.css +0 -0
  239. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/lib/utils.ts +0 -0
  240. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/main.tsx +0 -0
  241. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/mocks/browser.ts +0 -0
  242. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/mocks/factories/base.ts +0 -0
  243. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/mocks/factories/catalog.test.ts +0 -0
  244. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/mocks/factories/catalog.ts +0 -0
  245. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/mocks/factories/collaboration.test.ts +0 -0
  246. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/mocks/factories/collaboration.ts +0 -0
  247. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/mocks/factories/glossary.test.ts +0 -0
  248. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/mocks/factories/glossary.ts +0 -0
  249. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/mocks/factories/history.ts +0 -0
  250. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/mocks/factories/notifications.ts +0 -0
  251. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/mocks/factories/profile.ts +0 -0
  252. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/mocks/factories/schedules.ts +0 -0
  253. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/mocks/factories/schemas.ts +0 -0
  254. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/mocks/factories/sources.ts +0 -0
  255. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/mocks/handlers/catalog.ts +0 -0
  256. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/mocks/handlers/collaboration.ts +0 -0
  257. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/mocks/handlers/glossary.ts +0 -0
  258. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/mocks/handlers/health.ts +0 -0
  259. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/mocks/handlers/history.ts +0 -0
  260. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/mocks/handlers/notifications.ts +0 -0
  261. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/mocks/handlers/schedules.ts +0 -0
  262. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/mocks/handlers/sources.ts +0 -0
  263. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/mocks/index.ts +0 -0
  264. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/pages/CatalogDetail.tsx +0 -0
  265. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/pages/Dashboard.tsx +0 -0
  266. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/pages/Drift.tsx +0 -0
  267. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/pages/GlossaryDetail.tsx +0 -0
  268. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/pages/History.tsx +0 -0
  269. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/pages/Notifications.tsx +0 -0
  270. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/pages/Profile.tsx +0 -0
  271. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/pages/Rules.tsx +0 -0
  272. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/pages/Schedules.tsx +0 -0
  273. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/pages/SourceDetail.tsx +0 -0
  274. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/pages/Sources.tsx +0 -0
  275. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/pages/Validations.tsx +0 -0
  276. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/providers/index.ts +0 -0
  277. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/providers/intlayer/IntlayerProvider.tsx +0 -0
  278. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/providers/intlayer/index.ts +0 -0
  279. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/stores/catalogStore.test.ts +0 -0
  280. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/stores/catalogStore.ts +0 -0
  281. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/stores/glossaryStore.test.ts +0 -0
  282. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/stores/glossaryStore.ts +0 -0
  283. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/stores/theme.ts +0 -0
  284. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/src/vite-env.d.ts +0 -0
  285. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/tailwind.config.js +0 -0
  286. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/tsconfig.json +0 -0
  287. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/frontend/tsconfig.node.json +0 -0
  288. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/scripts/load_test.py +0 -0
  289. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/__init__.py +0 -0
  290. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/__main__.py +0 -0
  291. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/api/__init__.py +0 -0
  292. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/api/catalog.py +0 -0
  293. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/api/collaboration.py +0 -0
  294. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/api/error_handlers.py +0 -0
  295. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/api/glossary.py +0 -0
  296. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/api/health.py +0 -0
  297. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/api/history.py +0 -0
  298. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/api/middleware.py +0 -0
  299. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/api/notifications.py +0 -0
  300. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/api/rules.py +0 -0
  301. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/api/schedules.py +0 -0
  302. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/api/sources.py +0 -0
  303. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/cli.py +0 -0
  304. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/config.py +0 -0
  305. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/core/base.py +0 -0
  306. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/core/cache.py +0 -0
  307. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/core/connections.py +0 -0
  308. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/core/encryption.py +0 -0
  309. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/core/exceptions.py +0 -0
  310. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/core/logging.py +0 -0
  311. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/core/maintenance.py +0 -0
  312. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/core/notifications/__init__.py +0 -0
  313. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/core/notifications/base.py +0 -0
  314. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/core/notifications/channels.py +0 -0
  315. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/core/notifications/dispatcher.py +0 -0
  316. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/core/notifications/events.py +0 -0
  317. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/core/notifications/service.py +0 -0
  318. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/core/phase5/__init__.py +0 -0
  319. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/core/phase5/catalog.py +0 -0
  320. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/core/phase5/collaboration.py +0 -0
  321. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/core/phase5/glossary.py +0 -0
  322. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/core/sampling.py +0 -0
  323. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/core/scheduler.py +0 -0
  324. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/db/base.py +0 -0
  325. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/db/database.py +0 -0
  326. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/db/repository.py +0 -0
  327. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/main.py +0 -0
  328. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/schemas/base.py +0 -0
  329. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/schemas/catalog.py +0 -0
  330. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/schemas/glossary.py +0 -0
  331. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/schemas/history.py +0 -0
  332. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/schemas/rule.py +0 -0
  333. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/schemas/schedule.py +0 -0
  334. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/schemas/source.py +0 -0
  335. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/static/assets/logo--IpBiMPK.png +0 -0
  336. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/static/favicon.ico +0 -0
  337. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/translate/__init__.py +0 -0
  338. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/translate/config_updater.py +0 -0
  339. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/translate/exceptions.py +0 -0
  340. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/translate/providers/__init__.py +0 -0
  341. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/translate/providers/anthropic.py +0 -0
  342. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/translate/providers/base.py +0 -0
  343. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/translate/providers/mistral.py +0 -0
  344. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/translate/providers/ollama.py +0 -0
  345. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/translate/providers/openai.py +0 -0
  346. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/translate/providers/registry.py +0 -0
  347. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/src/truthound_dashboard/translate/translator.py +0 -0
  348. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/tests/__init__.py +0 -0
  349. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/tests/conftest.py +0 -0
  350. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/tests/test_api/__init__.py +0 -0
  351. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/tests/test_api/test_catalog.py +0 -0
  352. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/tests/test_api/test_collaboration.py +0 -0
  353. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/tests/test_api/test_glossary.py +0 -0
  354. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/tests/test_api/test_health.py +0 -0
  355. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/tests/test_api/test_rules.py +0 -0
  356. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/tests/test_api/test_sources.py +0 -0
  357. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/tests/test_core/__init__.py +0 -0
  358. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/tests/test_core/test_services.py +0 -0
  359. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/tests/test_db/__init__.py +0 -0
  360. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/tests/test_db/test_models.py +0 -0
  361. {truthound_dashboard-1.2.1 → truthound_dashboard-1.3.0}/tests/test_phase4.py +0 -0
@@ -142,8 +142,8 @@ npm-debug.log*
142
142
  yarn-debug.log*
143
143
  yarn-error.log*
144
144
 
145
- # Intlayer (auto-generated)
146
- .intlayer/
145
+ # Intlayer cache only (dictionary must be committed for CI builds)
146
+ frontend/.intlayer/cache/
147
147
 
148
148
  # Frontend build output (handled by build process)
149
149
  # src/truthound_dashboard/static/
@@ -163,3 +163,4 @@ htmlcov/
163
163
  # Claude
164
164
  .claude/
165
165
  CLAUDE.md
166
+ .truthound_docs/
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: truthound-dashboard
3
- Version: 1.2.1
3
+ Version: 1.3.0
4
4
  Summary: Open-source data quality dashboard - GX Cloud alternative
5
5
  Author-email: Truthound Team <team@truthound.dev>
6
6
  License-Expression: Apache-2.0
@@ -43,7 +43,8 @@ Requires-Dist: ruff>=0.1.0; extra == 'dev'
43
43
  Provides-Extra: translate
44
44
  Description-Content-Type: text/markdown
45
45
 
46
- <img width="300" height="300" alt="Truthound_icon" src="https://github.com/user-attachments/assets/90d9e806-8895-45ec-97dc-f8300da4d997" />
46
+
47
+ <img width="2551" height="911" alt="스크린샷 2026-01-08 오전 11 54 18" src="https://github.com/user-attachments/assets/5e6b6d39-ee69-48f3-b0df-577f73bcb03d" />
47
48
 
48
49
  # truthound-dashboard
49
50
 
@@ -55,9 +56,10 @@ Description-Content-Type: text/markdown
55
56
 
56
57
  A web-based data quality monitoring dashboard for [truthound](https://github.com/seadonggyun4/truthound).
57
58
 
58
- [Documentation](https://truthound.netlify.app) | [Live Demo](https://truthound-dashboard.netlify.app) | [PyPI](https://pypi.org/project/truthound-dashboard/)
59
+ [Documentation](https://truthound.netlify.app) | [PyPI](https://pypi.org/project/truthound-dashboard/)
59
60
 
60
61
  ## Overview
62
+ <img width="300" height="300" alt="Truthound_icon" src="https://github.com/user-attachments/assets/90d9e806-8895-45ec-97dc-f8300da4d997" />
61
63
 
62
64
  truthound-dashboard provides a graphical interface for managing data sources, executing validations, tracking historical results, scheduling automated checks, and configuring notifications. It serves as an alternative to commercial data quality platforms.
63
65
 
@@ -68,13 +70,16 @@ truthound-dashboard provides a graphical interface for managing data sources, ex
68
70
  | Data Source Management | Available | Available |
69
71
  | Schema Learning | Available | Available |
70
72
  | Validation Execution | Available | Available |
73
+ | Validator Registry | Available | Available (150+ validators) |
71
74
  | Validation History | Available | Available |
72
75
  | Scheduled Validations | Available | Available |
73
76
  | Slack Notifications | Available | Available |
74
77
  | Email Notifications | Available | Available |
75
78
  | Webhook Notifications | Available | Available |
76
- | Drift Detection | Available | Available |
79
+ | Drift Detection | Available | Available (8 methods) |
77
80
  | Data Profiling | Available | Available |
81
+ | PII Scan | Available | Available (GDPR/CCPA/LGPD) |
82
+ | Data Masking | Available | Available (redact/hash/fake) |
78
83
  | Business Glossary | Available | Available |
79
84
  | Data Catalog | Available | Available |
80
85
  | Dark Mode | Available | Available |
@@ -125,8 +130,11 @@ The dashboard interface is accessible at `http://localhost:8765`.
125
130
 
126
131
  ### Validation
127
132
  - On-demand validation execution using `th.check`
133
+ - 150+ validators across 15 categories (schema, completeness, uniqueness, distribution, string, datetime, aggregate, cross-table, multi-column, query, table, geospatial, drift, anomaly, privacy)
134
+ - Per-validator parameter configuration with UI
128
135
  - Persistent storage of validation results
129
136
  - Issue classification by severity (Critical, High, Medium, Low)
137
+ - Advanced options: column filtering, min_severity, parallel execution, SQL pushdown
130
138
 
131
139
  ### Validation History
132
140
  - Historical record of validation results
@@ -143,11 +151,26 @@ The dashboard interface is accessible at `http://localhost:8765`.
143
151
 
144
152
  ### Drift Detection
145
153
  - Dataset comparison using `th.compare`
146
- - Column-level drift analysis
154
+ - 8 detection methods: auto, ks, psi, chi2, js, kl, wasserstein, cvm, anderson
155
+ - Multiple testing correction: bonferroni, holm, bh
156
+ - Column-level drift analysis with statistical metrics
147
157
 
148
158
  ### Data Profiling
149
159
  - Statistical profiling using `th.profile`
150
160
  - Column-level statistics
161
+ - Sample size configuration for large datasets
162
+
163
+ ### PII Scan
164
+ - Personal data detection using `th.scan`
165
+ - Supported PII types: email, phone, SSN, credit card, IP address, and more
166
+ - Regulation compliance: GDPR, CCPA, LGPD
167
+ - Configurable confidence threshold
168
+
169
+ ### Data Masking
170
+ - Sensitive data protection using `th.mask`
171
+ - Three masking strategies: redact (asterisks), hash (SHA256), fake (realistic data)
172
+ - Auto-detection of PII columns
173
+ - Multiple output formats: CSV, Parquet, JSON
151
174
 
152
175
  ### Business Glossary
153
176
  - Business term definitions with categories
@@ -309,6 +332,24 @@ npm run dev
309
332
  npm run dev:mock
310
333
  ```
311
334
 
335
+ ## Preview with Mock Data
336
+
337
+ To explore the dashboard interface without configuring a backend or data sources, the repository includes a mock mode that simulates API responses using [Mock Service Worker (MSW)](https://mswjs.io/).
338
+
339
+ ```bash
340
+ # Clone the repository
341
+ git clone https://github.com/seadonggyun4/truthound-dashboard
342
+ cd truthound-dashboard/frontend
343
+
344
+ # Install dependencies
345
+ npm install
346
+
347
+ # Start the development server with mock data
348
+ npm run dev:mock
349
+ ```
350
+
351
+ The mock server provides realistic sample data for all dashboard features, enabling evaluation of the user interface and workflow without external dependencies.
352
+
312
353
  ## Testing
313
354
 
314
355
  ```bash
@@ -319,12 +360,6 @@ pytest
319
360
  pytest --cov=truthound_dashboard
320
361
  ```
321
362
 
322
- ## Live Demo
323
-
324
- A live demonstration is available at [https://truthound-dashboard.netlify.app](https://truthound-dashboard.netlify.app).
325
-
326
- The demo instance operates using Mock Service Worker (MSW) with simulated data and does not require a backend connection.
327
-
328
363
  ## Documentation
329
364
 
330
365
  Full documentation is available at [https://truthound.netlify.app](https://truthound.netlify.app).
@@ -1,4 +1,5 @@
1
- <img width="300" height="300" alt="Truthound_icon" src="https://github.com/user-attachments/assets/90d9e806-8895-45ec-97dc-f8300da4d997" />
1
+
2
+ <img width="2551" height="911" alt="스크린샷 2026-01-08 오전 11 54 18" src="https://github.com/user-attachments/assets/5e6b6d39-ee69-48f3-b0df-577f73bcb03d" />
2
3
 
3
4
  # truthound-dashboard
4
5
 
@@ -10,9 +11,10 @@
10
11
 
11
12
  A web-based data quality monitoring dashboard for [truthound](https://github.com/seadonggyun4/truthound).
12
13
 
13
- [Documentation](https://truthound.netlify.app) | [Live Demo](https://truthound-dashboard.netlify.app) | [PyPI](https://pypi.org/project/truthound-dashboard/)
14
+ [Documentation](https://truthound.netlify.app) | [PyPI](https://pypi.org/project/truthound-dashboard/)
14
15
 
15
16
  ## Overview
17
+ <img width="300" height="300" alt="Truthound_icon" src="https://github.com/user-attachments/assets/90d9e806-8895-45ec-97dc-f8300da4d997" />
16
18
 
17
19
  truthound-dashboard provides a graphical interface for managing data sources, executing validations, tracking historical results, scheduling automated checks, and configuring notifications. It serves as an alternative to commercial data quality platforms.
18
20
 
@@ -23,13 +25,16 @@ truthound-dashboard provides a graphical interface for managing data sources, ex
23
25
  | Data Source Management | Available | Available |
24
26
  | Schema Learning | Available | Available |
25
27
  | Validation Execution | Available | Available |
28
+ | Validator Registry | Available | Available (150+ validators) |
26
29
  | Validation History | Available | Available |
27
30
  | Scheduled Validations | Available | Available |
28
31
  | Slack Notifications | Available | Available |
29
32
  | Email Notifications | Available | Available |
30
33
  | Webhook Notifications | Available | Available |
31
- | Drift Detection | Available | Available |
34
+ | Drift Detection | Available | Available (8 methods) |
32
35
  | Data Profiling | Available | Available |
36
+ | PII Scan | Available | Available (GDPR/CCPA/LGPD) |
37
+ | Data Masking | Available | Available (redact/hash/fake) |
33
38
  | Business Glossary | Available | Available |
34
39
  | Data Catalog | Available | Available |
35
40
  | Dark Mode | Available | Available |
@@ -80,8 +85,11 @@ The dashboard interface is accessible at `http://localhost:8765`.
80
85
 
81
86
  ### Validation
82
87
  - On-demand validation execution using `th.check`
88
+ - 150+ validators across 15 categories (schema, completeness, uniqueness, distribution, string, datetime, aggregate, cross-table, multi-column, query, table, geospatial, drift, anomaly, privacy)
89
+ - Per-validator parameter configuration with UI
83
90
  - Persistent storage of validation results
84
91
  - Issue classification by severity (Critical, High, Medium, Low)
92
+ - Advanced options: column filtering, min_severity, parallel execution, SQL pushdown
85
93
 
86
94
  ### Validation History
87
95
  - Historical record of validation results
@@ -98,11 +106,26 @@ The dashboard interface is accessible at `http://localhost:8765`.
98
106
 
99
107
  ### Drift Detection
100
108
  - Dataset comparison using `th.compare`
101
- - Column-level drift analysis
109
+ - 8 detection methods: auto, ks, psi, chi2, js, kl, wasserstein, cvm, anderson
110
+ - Multiple testing correction: bonferroni, holm, bh
111
+ - Column-level drift analysis with statistical metrics
102
112
 
103
113
  ### Data Profiling
104
114
  - Statistical profiling using `th.profile`
105
115
  - Column-level statistics
116
+ - Sample size configuration for large datasets
117
+
118
+ ### PII Scan
119
+ - Personal data detection using `th.scan`
120
+ - Supported PII types: email, phone, SSN, credit card, IP address, and more
121
+ - Regulation compliance: GDPR, CCPA, LGPD
122
+ - Configurable confidence threshold
123
+
124
+ ### Data Masking
125
+ - Sensitive data protection using `th.mask`
126
+ - Three masking strategies: redact (asterisks), hash (SHA256), fake (realistic data)
127
+ - Auto-detection of PII columns
128
+ - Multiple output formats: CSV, Parquet, JSON
106
129
 
107
130
  ### Business Glossary
108
131
  - Business term definitions with categories
@@ -264,6 +287,24 @@ npm run dev
264
287
  npm run dev:mock
265
288
  ```
266
289
 
290
+ ## Preview with Mock Data
291
+
292
+ To explore the dashboard interface without configuring a backend or data sources, the repository includes a mock mode that simulates API responses using [Mock Service Worker (MSW)](https://mswjs.io/).
293
+
294
+ ```bash
295
+ # Clone the repository
296
+ git clone https://github.com/seadonggyun4/truthound-dashboard
297
+ cd truthound-dashboard/frontend
298
+
299
+ # Install dependencies
300
+ npm install
301
+
302
+ # Start the development server with mock data
303
+ npm run dev:mock
304
+ ```
305
+
306
+ The mock server provides realistic sample data for all dashboard features, enabling evaluation of the user interface and workflow without external dependencies.
307
+
267
308
  ## Testing
268
309
 
269
310
  ```bash
@@ -274,12 +315,6 @@ pytest
274
315
  pytest --cov=truthound_dashboard
275
316
  ```
276
317
 
277
- ## Live Demo
278
-
279
- A live demonstration is available at [https://truthound-dashboard.netlify.app](https://truthound-dashboard.netlify.app).
280
-
281
- The demo instance operates using Mock Service Worker (MSW) with simulated data and does not require a backend connection.
282
-
283
318
  ## Documentation
284
319
 
285
320
  Full documentation is available at [https://truthound.netlify.app](https://truthound.netlify.app).
@@ -288,19 +288,56 @@ Analyzes data to automatically generate a schema.
288
288
 
289
289
  Run validation (th.check).
290
290
 
291
- **Request:**
291
+ **Request (Simple Mode):**
292
292
  ```json
293
293
  {
294
- "validators": ["not_null", "unique", "dtype"],
294
+ "validators": ["Null", "Unique", "ColumnExists"],
295
295
  "schema_path": "/path/to/schema.yaml",
296
296
  "auto_schema": false
297
297
  }
298
298
  ```
299
299
 
300
+ **Request (Advanced Mode with validator_configs):**
301
+ ```json
302
+ {
303
+ "validator_configs": [
304
+ {
305
+ "name": "Between",
306
+ "enabled": true,
307
+ "params": {
308
+ "column": "price",
309
+ "min_value": 0,
310
+ "max_value": 10000
311
+ },
312
+ "severity_override": "high"
313
+ },
314
+ {
315
+ "name": "Regex",
316
+ "enabled": true,
317
+ "params": {
318
+ "column": "email",
319
+ "pattern": "^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\\.[a-zA-Z0-9-.]+$"
320
+ }
321
+ }
322
+ ],
323
+ "columns": ["price", "email", "status"],
324
+ "min_severity": "medium",
325
+ "parallel": true,
326
+ "max_workers": 4
327
+ }
328
+ ```
329
+
300
330
  **Parameters:**
301
- - `validators` (optional): List of validators to run
331
+ - `validators` (optional): List of validator names to run (simple mode)
332
+ - `validator_configs` (optional): Per-validator configuration with params (advanced mode, takes precedence)
302
333
  - `schema_path` (optional): Path to schema file
303
334
  - `auto_schema` (optional): If true, auto-generate schema before validation
335
+ - `columns` (optional): Specific columns to validate
336
+ - `min_severity` (optional): Minimum severity to report (low, medium, high, critical)
337
+ - `strict` (optional): Raise exception on failures
338
+ - `parallel` (optional): Enable parallel execution
339
+ - `max_workers` (optional): Max threads for parallel (1-32)
340
+ - `pushdown` (optional): Enable SQL query pushdown
304
341
 
305
342
  **Response:**
306
343
  ```json
@@ -378,6 +415,16 @@ Retrieve validation history for a source.
378
415
 
379
416
  Run data profiling (th.profile).
380
417
 
418
+ **Request:**
419
+ ```json
420
+ {
421
+ "sample_size": 10000
422
+ }
423
+ ```
424
+
425
+ **Parameters:**
426
+ - `sample_size` (optional): Maximum rows to sample for profiling
427
+
381
428
  **Response:**
382
429
  ```json
383
430
  {
@@ -433,18 +480,37 @@ Compare two datasets (th.compare).
433
480
  **Request:**
434
481
  ```json
435
482
  {
436
- "source_id": "abc123",
437
- "target_id": "def456"
483
+ "baseline_source_id": "abc123",
484
+ "current_source_id": "def456",
485
+ "columns": ["price", "quantity"],
486
+ "method": "psi",
487
+ "threshold": 0.1,
488
+ "correction": "bh",
489
+ "sample_size": 10000
438
490
  }
439
491
  ```
440
492
 
441
- Or:
442
- ```json
443
- {
444
- "source_path": "/data/v1.csv",
445
- "target_path": "/data/v2.csv"
446
- }
447
- ```
493
+ **Parameters:**
494
+ - `baseline_source_id` (required): Baseline source ID
495
+ - `current_source_id` (required): Current source ID to compare
496
+ - `columns` (optional): Columns to compare (null = all columns)
497
+ - `method` (optional): Detection method - auto, ks, psi, chi2, js, kl, wasserstein, cvm, anderson (default: auto)
498
+ - `threshold` (optional): Custom threshold (default varies by method)
499
+ - `correction` (optional): Multiple testing correction - none, bonferroni, holm, bh (default: bh for multiple columns)
500
+ - `sample_size` (optional): Sample size for large datasets
501
+
502
+ **Detection Methods:**
503
+ | Method | Use Case | Default Threshold |
504
+ |--------|----------|-------------------|
505
+ | auto | Smart selection based on data type | 0.05 |
506
+ | ks | Continuous distributions | 0.05 |
507
+ | psi | Industry standard, any distribution | 0.1 |
508
+ | chi2 | Categorical data | 0.05 |
509
+ | js | Symmetric, bounded (0-1) | 0.1 |
510
+ | kl | Information loss measure | 0.1 |
511
+ | wasserstein | Earth Mover's Distance | 0.1 |
512
+ | cvm | Sensitive to tail differences | 0.05 |
513
+ | anderson | Weighted for tail sensitivity | 0.05 |
448
514
 
449
515
  **Response:**
450
516
  ```json
@@ -479,6 +545,207 @@ Or:
479
545
 
480
546
  Retrieve drift comparison result.
481
547
 
548
+ ### GET /drift/comparisons
549
+
550
+ List drift comparisons with optional filters.
551
+
552
+ **Query Parameters:**
553
+ - `baseline_source_id` (optional): Filter by baseline source
554
+ - `current_source_id` (optional): Filter by current source
555
+ - `limit` (default: 20): Maximum results (1-100)
556
+
557
+ ---
558
+
559
+ ## Validators
560
+
561
+ ### GET /validators
562
+
563
+ List all available validators with their parameter definitions.
564
+
565
+ **Query Parameters:**
566
+ - `category` (optional): Filter by category (schema, completeness, uniqueness, etc.)
567
+ - `search` (optional): Search by name, description, or tags
568
+
569
+ **Response:**
570
+ ```json
571
+ [
572
+ {
573
+ "name": "Between",
574
+ "display_name": "Value Between",
575
+ "category": "distribution",
576
+ "description": "Validates that values fall within a specified range",
577
+ "parameters": [
578
+ {
579
+ "name": "column",
580
+ "label": "Column",
581
+ "type": "column",
582
+ "required": true
583
+ },
584
+ {
585
+ "name": "min_value",
586
+ "label": "Minimum Value",
587
+ "type": "float",
588
+ "required": true
589
+ },
590
+ {
591
+ "name": "max_value",
592
+ "label": "Maximum Value",
593
+ "type": "float",
594
+ "required": true
595
+ }
596
+ ],
597
+ "tags": ["distribution", "range", "bounds"],
598
+ "severity_default": "medium"
599
+ }
600
+ ]
601
+ ```
602
+
603
+ ### GET /validators/categories
604
+
605
+ List all validator categories with metadata.
606
+
607
+ **Response:**
608
+ ```json
609
+ [
610
+ {
611
+ "value": "schema",
612
+ "label": "Schema",
613
+ "description": "Validate structure, columns, and data types",
614
+ "icon": "layout",
615
+ "color": "#3b82f6",
616
+ "validator_count": 14
617
+ }
618
+ ]
619
+ ```
620
+
621
+ ### GET /validators/{name}
622
+
623
+ Get a specific validator definition by name.
624
+
625
+ ---
626
+
627
+ ## PII Scan
628
+
629
+ ### POST /scans/sources/{id}/scan
630
+
631
+ Run PII scan on a data source (th.scan).
632
+
633
+ **Request:**
634
+ ```json
635
+ {
636
+ "columns": ["email", "phone", "ssn"],
637
+ "regulations": ["gdpr", "ccpa"],
638
+ "min_confidence": 0.8
639
+ }
640
+ ```
641
+
642
+ **Parameters:**
643
+ - `columns` (optional): Columns to scan (null = all columns)
644
+ - `regulations` (optional): Privacy regulations to check - gdpr, ccpa, lgpd
645
+ - `min_confidence` (optional): Confidence threshold (0.0-1.0, default: 0.8)
646
+
647
+ **Response:**
648
+ ```json
649
+ {
650
+ "id": "scan123",
651
+ "source_id": "abc123",
652
+ "status": "success",
653
+ "total_columns_scanned": 15,
654
+ "columns_with_pii": 3,
655
+ "total_findings": 5,
656
+ "has_violations": true,
657
+ "total_violations": 2,
658
+ "findings": [
659
+ {
660
+ "column": "email",
661
+ "pii_type": "email",
662
+ "confidence": 0.95,
663
+ "sample_count": 1000
664
+ }
665
+ ],
666
+ "violations": [
667
+ {
668
+ "regulation": "gdpr",
669
+ "column": "ssn",
670
+ "pii_type": "ssn",
671
+ "message": "SSN data requires explicit consent under GDPR",
672
+ "severity": "high"
673
+ }
674
+ ],
675
+ "created_at": "2024-01-15T10:30:00Z"
676
+ }
677
+ ```
678
+
679
+ ### GET /scans/{id}
680
+
681
+ Get PII scan result by ID.
682
+
683
+ ### GET /scans/sources/{id}/scans
684
+
685
+ List PII scan history for a source.
686
+
687
+ ### GET /scans/sources/{id}/scans/latest
688
+
689
+ Get the most recent PII scan for a source.
690
+
691
+ ---
692
+
693
+ ## Data Masking
694
+
695
+ ### POST /masks/sources/{id}/mask
696
+
697
+ Run data masking on a source (th.mask).
698
+
699
+ **Request:**
700
+ ```json
701
+ {
702
+ "columns": ["email", "ssn", "phone"],
703
+ "strategy": "hash",
704
+ "output_format": "csv"
705
+ }
706
+ ```
707
+
708
+ **Parameters:**
709
+ - `columns` (optional): Columns to mask (null = auto-detect PII columns)
710
+ - `strategy` (optional): Masking strategy - redact, hash, fake (default: redact)
711
+ - `output_format` (optional): Output format - csv, parquet, json (default: csv)
712
+
713
+ **Masking Strategies:**
714
+ | Strategy | Description |
715
+ |----------|-------------|
716
+ | redact | Replace values with asterisks (e.g., "john@example.com" → "****") |
717
+ | hash | Replace with SHA256 hash (deterministic, can be used for joins) |
718
+ | fake | Replace with realistic fake data (e.g., "john@example.com" → "alice@test.org") |
719
+
720
+ **Response:**
721
+ ```json
722
+ {
723
+ "id": "mask123",
724
+ "source_id": "abc123",
725
+ "status": "success",
726
+ "strategy": "hash",
727
+ "output_path": "/tmp/masked_data.csv",
728
+ "columns_masked": ["email", "ssn", "phone"],
729
+ "auto_detected": false,
730
+ "row_count": 10000,
731
+ "column_count": 15,
732
+ "duration_ms": 1500,
733
+ "created_at": "2024-01-15T10:30:00Z"
734
+ }
735
+ ```
736
+
737
+ ### GET /masks/{id}
738
+
739
+ Get mask operation by ID.
740
+
741
+ ### GET /masks/sources/{id}/masks
742
+
743
+ List mask operations for a source.
744
+
745
+ ### GET /masks/sources/{id}/masks/latest
746
+
747
+ Get the most recent mask operation for a source.
748
+
482
749
  ---
483
750
 
484
751
  ## Schedules