qaas-python 0.1.0__tar.gz → 0.1.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (170) hide show
  1. {qaas_python-0.1.0 → qaas_python-0.1.1}/.gitignore +6 -0
  2. {qaas_python-0.1.0 → qaas_python-0.1.1}/PKG-INFO +2 -33
  3. {qaas_python-0.1.0 → qaas_python-0.1.1}/README.md +1 -32
  4. {qaas_python-0.1.0 → qaas_python-0.1.1}/pyproject.toml +1 -1
  5. qaas_python-0.1.0/target-app/cross-tenant-order-detail-leak.png +0 -0
  6. qaas_python-0.1.0/target-app/new-order-validation-wipes-form.png +0 -0
  7. qaas_python-0.1.0/target-app/order-placed-banner-but-draft-status.png +0 -0
  8. qaas_python-0.1.0/target-app/place-order-noop-single-item.png +0 -0
  9. qaas_python-0.1.0/target-app/signout-secondary-button-contrast.png +0 -0
  10. qaas_python-0.1.0/target-app/web/dist/assets/index-Cdavr0Eg.css +0 -1
  11. qaas_python-0.1.0/target-app/web/dist/assets/index-zpKS18v-.js +0 -67
  12. qaas_python-0.1.0/target-app/web/dist/index.html +0 -13
  13. {qaas_python-0.1.0 → qaas_python-0.1.1}/ARCHITECTURE.md +0 -0
  14. {qaas_python-0.1.0 → qaas_python-0.1.1}/BUILD_PLAN.md +0 -0
  15. {qaas_python-0.1.0 → qaas_python-0.1.1}/CLAUDE.md +0 -0
  16. {qaas_python-0.1.0 → qaas_python-0.1.1}/LICENSE +0 -0
  17. {qaas_python-0.1.0 → qaas_python-0.1.1}/config/targets/corvid.yaml +0 -0
  18. {qaas_python-0.1.0 → qaas_python-0.1.1}/src/qaas/adapters/__init__.py +0 -0
  19. {qaas_python-0.1.0 → qaas_python-0.1.1}/src/qaas/adapters/tracker.py +0 -0
  20. {qaas_python-0.1.0 → qaas_python-0.1.1}/src/qaas/adapters/vcs.py +0 -0
  21. {qaas_python-0.1.0 → qaas_python-0.1.1}/src/qaas/cli.py +0 -0
  22. {qaas_python-0.1.0 → qaas_python-0.1.1}/src/qaas/conductor.py +0 -0
  23. {qaas_python-0.1.0 → qaas_python-0.1.1}/src/qaas/config.py +0 -0
  24. {qaas_python-0.1.0 → qaas_python-0.1.1}/src/qaas/defaults/config/agents/arbiter.yaml +0 -0
  25. {qaas_python-0.1.0 → qaas_python-0.1.1}/src/qaas/defaults/config/agents/cartographer.yaml +0 -0
  26. {qaas_python-0.1.0 → qaas_python-0.1.1}/src/qaas/defaults/config/agents/clerk.yaml +0 -0
  27. {qaas_python-0.1.0 → qaas_python-0.1.1}/src/qaas/defaults/config/agents/conduit.yaml +0 -0
  28. {qaas_python-0.1.0 → qaas_python-0.1.1}/src/qaas/defaults/config/agents/forge.yaml +0 -0
  29. {qaas_python-0.1.0 → qaas_python-0.1.1}/src/qaas/defaults/config/agents/mender.yaml +0 -0
  30. {qaas_python-0.1.0 → qaas_python-0.1.1}/src/qaas/defaults/config/agents/proof.yaml +0 -0
  31. {qaas_python-0.1.0 → qaas_python-0.1.1}/src/qaas/defaults/config/agents/surface.yaml +0 -0
  32. {qaas_python-0.1.0 → qaas_python-0.1.1}/src/qaas/defaults/config/system.yaml +0 -0
  33. {qaas_python-0.1.0 → qaas_python-0.1.1}/src/qaas/discover.py +0 -0
  34. {qaas_python-0.1.0 → qaas_python-0.1.1}/src/qaas/envelope.py +0 -0
  35. {qaas_python-0.1.0 → qaas_python-0.1.1}/src/qaas/guardrails.py +0 -0
  36. {qaas_python-0.1.0 → qaas_python-0.1.1}/src/qaas/mcp/__init__.py +0 -0
  37. {qaas_python-0.1.0 → qaas_python-0.1.1}/src/qaas/mcp/context.py +0 -0
  38. {qaas_python-0.1.0 → qaas_python-0.1.1}/src/qaas/mcp/contract_diff.py +0 -0
  39. {qaas_python-0.1.0 → qaas_python-0.1.1}/src/qaas/mcp/defect_memory.py +0 -0
  40. {qaas_python-0.1.0 → qaas_python-0.1.1}/src/qaas/mcp/env_control.py +0 -0
  41. {qaas_python-0.1.0 → qaas_python-0.1.1}/src/qaas/mcp/envelope_server.py +0 -0
  42. {qaas_python-0.1.0 → qaas_python-0.1.1}/src/qaas/mcp/test_runner.py +0 -0
  43. {qaas_python-0.1.0 → qaas_python-0.1.1}/src/qaas/mcp/tracker.py +0 -0
  44. {qaas_python-0.1.0 → qaas_python-0.1.1}/src/qaas/mcp/vcs.py +0 -0
  45. {qaas_python-0.1.0 → qaas_python-0.1.1}/src/qaas/paths.py +0 -0
  46. {qaas_python-0.1.0 → qaas_python-0.1.1}/src/qaas/plugin/.claude-plugin/plugin.json +0 -0
  47. {qaas_python-0.1.0 → qaas_python-0.1.1}/src/qaas/plugin/skills/a11y-audit/SKILL.md +0 -0
  48. {qaas_python-0.1.0 → qaas_python-0.1.1}/src/qaas/plugin/skills/adversarial-review/SKILL.md +0 -0
  49. {qaas_python-0.1.0 → qaas_python-0.1.1}/src/qaas/plugin/skills/api-surface-extraction/SKILL.md +0 -0
  50. {qaas_python-0.1.0 → qaas_python-0.1.1}/src/qaas/plugin/skills/authz-matrix-check/SKILL.md +0 -0
  51. {qaas_python-0.1.0 → qaas_python-0.1.1}/src/qaas/plugin/skills/console-error-triage/SKILL.md +0 -0
  52. {qaas_python-0.1.0 → qaas_python-0.1.1}/src/qaas/plugin/skills/contract-test-generation/SKILL.md +0 -0
  53. {qaas_python-0.1.0 → qaas_python-0.1.1}/src/qaas/plugin/skills/dedupe-strategy/SKILL.md +0 -0
  54. {qaas_python-0.1.0 → qaas_python-0.1.1}/src/qaas/plugin/skills/environment-pinning/SKILL.md +0 -0
  55. {qaas_python-0.1.0 → qaas_python-0.1.1}/src/qaas/plugin/skills/error-taxonomy/SKILL.md +0 -0
  56. {qaas_python-0.1.0 → qaas_python-0.1.1}/src/qaas/plugin/skills/exploratory-ui-walk/SKILL.md +0 -0
  57. {qaas_python-0.1.0 → qaas_python-0.1.1}/src/qaas/plugin/skills/failing-test-authoring/SKILL.md +0 -0
  58. {qaas_python-0.1.0 → qaas_python-0.1.1}/src/qaas/plugin/skills/flake-detection/SKILL.md +0 -0
  59. {qaas_python-0.1.0 → qaas_python-0.1.1}/src/qaas/plugin/skills/form-state-probe/SKILL.md +0 -0
  60. {qaas_python-0.1.0 → qaas_python-0.1.1}/src/qaas/plugin/skills/minimal-diff-discipline/SKILL.md +0 -0
  61. {qaas_python-0.1.0 → qaas_python-0.1.1}/src/qaas/plugin/skills/openapi-diff/SKILL.md +0 -0
  62. {qaas_python-0.1.0 → qaas_python-0.1.1}/src/qaas/plugin/skills/ownership-resolution/SKILL.md +0 -0
  63. {qaas_python-0.1.0 → qaas_python-0.1.1}/src/qaas/plugin/skills/product-task-graph/SKILL.md +0 -0
  64. {qaas_python-0.1.0 → qaas_python-0.1.1}/src/qaas/plugin/skills/regression-risk-scoring/SKILL.md +0 -0
  65. {qaas_python-0.1.0 → qaas_python-0.1.1}/src/qaas/plugin/skills/regression-suite-selection/SKILL.md +0 -0
  66. {qaas_python-0.1.0 → qaas_python-0.1.1}/src/qaas/plugin/skills/repo-cartography/SKILL.md +0 -0
  67. {qaas_python-0.1.0 → qaas_python-0.1.1}/src/qaas/plugin/skills/repro-minimisation/SKILL.md +0 -0
  68. {qaas_python-0.1.0 → qaas_python-0.1.1}/src/qaas/plugin/skills/rollback-plan-authoring/SKILL.md +0 -0
  69. {qaas_python-0.1.0 → qaas_python-0.1.1}/src/qaas/plugin/skills/root-cause-vs-symptom/SKILL.md +0 -0
  70. {qaas_python-0.1.0 → qaas_python-0.1.1}/src/qaas/plugin/skills/routing-rules/SKILL.md +0 -0
  71. {qaas_python-0.1.0 → qaas_python-0.1.1}/src/qaas/plugin/skills/severity-rubric/SKILL.md +0 -0
  72. {qaas_python-0.1.0 → qaas_python-0.1.1}/src/qaas/plugin/skills/test-first-fix/SKILL.md +0 -0
  73. {qaas_python-0.1.0 → qaas_python-0.1.1}/src/qaas/plugin/skills/test-quality-audit/SKILL.md +0 -0
  74. {qaas_python-0.1.0 → qaas_python-0.1.1}/src/qaas/plugin/skills/ticket-writer/SKILL.md +0 -0
  75. {qaas_python-0.1.0 → qaas_python-0.1.1}/src/qaas/plugin/skills/verdict-reporting/SKILL.md +0 -0
  76. {qaas_python-0.1.0 → qaas_python-0.1.1}/src/qaas/plugin/skills/verification-protocol/SKILL.md +0 -0
  77. {qaas_python-0.1.0 → qaas_python-0.1.1}/src/qaas/prompts/ARBITER.md +0 -0
  78. {qaas_python-0.1.0 → qaas_python-0.1.1}/src/qaas/prompts/CARTOGRAPHER.md +0 -0
  79. {qaas_python-0.1.0 → qaas_python-0.1.1}/src/qaas/prompts/CLERK.md +0 -0
  80. {qaas_python-0.1.0 → qaas_python-0.1.1}/src/qaas/prompts/CONDUIT.md +0 -0
  81. {qaas_python-0.1.0 → qaas_python-0.1.1}/src/qaas/prompts/FORGE.md +0 -0
  82. {qaas_python-0.1.0 → qaas_python-0.1.1}/src/qaas/prompts/MENDER.md +0 -0
  83. {qaas_python-0.1.0 → qaas_python-0.1.1}/src/qaas/prompts/PROOF.md +0 -0
  84. {qaas_python-0.1.0 → qaas_python-0.1.1}/src/qaas/prompts/SURFACE.md +0 -0
  85. {qaas_python-0.1.0 → qaas_python-0.1.1}/src/qaas/prompts/_shared.md +0 -0
  86. {qaas_python-0.1.0 → qaas_python-0.1.1}/src/qaas/registry.py +0 -0
  87. {qaas_python-0.1.0 → qaas_python-0.1.1}/src/qaas/runner.py +0 -0
  88. {qaas_python-0.1.0 → qaas_python-0.1.1}/src/qaas/scorecard.py +0 -0
  89. {qaas_python-0.1.0 → qaas_python-0.1.1}/src/qaas/sdk_compat.py +0 -0
  90. {qaas_python-0.1.0 → qaas_python-0.1.1}/src/qaas/store.py +0 -0
  91. {qaas_python-0.1.0 → qaas_python-0.1.1}/src/qaas/target.py +0 -0
  92. {qaas_python-0.1.0 → qaas_python-0.1.1}/src/qaas/tasks.py +0 -0
  93. {qaas_python-0.1.0 → qaas_python-0.1.1}/src/qaas/trace.py +0 -0
  94. {qaas_python-0.1.0 → qaas_python-0.1.1}/target-app/CODEOWNERS +0 -0
  95. {qaas_python-0.1.0 → qaas_python-0.1.1}/target-app/api/Dockerfile +0 -0
  96. {qaas_python-0.1.0 → qaas_python-0.1.1}/target-app/api/app/__init__.py +0 -0
  97. {qaas_python-0.1.0 → qaas_python-0.1.1}/target-app/api/app/auth.py +0 -0
  98. {qaas_python-0.1.0 → qaas_python-0.1.1}/target-app/api/app/config.py +0 -0
  99. {qaas_python-0.1.0 → qaas_python-0.1.1}/target-app/api/app/db.py +0 -0
  100. {qaas_python-0.1.0 → qaas_python-0.1.1}/target-app/api/app/errors.py +0 -0
  101. {qaas_python-0.1.0 → qaas_python-0.1.1}/target-app/api/app/main.py +0 -0
  102. {qaas_python-0.1.0 → qaas_python-0.1.1}/target-app/api/app/models.py +0 -0
  103. {qaas_python-0.1.0 → qaas_python-0.1.1}/target-app/api/app/routes/__init__.py +0 -0
  104. {qaas_python-0.1.0 → qaas_python-0.1.1}/target-app/api/app/routes/auth.py +0 -0
  105. {qaas_python-0.1.0 → qaas_python-0.1.1}/target-app/api/app/routes/invoices.py +0 -0
  106. {qaas_python-0.1.0 → qaas_python-0.1.1}/target-app/api/app/routes/orders.py +0 -0
  107. {qaas_python-0.1.0 → qaas_python-0.1.1}/target-app/api/app/routes/stream.py +0 -0
  108. {qaas_python-0.1.0 → qaas_python-0.1.1}/target-app/api/app/schemas.py +0 -0
  109. {qaas_python-0.1.0 → qaas_python-0.1.1}/target-app/api/migrations/001_init.sql +0 -0
  110. {qaas_python-0.1.0 → qaas_python-0.1.1}/target-app/api/pyproject.toml +0 -0
  111. {qaas_python-0.1.0 → qaas_python-0.1.1}/target-app/api/seed/fixtures.sql +0 -0
  112. {qaas_python-0.1.0 → qaas_python-0.1.1}/target-app/defects.yaml +0 -0
  113. {qaas_python-0.1.0 → qaas_python-0.1.1}/target-app/docker-compose.yml +0 -0
  114. {qaas_python-0.1.0 → qaas_python-0.1.1}/target-app/openapi.yaml +0 -0
  115. {qaas_python-0.1.0 → qaas_python-0.1.1}/target-app/web/.gitignore +0 -0
  116. {qaas_python-0.1.0 → qaas_python-0.1.1}/target-app/web/Dockerfile +0 -0
  117. {qaas_python-0.1.0 → qaas_python-0.1.1}/target-app/web/index.html +0 -0
  118. {qaas_python-0.1.0 → qaas_python-0.1.1}/target-app/web/package-lock.json +0 -0
  119. {qaas_python-0.1.0 → qaas_python-0.1.1}/target-app/web/package.json +0 -0
  120. {qaas_python-0.1.0 → qaas_python-0.1.1}/target-app/web/src/api.ts +0 -0
  121. {qaas_python-0.1.0 → qaas_python-0.1.1}/target-app/web/src/components/Button.tsx +0 -0
  122. {qaas_python-0.1.0 → qaas_python-0.1.1}/target-app/web/src/components/Layout.tsx +0 -0
  123. {qaas_python-0.1.0 → qaas_python-0.1.1}/target-app/web/src/components/SearchInput.tsx +0 -0
  124. {qaas_python-0.1.0 → qaas_python-0.1.1}/target-app/web/src/main.tsx +0 -0
  125. {qaas_python-0.1.0 → qaas_python-0.1.1}/target-app/web/src/routes/CheckoutReview.tsx +0 -0
  126. {qaas_python-0.1.0 → qaas_python-0.1.1}/target-app/web/src/routes/Login.tsx +0 -0
  127. {qaas_python-0.1.0 → qaas_python-0.1.1}/target-app/web/src/routes/NewOrder.tsx +0 -0
  128. {qaas_python-0.1.0 → qaas_python-0.1.1}/target-app/web/src/routes/OrderDetail.tsx +0 -0
  129. {qaas_python-0.1.0 → qaas_python-0.1.1}/target-app/web/src/routes/OrdersList.tsx +0 -0
  130. {qaas_python-0.1.0 → qaas_python-0.1.1}/target-app/web/src/styles.css +0 -0
  131. {qaas_python-0.1.0 → qaas_python-0.1.1}/target-app/web/tsconfig.json +0 -0
  132. {qaas_python-0.1.0 → qaas_python-0.1.1}/target-app/web/vite.config.ts +0 -0
  133. {qaas_python-0.1.0 → qaas_python-0.1.1}/tests/adapters/test_github_vcs.py +0 -0
  134. {qaas_python-0.1.0 → qaas_python-0.1.1}/tests/adapters/test_jira_tracker.py +0 -0
  135. {qaas_python-0.1.0 → qaas_python-0.1.1}/tests/conftest.py +0 -0
  136. {qaas_python-0.1.0 → qaas_python-0.1.1}/tests/mcp/conftest.py +0 -0
  137. {qaas_python-0.1.0 → qaas_python-0.1.1}/tests/mcp/test_contract_diff.py +0 -0
  138. {qaas_python-0.1.0 → qaas_python-0.1.1}/tests/mcp/test_defect_memory.py +0 -0
  139. {qaas_python-0.1.0 → qaas_python-0.1.1}/tests/mcp/test_env_control.py +0 -0
  140. {qaas_python-0.1.0 → qaas_python-0.1.1}/tests/mcp/test_test_runner.py +0 -0
  141. {qaas_python-0.1.0 → qaas_python-0.1.1}/tests/mcp/test_tracker.py +0 -0
  142. {qaas_python-0.1.0 → qaas_python-0.1.1}/tests/mcp/test_vcs.py +0 -0
  143. {qaas_python-0.1.0 → qaas_python-0.1.1}/tests/support.py +0 -0
  144. {qaas_python-0.1.0 → qaas_python-0.1.1}/tests/target_app/test_seeded_defects.py +0 -0
  145. {qaas_python-0.1.0 → qaas_python-0.1.1}/tests/test_cli.py +0 -0
  146. {qaas_python-0.1.0 → qaas_python-0.1.1}/tests/test_conductor.py +0 -0
  147. {qaas_python-0.1.0 → qaas_python-0.1.1}/tests/test_config.py +0 -0
  148. {qaas_python-0.1.0 → qaas_python-0.1.1}/tests/test_discover.py +0 -0
  149. {qaas_python-0.1.0 → qaas_python-0.1.1}/tests/test_envelope.py +0 -0
  150. {qaas_python-0.1.0 → qaas_python-0.1.1}/tests/test_guardrails.py +0 -0
  151. {qaas_python-0.1.0 → qaas_python-0.1.1}/tests/test_hooks_and_skills.py +0 -0
  152. {qaas_python-0.1.0 → qaas_python-0.1.1}/tests/test_paths.py +0 -0
  153. {qaas_python-0.1.0 → qaas_python-0.1.1}/tests/test_prompt_overrides.py +0 -0
  154. {qaas_python-0.1.0 → qaas_python-0.1.1}/tests/test_registry.py +0 -0
  155. {qaas_python-0.1.0 → qaas_python-0.1.1}/tests/test_scorecard.py +0 -0
  156. {qaas_python-0.1.0 → qaas_python-0.1.1}/tests/test_skills_actually_load.py +0 -0
  157. {qaas_python-0.1.0 → qaas_python-0.1.1}/tests/test_store.py +0 -0
  158. {qaas_python-0.1.0 → qaas_python-0.1.1}/tests/test_target_profile_is_honoured.py +0 -0
  159. {qaas_python-0.1.0 → qaas_python-0.1.1}/tests/test_trace.py +0 -0
  160. {qaas_python-0.1.0 → qaas_python-0.1.1}/tests/test_user_mcp_servers.py +0 -0
  161. {qaas_python-0.1.0 → qaas_python-0.1.1}/tutorial/01-code-structure.md +0 -0
  162. {qaas_python-0.1.0 → qaas_python-0.1.1}/tutorial/02-how-agents-communicate.md +0 -0
  163. {qaas_python-0.1.0 → qaas_python-0.1.1}/tutorial/03-skills-and-hooks.md +0 -0
  164. {qaas_python-0.1.0 → qaas_python-0.1.1}/tutorial/04-mcp-servers.md +0 -0
  165. {qaas_python-0.1.0 → qaas_python-0.1.1}/tutorial/05-prompt-configuration.md +0 -0
  166. {qaas_python-0.1.0 → qaas_python-0.1.1}/tutorial/06-jira-integration.md +0 -0
  167. {qaas_python-0.1.0 → qaas_python-0.1.1}/tutorial/07-github-actions.md +0 -0
  168. {qaas_python-0.1.0 → qaas_python-0.1.1}/tutorial/08-packaging-and-publishing.md +0 -0
  169. {qaas_python-0.1.0 → qaas_python-0.1.1}/tutorial/09-guardrails-and-safety.md +0 -0
  170. {qaas_python-0.1.0 → qaas_python-0.1.1}/tutorial/README.md +0 -0
