Repository navigation
System Diagram
The picture of QASight, with what each box does. For module-level detail see Architecture Overview; for the run lifecycle step by step see Deep Dive - Execution Logic.

A light copy is qasight-architecture-detailed-light.png; the README picks between the two by colour scheme. Both are drawn by scripts/render_architecture_diagram.js: change the diagram there and re-run it, never edit the PNGs by hand.
The first, six-box version from 2026-10-06. It predates CycleRunService and the history/ read side, so use it only when you need the shortest possible picture.

| Diagram | Shows | Where |
|---|---|---|
| Detailed diagram (image above) | Who uses it, interfaces, CycleRunService, every qasight package, outside systems |
This note |
| Simplified diagram | The same at six boxes, without CycleRunService or history/
|
This note § Simplified view |
| Component flowchart (Mermaid) | Entry points, CycleRunService, engine, persistence, history read side |
Architecture Overview § High-level shape |
| Run sequence (Mermaid) | One qasight run call from CLI to executor and back |
Deep Dive - Execution Logic |
| Cycle flow (Mermaid) | Load, trigger gate, stages, reporters, archive | QA Strategies |
| Demo pipeline (text) | Pages demo: run on itself and fake-api, export to JSON, build, publish | GitLab Pages Demo |
Mermaid blocks render on GitHub, in the GitHub wiki and in Obsidian without plugins.
| Part | Role |
|---|---|
| React dashboard | Starts cycles, watches them live, browses past runs, compares two runs |
| CI pipeline | Runs qasight run --ci: NDJSON events on stdout, pass or fail through the exit code |
| Developer terminal | Runs cycles locally with Rich output, opens reports, diffs runs |
| Part | Role |
|---|---|
| REST API | FastAPI under /api/v1 (qasight_api/). Starts cycle and ad-hoc executions in the background, streams progress over SSE, serves dashboard, history, compare and AI summary data |
| qasight CLI | Typer app (qasight/cli/). Commands load lazily so qasight --help stays fast. Exit codes 0–4 are a fixed contract (Command Reference § Exit codes) |
Both interfaces start runs the same way: through CycleRunService (qasight/services/cycle_run.py), which applies the trigger gate, calls the engine, then runs reporters, metrics push and the report archive. It is the highlighted box in the detailed diagram; the simplified view folds it into the arrow into qasight.
| Part | Package | Role |
|---|---|---|
| Config | config/ |
Finds and validates qasight.yaml, fills defaults and ${env:…}, resolves a cycle into ordered stages |
| Engine | engine/ |
run_plan() runs stages in order; run_stage() runs each as a subprocess with a timeout and a tee'd log; every step is a typed event |
| Framework adapters | frameworks/ |
Turn a stage into argv for pytest, behave, behavex, Playwright or command (any runner with JUnit XML); junit records existing JUnit XML without running anything (qasight ingest) |
| Reporting | reporting/ |
Collects Allure results and builds Allure, Extent, ReportPortal or TestBeats output; run KPIs and their push |
| CycleRunService | services/cycle_run.py |
The one run use case: trigger gate, engine, reporters, metrics push, report archive |
| Persistence | persistence/ |
Writes plan_result.json (JSON backend) and a RunRecord row (DB backend) after each run |
| Insight services | services/ |
Dashboard KPIs, run-to-run delta, AI failure summaries; called by the REST API |
| Run history | history/ |
The read side: typed views, queries, report links and snapshot files over stored runs |
| Repository | repository/ |
The only code that opens a database session (SQLite, Postgres or MySQL) |
| Part | Role |
|---|---|
| Target repo | The project whose tests run; each stage runs inside it |
artifacts/ |
Per cycle and stage: run.log, Allure results, events.ndjson, plan_result.json
|
| SQL database | Run history that feeds the dashboard and Compare |
| Report outputs | HTML reports under static/history/<run_id>/, or results pushed to ReportPortal / TestBeats |
| LLM provider | OpenAI or Anthropic with the user's own key, only when AI summaries are on |
- Config is the contract. The developer, CI and the dashboard run the same cycle from the same file.
- Events, not callbacks. The engine only emits events; renderers (Rich, NDJSON, SSE) decide presentation.
- Small interfaces at the seams. Framework adapters, persistence backends, the repository, reporters and AI providers are swappable.
- One result format. Every framework's output becomes Allure results, so every report and comparison works for every framework.
- Light by default. Database, API and UI dependencies are optional extras.
The reasoning behind the current shape (one engine, one history boundary, generated frontend types) is in Architecture Consolidation - 2026-10-06.
Generated from docs/Architecture/System Diagram.md. Edit it there; changes made in the wiki are overwritten.
Architecture
CLI Commands
Processes & Guides
- CI-CD Pipeline Setup
- E2E Harness Operations Guide
- GitLab Pages Demo
- Publishing Docker Images
- Publishing to Artifactory
- Publishing to PyPI
- Setup Snippets
- Shared Resource Pools
- Team Server
Prompts & Snippets
Roadmap & Strategy
- Feature Gaps and Quick Wins - 2026-10-31
- New User Journey Audit - 2026-11-01
- Paid Features to Offer Free - 2026-10-31
- Product Roadmap
Specs & ADRs
- Affected Test Selection - 2026-10-30
- Alerts Where Developers Look - 2026-10-22
- Architecture Consolidation - 2026-10-06
- Architecture Review - 2026-10-31
- BehaveX Reports - 2026-10-21
- Better Flaky Signal - 2026-11-01
- Command Adapter and JUnit Import - 2026-09-25
- Config JSON Schema - 2026-10-22
- Crash Detection - 2026-10-31
- Delta Comparison Policy
- Docs Site - 2026-10-19
- Docs Vault and Wiki Sync - 2026-10-07
- Easy Setup - 2026-11-01
- Engine Fixes - 2026-11-01
- Engineering Health Review - 2026-10-31
- Exporting Results - 2026-11-01
- Flaky Test Issues - 2026-11-01
- Flaky Test Quarantine - 2026-10-22
- Free Copies of Paid Features - 2026-11-01
- GitHub Action PR Comment - 2026-10-19
- Human-Run Resource Provider - 2026-10-30
- Importer and Integration Bug Hunt - 2026-10-31
- Ingest and Team Server - 2026-10-22
- Interview Readiness Fixes - 2026-10-07
- Library Packaging
- Lifecycle Fixes - 2026-11-02
- MCP Server - 2026-11-01
- New User Journey Automation - 2026-11-01
- Open Source Features - 2026-10-19
- OpenTelemetry Export - 2026-10-30
- Phase 3 Delta Comparison Engine Plan
- Phase 3 Unified Dashboard Plan
- Phase 4 BYOK and Failure Analysis
- Phase 5 UI Redesign - Cycles-First Navigation
- Playwright Adapter - 2026-10-19
- Playwright JSON Import - 2026-10-22
- Plugin API - 2026-10-19
- Product Roadmap Work - 2026-10-25
- Product to Ten - 2026-10-25
- Project Health - 2026-10-26
- QASight Logo - 2026-11-05
- Qualflare Follow-ups - 2026-10-26
- Quarantine From the UI - 2026-11-01
- Specs & ADRs
- Rename to QASight - 2026-11-04
- Repository Pattern - Database-Agnostic Refactor
- Resource Lifecycle Hooks - 2026-10-26
- Resource Pools and Leases - 2026-10-26
- Run Deletion and Stop - 2026-11-02
- Runner Coverage - 2026-10-26
- Scale Runs and Stages - 2026-10-24
- Security and Install Review - 2026-10-31
- Switchable Team Features - 2026-10-24
- Test Delivery Metrics - 2026-11-02
- Test Labels, Environments and Releases - 2026-11-02
- Test Source in AI Summaries - 2026-11-01
- Throwaway Stage Containers - 2026-10-24
- Tidy Cards and Demo Examples - 2026-11-05
- UI Design Review - 2026-10-31
- UI Polish - 2026-11-08
- UI Restyle - 2026-10-19
- UI Review Fixes - 2026-11-01
Testing Workflows
Vault