QA · Quality
A green test suite that tested nothing
Auditing the tests and CI of a 15-repo SaaS platform, then making testing mean something again
RoleIT Business Analyst and QA/QC Lead

- backend tests passing
- 35 → 276
- fake UI tests removed
- 146 → 0
- automated test cases in two weeks
- 901
- data-isolation defects found before release
- 10
Client names are withheld; examples and data are simulated. The process, methods and result figures are real.
The problem
The product is a SaaS platform for residential construction in the US: an admin web app, a mobile app for field workers and a supplier portal, across 15 repositories. The CI board was mostly green, yet bugs kept reaching the client.
- Open more than 30 days
- Open less than 30 days
- No longer open
244 bugs156 open
Context and role
- I am the BA and main point of contact for the US client, supporting QA; from 09/2026 I am also QA/QC Lead.
- I could not open pull requests on the product repositories, so every finding had to carry enough evidence for Dev to fix it themselves.
- The work ran on an AI-agent-assisted process that I designed; I checked every conclusion against real run logs.
- Client and product names and vulnerability details are withheld.
Step 1: Auditing the test suites
I re-ran every test in 6 repositories and read each kind of test, instead of trusting the green on CI.
- Before
- After
Fake UI tests that always pass without checking anything✓ 146 → 0
1460Backend tests passing✓ 35 passing, 195 failing → 276 passing, 0 failing
35 passing, 195 failing276 passing, 0 failingField worker mobile app coverage✓ 12.6% → 21%
12.6%21%Supplier portal unit tests✓ 0 → 133
0133
- Broken during setup by one jsonb type-mapping error
- Other error groups
195 failing tests195
Step 2: Auditing CI
A green CI does not mean the tests ran. I compared each repository’s pipeline configuration with its real run history (09/2026).
- New code
- Pipelinemany test suites never calledconfigured to ignore errors, still green
- Test stepnightly job: 6/6 sub-steps failedno repository had branch protection
- Merge into main branch
Step 3: Testing each ticket with Tester Kit
The ticket, its comments and its PR are split into a list of sources; every test case must point to a source, then passes a coverage gate and an independent review by a separate AI session before it runs.
- Ticket, comments, PRsplit into sources
- Sourced test cases
- Coverage gate
- Independent reviewa separate AI session
- API and UI run
- Tester signs offone Excel file
Step 4: Testing a whole permissions epic
Company-level permissions (multi-tenant) were split across many tickets. Every ticket passed on its own.
- Each ticketpassed when tested alone
- Where tickets meetNew screenExcel exportShared API
- Data leaks to another company
- Passed
- Real defects
- Remaining
146 cases146
Results
- The backend suite runs again: from 35 passing and 195 failing to 276 passing and 0 failing; 146 fake tests removed; smoke tests became a merge gate.
- A specific list of idle tests and 4 CI fixes to switch them back on, backed by run history.
- 901 automated test cases in two weeks; 9 false passes blocked before anyone relied on them.
- 10 cross-company data-isolation defects found before release.
What I learned
- A green CI means something only once you have proved the test step really runs and really blocks.
- Hundreds of failing tests usually share a few causes; finding the root is faster than fixing the symptoms.
- Permission defects live where features meet, so they have to be tested at the epic level, not only ticket by ticket.
- QA
- CI/CD
- Test automation
- Playwright
- Audit
- Multi-tenant
