ragops 2.2.0__tar.gz → 2.4.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.
- {ragops-2.2.0 → ragops-2.4.0}/.github/ISSUE_TEMPLATE/bug.yml +1 -1
- {ragops-2.2.0 → ragops-2.4.0}/.github/workflows/ragops-gate.yml +1 -1
- {ragops-2.2.0 → ragops-2.4.0}/CHANGELOG.md +27 -0
- {ragops-2.2.0 → ragops-2.4.0}/PKG-INFO +18 -17
- {ragops-2.2.0 → ragops-2.4.0}/README.md +17 -16
- ragops-2.4.0/design-qa.md +56 -0
- ragops-2.4.0/docs/architecture/adr/0020-local-release-integrity.md +17 -0
- {ragops-2.2.0 → ragops-2.4.0}/docs/demo/cv-linkedin-copy.md +7 -6
- ragops-2.4.0/docs/demo/portfolio-case-study.md +45 -0
- ragops-2.4.0/docs/demo/presentation-outline.md +35 -0
- ragops-2.4.0/docs/demo/screenshots/ragops-adoption-hero.png +0 -0
- ragops-2.4.0/docs/demo/screenshots/ragops-adoption-mobile.png +0 -0
- ragops-2.4.0/docs/demo/video-script.md +30 -0
- ragops-2.4.0/docs/demo/walkthrough.md +46 -0
- ragops-2.4.0/docs/design-audit/adoption-refresh/compare.html +4 -0
- ragops-2.4.0/docs/design-audit/adoption-refresh/comparison-desktop.png +0 -0
- ragops-2.4.0/docs/design-audit/adoption-refresh/implementation-desktop.png +0 -0
- ragops-2.4.0/docs/design-audit/adoption-refresh/implementation-mobile.png +0 -0
- ragops-2.4.0/docs/design-audit/adoption-refresh/source-option-3.png +0 -0
- ragops-2.4.0/docs/design-audit/v2.3/01-workbench-desktop.png +0 -0
- ragops-2.4.0/docs/design-audit/v2.3/audit.md +20 -0
- {ragops-2.2.0 → ragops-2.4.0}/docs/engineering/github-pr-gate.md +1 -1
- {ragops-2.2.0 → ragops-2.4.0}/docs/engineering/gitlab-ci-gate.md +1 -1
- {ragops-2.2.0 → ragops-2.4.0}/docs/engineering/pypi-publishing.md +3 -3
- {ragops-2.2.0 → ragops-2.4.0}/docs/examples/gitlab-ci-ragops.yml +1 -1
- ragops-2.4.0/docs/getting-started.md +93 -0
- {ragops-2.2.0 → ragops-2.4.0}/docs/gtm/github-launch-checklist.md +3 -4
- ragops-2.4.0/docs/product/requirements-v2.3.md +24 -0
- ragops-2.4.0/docs/product/requirements-v2.4.md +26 -0
- {ragops-2.2.0 → ragops-2.4.0}/docs/product/roadmap.md +19 -1
- {ragops-2.2.0 → ragops-2.4.0}/docs/product/success-metrics.md +7 -1
- {ragops-2.2.0 → ragops-2.4.0}/docs/project/program-completion-audit.md +20 -2
- {ragops-2.2.0 → ragops-2.4.0}/docs/project/v2.2-acceptance.md +6 -5
- ragops-2.4.0/docs/project/v2.3-acceptance.md +32 -0
- ragops-2.4.0/docs/project/v2.4-acceptance.md +30 -0
- ragops-2.4.0/docs/releases/v2.3.0.md +22 -0
- ragops-2.4.0/docs/releases/v2.4.0.md +24 -0
- {ragops-2.2.0 → ragops-2.4.0}/pyproject.toml +1 -1
- {ragops-2.2.0 → ragops-2.4.0}/scripts/local_release.py +37 -1
- {ragops-2.2.0 → ragops-2.4.0}/site/index.html +47 -22
- ragops-2.4.0/site/styles.css +177 -0
- {ragops-2.2.0 → ragops-2.4.0}/src/ragops/__init__.py +1 -1
- {ragops-2.2.0 → ragops-2.4.0}/src/ragops/cli.py +2 -0
- {ragops-2.2.0 → ragops-2.4.0}/tests/test_adoption_recipes.py +1 -1
- {ragops-2.2.0 → ragops-2.4.0}/tests/test_local_release.py +25 -0
- {ragops-2.2.0 → ragops-2.4.0}/tests/test_public_api.py +12 -1
- {ragops-2.2.0 → ragops-2.4.0}/tests/test_readme_visuals.py +2 -1
- {ragops-2.2.0 → ragops-2.4.0}/tests/test_showcase_site.py +3 -1
- ragops-2.2.0/design-qa.md +0 -74
- ragops-2.2.0/docs/demo/portfolio-case-study.md +0 -28
- ragops-2.2.0/docs/demo/presentation-outline.md +0 -36
- ragops-2.2.0/docs/demo/video-script.md +0 -32
- ragops-2.2.0/docs/demo/walkthrough.md +0 -45
- ragops-2.2.0/docs/getting-started.md +0 -89
- ragops-2.2.0/site/styles.css +0 -1
- {ragops-2.2.0 → ragops-2.4.0}/.dockerignore +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/.github/ISSUE_TEMPLATE/design-partner.yml +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/.github/ISSUE_TEMPLATE/evaluator.yml +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/.github/ISSUE_TEMPLATE/feature.yml +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/.github/pull_request_template.md +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/.github/workflows/ci.yml +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/.github/workflows/nightly.yml +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/.github/workflows/pages.yml +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/.github/workflows/publish-pypi.yml +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/.github/workflows/ragops-gate-smoke.yml +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/.github/workflows/ragops-pr-comment.yml +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/.github/workflows/release.yml +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/.gitignore +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/AGENTS.md +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/CODE_OF_CONDUCT.md +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/CONTRIBUTING.md +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/Dockerfile +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/LICENSE +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/NEXT_SESSION.md +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/SECURITY.md +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/SUPPORT.md +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/apps/__init__.py +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/apps/api/__init__.py +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/apps/api/main.py +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/apps/github_pr_comment.py +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/apps/web/index.html +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/compose.yaml +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/docs/architecture/adr/0001-local-first-core.md +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/docs/architecture/adr/0002-baseline-regression-gates.md +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/docs/architecture/adr/0003-reference-app-outside-core.md +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/docs/architecture/adr/0004-open-core-boundary.md +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/docs/architecture/adr/0005-scenario-0.2-metadata-and-citation-precision.md +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/docs/architecture/adr/0006-response-fixture-overlays.md +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/docs/architecture/adr/0007-offline-reference-graphrag-agent.md +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/docs/architecture/adr/0008-local-team-review-workflow.md +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/docs/architecture/adr/0009-adopt-mit-license.md +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/docs/architecture/adr/0010-repair-trace-04-schema-json.md +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/docs/architecture/adr/0011-reusable-pr-gate-is-an-adapter.md +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/docs/architecture/adr/0012-opentelemetry-export-is-an-example-adapter.md +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/docs/architecture/adr/0013-additive-demo-catalog-and-codepoint-budget.md +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/docs/architecture/adr/0014-separate-pr-evaluation-from-comment-publication.md +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/docs/architecture/adr/0015-portable-design-partner-measurement.md +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/docs/architecture/adr/0016-first-class-evaluator-gates.md +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/docs/architecture/adr/0017-api-authentication-and-input-bounds.md +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/docs/architecture/adr/0018-portable-external-metric-envelope.md +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/docs/architecture/adr/0019-local-release-fallback.md +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/docs/architecture/component-diagram.md +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/docs/architecture/context-diagram.md +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/docs/architecture/control-plane-alpha.md +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/docs/architecture/data-model.md +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/docs/architecture/pr-comment-publishing.md +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/docs/architecture/system-overview.md +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/docs/architecture/threat-model.md +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/docs/demo/design-audit/01-current-desktop.jpg +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/docs/demo/design-audit/02-implementation-desktop.jpg +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/docs/demo/design-audit/04-implementation-mobile.jpg +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/docs/demo/design-audit/06-desktop-comparison.jpg +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/docs/demo/design-audit/09-limitations-section.jpg +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/docs/demo/design-audit/selected-open-source-adoption.png +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/docs/demo/infographics/evidence-stack.svg +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/docs/demo/infographics/release-gate-flow.svg +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/docs/demo/portfolio-handoff.md +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/docs/demo/screenshots/ragops-limitations-screen.jpg +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/docs/demo/screenshots/ragops-mobile-screen.jpg +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/docs/demo/screenshots/ragops-portfolio-desktop.jpg +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/docs/demo/screenshots/ragops-portfolio-mobile.jpg +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/docs/demo/screenshots/ragops-release-screen.jpg +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/docs/demo/screenshots/ragops-showcase-hero.jpg +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/docs/demo/social-preview.png +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/docs/design-audit/v1.9/01-start.png +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/docs/design-audit/v1.9/02-pass-decision.png +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/docs/design-audit/v1.9/03-invalid-json-stale-decision.png +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/docs/design-audit/v1.9/04-fixed-pass-decision.png +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/docs/design-audit/v1.9/05-fixed-invalid-json.png +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/docs/design-audit/v1.9/workbench-audit.md +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/docs/engineering/export-your-first-trace.md +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/docs/engineering/handbook.md +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/docs/engineering/local-release.md +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/docs/engineering/observability.md +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/docs/engineering/provider-adapters.md +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/docs/engineering/testing-strategy.md +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/docs/evaluation/answer-length-budget.md +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/docs/evaluation/benchmark-report-v0.2.md +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/docs/evaluation/evaluator-gates.md +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/docs/evaluation/red-team-plan.md +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/docs/evaluation/scenario-taxonomy.md +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/docs/evaluation/strategy.md +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/docs/examples/github-pr-comment.yml +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/docs/gtm/design-partner-outreach.md +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/docs/gtm/design-partner-pilot-runbook.md +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/docs/gtm/pilot-fixtures/synthetic-economics.json +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/docs/gtm/pilot-fixtures/synthetic-manifest.json +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/docs/gtm/pilot-fixtures/synthetic-observations.jsonl +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/docs/gtm/pilot-measurement-plan.md +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/docs/gtm/synthetic-pilot-report.md +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/docs/product/commercialization.md +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/docs/product/competitive-analysis.md +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/docs/product/jobs-to-be-done.md +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/docs/product/oss-launch-plan.md +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/docs/product/personas.md +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/docs/product/product_thesis.md +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/docs/product/requirements-v0.1.md +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/docs/product/requirements-v0.2.md +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/docs/product/requirements-v1.5.md +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/docs/product/requirements-v1.6.md +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/docs/product/requirements-v1.7.md +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/docs/product/requirements-v1.8.md +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/docs/product/requirements-v2.0.md +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/docs/product/requirements-v2.1.md +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/docs/product/requirements-v2.2.md +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/docs/project/backlog.md +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/docs/project/charter.md +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/docs/project/decision-log.md +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/docs/project/m1-acceptance.md +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/docs/project/m2-acceptance.md +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/docs/project/m3-acceptance.md +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/docs/project/m4-acceptance.md +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/docs/project/m5-acceptance.md +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/docs/project/milestones.md +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/docs/project/release-plan.md +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/docs/project/risk-register.md +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/docs/project/v1-acceptance.md +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/docs/project/v1.5-acceptance.md +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/docs/project/v1.6-acceptance.md +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/docs/project/v1.7-acceptance.md +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/docs/project/v1.8-acceptance.md +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/docs/project/v2.0-acceptance.md +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/docs/project/v2.1-acceptance.md +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/docs/project/work-breakdown.md +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/docs/releases/v1.5.0.md +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/docs/releases/v1.6.0.md +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/docs/releases/v1.7.0.md +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/docs/releases/v1.8.0.md +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/docs/releases/v2.0.0.md +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/docs/releases/v2.1.0.md +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/docs/releases/v2.2.0.md +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/examples/__init__.py +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/examples/japanese_troubleshooting_agent/README.md +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/examples/japanese_troubleshooting_agent/__init__.py +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/examples/japanese_troubleshooting_agent/agent.py +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/examples/japanese_troubleshooting_agent/architecture.md +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/examples/japanese_troubleshooting_agent/cli.py +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/examples/japanese_troubleshooting_agent/data/documents.json +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/examples/japanese_troubleshooting_agent/data/graph.json +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/examples/japanese_troubleshooting_agent/discovery.md +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/examples/japanese_troubleshooting_agent/executive-report.md +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/examples/japanese_troubleshooting_agent/results/comparison.md +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/examples/japanese_troubleshooting_agent/results/graph-traces.jsonl +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/examples/japanese_troubleshooting_agent/results/lexical-traces.jsonl +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/examples/japanese_troubleshooting_agent/rollout-plan.md +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/examples/japanese_troubleshooting_agent/scenario.json +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/examples/japanese_troubleshooting_agent/suite.json +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/examples/opentelemetry_trace_adapter/README.md +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/examples/opentelemetry_trace_adapter/__init__.py +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/examples/opentelemetry_trace_adapter/adapter.py +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/examples/opentelemetry_trace_adapter/spans.jsonl +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/ragops.toml +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/scenarios/japanese_troubleshooting/attack-pack.json +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/scenarios/japanese_troubleshooting/benchmark-adversarial.json +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/scenarios/japanese_troubleshooting/benchmark-baseline.json +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/scenarios/japanese_troubleshooting/benchmark-regressed.json +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/scenarios/japanese_troubleshooting/benchmark-v0.2.json +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/scenarios/japanese_troubleshooting/evaluation-policy.toml +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/scenarios/japanese_troubleshooting/external-metric-policy.toml +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/scenarios/japanese_troubleshooting/external-metrics-baseline.json +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/scenarios/japanese_troubleshooting/external-metrics-candidate.json +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/scenarios/japanese_troubleshooting/regressed_responses.json +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/scenarios/japanese_troubleshooting/sample_responses.json +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/scenarios/japanese_troubleshooting/sample_traces.jsonl +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/scenarios/japanese_troubleshooting/scenario.json +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/schemas/attack-pack-0.1.schema.json +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/schemas/external-metrics-0.1.schema.json +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/schemas/pilot-economics-0.1.schema.json +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/schemas/pilot-manifest-0.1.schema.json +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/schemas/pilot-observation-0.1.schema.json +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/schemas/report-0.2.schema.json +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/schemas/response-fixture-0.2.schema.json +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/schemas/responses-0.1.schema.json +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/schemas/scenario-0.1.schema.json +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/schemas/scenario-0.2.schema.json +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/schemas/trace-0.3.schema.json +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/schemas/trace-0.4.schema.json +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/site/apple-touch-icon.png +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/site/favicon.png +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/skills/ragops-feature/SKILL.md +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/skills/ragops-presentation/SKILL.md +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/skills/ragops-release/SKILL.md +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/src/ragops/adapters/__init__.py +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/src/ragops/adapters/external_metrics.py +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/src/ragops/adapters/http.py +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/src/ragops/benchmarks.py +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/src/ragops/config.py +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/src/ragops/control_plane.py +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/src/ragops/demo.py +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/src/ragops/engine.py +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/src/ragops/evaluators.py +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/src/ragops/loader.py +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/src/ragops/models.py +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/src/ragops/pilot.py +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/src/ragops/plugins.py +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/src/ragops/providers/__init__.py +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/src/ragops/providers/openai_responses.py +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/src/ragops/reporters.py +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/src/ragops/store.py +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/src/ragops/traces.py +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/tests/test_answer_length_cli.py +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/tests/test_api_contract.py +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/tests/test_benchmarks.py +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/tests/test_comparison.py +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/tests/test_config.py +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/tests/test_control_plane.py +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/tests/test_demo.py +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/tests/test_engine.py +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/tests/test_evaluator_depth.py +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/tests/test_external_metrics.py +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/tests/test_github_workflows.py +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/tests/test_http_adapter.py +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/tests/test_loader.py +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/tests/test_openai_provider.py +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/tests/test_opentelemetry_adapter.py +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/tests/test_pilot.py +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/tests/test_plugins_and_traces.py +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/tests/test_pr_comment_publisher.py +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/tests/test_reference_agent.py +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/tests/test_reference_benchmark.py +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/tests/test_release_version.py +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/tests/test_response_fixtures.py +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/tests/test_scenario_v02_and_attacks.py +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/tests/test_schema_files.py +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/tests/test_store_and_html.py +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/tests/test_team_workflow.py +0 -0
- {ragops-2.2.0 → ragops-2.4.0}/tests/test_workbench.py +0 -0
|
@@ -4,6 +4,33 @@ All notable changes follow Keep a Changelog. This project uses Semantic Versioni
|
|
|
4
4
|
|
|
5
5
|
## [Unreleased]
|
|
6
6
|
|
|
7
|
+
## [2.4.0] - 2026-07-13
|
|
8
|
+
|
|
9
|
+
### Changed
|
|
10
|
+
|
|
11
|
+
- Reframed the public adoption experience around the five-minute path from
|
|
12
|
+
installation to an explainable PASS/BLOCK release decision.
|
|
13
|
+
- Rebuilt the showcase hero as a responsive, interactive developer proof with
|
|
14
|
+
copyable commands and recorded portable evidence.
|
|
15
|
+
- Rewrote getting-started, demo, portfolio, presentation, video, CV/LinkedIn,
|
|
16
|
+
and GitHub launch materials with one evidence-safe product narrative.
|
|
17
|
+
- Replaced the primary README visual with a screenshot captured from the real
|
|
18
|
+
implementation and refreshed design-QA evidence.
|
|
19
|
+
|
|
20
|
+
## [2.3.0] - 2026-07-13
|
|
21
|
+
|
|
22
|
+
### Added
|
|
23
|
+
|
|
24
|
+
- `ragops --version` for installed-package and support diagnostics.
|
|
25
|
+
- Clean-wheel installation smoke testing in the local release verification lane.
|
|
26
|
+
|
|
27
|
+
### Changed
|
|
28
|
+
|
|
29
|
+
- Local artifact checksum verification is dependency-free and portable across
|
|
30
|
+
supported operating systems.
|
|
31
|
+
- Public documentation, roadmap, release evidence, and integration examples now
|
|
32
|
+
identify the current stable release consistently.
|
|
33
|
+
|
|
7
34
|
## [2.2.0] - 2026-07-13
|
|
8
35
|
|
|
9
36
|
### Added
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ragops
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.4.0
|
|
4
4
|
Summary: Evaluation and red-team release gates for RAG and agent systems
|
|
5
5
|
Project-URL: Homepage, https://github.com/thangldw/ragops
|
|
6
6
|
Project-URL: Documentation, https://github.com/thangldw/ragops#readme
|
|
@@ -31,7 +31,7 @@ Description-Content-Type: text/markdown
|
|
|
31
31
|
|
|
32
32
|
# RAGOps
|
|
33
33
|
|
|
34
|
-
**
|
|
34
|
+
**From install to an explainable RAG release decision in five minutes.**
|
|
35
35
|
|
|
36
36
|
[](https://github.com/thangldw/ragops/actions/workflows/ci.yml)
|
|
37
37
|
[](https://pypi.org/project/ragops/)
|
|
@@ -45,7 +45,7 @@ optional.
|
|
|
45
45
|
|
|
46
46
|
<p align="center">
|
|
47
47
|
<a href="https://thangldw.github.io/ragops/">
|
|
48
|
-
<img src="docs/demo/screenshots/ragops-
|
|
48
|
+
<img src="docs/demo/screenshots/ragops-adoption-hero.png" alt="RAGOps five-minute proof showing terminal commands, a passing baseline, and a blocked candidate with portable release evidence" width="100%">
|
|
49
49
|
</a>
|
|
50
50
|
</p>
|
|
51
51
|
|
|
@@ -57,6 +57,16 @@ optional.
|
|
|
57
57
|
<a href="docs/evaluation/benchmark-report-v0.2.md"><strong>Benchmark evidence</strong></a>
|
|
58
58
|
</p>
|
|
59
59
|
|
|
60
|
+
## The release question RAGOps answers
|
|
61
|
+
|
|
62
|
+
Your RAG or agent already runs. A prompt, retriever, embedding model, dataset,
|
|
63
|
+
or evaluator changes. **Is the candidate still good enough to release?**
|
|
64
|
+
|
|
65
|
+
RAGOps compares the candidate with an accepted baseline, applies versioned
|
|
66
|
+
quality and operational policy, and returns `PASS` or `BLOCK` with evidence.
|
|
67
|
+
It evaluates your system; it does not replace LangChain, LlamaIndex, your model,
|
|
68
|
+
or your retrieval stack.
|
|
69
|
+
|
|
60
70
|
## What RAGOps does
|
|
61
71
|
|
|
62
72
|
- Evaluates citations, groundedness, retrieval, latency, cost, and custom metrics.
|
|
@@ -80,21 +90,12 @@ returns a decision with named reasons rather than an isolated dashboard score.
|
|
|
80
90
|
|
|
81
91
|
## Five-minute proof
|
|
82
92
|
|
|
83
|
-
|
|
93
|
+
Install the stable CLI and generate a complete credential-free release bundle:
|
|
84
94
|
|
|
85
95
|
```bash
|
|
86
|
-
git clone https://github.com/thangldw/ragops.git
|
|
87
|
-
cd ragops
|
|
88
96
|
python -m venv .venv
|
|
89
97
|
source .venv/bin/activate
|
|
90
|
-
pip install
|
|
91
|
-
ragops demo --output ragops-demo
|
|
92
|
-
```
|
|
93
|
-
|
|
94
|
-
For the latest published stable CLI without cloning the repository:
|
|
95
|
-
|
|
96
|
-
```bash
|
|
97
|
-
pip install ragops==2.1.0
|
|
98
|
+
pip install ragops==2.4.0
|
|
98
99
|
ragops demo --output ragops-demo
|
|
99
100
|
```
|
|
100
101
|
|
|
@@ -135,8 +136,8 @@ injection, abstention, and consequential actions. These synthetic results
|
|
|
135
136
|
validate the harness and architecture comparison; they do not establish
|
|
136
137
|
Japanese semantic quality, customer adoption, or production ROI.
|
|
137
138
|
|
|
138
|
-
The
|
|
139
|
-
|
|
139
|
+
The v2.4.0 release validation passed 144 automated tests. This is repository
|
|
140
|
+
quality evidence, not a customer-adoption or production-security claim.
|
|
140
141
|
|
|
141
142
|
<p align="center">
|
|
142
143
|
<img src="docs/demo/infographics/evidence-stack.svg" alt="RAGOps evidence stack combining quality, safety, operational budgets, and regression comparison into a release decision" width="100%">
|
|
@@ -149,7 +150,7 @@ showcase, and demo paths with 138 automated tests.
|
|
|
149
150
|
| <img src="docs/demo/screenshots/ragops-release-screen.jpg" alt="RAGOps desktop release-decision screen" width="640"> | <img src="docs/demo/screenshots/ragops-limitations-screen.jpg" alt="RAGOps known-limitations and rollout-recommendation screen" width="640"> |
|
|
150
151
|
|
|
151
152
|
<p align="center">
|
|
152
|
-
<img src="docs/demo/screenshots/ragops-mobile
|
|
153
|
+
<img src="docs/demo/screenshots/ragops-adoption-mobile.png" alt="RAGOps responsive mobile five-minute proof with copyable commands" width="320">
|
|
153
154
|
</p>
|
|
154
155
|
|
|
155
156
|
The screens show the public reference experience and recorded synthetic
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# RAGOps
|
|
2
2
|
|
|
3
|
-
**
|
|
3
|
+
**From install to an explainable RAG release decision in five minutes.**
|
|
4
4
|
|
|
5
5
|
[](https://github.com/thangldw/ragops/actions/workflows/ci.yml)
|
|
6
6
|
[](https://pypi.org/project/ragops/)
|
|
@@ -14,7 +14,7 @@ optional.
|
|
|
14
14
|
|
|
15
15
|
<p align="center">
|
|
16
16
|
<a href="https://thangldw.github.io/ragops/">
|
|
17
|
-
<img src="docs/demo/screenshots/ragops-
|
|
17
|
+
<img src="docs/demo/screenshots/ragops-adoption-hero.png" alt="RAGOps five-minute proof showing terminal commands, a passing baseline, and a blocked candidate with portable release evidence" width="100%">
|
|
18
18
|
</a>
|
|
19
19
|
</p>
|
|
20
20
|
|
|
@@ -26,6 +26,16 @@ optional.
|
|
|
26
26
|
<a href="docs/evaluation/benchmark-report-v0.2.md"><strong>Benchmark evidence</strong></a>
|
|
27
27
|
</p>
|
|
28
28
|
|
|
29
|
+
## The release question RAGOps answers
|
|
30
|
+
|
|
31
|
+
Your RAG or agent already runs. A prompt, retriever, embedding model, dataset,
|
|
32
|
+
or evaluator changes. **Is the candidate still good enough to release?**
|
|
33
|
+
|
|
34
|
+
RAGOps compares the candidate with an accepted baseline, applies versioned
|
|
35
|
+
quality and operational policy, and returns `PASS` or `BLOCK` with evidence.
|
|
36
|
+
It evaluates your system; it does not replace LangChain, LlamaIndex, your model,
|
|
37
|
+
or your retrieval stack.
|
|
38
|
+
|
|
29
39
|
## What RAGOps does
|
|
30
40
|
|
|
31
41
|
- Evaluates citations, groundedness, retrieval, latency, cost, and custom metrics.
|
|
@@ -49,21 +59,12 @@ returns a decision with named reasons rather than an isolated dashboard score.
|
|
|
49
59
|
|
|
50
60
|
## Five-minute proof
|
|
51
61
|
|
|
52
|
-
|
|
62
|
+
Install the stable CLI and generate a complete credential-free release bundle:
|
|
53
63
|
|
|
54
64
|
```bash
|
|
55
|
-
git clone https://github.com/thangldw/ragops.git
|
|
56
|
-
cd ragops
|
|
57
65
|
python -m venv .venv
|
|
58
66
|
source .venv/bin/activate
|
|
59
|
-
pip install
|
|
60
|
-
ragops demo --output ragops-demo
|
|
61
|
-
```
|
|
62
|
-
|
|
63
|
-
For the latest published stable CLI without cloning the repository:
|
|
64
|
-
|
|
65
|
-
```bash
|
|
66
|
-
pip install ragops==2.1.0
|
|
67
|
+
pip install ragops==2.4.0
|
|
67
68
|
ragops demo --output ragops-demo
|
|
68
69
|
```
|
|
69
70
|
|
|
@@ -104,8 +105,8 @@ injection, abstention, and consequential actions. These synthetic results
|
|
|
104
105
|
validate the harness and architecture comparison; they do not establish
|
|
105
106
|
Japanese semantic quality, customer adoption, or production ROI.
|
|
106
107
|
|
|
107
|
-
The
|
|
108
|
-
|
|
108
|
+
The v2.4.0 release validation passed 144 automated tests. This is repository
|
|
109
|
+
quality evidence, not a customer-adoption or production-security claim.
|
|
109
110
|
|
|
110
111
|
<p align="center">
|
|
111
112
|
<img src="docs/demo/infographics/evidence-stack.svg" alt="RAGOps evidence stack combining quality, safety, operational budgets, and regression comparison into a release decision" width="100%">
|
|
@@ -118,7 +119,7 @@ showcase, and demo paths with 138 automated tests.
|
|
|
118
119
|
| <img src="docs/demo/screenshots/ragops-release-screen.jpg" alt="RAGOps desktop release-decision screen" width="640"> | <img src="docs/demo/screenshots/ragops-limitations-screen.jpg" alt="RAGOps known-limitations and rollout-recommendation screen" width="640"> |
|
|
119
120
|
|
|
120
121
|
<p align="center">
|
|
121
|
-
<img src="docs/demo/screenshots/ragops-mobile
|
|
122
|
+
<img src="docs/demo/screenshots/ragops-adoption-mobile.png" alt="RAGOps responsive mobile five-minute proof with copyable commands" width="320">
|
|
122
123
|
</p>
|
|
123
124
|
|
|
124
125
|
The screens show the public reference experience and recorded synthetic
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# Adoption refresh design QA
|
|
2
|
+
|
|
3
|
+
- Source visual truth: `docs/design-audit/adoption-refresh/source-option-3.png`
|
|
4
|
+
- Desktop implementation: `docs/design-audit/adoption-refresh/implementation-desktop.png`
|
|
5
|
+
- Mobile implementation: `docs/design-audit/adoption-refresh/implementation-mobile.png`
|
|
6
|
+
- Full-view comparison: `docs/design-audit/adoption-refresh/comparison-desktop.png`
|
|
7
|
+
- Desktop viewport/state: 1440×1024, initial hero
|
|
8
|
+
- Mobile viewport/state: 390×844, initial hero
|
|
9
|
+
|
|
10
|
+
## Findings
|
|
11
|
+
|
|
12
|
+
No actionable P0, P1, or P2 differences remain.
|
|
13
|
+
|
|
14
|
+
- Fonts and typography: implementation preserves the target's editorial sans +
|
|
15
|
+
monospace pairing, large three-line headline, blue emphasis, and readable code.
|
|
16
|
+
- Spacing and layout rhythm: two-column desktop proportions, left proof sequence,
|
|
17
|
+
right release report, CTA row, and evidence strip match the target hierarchy.
|
|
18
|
+
- Colors and tokens: graphite background, restrained blue, mint PASS, and warm
|
|
19
|
+
red BLOCK remain semantic and high contrast.
|
|
20
|
+
- Image quality and asset fidelity: the selected raster mock is retained only as
|
|
21
|
+
design truth; public screenshots are browser captures from the real HTML/CSS.
|
|
22
|
+
No visual asset was replaced with placeholder or improvised icon art.
|
|
23
|
+
- Copy and content: version is intentionally updated from the selected v2.3.0
|
|
24
|
+
concept to the v2.4.0 release candidate. Metrics are recorded repository
|
|
25
|
+
evidence and limitations remain explicit.
|
|
26
|
+
|
|
27
|
+
## Primary interactions tested
|
|
28
|
+
|
|
29
|
+
- Copy-command primary CTA resolves uniquely and executes.
|
|
30
|
+
- Navigation and GitHub links are real anchors.
|
|
31
|
+
- Desktop and 390px mobile layouts have no horizontal overflow.
|
|
32
|
+
- Browser console contained no errors during the desktop interaction test.
|
|
33
|
+
|
|
34
|
+
## Focused-region evidence
|
|
35
|
+
|
|
36
|
+
The full-view comparison keeps headline, proof terminal, PASS/BLOCK panels,
|
|
37
|
+
reason deltas, and CTA text legible at the same desktop viewport, so a separate
|
|
38
|
+
crop was not required. The mobile capture separately verifies text wrapping,
|
|
39
|
+
command readability, button width, and responsive navigation behavior.
|
|
40
|
+
|
|
41
|
+
## Comparison history
|
|
42
|
+
|
|
43
|
+
1. Initial desktop capture matched the selected information hierarchy but used
|
|
44
|
+
v2.3.0 evidence.
|
|
45
|
+
2. Documentation and implementation were aligned to the v2.4.0 release
|
|
46
|
+
candidate, then desktop and mobile screenshots were recaptured.
|
|
47
|
+
3. Final comparison found only intentional content simplification: the
|
|
48
|
+
implementation uses three named regressions rather than invented aggregate
|
|
49
|
+
scores from the mock.
|
|
50
|
+
|
|
51
|
+
## Follow-up polish
|
|
52
|
+
|
|
53
|
+
- P3: after observed traffic exists, test whether “copy commands” or “view live
|
|
54
|
+
report” produces higher five-minute-demo activation.
|
|
55
|
+
|
|
56
|
+
final result: passed
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# ADR 0020: Verify local release integrity before publication
|
|
2
|
+
|
|
3
|
+
Status: Accepted for owner review
|
|
4
|
+
|
|
5
|
+
## Decision
|
|
6
|
+
|
|
7
|
+
The quota-independent release lane must install its newly built wheel in a fresh
|
|
8
|
+
virtual environment before publication. SHA-256 verification is implemented in
|
|
9
|
+
dependency-free Python rather than delegating to platform-specific `shasum` or
|
|
10
|
+
`sha256sum` commands. The installed CLI exposes its package version.
|
|
11
|
+
|
|
12
|
+
## Consequences
|
|
13
|
+
|
|
14
|
+
Local releases catch missing-package and metadata errors before tags are pushed,
|
|
15
|
+
and PyPI promotion works consistently on macOS, Linux, and Windows. Verification
|
|
16
|
+
takes slightly longer because it creates an isolated environment. This does not
|
|
17
|
+
replace the supported-Python matrix when GitHub Actions capacity returns.
|
|
@@ -15,15 +15,16 @@ not customer production adoption.
|
|
|
15
15
|
candidate with 25-point citation coverage/precision regressions. The fixture
|
|
16
16
|
validates harness behavior, not Japanese semantic quality.
|
|
17
17
|
- Published architecture decisions, threat model, rollout plan, executive
|
|
18
|
-
go/no-go recommendation, reproducible reports, and
|
|
18
|
+
go/no-go recommendation, reproducible reports, and a v2.4.0 release validated
|
|
19
|
+
by 144 automated tests.
|
|
19
20
|
|
|
20
21
|
## LinkedIn project description
|
|
21
22
|
|
|
22
|
-
RAGOps
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
23
|
+
RAGOps is the provider-independent evidence layer between an AI change and a
|
|
24
|
+
release decision. It evaluates recorded RAG/agent output, applies versioned
|
|
25
|
+
quality and operational policy, and produces an explainable PASS or BLOCK report
|
|
26
|
+
locally. The public synthetic fixture validates the harness—not customer
|
|
27
|
+
adoption, production security, or Japanese semantic quality.
|
|
27
28
|
|
|
28
29
|
Repository: https://github.com/thangldw/ragops
|
|
29
30
|
Case study: https://thangldw.github.io/projects/ragops/
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# RAGOps portfolio case study
|
|
2
|
+
|
|
3
|
+
## From AI change to defensible release decision
|
|
4
|
+
|
|
5
|
+
RAG and agent teams can ship a prompt, retriever, embedding, or dataset change
|
|
6
|
+
quickly. The harder problem is deciding whether the candidate is still good
|
|
7
|
+
enough to release. Quality scores, operational budgets, citations, and review
|
|
8
|
+
notes often live in separate tools with no accepted baseline.
|
|
9
|
+
|
|
10
|
+
I built RAGOps as the provider-independent evidence layer between an AI change
|
|
11
|
+
and a release. It consumes recorded responses, portable traces, and optional
|
|
12
|
+
external evaluator metrics; applies versioned absolute and regression policy;
|
|
13
|
+
then emits an explainable `PASS` or `BLOCK` decision in JSON, Markdown, or HTML.
|
|
14
|
+
|
|
15
|
+
## Five-minute proof
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
pip install ragops==2.4.0
|
|
19
|
+
ragops demo --output ragops-demo
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
The generated report shows an accepted baseline passing and an intentionally
|
|
23
|
+
regressed candidate blocked with named reasons. No model API is required.
|
|
24
|
+
|
|
25
|
+
## Evidence
|
|
26
|
+
|
|
27
|
+
- Dependency-free Python 3.11+ evaluation core.
|
|
28
|
+
- 30-case synthetic release-gate fixture across nine failure families.
|
|
29
|
+
- Graph+ACL reference agent whose lexical-only candidate records 25-point
|
|
30
|
+
citation coverage and precision regressions.
|
|
31
|
+
- Portable Ragas, DeepEval, Langfuse, and internal-judge metric envelope.
|
|
32
|
+
- Build-once GitHub/PyPI releases with byte-identical artifacts, SBOM, and
|
|
33
|
+
checksums; v2.4.0 release validation passed 144 tests.
|
|
34
|
+
|
|
35
|
+
## Product boundary
|
|
36
|
+
|
|
37
|
+
RAGOps evaluates an existing RAG or agent. It does not replace orchestration,
|
|
38
|
+
retrieval, generation, model observability, or human review. Synthetic evidence
|
|
39
|
+
validates the harness, not semantic correctness, production security, customer
|
|
40
|
+
adoption, or ROI.
|
|
41
|
+
|
|
42
|
+
## Current recommendation
|
|
43
|
+
|
|
44
|
+
Use v2.4.0 for offline evaluation and customer discovery. Convert real failures
|
|
45
|
+
into reviewed regression fixtures before expanding into hosted collaboration.
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# Ten-minute presentation outline
|
|
2
|
+
|
|
3
|
+
## 1. Release question — 60 seconds
|
|
4
|
+
|
|
5
|
+
“We changed the RAG system. Is the candidate still good enough to release?”
|
|
6
|
+
Show why isolated scores and manual review do not create a defensible baseline.
|
|
7
|
+
|
|
8
|
+
## 2. Product thesis — 60 seconds
|
|
9
|
+
|
|
10
|
+
RAGOps is a provider-independent release-policy and evidence layer for existing
|
|
11
|
+
RAG and agents—not another orchestration framework.
|
|
12
|
+
|
|
13
|
+
## 3. Five-minute path — 90 seconds
|
|
14
|
+
|
|
15
|
+
Show install → demo → PASS baseline → BLOCK candidate → portable report.
|
|
16
|
+
|
|
17
|
+
## 4. Live evidence — 180 seconds
|
|
18
|
+
|
|
19
|
+
Run `ragops demo`, open the HTML report, and trace one aggregate regression to
|
|
20
|
+
its case, citations, metric delta, and versioned policy rule.
|
|
21
|
+
|
|
22
|
+
## 5. Extensibility — 90 seconds
|
|
23
|
+
|
|
24
|
+
Map portable responses/traces and Ragas, DeepEval, Langfuse, or internal scores
|
|
25
|
+
into the same gate. Keep provider semantics outside the dependency-free core.
|
|
26
|
+
|
|
27
|
+
## 6. Trust boundary — 90 seconds
|
|
28
|
+
|
|
29
|
+
Separate recorded synthetic evidence from production claims. Explain local-first
|
|
30
|
+
execution, exact artifact promotion, known limits, and why hosted 3.0 requires
|
|
31
|
+
real customer demand and operations.
|
|
32
|
+
|
|
33
|
+
## 7. Close — 30 seconds
|
|
34
|
+
|
|
35
|
+
“Evaluate with evidence. Release with a reason.”
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# 60-second adoption video script
|
|
2
|
+
|
|
3
|
+
## 0:00–0:10 — The change
|
|
4
|
+
|
|
5
|
+
Show a prompt/retriever/model change and ask: “Is this candidate still safe
|
|
6
|
+
enough and useful enough to release?”
|
|
7
|
+
|
|
8
|
+
## 0:10–0:22 — Install and run
|
|
9
|
+
|
|
10
|
+
```text
|
|
11
|
+
pip install ragops==2.4.0
|
|
12
|
+
ragops demo --output ragops-demo
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
Say: “No model API. No hosted dependency. Five minutes to reviewable evidence.”
|
|
16
|
+
|
|
17
|
+
## 0:22–0:38 — Decision
|
|
18
|
+
|
|
19
|
+
Open the report. Baseline is `PASS`; candidate is `BLOCK`. Highlight named
|
|
20
|
+
citation, groundedness, latency, or cost gates rather than an opaque score.
|
|
21
|
+
|
|
22
|
+
## 0:38–0:50 — Fit your stack
|
|
23
|
+
|
|
24
|
+
Show portable responses/traces and optional metrics from Ragas, DeepEval,
|
|
25
|
+
Langfuse, or an internal judge entering the same versioned policy.
|
|
26
|
+
|
|
27
|
+
## 0:50–1:00 — Honest close
|
|
28
|
+
|
|
29
|
+
“RAGOps evaluates the system you already have. Synthetic fixtures validate the
|
|
30
|
+
harness; your reviewed production evidence decides what ships.”
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# Five-minute demo walkthrough
|
|
2
|
+
|
|
3
|
+
Audience: an engineer who already operates a RAG or agent system and needs a
|
|
4
|
+
repeatable release decision.
|
|
5
|
+
|
|
6
|
+
## Minute 0–1: state the release question
|
|
7
|
+
|
|
8
|
+
“The system already works. We changed a prompt, retriever, embedding model, or
|
|
9
|
+
dataset. Is the candidate still good enough to release?”
|
|
10
|
+
|
|
11
|
+
RAGOps sits outside the application. It consumes recorded evidence and applies
|
|
12
|
+
the same versioned policy to baseline and candidate.
|
|
13
|
+
|
|
14
|
+
## Minute 1–2: run the proof
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
pip install ragops==2.4.0
|
|
18
|
+
ragops demo --output ragops-demo
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
Explain that process success and release decision are separate: the command
|
|
22
|
+
returns successfully because it reproduced the expected blocked regression.
|
|
23
|
+
|
|
24
|
+
## Minute 2–3: inspect PASS and BLOCK
|
|
25
|
+
|
|
26
|
+
Open `ragops-demo/release-report.html`.
|
|
27
|
+
|
|
28
|
+
- Baseline: `PASS`, because it satisfies the frozen scenario and thresholds.
|
|
29
|
+
- Candidate: `BLOCK`, with named metric and case-level reasons.
|
|
30
|
+
- Evidence: portable JSON, Markdown, HTML, scenario, baseline, and candidate.
|
|
31
|
+
|
|
32
|
+
## Minute 3–4: trace one failure
|
|
33
|
+
|
|
34
|
+
Follow one aggregate regression to its case, answer, citations, metric delta,
|
|
35
|
+
and policy rule. Emphasize evidence lineage rather than a single dashboard score.
|
|
36
|
+
|
|
37
|
+
## Minute 4–5: map to the adopter's stack
|
|
38
|
+
|
|
39
|
+
Replace the demo responses with recorded application output or JSONL traces.
|
|
40
|
+
Keep model, retriever, and orchestration choices outside RAGOps. Import optional
|
|
41
|
+
Ragas, DeepEval, Langfuse, or internal-judge metrics through the portable metric
|
|
42
|
+
envelope when those tools already exist.
|
|
43
|
+
|
|
44
|
+
Close honestly: lexical groundedness is not semantic entailment, synthetic
|
|
45
|
+
fixtures are not customer evidence, and the local control plane is not hosted
|
|
46
|
+
production infrastructure.
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="en"><head><meta charset="utf-8"><title>RAGOps adoption refresh QA</title>
|
|
3
|
+
<style>body{margin:0;background:#05070b;color:#fff;font:14px system-ui}.grid{display:grid;grid-template-columns:1fr 1fr;gap:12px;padding:12px}.panel{min-width:0}.label{padding:8px 0;color:#9ba8bb}img{display:block;width:100%;height:auto;border:1px solid #28354a}</style></head>
|
|
4
|
+
<body><div class="grid"><div class="panel"><div class="label">Selected visual target</div><img src="source-option-3.png" alt="Selected option 3"></div><div class="panel"><div class="label">Rendered implementation</div><img src="implementation-desktop.png" alt="Rendered implementation"></div></div></body></html>
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# v2.3 workbench product-flow audit
|
|
2
|
+
|
|
3
|
+
## Flow
|
|
4
|
+
|
|
5
|
+
1. **Evaluation input — healthy.** API key is explicitly tab-local; scenario and
|
|
6
|
+
response fixtures are prefilled and labeled.
|
|
7
|
+
2. **Release decision — healthy empty state.** Before evaluation the UI says
|
|
8
|
+
“Waiting for a run” and “Not evaluated”; it does not display stale PASS data.
|
|
9
|
+
3. **Experiment history — healthy with setup guidance.** The run limit is labeled
|
|
10
|
+
and the page explains the `RAGOPS_STORE` requirement.
|
|
11
|
+
|
|
12
|
+
## Highest-impact follow-up
|
|
13
|
+
|
|
14
|
+
No release-blocking redesign is justified. A future usability study should test
|
|
15
|
+
whether adopters prefer file upload over large JSON textareas; screenshots alone
|
|
16
|
+
cannot establish this. Keyboard behavior, screen-reader announcements, focus
|
|
17
|
+
movement after evaluation, and color contrast require dedicated accessibility
|
|
18
|
+
testing and are not claimed here.
|
|
19
|
+
|
|
20
|
+

|
|
@@ -19,7 +19,7 @@ Set these repository-relative variables:
|
|
|
19
19
|
|
|
20
20
|
```yaml
|
|
21
21
|
variables:
|
|
22
|
-
RAGOPS_VERSION: "2.
|
|
22
|
+
RAGOPS_VERSION: "2.4.0"
|
|
23
23
|
RAGOPS_SCENARIO: "evaluation/scenario.json"
|
|
24
24
|
RAGOPS_BASELINE: "evaluation/baseline.json"
|
|
25
25
|
RAGOPS_CANDIDATE: "evaluation/candidate.json"
|
|
@@ -9,10 +9,10 @@ PyPI API token and publishes only an existing tag whose `vX.Y.Z` value matches
|
|
|
9
9
|
|
|
10
10
|
- Project: [ragops on PyPI](https://pypi.org/project/ragops/)
|
|
11
11
|
- First Trusted Publishing release: `1.6.0`
|
|
12
|
-
- Current verified release: `2.
|
|
12
|
+
- Current verified release: `2.3.0`
|
|
13
13
|
- GitHub environment: `pypi`
|
|
14
14
|
- Publisher: `thangldw/ragops`, workflow `publish-pypi.yml`
|
|
15
|
-
- Verification: 2.
|
|
15
|
+
- Verification: 2.3.0 wheel and sdist present; clean install and
|
|
16
16
|
credential-free proposal-review demo pass
|
|
17
17
|
|
|
18
18
|
## One-time owner setup
|
|
@@ -32,7 +32,7 @@ GitHub's current OIDC guidance is linked from the
|
|
|
32
32
|
## Publish an accepted tag
|
|
33
33
|
|
|
34
34
|
1. Open **Actions → Publish package to PyPI → Run workflow**.
|
|
35
|
-
2. Enter an existing tag such as `v2.
|
|
35
|
+
2. Enter an existing tag such as `v2.3.0`.
|
|
36
36
|
3. Approve the `pypi` environment when protection rules require it.
|
|
37
37
|
4. After success, install in a clean environment and compare the installed
|
|
38
38
|
version and wheel hash with the GitHub Release asset.
|
|
@@ -2,7 +2,7 @@ ragops_release_gate:
|
|
|
2
2
|
stage: test
|
|
3
3
|
image: python:3.12-slim
|
|
4
4
|
variables:
|
|
5
|
-
RAGOPS_VERSION: "2.
|
|
5
|
+
RAGOPS_VERSION: "2.4.0"
|
|
6
6
|
RAGOPS_SCENARIO: "scenarios/japanese_troubleshooting/benchmark-v0.2.json"
|
|
7
7
|
RAGOPS_BASELINE: "scenarios/japanese_troubleshooting/benchmark-baseline.json"
|
|
8
8
|
RAGOPS_CANDIDATE: "scenarios/japanese_troubleshooting/benchmark-regressed.json"
|