@@ -13,3 +13,9 @@ node_modules/
13
13
 
14
14
  # Agent worktrees — real git worktrees, never repo content.
15
15
  .claude/worktrees/
16
+
17
+ # Build artifacts.
18
+ dist/
19
+
20
+ # Agent evidence screenshots land here because put_artifact takes only text.
21
+ target-app/*.png
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: qaas-python
3
- Version: 0.1.0
3
+ Version: 0.1.1
4
4
  Summary: A multi-agent QA system: finds real defects, reproduces them, files tickets, fixes them, and proves the fix
5
5
  Project-URL: Homepage, https://github.com/allaabdella2-us/qa-multi-agent-system
6
6
  Project-URL: Repository, https://github.com/allaabdella2-us/qa-multi-agent-system
@@ -43,7 +43,7 @@ Description-Content-Type: text/markdown
43
43
  [![Tests](https://img.shields.io/badge/tests-649%20offline-success)](#-contributing)
44
44
  [![Built on](https://img.shields.io/badge/built%20on-Claude%20Agent%20SDK-D97757)](https://docs.claude.com/en/api/agent-sdk/overview)
45
45
 
46
- [Quickstart](#-quickstart-in-60-seconds) · [What it costs](#-what-it-costs) · [Your repo](#-point-it-at-your-repository) · [Jira](#-file-into-jira) · [Architecture](ARCHITECTURE.md)
46
+ [Quickstart](#-quickstart-in-60-seconds) · [Your repo](#-point-it-at-your-repository) · [Jira](#-file-into-jira) · [Architecture](ARCHITECTURE.md)
47
47
 
48
48
  </div>
49
49
 
@@ -111,37 +111,6 @@ qaas run --repo https://github.com/you/your-app --dry-run
111
111
 
112
112
  ---
113
113
 
114
- ## 💰 What it costs
115
-
116
- > [!IMPORTANT]
117
- > **Real runs spend real money.** Read this before your first one.
118
-
119
- Median cost per dispatch, **measured** across real runs — not estimated:
120
-
121
- | agent | median | what you get |
122
- |---|--:|---|
123
- | 🖱️ `SURFACE` | **$3.34** | broken flows, console errors, a11y, forms |
124
- | 🔧 `MENDER` | **$2.03** | the minimal fix, on a branch |
125
- | 🔌 `CONDUIT` | **$1.97** | API contract, authz and error-shape defects |
126
- | 🔨 `FORGE` | **$1.61** | a minimal repro + failing test — **per finding** |
127
- | ✅ `PROOF` / ⚖️ `ARBITER` | ~$1.00 | verification and adversarial review |
128
- | 📝 `CLERK` / 🗺️ `CARTOGRAPHER` | ~$0.70 | filing, and the map everything reads |
129
-
130
- A full discovery run over the demo app found **13 of 16** seeded defects for
131
- about **$15**. A `fix-cycle` pass costs **$5–7**.
132
-
133
- > `FORGE` runs **once per finding** in a fresh context, so cost scales with what
134
- > was found, not with how many agents exist.
135
-
136
- **The controls are real, not advisory:**
137
-
138
- - `max_budget_usd` per agent *and* per run mode; the governor checks before every dispatch and **stops the run** rather than overspending.
139
- - The cap survives a resume — `qaas run --run-id <existing>` carries forward what that run already spent.
140
- - `qaas validate` refuses a run mode whose agents could outspend its cap.
141
- - `--dry-run` on everything.
142
-
143
- ---
144
-
145
114
  ## 🎯 Point it at your repository
146
115
 
147
116
  ```bash
@@ -13,7 +13,7 @@
13
13
  [![Tests](https://img.shields.io/badge/tests-649%20offline-success)](#-contributing)
14
14
  [![Built on](https://img.shields.io/badge/built%20on-Claude%20Agent%20SDK-D97757)](https://docs.claude.com/en/api/agent-sdk/overview)
15
15
 
16
- [Quickstart](#-quickstart-in-60-seconds) · [What it costs](#-what-it-costs) · [Your repo](#-point-it-at-your-repository) · [Jira](#-file-into-jira) · [Architecture](ARCHITECTURE.md)
16
+ [Quickstart](#-quickstart-in-60-seconds) · [Your repo](#-point-it-at-your-repository) · [Jira](#-file-into-jira) · [Architecture](ARCHITECTURE.md)
17
17
 
18
18
  </div>
19
19
 
@@ -81,37 +81,6 @@ qaas run --repo https://github.com/you/your-app --dry-run
81
81
 
82
82
  ---
83
83
 
84
- ## 💰 What it costs
85
-
86
- > [!IMPORTANT]
87
- > **Real runs spend real money.** Read this before your first one.
88
-
89
- Median cost per dispatch, **measured** across real runs — not estimated:
90
-
91
- | agent | median | what you get |
92
- |---|--:|---|
93
- | 🖱️ `SURFACE` | **$3.34** | broken flows, console errors, a11y, forms |
94
- | 🔧 `MENDER` | **$2.03** | the minimal fix, on a branch |
95
- | 🔌 `CONDUIT` | **$1.97** | API contract, authz and error-shape defects |
96
- | 🔨 `FORGE` | **$1.61** | a minimal repro + failing test — **per finding** |
97
- | ✅ `PROOF` / ⚖️ `ARBITER` | ~$1.00 | verification and adversarial review |
98
- | 📝 `CLERK` / 🗺️ `CARTOGRAPHER` | ~$0.70 | filing, and the map everything reads |
99
-
100
- A full discovery run over the demo app found **13 of 16** seeded defects for
101
- about **$15**. A `fix-cycle` pass costs **$5–7**.
102
-
103
- > `FORGE` runs **once per finding** in a fresh context, so cost scales with what
104
- > was found, not with how many agents exist.
105
-
106
- **The controls are real, not advisory:**
107
-
108
- - `max_budget_usd` per agent *and* per run mode; the governor checks before every dispatch and **stops the run** rather than overspending.
109
- - The cap survives a resume — `qaas run --run-id <existing>` carries forward what that run already spent.
110
- - `qaas validate` refuses a run mode whose agents could outspend its cap.
111
- - `--dry-run` on everything.
112
-
113
- ---
114
-
115
84
  ## 🎯 Point it at your repository
116
85
 
117
86
  ```bash
@@ -2,7 +2,7 @@
2
2
  # Distribution name is `qaas-python` (`qaas` was taken); the import package and
3
3
  # the CLI are both `qaas`.
4
4
  name = "qaas-python"
5
- version = "0.1.0"
5
+ version = "0.1.1"
6
6
  description = "A multi-agent QA system: finds real defects, reproduces them, files tickets, fixes them, and proves the fix"
7
7
  readme = "README.md"
8
8
  license = "MIT"
@@ -1 +0,0 @@
1
- :root{--ink: #202124;--ink-muted: #5f6368;--surface: #ffffff;--canvas: #f8f9fa;--line: #dadce0;--accent: #1a56b0;--accent-dark: #14428a;--danger: #b3261e;--radius: 6px;--font: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif}*{box-sizing:border-box}html,body{margin:0;padding:0}body{background:var(--canvas);color:var(--ink);font-family:var(--font);font-size:15px;line-height:1.5}#root{min-height:100vh}h1,h2{margin:0;font-weight:600}.app-shell{min-height:100vh;display:flex;flex-direction:column}.app-header{background:var(--surface);border-bottom:1px solid var(--line)}.app-header-inner{max-width:1040px;margin:0 auto;padding:12px 20px;display:flex;align-items:center;gap:24px}.app-brand{font-weight:700;font-size:16px;color:var(--ink)}.app-nav{display:flex;gap:16px;flex:1}.nav-link{color:var(--accent);text-decoration:none;padding:4px 2px;border-bottom:2px solid transparent}.nav-link:hover{text-decoration:underline}.nav-link-active{color:var(--ink);border-bottom-color:var(--accent)}.app-account{display:flex;align-items:center;gap:12px}.app-account-email{color:var(--ink-muted);font-size:13px}.app-account-role{margin-left:8px;padding:1px 6px;border:1px solid var(--line);border-radius:10px;text-transform:uppercase;font-size:11px;letter-spacing:.04em}.app-main{flex:1;width:100%;max-width:1040px;margin:0 auto;padding:24px 20px 48px}.page{display:flex;flex-direction:column;gap:16px}.page-header{display:flex;align-items:center;gap:12px}.page-title{font-size:22px}.section-title{font-size:15px;margin-top:8px}.card{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);padding:20px;display:flex;flex-direction:column;gap:16px}.muted{color:var(--ink-muted)}.link{color:#15c}.empty-state{align-items:flex-start;gap:8px}.toolbar{display:flex;align-items:flex-end;gap:16px;flex-wrap:wrap}.field{display:flex;flex-direction:column;gap:4px}.field-inline{min-width:180px}.field-grow{flex:1;min-width:180px}.field-narrow{width:110px}.field-label{font-size:13px;font-weight:600;color:var(--ink)}.field-input,.search-input{font:inherit;color:var(--ink);background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);padding:8px 10px;width:100%}.search-input{min-width:260px}.field-input:focus-visible,.search-input:focus-visible,.btn:focus-visible,.table-row-clickable:focus-visible,.nav-link:focus-visible,.link:focus-visible{outline:2px solid var(--accent);outline-offset:2px}::placeholder{color:var(--ink-muted);opacity:1}.item-row{display:flex;align-items:flex-end;gap:12px;flex-wrap:wrap;padding-bottom:12px;border-bottom:1px solid var(--line)}.form-actions{display:flex;gap:12px;align-items:center}.btn{font:inherit;font-weight:600;border-radius:var(--radius);border:1px solid transparent;padding:8px 16px;cursor:pointer;text-decoration:none;display:inline-block}.btn:disabled{cursor:not-allowed;opacity:.6}.btn-primary{background:var(--accent);color:#fff;border-color:var(--accent)}.btn-primary:hover:not(:disabled){background:var(--accent-dark);border-color:var(--accent-dark)}.btn-secondary{background:#f1f3f4;color:#9aa0a6;border-color:var(--line)}.btn-secondary:hover:not(:disabled){background:#e8eaed}.btn-danger{background:var(--danger);color:#fff;border-color:var(--danger)}.table{width:100%;border-collapse:collapse;background:var(--surface);border:1px solid var(--line);border-radius:var(--radius)}.table th,.table td{text-align:left;padding:10px 12px;border-bottom:1px solid var(--line)}.table th{background:var(--canvas);font-size:13px;letter-spacing:.02em}.table tbody tr:last-child td{border-bottom:none}.table-row-clickable{cursor:pointer}.table-row-clickable:hover{background:#f1f6ff}.badge{display:inline-block;padding:2px 8px;border-radius:10px;font-size:12px;font-weight:600;text-transform:capitalize;color:var(--ink);background:#f1f3f4}.badge-draft{background:#eceff1}.badge-placed{background:#e8f0fe}.badge-paid{background:#e6f4ea}.badge-refunded{background:#fef7e0}.badge-cancelled{background:#fce8e6}.alert{margin:0;padding:10px 12px;border-radius:var(--radius);font-size:14px}.alert-error{background:#fce8e6;color:var(--danger);border:1px solid #f3c9c5}.alert-success{background:#e6f4ea;color:#0b6b34;border:1px solid #b7e0c4}.summary{margin:0;display:flex;flex-direction:column;gap:8px}.summary-row{display:flex;gap:12px}.summary-row dt{width:120px;color:var(--ink-muted);font-size:13px}.summary-row dd{margin:0}.total-line{margin:0;text-align:right;font-size:15px}.login-page{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:24px}.login-card{width:100%;max-width:380px}.login-title{font-size:20px}.login-subtitle{margin:0;color:var(--ink-muted);font-size:14px}