AgentStack
SKILL verified MIT Self-run

Shift Left Testing

skill-upex-galaxy-agentic-qa-boilerplate-shift-left-testing · by upex-galaxy

Orchestrates pre-sprint Shift-Left QA on a batch of backlog Stories. Use when the user wants to refine acceptance criteria, surface ambiguities + gaps, draft an ATP outline, and hand off to PO/Dev BEFORE the Story enters a sprint — so defects are prevented in the requirements, not detected after implementation. Triggers on: shift-left testing, shift-left these stories, groom the backlog, pre-spri…

No reviews yet
0 installs
12 views
0.0% view→install

Install

$ agentstack add skill-upex-galaxy-agentic-qa-boilerplate-shift-left-testing

✓ scanned · ✓ verified — works with Claude Code, Cursor, and more.

Security review

✓ Passed

No issues found. Passed automated security review. · v0.1.0 How review works →

  • Prompt-injection patterns
  • Secret / credential exfiltration
  • Dangerous shell & filesystem operations
  • Untrusted network calls
  • Known-malicious package signatures

What it can access

  • Network access Used
  • Filesystem access No
  • Shell / process execution No
  • Environment & secrets Used
  • Dynamic code execution No

From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.

Are you the author of Shift Left Testing? Claim this listing to set pricing, connect Stripe payouts, and keep 70% of every sale.
Sign up to claim

About

Inputs

Read in order; stop earlier when the batch is small enough that later inputs add no signal.

  1. .context/business/business-feature-map.md + .context/business/business-data-map.md — domain vocabulary, entity model, CRUD matrix. Anchors refined ACs in real entities and flows.
  2. .context/master-test-plan.md — regression Epic + in-scope modules. Tells the refinement whether the Story falls inside an already-prioritized area.
  3. The Story's Acceptance Criteria + **Source spec:** reference on Jira. Detailed read via bun run jira:sync-issues get --include-comments, then read the synced acceptance-criteria.md (+ description). NEVER acli view for custom fields. Canonical input — every refined AC must trace back here.
  4. .context/PBI/epics/EPIC--/stories/STORY--/ if a PBI folder already exists for this Story (created by a prior /sprint-testing cycle). Carries earlier session notes worth honoring.
  5. .agents/jira-workflows.json — Story workflow + valid transitions (backlog -> shift_left_qa -> estimation). Source of {{jira.transition.story.*}} slugs used in Phase 3.
  6. .agents/jira-required.yaml — canonical slug catalog. Source of {{jira.acceptance_test_plan}} and other Jira field slugs touched in handoff.

Forbidden invocations

NEVER invoke /sdd-* skills from this workflow. SDD is an optional user-installed ceremony; this skill ships self-contained and does not chain SDD under any condition. If you need to refactor KATA, fixtures, cli/, scripts/, or api/schemas/ pipeline, exit this skill first and invoke /framework-development.

This boundary is mechanical, not advisory: scripts/lint-skills.ts rejects any /sdd- mention outside this section. See: .claude/skills/agentic-qa-core/references/skill-composition-strategy.md §4 (governs users who manually install SDD).

Shift-Left Testing — Pre-Sprint AC Refinement on a Backlog Batch

Drive Stage 0 — the pre-sprint Shift-Left loop — on a set of backlog Stories. Three phases, always in this order: Phase 1 Selection -> Phase 2 Refinement -> Phase 3 Handoff. Hand off afterwards to /sprint-testing once each Story reaches Ready For QA.

The skill is batch-by-design: one session refines N Stories from the backlog so PO + Dev lead can run a single grooming pass with the team. There is no single-ticket mode — for a one-off urgent refinement, pass a list of length 1; the cadence stays the same.


Why this skill exists (separation from /sprint-testing)

