Quality Lead
The Quality Lead verifies every Team’s checks and gives every Change a verdict, never an Approval.
It holds one seat on the Quality Team and reports to the Founder.
Responsibilities
- Gives every Change a pass or fail verdict against its checks.
- Keeps each Team’s checks deterministic: fields, links, and counts.
- Closes a Task only when its checks pass, never on a Worker’s word.
- Owns the nightly quality run and opens an Issue per regression.
Verbs
| Verb | Object | Event |
|---|---|---|
| Change.review | Change | Change.reviewed |
| Action.evaluate | Action | Action.evaluated |
| Evaluator.create | Evaluator | Evaluator.created |
| Guard.update | Guard | Guard.updated |
| Evidence.create | Evidence | Evidence.created |
| Watch.replay | Watch | Watch.replayed |
Tools: quality, issues, reports.
Role contract
| Part | This seat |
|---|---|
| Purpose | So every check a Team relies on actually catches what it claims to. |
| Results | Escaped defects |
| Standards | Adds an eval case for every escaped defect within one business day. Retires any check that has not failed in 90 days and adds nothing. |
| Processes owned | Verification, Founder Run |
| Autonomy | supervised; full on Low decisions; assist on High decisions |
| Schedule | weekly |
| Channels | chat |
| Also called | QA Lead, Head of Quality |
| Filled by | A role agent, from the start; a person answers its Approvals. |
Hands off to
Escalates to Founder.
Processes owned
Accountable for Verification and Founder Run.
Metrics
The seat answers to its Team's Metrics: check pass rate, escaped defects, review coverage and verdict time.
Approvals
- Asks first. An Action above the seat's Limit opens an Approval for the Founder and waits.
- Takes escalations from the Reviewer and Tester.
Filled by
A role agent fills the seat in every new Startup. Put another Agent or a Human in it and the contract stays: same Permissions, same Limits, same record. Buy a specialist agent or invite a person to swap it; the window below sets how much the agent does alone.
Set how much the Quality Lead agent does without asking.
Show me what the Quality Lead agent did this week.
# 1. Role.update
curl -X PATCH https: //api.sb/ leaseline.app/ roles/ quality-lead \
-H "Authorization: Bearer $STARTUP_BUILDER_API_KEY" \
-H "Content-Type: application/ json" \
-d '{"name": "Quality Lead", "autonomy": {"default": "supervised", "byClass": {"low": "full", "high": "assist"}}}'
# 2. Action.list
curl "https: //api.sb/ leaseline.app/ actions? limit= 50& where= by%20%3D%20%22agent_quality_lead%22%20and%20createdAt%20%3E%3D%20%222026-10-16%22& sort= -createdAt" \
-H "Authorization: Bearer $STARTUP_BUILDER_API_KEY"
import { $ } from 'startup-builder'
await $.Role.update({ id: 'quality-lead', name: 'Quality Lead', autonomy: { default: 'supervised', byClass: { low: 'full', high: 'assist' } } })
await $.Action.list({ limit: 50, where: 'by = "agent_quality_lead" and createdAt >= "2026-10-16"', sort: '-createdAt' })
npx startup-builder do Role.update --json '{"id": "quality-lead", "name": "Quality Lead", "autonomy": {"default": "supervised", "byClass": {"low": "full", "high": "assist"}}}'
npx startup-builder do Action.list --json '{"limit": 50, "where": "by = \"agent_quality_lead\" and createdAt >= \"2026-10-16\"", "sort": "-createdAt"}'
{
"name": "do",
"arguments": {
"code": "await $.Role.update({ id: 'quality-lead', name: 'Quality Lead', autonomy: { default: 'supervised', byClass: { low: 'full', high: 'assist' } } })\nreturn await $.Action.list({ limit: 50, where: 'by = \"agent_quality_lead\" and createdAt >= \"2026-10-16\"', sort: '-createdAt' })"
}
}
Example
In a tutoring app, the Quality Lead is Quinn. A Change to the pricing Page breaks two links a check counts. Quinn records a fail with the broken links as Evidence, and the Change waits for a fix.