Security

Real offensive depth

Testing and defence led by a published security researcher with five CVEs, including a CVSS 9.1 Mirai botnet kill-switch.

All security →
Compliance

Audit-ready, fixed scope

SOC 2, ISO, and the Canadian privacy stack, run end to end with an independent auditor.

All frameworks →
Resources

Learn the space

Original research, free tools, and plain-language guides on security and compliance, from a published security researcher.

Read the blog →
Security

How to Run a Vibe-Coding QA Engagement

A vibe-coding QA engagement is a structured review of AI-generated code that combines automated fuzzing, static analysis, and manual penetration testing to catch the logic gaps and security flaws that ship when code is written faster than it's understood. Most engagements run two to four weeks depending on codebase size and how much of the app was built with AI assistance.

Teams across Toronto, Waterloo, and Vancouver are shipping product faster than ever because tools like Cursor, Copilot, and Claude Code can generate a working feature in an afternoon. The problem isn't speed, it's that "working" and "safe" are different bars. AI models write code that compiles and passes the happy path, but they routinely miss authorization checks, mishandle edge cases in input validation, and copy insecure patterns from training data without knowing they're insecure. If your engineering team can't explain why a piece of generated code is correct, you have a QA gap, not just a code review gap. Here's how to run the engagement properly.

Step 1: Intake and Repo Triage (Days 1-2)

Every engagement starts with mapping the terrain, not testing it. This means:

  • Pulling a full inventory of which parts of the codebase were AI-generated versus human-written, since AI-heavy modules get priority
  • Identifying the trust boundaries: where does user input enter, where does data cross into payment, auth, or PII handling
  • Reviewing the tool stack (which coding assistants, which models, which prompts or agent frameworks were used) because different tools have different failure signatures
  • Confirming compliance scope, since a Canadian SaaS company handling customer data under PIPEDA, or a Quebec-based business under Law 25, needs the QA review to feed directly into its audit evidence trail

This step is short but it determines everything downstream. Skipping triage and jumping straight to a scanner is how engagements waste a week testing low-risk code while a broken authorization check sits untested.

Step 2: Automated Fuzzing and Static Analysis (Days 2-6)

With scope defined, automated tooling runs first because it's cheap and it surfaces the obvious problems fast. This layer includes static application security testing (SAST) against the full repo, dependency scanning for known-vulnerable packages (AI assistants frequently suggest outdated or abandoned libraries), and targeted fuzzing against any API endpoints, parsers, or file upload handlers the AI code touches. Fuzzing matters more here than in traditionally written code. AI-generated input validation often looks complete on inspection, correct types, correct null checks, but breaks under malformed or adversarial input the model never considered because it wasn't trained on your specific threat model. Automated fuzzing catches these fast without burning senior tester hours.

Step 3: Manual Penetration Testing of AI-Generated Logic (Week 2)

This is where the engagement earns its cost. Automated tools find pattern-matched vulnerabilities; they don't find broken business logic. A human tester needs to manually work through:

  • Authorization and access control logic, since AI models are notorious for generating code that checks whether a user is authenticated but not whether they're authorized for that specific resource
  • Session and token handling, especially in AI-scaffolded auth flows built quickly from a prompt like "add login"
  • Any AI-written code that handles money, PII, or health data, tested against real attack chains rather than isolated unit tests
  • Prompt-adjacent risk if the product itself embeds an LLM (injection into system prompts, data leakage between tenants, unsafe tool-calling permissions)

Our full breakdown of what this testing layer covers is on the vibe-coding QA and security review page, including how we scope fuzzing and pentest work specifically for AI-assisted codebases rather than applying a generic pentest checklist that misses AI-specific failure modes.

Want this handled? Tell us what your buyer is asking for and we will tell you what the work involves, what it costs, and what you can do yourself. Talk to us

Step 4: Findings Triage and Remediation Sprint (Week 2-3)

Findings get ranked by exploitability and business impact, not by how they look on a scanner report. A cross-site scripting bug in an internal admin tool used by three people is not the same priority as a broken tenant isolation check in a multi-tenant SaaS product. Each finding should come with a clear reproduction path and a suggested fix, because the point of this stage isn't to hand the engineering team a PDF, it's to get fixes shipped. This is also the stage where founders and CTOs in Ottawa and Calgary tend to ask the same question: should we just have the AI fix the AI's own bug? Sometimes yes, for small, well-scoped fixes. For anything touching auth, data access, or payment logic, a human engineer should review the fix the same way the original code should have been reviewed. Letting the same unsupervised process fix its own security bug is how the same class of bug reappears three sprints later.

Step 5: Retest and Sign-Off (Week 3-4)

Once fixes are deployed, every finding gets retested, not just spot-checked. This closes the loop and produces the evidence artifact your team actually needs: a document showing what was found, what was fixed, and what was verified. For companies pursuing SOC 2 or building toward a broader compliance posture, this retest report becomes part of the audit trail rather than a one-off exercise that gets filed and forgotten.

Realistic Timelines for Canadian Teams

