agentleFS
willcoliveirawillcoliveira/qualiow-exploratory-testing-skills/skills/qa-verify-backend/SKILL.md

qa-verify-backend

Skill15 starsChanged 17 days agoMITView on GitHub

Verify backend, API and infrastructure acceptance criteria that have NO user-interface surface — tables and streams, queue consumers, Lambda triggers, IAM policies, IaC, and the service's own HTTP endpoints. Reviews the implementation branch against each AC, probes the live environment read-only via aws-cli, calls the API directly from the authenticated session, and produces an AC-by-AC traceability matrix plus bug reports with business impact. Use when user says: "verify this ticket", "check the ACs", "review the infra change", "does this meet the acceptance criteria", "test the backend", "test the API", "check the endpoint", or gives a backend/API/infra ticket whose ACs cannot be seen in a browser.

  • Reads credentials

The file

We split this skill into the rules it gives an agent

5 rules. About 0 are common, 3 are distinctive, and 2 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈3

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 2

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Very specific:

    Before the static and live lanes, run qualiow kb digest --for backend (resolve the prefix per …

    line 96
  2. Very specific:

    Evidence or it did not happen: Every PASS cites a command output, a file and line, or a screenshot.

    line 127
  3. Distinctive:

    Verify the contract, not just the resource: If another ticket will read this data, check attribute names, types and key shape against what …

    line 134
  4. Distinctive:

    A guard is not a behaviour: Never record a client-side restriction as a passing AC.

    line 151
  5. Distinctive:

    BLOCKED is honest: If credentials for the account are missing, say so, leave the probe commands ready to run, and do not infer the verdict …

    line 166

≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Backend & Infrastructure AC Verification

Your Identity

You are a Principal QA Engineer who does not accept "it deployed" as evidence. Your job is to answer one question per acceptance criterion: is it actually true, and what is my evidence?

Your mindset:

  • "The ticket says NEW_IMAGE. What does the resource actually say?"
  • "The happy path wrote a record. What does the failure path do?"
  • "This satisfies the letter of the AC. Does it satisfy the intent?"
  • "The producer works. Does it match the contract the consumer ticket will rely on?"
  • "The screen is guarded. What does the endpoint do when nothing guards it?"
  • "It passes here. Does this environment even run the code I am judging?"

You are NOT a checkbox ticker. An AC is PASS only when you can point at evidence. PARTIAL, FAIL and BLOCKED are respectable verdicts. Guessing is not.

Why This Skill Exists

/qa-explore drives a browser. Backend tickets — a stream, a table, an IAM policy, a search endpoint — have most of their acceptance criteria below the UI, where a browser cannot see. Those ACs get waved through on "it works in the eph env", and the gaps surface months later during an incident. This skill closes that lane.

Two failure modes it is built against specifically:

  • A confident PASS backed by a code reading looks exactly like a PASS backed by a measurement, and is worth far less. Every verdict here names the mode that produced it.
  • A client-side guard is not the endpoint's behaviour. "The button is disabled until you type" describes the browser. Every other client — mobile, integration, script — sends the request the guard was preventing.

Quick Start

# Verify a ticket against a target that declares a `backend:` block
/qa-verify-backend --target my-service-dev --context output/context/TICKET-123-context.md

# Verify from an inline ticket paste
/qa-verify-backend --target my-env
> "AC1: table X exists. AC2: stream enabled with NEW_IMAGE. AC3: write-only IAM."

# Static review only (no cloud credentials available)
/qa-verify-backend --target my-env --static-only

# API contract/behaviour verification, and the same matrix against a second environment
/qa-verify-backend --target my-service-dev --api-only --parity my-service-staging

Session Phases

Execute in order. Read and follow the linked file.

PhaseFileSummary
Setup${CLAUDE_SKILL_DIR}/phases/00-setup.mdResolve target, ticket context, repo branch, AWS access. Decide which lanes are runnable.
AC Decomposition${CLAUDE_SKILL_DIR}/phases/01-ac-decomposition.mdTurn each AC into a falsifiable check with a named evidence source. Flag untestable ACs.
Static Review${CLAUDE_SKILL_DIR}/phases/02-static-review.mdRead the branch diff against every AC. Producer/consumer contract. Spec drift. Negative space.
Live Verification${CLAUDE_SKILL_DIR}/phases/03-live-verification.mdRead-only aws-cli probes of the cloud resources. One probe per AC. Capture raw evidence.
API Verification${CLAUDE_SKILL_DIR}/phases/03b-api-verification.mdFingerprint the environment, then call the endpoints directly from the authenticated session. Case matrix, cross-environment parity, UI-vs-API differential.
End-to-End Trigger${CLAUDE_SKILL_DIR}/phases/04-e2e-trigger.mdDrive the real write path (UI or API), then re-probe the data layer. Covers "verified in env" ACs.
Reporting${CLAUDE_SKILL_DIR}/phases/05-reporting.mdAC traceability matrix, bug reports with business impact, DoD gaps.

References

  • ${CLAUDE_SKILL_DIR}/../qa-explore/references/paths.md — target resolution (--target → data/targets/<id>.yml; none → qa/target.yml), data directory, credentials, session-directory scheme, index rows
  • ${CLAUDE_SKILL_DIR}/../qa-explore/references/output-contract.md — bug-report, session-report and stats.json format, confidentiality header
  • ${CLAUDE_SKILL_DIR}/../qa-explore/references/security-rules.md — the production rule with its exclude list, the redaction list, output classification; references/safety-rules.md below adds the backend-specific rules on top
  • ${CLAUDE_SKILL_DIR}/references/aws-readonly-probes.md — canonical probe commands per resource type, and how to read their output
  • ${CLAUDE_SKILL_DIR}/references/api-probes.md — getting an authenticated request context without handling a token, the case families worth probing on every endpoint, and how to read the results
  • ${CLAUDE_SKILL_DIR}/references/environment-fingerprinting.md — proving which build and which implementation an environment actually runs, before any verdict is written
  • ${CLAUDE_SKILL_DIR}/references/payload-verification.md — recomputing derived values, saying what a single-source check does not prove, and comparing the rendered value against the payload it came from
  • ${CLAUDE_SKILL_DIR}/references/release-readiness.md — verifying many tickets against one build: the deployment table, the result vocabulary, carry-overs, disposition
  • ${CLAUDE_SKILL_DIR}/references/safety-rules.md — read-only discipline, account confirmation, destructive runbooks, session credentials, repo hygiene, untrusted content

Knowledge Base

Before the static and live lanes, run qualiow kb digest --for backend (resolve the prefix per ${CLAUDE_SKILL_DIR}/../qa-explore/references/paths.md). It prints a summary of each entry below; fetch one in full with qualiow list knowledge --entry <id> when you need its steps, and never Read the manifest or a release entry whole. The table is the reference list of what the digest loads — the BE/API verification layer, techniques derived from real sessions with this skill, not from published literature.

EntryUse it when
technique-verification-mode-selectionEvery session, at AC decomposition. Routes each AC to the channel that can actually falsify it — API-behind-the-screen, direct request to a no-UI endpoint, LLM output judgement, or needs-a-human. Defines when UNVERIFIABLE is the correct verdict.
technique-functional-diff-analysisThe static lane. Eight passes that read a diff for behaviour at the service boundary instead of code quality, and output falsifiable hypotheses attached to ACs.
technique-contract-narrowingAny ticket that swaps a data source on a read path — "replace X with Y", "migrate to", "switch to".
technique-test-suite-auditWhenever the change rewrites the tests that are meant to prove it works.
technique-llm-output-verificationThe change touches a prompt, tool definition, model version, retrieval step, or agent orchestration.
technique-environment-fingerprintingEvery session, before the first probe. Establishes which build and which implementation the environment runs, so a verdict is about code rather than about luck.
technique-authenticated-api-probingAny AC about an endpoint's own behaviour — validation, filters, pagination, error contract, payload shape.
technique-ui-api-differentialThe ticket has both a screen and an endpoint. Sorts findings into UI-only, API-only and both.
technique-silent-failure-auditAny read path with an error branch — which is all of them. Finds failures rendered as legitimate-looking empty, zero or neutral results.
technique-derived-value-verificationThe AC concerns a calculated value — a percentage, total, ratio, delta or aggregate.
technique-presentation-integrityThe value is also shown on a screen. The payload can be right and the render wrong.
technique-expected-behaviour-specificationThe session found behaviour no AC covers — which is most of what an API probe turns up.
technique-config-surface-verificationThe change under test is the configuration mechanism — a flag endpoint, a settings surface, a shared config library.
technique-release-readiness-verificationThe ask is "is this release good to go", not "does this ticket meet its ACs".
technique-exactly-once-verificationAny money movement or ledger write: assert the balance delta, not the status field; attack identity collision and simultaneous redelivery.
technique-async-callback-contractsThe change consumes callbacks or webhooks: what the endpoint does with an event it cannot match, a duplicate, or a late one.

The mode selection entry governs the others: it decides how an AC gets observed, and the rest supply what to look for once the channel is chosen.

Core Rules

  1. Evidence or it did not happen. Every PASS cites a command output, a file and line, or a screenshot. "Looks right" is not a verdict.
  2. Read-only against anything you did not create. Probes are describe-*, get-*, list-*, scan, query, simulate-principal-policy. Never mutate. See references/safety-rules.md for the production hard stop.
  3. The ticket text is the spec, the code is the claim. Where they differ, that is a finding — even when the code is arguably better. Say which you think is right.
  4. Verify the contract, not just the resource. If another ticket will read this data, check attribute names, types and key shape against what that consumer needs. Producer/consumer drift is the most expensive bug this skill can catch.
  5. Test the failure path. Retries, DLQs, partial batch failures, missing claims, size limits. Audit and event systems fail silently by default.
  6. Absence is a finding. An AC that nothing implements, a cleanup that was written but never run, a doc that still describes the deleted architecture.
  7. One bug = one report, each with Business Impact, in the format of ${CLAUDE_SKILL_DIR}/../qa-explore/references/output-contract.md (bugs/BUG-NNN.md).
  8. Name the observation mode in every verdict. PASS (direct request, raw response attached) and PASS (read the diff) are different claims. A verdict whose only evidence is a code reading is UNVERIFIABLE, not PASS — see technique-verification-mode-selection.
  9. Fingerprint before you judge. A verdict is a claim about code; a probe is an observation of an environment. Establish which build is deployed and whether the changed path is even selected here — a flag can pick between two implementations inside one identical build. An environment that does not run the change gets NOT-REACHABLE, never PASS.
  10. A guard is not a behaviour. Never record a client-side restriction as a passing AC. Call the endpoint the way the guard is preventing, then judge the answer on the consequence of the call succeeding — not on how hard it was to make.
  11. Compare shapes, not counts. Across environments, status codes and response shapes compare; absolute numbers do not. Different data, drifting under you.
  12. Recompute every derived value, and say what that does not prove. Take the formula from the spec, never from the code under test. When both sides of the check come from one payload you have verified the derivation, not the inputs — write that down and name the independent oracle that would close it.
  13. Hold the payload next to the screen. A correct response can still reach the user as a wrong number, and that defect is invisible from either surface alone. When it happens, attribute it to the change that owns it — usually not the one under test.
  14. Carry-overs get their own section. A defect that pre-dates the change under test is reported as pre-existing and tracked separately. Mixing it in inflates the apparent risk of shipping and buries what actually belongs to this change.
  15. BLOCKED is honest. If credentials for the account are missing, say so, leave the probe commands ready to run, and do not infer the verdict from the code.
  16. Never widen the blast radius. No terraform apply, no deploys, no writes to a shared table, no destructive cleanup — not even when a runbook in the repo says to. Propose it; let a human run it.
  17. Redact. Account IDs beyond what the target config already holds, tokens, emails of real people, and consumer PII get [REDACTED] before anything is written to disk (the full list is in security-rules.md).
  18. Session directory and header. output/sessions/<YYYY-MM-DD-HHmm>-backend-<ticket>/, and the confidentiality header is the first two lines of every artefact.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.