devendra-skill-package 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/skills/boiler-project-generator/SKILL.md +103 -0
- package/.github/skills/boiler-project-generator/assets/templates/android/README.md +3 -0
- package/.github/skills/boiler-project-generator/assets/templates/angular/README.md +3 -0
- package/.github/skills/boiler-project-generator/assets/templates/flutter/README.md +3 -0
- package/.github/skills/boiler-project-generator/assets/templates/ios/README.md +3 -0
- package/.github/skills/boiler-project-generator/assets/templates/react/README.md +3 -0
- package/.github/skills/boiler-project-generator/assets/templates/react-native/README.md +3 -0
- package/.github/skills/boiler-project-generator/assets/templates/react-native/api-setup.ts +76 -0
- package/.github/skills/boiler-project-generator/assets/templates/react-native/component-primary-button.tsx +29 -0
- package/.github/skills/boiler-project-generator/assets/templates/react-native/env-config.env +4 -0
- package/.github/skills/boiler-project-generator/assets/templates/react-native/feature-auth-screen.tsx +45 -0
- package/.github/skills/boiler-project-generator/assets/templates/react-native/feature-dashboard-screen.tsx +45 -0
- package/.github/skills/boiler-project-generator/assets/templates/react-native/feature-profile-screen.tsx +45 -0
- package/.github/skills/boiler-project-generator/assets/templates/react-native/hook-use-app-boot.ts +11 -0
- package/.github/skills/boiler-project-generator/assets/templates/react-native/navigation-setup.tsx +25 -0
- package/.github/skills/boiler-project-generator/assets/templates/react-native/project-structure.md +24 -0
- package/.github/skills/boiler-project-generator/assets/templates/react-native/redux-hooks.ts +5 -0
- package/.github/skills/boiler-project-generator/assets/templates/react-native/redux-session-slice.ts +29 -0
- package/.github/skills/boiler-project-generator/assets/templates/react-native/redux-store.ts +15 -0
- package/.github/skills/boiler-project-generator/assets/templates/react-native/theme-index.ts +23 -0
- package/.github/skills/boiler-project-generator/assets/templates/react-native/utils-helpers.ts +7 -0
- package/.github/skills/boiler-project-generator/metadata.yaml +29 -0
- package/.github/skills/boiler-project-generator/references/android.md +19 -0
- package/.github/skills/boiler-project-generator/references/angular.md +14 -0
- package/.github/skills/boiler-project-generator/references/flutter.md +17 -0
- package/.github/skills/boiler-project-generator/references/ios.md +17 -0
- package/.github/skills/boiler-project-generator/references/react-native.md +103 -0
- package/.github/skills/boiler-project-generator/references/react.md +17 -0
- package/.github/skills/boiler-project-generator/scripts/angular.js +43 -0
- package/.github/skills/boiler-project-generator/scripts/generate-project.mjs +107 -0
- package/.github/skills/boiler-project-generator/scripts/init.js +105 -0
- package/.github/skills/boiler-project-generator/scripts/react-native.js +1041 -0
- package/.github/skills/boiler-project-generator/scripts/react.js +32 -0
- package/.github/skills/clean-architecture-generator/SKILL.md +235 -0
- package/.github/skills/clean-architecture-generator/references/architecture-core.md +126 -0
- package/.github/skills/clean-architecture-generator/references/platform-angular.md +374 -0
- package/.github/skills/clean-architecture-generator/references/platform-flutter.md +366 -0
- package/.github/skills/clean-architecture-generator/references/platform-react-native.md +590 -0
- package/.github/skills/clean-architecture-generator/references/platform-react.md +261 -0
- package/.github/skills/code-test-coverage-analyzer/SKILL.md +1358 -0
- package/.github/skills/code-test-coverage-analyzer/assets/config-questionnaire.md +118 -0
- package/.github/skills/code-test-coverage-analyzer/assets/conflict-resolution-protocol.md +99 -0
- package/.github/skills/code-test-coverage-analyzer/assets/coverage-calculation-rules.md +294 -0
- package/.github/skills/code-test-coverage-analyzer/assets/multi-strategy-search.md +145 -0
- package/.github/skills/code-test-coverage-analyzer/assets/output-file-contracts.md +651 -0
- package/.github/skills/code-test-coverage-analyzer/assets/status-definitions.md +273 -0
- package/.github/skills/code-test-coverage-analyzer/examples/example-invocation.md +208 -0
- package/.github/skills/code-test-coverage-analyzer/references/android-patterns.md +229 -0
- package/.github/skills/code-test-coverage-analyzer/references/angular-patterns.md +177 -0
- package/.github/skills/code-test-coverage-analyzer/references/backend-patterns.md +383 -0
- package/.github/skills/code-test-coverage-analyzer/references/flutter-patterns.md +254 -0
- package/.github/skills/code-test-coverage-analyzer/references/ios-patterns.md +228 -0
- package/.github/skills/code-test-coverage-analyzer/references/react-native-patterns.md +431 -0
- package/.github/skills/code-test-coverage-analyzer/references/react-patterns.md +206 -0
- package/.github/skills/code-test-coverage-analyzer/scripts/detect-platform.ps1 +261 -0
- package/.github/skills/code-test-coverage-analyzer/scripts/scan-repository.ps1 +242 -0
- package/.github/skills/code-test-coverage-analyzer/templates/brd-compliance-row.md +107 -0
- package/.github/skills/code-test-coverage-analyzer/templates/test-case-row.md +130 -0
- package/.github/skills/code-test-coverage-analyzer/templates/user-story-compliance-row.md +170 -0
- package/.github/skills/custom-font-integrator/SKILL.md +373 -0
- package/.github/skills/custom-font-integrator/assets/FontTestScreen.js +150 -0
- package/.github/skills/custom-font-integrator/references/example-info-plist.xml +21 -0
- package/.github/skills/custom-font-integrator/scripts/setup-fonts.sh +99 -0
- package/.github/skills/encryption-decryption-utility/Instructions.md +282 -0
- package/.github/skills/encryption-decryption-utility/README.md +222 -0
- package/.github/skills/encryption-decryption-utility/SKILL.md +645 -0
- package/.github/skills/encryption-decryption-utility/assets/encryption-config-template.json +13 -0
- package/.github/skills/encryption-decryption-utility/assets/platform-matrix.json +180 -0
- package/.github/skills/encryption-decryption-utility/metadata.yaml +51 -0
- package/.github/skills/encryption-decryption-utility/references/android-crypto.md +157 -0
- package/.github/skills/encryption-decryption-utility/references/angular-crypto.md +130 -0
- package/.github/skills/encryption-decryption-utility/references/approach-1-webcrypto.md +95 -0
- package/.github/skills/encryption-decryption-utility/references/approach-2-rsa-aes-cbc.md +111 -0
- package/.github/skills/encryption-decryption-utility/references/approach-3-aes-sharedkey.md +114 -0
- package/.github/skills/encryption-decryption-utility/references/architecture.md +233 -0
- package/.github/skills/encryption-decryption-utility/references/backend-alignment.md +506 -0
- package/.github/skills/encryption-decryption-utility/references/dependency-guidance.md +234 -0
- package/.github/skills/encryption-decryption-utility/references/ec-implementation.md +832 -0
- package/.github/skills/encryption-decryption-utility/references/error-handling-playbook.md +234 -0
- package/.github/skills/encryption-decryption-utility/references/flutter-crypto.md +105 -0
- package/.github/skills/encryption-decryption-utility/references/ios-crypto.md +338 -0
- package/.github/skills/encryption-decryption-utility/references/native-rsa-implementation.md +373 -0
- package/.github/skills/encryption-decryption-utility/references/node-crypto.md +86 -0
- package/.github/skills/encryption-decryption-utility/references/react-crypto.md +105 -0
- package/.github/skills/encryption-decryption-utility/references/react-native-crypto.md +1001 -0
- package/.github/skills/encryption-decryption-utility/references/react-web-crypto.md +668 -0
- package/.github/skills/encryption-decryption-utility/references/security-checklist.md +176 -0
- package/.github/skills/encryption-decryption-utility/references/web-crypto.md +74 -0
- package/.github/skills/encryption-decryption-utility/scripts/detect.js +128 -0
- package/.github/skills/encryption-decryption-utility/scripts/install.js +1713 -0
- package/.github/skills/encryption-decryption-utility/scripts/setup.js +800 -0
- package/.github/skills/encryption-decryption-utility/template.md +241 -0
- package/.github/skills/encryption-decryption-utility/templates/config-questionnaire.md +467 -0
- package/.github/skills/encryption-decryption-utility/templates/delivery-checklist.md +206 -0
- package/.github/skills/encryption-decryption-utility/templates/implementation-plan.md +304 -0
- package/.github/skills/feature-generator/SKILL.MD +2741 -0
- package/.github/skills/feature-generator/assets/fingerprint-schema.json +385 -0
- package/.github/skills/feature-generator/assets/spec-template.md +172 -0
- package/.github/skills/feature-generator/assets/transform-rules.json +82 -0
- package/.github/skills/feature-generator/references/api-envelope-patterns.md +327 -0
- package/.github/skills/feature-generator/references/screen-logic-patterns.md +399 -0
- package/.github/skills/feature-generator/references/state-library-patterns.md +464 -0
- package/.github/skills/figma-ui-mapper/README.md +34 -0
- package/.github/skills/figma-ui-mapper/SKILL.md +101 -0
- package/.github/skills/figma-ui-mapper/assets/templates/component-map-template.md +30 -0
- package/.github/skills/figma-ui-mapper/assets/templates/generation-report-template.md +49 -0
- package/.github/skills/figma-ui-mapper/metadata.yaml +22 -0
- package/.github/skills/figma-ui-mapper/references/android.md +11 -0
- package/.github/skills/figma-ui-mapper/references/angular.md +18 -0
- package/.github/skills/figma-ui-mapper/references/capacitor.md +18 -0
- package/.github/skills/figma-ui-mapper/references/common.md +23 -0
- package/.github/skills/figma-ui-mapper/references/expo.md +18 -0
- package/.github/skills/figma-ui-mapper/references/flutter.md +18 -0
- package/.github/skills/figma-ui-mapper/references/frameworks/angular/rules.md +23 -0
- package/.github/skills/figma-ui-mapper/references/frameworks/capacitor/rules.md +23 -0
- package/.github/skills/figma-ui-mapper/references/frameworks/expo/rules.md +23 -0
- package/.github/skills/figma-ui-mapper/references/frameworks/flutter/rules.md +23 -0
- package/.github/skills/figma-ui-mapper/references/frameworks/ionic/rules.md +23 -0
- package/.github/skills/figma-ui-mapper/references/frameworks/kotlin-multiplatform/rules.md +23 -0
- package/.github/skills/figma-ui-mapper/references/frameworks/native-android/rules.md +23 -0
- package/.github/skills/figma-ui-mapper/references/frameworks/native-ios/rules.md +23 -0
- package/.github/skills/figma-ui-mapper/references/frameworks/next/rules.md +23 -0
- package/.github/skills/figma-ui-mapper/references/frameworks/nuxt/rules.md +23 -0
- package/.github/skills/figma-ui-mapper/references/frameworks/react/rules.md +19 -0
- package/.github/skills/figma-ui-mapper/references/frameworks/react-native/rules.md +23 -0
- package/.github/skills/figma-ui-mapper/references/frameworks/svelte/rules.md +23 -0
- package/.github/skills/figma-ui-mapper/references/frameworks/vue/rules.md +23 -0
- package/.github/skills/figma-ui-mapper/references/ionic.md +18 -0
- package/.github/skills/figma-ui-mapper/references/ios.md +11 -0
- package/.github/skills/figma-ui-mapper/references/kotlin-multiplatform.md +18 -0
- package/.github/skills/figma-ui-mapper/references/native-android.md +18 -0
- package/.github/skills/figma-ui-mapper/references/native-ios.md +18 -0
- package/.github/skills/figma-ui-mapper/references/next.md +18 -0
- package/.github/skills/figma-ui-mapper/references/nuxt.md +18 -0
- package/.github/skills/figma-ui-mapper/references/react-figma-guideline.md +21 -0
- package/.github/skills/figma-ui-mapper/references/react-native.md +18 -0
- package/.github/skills/figma-ui-mapper/references/react.md +18 -0
- package/.github/skills/figma-ui-mapper/references/script-usage.md +46 -0
- package/.github/skills/figma-ui-mapper/references/svelte.md +18 -0
- package/.github/skills/figma-ui-mapper/references/vue.md +18 -0
- package/.github/skills/figma-ui-mapper/references/workflow.md +74 -0
- package/.github/skills/figma-ui-mapper/scripts/generate-page-through-figma.js +635 -0
- package/.github/skills/figma-ui-mapper/scripts/generate-react-page-through-figma.js +4 -0
- package/.github/skills/frontend-task-breakdown/SKILL.md +734 -0
- package/.github/skills/md-file-converter/SKILL.md +291 -0
- package/.github/skills/md-file-converter/config/formats.json +114 -0
- package/.github/skills/md-file-converter/extractors/extract-docx.sh +120 -0
- package/.github/skills/md-file-converter/extractors/extract-eml.py +108 -0
- package/.github/skills/md-file-converter/extractors/extract-pdf.sh +97 -0
- package/.github/skills/md-file-converter/extractors/extract-pptx.py +143 -0
- package/.github/skills/md-file-converter/extractors/extract-xlsx.py +175 -0
- package/.github/skills/md-file-converter/scripts/check-tools.sh +47 -0
- package/.github/skills/md-file-converter/scripts/extract-archive.sh +83 -0
- package/.github/skills/md-file-converter/scripts/extract-ocr.sh +77 -0
- package/.github/skills/md-file-converter/scripts/get-metadata.sh +57 -0
- package/.github/skills/md-file-converter/templates/output.md +73 -0
- package/.github/skills/md-file-converter/templates/unsupported-object.md +6 -0
- package/.github/skills/mockAPI-contract-generator/SKILL.md +607 -0
- package/.github/skills/test-case-validator/CHANGELOG.md +155 -0
- package/.github/skills/test-case-validator/CONFIGURATION.md +130 -0
- package/.github/skills/test-case-validator/EXAMPLES.md +50 -0
- package/.github/skills/test-case-validator/QUALITY_SCORING.md +98 -0
- package/.github/skills/test-case-validator/README.md +111 -0
- package/.github/skills/test-case-validator/REPORT_TEMPLATE.md +116 -0
- package/.github/skills/test-case-validator/SKILL.md +209 -0
- package/.github/skills/test-case-validator/SYSTEM_PROMPT.md +127 -0
- package/.github/skills/test-case-validator/TRACEABILITY_ENGINE.md +152 -0
- package/.github/skills/test-case-validator/VALIDATION_RULES.md +411 -0
- package/.github/skills/test-case-validator/config/default.config.yaml +62 -0
- package/.github/skills/test-case-validator/docs/ARCHITECTURE.md +66 -0
- package/.github/skills/test-case-validator/docs/EXTENDING.md +85 -0
- package/.github/skills/test-case-validator/docs/FAQ.md +88 -0
- package/.github/skills/test-case-validator/docs/VERSIONING.md +55 -0
- package/.github/skills/test-case-validator/examples/example-1-manual-qa-ecommerce/input-brd.md +43 -0
- package/.github/skills/test-case-validator/examples/example-1-manual-qa-ecommerce/input-test-cases.csv +9 -0
- package/.github/skills/test-case-validator/examples/example-1-manual-qa-ecommerce/input-user-story.md +29 -0
- package/.github/skills/test-case-validator/examples/example-1-manual-qa-ecommerce/output-report.md +303 -0
- package/.github/skills/test-case-validator/examples/example-2-automated-frontend-suite/input-spec.md +43 -0
- package/.github/skills/test-case-validator/examples/example-2-automated-frontend-suite/input-test-files-index.md +56 -0
- package/.github/skills/test-case-validator/examples/example-2-automated-frontend-suite/output-report.md +274 -0
- package/.github/skills/test-case-validator/prompts/00-applicability-resolution.md +61 -0
- package/.github/skills/test-case-validator/prompts/01-extraction-user-story.md +58 -0
- package/.github/skills/test-case-validator/prompts/02-extraction-brd.md +64 -0
- package/.github/skills/test-case-validator/prompts/03-extraction-test-cases.md +92 -0
- package/.github/skills/test-case-validator/prompts/04-traceability-matrix.md +41 -0
- package/.github/skills/test-case-validator/prompts/05-coverage-analysis.md +46 -0
- package/.github/skills/test-case-validator/prompts/06-missing-scenario-detection.md +32 -0
- package/.github/skills/test-case-validator/prompts/07-duplicate-detection.md +36 -0
- package/.github/skills/test-case-validator/prompts/08-risk-analysis.md +39 -0
- package/.github/skills/test-case-validator/prompts/09-gated-wiring-validation.md +53 -0
- package/.github/skills/test-case-validator/prompts/10-observation-report.md +56 -0
- package/.github/skills/test-case-validator/prompts/11-final-report-assembly.md +57 -0
- package/.github/skills/test-case-validator/templates/coverage-table.md +25 -0
- package/.github/skills/test-case-validator/templates/executive-summary.md +38 -0
- package/.github/skills/test-case-validator/templates/final-summary-block.md +87 -0
- package/.github/skills/test-case-validator/templates/observation-entry.md +41 -0
- package/.github/skills/test-case-validator/templates/rtm-row.md +25 -0
- package/.github/skills/validation-engine-builder/README.md +50 -0
- package/.github/skills/validation-engine-builder/SKILL.md +241 -0
- package/.github/skills/validation-engine-builder/references/core.md +158 -0
- package/.github/skills/validation-engine-builder/references/platform-angular.md +166 -0
- package/.github/skills/validation-engine-builder/references/platform-flutter.md +118 -0
- package/.github/skills/validation-engine-builder/references/platform-react-native.md +170 -0
- package/.github/skills/validation-engine-builder/references/platform-react.md +94 -0
- package/.github/skills/validation-engine-builder/scripts/apply-to-project.js +80 -0
- package/.github/skills/validation-engine-builder/scripts/generate-angular.js +271 -0
- package/.github/skills/validation-engine-builder/scripts/generate-flutter.js +298 -0
- package/.github/skills/validation-engine-builder/scripts/generate-react-native.js +217 -0
- package/.github/skills/validation-engine-builder/scripts/generate-react.js +163 -0
- package/.github/skills/validation-engine-builder/scripts/install-deps.js +53 -0
- package/.github/skills/validation-engine-builder/scripts/shared/detect-platform.js +68 -0
- package/.github/skills/validation-engine-builder/scripts/shared/npm-deps.js +103 -0
- package/.github/skills/validation-engine-builder/scripts/shared/rhf-hook.js +43 -0
- package/.github/skills/validation-engine-builder/scripts/shared/ts-messages-regex.js +62 -0
- package/.github/skills/validation-engine-builder/scripts/shared/util.js +44 -0
- package/.github/skills/validation-engine-builder/scripts/shared/yup-schemas.js +80 -0
- package/.github/skills/validation-engine-builder/template.md +73 -0
- package/.github/skills/validation-engine-builder/templates/messages.json +22 -0
- package/.github/skills/validation-engine-builder/templates/regex.json +16 -0
- package/.github/skills/validation-engine-builder/templates/schemas.json +48 -0
- package/bin/index.js +145 -0
- package/package.json +22 -0
- package/readme.md +0 -0
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
# FAQ / Design Rationale
|
|
2
|
+
|
|
3
|
+
## Why does Rule 16 (Gated-Behavior Wiring) exist as its own rule instead of living inside Rule 1?
|
|
4
|
+
|
|
5
|
+
This came directly from running v1 of this skill (a single traceability-
|
|
6
|
+
focused prompt) against a real, well-tested React module. Every one of five
|
|
7
|
+
separate requirements had a passing, mapped test case — Rule 1 would have
|
|
8
|
+
reported 100% traceability for all five. But in every one of those five
|
|
9
|
+
cases, the test covered the *underlying logic* (a pure function, a
|
|
10
|
+
component given the condition as a direct prop, a Redux slice's state
|
|
11
|
+
transition) and nothing covered the *actual wiring* — the screen's
|
|
12
|
+
`useEffect` or click handler that reads the real feature flag or deep-link
|
|
13
|
+
signal and triggers the behavior in production.
|
|
14
|
+
|
|
15
|
+
The distinction matters because these are different failure modes with
|
|
16
|
+
different fixes. A Rule 1 gap means "write a test." A Rule 16 gap means
|
|
17
|
+
"the test that exists gives false confidence — write a *different* test,
|
|
18
|
+
at a different point in the code, or the passing suite is lying to you
|
|
19
|
+
about whether the feature actually works." Folding this into Rule 1 as a
|
|
20
|
+
sub-bullet buried the second, more dangerous failure mode behind a
|
|
21
|
+
technically-true "covered" status. Giving it a separate rule and a separate
|
|
22
|
+
report section (Section 17) makes it impossible to miss.
|
|
23
|
+
|
|
24
|
+
## Why is a "Near Duplicate" not treated as a duplicate for scoring purposes?
|
|
25
|
+
|
|
26
|
+
Because layered testing — a unit test proving a formula is correct, plus a
|
|
27
|
+
component test proving the UI renders that formula's output correctly — is
|
|
28
|
+
not redundant. It's two different failure modes being independently
|
|
29
|
+
guarded: a formula bug and a rendering bug. A validator that penalizes this
|
|
30
|
+
pattern would push teams toward *removing* legitimate coverage to improve
|
|
31
|
+
their score, which is the opposite of what a QA audit should incentivize.
|
|
32
|
+
Rule 8 explicitly separates this case out and the Quality Score's
|
|
33
|
+
Duplicates fraction (`QUALITY_SCORING.md`) only counts Exact Duplicates
|
|
34
|
+
against it.
|
|
35
|
+
|
|
36
|
+
## Why does the skill require a Suggested Test Case on every observation, but forbid writing the test case itself?
|
|
37
|
+
|
|
38
|
+
Two different jobs, two different skills. This skill's job is *diagnosis*:
|
|
39
|
+
find the gap, prove it with evidence, say what's missing precisely enough
|
|
40
|
+
that someone could act on it. Writing the actual test (with real fixtures,
|
|
41
|
+
real assertions, wired into the actual test runner) requires understanding
|
|
42
|
+
the codebase's specific patterns, mocking conventions, and existing test
|
|
43
|
+
utilities — that's authoring, and it's a different scope of work (this
|
|
44
|
+
repository's `tdd-spec-generator` skill is closer to that job). Keeping the
|
|
45
|
+
line here means this skill stays fast and cheap to run repeatedly as an
|
|
46
|
+
audit, rather than becoming a slow, code-writing task every time.
|
|
47
|
+
|
|
48
|
+
## Why is a separate BRD not required?
|
|
49
|
+
|
|
50
|
+
Because plenty of real engineering organizations — including spec-driven
|
|
51
|
+
ones — don't produce one. A single `spec.md` containing user stories,
|
|
52
|
+
functional requirements, and success criteria is a complete, legitimate
|
|
53
|
+
requirements source. Treating its absence as an error (v1's behavior) meant
|
|
54
|
+
the skill was unusable for an entire category of real projects for a
|
|
55
|
+
process reason, not a quality reason. Combined Spec Mode
|
|
56
|
+
(`CONFIGURATION.md`) fixes this without lowering the bar: every check that
|
|
57
|
+
would have applied to a separate BRD still applies to the combined
|
|
58
|
+
document — it's just not being asked for twice.
|
|
59
|
+
|
|
60
|
+
## Why do project profiles exist instead of one universal checklist?
|
|
61
|
+
|
|
62
|
+
Because a universal checklist that includes Database Coverage, Localization,
|
|
63
|
+
and Browser Compatibility for a project that has none of those things
|
|
64
|
+
produces a report whose 0%-across-the-board sections train the reader to
|
|
65
|
+
stop trusting the tool's severity signal — real gaps get lost in noise from
|
|
66
|
+
fake ones. The Applicability Matrix (`CONFIGURATION.md`) is the fix: mark
|
|
67
|
+
what genuinely doesn't apply as `N/A` with a stated reason, so every
|
|
68
|
+
remaining "Missing" in the report is real and worth acting on.
|
|
69
|
+
|
|
70
|
+
## How is Severity assigned consistently across such different kinds of findings?
|
|
71
|
+
|
|
72
|
+
Via the rubric in `prompts/10-observation-report.md` step 3: severity is
|
|
73
|
+
anchored to *risk tier* (itself evidence-based, per Rule 10) plus whether
|
|
74
|
+
the finding is a security/financial/compliance concern, a Wiring Gap on a
|
|
75
|
+
risky gate, or a recurring pattern across multiple requirements. It is
|
|
76
|
+
never assigned by how the finding "feels" while writing the report — if two
|
|
77
|
+
auditors ran this skill against the same inputs, they should assign the
|
|
78
|
+
same severity to the same finding, because the rubric is evidence-based,
|
|
79
|
+
not impression-based.
|
|
80
|
+
|
|
81
|
+
## What if the same skill run needs to validate multiple features at once?
|
|
82
|
+
|
|
83
|
+
Run the pipeline once per feature/module and produce one report per feature
|
|
84
|
+
— don't try to force multiple unrelated feature's requirements into one
|
|
85
|
+
RTM. If there's a genuine cross-feature concern (a shared component tested
|
|
86
|
+
once but consumed by three features, each with their own spec), note the
|
|
87
|
+
shared test case's mapping to all three in each feature's own RTM row,
|
|
88
|
+
rather than merging the features' reports together.
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# Versioning Policy
|
|
2
|
+
|
|
3
|
+
This skill follows semantic versioning. The version lives in two places that
|
|
4
|
+
must always agree: `SKILL.md`'s frontmatter `metadata.version` and
|
|
5
|
+
`config/default.config.yaml`'s `skill.version`.
|
|
6
|
+
|
|
7
|
+
## MAJOR (x.0.0)
|
|
8
|
+
|
|
9
|
+
A change that would produce a structurally different report for the same
|
|
10
|
+
inputs, or that changes a non-negotiable behavior in `SYSTEM_PROMPT.md`.
|
|
11
|
+
Examples: restructuring the report's section order or count, changing what
|
|
12
|
+
"PASS" means, removing or renumbering an existing rule, changing the
|
|
13
|
+
canonical data model in `TRACEABILITY_ENGINE.md` §1 in a way that breaks
|
|
14
|
+
old extraction output.
|
|
15
|
+
|
|
16
|
+
The 1.0.0 → 2.0.0 change (see `CHANGELOG.md`) qualifies: it changed report
|
|
17
|
+
structure (added Section 17), added a new required pipeline step (Rule 16,
|
|
18
|
+
Rule 17), and changed default behavior for missing `BRD_INPUT` from
|
|
19
|
+
"required" to "Combined Spec Mode."
|
|
20
|
+
|
|
21
|
+
## MINOR (x.y.0)
|
|
22
|
+
|
|
23
|
+
A new capability that doesn't change existing behavior for existing inputs.
|
|
24
|
+
Examples: a new project profile, a new supported input format, a new
|
|
25
|
+
optional configuration field with a backward-compatible default, a new
|
|
26
|
+
`examples/` entry.
|
|
27
|
+
|
|
28
|
+
## PATCH (x.y.z)
|
|
29
|
+
|
|
30
|
+
A clarification, a bug fix in a formula (e.g. a coverage-percentage
|
|
31
|
+
denominator was wrong), a wording fix, a corrected example — anything that
|
|
32
|
+
doesn't change the report's shape or the skill's documented behavior, only
|
|
33
|
+
brings the actual behavior in line with what was already documented.
|
|
34
|
+
|
|
35
|
+
## Changing `config/default.config.yaml`'s Defaults
|
|
36
|
+
|
|
37
|
+
Changing a *default* value (e.g. `pass_threshold` from 95 to 90) is a MINOR
|
|
38
|
+
bump if it's additive/backward compatible (existing configs still work,
|
|
39
|
+
they just get a different default when they don't override it) — but
|
|
40
|
+
document it prominently in `CHANGELOG.md` since it silently changes every
|
|
41
|
+
future report's PASS/FAIL line for anyone not pinning their own
|
|
42
|
+
`CONFIG_OVERRIDE_INPUT`.
|
|
43
|
+
|
|
44
|
+
## Deprecating a Rule
|
|
45
|
+
|
|
46
|
+
Per `EXTENDING.md`, rules are never renumbered or removed outright. To
|
|
47
|
+
deprecate:
|
|
48
|
+
|
|
49
|
+
1. Mark the rule in `VALIDATION_RULES.md` with a `**Deprecated as of
|
|
50
|
+
vX.Y.0** — superseded by Rule N` note at the top of its section, but
|
|
51
|
+
leave the rule's content in place for historical reference.
|
|
52
|
+
2. Stop invoking it from `SKILL.md`'s Execution Steps.
|
|
53
|
+
3. Note the deprecation and its replacement in `CHANGELOG.md`.
|
|
54
|
+
4. This is a MAJOR bump if any report the rule used to appear in changes
|
|
55
|
+
shape as a result (it usually does).
|
package/.github/skills/test-case-validator/examples/example-1-manual-qa-ecommerce/input-brd.md
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# Business Requirement Document — Checkout Module
|
|
2
|
+
|
|
3
|
+
## RQ-10 — Discount Code Calculation
|
|
4
|
+
|
|
5
|
+
The system MUST calculate the discounted total as:
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
discountedTotal = subtotal - (subtotal * discountPercent / 100)
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
Discount codes are percentage-based only in this release (no flat-amount
|
|
12
|
+
codes). `discountPercent` is an integer between 1 and 100 inclusive. A code
|
|
13
|
+
with `discountPercent` outside this range is invalid and MUST be rejected
|
|
14
|
+
before the calculation runs.
|
|
15
|
+
|
|
16
|
+
## RQ-11 — Discount Code Eligibility
|
|
17
|
+
|
|
18
|
+
A discount code is valid only if all of the following hold:
|
|
19
|
+
- It exists in the active codes table.
|
|
20
|
+
- Its expiry date is on or after today.
|
|
21
|
+
- It has not already been redeemed by this account (single-use codes only
|
|
22
|
+
in this release).
|
|
23
|
+
|
|
24
|
+
## RQ-12 — Payment Failure Handling
|
|
25
|
+
|
|
26
|
+
On any payment gateway failure, the order MUST NOT be created, and the
|
|
27
|
+
cart's contents MUST be preserved so the shopper can retry without
|
|
28
|
+
re-adding items. The specific failure reason (insufficient funds, card
|
|
29
|
+
declined, network timeout) MUST be surfaced to the shopper per RQ-13.
|
|
30
|
+
|
|
31
|
+
## RQ-13 — Payment Failure Messaging
|
|
32
|
+
|
|
33
|
+
| Failure Reason | Message Shown |
|
|
34
|
+
|---|---|
|
|
35
|
+
| Insufficient funds | "Your payment was declined due to insufficient funds." |
|
|
36
|
+
| Card declined (other) | "Your card was declined. Please try a different payment method." |
|
|
37
|
+
| Network timeout (>15s) | "We couldn't confirm your payment. Please try again." |
|
|
38
|
+
|
|
39
|
+
## RQ-14 — Audit Logging
|
|
40
|
+
|
|
41
|
+
Every discount-code application attempt (successful or rejected) MUST be
|
|
42
|
+
logged with: account ID, code, timestamp, and outcome, for fraud-monitoring
|
|
43
|
+
purposes.
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
Test Case ID,Title,Module,Requirement ID,User Story,Preconditions,Test Data,Steps,Expected Result,Priority,Severity,Test Type,Automation Candidate,Owner,Status
|
|
2
|
+
TC-001,Apply valid 10% discount code,Checkout,RQ-10,US-01,Cart subtotal is 1000,"code=SAVE10, discountPercent=10",Add code SAVE10 and apply,Total shows 900,High,High,Positive,Yes,QA-1,Ready
|
|
3
|
+
TC-002,Apply invalid discount code,Checkout,RQ-11,US-01,Cart subtotal is 1000,code=FAKE20 (not in active codes table),Add code FAKE20 and apply,Error shown; total remains 1000,High,Medium,Negative,Yes,QA-1,Ready
|
|
4
|
+
TC-003,Remove an applied discount code,Checkout,US-01,US-01,Code SAVE10 already applied,code=SAVE10,Tap remove on the applied code,Total reverts to 1000,Medium,Low,Positive,Yes,QA-1,Ready
|
|
5
|
+
TC-004,Discount boundary - minimum percent,Checkout,RQ-10,,Cart subtotal is 1000,discountPercent=1,Apply a code with discountPercent=1,Total shows 990,Medium,Low,Boundary,Yes,QA-2,Ready
|
|
6
|
+
TC-005,Discount boundary - maximum percent,Checkout,RQ-10,,Cart subtotal is 1000,discountPercent=100,Apply a code with discountPercent=100,Total shows 0,Medium,Low,Boundary,Yes,QA-2,Ready
|
|
7
|
+
TC-006,Apply code not in active codes table,Checkout,RQ-11,US-01,Cart subtotal is 1000,code=FAKE20 (not in active codes table),Add code FAKE20 and apply,Error shown; total remains 1000,High,Medium,Negative,Yes,QA-2,Ready
|
|
8
|
+
TC-007,Payment fails due to insufficient funds,Checkout,RQ-12; RQ-13,US-02,Cart has items; payment method has insufficient funds,payment_method=test_card_insufficient_funds,Submit payment,"""Your payment was declined due to insufficient funds."" shown; order not created; cart preserved",High,High,Negative,Yes,QA-3,Ready
|
|
9
|
+
TC-008,Discount code expired,Checkout,RQ-11,US-01,Code EXPIRED5 exists with expiry date in the past,code=EXPIRED5,Add code EXPIRED5 and apply,Error shown; total remains unchanged,Medium,Medium,Negative,Yes,QA-2,Ready
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# User Story — Checkout Discount Application
|
|
2
|
+
|
|
3
|
+
**US-01**: As a shopper, I want a valid discount code applied to my cart
|
|
4
|
+
total at checkout, so that I pay the discounted price before confirming my
|
|
5
|
+
order.
|
|
6
|
+
|
|
7
|
+
Priority: P1
|
|
8
|
+
|
|
9
|
+
**Acceptance Criteria**:
|
|
10
|
+
1. Given a cart with a subtotal of ₹1,000 and a valid 10%-off code, when the
|
|
11
|
+
code is applied, then the displayed total is ₹900.
|
|
12
|
+
2. Given an invalid or expired discount code, when the shopper attempts to
|
|
13
|
+
apply it, then an error message is shown and the total remains
|
|
14
|
+
unchanged.
|
|
15
|
+
3. Given a valid discount code already applied, when the shopper removes
|
|
16
|
+
it, then the total reverts to the original subtotal.
|
|
17
|
+
|
|
18
|
+
**US-02**: As a shopper, I want to see a clear error if my payment fails, so
|
|
19
|
+
that I understand whether to retry or use a different payment method.
|
|
20
|
+
|
|
21
|
+
Priority: P2
|
|
22
|
+
|
|
23
|
+
**Acceptance Criteria**:
|
|
24
|
+
1. Given a payment attempt that fails due to insufficient funds, when the
|
|
25
|
+
failure response is received, then a specific "insufficient funds"
|
|
26
|
+
message is shown.
|
|
27
|
+
2. Given a payment attempt that fails due to a network timeout, when no
|
|
28
|
+
response is received within 15 seconds, then a generic "please try
|
|
29
|
+
again" message is shown and the order is not created.
|
package/.github/skills/test-case-validator/examples/example-1-manual-qa-ecommerce/output-report.md
ADDED
|
@@ -0,0 +1,303 @@
|
|
|
1
|
+
# Test Case Validation Report — Checkout Discount & Payment Failure
|
|
2
|
+
|
|
3
|
+
Generated: 2026-07-08 · Project Profile: `manual_qa` (explicit) · BRD Mode: Separate BRD
|
|
4
|
+
|
|
5
|
+
## 1. Executive Summary
|
|
6
|
+
|
|
7
|
+
This validates 8 manually-authored test cases against 5 BRD requirements
|
|
8
|
+
(RQ-10–RQ-14) and 2 user stories (US-01, US-02, 5 acceptance criteria total).
|
|
9
|
+
**Headline finding**: the discount-calculation formula (RQ-10) is correctly
|
|
10
|
+
implemented and verified by its tests, but audit logging (RQ-14) — called
|
|
11
|
+
out in the BRD specifically for fraud monitoring — has zero test coverage,
|
|
12
|
+
and the payment-failure path (RQ-12/13) is only one-third tested against its
|
|
13
|
+
own documented failure-reason table.
|
|
14
|
+
|
|
15
|
+
**Scope**
|
|
16
|
+
|
|
17
|
+
| Category | Applicable? | Reason if N/A |
|
|
18
|
+
|---|---|---|
|
|
19
|
+
| All Rule 2–11 categories | Applicable | `manual_qa` profile disables no categories |
|
|
20
|
+
|
|
21
|
+
**Configuration used**: Project Profile `manual_qa` (explicit) · BRD Mode:
|
|
22
|
+
Separate BRD · Scoring weights: default.
|
|
23
|
+
|
|
24
|
+
## 2. Requirement Traceability Matrix
|
|
25
|
+
|
|
26
|
+
| Requirement ID | Requirement | User Story | Mapped Test Cases | Status | Observation |
|
|
27
|
+
|---|---|---|---|---|---|
|
|
28
|
+
| RQ-10 | Discount calculation formula | US-01 | TC-001 (T1), TC-004 (T1), TC-005 (T1) | Partial | Formula-verified and correct (see §12), but only 3 tests against a High-risk minimum of 5 (see §16) |
|
|
29
|
+
| RQ-11 | Discount eligibility (3 conditions) | US-01 | TC-002/TC-006 (T1, duplicate), TC-008 (T1) | Partial | 2 of 3 eligibility conditions tested (not-in-table, expired); "already redeemed by this account" is untested |
|
|
30
|
+
| RQ-12 | Payment failure — no order created, cart preserved | US-02 | TC-007 (T1) | Partial | Only the insufficient-funds path is tested; card-declined-other and network-timeout paths are not |
|
|
31
|
+
| RQ-13 | Payment failure messaging (3 reasons) | US-02 | TC-007 (T1) | Partial | Only 1 of 3 documented messages verified |
|
|
32
|
+
| RQ-14 | Audit logging of discount attempts | — | None | **Missing** | Zero test cases reference RQ-14 — orphan requirement |
|
|
33
|
+
| US-01-AC1 | Valid code → discounted total | US-01 | TC-001 (T1) | Full | — |
|
|
34
|
+
| US-01-AC2 | Invalid/expired code → error, total unchanged | US-01 | TC-002/TC-006 (T1), TC-008 (T1) | Full | Covered, though TC-002/TC-006 are an exact duplicate (see §14) |
|
|
35
|
+
| US-01-AC3 | Remove applied code → total reverts | US-01 | TC-003 (T1) | Full | — |
|
|
36
|
+
| US-02-AC1 | Insufficient-funds failure message | US-02 | TC-007 (T1) | Full | — |
|
|
37
|
+
| US-02-AC2 | Network-timeout (15s) failure message | US-02 | None | **Missing** | Orphan acceptance criterion |
|
|
38
|
+
|
|
39
|
+
No orphan test cases found — every one of TC-001–TC-008 maps to at least one
|
|
40
|
+
requirement.
|
|
41
|
+
|
|
42
|
+
## 3. User Story Validation
|
|
43
|
+
|
|
44
|
+
| Story | Priority | ACs Covered | Status |
|
|
45
|
+
|---|---|---|---|
|
|
46
|
+
| US-01 — Discount code application | P1 | 3/3 | Full |
|
|
47
|
+
| US-02 — Payment failure messaging | P2 | 1/2 | Partial |
|
|
48
|
+
|
|
49
|
+
## 4. BRD Validation
|
|
50
|
+
|
|
51
|
+
| Requirement | Status | Note |
|
|
52
|
+
|---|---|---|
|
|
53
|
+
| RQ-10 | Partial | See §2 |
|
|
54
|
+
| RQ-11 | Partial | See §2 |
|
|
55
|
+
| RQ-12 | Partial | See §2 |
|
|
56
|
+
| RQ-13 | Partial | See §2 |
|
|
57
|
+
| RQ-14 | Missing | See §2 |
|
|
58
|
+
|
|
59
|
+
## 5. Acceptance Criteria Validation
|
|
60
|
+
|
|
61
|
+
| AC | Positive | Negative | Boundary | Business Rule | Status |
|
|
62
|
+
|---|---|---|---|---|---|
|
|
63
|
+
| US-01-AC1 | ✓ TC-001 | — (n/a, this AC is the positive path) | ✓ TC-004/TC-005 (via RQ-10) | ✓ formula verified | Full |
|
|
64
|
+
| US-01-AC2 | n/a | ✓ TC-002/006, TC-008 | — | — | Full |
|
|
65
|
+
| US-01-AC3 | ✓ TC-003 | — | — | — | Full |
|
|
66
|
+
| US-02-AC1 | n/a | ✓ TC-007 | — | — | Full |
|
|
67
|
+
| US-02-AC2 | n/a | ✗ none | — | — | **Missing** |
|
|
68
|
+
|
|
69
|
+
## 6. Frontend Coverage Report
|
|
70
|
+
|
|
71
|
+
| Category | Status | Evidence |
|
|
72
|
+
|---|---|---|
|
|
73
|
+
| Error Message display | Full | TC-002, TC-007, TC-008 all assert specific message text |
|
|
74
|
+
| Field Validation | Missing | No test case exercises the discount-code input field itself (empty/whitespace/max-length) |
|
|
75
|
+
| Loading State | Missing | Payment-in-flight state not tested |
|
|
76
|
+
| Success Message | Partial | Discounted total is asserted (TC-001) but no explicit "code applied" confirmation UI is tested |
|
|
77
|
+
| Others (Navigation, Accessibility, Responsive, Theme, etc.) | Missing | Not referenced anywhere in the provided test cases |
|
|
78
|
+
|
|
79
|
+
## 7. Backend Coverage Report
|
|
80
|
+
|
|
81
|
+
| Category | Status | Evidence |
|
|
82
|
+
|---|---|---|
|
|
83
|
+
| Business Logic / Calculations | Full | TC-001, TC-004, TC-005 |
|
|
84
|
+
| Data Validation | Partial | Code-existence and expiry checked; single-use/already-redeemed not checked |
|
|
85
|
+
| API/Payment Gateway Failure Handling | Partial | Only insufficient-funds path (TC-007) |
|
|
86
|
+
| Audit Trail / Logging | Missing | RQ-14 — see §2 |
|
|
87
|
+
| Retry / Timeout | Missing | Network-timeout path (US-02-AC2) untested |
|
|
88
|
+
|
|
89
|
+
## 8. Functional Coverage Report
|
|
90
|
+
|
|
91
|
+
| Dimension | Status |
|
|
92
|
+
|---|---|
|
|
93
|
+
| Positive | Full |
|
|
94
|
+
| Negative | Partial — payment-failure negative paths incomplete |
|
|
95
|
+
| Boundary | Full — RQ-10's 1% and 100% boundaries both tested |
|
|
96
|
+
| Business Rule | Partial — see §12 |
|
|
97
|
+
|
|
98
|
+
## 9. API Coverage
|
|
99
|
+
|
|
100
|
+
Not applicable as a distinct section beyond §7 — this example has no
|
|
101
|
+
separately-documented API contract (the BRD describes payment-gateway
|
|
102
|
+
behavior at the business-rule level, not as an API spec). If a future
|
|
103
|
+
version of this BRD adds explicit request/response contracts, re-run this
|
|
104
|
+
section against them directly.
|
|
105
|
+
|
|
106
|
+
## 10. Database Coverage
|
|
107
|
+
|
|
108
|
+
| Category | Status | Evidence |
|
|
109
|
+
|---|---|---|
|
|
110
|
+
| Discount code redemption record (single-use enforcement) | Missing | No test verifies a redeemed code is marked as such / rejected on reuse |
|
|
111
|
+
| Audit log persistence (RQ-14) | Missing | See §2 |
|
|
112
|
+
|
|
113
|
+
## 11. Security Coverage
|
|
114
|
+
|
|
115
|
+
No explicit security requirements in this BRD beyond fraud-monitoring
|
|
116
|
+
(RQ-14, untested) and single-use code enforcement (RQ-11, partially
|
|
117
|
+
untested). Both are flagged in the Observation Report as High severity —
|
|
118
|
+
fraud-prevention controls with no verification are a security-relevant gap
|
|
119
|
+
even though the BRD doesn't use the word "security."
|
|
120
|
+
|
|
121
|
+
## 12. Business Rule Coverage
|
|
122
|
+
|
|
123
|
+
| Rule | Source | Test Evidence | Formula/Logic Match? | Status |
|
|
124
|
+
|---|---|---|---|---|
|
|
125
|
+
| RQ-10 discount formula | BRD RQ-10 | TC-001 (1000, 10% → 900), TC-004 (1000, 1% → 990), TC-005 (1000, 100% → 0) | **Yes** — `1000 - (1000*10/100) = 900` ✓; `1000 - (1000*1/100) = 990` ✓; `1000 - (1000*100/100) = 0` ✓ | Full |
|
|
126
|
+
| RQ-11 eligibility (3 conditions) | BRD RQ-11 | TC-002/006 (not in table), TC-008 (expired) | Partially — 2 of 3 conditions have test evidence; "already redeemed" has none | Partial |
|
|
127
|
+
| RQ-12 no-order-on-failure + cart preservation | BRD RQ-12 | TC-007 | Yes, for the one path tested | Partial |
|
|
128
|
+
| RQ-13 message mapping (3 reasons) | BRD RQ-13 | TC-007 (insufficient funds only) | Yes, for the one path tested | Partial |
|
|
129
|
+
| RQ-14 audit logging | BRD RQ-14 | None | Not verifiable — no test exists | Missing |
|
|
130
|
+
|
|
131
|
+
## 13. Missing Scenario Report
|
|
132
|
+
|
|
133
|
+
| Category | Applicable? | Present? | Affected Requirement(s) | Note |
|
|
134
|
+
|---|---|---|---|---|
|
|
135
|
+
| Timeout | Yes | No | RQ-12, RQ-13, US-02-AC2 | Network-timeout failure path entirely untested |
|
|
136
|
+
| Duplicate Data | Yes | No | RQ-11 | "Already redeemed by this account" condition untested |
|
|
137
|
+
| Max/Min Length, Special Characters | Yes | No | RQ-11 (code format) | No test exercises malformed/oversized discount-code input |
|
|
138
|
+
| Audit/Logging verification | Yes | No | RQ-14 | See §2, §12 |
|
|
139
|
+
| Concurrent Users | Yes | No | RQ-11 | A single-use code redeemed by two concurrent requests is not tested (race condition on "already redeemed") |
|
|
140
|
+
|
|
141
|
+
## 14. Duplicate Test Case Report
|
|
142
|
+
|
|
143
|
+
| Test Case A | Test Case B | Classification | Recommendation |
|
|
144
|
+
|---|---|---|---|
|
|
145
|
+
| TC-002 | TC-006 | **Exact Duplicate** — identical requirement (RQ-11), identical test data (`FAKE20`), identical steps and expected result | Remove one. Recommend keeping TC-002 (created earlier, same owner as the rest of the US-01 set) and retiring TC-006, or repurposing TC-006 to instead cover the untested "already redeemed" condition from RQ-11 |
|
|
146
|
+
| TC-004 | TC-005 | Partial Duplicate — same requirement and shape, different boundary values (1% vs. 100%) | Legitimate boundary-pair testing, not redundant — no action needed |
|
|
147
|
+
|
|
148
|
+
## 15. Test Case Quality Report
|
|
149
|
+
|
|
150
|
+
| Test Case ID | Issue | Impact |
|
|
151
|
+
|---|---|---|
|
|
152
|
+
| TC-003 | `Requirement ID` field left blank; only mapped via the `User Story` column | Minor — traceability still resolves via US-01, but breaks any tooling that filters strictly by Requirement ID |
|
|
153
|
+
| TC-007 | `Requirement ID` field lists two IDs (`RQ-12; RQ-13`) in a format inconsistent with every other row's single-ID convention | Cosmetic, but worth standardizing (e.g. a dedicated multi-ID delimiter convention) before this suite grows |
|
|
154
|
+
|
|
155
|
+
## 16. Risk Coverage Report
|
|
156
|
+
|
|
157
|
+
| Requirement/Feature | Risk Tier (+ why) | Test Count | Meets Minimum (5)? | Gap |
|
|
158
|
+
|---|---|---|---|---|
|
|
159
|
+
| RQ-10 (money calculation) | High — direct monetary calculation | 3 | No | Add 2 more: a discount applied to a non-round subtotal (rounding behavior undocumented — flag this as an open question too), and a code with `discountPercent` outside 1–100 to confirm rejection |
|
|
160
|
+
| RQ-11 (eligibility, fraud-adjacent) | High — guards a single-use, potentially-abusable code | 3 (2 distinct + 1 duplicate) | No | Add "already redeemed" and a concurrent-redemption test |
|
|
161
|
+
| RQ-12/RQ-13 (payment failure) | High — irreversible action (order creation) + direct financial impact | 1 | No | Add card-declined-other and network-timeout scenarios |
|
|
162
|
+
| RQ-14 (audit logging) | High — explicit fraud-monitoring purpose stated in BRD | 0 | No | See §2 Observation |
|
|
163
|
+
|
|
164
|
+
## 17. Gated-Behavior Wiring Report
|
|
165
|
+
|
|
166
|
+
Not applicable in this example — this BRD/User Story pair describes no
|
|
167
|
+
feature-flag-, role-, or deep-link-gated behavior. (Discount-code validity
|
|
168
|
+
is a data-driven eligibility check, not a conditional feature toggle, so
|
|
169
|
+
Rule 16 does not apply here. See Example 2 for a worked Rule 16 finding.)
|
|
170
|
+
|
|
171
|
+
## 18. Observation Report
|
|
172
|
+
|
|
173
|
+
### RQ-14 (Audit Logging) has zero test coverage
|
|
174
|
+
**Severity**: High
|
|
175
|
+
**Evidence**: BRD RQ-14 states every discount-code attempt "MUST be logged
|
|
176
|
+
... for fraud-monitoring purposes." No test case in the provided suite (TC-
|
|
177
|
+
001 through TC-008) references RQ-14.
|
|
178
|
+
**Affected Requirement(s)**: RQ-14
|
|
179
|
+
**Affected Test Case(s)**: None — orphan requirement
|
|
180
|
+
**Impact**: A fraud-monitoring control explicitly called out in the BRD
|
|
181
|
+
could ship unverified; if the logging call is ever accidentally removed or
|
|
182
|
+
broken, nothing in this suite would catch it.
|
|
183
|
+
**Recommendation**: Add a test asserting a log entry is written on both a
|
|
184
|
+
successful and a rejected discount-code attempt, including account ID,
|
|
185
|
+
code, timestamp, and outcome.
|
|
186
|
+
**Suggested Test Case**: "Given a shopper applies an invalid discount code,
|
|
187
|
+
when the rejection is processed, then an audit log entry is written with
|
|
188
|
+
outcome=rejected, the account ID, the code, and a timestamp." Mirror for the
|
|
189
|
+
successful case with outcome=applied.
|
|
190
|
+
|
|
191
|
+
### Payment-failure path is two-thirds untested against its own documented table
|
|
192
|
+
**Severity**: High
|
|
193
|
+
**Evidence**: BRD RQ-13 documents 3 distinct failure messages (insufficient
|
|
194
|
+
funds, card declined, network timeout). Only TC-007 exists, covering
|
|
195
|
+
insufficient funds only.
|
|
196
|
+
**Affected Requirement(s)**: RQ-12, RQ-13, US-02-AC2
|
|
197
|
+
**Affected Test Case(s)**: TC-007 (partial)
|
|
198
|
+
**Impact**: A shopper whose card is declined for a reason other than
|
|
199
|
+
insufficient funds, or whose payment times out, may see the wrong message
|
|
200
|
+
or no message at all — this is a support-ticket generator in production
|
|
201
|
+
even though it wouldn't crash anything.
|
|
202
|
+
**Recommendation**: Add the two missing failure-reason test cases before
|
|
203
|
+
this ships.
|
|
204
|
+
**Suggested Test Case**: "Given a payment attempt that times out after 15
|
|
205
|
+
seconds with no gateway response, when the timeout is reached, then 'We
|
|
206
|
+
couldn't confirm your payment. Please try again.' is shown and no order is
|
|
207
|
+
created."
|
|
208
|
+
|
|
209
|
+
### RQ-11's "already redeemed" eligibility condition is untested
|
|
210
|
+
**Severity**: Medium
|
|
211
|
+
**Evidence**: BRD RQ-11 lists three eligibility conditions; only "exists in
|
|
212
|
+
active codes table" (TC-002/006) and "expiry date" (TC-008) have test
|
|
213
|
+
evidence.
|
|
214
|
+
**Affected Requirement(s)**: RQ-11
|
|
215
|
+
**Affected Test Case(s)**: TC-002, TC-006, TC-008 (all partial toward RQ-11)
|
|
216
|
+
**Impact**: A single-use code could potentially be reapplied by the same
|
|
217
|
+
account if this condition has a bug — direct financial/fraud exposure.
|
|
218
|
+
**Recommendation**: Add the missing condition test; consider also a
|
|
219
|
+
concurrent-redemption race-condition test given RQ-11's single-use intent.
|
|
220
|
+
**Suggested Test Case**: "Given code SAVE10 was already redeemed by this
|
|
221
|
+
account, when the shopper attempts to apply it again, then it is rejected
|
|
222
|
+
as already-used."
|
|
223
|
+
|
|
224
|
+
### TC-002 and TC-006 are an exact duplicate
|
|
225
|
+
**Severity**: Low
|
|
226
|
+
**Evidence**: See §14.
|
|
227
|
+
**Affected Requirement(s)**: RQ-11
|
|
228
|
+
**Affected Test Case(s)**: TC-002, TC-006
|
|
229
|
+
**Impact**: Maintenance overhead only — no functional risk.
|
|
230
|
+
**Recommendation**: Retire TC-006 or repurpose it for the "already
|
|
231
|
+
redeemed" gap above, which needs a test case anyway.
|
|
232
|
+
**Suggested Test Case**: N/A (this observation recommends removing/
|
|
233
|
+
repurposing, not adding).
|
|
234
|
+
|
|
235
|
+
## 19. Recommendations
|
|
236
|
+
|
|
237
|
+
1. **Add the audit-logging test (RQ-14)** — highest severity, currently zero
|
|
238
|
+
coverage of an explicitly-stated fraud control.
|
|
239
|
+
2. **Complete the payment-failure test set (RQ-12/13)** — two of three
|
|
240
|
+
documented failure paths are unverified.
|
|
241
|
+
3. **Add the "already redeemed" and concurrent-redemption tests (RQ-11)** —
|
|
242
|
+
closes a fraud-adjacent gap and meets the High-risk minimum.
|
|
243
|
+
4. **Repurpose TC-006** into the "already redeemed" test from #3 instead of
|
|
244
|
+
leaving it as a duplicate.
|
|
245
|
+
5. **Standardize the `Requirement ID` field convention** (single ID per row,
|
|
246
|
+
or a documented multi-ID delimiter) — low effort, prevents future
|
|
247
|
+
traceability tooling issues.
|
|
248
|
+
|
|
249
|
+
## 20. Overall Quality Score
|
|
250
|
+
|
|
251
|
+
| Category | Weight | Fraction | Points |
|
|
252
|
+
|---|---|---|---|
|
|
253
|
+
| Requirement Traceability | 25 | 0.60 | 15 |
|
|
254
|
+
| Coverage | 20 | 0.65 | 13 |
|
|
255
|
+
| Acceptance Criteria | 15 | 0.80 | 12 |
|
|
256
|
+
| Frontend Coverage | 10 | 0.40 | 4 |
|
|
257
|
+
| Backend Coverage | 10 | 0.80 | 8 |
|
|
258
|
+
| Business Rules | 10 | 0.50 | 5 |
|
|
259
|
+
| Quality | 5 | 0.75 | 4 |
|
|
260
|
+
| Duplicates | 5 | 0.875 | 4 |
|
|
261
|
+
| **Total** | | | **65** |
|
|
262
|
+
|
|
263
|
+
## Final Summary
|
|
264
|
+
|
|
265
|
+
TEST CASE VALIDATION SUMMARY
|
|
266
|
+
|
|
267
|
+
Project Profile: manual_qa
|
|
268
|
+
BRD Mode: Separate BRD
|
|
269
|
+
|
|
270
|
+
Total Requirements: 5
|
|
271
|
+
Covered Requirements: 4 (0 Full + 4 Partial)
|
|
272
|
+
Missing Requirements: 1
|
|
273
|
+
|
|
274
|
+
Total User Stories: 2
|
|
275
|
+
Covered User Stories: 2 (1 Full + 1 Partial)
|
|
276
|
+
|
|
277
|
+
Total Acceptance Criteria: 5
|
|
278
|
+
Covered Acceptance Criteria: 4
|
|
279
|
+
|
|
280
|
+
Total Test Cases: 8
|
|
281
|
+
|
|
282
|
+
Requirement Coverage: 60%
|
|
283
|
+
Acceptance Criteria Coverage: 80%
|
|
284
|
+
Frontend Coverage: 40%
|
|
285
|
+
Backend Coverage: 80%
|
|
286
|
+
Functional Coverage: ~70%
|
|
287
|
+
Negative Coverage: 60%
|
|
288
|
+
Boundary Coverage: 100%
|
|
289
|
+
Business Rule Coverage: 50%
|
|
290
|
+
API Coverage: N/A — no separately-documented API contract in this example
|
|
291
|
+
Database Coverage: 0%
|
|
292
|
+
Security Coverage: Low (2 High-severity gaps: RQ-14, RQ-11 redemption reuse)
|
|
293
|
+
Automation Coverage: 100% (all 8 marked "Automation Candidate: Yes")
|
|
294
|
+
|
|
295
|
+
Duplicate Test Cases: 1 exact, 1 partial (legitimate boundary pair)
|
|
296
|
+
|
|
297
|
+
Missing Scenarios: 5 categories (see Section 13)
|
|
298
|
+
|
|
299
|
+
Gated-Behavior Wiring Gaps: N/A — no gated behavior in this example
|
|
300
|
+
|
|
301
|
+
Overall Quality Score: 65/100
|
|
302
|
+
|
|
303
|
+
Status: **FAIL**
|
package/.github/skills/test-case-validator/examples/example-2-automated-frontend-suite/input-spec.md
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# Feature Specification: Beta Features Toggle
|
|
2
|
+
|
|
3
|
+
**Status**: Draft — no separate BRD exists for this feature; this document
|
|
4
|
+
is the sole source of requirements (Combined Spec Mode applies).
|
|
5
|
+
|
|
6
|
+
## User Scenarios & Testing
|
|
7
|
+
|
|
8
|
+
### User Story 1 - Enable Beta Features (Priority: P2)
|
|
9
|
+
|
|
10
|
+
As a user, I want to enable beta features from Settings, so I can access
|
|
11
|
+
early functionality including a Beta Dashboard.
|
|
12
|
+
|
|
13
|
+
**Acceptance Scenarios**:
|
|
14
|
+
|
|
15
|
+
1. **Given** the Beta Features toggle is off, **When** I turn it on,
|
|
16
|
+
**Then** my preference is persisted and the Home screen shows a Beta
|
|
17
|
+
Dashboard entry card.
|
|
18
|
+
2. **Given** the toggle is on, **When** I turn it off, **Then** the entry
|
|
19
|
+
card disappears from Home and my preference is persisted as off.
|
|
20
|
+
3. **Given** the beta-features flag is off, **When** I navigate directly to
|
|
21
|
+
the Beta Dashboard route via a deep link, **Then** I am redirected to
|
|
22
|
+
Home instead of seeing the Beta Dashboard.
|
|
23
|
+
|
|
24
|
+
## Requirements
|
|
25
|
+
|
|
26
|
+
### Functional Requirements
|
|
27
|
+
|
|
28
|
+
- **FR-001**: The Settings screen MUST render a "Beta Features" toggle,
|
|
29
|
+
defaulting to off for users who have never set a preference.
|
|
30
|
+
- **FR-002**: Toggling "Beta Features" MUST persist the new preference
|
|
31
|
+
value immediately.
|
|
32
|
+
- **FR-003**: The Home screen MUST show a Beta Dashboard entry card only
|
|
33
|
+
when the beta-features preference is true, and MUST hide it otherwise.
|
|
34
|
+
Tapping the entry card MUST navigate to the Beta Dashboard route.
|
|
35
|
+
- **FR-004**: Direct navigation to the Beta Dashboard route (e.g. via a deep
|
|
36
|
+
link) MUST redirect to Home when the beta-features preference is false.
|
|
37
|
+
|
|
38
|
+
## Success Criteria
|
|
39
|
+
|
|
40
|
+
- **SC-001**: A user who has never touched the toggle sees no Beta
|
|
41
|
+
Dashboard entry card on Home.
|
|
42
|
+
- **SC-002**: Toggling on and reloading the app (simulated preference
|
|
43
|
+
persistence) still shows the entry card.
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# Test Case Input — Automated Suite Index
|
|
2
|
+
|
|
3
|
+
`TEST_CASE_INPUT`: `src/features/{settings,home,beta-dashboard}/**/*.test.{ts,tsx}`
|
|
4
|
+
|
|
5
|
+
This represents the automated test source the skill parses per
|
|
6
|
+
`prompts/03-extraction-test-cases.md` §B. In a real run, the skill reads the
|
|
7
|
+
actual files; this index is the flattened summary used to keep this example
|
|
8
|
+
readable.
|
|
9
|
+
|
|
10
|
+
```
|
|
11
|
+
src/features/settings/domain/services/betaFeaturePreference.test.ts
|
|
12
|
+
describe('betaFeaturePreference')
|
|
13
|
+
it('persists true when toggled on (FR-002)')
|
|
14
|
+
it('persists false when toggled off (FR-002)')
|
|
15
|
+
it('defaults to false when no preference has ever been set (FR-001)')
|
|
16
|
+
|
|
17
|
+
src/features/settings/presentation/components/BetaFeatureToggle.test.tsx
|
|
18
|
+
describe('BetaFeatureToggle')
|
|
19
|
+
it('renders as off by default')
|
|
20
|
+
it('calls onToggle with the new value when clicked')
|
|
21
|
+
|
|
22
|
+
src/features/home/presentation/components/BetaDashboardEntryCard.test.tsx
|
|
23
|
+
describe('BetaDashboardEntryCard')
|
|
24
|
+
it('renders the entry card label')
|
|
25
|
+
it('calls onClick when tapped')
|
|
26
|
+
|
|
27
|
+
src/features/home/presentation/screens/HomeScreen.test.tsx
|
|
28
|
+
describe('HomeScreen')
|
|
29
|
+
it('shows the standard home content')
|
|
30
|
+
it('shows the refresh button')
|
|
31
|
+
// note: no test in this file sets the real beta-features preference
|
|
32
|
+
// true/false and asserts the entry card's presence/absence
|
|
33
|
+
|
|
34
|
+
src/features/beta-dashboard/presentation/routes/betaDashboardGuard.test.ts
|
|
35
|
+
describe('betaDashboardGuard')
|
|
36
|
+
it('redirects to home when the beta-features preference is false (FR-004)')
|
|
37
|
+
it('allows access when the beta-features preference is true (FR-004)')
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## Notes for the Extraction Step
|
|
41
|
+
|
|
42
|
+
- `betaFeaturePreference.test.ts`'s three tests carry explicit `(FR-NNN)`
|
|
43
|
+
tags → **Tier 1** mapping.
|
|
44
|
+
- `BetaFeatureToggle.test.tsx` and `BetaDashboardEntryCard.test.tsx` have no
|
|
45
|
+
inline tags, but live in the module structurally implied by FR-001/FR-003
|
|
46
|
+
→ **Tier 2** structural mapping, `confirmed`.
|
|
47
|
+
- `HomeScreen.test.tsx`'s two tests ("standard home content," "refresh
|
|
48
|
+
button") are **pre-existing Home-screen tests unrelated to this feature**
|
|
49
|
+
— they do not mention beta features, toggles, or the entry card at all.
|
|
50
|
+
The extraction step correctly excludes them from this feature's RTM
|
|
51
|
+
rather than flagging them as orphans; they simply belong to a different,
|
|
52
|
+
out-of-scope requirement set. This distinction matters: not every test in
|
|
53
|
+
a shared file is automatically "in scope" for the feature being audited.
|
|
54
|
+
- `betaDashboardGuard.test.ts`'s two tests are the actual **integration-level**
|
|
55
|
+
evidence for FR-004 — they exercise the real route guard reading the real
|
|
56
|
+
preference value, not a mocked/injected condition.
|