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.
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/.gitattributes +16 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/.gitignore +1 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/CHANGELOG.md +110 -0
- {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
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/README.md +12 -0
- ado_git_repo_insights-3.3.0/VERSION +1 -0
- ado_git_repo_insights-3.3.0/docs/DEFAULT-DASHBOARD-ENHANCEMENT-PLAN.md +472 -0
- ado_git_repo_insights-3.3.0/docs/ENABLE-ML-FEATURES.md +241 -0
- ado_git_repo_insights-3.3.0/docs/INSTALLATION.md +433 -0
- ado_git_repo_insights-3.3.0/extension/overview.md +129 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/extension/tasks/extract-prs/index.js +71 -9
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/extension/tasks/extract-prs/task.json +28 -2
- ado_git_repo_insights-3.3.0/extension/tests/api-patterns.test.js +124 -0
- ado_git_repo_insights-3.3.0/extension/tests/cross-project-settings.test.js +133 -0
- ado_git_repo_insights-3.3.0/extension/tests/dashboard.test.js +2122 -0
- ado_git_repo_insights-3.3.0/extension/tests/pipeline-artifact-url.test.js +141 -0
- ado_git_repo_insights-3.3.0/extension/tests/production-issues.test.js +989 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/extension/ui/artifact-client.js +110 -10
- ado_git_repo_insights-3.3.0/extension/ui/dashboard.js +2077 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/extension/ui/error-types.js +9 -3
- ado_git_repo_insights-3.3.0/extension/ui/index.html +282 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/extension/ui/settings.html +25 -6
- ado_git_repo_insights-3.3.0/extension/ui/settings.js +554 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/extension/ui/styles.css +600 -1
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/extension/vss-extension.json +2 -1
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/package-lock.json +2 -2
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/package.json +1 -1
- {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
- {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
- ado_git_repo_insights-3.3.0/tests/integration/test_phase5_ml_integration.py +695 -0
- ado_git_repo_insights-2.7.5/VERSION +0 -1
- ado_git_repo_insights-2.7.5/extension/overview.md +0 -70
- ado_git_repo_insights-2.7.5/extension/tests/api-patterns.test.js +0 -114
- ado_git_repo_insights-2.7.5/extension/tests/dashboard.test.js +0 -568
- ado_git_repo_insights-2.7.5/extension/ui/dashboard.js +0 -1032
- ado_git_repo_insights-2.7.5/extension/ui/index.html +0 -176
- ado_git_repo_insights-2.7.5/extension/ui/settings.js +0 -240
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/.editorconfig +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/.github/scripts/check-baseline-integrity.js +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/.github/scripts/validate-test-results.py +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/.github/workflows/ci.yml +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/.github/workflows/release.yml +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/.gitleaks.toml +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/.husky/pre-commit +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/.husky/pre-push +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/.pre-commit-config.yaml +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/.releaserc.json +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/LICENSE +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/MERMAID.md +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/agents/INVARIANTS.md +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/agents/definition-of-done.md +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/agents/victory-gates.md +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/config.example.yaml +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/docs/EXTENSION.md +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/docs/MANUAL_WALKTHROUGH.md +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/docs/PHASE5.md +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/docs/PHASE6.md +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/docs/SESSION.md +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/docs/SUMMARY.md +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/docs/ado-pipeline-smoke-check.md +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/docs/dataset-contract.md +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/docs/phase5-contract-notes.md +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/docs/rollout-plan.md +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/docs/runbook.md +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/extension/images/README.md +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/extension/images/icon.png +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/extension/images/icon.png.placeholder +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/extension/jest.config.js +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/extension/package-lock.json +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/extension/package.json +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/extension/scripts/copy-vss-sdk.sh +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/extension/scripts/update-perf-baseline.js +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/extension/tasks/extract-prs/index.test.js +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/extension/tasks/extract-prs/package-lock.json +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/extension/tasks/extract-prs/package.json +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/extension/test-output.txt +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/extension/test-results.json +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/extension/tests/ado-sdk.test.js +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/extension/tests/auth-pattern.test.js +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/extension/tests/chunked-loading.test.js +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/extension/tests/dataset-loader.test.js +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/extension/tests/date-range-warning.test.js +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/extension/tests/error-codes.test.js +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/extension/tests/fixtures/aggregates/dimensions.json +0 -0
- {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
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/extension/tests/fixtures/dataset-manifest.json +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/extension/tests/fixtures/insights/summary.json +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/extension/tests/fixtures/perf-baselines.json +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/extension/tests/fixtures/predictions/trends.json +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/extension/tests/fixtures.test.js +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/extension/tests/metrics.test.js +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/extension/tests/mocks/ado-sdk.js +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/extension/tests/performance.test.js +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/extension/tests/sdk-bundling.test.js +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/extension/tests/setup.js +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/extension/tests/synthetic-fixtures.test.js +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/extension/ui/VSS.SDK.min.js +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/extension/ui/dataset-loader.js +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/extension/ui/error-codes.js +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/extension-verification-test.yml +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/insights-verification-test.yml +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/pr-insights-pipeline.yml +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/pyproject.toml +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/sample-pipeline.yml +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/schemas/dataset-manifest.schema.json +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/schemas/insights.schema.json +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/schemas/predictions.schema.json +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/scripts/check-version-unchanged.sh +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/scripts/csv_diff.py +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/scripts/generate-synthetic-dataset.py +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/scripts/stamp-extension-version.js +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/scripts/validate-task-inputs.js +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/setup.cfg +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/src/ado_git_repo_insights/__init__.py +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/src/ado_git_repo_insights/cli.py +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/src/ado_git_repo_insights/config.py +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/src/ado_git_repo_insights/extractor/__init__.py +0 -0
- {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
- {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
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/src/ado_git_repo_insights/ml/__init__.py +0 -0
- {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
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/src/ado_git_repo_insights/ml/forecaster.py +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/src/ado_git_repo_insights/ml/insights.py +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/src/ado_git_repo_insights/persistence/__init__.py +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/src/ado_git_repo_insights/persistence/database.py +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/src/ado_git_repo_insights/persistence/models.py +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/src/ado_git_repo_insights/persistence/repository.py +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/src/ado_git_repo_insights/transform/__init__.py +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/src/ado_git_repo_insights/transform/aggregators.py +0 -0
- {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
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/src/ado_git_repo_insights/utils/__init__.py +0 -0
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/tests/__init__.py +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/tests/fixtures/README.md +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/tests/integration/__init__.py +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/tests/integration/test_backfill_convergence.py +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/tests/integration/test_db_open_failure.py +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/tests/integration/test_golden_outputs.py +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/tests/integration/test_incremental_run.py +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/tests/integration/test_multi_project_scoping.py +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/tests/test_redaction.py +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/tests/unit/__init__.py +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/tests/unit/test_ado_client_pagination.py +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/tests/unit/test_aggregators.py +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/tests/unit/test_artifacts_dir.py +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/tests/unit/test_chunk_selection.py +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/tests/unit/test_cli_args.py +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/tests/unit/test_cli_exit_code.py +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/tests/unit/test_comments_cli.py +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/tests/unit/test_comments_extraction.py +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/tests/unit/test_completed_only.py +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/tests/unit/test_config_validation.py +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/tests/unit/test_csv_contract.py +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/tests/unit/test_csv_determinism.py +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/tests/unit/test_date_range_defaults.py +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/tests/unit/test_datetime_utils.py +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/tests/unit/test_forecaster_contract.py +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/tests/unit/test_insights_contract.py +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/tests/unit/test_insights_id_stability.py +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/tests/unit/test_insights_schema.py +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/tests/unit/test_logging_config.py +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/tests/unit/test_ml_cli_flags.py +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/tests/unit/test_monday_alignment.py +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/tests/unit/test_operational_summary.py +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/tests/unit/test_predictions_schema.py +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/tests/unit/test_retry_policy.py +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/tests/unit/test_run_summary.py +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/tests/unit/test_secret_redaction.py +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/tests/unit/test_summary_drift_guard.py +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/tests/unit/test_synthetic_dataset.py +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/tests/unit/test_team_extraction.py +0 -0
- {ado_git_repo_insights-2.7.5 → ado_git_repo_insights-3.3.0}/tests/unit/test_upsert_keys.py +0 -0
- {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
|
|
|
@@ -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:
|
|
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
|
+
[](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
|
+
[](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.**
|