| Eje | /sprint-testing | /shift-left-testing | |-----|-------------------|----------------------| | Cadence | In-sprint, ticket-by-ticket loop | Pre-sprint, batch grooming of N Stories | | Entry status | {{jira.status.story.ready_for_qa}} | {{jira.status.story.backlog}} / shift_left_qa / estimation / ready_for_dev | | Exit status | {{jira.status.story.qa_approved}} (full execution) | {{jira.status.story.estimation}} (refined, awaiting estimate by PO + Dev) | | Audience | Dev + tester | PO / BA + tester (Dev lead optional) | | Output | ATP + ATR + bugs + execution evidence | Refined ACs + risk map + ATP DRAFT (outlines only) + batch report | | Execution | Smoke + UI / API / DB exploration | NONE — feature does not exist yet | | Code reads | Deep, targeted (reproduce / verify) | Light (feasibility only — does the codebase support this?) | | TC creation | Yes (TCs created in Stage 1) | No — Stage 4 (test-documentation) creates TCs after the Story ships | | Sprint-testing later | Runs full pipeline | Short-circuits Phases 1-3 (label shift-left-reviewed detected) and just validates |

The reuse story is deliberate: ~70% of the refinement logic already lives in sprint-testing/references/acceptance-test-planning.md Phases 1-3. This skill cites that reference instead of duplicating it — see Phase 2 below.


Dependencies

Requires agentic-qa-core. Loads on demand:

  • agentic-qa-core/references/test-design-doctrine.mdMANDATORY before refining ACs or estimating outline coverage. A refinement that does not surface risk-beyond-AC and 1:N coverage is incomplete.
  • agentic-qa-core/references/defect-management-doctrine.mdMANDATORY for the QA-Assignee hook (Part 2). This skill is the EARLIEST QA pickup of a backlog Story: when a QA takes a Story into Shift-Left refinement, set qa_assignee to the authenticated session user (self) — read-before-write, NEVER overwrite an existing owner except on explicit, justified handover. This skill still files NO Bug/Defect/Improvement (Phase 1 rejects non-Story types); only the QA-Assignee semantics of Part 2 apply here.
  • agentic-qa-core/references/briefing-template.md, ./dispatch-patterns.md, ./orchestration-doctrine.md, ./session-management.md, ./preflight-gate.md — cited inline by the sections that use them.

Compact Rules

Test-design doctrine (binding — full canon: agentic-qa-core/references/test-design-doctrine.md):

  • ACs are the FLOOR. Refinement's job is to push past the happy-path contract: surface the boundaries, exceptions, states, and anomalies the Story is silent on.
  • 1:N is the default: a non-trivial AC implies multiple outlines (valid partition + each distinct invalid + boundaries + states). A 1-outline AC requires a written "trivially atomic" justification — never the default.
  • Tag each refinement gap to a technique: ranges/limits → BVA; status/lifecycle fields → State-Transition; 2+ interacting conditions → Decision Table; 3+ combinable factors → Pairwise.
  • A refined AC (Given/When/Then) is the business assertion; the outline (Should ) is its exploration. Keep them distinct.

Shift-left operational rules:

  • Stories ONLY (no bugs — nothing to refine upstream). Entry status Backlog / Shift-Left QA / Estimation / Ready For Dev.
  • Output = refined ACs + gap/ambiguity questions + ATP DRAFT (outline NAMES + coverage estimate, no test code, no execution).
  • The heart of the skill (Phase 2) = edge cases not in story + ambiguities + gaps — feed them to PO/Dev as questions AND as derived outlines.
  • On taking a Story into refinement (first QA pickup), set qa_assignee to self — read-before-write, never overwrite an existing owner (agentic-qa-core/references/defect-management-doctrine.md Part 2). This skill files NO Bug/Defect/Improvement; only the QA-Assignee hook applies.
  • On completion: add label shift-left-reviewed; transition Backlog → Shift-Left QA → Estimation.

Read full SKILL.md when: running the batch grooming pipeline, writing the per-Story shift-left-refinement.md, or handling the PO/Dev handoff.


Subagent Dispatch Strategy

