From Dev10x
Verify that definition-of-done / acceptance criteria are met before closing a task list. Loads executable checks from plugin defaults, applies project overrides (add/remove/replace), runs each check automatically, and prompts the user only for manual items. TRIGGER when: task list is complete and work needs shippability verification before handover. DO NOT TRIGGER when: mid-implementation, or task list has incomplete items.
npx claudepluginhub dev10x-guru/dev10x-claude --plugin Dev10xThis skill is limited to using the following tools:
**Announce:** "Verifying acceptance criteria for this work session."
Creates isolated Git worktrees for feature branches with prioritized directory selection, gitignore safety checks, auto project setup for Node/Python/Rust/Go, and baseline verification.
Executes implementation plans in current session by dispatching fresh subagents per independent task, with two-stage reviews: spec compliance then code quality.
Dispatches parallel agents to independently tackle 2+ tasks like separate test failures or subsystems without shared state or dependencies.
Announce: "Verifying acceptance criteria for this work session."
This skill follows references/task-orchestration.md patterns
(Tier: Minimal).
REQUIRED: Create a task at invocation. Execute at startup:
TaskCreate(subject="Verify acceptance criteria", activeForm="Verifying acceptance criteria")Mark completed when done.
This skill adapts behavior based on the project's friction level
(see references/friction-levels.md):
| Level | Automated checks | Manual checks | Decision gate |
|---|---|---|---|
| strict | Run, must all pass | AskUserQuestion per item | AskUserQuestion required |
| guided | Run, failures shown | AskUserQuestion per item | AskUserQuestion with recommendation |
| adaptive | Run, auto-pass/fail | Converted to prompt (Claude evaluates) | Auto-select "Work complete" if all pass |
Resolving friction level: Read from session context or
playbook step metadata. If not available, default to guided.
Playbook steps may override with friction_level: adaptive
for unattended shipping pipelines.
The skill accepts an optional work_type argument. If not
provided, infer from session context:
| Context | Work type |
|---|---|
| Ticket with implementation | feature |
| Sentry/bug ticket | bugfix |
| PR with review comments | pr-continuation |
| No ticket, no PR | local-only |
| Sentry/Slack only, no fix planned | investigation |
| Fanout (multi-item) | fanout |
Load criteria from two sources and merge them:
Read executable checks from:
${CLAUDE_PLUGIN_ROOT}/skills/verify-acc-dod/references/defaults.yaml
Extract defaults[work_type].checks — an array of check objects.
Read overrides from a single global file:
~/.claude/memory/Dev10x/dod-acceptance-criteria.yaml
This file maps repositories to their override deltas:
repos:
example-org/app-pos:
bugfix:
add:
- name: Sentry issue linked
check: >
gh pr view {pr_number} --repo {repo}
--json body -q .body
expect_contains: "sentry.io"
remove:
- Slack notification posted
Dev10x-Guru/dev10x-claude:
feature:
remove:
- Review requested
add:
- name: PR ready (solo maintainer)
check: >
gh pr view {pr_number} --repo {repo}
--json isDraft -q .isDraft
expect: "false"
Repo detection: Resolve the current repo via gh repo view --json nameWithOwner -q .nameWithOwner or session context.
Look up repos[nameWithOwner][work_type] for deltas.
Apply the repo-scoped deltas from the global file to the plugin defaults:
add — append checks to the defaults list.
remove — remove checks by name (exact match).
replace — replace a check by name with the new definition.
Apply in order: remove first, then replace, then add. This prevents removing a just-added check or replacing a removed one.
Read active_modes from .claude/Dev10x/session.yaml. For each
check with a modes: field, check if any active mode has
skip: true. If so, remove the check from the list and report
it as "skipped (mode: )".
work_typework_type: apply remove → replace → addwork_type has no entry in defaults: use empty checks list
and warnBefore running each check command, resolve placeholders:
| Placeholder | Source |
|---|---|
{pr_number} | Current PR number (from gh pr view --json number -q .number or session context) |
{repo} | Current repo (from gh repo view --json nameWithOwner -q .nameWithOwner or session context) |
If no PR exists (e.g., local-only), skip checks that reference
{pr_number} and mark them as "skipped (no PR)".
For each check in the merged list:
check: manual — queue for user confirmation (see
Manual Checks below)check: prompt — evaluate the prompt contextually
from the current session (code state, conversation history,
tool outputs). Report pass/fail with a brief rationale.
Use this for criteria that require judgment but not user
interaction (e.g., "Does the PR description contain a Job
Story?").| Field | Evaluation |
|---|---|
expect | Trim command output; pass if exactly equals the value |
expect_contains | Pass if output contains the substring |
expect_not_contains | Pass if output does NOT contain the substring |
expect_gt | Parse output as number; pass if > value |
If none of the expect fields match the output, the check fails. Capture the actual output for the failure report.
At strict/guided level:
Collect all check: manual items and present them in a single
AskUserQuestion call after all automated checks complete:
REQUIRED: Call AskUserQuestion for manual checks (do NOT
assume pass/fail).
Present each manual check as a yes/no confirmation using its
prompt field.
At adaptive level:
Convert manual checks to prompt checks — Claude evaluates
each from session context (code state, conversation history,
tool outputs). Report pass/fail with a brief rationale. No
AskUserQuestion call. This enables fully unattended ACC
verification in AFK/solo-maintainer workflows.
Present results as a pass/fail table:
Acceptance criteria (feature):
Checks:
✅ Working copy clean
✅ CI passing
✅ PR not draft
✅ No fixup commits
❌ Review requested — actual: "0" (expected > 0)
⏭️ Slack posted (skipped — no PR)
✋ Findings documented — awaiting confirmation
4/5 automated checks passed. 1 manual check pending.
Show the actual command output on failure so the user can diagnose without re-running.
At strict/guided level:
REQUIRED: Call AskUserQuestion (do NOT use plain text).
Options:
At adaptive level (GH-851 F4):
Skip AskUserQuestion. Auto-select based on results:
If the user picks "Override", ask whether to persist:
REQUIRED: Call AskUserQuestion (do NOT use plain text).
Options:
persist: truepersist: falseUpdate the global YAML file at
~/.claude/memory/Dev10x/dod-acceptance-criteria.yaml accordingly.
Create the file if absent. Add the override under the current
repo's key using add/remove/replace semantics.
Dev10x:work-on → ... → Dev10x:verify-acc-dod (last step)
Dev10x:fanout → ... → Dev10x:verify-acc-dod (last step)
Callers pass the work type and let this skill handle criteria resolution, state checking, and user confirmation.