Universal guardrails loaded by every agent. Defines Verify Before Reporting (VBR), Write-Ahead Log (WAL), and the security baseline. Always-on, role-independent.
日本語の概要は準備中です。原文の説明を表示しています。
Use when: Tester runs a full QA session, processes a Builder handoff, executes test steps, writes a GitHub test report, or aligns ticket state after verification.
インストールする前に、エージェントに与えられる指示の中身を確認できます。
Use this skill when Tester receives a ticket or PR handoff that requires the full QA execution flow, GitHub reporting, and ticket-state alignment.
When run directly by the team lead, execute the complete workflow below (handoff check → pre-test setup → execution → report → state alignment → defect notification → cleanup).
When invoked as a subagent by Builder (not by the team lead), Tester operates in readiness-check mode only:
ticket-lifecycle-mode).memory/tester.md so it is tracked.READY (handoff complete) | INCOMPLETE: [list of missing fields].Full QA requires a direct Tester session because tests use shared browser state that cannot run inside a subagent. After Builder confirms readiness, the team lead triggers full Tester QA in a dedicated session.
The canonical Developer → QA handoff payload is defined in ticket-lifecycle-mode. Tester blocks execution if any required field is missing and asks for it before proceeding.
Before executing any test step:
Extract:
List any gaps not answerable from the ticket or .env.local.
Batch missing credentials, ambiguous acceptance criteria, missing URL, required seed data, and infrastructure readiness into one question set before starting. Do not execute any test step until all blocking questions are resolved.
Parallelization rules:
For each step:
If a step fails but later steps are independent, continue. If failure blocks subsequent steps, mark them BLOCKED and stop.
Where applicable, confirm via shared browser windows:
Do not substitute CLI queries for browser verification.
## Test Report - [Ticket/PR] - [YYYY-MM-DD]
**Ticket:** [org/repo#number]
**PR:** [org/repo#number] (if applicable)
**Environment:** [base URL tested]
**Tester:** Tester
**Run date:** [date]
### Summary
[1-2 sentences: overall result and key finding]
### Test Steps
| # | Step | Expected | Actual | Result |
| --- | ---- | -------- | ------ | ------ |
| 1 | ... | ... | ... | PASS |
### Defects Found
[List with description, expected, actual, severity - or None]
### Additional Observations
[Out-of-scope findings, or None]
### Verdict
[PASS | FAIL | PARTIAL PASS | BLOCKED] - [one sentence justification]
The only documented path: npm run task -- qa-report <id> <verdict> [--gaps <path>] [--findings <path>] [--projects-root <path>]. This single command composes the report, posts it to the linked GitHub issue and (if an open PR is discoverable for the current branch) the PR, re-fetches the comment list to confirm each post actually landed (failing loudly, non-zero exit, if not), appends the local ## QA Report section (and ## Gap Closure on FAIL/PARTIAL PASS when --gaps is supplied), and performs the matching state transition — state:qa-passed on PASS, or state:changes-requested + the correct qa-fail-N label on FAIL/PARTIAL PASS. It replaces Steps 6-8 below with one call. --projects-root <path> reliably resolves task files regardless of which repo the CLI process itself is running from — pass it whenever the task file lives outside the CLI's own cwd (e.g. Tester running from the source repo against task files under the deployed hub's projects/ directory).
--body escaping), then pass its path via --findings and/or --gaps.ok field and exit code. ok: false means the report did not verifiably land, or the transition failed — do not treat any output as success without checking ok.error field, fix the underlying cause (missing --projects-root, invalid id, gh auth, etc.) and retry the command. There is no manual-edit fallback path — exactly one documented path exists for this operation.Steps 6 and 7 below describe the sequence the CLI command automates internally; they remain a reference for what the command does — not an alternative manual procedure to perform by hand. The VBR gate is the local task file update; the GitHub comment is the mandatory-when-configured mirror step.
This is the primary VBR gate. A verdict is not complete until the local task file is updated with the QA report and the state transition is recorded.
## QA Report section to the task file with the same report content (verdict, AC table, date, defects, observations).## Gap Closure section — see Gap Closure Section below. This is required on every FAIL/PARTIAL PASS verdict, not optional documentation.status: to the new lifecycle statefail-count: if applicable (increment on FAIL or PARTIAL PASS)parked: true if fail-count reaches 3task_N_done_<slug>.md (or task_N_qa-passed_<slug>.md if not terminal)task_N_changes-requested_<slug>.mdready-for-qa and note blocker in the QA Report sectionVBR check: Verify the local task file now has the ## QA Report section (and, on FAIL/PARTIAL PASS, the ## Gap Closure section) and the filename reflects the new state before proceeding to Step 7.
On a FAIL or PARTIAL PASS verdict, Tester appends a ## Gap Closure section to the task file — one entry per failed acceptance criterion. This turns the fix guidance from prose Tester writes once and Builder re-derives from, into a structured work list Builder consumes directly on 1st-fail re-dispatch (see task-automation-flow's 1st Fail path) and Architect corrects directly on 2nd-fail review (see task-automation-flow's 2nd Fail path), instead of rewriting the ticket body.
Write the section via the task CLI's append-task-section operation (npm run task -- append-section <id> "Gap Closure" <content> [--projects-root <path>], piping multi-line content via stdin — see ticket-lifecycle-mode State Transition CLI section for the CLI's general usage pattern). Do not hand-edit the section with a text editor — the CLI is the only documented path; if it errors, fix the underlying cause and retry, do not bypass it with a manual Edit.
Each entry is a ### Gap N subsection with these fields:
One ### Gap N entry per failed AC. Passing ACs do not get an entry — the Gap Closure section is the failure work list, not a full AC recap (the AC table in ## QA Report already covers pass/fail per AC).
Ticket has 3 ACs. Tester verdict is FAIL — AC 2 and AC 3 fail, AC 1 passes. Tester runs:
npm run task -- append-section "demo#42" "Gap Closure" "$(cat <<'EOF'
### Gap 1
- **AC:** 2
- **Observed:** Submitting the form with an empty email field shows no validation
message; the request is sent to the server and returns a 500.
- **Expected:** AC 2 requires client-side validation to block submission and show
"Email is required" inline before any request is sent.
- **Suspected location:** src/components/SignupForm.tsx — no onBlur/onSubmit
validation wired for the email field.
### Gap 2
- **AC:** 3
- **Observed:** Success toast never appears after a valid submission; console shows
`Cannot read properties of undefined (reading 'toast')`.
- **Expected:** AC 3 requires a visible success toast within 2s of a valid submit.
- **Suspected location:** src/hooks/useSignup.ts — toast import likely missing after
the recent notifications refactor.
EOF
)"
Resulting section appended to the task file:
## Gap Closure
### Gap 1
- **AC:** 2
- **Observed:** Submitting the form with an empty email field shows no validation
message; the request is sent to the server and returns a 500.
- **Expected:** AC 2 requires client-side validation to block submission and show
"Email is required" inline before any request is sent.
- **Suspected location:** src/components/SignupForm.tsx — no onBlur/onSubmit
validation wired for the email field.
### Gap 2
- **AC:** 3
- **Observed:** Success toast never appears after a valid submission; console shows
`Cannot read properties of undefined (reading 'toast')`.
- **Expected:** AC 3 requires a visible success toast within 2s of a valid submit.
- **Suspected location:** src/hooks/useSignup.ts — toast import likely missing after
the recent notifications refactor.
On re-dispatch, Builder marks each gap closed directly in this section as part of the fix commit (e.g. appending **Status:** closed — <one-line fix summary> under each ### Gap N) rather than deleting or rewriting the entries — this keeps the section a durable record across fail attempts.
When re-running QA against a task file that carries a ## Gap Closure section from a prior fail, Tester verifies each gap entry individually — not a blanket re-test of the whole ticket:
### Gap N entry, re-run the specific check described in Observed/Expected and record PASS or FAIL for that gap specifically, with fresh evidence (URL, rendered text, or command output) — the prior FAIL evidence is not reusable as re-QA evidence.**Status:** closed annotation as evidence.## Gap Closure entry set (or update the existing one) following the same format — do not silently drop gaps that are still open.Posting the full QA report to GitHub is a hard requirement after every verdict. When a tracker is configured (presence of github: or github-issue: field in task frontmatter, or workspace tracker config), the GitHub comment is mandatory, not optional.
The report must include: verdict, evidence for each acceptance criterion, npm run validate:manifests result, and npm test exit code.
Write the report to a temp file. On Linux/Mac use mktemp; on Windows (PowerShell) use Join-Path $env:TEMP "qa-report.md". Write the report line by line to that path. Never inline multi-line content with --body. Remove the temp file after posting.
Post destinations (all that apply):
gh issue comment <number> --repo <org/repo> --body-file <path>
gh pr comment <number> --repo <org/repo> --body-file <path>
Post the same report to both issue and PR when both exist — the PR comment is the primary evidence artifact.VBR check (mirror write): After posting, verify the comment is visible:
gh issue view <number> --repo <org/repo> --comments
gh pr view <number> --repo <org/repo> --comments
If the mirror write fails:
## Log section (timestamp, attempted action, error)memory/router.md HOT section under failed-outbound (if Router is active)No tracker configured: skip this step entirely; the local QA Report is sufficient.
For CLI/tooling tickets with no deployed URL, set Environment: to local / CLI and cite command output or test counts as evidence in the Test Steps table.
Covered automatically by npm run task -- qa-report — the CLI command performs the state transition and label sync as part of the same call. The description below is a reference for what the command does internally, not an alternative manual procedure — do not run gh issue edit by hand as a substitute.
Aligning ticket state and renaming the local task file are hard requirements, both performed atomically by the CLI:
state:qa-passed label applied, task file renamed to _qa-passed_state:changes-requested label applied (also syncs the qa-fail-* label to match local fail-count:), task file renamed to _changes-requested_ (Builder picks it up)memory/tester.md: Append a one-line HOT entry with verdict, ticket/PR refs, local task file path, and GitHub comment URL (if posted).
If verdict is FAIL or PARTIAL PASS:
Preferred path — dispatch Builder as subagent: Dispatch Builder in development mode. Pass:
## QA Report section appended)Fallback path — when subagent dispatch is unavailable in the current session:
Append to memory/builder.md HOT section:
Do not modify any other section of Builder's memory file. Builder will read the local task file's ## QA Report section for full context; the HOT append ensures the defect is tracked for the next Builder session.
Fail counter automation rules: When operating inside a task-automation-flow run, see skills/ticket-lifecycle-mode/SKILL.md for the complete fail counter rules. On 1st fail, dispatch Builder (same as preferred path above). On 2nd fail, route to Architect — do not dispatch Builder again.
If verdict is PASS with no defects, skip this step — Builder will see the local task file update and (if posted) the GitHub comment.
Remove temp report files and summarize the final verdict in chat.
まだレビューはありません。使ってみた感想をお寄せください。
概要と使いどころ
Universal guardrails loaded by every agent. Defines Verify Before Reporting (VBR), Write-Ahead Log (WAL), and the security baseline. Always-on, role-independent.
日本語の概要は準備中です。原文の説明を表示しています。
Use when: architecture mode, architect this, ADR, C4, PlantUML, system boundary, design decision, PRD gap, high ambiguity, multiple technical approaches, security architecture, data architecture, integration risk, implementability gap, story ticket, or epic ticket.
日本語の概要は準備中です。原文の説明を表示しています。
Use when: assumptions audit, audit assumptions, check for hidden assumptions, plan/ticket has ambiguous scope edges, pre-flight before finalizing a ticket, unstated assumptions, or 'what am I assuming'. Surfaces unstated assumptions, ambiguous scope edges, and untested preconditions in a finished plan/ticket/ADR before it is handed to Builder. Optional pass — Architect judges when to apply it; not a mandatory gate on every ticket.
日本語の概要は準備中です。原文の説明を表示しています。
Use when: Tester needs UI state evidence for VBR, or Builder needs to verify an integration wire is observable end-to-end. Powered by agent-browser MCP — token-efficient browser automation (200–400 tokens/page).
日本語の概要は準備中です。原文の説明を表示しています。
Conducts multi-axis code review. Use before merging any change. Use when reviewing code written by yourself, another agent, or a human. Use when you need to assess code quality across multiple dimensions before it enters the main branch.
日本語の概要は準備中です。原文の説明を表示しています。
Writing skill for freelancers and independent consultants. Covers project proposals, bids, client emails, and scope summaries. Leads with the client's problem, not the consultant's background.
日本語の概要は準備中です。原文の説明を表示しています。