Timelines depend heavily on how much of the codebase is AI-generated and how critical the affected systems are:

  • Small feature or MVP (under 20,000 lines, mostly AI-generated): two weeks, intake through retest
  • Mid-size product with mixed AI and human-written code: three to four weeks
  • Full application handling regulated data (fintech, health tech, or anything under Quebec's Law 25): four to six weeks, with a heavier manual pentest phase

Teams that try to compress this timeline by skipping manual testing usually end up back at square one after a customer's security questionnaire or a vendor risk assessment flags something the scanner missed.

Where a Partner Fits In

Founders and engineering leads don't need to run this alone, and most shouldn't. The value a partner brings isn't just extra hands, it's pattern recognition across dozens of AI-generated codebases: knowing which frameworks' AI output tends to mishandle auth, which prompt-based scaffolding tools skip input sanitization by default, and which fixes hold up under a real pentest versus a fixes that just satisfy the linter. A boutique Canadian firm also understands the compliance context that a generic offshore pentest shop won't: why a Quebec-based client needs the review documented differently under Law 25, and how this work feeds into a broader SOC 2 or ISO 42001 program rather than sitting as a standalone report. If you're building toward AI governance requirements on top of the QA work, see how this connects to our broader engagement pricing structure so the security review and any compliance work that follows aren't quoted and delivered as disconnected projects.

Choosing a QA Partner for AI-Built Code

Not every security firm has adapted its methodology for AI-generated code. Ask a prospective partner how they scope fuzzing differently for AI-written input handlers, whether their testers have reviewed prompt-injection risk in products that embed LLMs, and whether their final report ties findings to your actual compliance obligations rather than a generic OWASP checklist. A firm that treats a vibe-coded app exactly like a hand-written one will miss the failure modes that are unique to AI-assisted development. traztech works with engineering teams in Toronto, Waterloo, Ottawa, Vancouver, Calgary, and Montreal to run these engagements end to end, from intake through retest and sign-off. If your team has shipped AI-generated code that hasn't had a real security review, get in touch and we'll scope a timeline based on your actual codebase, not a generic template.

What you need in place before day one

Engagements slip in the first week for logistics reasons, not technical ones. Have five things ready and the schedule holds. A staging environment that mirrors production configuration, since a stack with debug mode on produces findings that do not exist in production and hides ones that do. Test accounts at every privilege level across at least two tenants. Read access to the repository and its commit history, which is how a tester tells AI-generated modules from hand-written ones. A named engineer who can answer architecture questions within a day. And a rules of engagement note covering rate limits, out-of-scope services, and who gets called if the tester finds something actively exploited.

The last one matters most. If a tester finds evidence of prior compromise, the engagement stops being QA and becomes incident response, and you want that decision path agreed before it is needed rather than during a call at nine at night.

A worked example of the failure this catches

The most common serious finding in AI-assisted applications has the same shape every time. A developer prompts for a REST endpoint that returns an invoice. The model produces a route that requires a valid session, loads the invoice by the identifier in the path, and returns it. Every check a reviewer looks for is present: session middleware applied, identifier validated, query parameterized.

The missing line compares the invoice's owning account to the caller's. Static analysis does not flag it because no insecure pattern is present, and the unit tests pass because they came from the same prompt and assume the caller owns the record. The finding surfaces only when a tester authenticates as tenant A, requests an identifier belonging to tenant B, and gets a document back. Then look for the pattern rather than the instance, because endpoints generated in the same working session usually share the omission.

Cost drivers and how to keep them down

Price tracks manual hours, and manual hours track four things: the number of user roles, the number of endpoints with their own authorization logic, whether the product embeds an LLM with tool access, and the state of the documentation. Testing starts from $1,000 for a narrow scope and rises with the surface area. Fix the dependency and secrets findings yourself first, and agree the retest window up front so fixes are verified in one pass.

What to do when the report lands badly

Occasionally the findings say the architecture is the problem rather than the code, usually because tenant separation was never designed and has been approximated in application logic. Rewriting that is a quarter of work, not a sprint. The defensible interim position is to enforce the ownership check in one place every query passes through, assert cross-tenant failure in the build, and put the architectural fix in the roadmap with a date and an owner. Patching only the endpoints named in the report will not survive the next review.

When to skip the engagement

If your team already runs authenticated testing on every release, has cross-tenant assertions in the build, and reads AI output as carefully as a contractor's first pull request, a separate vibe-coding QA engagement is redundant and a regular application test is the better buy. If the application has no real users yet, wait. And if the only reason you are considering this is a questionnaire asking how you validate AI-generated code, the cheaper correct answer may be a written development standard plus evidence that it is followed.

Want this handled? Tell us what your buyer is asking for and we will tell you what the work involves, what it costs, and what you can do yourself.

Talk to usOr talk about a retainer

Before you go

Want the rest of this by email?

If this was useful, I send a few short notes on security posture. Unsubscribe in one click, and replies reach me directly.

From Jacob Masse, principal of traztech. No spam, unsubscribe in one click.

Want a second opinion on where you stand?

We run SOC 2, ISO 27001 and the rest of the compliance stack for startups and SMEs, and the security testing that sits behind it. The first call is free, and we will tell you if you are not ready to start yet.

Book a free call

Track record

Who is actually doing the work

5
Published CVEs, including a CVSS 9.1
76
Controls taken from nothing to a passed SOC 2 Type II
Zero
Exceptions on that Type II report
20+
Penetration testing engagements delivered

Published vulnerability research

Five published CVEs. CVE-2024-45163 (CVSS 9.1) is a flaw in the Mirai botnet itself, which gave defenders a way to shut down attacker infrastructure. CVE-2026-42626 takes HP ENVY 5000 printers offline from any unauthenticated device on the same network.

A SOC 2 Type II built from nothing

At Humera, a venture-backed US security company, Jacob built the compliance programme in-house from nothing: no report, no policies, no documented controls. It ended in a Type II attestation across 76 controls with zero exceptions, on a team of 15.