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.
Files changed (223) hide show
  1. package/.github/skills/boiler-project-generator/SKILL.md +103 -0
  2. package/.github/skills/boiler-project-generator/assets/templates/android/README.md +3 -0
  3. package/.github/skills/boiler-project-generator/assets/templates/angular/README.md +3 -0
  4. package/.github/skills/boiler-project-generator/assets/templates/flutter/README.md +3 -0
  5. package/.github/skills/boiler-project-generator/assets/templates/ios/README.md +3 -0
  6. package/.github/skills/boiler-project-generator/assets/templates/react/README.md +3 -0
  7. package/.github/skills/boiler-project-generator/assets/templates/react-native/README.md +3 -0
  8. package/.github/skills/boiler-project-generator/assets/templates/react-native/api-setup.ts +76 -0
  9. package/.github/skills/boiler-project-generator/assets/templates/react-native/component-primary-button.tsx +29 -0
  10. package/.github/skills/boiler-project-generator/assets/templates/react-native/env-config.env +4 -0
  11. package/.github/skills/boiler-project-generator/assets/templates/react-native/feature-auth-screen.tsx +45 -0
  12. package/.github/skills/boiler-project-generator/assets/templates/react-native/feature-dashboard-screen.tsx +45 -0
  13. package/.github/skills/boiler-project-generator/assets/templates/react-native/feature-profile-screen.tsx +45 -0
  14. package/.github/skills/boiler-project-generator/assets/templates/react-native/hook-use-app-boot.ts +11 -0
  15. package/.github/skills/boiler-project-generator/assets/templates/react-native/navigation-setup.tsx +25 -0
  16. package/.github/skills/boiler-project-generator/assets/templates/react-native/project-structure.md +24 -0
  17. package/.github/skills/boiler-project-generator/assets/templates/react-native/redux-hooks.ts +5 -0
  18. package/.github/skills/boiler-project-generator/assets/templates/react-native/redux-session-slice.ts +29 -0
  19. package/.github/skills/boiler-project-generator/assets/templates/react-native/redux-store.ts +15 -0
  20. package/.github/skills/boiler-project-generator/assets/templates/react-native/theme-index.ts +23 -0
  21. package/.github/skills/boiler-project-generator/assets/templates/react-native/utils-helpers.ts +7 -0
  22. package/.github/skills/boiler-project-generator/metadata.yaml +29 -0
  23. package/.github/skills/boiler-project-generator/references/android.md +19 -0
  24. package/.github/skills/boiler-project-generator/references/angular.md +14 -0
  25. package/.github/skills/boiler-project-generator/references/flutter.md +17 -0
  26. package/.github/skills/boiler-project-generator/references/ios.md +17 -0
  27. package/.github/skills/boiler-project-generator/references/react-native.md +103 -0
  28. package/.github/skills/boiler-project-generator/references/react.md +17 -0
  29. package/.github/skills/boiler-project-generator/scripts/angular.js +43 -0
  30. package/.github/skills/boiler-project-generator/scripts/generate-project.mjs +107 -0
  31. package/.github/skills/boiler-project-generator/scripts/init.js +105 -0
  32. package/.github/skills/boiler-project-generator/scripts/react-native.js +1041 -0
  33. package/.github/skills/boiler-project-generator/scripts/react.js +32 -0
  34. package/.github/skills/clean-architecture-generator/SKILL.md +235 -0
  35. package/.github/skills/clean-architecture-generator/references/architecture-core.md +126 -0
  36. package/.github/skills/clean-architecture-generator/references/platform-angular.md +374 -0
  37. package/.github/skills/clean-architecture-generator/references/platform-flutter.md +366 -0
  38. package/.github/skills/clean-architecture-generator/references/platform-react-native.md +590 -0
  39. package/.github/skills/clean-architecture-generator/references/platform-react.md +261 -0
  40. package/.github/skills/code-test-coverage-analyzer/SKILL.md +1358 -0
  41. package/.github/skills/code-test-coverage-analyzer/assets/config-questionnaire.md +118 -0
  42. package/.github/skills/code-test-coverage-analyzer/assets/conflict-resolution-protocol.md +99 -0
  43. package/.github/skills/code-test-coverage-analyzer/assets/coverage-calculation-rules.md +294 -0
  44. package/.github/skills/code-test-coverage-analyzer/assets/multi-strategy-search.md +145 -0
  45. package/.github/skills/code-test-coverage-analyzer/assets/output-file-contracts.md +651 -0
  46. package/.github/skills/code-test-coverage-analyzer/assets/status-definitions.md +273 -0
  47. package/.github/skills/code-test-coverage-analyzer/examples/example-invocation.md +208 -0
  48. package/.github/skills/code-test-coverage-analyzer/references/android-patterns.md +229 -0
  49. package/.github/skills/code-test-coverage-analyzer/references/angular-patterns.md +177 -0
  50. package/.github/skills/code-test-coverage-analyzer/references/backend-patterns.md +383 -0
  51. package/.github/skills/code-test-coverage-analyzer/references/flutter-patterns.md +254 -0
  52. package/.github/skills/code-test-coverage-analyzer/references/ios-patterns.md +228 -0
  53. package/.github/skills/code-test-coverage-analyzer/references/react-native-patterns.md +431 -0
  54. package/.github/skills/code-test-coverage-analyzer/references/react-patterns.md +206 -0
  55. package/.github/skills/code-test-coverage-analyzer/scripts/detect-platform.ps1 +261 -0
  56. package/.github/skills/code-test-coverage-analyzer/scripts/scan-repository.ps1 +242 -0
  57. package/.github/skills/code-test-coverage-analyzer/templates/brd-compliance-row.md +107 -0
  58. package/.github/skills/code-test-coverage-analyzer/templates/test-case-row.md +130 -0
  59. package/.github/skills/code-test-coverage-analyzer/templates/user-story-compliance-row.md +170 -0
  60. package/.github/skills/custom-font-integrator/SKILL.md +373 -0
  61. package/.github/skills/custom-font-integrator/assets/FontTestScreen.js +150 -0
  62. package/.github/skills/custom-font-integrator/references/example-info-plist.xml +21 -0
  63. package/.github/skills/custom-font-integrator/scripts/setup-fonts.sh +99 -0
  64. package/.github/skills/encryption-decryption-utility/Instructions.md +282 -0
  65. package/.github/skills/encryption-decryption-utility/README.md +222 -0
  66. package/.github/skills/encryption-decryption-utility/SKILL.md +645 -0
  67. package/.github/skills/encryption-decryption-utility/assets/encryption-config-template.json +13 -0
  68. package/.github/skills/encryption-decryption-utility/assets/platform-matrix.json +180 -0
  69. package/.github/skills/encryption-decryption-utility/metadata.yaml +51 -0
  70. package/.github/skills/encryption-decryption-utility/references/android-crypto.md +157 -0
  71. package/.github/skills/encryption-decryption-utility/references/angular-crypto.md +130 -0
  72. package/.github/skills/encryption-decryption-utility/references/approach-1-webcrypto.md +95 -0
  73. package/.github/skills/encryption-decryption-utility/references/approach-2-rsa-aes-cbc.md +111 -0
  74. package/.github/skills/encryption-decryption-utility/references/approach-3-aes-sharedkey.md +114 -0
  75. package/.github/skills/encryption-decryption-utility/references/architecture.md +233 -0
  76. package/.github/skills/encryption-decryption-utility/references/backend-alignment.md +506 -0
  77. package/.github/skills/encryption-decryption-utility/references/dependency-guidance.md +234 -0
  78. package/.github/skills/encryption-decryption-utility/references/ec-implementation.md +832 -0
  79. package/.github/skills/encryption-decryption-utility/references/error-handling-playbook.md +234 -0
  80. package/.github/skills/encryption-decryption-utility/references/flutter-crypto.md +105 -0
  81. package/.github/skills/encryption-decryption-utility/references/ios-crypto.md +338 -0
  82. package/.github/skills/encryption-decryption-utility/references/native-rsa-implementation.md +373 -0
  83. package/.github/skills/encryption-decryption-utility/references/node-crypto.md +86 -0
  84. package/.github/skills/encryption-decryption-utility/references/react-crypto.md +105 -0
  85. package/.github/skills/encryption-decryption-utility/references/react-native-crypto.md +1001 -0
  86. package/.github/skills/encryption-decryption-utility/references/react-web-crypto.md +668 -0
  87. package/.github/skills/encryption-decryption-utility/references/security-checklist.md +176 -0
  88. package/.github/skills/encryption-decryption-utility/references/web-crypto.md +74 -0
  89. package/.github/skills/encryption-decryption-utility/scripts/detect.js +128 -0
  90. package/.github/skills/encryption-decryption-utility/scripts/install.js +1713 -0
  91. package/.github/skills/encryption-decryption-utility/scripts/setup.js +800 -0
  92. package/.github/skills/encryption-decryption-utility/template.md +241 -0
  93. package/.github/skills/encryption-decryption-utility/templates/config-questionnaire.md +467 -0
  94. package/.github/skills/encryption-decryption-utility/templates/delivery-checklist.md +206 -0
  95. package/.github/skills/encryption-decryption-utility/templates/implementation-plan.md +304 -0
  96. package/.github/skills/feature-generator/SKILL.MD +2741 -0
  97. package/.github/skills/feature-generator/assets/fingerprint-schema.json +385 -0
  98. package/.github/skills/feature-generator/assets/spec-template.md +172 -0
  99. package/.github/skills/feature-generator/assets/transform-rules.json +82 -0
  100. package/.github/skills/feature-generator/references/api-envelope-patterns.md +327 -0
  101. package/.github/skills/feature-generator/references/screen-logic-patterns.md +399 -0
  102. package/.github/skills/feature-generator/references/state-library-patterns.md +464 -0
  103. package/.github/skills/figma-ui-mapper/README.md +34 -0
  104. package/.github/skills/figma-ui-mapper/SKILL.md +101 -0
  105. package/.github/skills/figma-ui-mapper/assets/templates/component-map-template.md +30 -0
  106. package/.github/skills/figma-ui-mapper/assets/templates/generation-report-template.md +49 -0
  107. package/.github/skills/figma-ui-mapper/metadata.yaml +22 -0
  108. package/.github/skills/figma-ui-mapper/references/android.md +11 -0
  109. package/.github/skills/figma-ui-mapper/references/angular.md +18 -0
  110. package/.github/skills/figma-ui-mapper/references/capacitor.md +18 -0
  111. package/.github/skills/figma-ui-mapper/references/common.md +23 -0
  112. package/.github/skills/figma-ui-mapper/references/expo.md +18 -0
  113. package/.github/skills/figma-ui-mapper/references/flutter.md +18 -0
  114. package/.github/skills/figma-ui-mapper/references/frameworks/angular/rules.md +23 -0
  115. package/.github/skills/figma-ui-mapper/references/frameworks/capacitor/rules.md +23 -0
  116. package/.github/skills/figma-ui-mapper/references/frameworks/expo/rules.md +23 -0
  117. package/.github/skills/figma-ui-mapper/references/frameworks/flutter/rules.md +23 -0
  118. package/.github/skills/figma-ui-mapper/references/frameworks/ionic/rules.md +23 -0
  119. package/.github/skills/figma-ui-mapper/references/frameworks/kotlin-multiplatform/rules.md +23 -0
  120. package/.github/skills/figma-ui-mapper/references/frameworks/native-android/rules.md +23 -0
  121. package/.github/skills/figma-ui-mapper/references/frameworks/native-ios/rules.md +23 -0
  122. package/.github/skills/figma-ui-mapper/references/frameworks/next/rules.md +23 -0
  123. package/.github/skills/figma-ui-mapper/references/frameworks/nuxt/rules.md +23 -0
  124. package/.github/skills/figma-ui-mapper/references/frameworks/react/rules.md +19 -0
  125. package/.github/skills/figma-ui-mapper/references/frameworks/react-native/rules.md +23 -0
  126. package/.github/skills/figma-ui-mapper/references/frameworks/svelte/rules.md +23 -0
  127. package/.github/skills/figma-ui-mapper/references/frameworks/vue/rules.md +23 -0
  128. package/.github/skills/figma-ui-mapper/references/ionic.md +18 -0
  129. package/.github/skills/figma-ui-mapper/references/ios.md +11 -0
  130. package/.github/skills/figma-ui-mapper/references/kotlin-multiplatform.md +18 -0
  131. package/.github/skills/figma-ui-mapper/references/native-android.md +18 -0
  132. package/.github/skills/figma-ui-mapper/references/native-ios.md +18 -0
  133. package/.github/skills/figma-ui-mapper/references/next.md +18 -0
  134. package/.github/skills/figma-ui-mapper/references/nuxt.md +18 -0
  135. package/.github/skills/figma-ui-mapper/references/react-figma-guideline.md +21 -0
  136. package/.github/skills/figma-ui-mapper/references/react-native.md +18 -0
  137. package/.github/skills/figma-ui-mapper/references/react.md +18 -0
  138. package/.github/skills/figma-ui-mapper/references/script-usage.md +46 -0
  139. package/.github/skills/figma-ui-mapper/references/svelte.md +18 -0
  140. package/.github/skills/figma-ui-mapper/references/vue.md +18 -0
  141. package/.github/skills/figma-ui-mapper/references/workflow.md +74 -0
  142. package/.github/skills/figma-ui-mapper/scripts/generate-page-through-figma.js +635 -0
  143. package/.github/skills/figma-ui-mapper/scripts/generate-react-page-through-figma.js +4 -0
  144. package/.github/skills/frontend-task-breakdown/SKILL.md +734 -0
  145. package/.github/skills/md-file-converter/SKILL.md +291 -0
  146. package/.github/skills/md-file-converter/config/formats.json +114 -0
  147. package/.github/skills/md-file-converter/extractors/extract-docx.sh +120 -0
  148. package/.github/skills/md-file-converter/extractors/extract-eml.py +108 -0
  149. package/.github/skills/md-file-converter/extractors/extract-pdf.sh +97 -0
  150. package/.github/skills/md-file-converter/extractors/extract-pptx.py +143 -0
  151. package/.github/skills/md-file-converter/extractors/extract-xlsx.py +175 -0
  152. package/.github/skills/md-file-converter/scripts/check-tools.sh +47 -0
  153. package/.github/skills/md-file-converter/scripts/extract-archive.sh +83 -0
  154. package/.github/skills/md-file-converter/scripts/extract-ocr.sh +77 -0
  155. package/.github/skills/md-file-converter/scripts/get-metadata.sh +57 -0
  156. package/.github/skills/md-file-converter/templates/output.md +73 -0
  157. package/.github/skills/md-file-converter/templates/unsupported-object.md +6 -0
  158. package/.github/skills/mockAPI-contract-generator/SKILL.md +607 -0
  159. package/.github/skills/test-case-validator/CHANGELOG.md +155 -0
  160. package/.github/skills/test-case-validator/CONFIGURATION.md +130 -0
  161. package/.github/skills/test-case-validator/EXAMPLES.md +50 -0
  162. package/.github/skills/test-case-validator/QUALITY_SCORING.md +98 -0
  163. package/.github/skills/test-case-validator/README.md +111 -0
  164. package/.github/skills/test-case-validator/REPORT_TEMPLATE.md +116 -0
  165. package/.github/skills/test-case-validator/SKILL.md +209 -0
  166. package/.github/skills/test-case-validator/SYSTEM_PROMPT.md +127 -0
  167. package/.github/skills/test-case-validator/TRACEABILITY_ENGINE.md +152 -0
  168. package/.github/skills/test-case-validator/VALIDATION_RULES.md +411 -0
  169. package/.github/skills/test-case-validator/config/default.config.yaml +62 -0
  170. package/.github/skills/test-case-validator/docs/ARCHITECTURE.md +66 -0
  171. package/.github/skills/test-case-validator/docs/EXTENDING.md +85 -0
  172. package/.github/skills/test-case-validator/docs/FAQ.md +88 -0
  173. package/.github/skills/test-case-validator/docs/VERSIONING.md +55 -0
  174. package/.github/skills/test-case-validator/examples/example-1-manual-qa-ecommerce/input-brd.md +43 -0
  175. package/.github/skills/test-case-validator/examples/example-1-manual-qa-ecommerce/input-test-cases.csv +9 -0
  176. package/.github/skills/test-case-validator/examples/example-1-manual-qa-ecommerce/input-user-story.md +29 -0
  177. package/.github/skills/test-case-validator/examples/example-1-manual-qa-ecommerce/output-report.md +303 -0
  178. package/.github/skills/test-case-validator/examples/example-2-automated-frontend-suite/input-spec.md +43 -0
  179. package/.github/skills/test-case-validator/examples/example-2-automated-frontend-suite/input-test-files-index.md +56 -0
  180. package/.github/skills/test-case-validator/examples/example-2-automated-frontend-suite/output-report.md +274 -0
  181. package/.github/skills/test-case-validator/prompts/00-applicability-resolution.md +61 -0
  182. package/.github/skills/test-case-validator/prompts/01-extraction-user-story.md +58 -0
  183. package/.github/skills/test-case-validator/prompts/02-extraction-brd.md +64 -0
  184. package/.github/skills/test-case-validator/prompts/03-extraction-test-cases.md +92 -0
  185. package/.github/skills/test-case-validator/prompts/04-traceability-matrix.md +41 -0
  186. package/.github/skills/test-case-validator/prompts/05-coverage-analysis.md +46 -0
  187. package/.github/skills/test-case-validator/prompts/06-missing-scenario-detection.md +32 -0
  188. package/.github/skills/test-case-validator/prompts/07-duplicate-detection.md +36 -0
  189. package/.github/skills/test-case-validator/prompts/08-risk-analysis.md +39 -0
  190. package/.github/skills/test-case-validator/prompts/09-gated-wiring-validation.md +53 -0
  191. package/.github/skills/test-case-validator/prompts/10-observation-report.md +56 -0
  192. package/.github/skills/test-case-validator/prompts/11-final-report-assembly.md +57 -0
  193. package/.github/skills/test-case-validator/templates/coverage-table.md +25 -0
  194. package/.github/skills/test-case-validator/templates/executive-summary.md +38 -0
  195. package/.github/skills/test-case-validator/templates/final-summary-block.md +87 -0
  196. package/.github/skills/test-case-validator/templates/observation-entry.md +41 -0
  197. package/.github/skills/test-case-validator/templates/rtm-row.md +25 -0
  198. package/.github/skills/validation-engine-builder/README.md +50 -0
  199. package/.github/skills/validation-engine-builder/SKILL.md +241 -0
  200. package/.github/skills/validation-engine-builder/references/core.md +158 -0
  201. package/.github/skills/validation-engine-builder/references/platform-angular.md +166 -0
  202. package/.github/skills/validation-engine-builder/references/platform-flutter.md +118 -0
  203. package/.github/skills/validation-engine-builder/references/platform-react-native.md +170 -0
  204. package/.github/skills/validation-engine-builder/references/platform-react.md +94 -0
  205. package/.github/skills/validation-engine-builder/scripts/apply-to-project.js +80 -0
  206. package/.github/skills/validation-engine-builder/scripts/generate-angular.js +271 -0
  207. package/.github/skills/validation-engine-builder/scripts/generate-flutter.js +298 -0
  208. package/.github/skills/validation-engine-builder/scripts/generate-react-native.js +217 -0
  209. package/.github/skills/validation-engine-builder/scripts/generate-react.js +163 -0
  210. package/.github/skills/validation-engine-builder/scripts/install-deps.js +53 -0
  211. package/.github/skills/validation-engine-builder/scripts/shared/detect-platform.js +68 -0
  212. package/.github/skills/validation-engine-builder/scripts/shared/npm-deps.js +103 -0
  213. package/.github/skills/validation-engine-builder/scripts/shared/rhf-hook.js +43 -0
  214. package/.github/skills/validation-engine-builder/scripts/shared/ts-messages-regex.js +62 -0
  215. package/.github/skills/validation-engine-builder/scripts/shared/util.js +44 -0
  216. package/.github/skills/validation-engine-builder/scripts/shared/yup-schemas.js +80 -0
  217. package/.github/skills/validation-engine-builder/template.md +73 -0
  218. package/.github/skills/validation-engine-builder/templates/messages.json +22 -0
  219. package/.github/skills/validation-engine-builder/templates/regex.json +16 -0
  220. package/.github/skills/validation-engine-builder/templates/schemas.json +48 -0
  221. package/bin/index.js +145 -0
  222. package/package.json +22 -0
  223. 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).
@@ -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.
@@ -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**
@@ -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.