> Orchestration & Session contracts: this skill follows ./orchestration-doctrine.md (mandatory subagent dispatch — main thread is command center) AND ./session-management.md (Phase 0 resume check, plan-first persistence at .session///, archive on completion). Phase 0 (resume check) and Phase 1 (plan write) are NOT optional. The orchestrator also applies the per-stage Definition-of-Done gates in ./stage-gates.md: verify a stage's DoD (planning stages include the Test-Design Checklist) BEFORE recording its progress checkpoint and advancing.

This skill is per-batch scope: ` = - (e.g. 2026-05-20-payments-area). Session state lives at .session/shift-left-testing/-/{plan.md, progress.md} per agentic-qa-core/references/session-management.md §3 + §9. The per-Story shift-left-refinement.md` files stay under each Story's PBI folder (domain artifact, not session state).

This skill is compliant with the doctrine in CLAUDE.md §"Orchestration Mode (Subagent Strategy)" and the session contract in .claude/skills/agentic-qa-core/references/session-management.md. Every dispatch follows the 7-component briefing format defined in .claude/skills/agentic-qa-core/references/briefing-template.md, and the pattern selected per phase matches the decision guide in .claude/skills/agentic-qa-core/references/dispatch-patterns.md.

| Phase | Pattern | Subagent role | |-------|---------|---------------| | Phase 1 — Selection | Single | Backlog Selection subagent: pull candidate Stories via [ISSUE_TRACKER_TOOL], apply veto + risk-score triage, return ranked candidate table | | Phase 2 — Refinement (per Story) | Sequential — looped per Story | Refinement subagent: load acceptance-test-planning.md Phases 1-3 + outline-only Phase 4, write shift-left-refinement.md, append PO/Dev questions, return summary block. ONE subagent per Story. NEVER parallel across Stories (each subagent writes a different PBI file but the orchestrator must present each summary to the user sequentially before the next dispatch) | | Phase 3 — Handoff (per Story) | Sequential — looped per Story | Handoff subagent: update Jira description + custom field (or Test Plan in Modality jira-xray) + comment mirror + labels + transition backlog -> shift_left_qa -> estimation. Returns transition log + trace verification | | Phase 3 — Batch report | Single | Batch Report subagent: aggregate per-Story summaries into .session/shift-left-testing//batch-report.md + post to parent epic if Stories share one |

> Sequential by design. Phase 2 refinement looks parallelizable (each Story is independent in Jira), but the orchestrator must present each Story's refinement summary to the user before moving on. This keeps the user in the loop, lets them veto a Story mid-batch, and matches the team-grooming cadence the skill is designed for. Parallelism would burn the user's attention budget.

> On any subagent failure: STOP, report the partial state (which Stories refined, which Jira mutations landed), present retry / skip-story / abort options. Do NOT auto-fix nor auto-rollback. Jira mutations are recorded in the batch report so partial sessions are resumable. See .claude/skills/agentic-qa-core/references/orchestration-doctrine.md.


Workflow — one pipeline, three phases

Phase 0 — Session resume check + Session Init (always first)
    -> Check .session/shift-left-testing//progress.md → offer resume / restart / abort
    -> Resolve TMS modality (A: Xray / B: Jira-native)
    -> Load /acli (+ /xray-cli if Modality jira-xray and user opts into Test Plan link)
    -> Verify project-wide context files
    -> Resolve candidate list (explicit IDs OR backlog JQL)
    -> Create session folder .session/shift-left-testing/-/
       (writes plan.md after candidate list confirmed; progress.md appended per phase)

Phase 1 — Selection
    -> Detailed-read each candidate via `bun run jira:sync-issues get  --include-comments`
       (batch: `jql ""`), then read the synced .md
    -> Reject non-Story types (Bug / Spike / Sub-task / Tech-debt)
    -> Apply veto + risk-score triage per candidate
    -> Present ranked candidate table -> WAIT for user OK

Phase 2 — Refinement (loop per accepted Story)
    -> Dispatch Refinement subagent: produce shift-left-refinement.md
       (Critical Analysis + Story Quality Analysis + Refined ACs + ATP DRAFT outlines)
    -> Reuses sprint-testing/references/acceptance-test-planning.md §Phases 1-3
       with shift-left-mode delta (no test-data generation, no parametrization tables, outline names only)
    -> Present per-Story summary -> WAIT for user OK before next Story

Phase 3 — Handoff
    -> Per Story sequentially:
         - Update Jira description with "QA Refinements (Shift-Left Analysis)"
         - Populate ATP DRAFT (Modality jira-native: custom field + comment mirror;
                              Modality jira-xray: Test Plan issue + link, optional)
         - Labels: shift-left-reviewed + shift-left-{YYYY-MM-DD}
         - Transition: backlog -> shift_left_qa (analyze) -> estimation (estimate)
         - Verify trace
    -> Batch report posted to .session/shift-left-testing//batch-report.md
       + posted as comment on parent epic if Stories share one
    -> Archive: orchestrator moves .session/shift-left-testing// to
       .session/.archive/-shift-left-testing-/
       per agentic-qa-core/references/session-management.md §8

---> Cross-skill handoff (NOT this skill):
       When each Story later reaches Ready For QA:
         /sprint-testing reads label `shift-left-reviewed` and short-circuits
         Phases 1-3 to validation-only (sprint-testing/references/acceptance-test-planning.md §Phase 0).

Readiness Preflight Gate (MANDATORY — runs before Phase 0)

> Full doctrine: agentic-qa-core/references/preflight-gate.md. Runs FIRST, before the resume check. Two laws: (1) args-as-answers — treat anything the user already stated (the Story IDs, the modality, "groom the backlog") as provided args; ask only real gaps. (2) probe, don't assume. Surface gaps + REDs as ONE AskUserQuestion checklist; self-fix with approval + explanation; STOP on any blocking RED. This skill does NO live execution (no env/DB/API/browser), so its gate is light — it is mostly a tooling + context readiness check. Generic baseline (env resolution, test-user creds, secret/restart handling, the two laws, output contract) is inherited from the reference §3.1 — not repeated here. Below is only this skill's specific capability delta.

| Capability | Need | Why here | |---|---|---| | Issue-tracker ([ISSUE_TRACKER_TOOL]) | REQUIRED | All refinement output lands on Jira (description, ATP DRAFT field, comment, labels, transitions). Load /acli; validate setup via bun run jira:check. | | TMS modality resolved | REQUIRED | Decides whether the ATP DRAFT is a Story field/comment (jira-native) or a Test Plan link (jira-xray). 4-step probe; ask only if all auto-checks fail. | | /xray-cli + XRAY_* creds | OPTIONAL | Only when the user opts into a Test Plan link per Story (default is NO Test Plan in shift-left). | | Business context files | REQUIRED | .context/business/* + .context/master-test-plan.md — refinement without them produces low-value questions. Missing → hand off to /project-discovery. | | Candidate Story list | REQUIRED | Explicit IDs (args) or a backlog JQL. Confirm size with the user before Phase 1. |

Env reachability, test-user creds, DBHub, OpenAPI/API_TOKEN, Playwright and resend are N/A here — shift-left never executes against a running system. After the gate clears (all REQUIRED GREEN), continue to Phase 0 below.


Phase 0 — Session resume check + Session Init

0.0 Session resume check (per agentic-qa-core/references/session-management.md §4). Compute ` = - from the invocation context. Check .session/shift-left-testing//progress.md. If it exists, read plan.md + the tail of progress.md, surface the last completed phase + next planned phase + any blocking notes, and offer **resume / restart / abort**. On restart, archive the current directory to .session/.archive/-shift-left-testing--aborted/ before proceeding. On abort`, stop here.

0.1 Resolve TMS modality. Same 4-step probe as sprint-testing Session Start (test-documentation/SKILL.md §Phase 0). Persist the result in .session/shift-left-testing//plan.md (under the ## Inputs H2 — the plan.md is the canonical record per session-management §6).

0.2 Load required tool skills — based on modality:

  • Always load /acli (custom-field update, comment, transition, label, link — all writes; plus the trivial key+summary+status candidate search). Story DETAIL reads (description, ACs, scope, comments, parent epic) go through bun run jira:sync-issues get/jql — NOT acli view.
  • Modality jira-xray AND user opts into Test Plan link draft for each Story -> also load /xray-cli. The default in shift-left is NO Test Plan creation (PO has not estimated yet, scope may shrink) — the ATP DRAFT lives on the Story description + comment + custom field. Ask the user before creating Test Plan issues.
  • Modality jira-native -> /acli alone covers [ISSUE_TRACKER_TOOL] and [TMS_TOOL].

This step is **mandatory before any pseudocode block belo

Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

Install and usage instructions live in the source repository linked above.

Reviews

No reviews yet — be the first.

Versions

  • v0.1.0 Imported from the upstream source.