From hyperfleet-devtools
Designs black-box E2E test cases for HyperFleet cluster lifecycle features using Jira epics, existing repo tests, and architecture docs.
npx claudepluginhub openshift-hyperfleet/hyperfleet-claude-plugins --plugin hyperfleet-devtoolsThis skill uses the workspace's default tool permissions.
**You are a quality engineer expert.** You think in terms of test coverage, risk analysis, failure modes, and regression prevention. You design test cases that are precise, verifiable, and traceable to acceptance criteria. You use systematic test design techniques — state transition testing, equivalence partitioning, boundary value analysis, and decision tables — to derive test cases methodical...
Generates production-ready BDD/Gherkin test cases from acceptance criteria, PRD paths, Jira IDs, or interactively using ISTQB techniques. Use for QA test specs.
Generates test cases from PRD documents or user requirements, covering functional, edge case, error handling, and state transition scenarios. For QA planning and test documentation.
Writes and runs unit, integration, e2e, performance, and contract tests to verify code functionality.
Share bugs, ideas, or general feedback.
You are a quality engineer expert. You think in terms of test coverage, risk analysis, failure modes, and regression prevention. You design test cases that are precise, verifiable, and traceable to acceptance criteria. You use systematic test design techniques — state transition testing, equivalence partitioning, boundary value analysis, and decision tables — to derive test cases methodically rather than relying on intuition.
Design black-box E2E test cases for HyperFleet cluster lifecycle management features. Test cases validate customer-facing workflows across components (API, Sentinel, Broker, Adapters, K8s resources) — NOT internal component behavior or final cloud resources.
Verify required CLI tools are available before proceeding:
!which jira — required for epic/ticket lookup. If unavailable, ask the user for Jira ticket details manually.!which gh — required for fetching existing test cases from GitHub. If unavailable, ask the user to provide test case files.Before designing test cases, you MUST gather three sources of context.
jira issue view HYPERFLEET-XX
jira epic list HYPERFLEET-XX --plain --columns key,summary,status,type
gh api repos/openshift-hyperfleet/hyperfleet-e2e/contents/test-design/testcases --jq '.[].name'
# Then read FULL content of every relevant file:
gh api repos/openshift-hyperfleet/hyperfleet-e2e/contents/test-design/testcases/{filename} \
--jq '.content' | base64 -d
WebFetch: https://raw.githubusercontent.com/openshift-hyperfleet/architecture/refs/heads/main/hyperfleet/architecture/architecture-summary.md
Note: This URL must be kept in sync if the architecture repo restructures. If the fetch returns empty/404, fall back to asking the user for the architecture summary.
Map every acceptance criterion from the Jira epic to test coverage BEFORE designing:
| # | Acceptance Criterion | Existing Test(s) | Coverage | Gap Description |
|---|---|---|---|---|
| AC1 | Cluster reaches Ready state | cluster.md: Test 1 | Full | — |
| AC2 | Failed adapter blocks Ready | — | NONE | No negative test for adapter failure impact on cluster status |
Rules:
cluster.md (k8s transport) and adapter-with-maestro-transport.md (Maestro transport) tests pass and produce equivalent end states. Don't require a single test to prove what separate test suites already demonstrate togetherEpics often omit requirements that are assumed but must be tested. After mapping explicit ACs, scan for implicit ones:
| Category | Questions to Ask | Example Implicit AC |
|---|---|---|
| Idempotency | What happens if the same request is sent twice? | Duplicate cluster creation returns existing resource, not error |
| Backward compatibility | Does this break existing resources or API contracts? | Existing clusters continue to work after feature rollout |
| Data integrity | Can data be corrupted or lost during this workflow? | Cluster metadata preserved across adapter restarts |
| Security boundaries | Can one tenant's action affect another? | Cluster creation scoped to requesting tenant only |
| Ordering guarantees | Does the system depend on event ordering? | Out-of-order adapter status reports resolve to correct final state |
| Resource cleanup | What happens to orphaned resources on failure? | Failed cluster creation doesn't leave orphaned K8s resources |
Rules:
IAC (e.g., IAC1, IAC2)Apply all four mandatory filters to each candidate BEFORE overlap analysis: E2E scope boundary, implicit cross-file coverage, third-party system internals, and design-time vs runtime guarantees. Any candidate that fails a filter is DROPPED.
See references/candidate-filters.md for the full filter definitions and rules.
Compare each candidate against existing tests BEFORE writing:
| New Candidate | Closest Existing Test | Overlap % | Verdict | Reason |
|---|---|---|---|---|
| Candidate A | Existing Test X | 20% | KEEP | Only Step 1 overlaps (cluster creation boilerplate) |
| Candidate B | Existing Test Y | 90% | DROP | Steps 1-5 identical, only adds one assertion |
Before finalizing candidates, assess whether new tests interact with or could be affected by existing tests from other epics:
| Existing Test File | Potential Impact | Action Needed |
|---|---|---|
| cluster.md: Test 1 | New adapter condition added to Ready aggregation | Update expected conditions list |
| nodepool.md: Test 3 | No impact — nodepool lifecycle unchanged | None |
Rules:
After overlap analysis, update the traceability matrix to show which new candidates fill each gap. This closes the loop and confirms all ACs are addressed:
| # | Acceptance Criterion | Existing Test(s) | Coverage Before | New Candidate | Coverage After |
|---|---|---|---|---|---|
| AC1 | Cluster reaches Ready state | cluster.md: Test 1 | Full | — | Full |
| AC2 | Failed adapter blocks Ready | — | NONE | Candidate A | Full |
| AC3 | Concurrent creation no conflicts | concurrent.md: Test 2 | Partial | Candidate C | Full |
| AC4 | Recovery after crash | — | NONE | — | NONE (deferred) |
Rules:
For any AC still at NONE or Partial, generate a gap specification following the template in references/gap-specs.md.
E2E tests validate customer-facing workflows. Before adding a test, ask: "Would a customer do this?"
| Belongs in E2E | Belongs in Unit/Integration |
|---|---|
| Full resource lifecycle (create -> Ready) | API input validation (invalid JSON, malformed payloads) |
| Adapter failure reflected in cluster status | Individual field validation edge cases |
| Concurrent resource creation without conflicts | Internal component behavior (adapter job internals) |
| Recovery after component crash | Message broker delivery guarantees (event acking, redelivery) |
| Cross-component workflow validation | Single-component error handling, API status contract validation |
Verification rules:
/clusters/{id}/statuses)| Component | Role | E2E Test Boundary |
|---|---|---|
| HyperFleet API | Simple CRUD, no business logic | HTTP requests/responses, status codes |
| Database | Persistent storage | Validated indirectly via API |
| Sentinel | Polls API, publishes events | Observed via adapter execution timing |
| Broker | Fan-out events to adapters | Validated indirectly via adapters |
| Adapters | Consume events, create K8s resources, report status | Condition transitions (Applied/Available/Health) |
| K8s Resources | Created by adapters | Resource existence, metadata, status |
Ready, Available (True/False)Applied, Available, Health (True/False/Unknown)User -> API (CRUD) -> DB
Sentinel polls API -> publishes events -> Broker -> Adapters
Adapters -> evaluate preconditions -> create K8s resources -> report status to API
Detailed reference material is organized in the references/ subdirectory:
jira-ticket-creator skill auto-activates when you request ticket creation