ado-git-repo-insights 2.7.5__tar.gz → 3.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 (179) hide show
  1. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/.gitattributes +16 -0
  2. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/.gitignore +1 -0
  3. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/CHANGELOG.md +110 -0
  4. {ado_git_repo_insights-2.7.5/src/ado_git_repo_insights.egg-info → ado_git_repo_insights-3.3.0}/PKG-INFO +13 -1
  5. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/README.md +12 -0
  6. ado_git_repo_insights-3.3.0/VERSION +1 -0
  7. ado_git_repo_insights-3.3.0/docs/DEFAULT-DASHBOARD-ENHANCEMENT-PLAN.md +472 -0
  8. ado_git_repo_insights-3.3.0/docs/ENABLE-ML-FEATURES.md +241 -0
  9. ado_git_repo_insights-3.3.0/docs/INSTALLATION.md +433 -0
  10. ado_git_repo_insights-3.3.0/extension/overview.md +129 -0
  11. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/extension/tasks/extract-prs/index.js +71 -9
  12. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/extension/tasks/extract-prs/task.json +28 -2
  13. ado_git_repo_insights-3.3.0/extension/tests/api-patterns.test.js +124 -0
  14. ado_git_repo_insights-3.3.0/extension/tests/cross-project-settings.test.js +133 -0
  15. ado_git_repo_insights-3.3.0/extension/tests/dashboard.test.js +2122 -0
  16. ado_git_repo_insights-3.3.0/extension/tests/pipeline-artifact-url.test.js +141 -0
  17. ado_git_repo_insights-3.3.0/extension/tests/production-issues.test.js +989 -0
  18. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/extension/ui/artifact-client.js +110 -10
  19. ado_git_repo_insights-3.3.0/extension/ui/dashboard.js +2077 -0
  20. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/extension/ui/error-types.js +9 -3
  21. ado_git_repo_insights-3.3.0/extension/ui/index.html +282 -0
  22. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/extension/ui/settings.html +25 -6
  23. ado_git_repo_insights-3.3.0/extension/ui/settings.js +554 -0
  24. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/extension/ui/styles.css +600 -1
  25. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/extension/vss-extension.json +2 -1
  26. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/package-lock.json +2 -2
  27. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/package.json +1 -1
  28. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0/src/ado_git_repo_insights.egg-info}/PKG-INFO +13 -1
  29. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/src/ado_git_repo_insights.egg-info/SOURCES.txt +7 -0
  30. ado_git_repo_insights-3.3.0/tests/integration/test_phase5_ml_integration.py +695 -0
  31. ado_git_repo_insights-2.7.5/VERSION +0 -1
  32. ado_git_repo_insights-2.7.5/extension/overview.md +0 -70
  33. ado_git_repo_insights-2.7.5/extension/tests/api-patterns.test.js +0 -114
  34. ado_git_repo_insights-2.7.5/extension/tests/dashboard.test.js +0 -568
  35. ado_git_repo_insights-2.7.5/extension/ui/dashboard.js +0 -1032
  36. ado_git_repo_insights-2.7.5/extension/ui/index.html +0 -176
  37. ado_git_repo_insights-2.7.5/extension/ui/settings.js +0 -240
  38. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/.editorconfig +0 -0
  39. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/.github/scripts/check-baseline-integrity.js +0 -0
  40. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/.github/scripts/validate-test-results.py +0 -0
  41. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/.github/workflows/ci.yml +0 -0
  42. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/.github/workflows/release.yml +0 -0
  43. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/.gitleaks.toml +0 -0
  44. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/.husky/pre-commit +0 -0
  45. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/.husky/pre-push +0 -0
  46. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/.pre-commit-config.yaml +0 -0
  47. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/.releaserc.json +0 -0
  48. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/LICENSE +0 -0
  49. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/MERMAID.md +0 -0
  50. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/agents/INVARIANTS.md +0 -0
  51. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/agents/definition-of-done.md +0 -0
  52. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/agents/victory-gates.md +0 -0
  53. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/config.example.yaml +0 -0
  54. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/docs/EXTENSION.md +0 -0
  55. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/docs/MANUAL_WALKTHROUGH.md +0 -0
  56. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/docs/PHASE5.md +0 -0
  57. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/docs/PHASE6.md +0 -0
  58. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/docs/SESSION.md +0 -0
  59. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/docs/SUMMARY.md +0 -0
  60. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/docs/ado-pipeline-smoke-check.md +0 -0
  61. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/docs/dataset-contract.md +0 -0
  62. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/docs/phase5-contract-notes.md +0 -0
  63. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/docs/rollout-plan.md +0 -0
  64. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/docs/runbook.md +0 -0
  65. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/extension/images/README.md +0 -0
  66. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/extension/images/icon.png +0 -0
  67. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/extension/images/icon.png.placeholder +0 -0
  68. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/extension/jest.config.js +0 -0
  69. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/extension/package-lock.json +0 -0
  70. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/extension/package.json +0 -0
  71. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/extension/scripts/copy-vss-sdk.sh +0 -0
  72. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/extension/scripts/update-perf-baseline.js +0 -0
  73. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/extension/tasks/extract-prs/index.test.js +0 -0
  74. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/extension/tasks/extract-prs/package-lock.json +0 -0
  75. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/extension/tasks/extract-prs/package.json +0 -0
  76. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/extension/test-output.txt +0 -0
  77. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/extension/test-results.json +0 -0
  78. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/extension/tests/ado-sdk.test.js +0 -0
  79. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/extension/tests/auth-pattern.test.js +0 -0
  80. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/extension/tests/chunked-loading.test.js +0 -0
  81. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/extension/tests/dataset-loader.test.js +0 -0
  82. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/extension/tests/date-range-warning.test.js +0 -0
  83. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/extension/tests/error-codes.test.js +0 -0
  84. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/extension/tests/fixtures/aggregates/dimensions.json +0 -0
  85. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/extension/tests/fixtures/aggregates/weekly_rollups/2026-W02.json +0 -0
  86. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/extension/tests/fixtures/dataset-manifest.json +0 -0
  87. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/extension/tests/fixtures/insights/summary.json +0 -0
  88. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/extension/tests/fixtures/perf-baselines.json +0 -0
  89. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/extension/tests/fixtures/predictions/trends.json +0 -0
  90. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/extension/tests/fixtures.test.js +0 -0
  91. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/extension/tests/metrics.test.js +0 -0
  92. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/extension/tests/mocks/ado-sdk.js +0 -0
  93. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/extension/tests/performance.test.js +0 -0
  94. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/extension/tests/sdk-bundling.test.js +0 -0
  95. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/extension/tests/setup.js +0 -0
  96. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/extension/tests/synthetic-fixtures.test.js +0 -0
  97. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/extension/ui/VSS.SDK.min.js +0 -0
  98. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/extension/ui/dataset-loader.js +0 -0
  99. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/extension/ui/error-codes.js +0 -0
  100. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/extension-verification-test.yml +0 -0
  101. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/insights-verification-test.yml +0 -0
  102. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/pr-insights-pipeline.yml +0 -0
  103. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/pyproject.toml +0 -0
  104. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/sample-pipeline.yml +0 -0
  105. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/schemas/dataset-manifest.schema.json +0 -0
  106. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/schemas/insights.schema.json +0 -0
  107. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/schemas/predictions.schema.json +0 -0
  108. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/scripts/check-version-unchanged.sh +0 -0
  109. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/scripts/csv_diff.py +0 -0
  110. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/scripts/generate-synthetic-dataset.py +0 -0
  111. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/scripts/stamp-extension-version.js +0 -0
  112. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/scripts/validate-task-inputs.js +0 -0
  113. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/setup.cfg +0 -0
  114. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/src/ado_git_repo_insights/__init__.py +0 -0
  115. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/src/ado_git_repo_insights/cli.py +0 -0
  116. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/src/ado_git_repo_insights/config.py +0 -0
  117. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/src/ado_git_repo_insights/extractor/__init__.py +0 -0
  118. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/src/ado_git_repo_insights/extractor/ado_client.py +0 -0
  119. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/src/ado_git_repo_insights/extractor/pr_extractor.py +0 -0
  120. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/src/ado_git_repo_insights/ml/__init__.py +0 -0
  121. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/src/ado_git_repo_insights/ml/date_utils.py +0 -0
  122. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/src/ado_git_repo_insights/ml/forecaster.py +0 -0
  123. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/src/ado_git_repo_insights/ml/insights.py +0 -0
  124. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/src/ado_git_repo_insights/persistence/__init__.py +0 -0
  125. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/src/ado_git_repo_insights/persistence/database.py +0 -0
  126. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/src/ado_git_repo_insights/persistence/models.py +0 -0
  127. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/src/ado_git_repo_insights/persistence/repository.py +0 -0
  128. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/src/ado_git_repo_insights/transform/__init__.py +0 -0
  129. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/src/ado_git_repo_insights/transform/aggregators.py +0 -0
  130. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/src/ado_git_repo_insights/transform/csv_generator.py +0 -0
  131. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/src/ado_git_repo_insights/utils/__init__.py +0 -0
  132. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/src/ado_git_repo_insights/utils/datetime_utils.py +0 -0
  133. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/src/ado_git_repo_insights/utils/logging_config.py +0 -0
  134. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/src/ado_git_repo_insights/utils/run_summary.py +0 -0
  135. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/src/ado_git_repo_insights.egg-info/dependency_links.txt +0 -0
  136. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/src/ado_git_repo_insights.egg-info/entry_points.txt +0 -0
  137. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/src/ado_git_repo_insights.egg-info/requires.txt +0 -0
  138. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/src/ado_git_repo_insights.egg-info/top_level.txt +0 -0
  139. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/tests/__init__.py +0 -0
  140. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/tests/fixtures/README.md +0 -0
  141. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/tests/integration/__init__.py +0 -0
  142. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/tests/integration/test_backfill_convergence.py +0 -0
  143. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/tests/integration/test_db_open_failure.py +0 -0
  144. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/tests/integration/test_golden_outputs.py +0 -0
  145. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/tests/integration/test_incremental_run.py +0 -0
  146. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/tests/integration/test_multi_project_scoping.py +0 -0
  147. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/tests/test_redaction.py +0 -0
  148. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/tests/unit/__init__.py +0 -0
  149. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/tests/unit/test_ado_client_pagination.py +0 -0
  150. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/tests/unit/test_aggregators.py +0 -0
  151. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/tests/unit/test_artifacts_dir.py +0 -0
  152. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/tests/unit/test_chunk_selection.py +0 -0
  153. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/tests/unit/test_cli_args.py +0 -0
  154. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/tests/unit/test_cli_exit_code.py +0 -0
  155. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/tests/unit/test_comments_cli.py +0 -0
  156. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/tests/unit/test_comments_extraction.py +0 -0
  157. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/tests/unit/test_completed_only.py +0 -0
  158. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/tests/unit/test_config_validation.py +0 -0
  159. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/tests/unit/test_csv_contract.py +0 -0
  160. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/tests/unit/test_csv_determinism.py +0 -0
  161. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/tests/unit/test_date_range_defaults.py +0 -0
  162. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/tests/unit/test_datetime_utils.py +0 -0
  163. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/tests/unit/test_forecaster_contract.py +0 -0
  164. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/tests/unit/test_insights_contract.py +0 -0
  165. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/tests/unit/test_insights_id_stability.py +0 -0
  166. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/tests/unit/test_insights_schema.py +0 -0
  167. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/tests/unit/test_logging_config.py +0 -0
  168. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/tests/unit/test_ml_cli_flags.py +0 -0
  169. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/tests/unit/test_monday_alignment.py +0 -0
  170. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/tests/unit/test_operational_summary.py +0 -0
  171. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/tests/unit/test_predictions_schema.py +0 -0
  172. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/tests/unit/test_retry_policy.py +0 -0
  173. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/tests/unit/test_run_summary.py +0 -0
  174. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/tests/unit/test_secret_redaction.py +0 -0
  175. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/tests/unit/test_summary_drift_guard.py +0 -0
  176. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/tests/unit/test_synthetic_dataset.py +0 -0
  177. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/tests/unit/test_team_extraction.py +0 -0
  178. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/tests/unit/test_upsert_keys.py +0 -0
  179. {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/tests/unit/test_version_validation.py +0 -0
@@ -1,6 +1,13 @@
1
1
  # Default: auto-detect text files, normalize to LF in repo
2
2
  * text=auto eol=lf
3
3
 
4
+ # ─────────────────────────────────────────────────────────
5
+ # GIT CONFIGURATION FILES: Always LF
6
+ # ─────────────────────────────────────────────────────────
7
+ .gitattributes text eol=lf
8
+ .gitignore text eol=lf
9
+ .gitmodules text eol=lf
10
+
4
11
  # ─────────────────────────────────────────────────────────
5
12
  # SCRIPTS: Must always be LF (executed in Unix CI)
6
13
  # ─────────────────────────────────────────────────────────
@@ -11,6 +18,13 @@
11
18
  .github/** text eol=lf
12
19
  scripts/** text eol=lf
13
20
 
21
+ # ─────────────────────────────────────────────────────────
22
+ # CI/CD CONFIGURATION: LF for cross-platform CI
23
+ # ─────────────────────────────────────────────────────────
24
+ Dockerfile text eol=lf
25
+ docker-compose*.yml text eol=lf
26
+ Makefile text eol=lf
27
+
14
28
  # ─────────────────────────────────────────────────────────
15
29
  # CODE: LF for cross-platform consistency
16
30
  # ─────────────────────────────────────────────────────────
@@ -21,6 +35,8 @@ scripts/** text eol=lf
21
35
  *.yml text eol=lf
22
36
  *.yaml text eol=lf
23
37
  *.md text eol=lf
38
+ *.txt text eol=lf
39
+ LICENSE text eol=lf
24
40
  *.html text eol=lf
25
41
  *.css text eol=lf
26
42
 
@@ -45,6 +45,7 @@ coverage.xml
45
45
  *.py,cover
46
46
  .hypothesis/
47
47
  .pytest_cache/
48
+ coverage/
48
49
 
49
50
  # Translations
50
51
  *.mo
@@ -1,3 +1,113 @@
1
+ # [3.3.0](https://github.com/oddessentials/ado-git-repo-insights/compare/v3.2.0...v3.3.0) (2026-01-18)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * revert manual version bump, remove obsolete planning doc ([df019c0](https://github.com/oddessentials/ado-git-repo-insights/commit/df019c0738ddc0b3b684e940ed8fcd272e879dec))
7
+ * **tests:** resolve ruff linting errors in Phase 5 ML tests ([d816e36](https://github.com/oddessentials/ado-git-repo-insights/commit/d816e3697d1993369f4be82df563faad7d8b435e))
8
+
9
+
10
+ ### Features
11
+
12
+ * **dashboard:** enable Phase 5 features (Predictions & AI Insights tabs) ([649f39e](https://github.com/oddessentials/ado-git-repo-insights/commit/649f39e17ca7c778133aed2dba8df0bf360d4b03))
13
+ * **task:** add Phase 5 ML inputs to pipeline task (v2.3.0) ([314c560](https://github.com/oddessentials/ado-git-repo-insights/commit/314c56045ecc531cec7cf60d94b180dc9655b2ea))
14
+
15
+ # [3.2.0](https://github.com/oddessentials/ado-git-repo-insights/compare/v3.1.0...v3.2.0) (2026-01-18)
16
+
17
+
18
+ ### Bug Fixes
19
+
20
+ * **dashboard:** accept PartiallySucceeded builds and handle stale settings ([f6c3135](https://github.com/oddessentials/ado-git-repo-insights/commit/f6c3135012a857b74c3d8d22a3a8032a470bde56))
21
+
22
+
23
+ ### Features
24
+
25
+ * **dashboard:** add feature flag for Phase 5 tabs with Coming Soon state ([a604462](https://github.com/oddessentials/ado-git-repo-insights/commit/a604462a8edf1f2059a8d23f736d4b26486154a4))
26
+
27
+ # [3.1.0](https://github.com/oddessentials/ado-git-repo-insights/compare/v3.0.4...v3.1.0) (2026-01-17)
28
+
29
+
30
+ ### Features
31
+
32
+ * **dashboard:** add comparison mode and export functionality (Sprint 5) ([e3fde36](https://github.com/oddessentials/ado-git-repo-insights/commit/e3fde3600f8fd67b13086333abe0c4b54b9b8412))
33
+ * **dashboard:** add cycle time trend and reviewer activity charts (Sprint 4) ([93e14dd](https://github.com/oddessentials/ado-git-repo-insights/commit/93e14dd3118d61922293edacc43762ddc0f21fdc))
34
+ * **dashboard:** add dimension filter bar with dropdowns (Sprint 2) ([393ede3](https://github.com/oddessentials/ado-git-repo-insights/commit/393ede3b8b44f8e9270bbabd03d9146d5f231385))
35
+ * **dashboard:** add raw data ZIP download for pipeline CSV artifacts ([5785d18](https://github.com/oddessentials/ado-git-repo-insights/commit/5785d18aaa33eda95c7c252e266e2cd9c87fd9e2))
36
+ * **dashboard:** add sparklines and trend line overlay (Sprint 3) ([8781ddb](https://github.com/oddessentials/ado-git-repo-insights/commit/8781ddb7bbaab71cd9e2dcd5de383a1563f41a7c))
37
+ * **dashboard:** add trend deltas and reviewers card (Sprint 1) ([660546d](https://github.com/oddessentials/ado-git-repo-insights/commit/660546d526632998f184c3d698a5c030e7f46d82))
38
+
39
+ ## [3.0.4](https://github.com/oddessentials/ado-git-repo-insights/compare/v3.0.3...v3.0.4) (2026-01-17)
40
+
41
+
42
+ ### Bug Fixes
43
+
44
+ * white spacing ([29f5f4d](https://github.com/oddessentials/ado-git-repo-insights/commit/29f5f4d413492f0e41b486d2762932e754b1e95d))
45
+
46
+ ## [3.0.3](https://github.com/oddessentials/ado-git-repo-insights/compare/v3.0.2...v3.0.3) (2026-01-17)
47
+
48
+
49
+ ### Bug Fixes
50
+
51
+ * **artifact:** use downloadUrl with format=file&subPath (verified working) ([be53de4](https://github.com/oddessentials/ado-git-repo-insights/commit/be53de426619285a782f97f96556cb41836c3846))
52
+
53
+ ## [3.0.2](https://github.com/oddessentials/ado-git-repo-insights/compare/v3.0.1...v3.0.2) (2026-01-17)
54
+
55
+
56
+ ### Bug Fixes
57
+
58
+ * **artifact:** remove duplicated aggregates/ prefix from file paths ([d19688e](https://github.com/oddessentials/ado-git-repo-insights/commit/d19688eb27652de571273922ed496f56c5d6410f))
59
+ * **artifact:** try Container API for PipelineArtifacts first ([63376ca](https://github.com/oddessentials/ado-git-repo-insights/commit/63376caf8aca5b0aee281b10b7f7e9f53aa4ceb4))
60
+
61
+ ## [3.0.1](https://github.com/oddessentials/ado-git-repo-insights/compare/v3.0.0...v3.0.1) (2026-01-17)
62
+
63
+
64
+ ### Bug Fixes
65
+
66
+ * **artifact:** correct Pipeline Artifact file URL construction ([9eb9b3c](https://github.com/oddessentials/ado-git-repo-insights/commit/9eb9b3c28406c0307d1704d71d25ff94700ec5a3))
67
+
68
+ # [3.0.0](https://github.com/oddessentials/ado-git-repo-insights/compare/v2.8.2...v3.0.0) (2026-01-17)
69
+
70
+
71
+ ### Bug Fixes
72
+
73
+ * **artifact:** use getArtifacts lookup instead of broken SDK getArtifact ([6f6ad55](https://github.com/oddessentials/ado-git-repo-insights/commit/6f6ad559eb6c7f5f2f98840122b95b61b119153e))
74
+
75
+
76
+ ### BREAKING CHANGES
77
+
78
+ * **artifact:** Replaced SDK-based artifact metadata retrieval with
79
+ direct API lookup. This fixes cross-project artifact access but changes
80
+ the internal implementation approach.
81
+
82
+ ## [2.8.2](https://github.com/oddessentials/ado-git-repo-insights/compare/v2.8.1...v2.8.2) (2026-01-17)
83
+
84
+
85
+ ### Bug Fixes
86
+
87
+ * **artifact:** use resource.url directly for container file access ([92f6f85](https://github.com/oddessentials/ado-git-repo-insights/commit/92f6f8523fd4bc219f2b0108d5727b7f2990b9d2))
88
+
89
+ ## [2.8.1](https://github.com/oddessentials/ado-git-repo-insights/compare/v2.8.0...v2.8.1) (2026-01-17)
90
+
91
+
92
+ ### Bug Fixes
93
+
94
+ * **artifact:** use SDK-based file access to resolve 401 errors ([f81c884](https://github.com/oddessentials/ado-git-repo-insights/commit/f81c884cbdf39589e2a877885bed5e328c07e63d))
95
+
96
+ # [2.8.0](https://github.com/oddessentials/ado-git-repo-insights/compare/v2.7.6...v2.8.0) (2026-01-16)
97
+
98
+
99
+ ### Features
100
+
101
+ * **dashboard:** use configured source project for cross-project access ([54fa822](https://github.com/oddessentials/ado-git-repo-insights/commit/54fa822231dc5f00ed32fa2aeb74206bef2bca48))
102
+ * **settings:** add cross-project support with graceful degradation ([bfb8009](https://github.com/oddessentials/ado-git-repo-insights/commit/bfb8009087dd21605a617ec0699109c42df88811))
103
+
104
+ ## [2.7.6](https://github.com/oddessentials/ado-git-repo-insights/compare/v2.7.5...v2.7.6) (2026-01-16)
105
+
106
+
107
+ ### Bug Fixes
108
+
109
+ * **extension:** add queryOrder to all getDefinitions calls ([b74be8a](https://github.com/oddessentials/ado-git-repo-insights/commit/b74be8a0ea42d4b8bf81e73e31d088a504133ecd))
110
+
1
111
  ## [2.7.5](https://github.com/oddessentials/ado-git-repo-insights/compare/v2.7.4...v2.7.5) (2026-01-16)
2
112
 
3
113
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ado-git-repo-insights
3
- Version: 2.7.5
3
+ Version: 3.3.0
4
4
  Summary: Extract Azure DevOps Pull Request metrics to SQLite and generate PowerBI-compatible CSVs.
5
5
  Author-email: "Odd Essentials, LLC" <admin@oddessentials.com>
6
6
  License: MIT
@@ -41,6 +41,18 @@ Dynamic: license-file
41
41
 
42
42
  Extract Azure DevOps Pull Request metrics to SQLite and generate PowerBI-compatible CSVs.
43
43
 
44
+ ---
45
+
46
+ ## 🚀 Get Started
47
+
48
+ **Install from the Azure DevOps Marketplace:**
49
+
50
+ [![Install from Marketplace](https://img.shields.io/badge/Install-Azure%20DevOps%20Marketplace-blue?logo=azure-devops)](https://marketplace.visualstudio.com/items?itemName=OddEssentials.ado-git-repo-insights)
51
+
52
+ 👉 **New to this extension?** Follow the **[Installation Guide](docs/INSTALLATION.md)** for step-by-step setup instructions.
53
+
54
+ ---
55
+
44
56
  ## Overview
45
57
 
46
58
  This tool replaces the MongoDB-based `ado-pull-request-metrics` with a lightweight, file-based solution that:
@@ -7,6 +7,18 @@
7
7
 
8
8
  Extract Azure DevOps Pull Request metrics to SQLite and generate PowerBI-compatible CSVs.
9
9
 
10
+ ---
11
+
12
+ ## 🚀 Get Started
13
+
14
+ **Install from the Azure DevOps Marketplace:**
15
+
16
+ [![Install from Marketplace](https://img.shields.io/badge/Install-Azure%20DevOps%20Marketplace-blue?logo=azure-devops)](https://marketplace.visualstudio.com/items?itemName=OddEssentials.ado-git-repo-insights)
17
+
18
+ 👉 **New to this extension?** Follow the **[Installation Guide](docs/INSTALLATION.md)** for step-by-step setup instructions.
19
+
20
+ ---
21
+
10
22
  ## Overview
11
23
 
12
24
  This tool replaces the MongoDB-based `ado-pull-request-metrics` with a lightweight, file-based solution that:
@@ -0,0 +1 @@
1
+ 3.3.0
@@ -0,0 +1,472 @@
1
+ # Default Dashboard Enhancement Plan
2
+
3
+ This document outlines a multi-phase implementation plan to enhance the default dashboard, making it more useful and impressive based on existing data and our initial vision.
4
+
5
+ ## Executive Summary
6
+
7
+ The current default dashboard provides a solid foundation but leaves significant value untapped. Two essential gaps prevent us from delivering on our original vision:
8
+
9
+ 1. **Filters** - Dimension-based filtering (repo, team, author) exists in the data contract but not in the UI
10
+ 2. **Comparative Trend Analysis** - No period-over-period comparison, trend indicators, or delta context
11
+
12
+ This plan addresses both gaps through four implementation phases, progressively transforming the dashboard from a static snapshot view into an interactive, insight-rich analytics experience.
13
+
14
+ ---
15
+
16
+ ## Gap Analysis
17
+
18
+ ### What We Have (Current State)
19
+
20
+ | Component | Status | Notes |
21
+ |-----------|--------|-------|
22
+ | Summary Cards | 4 metrics | Total PRs, Cycle P50/P90, Contributors |
23
+ | Charts | 2 visualizations | Throughput bars, Distribution stacked bar |
24
+ | Date Range Filter | Implemented | Presets + custom picker |
25
+ | Dimension Filters | **Not implemented** | Schema ready in `dimensions.json` |
26
+ | Trend Indicators | **Not implemented** | No delta/direction context |
27
+ | Reviewer Metrics | **Data loaded, not displayed** | `reviewers_count` in weekly rollups |
28
+ | Period Comparison | **Not implemented** | No side-by-side analysis |
29
+
30
+ ### Data Already Available (Untapped)
31
+
32
+ From `weekly_rollups/YYYY-Www.json`:
33
+ - `reviewers_count` - Loaded but never displayed
34
+ - Historical data - Available for trend calculation
35
+ - Week-over-week deltas - Computable from existing data
36
+
37
+ From `distributions/YYYY.json`:
38
+ - `prs_by_month` - Could power monthly trend view
39
+ - Multi-year distributions - Available for year-over-year comparison
40
+
41
+ From `dimensions.json`:
42
+ - Organization, Project, Repository, Team names - Ready for filter dropdowns
43
+
44
+ ---
45
+
46
+ ## Implementation Phases
47
+
48
+ ### Phase A: Trend Indicators & Metric Expansion
49
+
50
+ **Goal**: Transform summary cards from static numbers to dynamic trend-aware metrics.
51
+
52
+ #### A.1 - Add Trend Deltas to Summary Cards
53
+
54
+ Add delta indicators showing change from previous period:
55
+
56
+ ```
57
+ ┌─────────────────────┐ ┌─────────────────────┐
58
+ │ Total PRs │ │ Cycle Time P50 │
59
+ │ 247 │ │ 4.2 hrs │
60
+ │ ▲ +12% vs prev │ │ ▼ -8% vs prev │
61
+ └─────────────────────┘ └─────────────────────┘
62
+ ```
63
+
64
+ **Implementation Details**:
65
+ - Compare current period to previous equivalent period
66
+ - For 30-day view: compare to previous 30 days
67
+ - For 90-day view: compare to previous 90 days
68
+ - Show percentage change with directional arrow
69
+ - Color coding: green (improvement), red (regression), gray (neutral)
70
+ - Neutral threshold: ±2% to avoid noise
71
+
72
+ **Files to modify**:
73
+ - `extension/ui/dashboard.js`: Add `calculateTrendDelta()` function
74
+ - `extension/ui/styles.css`: Add `.metric-delta`, `.delta-positive`, `.delta-negative` classes
75
+
76
+ #### A.2 - Add Reviewers Card (5th Summary Card)
77
+
78
+ Display the `reviewers_count` data that's already being loaded:
79
+
80
+ ```
81
+ ┌─────────────────────┐
82
+ │ Reviewers │
83
+ │ 18 │
84
+ │ ▲ +3 vs prev │
85
+ └─────────────────────┘
86
+ ```
87
+
88
+ **Implementation Details**:
89
+ - Calculate average reviewers per week across selected range
90
+ - Show delta vs previous period
91
+ - Position in summary card row (may need responsive layout adjustment)
92
+
93
+ #### A.3 - Add Sparkline Mini-Charts to Cards
94
+
95
+ Add small inline trend visualizations to each summary card:
96
+
97
+ ```
98
+ ┌─────────────────────┐
99
+ │ Total PRs │
100
+ │ 247 ╱╲_╱─ │ ← 8-week sparkline
101
+ │ ▲ +12% vs prev │
102
+ └─────────────────────┘
103
+ ```
104
+
105
+ **Implementation Details**:
106
+ - Render last 8 data points as SVG sparkline
107
+ - No axis labels (space-constrained)
108
+ - Single-color line matching metric theme
109
+ - Optional: Add hover tooltip with value
110
+
111
+ **Files to modify**:
112
+ - `extension/ui/dashboard.js`: Add `renderSparkline()` function
113
+ - `extension/ui/styles.css`: Add `.sparkline-container` styles
114
+
115
+ ---
116
+
117
+ ### Phase B: Dimension Filters
118
+
119
+ **Goal**: Enable users to slice data by repository, team, and other dimensions.
120
+
121
+ #### B.1 - Filter Bar UI Component
122
+
123
+ Add a horizontal filter bar below the date range selector:
124
+
125
+ ```
126
+ ┌─────────────────────────────────────────────────────────────┐
127
+ │ Date Range: [Last 90 days ▼] │
128
+ ├─────────────────────────────────────────────────────────────┤
129
+ │ Repository: [All ▼] Team: [All ▼] Author: [All ▼] [Clear]│
130
+ └─────────────────────────────────────────────────────────────┘
131
+ ```
132
+
133
+ **Implementation Details**:
134
+ - Multi-select dropdowns with search/filter capability
135
+ - "All" as default selection
136
+ - Clear button to reset all filters
137
+ - Filters persist in URL query params (shareable)
138
+ - Load dimensions from `dimensions.json`
139
+
140
+ **Files to modify**:
141
+ - `extension/ui/index.html`: Add filter bar HTML structure
142
+ - `extension/ui/dashboard.js`: Add filter state management, `applyFilters()`
143
+ - `extension/ui/dataset-loader.js`: Add dimension loading
144
+ - `extension/ui/styles.css`: Add `.filter-bar`, `.filter-dropdown` styles
145
+
146
+ #### B.2 - Backend Filter Support
147
+
148
+ Extend the aggregates generator to support dimension-filtered data:
149
+
150
+ **Option A - Pre-computed dimension slices** (recommended for MVP):
151
+ - Generate separate rollup files per dimension combination
152
+ - Structure: `weekly_rollups/YYYY-Www/repo-{repoId}.json`
153
+ - Pro: Fast UI, no runtime computation
154
+ - Con: More files, storage growth
155
+
156
+ **Option B - Client-side filtering**:
157
+ - Load full data, filter in JavaScript
158
+ - Pro: Simple backend, fewer files
159
+ - Con: Slower for large datasets
160
+
161
+ **Recommendation**: Start with Option B for MVP, migrate to Option A if performance degrades.
162
+
163
+ #### B.3 - Filter Chip Display
164
+
165
+ Show active filters as removable chips:
166
+
167
+ ```
168
+ │ Filtering by: [repo:backend ✕] [team:platform ✕] │
169
+ ```
170
+
171
+ **Implementation Details**:
172
+ - Chips appear when non-default filter selected
173
+ - Click ✕ to remove individual filter
174
+ - Compact display that doesn't crowd the UI
175
+
176
+ ---
177
+
178
+ ### Phase C: Enhanced Visualizations
179
+
180
+ **Goal**: Add richer chart types that surface deeper insights from existing data.
181
+
182
+ #### C.1 - Trend Line Overlay on Throughput Chart
183
+
184
+ Add a trend line (moving average) to the existing bar chart:
185
+
186
+ ```
187
+ PR Throughput Over Time
188
+ 40│ ▂▄ ═══════════════ ← 4-week moving average
189
+ 30│ ▄▆██▆▄▂▄▆█▆▄▂
190
+ 20│▄▆████████████▆▄
191
+ 10│██████████████████
192
+ └────────────────────────
193
+ W1 W2 W3 W4 W5 W6 W7 W8
194
+ ```
195
+
196
+ **Implementation Details**:
197
+ - Calculate 4-week simple moving average
198
+ - Overlay as line on existing bar chart
199
+ - Different color (e.g., orange) to distinguish from bars
200
+ - Optional: Toggle to show/hide trend line
201
+
202
+ #### C.2 - Reviewer Activity Chart (New)
203
+
204
+ Add a new chart showing reviewer engagement:
205
+
206
+ ```
207
+ Review Activity
208
+ ┌─────────────────────┐
209
+ │ ████████████ 18 rev │ Week 1
210
+ │ ██████████ 15 rev │ Week 2
211
+ │ ████████████████ 22 │ Week 3
212
+ └─────────────────────┘
213
+ ```
214
+
215
+ **Implementation Details**:
216
+ - Horizontal bar chart showing reviewers_count per week
217
+ - Complements the throughput chart (authors produce, reviewers consume)
218
+ - Helps identify review bottlenecks
219
+
220
+ #### C.3 - Cycle Time Trend Chart (New)
221
+
222
+ Replace or complement the distribution chart with a time-series view:
223
+
224
+ ```
225
+ Cycle Time Trend (P50 vs P90)
226
+ hrs
227
+ 24│ ╱╲
228
+ 16│ ╱╲__╱ ╲____ P90
229
+ 8│___╱ P50
230
+ └────────────────────────
231
+ W1 W2 W3 W4 W5 W6 W7 W8
232
+ ```
233
+
234
+ **Implementation Details**:
235
+ - Dual-line chart showing P50 and P90 over time
236
+ - Helps identify if cycle time is improving/degrading
237
+ - Legend with current values
238
+
239
+ #### C.4 - Chart Interactivity
240
+
241
+ Add hover tooltips and click interactions:
242
+
243
+ **Hover**: Show exact values
244
+ ```
245
+ ┌──────────────────┐
246
+ │ Week 23, 2024 │
247
+ │ PRs: 34 │
248
+ │ Cycle P50: 3.2h │
249
+ └──────────────────┘
250
+ ```
251
+
252
+ **Click**: Drill-down potential (sets date filter to that week)
253
+
254
+ ---
255
+
256
+ ### Phase D: Comparison Mode & Advanced Features
257
+
258
+ **Goal**: Enable powerful side-by-side analysis and polish the experience.
259
+
260
+ #### D.1 - Period Comparison Mode
261
+
262
+ Add a toggle to enable comparison view:
263
+
264
+ ```
265
+ [Comparison Mode: ON]
266
+ Compare: [This month ▼] vs [Previous month ▼]
267
+
268
+ ┌─────────────────────────────────────────────────────────────┐
269
+ │ This Month │ Previous Month │
270
+ ├─────────────────────────────┼──────────────────────────────┤
271
+ │ Total PRs: 247 │ Total PRs: 221 │
272
+ │ Cycle P50: 4.2 hrs │ Cycle P50: 4.6 hrs │
273
+ │ Contributors: 12 │ Contributors: 11 │
274
+ ├─────────────────────────────┴──────────────────────────────┤
275
+ │ Side-by-side charts here │
276
+ └─────────────────────────────────────────────────────────────┘
277
+ ```
278
+
279
+ **Implementation Details**:
280
+ - Toggle button to enter/exit comparison mode
281
+ - Two date range pickers in comparison mode
282
+ - Side-by-side summary cards
283
+ - Overlaid or side-by-side charts
284
+ - Delta summary at bottom
285
+
286
+ #### D.2 - Export Functionality
287
+
288
+ Add ability to export current view:
289
+
290
+ ```
291
+ [Export ▼]
292
+ ├── Export as CSV
293
+ ├── Export as PNG (screenshot)
294
+ └── Copy shareable link
295
+ ```
296
+
297
+ **Implementation Details**:
298
+ - CSV: Export filtered data as downloadable CSV
299
+ - PNG: Use html2canvas or similar for chart screenshots
300
+ - Link: Copy current URL with all filters encoded
301
+
302
+ #### D.3 - Dashboard Presets / Saved Views
303
+
304
+ Allow users to save filter combinations:
305
+
306
+ ```
307
+ [Saved Views ▼]
308
+ ├── + Save current view
309
+ ├── ─────────────
310
+ ├── Backend Team - Last 30 days
311
+ └── Platform Monthly Review
312
+ ```
313
+
314
+ **Implementation Details**:
315
+ - Save to user's extension settings
316
+ - Store: filter values, date range, comparison mode state
317
+ - Quick switch between saved configurations
318
+
319
+ #### D.4 - Responsive Layout Improvements
320
+
321
+ Ensure dashboard works well on various screen sizes:
322
+
323
+ - Tablet: Stack charts vertically, compress filter bar
324
+ - Large monitor: Expand to show more weeks, larger charts
325
+ - Print: Clean layout for PDF export
326
+
327
+ ---
328
+
329
+ ## Implementation Priority Matrix
330
+
331
+ | Feature | User Value | Effort | Data Ready | Priority |
332
+ |---------|------------|--------|------------|----------|
333
+ | Trend deltas on cards | High | Low | Yes | **P0** |
334
+ | Reviewers card | Medium | Low | Yes | **P0** |
335
+ | Repository filter | High | Medium | Yes | **P1** |
336
+ | Team filter | High | Medium | Yes | **P1** |
337
+ | Sparklines on cards | Medium | Medium | Yes | **P1** |
338
+ | Trend line overlay | Medium | Low | Yes | **P1** |
339
+ | Cycle time trend chart | High | Medium | Yes | **P2** |
340
+ | Reviewer activity chart | Medium | Medium | Yes | **P2** |
341
+ | Chart hover tooltips | Medium | Low | Yes | **P2** |
342
+ | Comparison mode | High | High | Yes | **P3** |
343
+ | Export functionality | Medium | Medium | Yes | **P3** |
344
+ | Saved views | Low | Medium | Yes | **P4** |
345
+
346
+ ---
347
+
348
+ ## Recommended Implementation Order
349
+
350
+ ### Sprint 1: Quick Wins (Phase A.1 + A.2)
351
+ - Add trend deltas to existing 4 summary cards
352
+ - Add 5th card for reviewers
353
+ - Estimated scope: ~2-3 days development
354
+
355
+ ### Sprint 2: Filters Foundation (Phase B.1 + B.2)
356
+ - Add filter bar UI component
357
+ - Implement client-side filtering
358
+ - Add filter chips display
359
+ - Estimated scope: ~3-4 days development
360
+
361
+ ### Sprint 3: Visual Polish (Phase A.3 + C.1)
362
+ - Add sparklines to summary cards
363
+ - Add trend line overlay to throughput chart
364
+ - Estimated scope: ~2-3 days development
365
+
366
+ ### Sprint 4: Chart Expansion (Phase C.2 + C.3 + C.4)
367
+ - Add reviewer activity chart
368
+ - Add cycle time trend chart
369
+ - Add hover tooltips to all charts
370
+ - Estimated scope: ~3-4 days development
371
+
372
+ ### Sprint 5: Advanced Features (Phase D.1 + D.2)
373
+ - Implement comparison mode
374
+ - Add export functionality
375
+ - Estimated scope: ~4-5 days development
376
+
377
+ ---
378
+
379
+ ## Success Metrics
380
+
381
+ After full implementation, the dashboard should enable users to answer:
382
+
383
+ 1. **Trend Questions**
384
+ - "Is our cycle time improving or getting worse?"
385
+ - "How does this month compare to last month?"
386
+ - "Are we merging more or fewer PRs than before?"
387
+
388
+ 2. **Filter Questions**
389
+ - "How is the backend team performing vs frontend?"
390
+ - "Which repository has the longest cycle times?"
391
+ - "How do my PRs compare to the team average?"
392
+
393
+ 3. **Capacity Questions**
394
+ - "Do we have enough reviewers for our PR volume?"
395
+ - "Is reviewer participation increasing or declining?"
396
+ - "Are certain teams bottlenecked on reviews?"
397
+
398
+ ---
399
+
400
+ ## Technical Considerations
401
+
402
+ ### No Schema Changes Required
403
+ All features in this plan use existing data from:
404
+ - `weekly_rollups/YYYY-Www.json` - Already has all needed fields
405
+ - `distributions/YYYY.json` - Already has time buckets and monthly data
406
+ - `dimensions.json` - Already has filter dimensions
407
+
408
+ ### Backward Compatibility
409
+ - All enhancements are additive to the UI
410
+ - No changes to data contracts or schemas
411
+ - Existing datasets work without regeneration
412
+
413
+ ### Performance
414
+ - Sparklines: Lightweight SVG, minimal overhead
415
+ - Filters: Client-side for MVP, can optimize later
416
+ - Comparison mode: Loads two date ranges, may need loading indicator
417
+
418
+ ---
419
+
420
+ ## Appendix: Mockups
421
+
422
+ ### Summary Cards with Trends (Phase A Complete)
423
+
424
+ ```
425
+ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐
426
+ │ Total PRs │ │ Cycle P50 │ │ Cycle P90 │ │ Contributors│ │ Reviewers │
427
+ │ 247 │ │ 4.2 hrs │ │ 12.8 hrs │ │ 12 │ │ 18 │
428
+ │ ╱╲_╱─╲ │ │ _╱╲__╱─ │ │ ─╲_╱╲_ │ │ ╱─╲_╱─ │ │ ─╱╲_╱─ │
429
+ │ ▲ +12% │ │ ▼ -8% │ │ ▼ -15% │ │ ▲ +2 │ │ ▲ +3 │
430
+ └─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘
431
+ ```
432
+
433
+ ### Filter Bar (Phase B Complete)
434
+
435
+ ```
436
+ ┌─────────────────────────────────────────────────────────────────────────────┐
437
+ │ Date Range: [Last 90 days ▼] [Jun 1 - Aug 31, 2024] │
438
+ ├─────────────────────────────────────────────────────────────────────────────┤
439
+ │ Repository: [backend, api ▼] Team: [All ▼] Author: [All ▼] [Clear All] │
440
+ │ Active: [backend ✕] [api ✕] │
441
+ └─────────────────────────────────────────────────────────────────────────────┘
442
+ ```
443
+
444
+ ### Enhanced Charts (Phase C Complete)
445
+
446
+ ```
447
+ PR Throughput Over Time Cycle Time Trend
448
+ 40│ ▂▄══════════════════ 24│ ╱╲
449
+ 30│ ▄▆██▆▄▂▄▆█▆▄▂ 16│ ╱╲__╱ ╲____ P90
450
+ 20│▄▆████████████▆▄ 8│___╱ P50
451
+ 10│██████████████████ └────────────────────
452
+ └──────────────────── W1 W2 W3 W4 W5 W6
453
+ W1 W2 W3 W4 W5 W6 W7 W8
454
+ Review Activity
455
+ Cycle Time Distribution ┌───────────────────┐
456
+ ┌──────────────────────────┐ │████████████ 18 │ W1
457
+ │ 0-1h ████████ 28% │ │██████████ 15 │ W2
458
+ │ 1-4h ██████████████ 35% │ │████████████████ 22│ W3
459
+ │ 4-24h ████████ 22% │ └───────────────────┘
460
+ │ 1-3d ████ 10% │
461
+ │ 3-7d ██ 4% │
462
+ │ 7d+ █ 1% │
463
+ └──────────────────────────┘
464
+ ```
465
+
466
+ ---
467
+
468
+ ## Conclusion
469
+
470
+ This plan transforms the default dashboard from a basic metrics display into an interactive, insight-rich analytics tool. By leveraging data we already collect and following a phased approach, we can deliver incremental value while building toward the comprehensive experience users expect.
471
+
472
+ The key insight: **the data is ready; we just need to surface it effectively.**