一键导入
user-uat
User Acceptance Testing with demonstrative examples
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
User Acceptance Testing with demonstrative examples
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Install Pasture binaries (pastured, pasture, pasture-release) from GitHub Releases, go install, or Nix
Pasture protocol reference documentation — 12-phase workflow, agent roles, constraints, and coding standards. Read when you need to understand the full workflow or look up conventions.
Create handoff document and transfer to supervisor
Create PROPOSAL-N task with full technical plan
Ratify proposal, mark old proposals pasture:superseded
Spawn 3 axis-specific reviewers (A/B/C)
| name | user-uat |
| description | User Acceptance Testing with demonstrative examples |
Command: pasture:user:uat — User Acceptance Testing with demonstrative examples
-> Full workflow in PROCESS.md <- Phase 5 (Plan UAT) and Phase 11 (Impl UAT)
[uat-demonstrative-examples]
[uat-one-component-at-a-time]
[uat-real-alternatives]
[uat-verbatim-feedback]
[uat-plan-revise]
[uat-impl-revise]
[uat-open-ended-alongside]
[uat-update-urd]
bd comments add <urd-id> "UAT: <summary>"[uat-feedback-disposition]
[uat-invoke-skill]
Skill(/pasture:user-uat) so the verbatim-capture, FIX-NOW/DEFER disposition, and validation-case confirmation procedures are loaded[frag--validation-cases]
After 3 reviewers ACCEPT the proposal, present each major design decision to the user one at a time. For each component:
After code review consensus, demonstrate what was actually built component by component. For each component:
Critical: Questions must split the engineering design space on its ambiguous boundaries to extract maximum information — like a decision tree, where each question bisects the remaining uncertainty.
The user needs to see the actual thing — definition, behavior, example — and then evaluate the specific engineering tradeoffs at the boundaries where the design could go either way.
WRONG — generic approval (DO NOT USE):
"Does this match your vision?"
options: ["Yes exactly", "Mostly yes", "Partially", "No"]
These fail because the options don't represent engineering alternatives.
RIGHT — boundary-splitting design decisions:
"The verbose flag adds the following fields to each log entry. Which fields are most useful?"
options based on actual fields implemented, e.g.:
- "session ID on every transcript event — adds noise but enables correlation"
- "backupDir on backup events — confirms where files land"
- "repo path + hash on sync events — confirms which repo was detected"
- "full key=value dump for unknown events — good for debugging"
"We sanitize emails in file paths by replacing @ with _ and non-alphanumeric chars with _.
Which sanitization behavior is correct?"
options based on real alternatives:
- "@ → _AT_ (reversible, unambiguous)"
- "@ → _ (current behavior, ambiguous if username contains _)"
- "keep @ (valid on most filesystems except Windows)"
- "base64-encode the email (fully reversible, opaque)"
These work because each option is a real engineering alternative with clear tradeoffs.
UAT is the second time the user evaluates this feature. Before designing UAT questions, cross-reference the URE responses and URD against the proposal:
bd show <elicit-id> # Re-read the user's original URE responses
bd show <urd-id> # The structured requirements document
bd show <proposal-id> # The architect's proposal and tradeoffs
Look for:
Structure questions to progressively validate the proposal against the user's original requirements.
Round 1: Highest-leverage tradeoffs (1-2 questions per AskUserQuestion call)
Start with the 2-3 architectural decisions where the proposal made the biggest choices. For each, show the user:
Round 2: Dependent and derivative decisions (informed by Round 1)
With the major tradeoffs validated, surface the second-order decisions that flow from them.
Round 3: New dimensions not in URE (if any)
Present engineering concerns that emerged after URE (from research, codebase exploration, or reviewer feedback).
Final: Catch-all
One open-ended question — "Is there anything from your original requirements that you don't see reflected in this proposal?"
Present the interface/type definition (e.g., the TypeScript type or function signature)
Then show a concrete before/after or input/output example:
BEFORE this change: $ aura watch --follow
[23:24:20] Updated: session-abc123
→ Backed up 3 files
AFTER this change: $ aura watch --follow --verbose
[23:24:20] Updated: -home-minttea-dev.../session-abc123
path: /home/minttea/.claude/projects/...
session: abc123
→ Repo sync: enqueued (debounced)
Design-space questions to ask per component type:
For output/display decisions:
For data model / type decisions:
For behavioral/algorithm decisions:
For API/interface decisions:
Use one AskUserQuestion call per component — do NOT batch all components into one survey.
AskUserQuestion({
questions: [
{
question: `The verbose flag shows the following extra lines for backup events:
backupDir: /home/user/.aura/aura-sync/repo/project/provider/claude/session/abc123
session: abc123
Which of these verbose fields are useful?`,
header: "Verbose fields",
multiSelect: true,
options: [
{ label: "backupDir (full path)", description: "Shows where the backup actually landed" },
{ label: "session ID", description: "Enables log correlation across events" },
]
},
{
question: "Any related feedback, concerns, or gaps not covered above?",
header: "Feedback",
multiSelect: false,
options: [
{ label: "No additional feedback", description: "All concerns addressed" },
{ label: "Related concern", description: "I have feedback on something adjacent" },
]
},
{
question: "Do you ACCEPT this component to proceed?",
header: "Decision",
multiSelect: false,
options: [
{ label: "ACCEPT", description: "Proceed to next component" },
{ label: "REVISE", description: "Needs changes before proceeding" }
]
}
]
})
Every piece of UAT feedback — whether a REVISE on a component or an open-ended concern — MUST be given an explicit, user-confirmed disposition. There is no third option.
| Disposition | Meaning | Where it goes |
|---|---|---|
| FIX-NOW | Resolve before this wave closes | Back to the architect (Plan UAT) or the relevant slice (Impl UAT) |
| DEFER | Acceptable to ship now; track for later | The sole source feeding the FOLLOWUP epic |
Echo each disposition back to the user for confirmation before recording it — e.g. "Recording '{{feedback}}' as DEFER (tracked in follow-up, not fixed this wave) — confirm?". Record the confirmed disposition verbatim alongside the feedback.
Deferrals may be proposed by the architect or supervisor, not only flagged by the user. Whoever proposes a deferral, all deferred items MUST be raised to the user at the next user gate (URE, Plan UAT, or Impl UAT) for confirmation — nothing is silently deferred. At each gate, present the complete outstanding deferral set and let the user confirm or override each item before it is recorded as DEFER.
Review severities (BLOCKER / IMPORTANT / MINOR) are never dispositioned here and never feed FOLLOWUP — they are resolved to zero during code review (Phase 10). FOLLOWUP is fed by DEFER'd UAT items only.
For every REQUEST (not only fix-intent ones — see the URE validation cases), UAT MUST close the validation-case loop:
Do NOT mark a component ACCEPT without confirming its validation cases pass.
bd create --labels "pasture:p5-user:s5-uat" \
--title "UAT: Plan acceptance for <feature>" \
--description "---
references:
request: <request-task-id>
urd: <urd-task-id>
proposal: <proposal-N-id>
---
## Components Reviewed
### Component: <component-name>
**Definition shown:** <interface/type/signature shown to user>
**Motivating example shown:** <before/after or input/output example>
**Question asked:** <exact question text>
**Options presented:** <exact option labels and descriptions>
**User response:** <verbatim selection(s)>
**Disposition:** <FIX-NOW or DEFER — user-confirmed, echoed back>
## Final Decision
<ACCEPT or REVISE with verbatim reason>"
bd dep add <proposal-id> --blocked-by <uat-task-id>
# Update URD with plan UAT results
bd comments add <urd-id> "Plan UAT: <ACCEPT or REVISE> - <summary of key decisions>"
bd create --labels "pasture:p11-user:s11-uat" \
--title "UAT: Implementation acceptance for <feature>" \
--description "---
references:
request: <request-task-id>
urd: <urd-task-id>
impl_plan: <impl-plan-task-id>
---
## Components Demonstrated
### Component: <component-name>
**Command run / output shown:** <actual terminal output shown to user>
**Question asked:** <exact question>
**User response:** <verbatim response>
**Disposition:** <FIX-NOW or DEFER — user-confirmed, echoed back>
## Final Decision
<ACCEPT or REVISE>"
bd dep add <impl-plan-id> --blocked-by <impl-uat-task-id>
# Update URD with implementation UAT results
bd comments add <urd-id> "Impl UAT: <ACCEPT or REVISE> - <summary of findings>"
If user selects REVISE:
Document the specific component and the user's verbatim feedback in the task description. Do not generalize.