Summary
While using Relay to manage a multi-card QA pass, the workflow exposed confusion between the review and testing stages. The tool worked well as an audit trail, but the semantics around code review, QA review, testing, and final approval were ambiguous enough that it was easy to say a card was approved when it had only been approved to enter testing.
Observed confusion
Current flow looked like:
in_progress -> review -> testing -> done
In practice:
review was used as a QA/Product review gate for implementation quality.
- Moving from
review to testing required a --human-summary, which implies review is not final QA/testing approval.
- Notes saying approved in
review were ambiguous: approved for testing, not approved as final product acceptance.
- Cards in
testing still needed a separate tester/UAT signoff, but the previous review notes already sounded final.
This creates a real risk that teams treat testing as done or skip the separate QA/testing stage.
Suggested workflow model
Rename or clarify the states so the gates are explicit:
in_progress -> code_review -> qa_testing -> done
Suggested semantics:
-
code_review: engineering/code correctness gate.
- Checks implementation, tests, migrations, builds, regressions.
- Note language:
Code review approved or Code review changes requested.
- Move target:
qa_testing.
-
qa_testing: product/integration behavior gate.
- Validates user scenarios from the card/design doc end to end.
- Note language:
QA testing approved or QA testing failed.
- Move target:
done or back to in_progress.
-
done: only after QA testing passes.
If renaming states is too disruptive, Relay could keep the existing state names but enforce stage-specific note templates and UI/CLI copy:
review = code review
testing = QA/UAT testing
CLI / workflow improvements
-
Require or strongly encourage stage-prefixed notes:
## Code review - approved
## QA testing - approved
- Avoid generic approved notes without a stage.
-
Show transition requirements before a move command fails.
- Example: moving to
testing requires --human-summary; show that in relay move --help and/or dry-run output.
-
Add first-class summary fields instead of overloading notes:
code_review_summary
qa_test_summary
validation_evidence
-
Improve PR/head metadata reliability before a card can enter review.
- Several cards had stale commit hashes or blank PR URLs.
- Consider requiring
prUrl and current head SHA before review, or warning loudly when they are stale.
-
Add a native watch/filter mode for review operations:
relay watch --status review --project "Routines Backend P2"
Manual polling with relay card list --status review --json | jq ... worked, but this should be a first-class workflow.
- Add a compact list output for polling/review dashboards:
relay card list --status review --fields id,title,projectName,featureName,assignedAgent,commitSha,prUrl,updatedAt
Why this matters
For a multi-card feature, the distinction between code review approval and QA testing approval matters. Relay already has the lifecycle states to support this, but the current names and note language make it easy to blur the gates. Tightening the semantics would make the board safer for final acceptance workflows.
Summary
While using Relay to manage a multi-card QA pass, the workflow exposed confusion between the
reviewandtestingstages. The tool worked well as an audit trail, but the semantics around code review, QA review, testing, and final approval were ambiguous enough that it was easy to say a card was approved when it had only been approved to enter testing.Observed confusion
Current flow looked like:
In practice:
reviewwas used as a QA/Product review gate for implementation quality.reviewtotestingrequired a--human-summary, which impliesreviewis not final QA/testing approval.reviewwere ambiguous: approved for testing, not approved as final product acceptance.testingstill needed a separate tester/UAT signoff, but the previous review notes already sounded final.This creates a real risk that teams treat
testingas done or skip the separate QA/testing stage.Suggested workflow model
Rename or clarify the states so the gates are explicit:
Suggested semantics:
code_review: engineering/code correctness gate.Code review approvedorCode review changes requested.qa_testing.qa_testing: product/integration behavior gate.QA testing approvedorQA testing failed.doneor back toin_progress.done: only after QA testing passes.If renaming states is too disruptive, Relay could keep the existing state names but enforce stage-specific note templates and UI/CLI copy:
review= code reviewtesting= QA/UAT testingCLI / workflow improvements
Require or strongly encourage stage-prefixed notes:
## Code review - approved## QA testing - approvedShow transition requirements before a move command fails.
testingrequires--human-summary; show that inrelay move --helpand/or dry-run output.Add first-class summary fields instead of overloading notes:
code_review_summaryqa_test_summaryvalidation_evidenceImprove PR/head metadata reliability before a card can enter review.
prUrland current head SHA beforereview, or warning loudly when they are stale.Add a native watch/filter mode for review operations:
relay watch --status review --project "Routines Backend P2"Manual polling with
relay card list --status review --json | jq ...worked, but this should be a first-class workflow.Why this matters
For a multi-card feature, the distinction between code review approval and QA testing approval matters. Relay already has the lifecycle states to support this, but the current names and note language make it easy to blur the gates. Tightening the semantics would make the board safer for final acceptance workflows.