SUMANTHK
Back to work

Test Automation Platform

AI-Native Testing Platform

AI-Native Testing Platform interface preview

01 — The problem

Requirements arrive as documents, but turning them into reliable test cases by hand is repetitive, slow, and error-prone — the kind of work teams need done well but don't want to keep doing manually.

02 — The approach

  1. 01Requirement documents → embeddings, stored in a vector database
  2. 02Relevant chunks retrieved for the test case being generated (not the whole document)
  3. 03Test case generated from that retrieved context
  4. 04Dry-run validation, twice, before anything is surfaced
  5. 05On failure: re-validate against the embeddings and update the test case

03 — Architecture

  • Requirement documents are converted into embeddings and stored in a vector database; generating a test case retrieves only the relevant chunks instead of feeding the whole document to the model each time
  • Every generated test case is dry-run twice before being surfaced to the user; on failure, the system re-validates against the embeddings and updates the test case — a self-healing validation loop rather than a hard error
  • Memory persists failures, fixes, and context at the workspace level, so context carries forward across sessions

04 — Engineering decisions

Why embeddings instead of feeding the whole document each time?

Requirement sets grow past what's worth re-sending on every generation call — retrieval keeps each request scoped to what's actually relevant, instead of paying for and parsing the whole document repeatedly.

Why validate before surfacing, not after?

A test case that's wrong is worse than no test case — it looks done and isn't. Dry-running twice catches that before it reaches anyone, rather than relying on a human to notice.

Why self-heal instead of failing hard?

A failed validation is information about what's actually in the requirements, not just a dead end — feeding it back into re-validation turns a failure into a correction instead of a support ticket.

Impact

Deployed across multiple enterprise client environments.

My role

Sole developer, owned the architecture through two major iterations.

05 — What I learned

The generation step turned out to be the easy part — most of the real engineering was in deciding what "done" meant before something reached a person, and building the loop that could correct itself when it wasn't.

Stack

PythonSupabaseVector DatabaseReact

Have something like this in mind?